yh-report 2.0.20 → 2.0.21

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