yh-report 2.0.4 → 2.0.6
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-2eebfa27.mjs → StatementDesign-38133b0d.mjs} +4180 -4085
- package/StatementDesign-38133b0d.mjs.map +1 -0
- package/{StatementDetail-9f40bb12.mjs → StatementDetail-d8dbaa85.mjs} +9 -10
- package/StatementDetail-d8dbaa85.mjs.map +1 -0
- package/{StatementList-c1b28d64.mjs → StatementList-7982c40b.mjs} +59 -58
- package/StatementList-7982c40b.mjs.map +1 -0
- package/index-56784c64.mjs +3303 -0
- package/index-56784c64.mjs.map +1 -0
- package/index.es.js +9 -43
- package/index.es.js.map +1 -1
- package/package.json +1 -1
- package/style.css +1 -1
- package/StatementDesign-2eebfa27.mjs.map +0 -1
- package/StatementDetail-9f40bb12.mjs.map +0 -1
- package/StatementList-c1b28d64.mjs.map +0 -1
- package/dayjs.min-fa6b7d57.mjs +0 -1262
- package/dayjs.min-fa6b7d57.mjs.map +0 -1
- package/report-run.vue_vue_type_style_index_0_lang-657964fa.mjs +0 -1985
- package/report-run.vue_vue_type_style_index_0_lang-657964fa.mjs.map +0 -1
|
@@ -1,15 +1,14 @@
|
|
|
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
|
-
import { useRoute as
|
|
3
|
-
import {
|
|
2
|
+
import { useRoute as l } from "vue-router";
|
|
3
|
+
import { k as u } from "./index-56784c64.mjs";
|
|
4
4
|
import "element-plus";
|
|
5
|
-
import "./dayjs.min-fa6b7d57.mjs";
|
|
6
5
|
import "@/libs/api.request.js";
|
|
7
6
|
import "lodash-es";
|
|
8
7
|
import "echarts";
|
|
9
|
-
const
|
|
8
|
+
const p = { class: "statement-detail-container" }, y = /* @__PURE__ */ o({
|
|
10
9
|
__name: "StatementDetail",
|
|
11
|
-
setup(
|
|
12
|
-
const n =
|
|
10
|
+
setup(_) {
|
|
11
|
+
const n = l(), t = a();
|
|
13
12
|
return i(() => {
|
|
14
13
|
var e;
|
|
15
14
|
(e = document.querySelector(".main-container")) == null || e.classList.add("statement-design-main");
|
|
@@ -18,12 +17,12 @@ const u = { class: "statement-detail-container" }, q = /* @__PURE__ */ o({
|
|
|
18
17
|
(e = document.querySelector(".main-container")) == null || e.classList.remove("statement-design-main");
|
|
19
18
|
}), m(() => {
|
|
20
19
|
t.value = n.params.id;
|
|
21
|
-
}), (e, f) => (s(), c("section",
|
|
22
|
-
d(
|
|
20
|
+
}), (e, f) => (s(), c("section", p, [
|
|
21
|
+
d(u, { id: t.value }, null, 8, ["id"])
|
|
23
22
|
]));
|
|
24
23
|
}
|
|
25
24
|
});
|
|
26
25
|
export {
|
|
27
|
-
|
|
26
|
+
y as default
|
|
28
27
|
};
|
|
29
|
-
//# sourceMappingURL=StatementDetail-
|
|
28
|
+
//# sourceMappingURL=StatementDetail-d8dbaa85.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementDetail-d8dbaa85.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/report-run.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,34 +1,35 @@
|
|
|
1
|
-
import { defineComponent as J, reactive as
|
|
1
|
+
import { defineComponent as J, reactive as S, ref as V, onMounted as I, watch as N, openBlock as P, createElementBlock as G, createElementVNode as f, createTextVNode as u, createVNode as n, unref as o, withCtx as a } from "vue";
|
|
2
2
|
import { useRouter as K } from "vue-router";
|
|
3
|
-
import { g as Q, c as W, s as U, d as X, a as Z } from "./
|
|
4
|
-
import { ElButton as c, ElForm as
|
|
3
|
+
import { g as Q, c as W, s as U, d as X, a as Z } from "./index-56784c64.mjs";
|
|
4
|
+
import { ElButton as c, ElForm as L, ElFormItem as b, ElInput as _, ElTable as ee, ElTableColumn as y, ElPagination as te, ElDialog as ne, ElMessage as v, ElLoading as oe, ElMessageBox as le } from "element-plus";
|
|
5
5
|
import "@/libs/api.request.js";
|
|
6
6
|
import "lodash-es";
|
|
7
|
-
|
|
7
|
+
import "echarts";
|
|
8
|
+
const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re = { class: "el-button is-text import-excel-button" }, de = /* @__PURE__ */ f("i", { class: "iconfont icon-antdesign" }, null, -1), se = /* @__PURE__ */ f("i", { class: "iconfont icon-view" }, null, -1), ue = /* @__PURE__ */ f("i", { class: "iconfont icon-edit-outline" }, null, -1), ce = /* @__PURE__ */ f("i", { class: "iconfont icon-delete" }, null, -1), pe = { class: "dialog-footer" }, we = /* @__PURE__ */ J({
|
|
8
9
|
__name: "StatementList",
|
|
9
|
-
setup(
|
|
10
|
-
const
|
|
11
|
-
|
|
10
|
+
setup(me) {
|
|
11
|
+
const $ = K(), r = S({
|
|
12
|
+
key: "",
|
|
12
13
|
pageSize: 10,
|
|
13
14
|
total: 0,
|
|
14
15
|
pageNumber: 1
|
|
15
|
-
}),
|
|
16
|
-
async function
|
|
16
|
+
}), h = V([]);
|
|
17
|
+
async function m(l = !1) {
|
|
17
18
|
l && (r.pageNumber = 1, r.total = 0);
|
|
18
19
|
const t = await Q(r);
|
|
19
|
-
|
|
20
|
+
h.value = t.data.list, r.total;
|
|
20
21
|
}
|
|
21
|
-
function
|
|
22
|
+
function E(l, t) {
|
|
22
23
|
let e = "", d = "链接";
|
|
23
24
|
t === "inner" ? (e = `${window.location.pathname}#/statementdetail/${l.id}`, d = "内部链接") : (e = `${window.location.origin}${window.location.pathname}#/statementdetail/${l.id}`, d = "外部链接"), W(e).then(() => {
|
|
24
|
-
|
|
25
|
+
v.success(d + "复制成功");
|
|
25
26
|
}).catch(() => {
|
|
26
|
-
|
|
27
|
+
v.error(d + "复制遇到问题");
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
|
-
const w =
|
|
30
|
+
const w = V([]), j = (l) => {
|
|
30
31
|
w.value = l;
|
|
31
|
-
},
|
|
32
|
+
}, z = async (l) => {
|
|
32
33
|
const t = l.target.files[0];
|
|
33
34
|
if (!t)
|
|
34
35
|
return;
|
|
@@ -37,23 +38,23 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
37
38
|
l.target.value = "";
|
|
38
39
|
try {
|
|
39
40
|
if (d.target) {
|
|
40
|
-
const
|
|
41
|
-
if (Array.isArray(
|
|
41
|
+
const p = JSON.parse(d.target.result);
|
|
42
|
+
if (Array.isArray(p) && p.every((s) => typeof s == "object" && "code" in s && "config" in s && "description" in s && "name" in s)) {
|
|
42
43
|
const s = oe.service({
|
|
43
44
|
fullscreen: !0,
|
|
44
|
-
text: `正在导入报表,共 ${
|
|
45
|
+
text: `正在导入报表,共 ${p.length} 个,请稍候...`
|
|
45
46
|
});
|
|
46
|
-
for (let g = 0; g <
|
|
47
|
-
s.setText(`正在保存第 ${g + 1} 个,共 ${
|
|
48
|
-
const x =
|
|
47
|
+
for (let g = 0; g < p.length; g++) {
|
|
48
|
+
s.setText(`正在保存第 ${g + 1} 个,共 ${p.length} 个,请稍候...`);
|
|
49
|
+
const x = p[g];
|
|
49
50
|
await U(x);
|
|
50
51
|
}
|
|
51
|
-
s.close(),
|
|
52
|
+
s.close(), m(!0);
|
|
52
53
|
} else
|
|
53
|
-
|
|
54
|
+
v.error("格式错误,请确保导入的文件未被修改过!");
|
|
54
55
|
}
|
|
55
56
|
} catch {
|
|
56
|
-
|
|
57
|
+
v.error("文件解析失败,请检查文件是否为有效的 JSON 格式!");
|
|
57
58
|
}
|
|
58
59
|
}, e.readAsText(t);
|
|
59
60
|
}, D = () => {
|
|
@@ -67,31 +68,31 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
67
68
|
})),
|
|
68
69
|
null,
|
|
69
70
|
2
|
|
70
|
-
), t = new Blob([l], { type: "application/json" }), e = URL.createObjectURL(t),
|
|
71
|
-
s.href = e, s.download =
|
|
71
|
+
), t = new Blob([l], { type: "application/json" }), e = URL.createObjectURL(t), p = `报表导出-${X().format("YYYYMMDDHHmm")}.json`, s = document.createElement("a");
|
|
72
|
+
s.href = e, s.download = p, document.body.appendChild(s), s.click(), document.body.removeChild(s), URL.revokeObjectURL(e);
|
|
72
73
|
} else
|
|
73
|
-
|
|
74
|
+
v.warning("请选择要操作的报表!");
|
|
74
75
|
};
|
|
75
76
|
function R(l) {
|
|
76
|
-
|
|
77
|
+
$.push(`/admin/statement/design/${l.id}`);
|
|
77
78
|
}
|
|
78
79
|
function F(l) {
|
|
79
|
-
|
|
80
|
+
$.push(`/admin/statement/detail/${l.id}`);
|
|
80
81
|
}
|
|
81
82
|
I(() => {
|
|
82
|
-
|
|
83
|
+
m(!0);
|
|
83
84
|
});
|
|
84
|
-
const
|
|
85
|
+
const k = V(!1), i = S({
|
|
85
86
|
id: void 0,
|
|
86
87
|
name: "",
|
|
87
88
|
code: "",
|
|
88
89
|
description: ""
|
|
89
90
|
});
|
|
90
91
|
function B() {
|
|
91
|
-
|
|
92
|
+
k.value = !0;
|
|
92
93
|
}
|
|
93
94
|
function T(l) {
|
|
94
|
-
|
|
95
|
+
k.value = !0, i.id = l.id, i.name = l.name, i.code = l.code, i.description = l.description;
|
|
95
96
|
}
|
|
96
97
|
function M(l) {
|
|
97
98
|
le.confirm("当前操作会删除选定的报表,确认继续吗?", "警告", {
|
|
@@ -99,30 +100,30 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
99
100
|
cancelButtonText: "取消",
|
|
100
101
|
type: "warning"
|
|
101
102
|
}).then(async () => {
|
|
102
|
-
(await Z(l.id)).data &&
|
|
103
|
+
(await Z(l.id)).data && m(!0);
|
|
103
104
|
});
|
|
104
105
|
}
|
|
105
106
|
function C() {
|
|
106
|
-
|
|
107
|
+
k.value = !1, i.id = void 0, i.name = "", i.code = "", i.description = "";
|
|
107
108
|
}
|
|
108
109
|
async function O() {
|
|
109
|
-
await U(i),
|
|
110
|
+
await U(i), m(!0), C();
|
|
110
111
|
}
|
|
111
112
|
function A() {
|
|
112
|
-
|
|
113
|
+
m(!1);
|
|
113
114
|
}
|
|
114
115
|
function Y() {
|
|
115
|
-
r.
|
|
116
|
+
r.key = "", m(!0);
|
|
116
117
|
}
|
|
117
118
|
return N(
|
|
118
119
|
() => r.pageNumber,
|
|
119
120
|
() => {
|
|
120
|
-
|
|
121
|
+
m();
|
|
121
122
|
}
|
|
122
123
|
), N(
|
|
123
124
|
() => r.pageSize,
|
|
124
125
|
() => {
|
|
125
|
-
|
|
126
|
+
m();
|
|
126
127
|
}
|
|
127
128
|
), (l, t) => (P(), G("section", ae, [
|
|
128
129
|
f("div", ie, [
|
|
@@ -130,7 +131,7 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
130
131
|
f("input", {
|
|
131
132
|
class: "import-excel-input",
|
|
132
133
|
type: "file",
|
|
133
|
-
onChange: t[0] || (t[0] = (e) =>
|
|
134
|
+
onChange: t[0] || (t[0] = (e) => z(e))
|
|
134
135
|
}, null, 32),
|
|
135
136
|
u(" 导入 ")
|
|
136
137
|
]),
|
|
@@ -152,13 +153,13 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
152
153
|
]),
|
|
153
154
|
_: 1
|
|
154
155
|
}),
|
|
155
|
-
n(o(
|
|
156
|
+
n(o(L), { inline: "" }, {
|
|
156
157
|
default: a(() => [
|
|
157
|
-
n(o(
|
|
158
|
+
n(o(b), { label: "报表名称" }, {
|
|
158
159
|
default: a(() => [
|
|
159
160
|
n(o(_), {
|
|
160
|
-
modelValue: r.
|
|
161
|
-
"onUpdate:modelValue": t[1] || (t[1] = (e) => r.
|
|
161
|
+
modelValue: r.key,
|
|
162
|
+
"onUpdate:modelValue": t[1] || (t[1] = (e) => r.key = e),
|
|
162
163
|
placeholder: "键入关键字搜索报表"
|
|
163
164
|
}, null, 8, ["modelValue"])
|
|
164
165
|
]),
|
|
@@ -186,8 +187,8 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
186
187
|
})
|
|
187
188
|
]),
|
|
188
189
|
n(o(ee), {
|
|
189
|
-
data:
|
|
190
|
-
onSelectionChange:
|
|
190
|
+
data: h.value,
|
|
191
|
+
onSelectionChange: j
|
|
191
192
|
}, {
|
|
192
193
|
default: a(() => [
|
|
193
194
|
n(o(y), {
|
|
@@ -224,7 +225,7 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
224
225
|
n(o(c), {
|
|
225
226
|
link: "",
|
|
226
227
|
title: "本系统前台页面嵌入地址",
|
|
227
|
-
onClick: (d) =>
|
|
228
|
+
onClick: (d) => E(e.row, "inner")
|
|
228
229
|
}, {
|
|
229
230
|
default: a(() => [
|
|
230
231
|
u(" 内部链接 ")
|
|
@@ -234,7 +235,7 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
234
235
|
n(o(c), {
|
|
235
236
|
link: "",
|
|
236
237
|
title: "其他系统嵌入地址",
|
|
237
|
-
onClick: (d) =>
|
|
238
|
+
onClick: (d) => E(e.row, "outside")
|
|
238
239
|
}, {
|
|
239
240
|
default: a(() => [
|
|
240
241
|
u(" 外部链接 ")
|
|
@@ -303,13 +304,13 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
303
304
|
layout: "sizes,prev,pager,next,total"
|
|
304
305
|
}, null, 8, ["page-size", "total", "current-page"]),
|
|
305
306
|
n(o(ne), {
|
|
306
|
-
modelValue:
|
|
307
|
-
"onUpdate:modelValue": t[10] || (t[10] = (e) =>
|
|
307
|
+
modelValue: k.value,
|
|
308
|
+
"onUpdate:modelValue": t[10] || (t[10] = (e) => k.value = e),
|
|
308
309
|
onClose: C,
|
|
309
310
|
title: i.id ? "编辑报表" : "新建报表"
|
|
310
311
|
}, {
|
|
311
312
|
footer: a(() => [
|
|
312
|
-
f("span",
|
|
313
|
+
f("span", pe, [
|
|
313
314
|
n(o(c), { onClick: C }, {
|
|
314
315
|
default: a(() => [
|
|
315
316
|
u("取消")
|
|
@@ -328,12 +329,12 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
328
329
|
])
|
|
329
330
|
]),
|
|
330
331
|
default: a(() => [
|
|
331
|
-
n(o(
|
|
332
|
+
n(o(L), {
|
|
332
333
|
model: i,
|
|
333
334
|
"label-width": "120"
|
|
334
335
|
}, {
|
|
335
336
|
default: a(() => [
|
|
336
|
-
n(o(
|
|
337
|
+
n(o(b), {
|
|
337
338
|
label: "报表代码",
|
|
338
339
|
required: ""
|
|
339
340
|
}, {
|
|
@@ -346,7 +347,7 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
346
347
|
]),
|
|
347
348
|
_: 1
|
|
348
349
|
}),
|
|
349
|
-
n(o(
|
|
350
|
+
n(o(b), {
|
|
350
351
|
label: "报表名称",
|
|
351
352
|
required: ""
|
|
352
353
|
}, {
|
|
@@ -359,7 +360,7 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
359
360
|
]),
|
|
360
361
|
_: 1
|
|
361
362
|
}),
|
|
362
|
-
n(o(
|
|
363
|
+
n(o(b), {
|
|
363
364
|
label: "描述",
|
|
364
365
|
required: ""
|
|
365
366
|
}, {
|
|
@@ -383,6 +384,6 @@ const ae = { class: "statement-list-container" }, ie = { class: "actions" }, re
|
|
|
383
384
|
}
|
|
384
385
|
});
|
|
385
386
|
export {
|
|
386
|
-
|
|
387
|
+
we as default
|
|
387
388
|
};
|
|
388
|
-
//# sourceMappingURL=StatementList-
|
|
389
|
+
//# sourceMappingURL=StatementList-7982c40b.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementList-7982c40b.mjs","sources":["../StatementList.vue"],"sourcesContent":["<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 <el-form inline>\n <el-form-item label=\"报表名称\">\n <el-input\n v-model=\"listForm.key\"\n placeholder=\"键入关键字搜索报表\"></el-input>\n </el-form-item>\n </el-form>\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 @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: 30px; 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, 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';\n\nconst router = useRouter();\n\n// @ts-ignore\nconst listForm = reactive({\n key: '',\n pageSize: 10,\n total: 0,\n pageNumber: 1,\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(listForm);\n data.value = res.data.list;\n listForm.total;\n}\n\nfunction copyLink(row, type) {\n let href = '';\n let hrefName = '链接';\n if (type === 'inner') {\n href = `${window.location.pathname}#/statementdetail/${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\nfunction toDesign(row) {\n router.push(`/admin/statement/design/${row.id}`);\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() {\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;\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 .el-form {\n flex: 1;\n margin: 0 10px;\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":["router","useRouter","listForm","reactive","data","ref","getStatementList","flag","res","getList","copyLink","row","type","href","hrefName","copyString","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","toView","onMounted","dialogFormVisible","form","toAddForm","toEditor","toDelete","ElMessageBox","del","cancelForm","saveForm","onSearch","onReset","watch"],"mappings":"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"}
|