yh-report 2.2.1 → 2.2.3
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-1426727d.mjs → StatementDesign-1b9b60e7.mjs} +4454 -4270
- package/StatementDesign-1b9b60e7.mjs.map +1 -0
- package/{StatementDetail-865222ad.mjs → StatementDetail-98e149b0.mjs} +6 -6
- package/{StatementDetail-865222ad.mjs.map → StatementDetail-98e149b0.mjs.map} +1 -1
- package/{StatementList-47f6f95e.mjs → StatementList-e9df7105.mjs} +139 -129
- package/StatementList-e9df7105.mjs.map +1 -0
- package/{index-fde3483a.mjs → index-16da52b7.mjs} +8758 -8667
- package/index-16da52b7.mjs.map +1 -0
- package/index.es.js +1 -1
- package/package.json +1 -1
- package/style.css +1 -1
- package/StatementDesign-1426727d.mjs.map +0 -1
- package/StatementList-47f6f95e.mjs.map +0 -1
- package/index-fde3483a.mjs.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { defineComponent as
|
|
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 {
|
|
3
|
+
import { n as u } from "./index-16da52b7.mjs";
|
|
4
4
|
import "element-plus";
|
|
5
5
|
import "@/libs/api.request.js";
|
|
6
6
|
import "lodash-es";
|
|
7
7
|
import "echarts";
|
|
8
|
-
const p = { class: "statement-detail-container" }, y = /* @__PURE__ */
|
|
8
|
+
const p = { class: "statement-detail-container" }, y = /* @__PURE__ */ o({
|
|
9
9
|
__name: "StatementDetail",
|
|
10
10
|
setup(_) {
|
|
11
|
-
const
|
|
11
|
+
const n = l(), t = a();
|
|
12
12
|
return i(() => {
|
|
13
13
|
var e;
|
|
14
14
|
(e = document.querySelector(".main-container")) == null || e.classList.add("statement-design-main");
|
|
@@ -16,7 +16,7 @@ const p = { class: "statement-detail-container" }, y = /* @__PURE__ */ n({
|
|
|
16
16
|
var e;
|
|
17
17
|
(e = document.querySelector(".main-container")) == null || e.classList.remove("statement-design-main");
|
|
18
18
|
}), m(() => {
|
|
19
|
-
t.value =
|
|
19
|
+
t.value = n.params.id;
|
|
20
20
|
}), (e, f) => (s(), c("section", p, [
|
|
21
21
|
d(u, { id: t.value }, null, 8, ["id"])
|
|
22
22
|
]));
|
|
@@ -25,4 +25,4 @@ const p = { class: "statement-detail-container" }, y = /* @__PURE__ */ n({
|
|
|
25
25
|
export {
|
|
26
26
|
y as default
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=StatementDetail-
|
|
28
|
+
//# sourceMappingURL=StatementDetail-98e149b0.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatementDetail-
|
|
1
|
+
{"version":3,"file":"StatementDetail-98e149b0.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,92 +1,102 @@
|
|
|
1
|
-
import { defineComponent as H, reactive as
|
|
2
|
-
import { useRouter as
|
|
3
|
-
import { g as
|
|
4
|
-
import { ElButton as
|
|
1
|
+
import { defineComponent as H, reactive as z, ref as S, onMounted as J, watch as U, openBlock as K, createElementBlock as I, createElementVNode as f, createTextVNode as u, createVNode as o, unref as n, withCtx as a, withKeys as G } from "vue";
|
|
2
|
+
import { useRouter as Q } from "vue-router";
|
|
3
|
+
import { g as W, s as j, d as X, a as Z } from "./index-16da52b7.mjs";
|
|
4
|
+
import { ElButton as p, ElFormItem as w, ElInput as _, ElTable as ee, ElTableColumn as v, ElPagination as te, ElDialog as oe, ElForm as ne, ElMessage as b, ElLoading as le, ElMessageBox as ae } from "element-plus";
|
|
5
5
|
import "@/libs/api.request.js";
|
|
6
6
|
import "lodash-es";
|
|
7
7
|
import "echarts";
|
|
8
|
-
|
|
8
|
+
function ie(C) {
|
|
9
|
+
if (navigator.clipboard && window.isSecureContext)
|
|
10
|
+
return navigator.clipboard.writeText(C), Promise.resolve();
|
|
11
|
+
{
|
|
12
|
+
let c = document.createElement("textarea");
|
|
13
|
+
c.value = C, 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
|
+
let i = document.execCommand("copy");
|
|
15
|
+
return c.remove(), i ? Promise.resolve() : Promise.reject(new Error("copy error"));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const re = { class: "statement-list-container" }, se = { class: "actions" }, de = { class: "el-button is-text import-excel-button" }, ue = { class: "form-context" }, ce = /* @__PURE__ */ f("i", { class: "iconfont icon-antdesign" }, null, -1), pe = /* @__PURE__ */ f("i", { class: "iconfont icon-view" }, null, -1), me = /* @__PURE__ */ f("i", { class: "iconfont icon-edit-outline" }, null, -1), fe = /* @__PURE__ */ f("i", { class: "iconfont icon-delete" }, null, -1), ge = { class: "dialog-footer" }, xe = /* @__PURE__ */ H({
|
|
9
19
|
__name: "StatementList",
|
|
10
|
-
setup(
|
|
11
|
-
const
|
|
20
|
+
setup(C) {
|
|
21
|
+
const c = Q(), i = z({
|
|
12
22
|
key: "",
|
|
13
23
|
pageSize: 10,
|
|
14
24
|
pageNumber: 1,
|
|
15
25
|
total: 0
|
|
16
|
-
}), $ =
|
|
17
|
-
async function
|
|
18
|
-
l && (
|
|
19
|
-
const t = await
|
|
20
|
-
key:
|
|
21
|
-
pageSize:
|
|
22
|
-
pageNumber:
|
|
26
|
+
}), $ = S([]);
|
|
27
|
+
async function g(l = !1) {
|
|
28
|
+
l && (i.pageNumber = 1, i.total = 0);
|
|
29
|
+
const t = await W({
|
|
30
|
+
key: i.key,
|
|
31
|
+
pageSize: i.pageSize,
|
|
32
|
+
pageNumber: i.pageNumber
|
|
23
33
|
});
|
|
24
|
-
$.value = t.data.list,
|
|
34
|
+
$.value = t.data.list, i.total = t.data.total;
|
|
25
35
|
}
|
|
26
|
-
function
|
|
27
|
-
let e = "",
|
|
28
|
-
t === "inner" ? (e = `innerStatementdetail/${l.id}`,
|
|
29
|
-
|
|
36
|
+
function E(l, t) {
|
|
37
|
+
let e = "", s = "链接";
|
|
38
|
+
t === "inner" ? (e = `innerStatementdetail/${l.id}`, s = "内部链接") : (e = `${window.location.origin}${window.location.pathname}#/statementdetail/${l.id}`, s = "外部链接"), ie(e).then(() => {
|
|
39
|
+
b.success(s + "复制成功");
|
|
30
40
|
}).catch(() => {
|
|
31
|
-
|
|
41
|
+
b.error(s + "复制遇到问题");
|
|
32
42
|
});
|
|
33
43
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
44
|
+
const x = S([]), D = (l) => {
|
|
45
|
+
x.value = l;
|
|
36
46
|
}, L = async (l) => {
|
|
37
47
|
const t = l.target.files[0];
|
|
38
48
|
if (!t)
|
|
39
49
|
return;
|
|
40
50
|
const e = new FileReader();
|
|
41
|
-
e.onload = async (
|
|
51
|
+
e.onload = async (s) => {
|
|
42
52
|
l.target.value = "";
|
|
43
53
|
try {
|
|
44
|
-
if (
|
|
45
|
-
const
|
|
46
|
-
if (Array.isArray(
|
|
47
|
-
const
|
|
54
|
+
if (s.target) {
|
|
55
|
+
const m = JSON.parse(s.target.result);
|
|
56
|
+
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 = le.service({
|
|
48
58
|
fullscreen: !0,
|
|
49
|
-
text: `正在导入报表,共 ${
|
|
59
|
+
text: `正在导入报表,共 ${m.length} 个,请稍候...`
|
|
50
60
|
});
|
|
51
|
-
for (let
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
await
|
|
61
|
+
for (let y = 0; y < m.length; y++) {
|
|
62
|
+
d.setText(`正在保存第 ${y + 1} 个,共 ${m.length} 个,请稍候...`);
|
|
63
|
+
const V = m[y];
|
|
64
|
+
await j(V);
|
|
55
65
|
}
|
|
56
|
-
|
|
66
|
+
d.close(), g(!0);
|
|
57
67
|
} else
|
|
58
|
-
|
|
68
|
+
b.error("格式错误,请确保导入的文件未被修改过!");
|
|
59
69
|
}
|
|
60
70
|
} catch {
|
|
61
|
-
|
|
71
|
+
b.error("文件解析失败,请检查文件是否为有效的 JSON 格式!");
|
|
62
72
|
}
|
|
63
73
|
}, e.readAsText(t);
|
|
64
|
-
},
|
|
65
|
-
if (
|
|
74
|
+
}, R = () => {
|
|
75
|
+
if (x.value.length > 0) {
|
|
66
76
|
const l = JSON.stringify(
|
|
67
|
-
|
|
68
|
-
code:
|
|
69
|
-
config:
|
|
77
|
+
x.value.map(({ code: y, config: V, description: Y, name: q }) => ({
|
|
78
|
+
code: y,
|
|
79
|
+
config: V,
|
|
70
80
|
description: Y,
|
|
71
81
|
name: q
|
|
72
82
|
})),
|
|
73
83
|
null,
|
|
74
84
|
2
|
|
75
|
-
), t = new Blob([l], { type: "application/json" }), e = URL.createObjectURL(t),
|
|
76
|
-
|
|
85
|
+
), t = new Blob([l], { type: "application/json" }), e = URL.createObjectURL(t), m = `报表导出-${X().format("YYYYMMDDHHmm")}.json`, d = document.createElement("a");
|
|
86
|
+
d.href = e, d.download = m, document.body.appendChild(d), d.click(), document.body.removeChild(d), URL.revokeObjectURL(e);
|
|
77
87
|
} else
|
|
78
|
-
|
|
88
|
+
b.warning("请选择要操作的报表!");
|
|
79
89
|
};
|
|
80
|
-
function R(l) {
|
|
81
|
-
V.push(`/admin/statement/design/${l.id}`);
|
|
82
|
-
}
|
|
83
90
|
function F(l) {
|
|
84
|
-
|
|
91
|
+
c.push(`/admin/statement/design/${l.id}`);
|
|
92
|
+
}
|
|
93
|
+
function T(l) {
|
|
94
|
+
c.push(`/admin/statement/detail/${l.id}`);
|
|
85
95
|
}
|
|
86
96
|
J(() => {
|
|
87
|
-
|
|
97
|
+
g(!0);
|
|
88
98
|
});
|
|
89
|
-
const k =
|
|
99
|
+
const k = S(!1), r = z({
|
|
90
100
|
id: void 0,
|
|
91
101
|
name: "",
|
|
92
102
|
code: "",
|
|
@@ -95,60 +105,60 @@ const ie = { class: "statement-list-container" }, re = { class: "actions" }, de
|
|
|
95
105
|
function B() {
|
|
96
106
|
k.value = !0;
|
|
97
107
|
}
|
|
98
|
-
function
|
|
99
|
-
k.value = !0,
|
|
108
|
+
function P(l) {
|
|
109
|
+
k.value = !0, r.id = l.id, r.name = l.name, r.code = l.code, r.description = l.description;
|
|
100
110
|
}
|
|
101
|
-
function
|
|
111
|
+
function A(l) {
|
|
102
112
|
ae.confirm("当前操作会删除选定的报表,确认继续吗?", "警告", {
|
|
103
113
|
confirmButtonText: "删除",
|
|
104
114
|
cancelButtonText: "取消",
|
|
105
115
|
type: "warning"
|
|
106
116
|
}).then(async () => {
|
|
107
|
-
(await Z(l.id)).data &&
|
|
117
|
+
(await Z(l.id)).data && g(!0);
|
|
108
118
|
});
|
|
109
119
|
}
|
|
110
|
-
function
|
|
111
|
-
k.value = !1,
|
|
120
|
+
function h() {
|
|
121
|
+
k.value = !1, r.id = void 0, r.name = "", r.code = "", r.description = "";
|
|
112
122
|
}
|
|
113
|
-
async function
|
|
114
|
-
await
|
|
123
|
+
async function M() {
|
|
124
|
+
await j(r), g(!0), h();
|
|
115
125
|
}
|
|
116
|
-
function
|
|
117
|
-
l && (l.preventDefault(), l.stopPropagation()),
|
|
126
|
+
function N(l) {
|
|
127
|
+
l && (l.preventDefault(), l.stopPropagation()), g(!1);
|
|
118
128
|
}
|
|
119
|
-
function
|
|
120
|
-
|
|
129
|
+
function O() {
|
|
130
|
+
i.key = "", g(!0);
|
|
121
131
|
}
|
|
122
|
-
return
|
|
123
|
-
() =>
|
|
132
|
+
return U(
|
|
133
|
+
() => i.pageNumber,
|
|
124
134
|
() => {
|
|
125
|
-
|
|
135
|
+
g();
|
|
126
136
|
}
|
|
127
|
-
),
|
|
128
|
-
() =>
|
|
137
|
+
), U(
|
|
138
|
+
() => i.pageSize,
|
|
129
139
|
() => {
|
|
130
|
-
|
|
140
|
+
g();
|
|
131
141
|
}
|
|
132
|
-
), (l, t) => (K(),
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
142
|
+
), (l, t) => (K(), I("section", re, [
|
|
143
|
+
f("div", se, [
|
|
144
|
+
f("div", de, [
|
|
145
|
+
f("input", {
|
|
136
146
|
class: "import-excel-input",
|
|
137
147
|
type: "file",
|
|
138
148
|
onChange: t[0] || (t[0] = (e) => L(e))
|
|
139
149
|
}, null, 32),
|
|
140
150
|
u(" 导入 ")
|
|
141
151
|
]),
|
|
142
|
-
o(n(
|
|
152
|
+
o(n(p), {
|
|
143
153
|
text: "",
|
|
144
|
-
onClick:
|
|
154
|
+
onClick: R
|
|
145
155
|
}, {
|
|
146
156
|
default: a(() => [
|
|
147
157
|
u(" 导出 ")
|
|
148
158
|
]),
|
|
149
159
|
_: 1
|
|
150
160
|
}),
|
|
151
|
-
o(n(
|
|
161
|
+
o(n(p), {
|
|
152
162
|
type: "primary",
|
|
153
163
|
onClick: B
|
|
154
164
|
}, {
|
|
@@ -157,30 +167,30 @@ const ie = { class: "statement-list-container" }, re = { class: "actions" }, de
|
|
|
157
167
|
]),
|
|
158
168
|
_: 1
|
|
159
169
|
}),
|
|
160
|
-
|
|
161
|
-
o(n(
|
|
170
|
+
f("div", ue, [
|
|
171
|
+
o(n(w), { label: "报表名称" }, {
|
|
162
172
|
default: a(() => [
|
|
163
173
|
o(n(_), {
|
|
164
|
-
modelValue:
|
|
165
|
-
"onUpdate:modelValue": t[1] || (t[1] = (e) =>
|
|
166
|
-
onKeyup:
|
|
174
|
+
modelValue: i.key,
|
|
175
|
+
"onUpdate:modelValue": t[1] || (t[1] = (e) => i.key = e),
|
|
176
|
+
onKeyup: G(N, ["enter"]),
|
|
167
177
|
placeholder: "键入关键字搜索报表"
|
|
168
178
|
}, null, 8, ["modelValue", "onKeyup"])
|
|
169
179
|
]),
|
|
170
180
|
_: 1
|
|
171
181
|
})
|
|
172
182
|
]),
|
|
173
|
-
o(n(
|
|
183
|
+
o(n(p), {
|
|
174
184
|
type: "primary",
|
|
175
|
-
onClick: t[2] || (t[2] = (e) =>
|
|
185
|
+
onClick: t[2] || (t[2] = (e) => N())
|
|
176
186
|
}, {
|
|
177
187
|
default: a(() => [
|
|
178
188
|
u(" 搜索 ")
|
|
179
189
|
]),
|
|
180
190
|
_: 1
|
|
181
191
|
}),
|
|
182
|
-
o(n(
|
|
183
|
-
onClick: t[3] || (t[3] = (e) =>
|
|
192
|
+
o(n(p), {
|
|
193
|
+
onClick: t[3] || (t[3] = (e) => O())
|
|
184
194
|
}, {
|
|
185
195
|
default: a(() => [
|
|
186
196
|
u("重置")
|
|
@@ -194,97 +204,97 @@ const ie = { class: "statement-list-container" }, re = { class: "actions" }, de
|
|
|
194
204
|
onSelectionChange: D
|
|
195
205
|
}, {
|
|
196
206
|
default: a(() => [
|
|
197
|
-
o(n(
|
|
207
|
+
o(n(v), {
|
|
198
208
|
type: "selection",
|
|
199
209
|
width: "50"
|
|
200
210
|
}),
|
|
201
|
-
o(n(
|
|
211
|
+
o(n(v), {
|
|
202
212
|
label: "#",
|
|
203
213
|
type: "index",
|
|
204
214
|
width: "66",
|
|
205
215
|
left: ""
|
|
206
216
|
}),
|
|
207
|
-
o(n(
|
|
208
|
-
label: "
|
|
217
|
+
o(n(v), {
|
|
218
|
+
label: "报表代码",
|
|
209
219
|
"min-width": "100",
|
|
210
220
|
prop: "code"
|
|
211
221
|
}),
|
|
212
|
-
o(n(
|
|
213
|
-
label: "
|
|
222
|
+
o(n(v), {
|
|
223
|
+
label: "报表名称",
|
|
214
224
|
"min-width": "100",
|
|
215
225
|
prop: "name"
|
|
216
226
|
}),
|
|
217
|
-
o(n(
|
|
227
|
+
o(n(v), {
|
|
218
228
|
label: "描述",
|
|
219
229
|
"min-width": "200",
|
|
220
230
|
prop: "description"
|
|
221
231
|
}),
|
|
222
|
-
o(n(
|
|
232
|
+
o(n(v), {
|
|
223
233
|
label: "操作",
|
|
224
234
|
width: "500",
|
|
225
235
|
fixed: "right"
|
|
226
236
|
}, {
|
|
227
237
|
default: a((e) => [
|
|
228
|
-
o(n(
|
|
238
|
+
o(n(p), {
|
|
229
239
|
link: "",
|
|
230
240
|
title: "本系统前台页面嵌入地址",
|
|
231
|
-
onClick: (
|
|
241
|
+
onClick: (s) => E(e.row, "inner")
|
|
232
242
|
}, {
|
|
233
243
|
default: a(() => [
|
|
234
244
|
u(" 内部链接 ")
|
|
235
245
|
]),
|
|
236
246
|
_: 2
|
|
237
247
|
}, 1032, ["onClick"]),
|
|
238
|
-
o(n(
|
|
248
|
+
o(n(p), {
|
|
239
249
|
link: "",
|
|
240
250
|
title: "其他系统嵌入地址",
|
|
241
|
-
onClick: (
|
|
251
|
+
onClick: (s) => E(e.row, "outside")
|
|
242
252
|
}, {
|
|
243
253
|
default: a(() => [
|
|
244
254
|
u(" 外部链接 ")
|
|
245
255
|
]),
|
|
246
256
|
_: 2
|
|
247
257
|
}, 1032, ["onClick"]),
|
|
248
|
-
o(n(
|
|
258
|
+
o(n(p), {
|
|
249
259
|
type: "primary",
|
|
250
260
|
link: "",
|
|
251
|
-
onClick: (
|
|
261
|
+
onClick: (s) => F(e.row)
|
|
252
262
|
}, {
|
|
253
263
|
default: a(() => [
|
|
254
|
-
|
|
264
|
+
ce,
|
|
255
265
|
u(" 设计 ")
|
|
256
266
|
]),
|
|
257
267
|
_: 2
|
|
258
268
|
}, 1032, ["onClick"]),
|
|
259
|
-
o(n(
|
|
269
|
+
o(n(p), {
|
|
260
270
|
type: "primary",
|
|
261
271
|
link: "",
|
|
262
|
-
onClick: (
|
|
272
|
+
onClick: (s) => T(e.row)
|
|
263
273
|
}, {
|
|
264
274
|
default: a(() => [
|
|
265
|
-
|
|
275
|
+
pe,
|
|
266
276
|
u(" 查看 ")
|
|
267
277
|
]),
|
|
268
278
|
_: 2
|
|
269
279
|
}, 1032, ["onClick"]),
|
|
270
|
-
o(n(
|
|
280
|
+
o(n(p), {
|
|
271
281
|
type: "primary",
|
|
272
282
|
link: "",
|
|
273
|
-
onClick: (
|
|
283
|
+
onClick: (s) => P(e.row)
|
|
274
284
|
}, {
|
|
275
285
|
default: a(() => [
|
|
276
|
-
|
|
286
|
+
me,
|
|
277
287
|
u(" 编辑 ")
|
|
278
288
|
]),
|
|
279
289
|
_: 2
|
|
280
290
|
}, 1032, ["onClick"]),
|
|
281
|
-
o(n(
|
|
291
|
+
o(n(p), {
|
|
282
292
|
type: "danger",
|
|
283
293
|
link: "",
|
|
284
|
-
onClick: (
|
|
294
|
+
onClick: (s) => A(e.row)
|
|
285
295
|
}, {
|
|
286
296
|
default: a(() => [
|
|
287
|
-
|
|
297
|
+
fe,
|
|
288
298
|
u(" 删除 ")
|
|
289
299
|
]),
|
|
290
300
|
_: 2
|
|
@@ -299,30 +309,30 @@ const ie = { class: "statement-list-container" }, re = { class: "actions" }, de
|
|
|
299
309
|
background: "",
|
|
300
310
|
style: { "padding-top": "10px", "justify-content": "flex-end" },
|
|
301
311
|
"page-sizes": [10, 20, 50, 100],
|
|
302
|
-
"page-size":
|
|
303
|
-
"onUpdate:pageSize": t[4] || (t[4] = (e) =>
|
|
304
|
-
total:
|
|
305
|
-
"current-page":
|
|
306
|
-
"onUpdate:currentPage": t[5] || (t[5] = (e) =>
|
|
312
|
+
"page-size": i.pageSize,
|
|
313
|
+
"onUpdate:pageSize": t[4] || (t[4] = (e) => i.pageSize = e),
|
|
314
|
+
total: i.total,
|
|
315
|
+
"current-page": i.pageNumber,
|
|
316
|
+
"onUpdate:currentPage": t[5] || (t[5] = (e) => i.pageNumber = e),
|
|
307
317
|
layout: "sizes,prev,pager,next,total"
|
|
308
318
|
}, null, 8, ["page-size", "total", "current-page"]),
|
|
309
319
|
o(n(oe), {
|
|
310
320
|
modelValue: k.value,
|
|
311
321
|
"onUpdate:modelValue": t[10] || (t[10] = (e) => k.value = e),
|
|
312
|
-
onClose:
|
|
313
|
-
title:
|
|
322
|
+
onClose: h,
|
|
323
|
+
title: r.id ? "编辑报表" : "新建报表"
|
|
314
324
|
}, {
|
|
315
325
|
footer: a(() => [
|
|
316
|
-
|
|
317
|
-
o(n(
|
|
326
|
+
f("span", ge, [
|
|
327
|
+
o(n(p), { onClick: h }, {
|
|
318
328
|
default: a(() => [
|
|
319
329
|
u("取消")
|
|
320
330
|
]),
|
|
321
331
|
_: 1
|
|
322
332
|
}),
|
|
323
|
-
o(n(
|
|
333
|
+
o(n(p), {
|
|
324
334
|
type: "primary",
|
|
325
|
-
onClick: t[9] || (t[9] = (e) =>
|
|
335
|
+
onClick: t[9] || (t[9] = (e) => M())
|
|
326
336
|
}, {
|
|
327
337
|
default: a(() => [
|
|
328
338
|
u(" 保存 ")
|
|
@@ -333,44 +343,44 @@ const ie = { class: "statement-list-container" }, re = { class: "actions" }, de
|
|
|
333
343
|
]),
|
|
334
344
|
default: a(() => [
|
|
335
345
|
o(n(ne), {
|
|
336
|
-
model:
|
|
346
|
+
model: r,
|
|
337
347
|
"label-width": "120"
|
|
338
348
|
}, {
|
|
339
349
|
default: a(() => [
|
|
340
|
-
o(n(
|
|
350
|
+
o(n(w), {
|
|
341
351
|
label: "报表代码",
|
|
342
352
|
required: ""
|
|
343
353
|
}, {
|
|
344
354
|
default: a(() => [
|
|
345
355
|
o(n(_), {
|
|
346
|
-
modelValue:
|
|
347
|
-
"onUpdate:modelValue": t[6] || (t[6] = (e) =>
|
|
356
|
+
modelValue: r.code,
|
|
357
|
+
"onUpdate:modelValue": t[6] || (t[6] = (e) => r.code = e),
|
|
348
358
|
autocomplete: "off"
|
|
349
359
|
}, null, 8, ["modelValue"])
|
|
350
360
|
]),
|
|
351
361
|
_: 1
|
|
352
362
|
}),
|
|
353
|
-
o(n(
|
|
363
|
+
o(n(w), {
|
|
354
364
|
label: "报表名称",
|
|
355
365
|
required: ""
|
|
356
366
|
}, {
|
|
357
367
|
default: a(() => [
|
|
358
368
|
o(n(_), {
|
|
359
|
-
modelValue:
|
|
360
|
-
"onUpdate:modelValue": t[7] || (t[7] = (e) =>
|
|
369
|
+
modelValue: r.name,
|
|
370
|
+
"onUpdate:modelValue": t[7] || (t[7] = (e) => r.name = e),
|
|
361
371
|
autocomplete: "off"
|
|
362
372
|
}, null, 8, ["modelValue"])
|
|
363
373
|
]),
|
|
364
374
|
_: 1
|
|
365
375
|
}),
|
|
366
|
-
o(n(
|
|
376
|
+
o(n(w), {
|
|
367
377
|
label: "描述",
|
|
368
378
|
required: ""
|
|
369
379
|
}, {
|
|
370
380
|
default: a(() => [
|
|
371
381
|
o(n(_), {
|
|
372
|
-
modelValue:
|
|
373
|
-
"onUpdate:modelValue": t[8] || (t[8] = (e) =>
|
|
382
|
+
modelValue: r.description,
|
|
383
|
+
"onUpdate:modelValue": t[8] || (t[8] = (e) => r.description = e),
|
|
374
384
|
type: "textarea",
|
|
375
385
|
autocomplete: "off"
|
|
376
386
|
}, null, 8, ["modelValue"])
|
|
@@ -389,4 +399,4 @@ const ie = { class: "statement-list-container" }, re = { class: "actions" }, de
|
|
|
389
399
|
export {
|
|
390
400
|
xe as default
|
|
391
401
|
};
|
|
392
|
-
//# sourceMappingURL=StatementList-
|
|
402
|
+
//# sourceMappingURL=StatementList-e9df7105.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementList-e9df7105.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';\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\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(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","toView","onMounted","dialogFormVisible","form","toAddForm","toEditor","toDelete","ElMessageBox","del","cancelForm","saveForm","onSearch","onReset","watch"],"mappings":"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"}
|