yh-report 2.4.119 → 2.4.120
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-Bh4L1Dek.mjs → StatementDesign-BxNPOJtR.mjs} +2941 -2848
- package/StatementDesign-BxNPOJtR.mjs.map +1 -0
- package/{StatementDetail-BzwPa27e.mjs → StatementDetail-CjEO3McA.mjs} +2 -2
- package/{StatementDetail-BzwPa27e.mjs.map → StatementDetail-CjEO3McA.mjs.map} +1 -1
- package/{StatementList-5Bk_kecm.mjs → StatementList-CCH8sOd3.mjs} +34 -32
- package/StatementList-CCH8sOd3.mjs.map +1 -0
- package/{editorLock-CGeUFKpx.mjs → editorLock-Cv5UpPr7.mjs} +3 -3
- package/editorLock-Cv5UpPr7.mjs.map +1 -0
- package/{index-DwoZb3xJ.mjs → index-BDXDWonb.mjs} +9 -9
- package/{index-DwoZb3xJ.mjs.map → index-BDXDWonb.mjs.map} +1 -1
- package/index.es.js +1 -1
- package/package.json +1 -1
- package/StatementDesign-Bh4L1Dek.mjs.map +0 -1
- package/StatementList-5Bk_kecm.mjs.map +0 -1
- package/editorLock-CGeUFKpx.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as o, ref as a, onActivated as i, onDeactivated as s, onMounted as c, openBlock as r, createElementBlock as m, createVNode as d } from "vue";
|
|
2
2
|
import { useRoute as l } from "vue-router";
|
|
3
|
-
import { P as u } from "./index-
|
|
3
|
+
import { P as u } from "./index-BDXDWonb.mjs";
|
|
4
4
|
const _ = { class: "statement-detail-container" }, h = /* @__PURE__ */ o({
|
|
5
5
|
__name: "StatementDetail",
|
|
6
6
|
setup(p) {
|
|
@@ -21,4 +21,4 @@ const _ = { class: "statement-detail-container" }, h = /* @__PURE__ */ o({
|
|
|
21
21
|
export {
|
|
22
22
|
h as default
|
|
23
23
|
};
|
|
24
|
-
//# sourceMappingURL=StatementDetail-
|
|
24
|
+
//# sourceMappingURL=StatementDetail-CjEO3McA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatementDetail-
|
|
1
|
+
{"version":3,"file":"StatementDetail-CjEO3McA.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","_openBlock","_createElementBlock","_hoisted_1","_createVNode","reportRun"],"mappings":";;;;;;AASA,UAAMA,IAAQC,EAAA,GACRC,IAAKC,EAAA;AAEX,WAAAC,EAAY,MAAM;;AAChB,OAAAC,IAAA,SAAS,cAAc,iBAAiB,MAAxC,QAAAA,EAA2C,UAAU,IAAI;AAAA,IAC3D,CAAC,GAEDC,EAAc,MAAM;;AAClB,OAAAD,IAAA,SAAS,cAAc,iBAAiB,MAAxC,QAAAA,EAA2C,UAAU,OAAO;AAAA,IAC9D,CAAC,GAEDE,EAAU,MAAM;AACd,MAAAL,EAAG,QAAQF,EAAM,OAAO;AAAA,IAC1B,CAAC,cArBCQ,EAAA,GAAAC,EAEU,WAFVC,GAEU;AAAA,MADRC,EAAkCC,GAAA,EAArB,IAAIV,EAAA,MAAA,GAAE,MAAA,GAAA,CAAA,IAAA,CAAA;AAAA,IAAA;;;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { defineComponent as W, reactive as R, ref as N, onMounted as G, watch as L, openBlock as Q, createElementBlock as X, createElementVNode as f, createTextVNode as u, toDisplayString as c, unref as e, createVNode as n, withCtx as i, withKeys as Z } from "vue";
|
|
2
2
|
import { useRouter as ee } from "vue-router";
|
|
3
|
-
import { r as a, g as te, c as le, s as D, d as oe, a as ne } from "./index-
|
|
4
|
-
import { ElButton as m, ElFormItem as
|
|
5
|
-
import { l as ue, u as ce } from "./editorLock-
|
|
6
|
-
const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe = { class: "el-button is-text import-excel-button" }, ge = { class: "form-context" }, ye = { class: "dialog-footer" },
|
|
3
|
+
import { r as a, g as te, c as le, s as D, d as oe, a as ne } from "./index-BDXDWonb.mjs";
|
|
4
|
+
import { ElButton as m, ElFormItem as w, ElInput as $, ElTable as ae, ElTableColumn as v, ElPagination as ie, ElDialog as re, ElForm as se, ElMessage as k, ElLoading as de, ElMessageBox as U } from "element-plus";
|
|
5
|
+
import { l as ue, u as ce } from "./editorLock-Cv5UpPr7.mjs";
|
|
6
|
+
const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe = { class: "el-button is-text import-excel-button" }, ge = { class: "form-context" }, ye = { class: "dialog-footer" }, he = /* @__PURE__ */ W({
|
|
7
7
|
__name: "StatementList",
|
|
8
8
|
setup(ke) {
|
|
9
|
-
const
|
|
9
|
+
const h = ee(), d = R({
|
|
10
10
|
key: "",
|
|
11
11
|
pageSize: 10,
|
|
12
12
|
pageNumber: 1,
|
|
@@ -21,7 +21,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
21
21
|
});
|
|
22
22
|
z.value = t.data.list, d.total = t.data.total;
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
function x(o, t) {
|
|
25
25
|
let l = "", r = "链接";
|
|
26
26
|
switch (t) {
|
|
27
27
|
case "admin":
|
|
@@ -68,14 +68,14 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
68
68
|
k.error("文件解析失败,请检查文件是否为有效的 JSON 格式!");
|
|
69
69
|
}
|
|
70
70
|
}, l.readAsText(t);
|
|
71
|
-
},
|
|
71
|
+
}, M = () => {
|
|
72
72
|
if (V.value.length > 0) {
|
|
73
73
|
const o = JSON.stringify(
|
|
74
|
-
V.value.map(({ code: b, config: E, description:
|
|
74
|
+
V.value.map(({ code: b, config: E, description: I, name: K }) => ({
|
|
75
75
|
code: b,
|
|
76
76
|
config: E,
|
|
77
|
-
description:
|
|
78
|
-
name:
|
|
77
|
+
description: I,
|
|
78
|
+
name: K
|
|
79
79
|
})),
|
|
80
80
|
null,
|
|
81
81
|
2
|
|
@@ -83,13 +83,15 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
83
83
|
p.href = l, p.download = y, document.body.appendChild(p), p.click(), document.body.removeChild(p), URL.revokeObjectURL(l);
|
|
84
84
|
} else
|
|
85
85
|
k.warning("请选择要操作的报表!");
|
|
86
|
-
}, B = () =>
|
|
87
|
-
await ue(o.id)
|
|
86
|
+
}, B = () => h.currentRoute.value.path.startsWith("/admin") ? "/admin" : "", j = async (o) => {
|
|
87
|
+
await ue(o.id) ? h.push(`${B()}/statement/design/${o.id}`) : await U.confirm("报表正在被其他用户锁定,是否强制解锁?", "提示", {
|
|
88
88
|
confirmButtonText: "解锁",
|
|
89
|
-
cancelButtonText: "取消"
|
|
89
|
+
cancelButtonText: "取消",
|
|
90
|
+
type: "warning"
|
|
91
|
+
}).catch(() => {
|
|
90
92
|
}) === "confirm" && (await ce(o.id) ? j(o) : k.error("解锁失败,请稍后再试!"));
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
+
}, O = (o) => {
|
|
94
|
+
h.push(`${B()}/statement/detail/${o.id}`);
|
|
93
95
|
};
|
|
94
96
|
G(() => {
|
|
95
97
|
g(!0);
|
|
@@ -137,7 +139,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
137
139
|
await D(s), g(!0), S();
|
|
138
140
|
}, T = (o) => {
|
|
139
141
|
o && (o.preventDefault(), o.stopPropagation()), g(!1);
|
|
140
|
-
},
|
|
142
|
+
}, P = () => {
|
|
141
143
|
d.key = "", g(!0);
|
|
142
144
|
};
|
|
143
145
|
return L(
|
|
@@ -162,7 +164,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
162
164
|
]),
|
|
163
165
|
n(e(m), {
|
|
164
166
|
text: "",
|
|
165
|
-
onClick:
|
|
167
|
+
onClick: M
|
|
166
168
|
}, {
|
|
167
169
|
default: i(() => [
|
|
168
170
|
u(c(e(a)("导出")), 1)
|
|
@@ -179,11 +181,11 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
179
181
|
_: 1
|
|
180
182
|
}),
|
|
181
183
|
f("div", ge, [
|
|
182
|
-
n(e(
|
|
184
|
+
n(e(w), {
|
|
183
185
|
label: e(a)("报表名称")
|
|
184
186
|
}, {
|
|
185
187
|
default: i(() => [
|
|
186
|
-
n(e(
|
|
188
|
+
n(e($), {
|
|
187
189
|
modelValue: d.key,
|
|
188
190
|
"onUpdate:modelValue": t[1] || (t[1] = (l) => d.key = l),
|
|
189
191
|
onKeyup: Z(T, ["enter"]),
|
|
@@ -203,7 +205,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
203
205
|
_: 1
|
|
204
206
|
}),
|
|
205
207
|
n(e(m), {
|
|
206
|
-
onClick: t[3] || (t[3] = (l) =>
|
|
208
|
+
onClick: t[3] || (t[3] = (l) => P())
|
|
207
209
|
}, {
|
|
208
210
|
default: i(() => [
|
|
209
211
|
u(c(e(a)("重置")), 1)
|
|
@@ -251,7 +253,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
251
253
|
n(e(m), {
|
|
252
254
|
link: "",
|
|
253
255
|
title: e(a)("本系统前台菜单地址"),
|
|
254
|
-
onClick: (r) =>
|
|
256
|
+
onClick: (r) => x(l.row, "inner")
|
|
255
257
|
}, {
|
|
256
258
|
default: i(() => [
|
|
257
259
|
u(c(e(a)("菜单")), 1)
|
|
@@ -261,7 +263,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
261
263
|
n(e(m), {
|
|
262
264
|
link: "",
|
|
263
265
|
title: e(a)("后台测试"),
|
|
264
|
-
onClick: (r) =>
|
|
266
|
+
onClick: (r) => x(l.row, "admin")
|
|
265
267
|
}, {
|
|
266
268
|
default: i(() => [
|
|
267
269
|
u(c(e(a)("后台")), 1)
|
|
@@ -271,7 +273,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
271
273
|
n(e(m), {
|
|
272
274
|
link: "",
|
|
273
275
|
title: e(a)("其他系统嵌入地址"),
|
|
274
|
-
onClick: (r) =>
|
|
276
|
+
onClick: (r) => x(l.row, "outside")
|
|
275
277
|
}, {
|
|
276
278
|
default: i(() => [
|
|
277
279
|
u(c(e(a)("外嵌")), 1)
|
|
@@ -292,7 +294,7 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
292
294
|
n(e(m), {
|
|
293
295
|
type: "primary",
|
|
294
296
|
link: "",
|
|
295
|
-
onClick: (r) =>
|
|
297
|
+
onClick: (r) => O(l.row)
|
|
296
298
|
}, {
|
|
297
299
|
default: i(() => [
|
|
298
300
|
t[12] || (t[12] = f("i", { class: "yhreport-icon report-preview" }, null, -1)),
|
|
@@ -381,12 +383,12 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
381
383
|
"label-width": "120"
|
|
382
384
|
}, {
|
|
383
385
|
default: i(() => [
|
|
384
|
-
n(e(
|
|
386
|
+
n(e(w), {
|
|
385
387
|
label: e(a)("报表代码"),
|
|
386
388
|
required: ""
|
|
387
389
|
}, {
|
|
388
390
|
default: i(() => [
|
|
389
|
-
n(e(
|
|
391
|
+
n(e($), {
|
|
390
392
|
modelValue: s.code,
|
|
391
393
|
"onUpdate:modelValue": t[6] || (t[6] = (l) => s.code = l),
|
|
392
394
|
autocomplete: "off"
|
|
@@ -394,12 +396,12 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
394
396
|
]),
|
|
395
397
|
_: 1
|
|
396
398
|
}, 8, ["label"]),
|
|
397
|
-
n(e(
|
|
399
|
+
n(e(w), {
|
|
398
400
|
label: e(a)("报表名称"),
|
|
399
401
|
required: ""
|
|
400
402
|
}, {
|
|
401
403
|
default: i(() => [
|
|
402
|
-
n(e(
|
|
404
|
+
n(e($), {
|
|
403
405
|
modelValue: s.name,
|
|
404
406
|
"onUpdate:modelValue": t[7] || (t[7] = (l) => s.name = l),
|
|
405
407
|
autocomplete: "off"
|
|
@@ -407,12 +409,12 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
407
409
|
]),
|
|
408
410
|
_: 1
|
|
409
411
|
}, 8, ["label"]),
|
|
410
|
-
n(e(
|
|
412
|
+
n(e(w), {
|
|
411
413
|
label: e(a)("描述"),
|
|
412
414
|
required: ""
|
|
413
415
|
}, {
|
|
414
416
|
default: i(() => [
|
|
415
|
-
n(e(
|
|
417
|
+
n(e($), {
|
|
416
418
|
modelValue: s.description,
|
|
417
419
|
"onUpdate:modelValue": t[8] || (t[8] = (l) => s.description = l),
|
|
418
420
|
type: "textarea",
|
|
@@ -431,6 +433,6 @@ const pe = { class: "statement-list-container" }, me = { class: "actions" }, fe
|
|
|
431
433
|
}
|
|
432
434
|
});
|
|
433
435
|
export {
|
|
434
|
-
|
|
436
|
+
he as default
|
|
435
437
|
};
|
|
436
|
-
//# sourceMappingURL=StatementList-
|
|
438
|
+
//# sourceMappingURL=StatementList-CCH8sOd3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementList-CCH8sOd3.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 {{ rct('导入') }}\n </div>\n <el-button\n text\n @click=\"exportReport\">\n {{ rct('导出') }}\n </el-button>\n <el-button\n type=\"primary\"\n @click=\"toAddForm\">\n {{ rct('新增') }}\n </el-button>\n <div class=\"form-context\">\n <el-form-item :label=\"rct('报表名称')\">\n <el-input\n v-model=\"listForm.key\"\n @keyup.enter=\"onSearch\"\n :placeholder=\"rct('键入关键字搜索报表')\"></el-input>\n </el-form-item>\n </div>\n <el-button\n type=\"primary\"\n @click=\"onSearch()\">\n {{ rct('搜索') }}\n </el-button>\n <el-button @click=\"onReset()\">{{ rct('重置') }}</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=\"rct('报表代码')\"\n min-width=\"100\"\n prop=\"code\"></el-table-column>\n <el-table-column\n :label=\"rct('报表名称')\"\n min-width=\"100\"\n prop=\"name\"></el-table-column>\n <el-table-column\n :label=\"rct('描述')\"\n min-width=\"200\"\n prop=\"description\"></el-table-column>\n <el-table-column\n :label=\"rct('操作')\"\n width=\"490\"\n fixed=\"right\">\n <template #default=\"scope\">\n <el-button\n link\n :title=\"rct('本系统前台菜单地址')\"\n @click=\"copyLink(scope.row, 'inner')\">\n {{ rct('菜单') }}\n </el-button>\n <el-button\n link\n :title=\"rct('后台测试')\"\n @click=\"copyLink(scope.row, 'admin')\">\n {{ rct('后台') }}\n </el-button>\n <el-button\n link\n :title=\"rct('其他系统嵌入地址')\"\n @click=\"copyLink(scope.row, 'outside')\">\n {{ rct('外嵌') }}\n </el-button>\n <el-button\n type=\"primary\"\n link\n @click=\"toDesign(scope.row)\">\n <i class=\"yhreport-icon report-sheji\"></i>\n {{ rct('设计') }}\n </el-button>\n <el-button\n type=\"primary\"\n link\n @click=\"toView(scope.row)\">\n <i class=\"yhreport-icon report-preview\"></i>\n {{ rct('查看') }}\n </el-button>\n <el-button\n type=\"primary\"\n link\n @click=\"toEditor(scope.row)\">\n <i class=\"yhreport-icon report-bianji\"></i>\n {{ rct('编辑') }}\n </el-button>\n <el-button\n type=\"primary\"\n link\n @click=\"toCopy(scope.row)\">\n <i class=\"yhreport-icon report-fuzhi\"></i>\n {{ rct('复制') }}\n </el-button>\n <el-button\n type=\"danger\"\n link\n @click=\"toDelete(scope.row)\">\n <i class=\"yhreport-icon report-shanchusekuai\"></i>\n {{ rct('删除') }}\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 ? rct('编辑报表') : rct('新建报表')\">\n <el-form\n :model=\"form\"\n label-width=\"120\">\n <el-form-item\n :label=\"rct('报表代码')\"\n required>\n <el-input\n v-model=\"form.code\"\n autocomplete=\"off\" />\n </el-form-item>\n <el-form-item\n :label=\"rct('报表名称')\"\n required>\n <el-input\n v-model=\"form.name\"\n autocomplete=\"off\" />\n </el-form-item>\n <el-form-item\n :label=\"rct('描述')\"\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\">{{ rct('取消') }}</el-button>\n <el-button\n type=\"primary\"\n @click=\"saveForm()\">\n {{ rct('保存') }}\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 './libs/editorLock';\nimport {rct} from './index';\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 switch (type) {\n case 'admin':\n href = `/admin/statement/detail/${row.id}`;\n hrefName = '后台链接';\n break;\n case 'inner':\n href = `innerStatementdetail/${row.id}`;\n hrefName = '菜单链接';\n break;\n default:\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\n// 页面同时服务后台硬编码路由(/admin 前缀)与前台菜单入口(/statement/list),跳转按当前分支自适应前缀\nconst branchBase = () => (router.currentRoute.value.path.startsWith('/admin') ? '/admin' : '');\n\nconst toDesign = async (row) => {\n let res = await lockEditor(row.id);\n if (res) {\n router.push(`${branchBase()}/statement/design/${row.id}`);\n } else {\n // confirm 自带取消按钮;取消/关闭会 reject,需兜底避免未处理 rejection\n const toUnlock = await ElMessageBox.confirm('报表正在被其他用户锁定,是否强制解锁?', '提示', {\n confirmButtonText: '解锁',\n cancelButtonText: '取消',\n type: 'warning',\n }).catch(() => undefined);\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(`${branchBase()}/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 toCopy = (row) => {\n ElMessageBox.confirm('当前操作会复制选定的报表,确认继续吗?', '提醒', {\n confirmButtonText: '复制',\n cancelButtonText: '取消',\n type: 'warning',\n }).then(() => {\n let form = {\n name: `${row.name}-copy`,\n code: `${row.code}-copy`,\n description: `${row.description}-copy`,\n chartConfig: row.chartConfig,\n config: row.config,\n listData: row.listData,\n };\n save(form)\n .then(() => {\n ElMessage.success('复制成功');\n getStatementList(true);\n })\n .catch(() => {\n ElMessage.error('复制失败');\n });\n });\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":["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","branchBase","toDesign","lockEditor","ElMessageBox","unlockEditor","toView","onMounted","dialogFormVisible","form","toAddForm","toEditor","toCopy","toDelete","del","cancelForm","saveForm","onSearch","onReset","watch","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_cache","$event","_createTextVNode","_unref","rct","_createVNode","ElButton","_hoisted_4","ElFormItem","ElInput","ElTable","ElTableColumn","_withCtx","scope","ElPagination","ElDialog","_hoisted_5","ElForm"],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ const p = async (e) => {
|
|
|
19
19
|
async function c(e) {
|
|
20
20
|
e = `report-${e}`;
|
|
21
21
|
let t = await k(e);
|
|
22
|
-
return t && t.data && t.data.
|
|
22
|
+
return t && t.data && t.data.result === !0 || !1;
|
|
23
23
|
}
|
|
24
24
|
function I(e, t, s) {
|
|
25
25
|
let n = null, i = !1;
|
|
@@ -38,7 +38,7 @@ function I(e, t, s) {
|
|
|
38
38
|
}, a = (v) => {
|
|
39
39
|
i || (i = !0, document.visibilityState === "visible" ? o.confirm("欢迎回来,刚已保存并释放互斥锁,是否继续编辑?").then(() => {
|
|
40
40
|
c(e).then((u) => {
|
|
41
|
-
u
|
|
41
|
+
u ? (n && clearInterval(n), l()) : o.alert("其他人正在编辑该报表,确认后回到列表页").then(() => {
|
|
42
42
|
s.back();
|
|
43
43
|
});
|
|
44
44
|
}).catch(() => {
|
|
@@ -69,4 +69,4 @@ export {
|
|
|
69
69
|
c as l,
|
|
70
70
|
p as u
|
|
71
71
|
};
|
|
72
|
-
//# sourceMappingURL=editorLock-
|
|
72
|
+
//# sourceMappingURL=editorLock-Cv5UpPr7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editorLock-Cv5UpPr7.mjs","sources":["../libs/editorLock.ts"],"sourcesContent":["import axios from '@/libs/api.request';\nimport {onMounted, onBeforeUnmount, onActivated, onDeactivated} 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 // 成功标志是布尔 result,msg 仅是展示文案(如\"锁定成功\"),不能作为判定依据\n return (res && res.data && res.data.result === true) || 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 if (timer) return false;\n timer = setInterval(\n () => {\n lockEditor(id).then((res) => {\n locked = res;\n });\n },\n 1 * 60 * 1000\n );\n };\n\n const stopInterval = () => {\n unlockEditor(id).then(() => {\n locked = false;\n });\n if (timer) {\n clearInterval(timer);\n timer = null; // 清空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) {\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 onActivated(() => {\n window.addEventListener('visibilitychange', visibleHandler, false);\n startInterval();\n });\n\n onDeactivated(() => {\n window.removeEventListener('visibilitychange', visibleHandler, false);\n stopInterval();\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","onActivated","onDeactivated","onBeforeRouteLeave","onBeforeUnmount"],"mappings":";;;;AAIA,SAASA,EAAQC,GAAK;AACpB,SAAOC,EAAM,QAAQ;AAAA,IACnB,KAAK,iBAAiBD,CAAG;AAAA,IACzB,QAAQ;AAAA,EAAA,CACT;AACH;AAEO,MAAME,IAAe,OAAOC,MAAO;AACxC,EAAAA,IAAK,UAAUA,CAAE;AACjB,QAAMC,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;AACjB,MAAIC,IAAM,MAAML,EAAQI,CAAE;AAE1B,SAAQC,KAAOA,EAAI,QAAQA,EAAI,KAAK,WAAW,MAAS;AAC1D;AAEO,SAASE,EAAcH,GAAII,GAAMC,GAAQ;AAC9C,MAAIC,IAAa,MAEbC,IAAa;AAEjB,QAAMC,IAAgB,MAAM;AAC1B,QAAIF,EAAO,QAAO;AAClB,IAAAA,IAAQ;AAAA,MACN,MAAM;AACJ,QAAAJ,EAAWF,CAAE,EAAE,KAAK,CAACC,MAAQ;AAAA,QAE7B,CAAC;AAAA,MACH;AAAA,MACA,IAAI,KAAK;AAAA,IAAA;AAAA,EAEb,GAEMQ,IAAe,MAAM;AACzB,IAAAV,EAAaC,CAAE,EAAE,KAAK,MAAM;AAAA,IAE5B,CAAC,GACGM,MACF,cAAcA,CAAK,GACnBA,IAAQ;AAAA,EAEZ,GAEMI,IAAiB,CAACC,MAAM;AAC5B,IAAKJ,MACHA,IAAa,IACT,SAAS,oBAAoB,YAC/BK,EAAa,QAAQ,yBAAyB,EAC3C,KAAK,MAAM;AACV,MAAAV,EAAWF,CAAE,EACV,KAAK,CAACC,MAAQ;AAEb,QAAIA,KACEK,mBAAqBA,CAAK,GAC9BE,EAAA,KAEAI,EAAa,MAAM,qBAAqB,EAAE,KAAK,MAAM;AACnD,UAAAP,EAAO,KAAA;AAAA,QACT,CAAC;AAAA,MAEL,CAAC,EACA,MAAM,MAAM;AAEX,QAAAO,EAAa,MAAM,eAAe;AAAA,MACpC,CAAC;AAAA,IACL,CAAC,EACA,MAAM,MAAM;AACX,MAAAP,EAAO,KAAA;AAAA,IACT,CAAC,EACA,QAAQ,MAAM;AACb,MAAAE,IAAa;AAAA,IACf,CAAC,IAEHH,EAAA,EAAO,KAAK,MAAM;AAChB,MAAAK,EAAA,GACAF,IAAa;AAAA,IACf,CAAC;AAAA,EAGP;AAEA,EAAAM,EAAU,MAAM;AACd,WAAO,iBAAiB,oBAAoBH,GAAgB,EAAK,GACjEF,EAAA;AAAA,EACF,CAAC,GAEDM,EAAY,MAAM;AAChB,WAAO,iBAAiB,oBAAoBJ,GAAgB,EAAK,GACjEF,EAAA;AAAA,EACF,CAAC,GAEDO,EAAc,MAAM;AAClB,WAAO,oBAAoB,oBAAoBL,GAAgB,EAAK,GACpED,EAAA;AAAA,EACF,CAAC,GAEDO,EAAmB,MAAM;AACvB,WAAO,oBAAoB,oBAAoBN,GAAgB,EAAK,GACpED,EAAA;AAAA,EACF,CAAC,GACDQ,EAAgB,MAAM;AACpB,WAAO,oBAAoB,oBAAoBP,GAAgB,EAAK,GACpED,EAAA;AAAA,EACF,CAAC;AACH;"}
|
|
@@ -12418,7 +12418,7 @@ async function registerRoute(t, e) {
|
|
|
12418
12418
|
title: "报表列表",
|
|
12419
12419
|
icon: "iconfont icon-s-grid"
|
|
12420
12420
|
},
|
|
12421
|
-
component: () => import("./StatementList-
|
|
12421
|
+
component: () => import("./StatementList-CCH8sOd3.mjs")
|
|
12422
12422
|
}), e.addRoute("Index", {
|
|
12423
12423
|
path: "statement/design/:id",
|
|
12424
12424
|
name: "报表设计",
|
|
@@ -12427,7 +12427,7 @@ async function registerRoute(t, e) {
|
|
|
12427
12427
|
title: "报表设计",
|
|
12428
12428
|
icon: "iconfont icon-s-grid"
|
|
12429
12429
|
},
|
|
12430
|
-
component: () => import("./StatementDesign-
|
|
12430
|
+
component: () => import("./StatementDesign-BxNPOJtR.mjs")
|
|
12431
12431
|
}), e.addRoute("Index", {
|
|
12432
12432
|
path: "statement/detail/:id",
|
|
12433
12433
|
name: "后台报表查看",
|
|
@@ -12436,7 +12436,7 @@ async function registerRoute(t, e) {
|
|
|
12436
12436
|
title: "后台报表查看",
|
|
12437
12437
|
icon: "iconfont icon-s-grid"
|
|
12438
12438
|
},
|
|
12439
|
-
component: () => import("./StatementDetail-
|
|
12439
|
+
component: () => import("./StatementDetail-CjEO3McA.mjs")
|
|
12440
12440
|
})) : e.hasRoute("Index") && (e.addRoute("Index", {
|
|
12441
12441
|
path: "statement/design/:id",
|
|
12442
12442
|
name: "报表设计",
|
|
@@ -12445,7 +12445,7 @@ async function registerRoute(t, e) {
|
|
|
12445
12445
|
title: "报表设计",
|
|
12446
12446
|
icon: "iconfont icon-s-grid"
|
|
12447
12447
|
},
|
|
12448
|
-
component: () => import("./StatementDesign-
|
|
12448
|
+
component: () => import("./StatementDesign-BxNPOJtR.mjs")
|
|
12449
12449
|
}), e.addRoute("Index", {
|
|
12450
12450
|
path: "statement/detail/:id",
|
|
12451
12451
|
name: "前台报表查看",
|
|
@@ -12454,7 +12454,7 @@ async function registerRoute(t, e) {
|
|
|
12454
12454
|
title: "报表查看",
|
|
12455
12455
|
icon: "iconfont icon-s-grid"
|
|
12456
12456
|
},
|
|
12457
|
-
component: () => import("./StatementDetail-
|
|
12457
|
+
component: () => import("./StatementDetail-CjEO3McA.mjs")
|
|
12458
12458
|
})), e.addRoute({
|
|
12459
12459
|
path: "/statementdetail/:id",
|
|
12460
12460
|
name: "报表查看",
|
|
@@ -12465,7 +12465,7 @@ async function registerRoute(t, e) {
|
|
|
12465
12465
|
isWhite: !0
|
|
12466
12466
|
},
|
|
12467
12467
|
props: !0,
|
|
12468
|
-
component: () => import("./StatementDetail-
|
|
12468
|
+
component: () => import("./StatementDetail-CjEO3McA.mjs")
|
|
12469
12469
|
}), e.hasRoute("Index") && e.addRoute("Index", {
|
|
12470
12470
|
path: "innerStatementdetail/:id",
|
|
12471
12471
|
name: "系统内报表查看",
|
|
@@ -12476,7 +12476,7 @@ async function registerRoute(t, e) {
|
|
|
12476
12476
|
noPadding: !0
|
|
12477
12477
|
},
|
|
12478
12478
|
props: !0,
|
|
12479
|
-
component: () => import("./StatementDetail-
|
|
12479
|
+
component: () => import("./StatementDetail-CjEO3McA.mjs")
|
|
12480
12480
|
});
|
|
12481
12481
|
}
|
|
12482
12482
|
const index = {
|
|
@@ -12502,7 +12502,7 @@ const index = {
|
|
|
12502
12502
|
url: "/admin/statement/list",
|
|
12503
12503
|
menuType: "WINDOW"
|
|
12504
12504
|
}), c == null || c({
|
|
12505
|
-
"/statement/list": () => import("./StatementList-
|
|
12505
|
+
"/statement/list": () => import("./StatementList-CCH8sOd3.mjs")
|
|
12506
12506
|
}), o(async () => {
|
|
12507
12507
|
!a || !a.hasRoute("Index") || registerRoute(s.isAdmin, a);
|
|
12508
12508
|
}), l && (e != null && e.printEnabled) && l.registerSlot({
|
|
@@ -12600,4 +12600,4 @@ export {
|
|
|
12600
12600
|
parseShiftOffset as y,
|
|
12601
12601
|
formatShiftOffset as z
|
|
12602
12602
|
};
|
|
12603
|
-
//# sourceMappingURL=index-
|
|
12603
|
+
//# sourceMappingURL=index-BDXDWonb.mjs.map
|