yh-report 2.3.15 → 2.3.16
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-da1da2f9.mjs → StatementDesign-c487cbdc.mjs} +3 -3
- package/{StatementDesign-da1da2f9.mjs.map → StatementDesign-c487cbdc.mjs.map} +1 -1
- package/{StatementDetail-a26c138c.mjs → StatementDetail-6f94fbaf.mjs} +2 -2
- package/{StatementDetail-a26c138c.mjs.map → StatementDetail-6f94fbaf.mjs.map} +1 -1
- package/{StatementList-4c91a600.mjs → StatementList-e84e6a15.mjs} +60 -73
- package/StatementList-e84e6a15.mjs.map +1 -0
- package/editorLock-afc375cb.mjs +64 -0
- package/editorLock-afc375cb.mjs.map +1 -0
- package/{index-568b080b.mjs → index-9f404190.mjs} +12 -12
- package/{index-568b080b.mjs.map → index-9f404190.mjs.map} +1 -1
- package/index.es.js +1 -1
- package/package.json +1 -1
- package/style.css +1 -1
- package/StatementList-4c91a600.mjs.map +0 -1
- package/editorLock-8f7ea66b.mjs +0 -62
- package/editorLock-8f7ea66b.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-9f404190.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-6f94fbaf.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatementDetail-
|
|
1
|
+
{"version":3,"file":"StatementDetail-6f94fbaf.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,8 +1,8 @@
|
|
|
1
|
-
import { defineComponent as H, reactive as
|
|
1
|
+
import { defineComponent as H, reactive as z, ref as E, onMounted as J, watch as j, openBlock as I, createElementBlock as G, createElementVNode as f, createTextVNode as c, createVNode as n, unref as l, withCtx as a, withKeys as Q } from "vue";
|
|
2
2
|
import { useRouter as W } from "vue-router";
|
|
3
|
-
import { g as X, s as D, d as Z, a as ee } from "./index-
|
|
4
|
-
import { ElButton as p, ElFormItem as
|
|
5
|
-
import { l as ie, u as re } from "./editorLock-
|
|
3
|
+
import { g as X, s as D, d as Z, a as ee } from "./index-9f404190.mjs";
|
|
4
|
+
import { ElButton as p, ElFormItem as w, ElInput as _, ElTable as te, ElTableColumn as v, ElPagination as oe, ElDialog as ne, ElForm as le, ElMessage as k, ElLoading as ae, ElMessageBox as L } from "element-plus";
|
|
5
|
+
import { l as ie, u as re } from "./editorLock-afc375cb.mjs";
|
|
6
6
|
import "@/libs/api.request.js";
|
|
7
7
|
import "lodash-es";
|
|
8
8
|
import "echarts";
|
|
@@ -10,16 +10,16 @@ function se(x) {
|
|
|
10
10
|
if (navigator.clipboard && window.isSecureContext)
|
|
11
11
|
return navigator.clipboard.writeText(x), Promise.resolve();
|
|
12
12
|
{
|
|
13
|
-
let
|
|
14
|
-
|
|
13
|
+
let u = document.createElement("textarea");
|
|
14
|
+
u.value = x, u.style.position = "absolute", u.style.opacity = "0", u.style.left = "-200%", u.style.top = "-200%", document.body.appendChild(u), u.focus(), u.select();
|
|
15
15
|
let i = document.execCommand("copy");
|
|
16
|
-
return
|
|
16
|
+
return u.remove(), i ? Promise.resolve() : Promise.reject(new Error("copy error"));
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
const de = { class: "statement-list-container" },
|
|
19
|
+
const de = { class: "statement-list-container" }, ce = { class: "actions" }, ue = { 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({
|
|
20
20
|
__name: "StatementList",
|
|
21
21
|
setup(x) {
|
|
22
|
-
const
|
|
22
|
+
const u = W(), i = z({
|
|
23
23
|
key: "",
|
|
24
24
|
pageSize: 10,
|
|
25
25
|
pageNumber: 1,
|
|
@@ -37,9 +37,9 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
37
37
|
function $(o, t) {
|
|
38
38
|
let e = "", s = "链接";
|
|
39
39
|
t === "inner" ? (e = `innerStatementdetail/${o.id}`, s = "内部链接") : (e = `${window.location.origin}${window.location.pathname}#/statementdetail/${o.id}`, s = "外部链接"), se(e).then(() => {
|
|
40
|
-
|
|
40
|
+
k.success(s + "复制成功");
|
|
41
41
|
}).catch(() => {
|
|
42
|
-
|
|
42
|
+
k.error(s + "复制遇到问题");
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
const C = E([]), T = (o) => {
|
|
@@ -66,10 +66,10 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
66
66
|
}
|
|
67
67
|
d.close(), g(!0);
|
|
68
68
|
} else
|
|
69
|
-
|
|
69
|
+
k.error("格式错误,请确保导入的文件未被修改过!");
|
|
70
70
|
}
|
|
71
71
|
} catch {
|
|
72
|
-
|
|
72
|
+
k.error("文件解析失败,请检查文件是否为有效的 JSON 格式!");
|
|
73
73
|
}
|
|
74
74
|
}, e.readAsText(t);
|
|
75
75
|
}, R = () => {
|
|
@@ -86,37 +86,28 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
86
86
|
), t = new Blob([o], { type: "application/json" }), e = URL.createObjectURL(t), m = `报表导出-${Z().format("YYYYMMDDHHmm")}.json`, d = document.createElement("a");
|
|
87
87
|
d.href = e, d.download = m, document.body.appendChild(d), d.click(), document.body.removeChild(d), URL.revokeObjectURL(e);
|
|
88
88
|
} else
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
await ie(o.id) === "OK" ? c.push(`/admin/statement/design/${o.id}`) : L.alert("报表正在被其他用户锁定,是否强制解锁?", "提示", {
|
|
89
|
+
k.warning("请选择要操作的报表!");
|
|
90
|
+
}, N = async (o) => {
|
|
91
|
+
await ie(o.id) === "OK" ? u.push(`/admin/statement/design/${o.id}`) : await L.alert("报表正在被其他用户锁定,是否强制解锁?", "提示", {
|
|
93
92
|
confirmButtonText: "解锁",
|
|
94
93
|
cancelButtonText: "取消"
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
function F(o) {
|
|
102
|
-
c.push(`/admin/statement/detail/${o.id}`);
|
|
103
|
-
}
|
|
94
|
+
}) === "confirm" && (await re(o.id) ? N(o) : k.error("解锁失败,请稍后再试!"));
|
|
95
|
+
}, F = (o) => {
|
|
96
|
+
u.push(`/admin/statement/detail/${o.id}`);
|
|
97
|
+
};
|
|
104
98
|
J(() => {
|
|
105
99
|
g(!0);
|
|
106
100
|
});
|
|
107
|
-
const
|
|
101
|
+
const b = E(!1), r = z({
|
|
108
102
|
id: void 0,
|
|
109
103
|
name: "",
|
|
110
104
|
code: "",
|
|
111
105
|
description: ""
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
k.value = !0, r.id = o.id, r.name = o.name, r.code = o.code, r.description = o.description;
|
|
118
|
-
}
|
|
119
|
-
function A(o) {
|
|
106
|
+
}), O = () => {
|
|
107
|
+
b.value = !0;
|
|
108
|
+
}, P = (o) => {
|
|
109
|
+
b.value = !0, r.id = o.id, r.name = o.name, r.code = o.code, r.description = o.description;
|
|
110
|
+
}, A = (o) => {
|
|
120
111
|
L.confirm("当前操作会删除选定的报表,确认继续吗?", "警告", {
|
|
121
112
|
confirmButtonText: "删除",
|
|
122
113
|
cancelButtonText: "取消",
|
|
@@ -124,19 +115,15 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
124
115
|
}).then(async () => {
|
|
125
116
|
(await ee(o.id)).data && g(!0);
|
|
126
117
|
});
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
async function M() {
|
|
118
|
+
}, h = () => {
|
|
119
|
+
b.value = !1, r.id = void 0, r.name = "", r.code = "", r.description = "";
|
|
120
|
+
}, M = async () => {
|
|
132
121
|
await D(r), g(!0), h();
|
|
133
|
-
}
|
|
134
|
-
function z(o) {
|
|
122
|
+
}, U = (o) => {
|
|
135
123
|
o && (o.preventDefault(), o.stopPropagation()), g(!1);
|
|
136
|
-
}
|
|
137
|
-
function K() {
|
|
124
|
+
}, K = () => {
|
|
138
125
|
i.key = "", g(!0);
|
|
139
|
-
}
|
|
126
|
+
};
|
|
140
127
|
return j(
|
|
141
128
|
() => i.pageNumber,
|
|
142
129
|
() => {
|
|
@@ -148,21 +135,21 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
148
135
|
g();
|
|
149
136
|
}
|
|
150
137
|
), (o, t) => (I(), G("section", de, [
|
|
151
|
-
f("div",
|
|
152
|
-
f("div",
|
|
138
|
+
f("div", ce, [
|
|
139
|
+
f("div", ue, [
|
|
153
140
|
f("input", {
|
|
154
141
|
class: "import-excel-input",
|
|
155
142
|
type: "file",
|
|
156
143
|
onChange: t[0] || (t[0] = (e) => B(e))
|
|
157
144
|
}, null, 32),
|
|
158
|
-
|
|
145
|
+
c(" 导入 ")
|
|
159
146
|
]),
|
|
160
147
|
n(l(p), {
|
|
161
148
|
text: "",
|
|
162
149
|
onClick: R
|
|
163
150
|
}, {
|
|
164
151
|
default: a(() => [
|
|
165
|
-
|
|
152
|
+
c(" 导出 ")
|
|
166
153
|
]),
|
|
167
154
|
_: 1
|
|
168
155
|
}),
|
|
@@ -171,17 +158,17 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
171
158
|
onClick: O
|
|
172
159
|
}, {
|
|
173
160
|
default: a(() => [
|
|
174
|
-
|
|
161
|
+
c(" 新增 ")
|
|
175
162
|
]),
|
|
176
163
|
_: 1
|
|
177
164
|
}),
|
|
178
165
|
f("div", pe, [
|
|
179
|
-
n(l(
|
|
166
|
+
n(l(w), { label: "报表名称" }, {
|
|
180
167
|
default: a(() => [
|
|
181
|
-
n(l(
|
|
168
|
+
n(l(_), {
|
|
182
169
|
modelValue: i.key,
|
|
183
170
|
"onUpdate:modelValue": t[1] || (t[1] = (e) => i.key = e),
|
|
184
|
-
onKeyup: Q(
|
|
171
|
+
onKeyup: Q(U, ["enter"]),
|
|
185
172
|
placeholder: "键入关键字搜索报表"
|
|
186
173
|
}, null, 8, ["modelValue", "onKeyup"])
|
|
187
174
|
]),
|
|
@@ -190,10 +177,10 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
190
177
|
]),
|
|
191
178
|
n(l(p), {
|
|
192
179
|
type: "primary",
|
|
193
|
-
onClick: t[2] || (t[2] = (e) =>
|
|
180
|
+
onClick: t[2] || (t[2] = (e) => U())
|
|
194
181
|
}, {
|
|
195
182
|
default: a(() => [
|
|
196
|
-
|
|
183
|
+
c(" 搜索 ")
|
|
197
184
|
]),
|
|
198
185
|
_: 1
|
|
199
186
|
}),
|
|
@@ -201,7 +188,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
201
188
|
onClick: t[3] || (t[3] = (e) => K())
|
|
202
189
|
}, {
|
|
203
190
|
default: a(() => [
|
|
204
|
-
|
|
191
|
+
c("重置")
|
|
205
192
|
]),
|
|
206
193
|
_: 1
|
|
207
194
|
})
|
|
@@ -249,7 +236,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
249
236
|
onClick: (s) => $(e.row, "inner")
|
|
250
237
|
}, {
|
|
251
238
|
default: a(() => [
|
|
252
|
-
|
|
239
|
+
c(" 内部链接 ")
|
|
253
240
|
]),
|
|
254
241
|
_: 2
|
|
255
242
|
}, 1032, ["onClick"]),
|
|
@@ -259,7 +246,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
259
246
|
onClick: (s) => $(e.row, "outside")
|
|
260
247
|
}, {
|
|
261
248
|
default: a(() => [
|
|
262
|
-
|
|
249
|
+
c(" 外部链接 ")
|
|
263
250
|
]),
|
|
264
251
|
_: 2
|
|
265
252
|
}, 1032, ["onClick"]),
|
|
@@ -270,7 +257,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
270
257
|
}, {
|
|
271
258
|
default: a(() => [
|
|
272
259
|
me,
|
|
273
|
-
|
|
260
|
+
c(" 设计 ")
|
|
274
261
|
]),
|
|
275
262
|
_: 2
|
|
276
263
|
}, 1032, ["onClick"]),
|
|
@@ -281,7 +268,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
281
268
|
}, {
|
|
282
269
|
default: a(() => [
|
|
283
270
|
fe,
|
|
284
|
-
|
|
271
|
+
c(" 查看 ")
|
|
285
272
|
]),
|
|
286
273
|
_: 2
|
|
287
274
|
}, 1032, ["onClick"]),
|
|
@@ -292,7 +279,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
292
279
|
}, {
|
|
293
280
|
default: a(() => [
|
|
294
281
|
ge,
|
|
295
|
-
|
|
282
|
+
c(" 编辑 ")
|
|
296
283
|
]),
|
|
297
284
|
_: 2
|
|
298
285
|
}, 1032, ["onClick"]),
|
|
@@ -303,7 +290,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
303
290
|
}, {
|
|
304
291
|
default: a(() => [
|
|
305
292
|
ye,
|
|
306
|
-
|
|
293
|
+
c(" 删除 ")
|
|
307
294
|
]),
|
|
308
295
|
_: 2
|
|
309
296
|
}, 1032, ["onClick"])
|
|
@@ -325,8 +312,8 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
325
312
|
layout: "sizes,prev,pager,next,total"
|
|
326
313
|
}, null, 8, ["page-size", "total", "current-page"]),
|
|
327
314
|
n(l(ne), {
|
|
328
|
-
modelValue:
|
|
329
|
-
"onUpdate:modelValue": t[10] || (t[10] = (e) =>
|
|
315
|
+
modelValue: b.value,
|
|
316
|
+
"onUpdate:modelValue": t[10] || (t[10] = (e) => b.value = e),
|
|
330
317
|
onClose: h,
|
|
331
318
|
title: r.id ? "编辑报表" : "新建报表"
|
|
332
319
|
}, {
|
|
@@ -334,7 +321,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
334
321
|
f("span", ve, [
|
|
335
322
|
n(l(p), { onClick: h }, {
|
|
336
323
|
default: a(() => [
|
|
337
|
-
|
|
324
|
+
c("取消")
|
|
338
325
|
]),
|
|
339
326
|
_: 1
|
|
340
327
|
}),
|
|
@@ -343,7 +330,7 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
343
330
|
onClick: t[9] || (t[9] = (e) => M())
|
|
344
331
|
}, {
|
|
345
332
|
default: a(() => [
|
|
346
|
-
|
|
333
|
+
c(" 保存 ")
|
|
347
334
|
]),
|
|
348
335
|
_: 1
|
|
349
336
|
})
|
|
@@ -355,12 +342,12 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
355
342
|
"label-width": "120"
|
|
356
343
|
}, {
|
|
357
344
|
default: a(() => [
|
|
358
|
-
n(l(
|
|
345
|
+
n(l(w), {
|
|
359
346
|
label: "报表代码",
|
|
360
347
|
required: ""
|
|
361
348
|
}, {
|
|
362
349
|
default: a(() => [
|
|
363
|
-
n(l(
|
|
350
|
+
n(l(_), {
|
|
364
351
|
modelValue: r.code,
|
|
365
352
|
"onUpdate:modelValue": t[6] || (t[6] = (e) => r.code = e),
|
|
366
353
|
autocomplete: "off"
|
|
@@ -368,12 +355,12 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
368
355
|
]),
|
|
369
356
|
_: 1
|
|
370
357
|
}),
|
|
371
|
-
n(l(
|
|
358
|
+
n(l(w), {
|
|
372
359
|
label: "报表名称",
|
|
373
360
|
required: ""
|
|
374
361
|
}, {
|
|
375
362
|
default: a(() => [
|
|
376
|
-
n(l(
|
|
363
|
+
n(l(_), {
|
|
377
364
|
modelValue: r.name,
|
|
378
365
|
"onUpdate:modelValue": t[7] || (t[7] = (e) => r.name = e),
|
|
379
366
|
autocomplete: "off"
|
|
@@ -381,12 +368,12 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
381
368
|
]),
|
|
382
369
|
_: 1
|
|
383
370
|
}),
|
|
384
|
-
n(l(
|
|
371
|
+
n(l(w), {
|
|
385
372
|
label: "描述",
|
|
386
373
|
required: ""
|
|
387
374
|
}, {
|
|
388
375
|
default: a(() => [
|
|
389
|
-
n(l(
|
|
376
|
+
n(l(_), {
|
|
390
377
|
modelValue: r.description,
|
|
391
378
|
"onUpdate:modelValue": t[8] || (t[8] = (e) => r.description = e),
|
|
392
379
|
type: "textarea",
|
|
@@ -407,4 +394,4 @@ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce
|
|
|
407
394
|
export {
|
|
408
395
|
Ee as default
|
|
409
396
|
};
|
|
410
|
-
//# sourceMappingURL=StatementList-
|
|
397
|
+
//# sourceMappingURL=StatementList-e84e6a15.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementList-e84e6a15.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};\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\nconst toDesign = async (row) => {\n let res = await lockEditor(row.id);\n if (res === 'OK') {\n router.push(`/admin/statement/design/${row.id}`);\n } else {\n const toUnlock = await ElMessageBox.alert('报表正在被其他用户锁定,是否强制解锁?', '提示', {\n confirmButtonText: '解锁',\n cancelButtonText: '取消',\n });\n if (toUnlock === 'confirm') {\n let flag = await unlockEditor(row.id);\n if (flag) {\n toDesign(row);\n } else {\n ElMessage.error('解锁失败,请稍后再试!');\n }\n }\n }\n};\n\nconst toView = (row) => {\n router.push(`/admin/statement/detail/${row.id}`);\n};\n\nonMounted(() => {\n getStatementList(true);\n});\n\n//新增报表\nconst dialogFormVisible = ref(false);\n\nconst form = reactive({\n id: undefined,\n name: '',\n code: '',\n description: '',\n});\n\nconst toAddForm = () => {\n dialogFormVisible.value = true;\n};\n\nconst 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\nconst 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\nconst cancelForm = () => {\n dialogFormVisible.value = false;\n form.id = undefined;\n form.name = '';\n form.code = '';\n form.description = '';\n};\nconst saveForm = async () => {\n await save(form);\n getStatementList(true);\n cancelForm();\n};\n\n//搜索报表\nconst onSearch = (e?) => {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n getStatementList(false);\n};\n\n//重置\nconst 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,64 @@
|
|
|
1
|
+
import f from "@/libs/api.request.js";
|
|
2
|
+
import { onMounted as m, onBeforeUnmount as h } from "vue";
|
|
3
|
+
import { onBeforeRouteLeave as d } from "vue-router";
|
|
4
|
+
import { ElMessageBox as l } from "element-plus";
|
|
5
|
+
function k(e) {
|
|
6
|
+
return f.request({
|
|
7
|
+
url: `dataLock/lock/${e}`,
|
|
8
|
+
method: "POST"
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
const b = async (e) => {
|
|
12
|
+
e = `report-${e}`;
|
|
13
|
+
const t = await f.request({
|
|
14
|
+
url: `dataLock/unlock/${e}`,
|
|
15
|
+
method: "POST"
|
|
16
|
+
});
|
|
17
|
+
return t && t.data && t.data.result || !1;
|
|
18
|
+
};
|
|
19
|
+
async function c(e) {
|
|
20
|
+
e = `report-${e}`;
|
|
21
|
+
let t = await k(e);
|
|
22
|
+
return t && t.data && t.data.msg || !1;
|
|
23
|
+
}
|
|
24
|
+
function E(e, t, s) {
|
|
25
|
+
let a = null, n = !1;
|
|
26
|
+
const i = () => {
|
|
27
|
+
a = setInterval(() => {
|
|
28
|
+
c(e).then((u) => {
|
|
29
|
+
});
|
|
30
|
+
}, 1 * 60 * 1e3);
|
|
31
|
+
}, o = () => {
|
|
32
|
+
b(e).then(() => {
|
|
33
|
+
}), a && clearInterval(a);
|
|
34
|
+
}, r = (u) => {
|
|
35
|
+
n || (n = !0, document.visibilityState === "visible" ? l.confirm("欢迎回来,刚已保存并释放互斥锁,是否继续编辑?").then(() => {
|
|
36
|
+
c(e).then((v) => {
|
|
37
|
+
v === "OK" ? (a && clearInterval(a), i()) : l.alert("其他人正在编辑该报表,确认后回到列表页").then(() => {
|
|
38
|
+
s.back();
|
|
39
|
+
});
|
|
40
|
+
}).catch(() => {
|
|
41
|
+
l.alert("无法获取编辑锁,请稍后重试");
|
|
42
|
+
});
|
|
43
|
+
}).catch(() => {
|
|
44
|
+
s.back();
|
|
45
|
+
}).finally(() => {
|
|
46
|
+
n = !1;
|
|
47
|
+
}) : t().then(() => {
|
|
48
|
+
o(), n = !1;
|
|
49
|
+
}));
|
|
50
|
+
};
|
|
51
|
+
m(() => {
|
|
52
|
+
window.addEventListener("visibilitychange", r, !1), i();
|
|
53
|
+
}), d(() => {
|
|
54
|
+
window.removeEventListener("visibilitychange", r, !1), o();
|
|
55
|
+
}), h(() => {
|
|
56
|
+
window.removeEventListener("visibilitychange", r, !1), o();
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
E as a,
|
|
61
|
+
c as l,
|
|
62
|
+
b as u
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=editorLock-afc375cb.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editorLock-afc375cb.mjs","sources":["../libs/editorLock.ts"],"sourcesContent":["import axios from '@/libs/api.request.js';\nimport {onMounted, onBeforeUnmount} from 'vue';\nimport {onBeforeRouteLeave} from 'vue-router';\nimport {ElMessageBox} from 'element-plus';\nfunction lockReq(key) {\n return axios.request({\n url: `dataLock/lock/${key}`,\n method: 'POST',\n });\n}\n\nexport const unlockEditor = async (id) => {\n id = `report-${id}`;\n const res = await axios.request({\n url: `dataLock/unlock/${id}`,\n method: 'POST',\n });\n return (res && res.data && res.data.result) || false;\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 window.addEventListener('visibilitychange', visibleHandler, false);\n startInterval();\n });\n\n onBeforeRouteLeave(() => {\n window.removeEventListener('visibilitychange', visibleHandler, false);\n stopInterval();\n });\n onBeforeUnmount(() => {\n window.removeEventListener('visibilitychange', visibleHandler, false);\n stopInterval();\n });\n}\n"],"names":["lockReq","key","axios","unlockEditor","id","res","lockEditor","useDetailLock","save","router","timer","visibleAsk","startInterval","stopInterval","visibleHandler","e","ElMessageBox","onMounted","onBeforeRouteLeave","onBeforeUnmount"],"mappings":";;;;AAIA,SAASA,EAAQC,GAAK;AACpB,SAAOC,EAAM,QAAQ;AAAA,IACnB,KAAK,iBAAiBD,CAAG;AAAA,IACzB,QAAQ;AAAA,EAAA,CACT;AACH;AAEa,MAAAE,IAAe,OAAOC,MAAO;AACxC,EAAAA,IAAK,UAAUA,CAAE;AACX,QAAAC,IAAM,MAAMH,EAAM,QAAQ;AAAA,IAC9B,KAAK,mBAAmBE,CAAE;AAAA,IAC1B,QAAQ;AAAA,EAAA,CACT;AACD,SAAQC,KAAOA,EAAI,QAAQA,EAAI,KAAK,UAAW;AACjD;AAEA,eAAsBC,EAAWF,GAAI;AACnC,EAAAA,IAAK,UAAUA,CAAE;AACb,MAAAC,IAAM,MAAML,EAAQI,CAAE;AAC1B,SAAQC,KAAOA,EAAI,QAAQA,EAAI,KAAK,OAAQ;AAC9C;AAEgB,SAAAE,EAAcH,GAAII,GAAMC,GAAQ;AAC9C,MAAIC,IAAa,MAEbC,IAAa;AAEjB,QAAMC,IAAgB,MAAM;AAC1B,IAAAF,IAAQ,YAAY,MAAM;AACxB,MAAAJ,EAAWF,CAAE,EAAE,KAAK,CAACC,MAAQ;AAAA,MACV,CAClB;AAAA,IAAA,GACA,IAAI,KAAK,GAAI;AAAA,EAAA,GAGZQ,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,MAAAV,EAAWF,CAAE,EACV,KAAK,CAACC,MAAQ;AAEb,QAAIA,MAAQ,QACNK,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;AACP,WAAA,iBAAiB,oBAAoBH,GAAgB,EAAK,GACnDF;EAAA,CACf,GAEDM,EAAmB,MAAM;AAChB,WAAA,oBAAoB,oBAAoBJ,GAAgB,EAAK,GACvDD;EAAA,CACd,GACDM,EAAgB,MAAM;AACb,WAAA,oBAAoB,oBAAoBL,GAAgB,EAAK,GACvDD;EAAA,CACd;AACH;"}
|
|
@@ -31902,12 +31902,12 @@ const exportExcel = (J, Q, e = "gray", T = 0) => {
|
|
|
31902
31902
|
setup(J, { emit: Q }) {
|
|
31903
31903
|
const e = J;
|
|
31904
31904
|
useCssVars((F) => ({
|
|
31905
|
-
"
|
|
31906
|
-
|
|
31907
|
-
|
|
31908
|
-
|
|
31909
|
-
"
|
|
31910
|
-
"
|
|
31905
|
+
"9011cf20": unref(r).border,
|
|
31906
|
+
fe61911c: unref(r).background,
|
|
31907
|
+
"715eea2c": unref(r).evenBackground,
|
|
31908
|
+
d5158004: unref(r).fixedBackground,
|
|
31909
|
+
"3b75ccb8": unref(r).fixedEvenBackground,
|
|
31910
|
+
"484af074": unref(r).hoverBackground
|
|
31911
31911
|
}));
|
|
31912
31912
|
const T = ref(), k = ref(), g = ref(), o = shallowRef([]), a = computed(() => ({
|
|
31913
31913
|
width: e.config.widthType === "%" ? `calc(${e.config.width}% - 10px)` : `${e.config.width - 10}px`,
|
|
@@ -32549,7 +32549,7 @@ const exportExcel = (J, Q, e = "gray", T = 0) => {
|
|
|
32549
32549
|
title: "报表列表",
|
|
32550
32550
|
icon: "iconfont icon-s-grid"
|
|
32551
32551
|
},
|
|
32552
|
-
component: () => import("./StatementList-
|
|
32552
|
+
component: () => import("./StatementList-e84e6a15.mjs")
|
|
32553
32553
|
}), e.addRoute("Index", {
|
|
32554
32554
|
path: "statement/design/:id",
|
|
32555
32555
|
name: "报表设计",
|
|
@@ -32558,7 +32558,7 @@ const exportExcel = (J, Q, e = "gray", T = 0) => {
|
|
|
32558
32558
|
title: "报表设计",
|
|
32559
32559
|
icon: "iconfont icon-s-grid"
|
|
32560
32560
|
},
|
|
32561
|
-
component: () => import("./StatementDesign-
|
|
32561
|
+
component: () => import("./StatementDesign-c487cbdc.mjs")
|
|
32562
32562
|
}), e.addRoute("Index", {
|
|
32563
32563
|
path: "statement/detail/:id",
|
|
32564
32564
|
name: "后台报表查看",
|
|
@@ -32567,7 +32567,7 @@ const exportExcel = (J, Q, e = "gray", T = 0) => {
|
|
|
32567
32567
|
title: "后台报表查看",
|
|
32568
32568
|
icon: "iconfont icon-s-grid"
|
|
32569
32569
|
},
|
|
32570
|
-
component: () => import("./StatementDetail-
|
|
32570
|
+
component: () => import("./StatementDetail-6f94fbaf.mjs")
|
|
32571
32571
|
})), e.addRoute({
|
|
32572
32572
|
path: "/statementdetail/:id",
|
|
32573
32573
|
name: "报表查看",
|
|
@@ -32576,7 +32576,7 @@ const exportExcel = (J, Q, e = "gray", T = 0) => {
|
|
|
32576
32576
|
title: "报表查看",
|
|
32577
32577
|
icon: "iconfont icon-s-grid"
|
|
32578
32578
|
},
|
|
32579
|
-
component: () => import("./StatementDetail-
|
|
32579
|
+
component: () => import("./StatementDetail-6f94fbaf.mjs")
|
|
32580
32580
|
});
|
|
32581
32581
|
}
|
|
32582
32582
|
};
|
|
@@ -32607,7 +32607,7 @@ function dynamicReportView(J) {
|
|
|
32607
32607
|
})
|
|
32608
32608
|
);
|
|
32609
32609
|
}
|
|
32610
|
-
console.info("%cyh-report %cVer 2.3.
|
|
32610
|
+
console.info("%cyh-report %cVer 2.3.16", "color:#409EFF;font-size: 22px;font-weight:bolder;text-shadow: 2px 2px 4px #84c1ff;", "color:#fff;font-size: 12px;background-color:#409EFF;padding:2px 4px;border-radius:3px;");
|
|
32611
32611
|
export {
|
|
32612
32612
|
CellType as C,
|
|
32613
32613
|
DataSourceColumnDataType as D,
|
|
@@ -32637,4 +32637,4 @@ export {
|
|
|
32637
32637
|
dynamicReportView as t,
|
|
32638
32638
|
validateAndCompleteTableConfig as v
|
|
32639
32639
|
};
|
|
32640
|
-
//# sourceMappingURL=index-
|
|
32640
|
+
//# sourceMappingURL=index-9f404190.mjs.map
|