yh-report 2.3.13 → 2.3.15

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 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-7368d34c.mjs";
3
+ import { n as u } from "./index-568b080b.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-6a22356c.mjs.map
28
+ //# sourceMappingURL=StatementDetail-a26c138c.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatementDetail-6a22356c.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
+ {"version":3,"file":"StatementDetail-a26c138c.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,67 +1,68 @@
1
- import { defineComponent as H, reactive as z, ref as S, onMounted as J, watch as U, openBlock as K, createElementBlock as I, createElementVNode as f, createTextVNode as u, createVNode as o, unref as n, withCtx as a, withKeys as G } from "vue";
2
- import { useRouter as Q } from "vue-router";
3
- import { g as W, s as j, d as X, a as Z } from "./index-7368d34c.mjs";
4
- import { ElButton as p, ElFormItem as w, ElInput as _, ElTable as ee, ElTableColumn as v, ElPagination as te, ElDialog as oe, ElForm as ne, ElMessage as b, ElLoading as le, ElMessageBox as ae } from "element-plus";
1
+ import { defineComponent as H, reactive as U, ref as E, onMounted as J, watch as j, openBlock as I, createElementBlock as G, createElementVNode as f, createTextVNode as u, createVNode as n, unref as l, withCtx as a, withKeys as Q } from "vue";
2
+ import { useRouter as W } from "vue-router";
3
+ import { g as X, s as D, d as Z, a as ee } from "./index-568b080b.mjs";
4
+ import { ElButton as p, ElFormItem as _, ElInput as w, ElTable as te, ElTableColumn as v, ElPagination as oe, ElDialog as ne, ElForm as le, ElMessage as b, ElLoading as ae, ElMessageBox as L } from "element-plus";
5
+ import { l as ie, u as re } from "./editorLock-8f7ea66b.mjs";
5
6
  import "@/libs/api.request.js";
6
7
  import "lodash-es";
7
8
  import "echarts";
8
- function ie(C) {
9
+ function se(x) {
9
10
  if (navigator.clipboard && window.isSecureContext)
10
- return navigator.clipboard.writeText(C), Promise.resolve();
11
+ return navigator.clipboard.writeText(x), Promise.resolve();
11
12
  {
12
13
  let c = document.createElement("textarea");
13
- c.value = C, c.style.position = "absolute", c.style.opacity = "0", c.style.left = "-200%", c.style.top = "-200%", document.body.appendChild(c), c.focus(), c.select();
14
+ c.value = x, c.style.position = "absolute", c.style.opacity = "0", c.style.left = "-200%", c.style.top = "-200%", document.body.appendChild(c), c.focus(), c.select();
14
15
  let i = document.execCommand("copy");
15
16
  return c.remove(), i ? Promise.resolve() : Promise.reject(new Error("copy error"));
16
17
  }
17
18
  }
18
- const re = { class: "statement-list-container" }, se = { class: "actions" }, de = { class: "el-button is-text import-excel-button" }, ue = { class: "form-context" }, ce = /* @__PURE__ */ f("i", { class: "iconfont icon-antdesign" }, null, -1), pe = /* @__PURE__ */ f("i", { class: "iconfont icon-view" }, null, -1), me = /* @__PURE__ */ f("i", { class: "iconfont icon-edit-outline" }, null, -1), fe = /* @__PURE__ */ f("i", { class: "iconfont icon-delete" }, null, -1), ge = { class: "dialog-footer" }, xe = /* @__PURE__ */ H({
19
+ const de = { class: "statement-list-container" }, ue = { class: "actions" }, ce = { 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({
19
20
  __name: "StatementList",
20
- setup(C) {
21
- const c = Q(), i = z({
21
+ setup(x) {
22
+ const c = W(), i = U({
22
23
  key: "",
23
24
  pageSize: 10,
24
25
  pageNumber: 1,
25
26
  total: 0
26
- }), $ = S([]);
27
- async function g(l = !1) {
28
- l && (i.pageNumber = 1, i.total = 0);
29
- const t = await W({
27
+ }), S = E([]);
28
+ async function g(o = !1) {
29
+ o && (i.pageNumber = 1, i.total = 0);
30
+ const t = await X({
30
31
  key: i.key,
31
32
  pageSize: i.pageSize,
32
33
  pageNumber: i.pageNumber
33
34
  });
34
- $.value = t.data.list, i.total = t.data.total;
35
+ S.value = t.data.list, i.total = t.data.total;
35
36
  }
36
- function E(l, t) {
37
+ function $(o, t) {
37
38
  let e = "", s = "链接";
38
- t === "inner" ? (e = `innerStatementdetail/${l.id}`, s = "内部链接") : (e = `${window.location.origin}${window.location.pathname}#/statementdetail/${l.id}`, s = "外部链接"), ie(e).then(() => {
39
+ t === "inner" ? (e = `innerStatementdetail/${o.id}`, s = "内部链接") : (e = `${window.location.origin}${window.location.pathname}#/statementdetail/${o.id}`, s = "外部链接"), se(e).then(() => {
39
40
  b.success(s + "复制成功");
40
41
  }).catch(() => {
41
42
  b.error(s + "复制遇到问题");
42
43
  });
43
44
  }
44
- const x = S([]), D = (l) => {
45
- x.value = l;
46
- }, L = async (l) => {
47
- const t = l.target.files[0];
45
+ const C = E([]), T = (o) => {
46
+ C.value = o;
47
+ }, B = async (o) => {
48
+ const t = o.target.files[0];
48
49
  if (!t)
49
50
  return;
50
51
  const e = new FileReader();
51
52
  e.onload = async (s) => {
52
- l.target.value = "";
53
+ o.target.value = "";
53
54
  try {
54
55
  if (s.target) {
55
56
  const m = JSON.parse(s.target.result);
56
57
  if (Array.isArray(m) && m.every((d) => typeof d == "object" && "code" in d && "config" in d && "description" in d && "name" in d)) {
57
- const d = le.service({
58
+ const d = ae.service({
58
59
  fullscreen: !0,
59
60
  text: `正在导入报表,共 ${m.length} 个,请稍候...`
60
61
  });
61
62
  for (let y = 0; y < m.length; y++) {
62
63
  d.setText(`正在保存第 ${y + 1} 个,共 ${m.length} 个,请稍候...`);
63
64
  const V = m[y];
64
- await j(V);
65
+ await D(V);
65
66
  }
66
67
  d.close(), g(!0);
67
68
  } else
@@ -72,9 +73,9 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
72
73
  }
73
74
  }, e.readAsText(t);
74
75
  }, R = () => {
75
- if (x.value.length > 0) {
76
- const l = JSON.stringify(
77
- x.value.map(({ code: y, config: V, description: Y, name: q }) => ({
76
+ if (C.value.length > 0) {
77
+ const o = JSON.stringify(
78
+ C.value.map(({ code: y, config: V, description: Y, name: q }) => ({
78
79
  code: y,
79
80
  config: V,
80
81
  description: Y,
@@ -82,74 +83,81 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
82
83
  })),
83
84
  null,
84
85
  2
85
- ), t = new Blob([l], { type: "application/json" }), e = URL.createObjectURL(t), m = `报表导出-${X().format("YYYYMMDDHHmm")}.json`, d = document.createElement("a");
86
+ ), t = new Blob([o], { type: "application/json" }), e = URL.createObjectURL(t), m = `报表导出-${Z().format("YYYYMMDDHHmm")}.json`, d = document.createElement("a");
86
87
  d.href = e, d.download = m, document.body.appendChild(d), d.click(), document.body.removeChild(d), URL.revokeObjectURL(e);
87
88
  } else
88
89
  b.warning("请选择要操作的报表!");
89
90
  };
90
- function F(l) {
91
- c.push(`/admin/statement/design/${l.id}`);
91
+ async function N(o) {
92
+ await ie(o.id) === "OK" ? c.push(`/admin/statement/design/${o.id}`) : L.alert("报表正在被其他用户锁定,是否强制解锁?", "提示", {
93
+ confirmButtonText: "解锁",
94
+ cancelButtonText: "取消"
95
+ }).then(() => {
96
+ re(o.id).then(() => {
97
+ N(o);
98
+ });
99
+ });
92
100
  }
93
- function T(l) {
94
- c.push(`/admin/statement/detail/${l.id}`);
101
+ function F(o) {
102
+ c.push(`/admin/statement/detail/${o.id}`);
95
103
  }
96
104
  J(() => {
97
105
  g(!0);
98
106
  });
99
- const k = S(!1), r = z({
107
+ const k = E(!1), r = U({
100
108
  id: void 0,
101
109
  name: "",
102
110
  code: "",
103
111
  description: ""
104
112
  });
105
- function B() {
113
+ function O() {
106
114
  k.value = !0;
107
115
  }
108
- function P(l) {
109
- k.value = !0, r.id = l.id, r.name = l.name, r.code = l.code, r.description = l.description;
116
+ function P(o) {
117
+ k.value = !0, r.id = o.id, r.name = o.name, r.code = o.code, r.description = o.description;
110
118
  }
111
- function A(l) {
112
- ae.confirm("当前操作会删除选定的报表,确认继续吗?", "警告", {
119
+ function A(o) {
120
+ L.confirm("当前操作会删除选定的报表,确认继续吗?", "警告", {
113
121
  confirmButtonText: "删除",
114
122
  cancelButtonText: "取消",
115
123
  type: "warning"
116
124
  }).then(async () => {
117
- (await Z(l.id)).data && g(!0);
125
+ (await ee(o.id)).data && g(!0);
118
126
  });
119
127
  }
120
128
  function h() {
121
129
  k.value = !1, r.id = void 0, r.name = "", r.code = "", r.description = "";
122
130
  }
123
131
  async function M() {
124
- await j(r), g(!0), h();
132
+ await D(r), g(!0), h();
125
133
  }
126
- function N(l) {
127
- l && (l.preventDefault(), l.stopPropagation()), g(!1);
134
+ function z(o) {
135
+ o && (o.preventDefault(), o.stopPropagation()), g(!1);
128
136
  }
129
- function O() {
137
+ function K() {
130
138
  i.key = "", g(!0);
131
139
  }
132
- return U(
140
+ return j(
133
141
  () => i.pageNumber,
134
142
  () => {
135
143
  g();
136
144
  }
137
- ), U(
145
+ ), j(
138
146
  () => i.pageSize,
139
147
  () => {
140
148
  g();
141
149
  }
142
- ), (l, t) => (K(), I("section", re, [
143
- f("div", se, [
144
- f("div", de, [
150
+ ), (o, t) => (I(), G("section", de, [
151
+ f("div", ue, [
152
+ f("div", ce, [
145
153
  f("input", {
146
154
  class: "import-excel-input",
147
155
  type: "file",
148
- onChange: t[0] || (t[0] = (e) => L(e))
156
+ onChange: t[0] || (t[0] = (e) => B(e))
149
157
  }, null, 32),
150
158
  u(" 导入 ")
151
159
  ]),
152
- o(n(p), {
160
+ n(l(p), {
153
161
  text: "",
154
162
  onClick: R
155
163
  }, {
@@ -158,39 +166,39 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
158
166
  ]),
159
167
  _: 1
160
168
  }),
161
- o(n(p), {
169
+ n(l(p), {
162
170
  type: "primary",
163
- onClick: B
171
+ onClick: O
164
172
  }, {
165
173
  default: a(() => [
166
174
  u(" 新增 ")
167
175
  ]),
168
176
  _: 1
169
177
  }),
170
- f("div", ue, [
171
- o(n(w), { label: "报表名称" }, {
178
+ f("div", pe, [
179
+ n(l(_), { label: "报表名称" }, {
172
180
  default: a(() => [
173
- o(n(_), {
181
+ n(l(w), {
174
182
  modelValue: i.key,
175
183
  "onUpdate:modelValue": t[1] || (t[1] = (e) => i.key = e),
176
- onKeyup: G(N, ["enter"]),
184
+ onKeyup: Q(z, ["enter"]),
177
185
  placeholder: "键入关键字搜索报表"
178
186
  }, null, 8, ["modelValue", "onKeyup"])
179
187
  ]),
180
188
  _: 1
181
189
  })
182
190
  ]),
183
- o(n(p), {
191
+ n(l(p), {
184
192
  type: "primary",
185
- onClick: t[2] || (t[2] = (e) => N())
193
+ onClick: t[2] || (t[2] = (e) => z())
186
194
  }, {
187
195
  default: a(() => [
188
196
  u(" 搜索 ")
189
197
  ]),
190
198
  _: 1
191
199
  }),
192
- o(n(p), {
193
- onClick: t[3] || (t[3] = (e) => O())
200
+ n(l(p), {
201
+ onClick: t[3] || (t[3] = (e) => K())
194
202
  }, {
195
203
  default: a(() => [
196
204
  u("重置")
@@ -198,103 +206,103 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
198
206
  _: 1
199
207
  })
200
208
  ]),
201
- o(n(ee), {
202
- data: $.value,
209
+ n(l(te), {
210
+ data: S.value,
203
211
  "row-key": "id",
204
- onSelectionChange: D
212
+ onSelectionChange: T
205
213
  }, {
206
214
  default: a(() => [
207
- o(n(v), {
215
+ n(l(v), {
208
216
  type: "selection",
209
217
  width: "50"
210
218
  }),
211
- o(n(v), {
219
+ n(l(v), {
212
220
  label: "#",
213
221
  type: "index",
214
222
  width: "66",
215
223
  left: ""
216
224
  }),
217
- o(n(v), {
225
+ n(l(v), {
218
226
  label: "报表代码",
219
227
  "min-width": "100",
220
228
  prop: "code"
221
229
  }),
222
- o(n(v), {
230
+ n(l(v), {
223
231
  label: "报表名称",
224
232
  "min-width": "100",
225
233
  prop: "name"
226
234
  }),
227
- o(n(v), {
235
+ n(l(v), {
228
236
  label: "描述",
229
237
  "min-width": "200",
230
238
  prop: "description"
231
239
  }),
232
- o(n(v), {
240
+ n(l(v), {
233
241
  label: "操作",
234
242
  width: "500",
235
243
  fixed: "right"
236
244
  }, {
237
245
  default: a((e) => [
238
- o(n(p), {
246
+ n(l(p), {
239
247
  link: "",
240
248
  title: "本系统前台页面嵌入地址",
241
- onClick: (s) => E(e.row, "inner")
249
+ onClick: (s) => $(e.row, "inner")
242
250
  }, {
243
251
  default: a(() => [
244
252
  u(" 内部链接 ")
245
253
  ]),
246
254
  _: 2
247
255
  }, 1032, ["onClick"]),
248
- o(n(p), {
256
+ n(l(p), {
249
257
  link: "",
250
258
  title: "其他系统嵌入地址",
251
- onClick: (s) => E(e.row, "outside")
259
+ onClick: (s) => $(e.row, "outside")
252
260
  }, {
253
261
  default: a(() => [
254
262
  u(" 外部链接 ")
255
263
  ]),
256
264
  _: 2
257
265
  }, 1032, ["onClick"]),
258
- o(n(p), {
266
+ n(l(p), {
259
267
  type: "primary",
260
268
  link: "",
261
- onClick: (s) => F(e.row)
269
+ onClick: (s) => N(e.row)
262
270
  }, {
263
271
  default: a(() => [
264
- ce,
272
+ me,
265
273
  u(" 设计 ")
266
274
  ]),
267
275
  _: 2
268
276
  }, 1032, ["onClick"]),
269
- o(n(p), {
277
+ n(l(p), {
270
278
  type: "primary",
271
279
  link: "",
272
- onClick: (s) => T(e.row)
280
+ onClick: (s) => F(e.row)
273
281
  }, {
274
282
  default: a(() => [
275
- pe,
283
+ fe,
276
284
  u(" 查看 ")
277
285
  ]),
278
286
  _: 2
279
287
  }, 1032, ["onClick"]),
280
- o(n(p), {
288
+ n(l(p), {
281
289
  type: "primary",
282
290
  link: "",
283
291
  onClick: (s) => P(e.row)
284
292
  }, {
285
293
  default: a(() => [
286
- me,
294
+ ge,
287
295
  u(" 编辑 ")
288
296
  ]),
289
297
  _: 2
290
298
  }, 1032, ["onClick"]),
291
- o(n(p), {
299
+ n(l(p), {
292
300
  type: "danger",
293
301
  link: "",
294
302
  onClick: (s) => A(e.row)
295
303
  }, {
296
304
  default: a(() => [
297
- fe,
305
+ ye,
298
306
  u(" 删除 ")
299
307
  ]),
300
308
  _: 2
@@ -305,7 +313,7 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
305
313
  ]),
306
314
  _: 1
307
315
  }, 8, ["data"]),
308
- o(n(te), {
316
+ n(l(oe), {
309
317
  background: "",
310
318
  style: { "padding-top": "10px", "justify-content": "flex-end" },
311
319
  "page-sizes": [10, 20, 50, 100],
@@ -316,21 +324,21 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
316
324
  "onUpdate:currentPage": t[5] || (t[5] = (e) => i.pageNumber = e),
317
325
  layout: "sizes,prev,pager,next,total"
318
326
  }, null, 8, ["page-size", "total", "current-page"]),
319
- o(n(oe), {
327
+ n(l(ne), {
320
328
  modelValue: k.value,
321
329
  "onUpdate:modelValue": t[10] || (t[10] = (e) => k.value = e),
322
330
  onClose: h,
323
331
  title: r.id ? "编辑报表" : "新建报表"
324
332
  }, {
325
333
  footer: a(() => [
326
- f("span", ge, [
327
- o(n(p), { onClick: h }, {
334
+ f("span", ve, [
335
+ n(l(p), { onClick: h }, {
328
336
  default: a(() => [
329
337
  u("取消")
330
338
  ]),
331
339
  _: 1
332
340
  }),
333
- o(n(p), {
341
+ n(l(p), {
334
342
  type: "primary",
335
343
  onClick: t[9] || (t[9] = (e) => M())
336
344
  }, {
@@ -342,17 +350,17 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
342
350
  ])
343
351
  ]),
344
352
  default: a(() => [
345
- o(n(ne), {
353
+ n(l(le), {
346
354
  model: r,
347
355
  "label-width": "120"
348
356
  }, {
349
357
  default: a(() => [
350
- o(n(w), {
358
+ n(l(_), {
351
359
  label: "报表代码",
352
360
  required: ""
353
361
  }, {
354
362
  default: a(() => [
355
- o(n(_), {
363
+ n(l(w), {
356
364
  modelValue: r.code,
357
365
  "onUpdate:modelValue": t[6] || (t[6] = (e) => r.code = e),
358
366
  autocomplete: "off"
@@ -360,12 +368,12 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
360
368
  ]),
361
369
  _: 1
362
370
  }),
363
- o(n(w), {
371
+ n(l(_), {
364
372
  label: "报表名称",
365
373
  required: ""
366
374
  }, {
367
375
  default: a(() => [
368
- o(n(_), {
376
+ n(l(w), {
369
377
  modelValue: r.name,
370
378
  "onUpdate:modelValue": t[7] || (t[7] = (e) => r.name = e),
371
379
  autocomplete: "off"
@@ -373,12 +381,12 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
373
381
  ]),
374
382
  _: 1
375
383
  }),
376
- o(n(w), {
384
+ n(l(_), {
377
385
  label: "描述",
378
386
  required: ""
379
387
  }, {
380
388
  default: a(() => [
381
- o(n(_), {
389
+ n(l(w), {
382
390
  modelValue: r.description,
383
391
  "onUpdate:modelValue": t[8] || (t[8] = (e) => r.description = e),
384
392
  type: "textarea",
@@ -397,6 +405,6 @@ const re = { class: "statement-list-container" }, se = { class: "actions" }, de
397
405
  }
398
406
  });
399
407
  export {
400
- xe as default
408
+ Ee as default
401
409
  };
402
- //# sourceMappingURL=StatementList-6ed86ab6.mjs.map
410
+ //# sourceMappingURL=StatementList-4c91a600.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatementList-4c91a600.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};\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\nasync function toDesign(row) {\n let res = await lockEditor(row.id);\n if (res === 'OK') {\n router.push(`/admin/statement/design/${row.id}`);\n } else {\n ElMessageBox.alert('报表正在被其他用户锁定,是否强制解锁?', '提示', {\n confirmButtonText: '解锁',\n cancelButtonText: '取消',\n }).then(() => {\n unlockEditor(row.id).then(() => {\n toDesign(row);\n });\n });\n }\n}\n\nfunction toView(row) {\n router.push(`/admin/statement/detail/${row.id}`);\n}\n\nonMounted(() => {\n getStatementList(true);\n});\n\n//新增报表\nconst dialogFormVisible = ref(false);\nconst form = reactive({\n id: undefined,\n name: '',\n code: '',\n description: '',\n});\n\nfunction toAddForm() {\n dialogFormVisible.value = true;\n}\n\nfunction toEditor(row) {\n dialogFormVisible.value = true;\n form.id = row.id;\n form.name = row.name;\n form.code = row.code;\n form.description = row.description;\n}\n\nfunction toDelete(row) {\n ElMessageBox.confirm('当前操作会删除选定的报表,确认继续吗?', '警告', {\n confirmButtonText: '删除',\n cancelButtonText: '取消',\n type: 'warning',\n }).then(async () => {\n let res = await del(row.id);\n if (res.data) {\n getStatementList(true);\n }\n });\n}\n\nfunction cancelForm() {\n dialogFormVisible.value = false;\n form.id = undefined;\n form.name = '';\n form.code = '';\n form.description = '';\n}\nasync function saveForm() {\n await save(form);\n getStatementList(true);\n cancelForm();\n}\n\n//搜索报表\nfunction onSearch(e?) {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n getStatementList(false);\n}\n\n//重置\nfunction onReset() {\n listForm.key = '';\n getStatementList(true);\n}\n\n//分页功能\nwatch(\n () => listForm.pageNumber,\n () => {\n getStatementList();\n }\n);\nwatch(\n () => listForm.pageSize,\n () => {\n getStatementList();\n }\n);\n</script>\n\n<style lang=\"scss\">\n.statement-list-container {\n width: 100%;\n height: 100%;\n padding: 10px 0 0;\n box-sizing: border-box;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .actions {\n display: flex;\n align-items: center;\n\n .form-context {\n flex: 1;\n margin: 0 10px;\n display: flex;\n }\n\n .el-form-item {\n margin-bottom: 0;\n margin-right: 10px;\n }\n }\n\n .el-table {\n flex: 1;\n }\n\n .el-dialog {\n .el-button--text {\n margin-right: 15px;\n }\n\n .el-form-item {\n width: 100%;\n }\n\n .el-select {\n width: 100%;\n }\n\n .el-input {\n width: 100%;\n }\n\n .dialog-footer button:first-child {\n margin-right: 10px;\n }\n }\n .import-excel-button {\n position: relative;\n .import-excel-input {\n position: absolute;\n left: 0;\n top: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 10;\n }\n }\n}\n</style>\n"],"names":["copyString","str","textArea","flag","router","useRouter","listForm","reactive","data","ref","getStatementList","res","getList","copyLink","row","type","href","hrefName","ElMessage","tableSelections","selectionChangeHandle","selections","importReport","e","file","reader","event","jsonData","item","loading","ElLoading","i","save","exportReport","code","config","description","name","blob","url","fileName","dayjs","a","toDesign","lockEditor","ElMessageBox","unlockEditor","toView","onMounted","dialogFormVisible","form","toAddForm","toEditor","toDelete","del","cancelForm","saveForm","onSearch","onReset","watch"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import f from "@/libs/api.request.js";
2
+ import { onMounted as v, onBeforeUnmount as h } from "vue";
3
+ import { onBeforeRouteLeave as b } from "vue-router";
4
+ import { ElMessageBox as a } from "element-plus";
5
+ function d(e) {
6
+ return f.request({
7
+ url: `dataLock/lock/${e}`,
8
+ method: "POST"
9
+ });
10
+ }
11
+ function k(e) {
12
+ return e = `report-${e}`, f.request({
13
+ url: `dataLock/unlock/${e}`,
14
+ method: "POST"
15
+ });
16
+ }
17
+ async function c(e) {
18
+ e = `report-${e}`;
19
+ let t = await d(e);
20
+ return t && t.data && t.data.msg || !1;
21
+ }
22
+ function y(e, t, i) {
23
+ let o = null, n = !1;
24
+ const s = () => {
25
+ o = setInterval(() => {
26
+ c(e).then((u) => {
27
+ });
28
+ }, 1 * 60 * 1e3);
29
+ }, l = () => {
30
+ k(e).then(() => {
31
+ }), o && clearInterval(o);
32
+ }, r = (u) => {
33
+ n || (n = !0, document.visibilityState === "visible" ? a.confirm("欢迎回来,刚已保存并释放互斥锁,是否继续编辑?").then(() => {
34
+ c(e).then((m) => {
35
+ m === "OK" ? (o && clearInterval(o), s()) : a.alert("其他人正在编辑该报表,确认后回到列表页").then(() => {
36
+ i.back();
37
+ });
38
+ }).catch(() => {
39
+ a.alert("无法获取编辑锁,请稍后重试");
40
+ });
41
+ }).catch(() => {
42
+ i.back();
43
+ }).finally(() => {
44
+ n = !1;
45
+ }) : t().then(() => {
46
+ l(), n = !1;
47
+ }));
48
+ };
49
+ v(() => {
50
+ console.log("mounted"), window.addEventListener("visibilitychange", r, !1), s();
51
+ }), b(() => {
52
+ console.log("before route leave"), window.removeEventListener("visibilitychange", r, !1), l();
53
+ }), h(() => {
54
+ console.log("before unmount"), window.removeEventListener("visibilitychange", r, !1), l();
55
+ });
56
+ }
57
+ export {
58
+ y as a,
59
+ c as l,
60
+ k as u
61
+ };
62
+ //# sourceMappingURL=editorLock-8f7ea66b.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorLock-8f7ea66b.mjs","sources":["../libs/editorLock.ts"],"sourcesContent":["import axios from '@/libs/api.request.js';\nimport {onMounted, onBeforeUnmount} from 'vue';\nimport {onBeforeRouteLeave, onBeforeRouteEnter} from 'vue-router';\nimport {ElMessageBox} from 'element-plus';\nimport {log} from 'echarts/types/src/util/log.js';\nfunction lockReq(key) {\n return axios.request({\n url: `dataLock/lock/${key}`,\n method: 'POST',\n });\n}\n\nexport function unlockEditor(id) {\n id = `report-${id}`;\n return axios.request({\n url: `dataLock/unlock/${id}`,\n method: 'POST',\n });\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 console.log('mounted');\n window.addEventListener('visibilitychange', visibleHandler, false);\n startInterval();\n });\n\n onBeforeRouteLeave(() => {\n console.log('before route leave');\n window.removeEventListener('visibilitychange', visibleHandler, false);\n stopInterval();\n });\n onBeforeUnmount(() => {\n console.log('before unmount');\n window.removeEventListener('visibilitychange', visibleHandler, false);\n stopInterval();\n });\n}\n"],"names":["lockReq","key","axios","unlockEditor","id","lockEditor","res","useDetailLock","save","router","timer","visibleAsk","startInterval","stopInterval","visibleHandler","e","ElMessageBox","onMounted","onBeforeRouteLeave","onBeforeUnmount"],"mappings":";;;;AAKA,SAASA,EAAQC,GAAK;AACpB,SAAOC,EAAM,QAAQ;AAAA,IACnB,KAAK,iBAAiBD,CAAG;AAAA,IACzB,QAAQ;AAAA,EAAA,CACT;AACH;AAEO,SAASE,EAAaC,GAAI;AAC/B,SAAAA,IAAK,UAAUA,CAAE,IACVF,EAAM,QAAQ;AAAA,IACnB,KAAK,mBAAmBE,CAAE;AAAA,IAC1B,QAAQ;AAAA,EAAA,CACT;AACH;AAEA,eAAsBC,EAAWD,GAAI;AACnC,EAAAA,IAAK,UAAUA,CAAE;AACb,MAAAE,IAAM,MAAMN,EAAQI,CAAE;AAC1B,SAAQE,KAAOA,EAAI,QAAQA,EAAI,KAAK,OAAQ;AAC9C;AAEgB,SAAAC,EAAcH,GAAII,GAAMC,GAAQ;AAC9C,MAAIC,IAAa,MAEbC,IAAa;AAEjB,QAAMC,IAAgB,MAAM;AAC1B,IAAAF,IAAQ,YAAY,MAAM;AACxB,MAAAL,EAAWD,CAAE,EAAE,KAAK,CAACE,MAAQ;AAAA,MACV,CAClB;AAAA,IAAA,GACA,IAAI,KAAK,GAAI;AAAA,EAAA,GAGZO,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,MAAAX,EAAWD,CAAE,EACV,KAAK,CAACE,MAAQ;AAEb,QAAIA,MAAQ,QACNI,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;AACd,YAAQ,IAAI,SAAS,GACd,OAAA,iBAAiB,oBAAoBH,GAAgB,EAAK,GACnDF;EAAA,CACf,GAEDM,EAAmB,MAAM;AACvB,YAAQ,IAAI,oBAAoB,GACzB,OAAA,oBAAoB,oBAAoBJ,GAAgB,EAAK,GACvDD;EAAA,CACd,GACDM,EAAgB,MAAM;AACpB,YAAQ,IAAI,gBAAgB,GACrB,OAAA,oBAAoB,oBAAoBL,GAAgB,EAAK,GACvDD;EAAA,CACd;AACH;"}