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.
@@ -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-DwoZb3xJ.mjs";
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-BzwPa27e.mjs.map
24
+ //# sourceMappingURL=StatementDetail-CjEO3McA.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatementDetail-BzwPa27e.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
+ {"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-DwoZb3xJ.mjs";
4
- import { ElButton as m, ElFormItem as $, ElInput as w, 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-CGeUFKpx.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" }, xe = /* @__PURE__ */ W({
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 x = ee(), d = R({
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 h(o, t) {
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
- }, O = () => {
71
+ }, M = () => {
72
72
  if (V.value.length > 0) {
73
73
  const o = JSON.stringify(
74
- V.value.map(({ code: b, config: E, description: P, name: I }) => ({
74
+ V.value.map(({ code: b, config: E, description: I, name: K }) => ({
75
75
  code: b,
76
76
  config: E,
77
- description: P,
78
- name: I
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 = () => x.currentRoute.value.path.startsWith("/admin") ? "/admin" : "", j = async (o) => {
87
- await ue(o.id) === "OK" ? x.push(`${B()}/statement/design/${o.id}`) : await U.alert("报表正在被其他用户锁定,是否强制解锁?", "提示", {
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
- }, M = (o) => {
92
- x.push(`${B()}/statement/detail/${o.id}`);
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
- }, K = () => {
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: O
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(w), {
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) => K())
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) => h(l.row, "inner")
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) => h(l.row, "admin")
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) => h(l.row, "outside")
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) => M(l.row)
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(w), {
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(w), {
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(w), {
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
- xe as default
436
+ he as default
435
437
  };
436
- //# sourceMappingURL=StatementList-5Bk_kecm.mjs.map
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.msg || !1;
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 === "OK" ? (n && clearInterval(n), l()) : o.alert("其他人正在编辑该报表,确认后回到列表页").then(() => {
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-CGeUFKpx.mjs.map
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-5Bk_kecm.mjs")
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-Bh4L1Dek.mjs")
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-BzwPa27e.mjs")
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-Bh4L1Dek.mjs")
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-BzwPa27e.mjs")
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-BzwPa27e.mjs")
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-BzwPa27e.mjs")
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-5Bk_kecm.mjs")
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-DwoZb3xJ.mjs.map
12603
+ //# sourceMappingURL=index-BDXDWonb.mjs.map