yh-report 2.3.29 → 2.3.30

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-15495668.mjs";
3
+ import { n as u } from "./index-4e632a7f.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-1b76c0d8.mjs.map
28
+ //# sourceMappingURL=StatementDetail-a9842c2d.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatementDetail-1b76c0d8.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-a9842c2d.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,6 +1,6 @@
1
1
  import { defineComponent as H, reactive as z, ref as E, onMounted as J, watch as j, openBlock as I, createElementBlock as G, createElementVNode as f, createTextVNode as c, createVNode as n, unref as l, withCtx as a, withKeys as Q } from "vue";
2
2
  import { useRouter as W } from "vue-router";
3
- import { g as X, s as D, d as Z, a as ee } from "./index-15495668.mjs";
3
+ import { g as X, s as D, d as Z, a as ee } from "./index-4e632a7f.mjs";
4
4
  import { ElButton as u, ElFormItem as w, ElInput as C, ElTable as te, ElTableColumn as k, ElPagination as oe, ElDialog as ne, ElForm as le, ElMessage as v, ElLoading as ae, ElMessageBox as L } from "element-plus";
5
5
  import { l as ie, u as re } from "./editorLock-afc375cb.mjs";
6
6
  import "@/libs/api.request.js";
@@ -413,4 +413,4 @@ const de = { class: "statement-list-container" }, ce = { class: "actions" }, ue
413
413
  export {
414
414
  Ve as default
415
415
  };
416
- //# sourceMappingURL=StatementList-5563818b.mjs.map
416
+ //# sourceMappingURL=StatementList-5d53ef55.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatementList-5563818b.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=\"440\"\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, 'admin')\">\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 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 case 'outside':\n href = `${window.location.origin}${window.location.pathname}#/statementdetail/${row.id}`;\n hrefName = '外部链接';\n }\n copyString(href)\n .then(() => {\n ElMessage.success(hrefName + '复制成功');\n })\n .catch(() => {\n ElMessage.error(hrefName + '复制遇到问题');\n });\n}\n\nconst tableSelections = ref([]);\nconst selectionChangeHandle = (selections) => {\n tableSelections.value = selections;\n};\n\nconst importReport = async (e) => {\n const file = e.target.files[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = async (event) => {\n e.target.value = '';\n try {\n if (event.target) {\n const jsonData = JSON.parse(event.target.result as string);\n if (Array.isArray(jsonData) && jsonData.every((item) => typeof item === 'object' && 'code' in item && 'config' in item && 'description' in item && 'name' in item)) {\n const loading = ElLoading.service({\n fullscreen: true,\n text: `正在导入报表,共 ${jsonData.length} 个,请稍候...`,\n });\n for (let i = 0; i < jsonData.length; i++) {\n loading.setText(`正在保存第 ${i + 1} 个,共 ${jsonData.length} 个,请稍候...`);\n const item = jsonData[i];\n await save(item);\n }\n loading.close();\n getStatementList(true);\n } else {\n ElMessage.error('格式错误,请确保导入的文件未被修改过!');\n }\n }\n } catch (error) {\n ElMessage.error('文件解析失败,请检查文件是否为有效的 JSON 格式!');\n }\n };\n reader.readAsText(file);\n};\n\nconst exportReport = () => {\n if (tableSelections.value.length > 0) {\n const jsonData = JSON.stringify(\n tableSelections.value.map(({code, config, description, name}) => {\n return {\n code,\n config,\n description,\n name,\n };\n }),\n null,\n 2\n );\n const blob = new Blob([jsonData], {type: 'application/json'});\n\n const url = URL.createObjectURL(blob);\n\n const formattedDate = dayjs().format('YYYYMMDDHHmm');\n const fileName = `报表导出-${formattedDate}.json`;\n\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n URL.revokeObjectURL(url);\n } else {\n ElMessage.warning('请选择要操作的报表!');\n }\n};\n\nconst toDesign = async (row) => {\n let res = await lockEditor(row.id);\n if (res === 'OK') {\n router.push(`/admin/statement/design/${row.id}`);\n } else {\n const toUnlock = await ElMessageBox.alert('报表正在被其他用户锁定,是否强制解锁?', '提示', {\n confirmButtonText: '解锁',\n cancelButtonText: '取消',\n });\n if (toUnlock === 'confirm') {\n let flag = await unlockEditor(row.id);\n if (flag) {\n toDesign(row);\n } else {\n ElMessage.error('解锁失败,请稍后再试!');\n }\n }\n }\n};\n\nconst toView = (row) => {\n router.push(`/admin/statement/detail/${row.id}`);\n};\n\nonMounted(() => {\n getStatementList(true);\n});\n\n//新增报表\nconst dialogFormVisible = ref(false);\n\nconst form = reactive({\n id: undefined,\n name: '',\n code: '',\n description: '',\n});\n\nconst toAddForm = () => {\n dialogFormVisible.value = true;\n};\n\nconst toEditor = (row) => {\n dialogFormVisible.value = true;\n form.id = row.id;\n form.name = row.name;\n form.code = row.code;\n form.description = row.description;\n};\n\nconst toDelete = (row) => {\n ElMessageBox.confirm('当前操作会删除选定的报表,确认继续吗?', '警告', {\n confirmButtonText: '删除',\n cancelButtonText: '取消',\n type: 'warning',\n }).then(async () => {\n let res = await del(row.id);\n if (res.data) {\n getStatementList(true);\n }\n });\n};\n\nconst cancelForm = () => {\n dialogFormVisible.value = false;\n form.id = undefined;\n form.name = '';\n form.code = '';\n form.description = '';\n};\nconst saveForm = async () => {\n await save(form);\n getStatementList(true);\n cancelForm();\n};\n\n//搜索报表\nconst onSearch = (e?) => {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n getStatementList(false);\n};\n\n//重置\nconst onReset = () => {\n listForm.key = '';\n getStatementList(true);\n};\n\n//分页功能\nwatch(\n () => listForm.pageNumber,\n () => {\n getStatementList();\n }\n);\nwatch(\n () => listForm.pageSize,\n () => {\n getStatementList();\n }\n);\n</script>\n\n<style lang=\"scss\">\n.statement-list-container {\n width: 100%;\n height: 100%;\n padding: 10px 0 0;\n box-sizing: border-box;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .actions {\n display: flex;\n align-items: center;\n\n .form-context {\n flex: 1;\n margin: 0 10px;\n display: flex;\n }\n\n .el-form-item {\n margin-bottom: 0;\n margin-right: 10px;\n }\n }\n\n .el-table {\n flex: 1;\n }\n\n .el-dialog {\n .el-button--text {\n margin-right: 15px;\n }\n\n .el-form-item {\n width: 100%;\n }\n\n .el-select {\n width: 100%;\n }\n\n .el-input {\n width: 100%;\n }\n\n .dialog-footer button:first-child {\n margin-right: 10px;\n }\n }\n .import-excel-button {\n position: relative;\n .import-excel-input {\n position: absolute;\n left: 0;\n top: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 10;\n }\n }\n}\n</style>\n"],"names":["copyString","str","textArea","flag","router","useRouter","listForm","reactive","data","ref","getStatementList","res","getList","copyLink","row","type","href","hrefName","ElMessage","tableSelections","selectionChangeHandle","selections","importReport","e","file","reader","event","jsonData","item","loading","ElLoading","i","save","exportReport","code","config","description","name","blob","url","fileName","dayjs","a","toDesign","lockEditor","ElMessageBox","unlockEditor","toView","onMounted","dialogFormVisible","form","toAddForm","toEditor","toDelete","del","cancelForm","saveForm","onSearch","onReset","watch"],"mappings":"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"}
1
+ {"version":3,"file":"StatementList-5d53ef55.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=\"440\"\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, 'admin')\">\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 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 case 'outside':\n href = `${window.location.origin}${window.location.pathname}#/statementdetail/${row.id}`;\n hrefName = '外部链接';\n }\n copyString(href)\n .then(() => {\n ElMessage.success(hrefName + '复制成功');\n })\n .catch(() => {\n ElMessage.error(hrefName + '复制遇到问题');\n });\n}\n\nconst tableSelections = ref([]);\nconst selectionChangeHandle = (selections) => {\n tableSelections.value = selections;\n};\n\nconst importReport = async (e) => {\n const file = e.target.files[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = async (event) => {\n e.target.value = '';\n try {\n if (event.target) {\n const jsonData = JSON.parse(event.target.result as string);\n if (Array.isArray(jsonData) && jsonData.every((item) => typeof item === 'object' && 'code' in item && 'config' in item && 'description' in item && 'name' in item)) {\n const loading = ElLoading.service({\n fullscreen: true,\n text: `正在导入报表,共 ${jsonData.length} 个,请稍候...`,\n });\n for (let i = 0; i < jsonData.length; i++) {\n loading.setText(`正在保存第 ${i + 1} 个,共 ${jsonData.length} 个,请稍候...`);\n const item = jsonData[i];\n await save(item);\n }\n loading.close();\n getStatementList(true);\n } else {\n ElMessage.error('格式错误,请确保导入的文件未被修改过!');\n }\n }\n } catch (error) {\n ElMessage.error('文件解析失败,请检查文件是否为有效的 JSON 格式!');\n }\n };\n reader.readAsText(file);\n};\n\nconst exportReport = () => {\n if (tableSelections.value.length > 0) {\n const jsonData = JSON.stringify(\n tableSelections.value.map(({code, config, description, name}) => {\n return {\n code,\n config,\n description,\n name,\n };\n }),\n null,\n 2\n );\n const blob = new Blob([jsonData], {type: 'application/json'});\n\n const url = URL.createObjectURL(blob);\n\n const formattedDate = dayjs().format('YYYYMMDDHHmm');\n const fileName = `报表导出-${formattedDate}.json`;\n\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n URL.revokeObjectURL(url);\n } else {\n ElMessage.warning('请选择要操作的报表!');\n }\n};\n\nconst toDesign = async (row) => {\n let res = await lockEditor(row.id);\n if (res === 'OK') {\n router.push(`/admin/statement/design/${row.id}`);\n } else {\n const toUnlock = await ElMessageBox.alert('报表正在被其他用户锁定,是否强制解锁?', '提示', {\n confirmButtonText: '解锁',\n cancelButtonText: '取消',\n });\n if (toUnlock === 'confirm') {\n let flag = await unlockEditor(row.id);\n if (flag) {\n toDesign(row);\n } else {\n ElMessage.error('解锁失败,请稍后再试!');\n }\n }\n }\n};\n\nconst toView = (row) => {\n router.push(`/admin/statement/detail/${row.id}`);\n};\n\nonMounted(() => {\n getStatementList(true);\n});\n\n//新增报表\nconst dialogFormVisible = ref(false);\n\nconst form = reactive({\n id: undefined,\n name: '',\n code: '',\n description: '',\n});\n\nconst toAddForm = () => {\n dialogFormVisible.value = true;\n};\n\nconst toEditor = (row) => {\n dialogFormVisible.value = true;\n form.id = row.id;\n form.name = row.name;\n form.code = row.code;\n form.description = row.description;\n};\n\nconst toDelete = (row) => {\n ElMessageBox.confirm('当前操作会删除选定的报表,确认继续吗?', '警告', {\n confirmButtonText: '删除',\n cancelButtonText: '取消',\n type: 'warning',\n }).then(async () => {\n let res = await del(row.id);\n if (res.data) {\n getStatementList(true);\n }\n });\n};\n\nconst cancelForm = () => {\n dialogFormVisible.value = false;\n form.id = undefined;\n form.name = '';\n form.code = '';\n form.description = '';\n};\nconst saveForm = async () => {\n await save(form);\n getStatementList(true);\n cancelForm();\n};\n\n//搜索报表\nconst onSearch = (e?) => {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n getStatementList(false);\n};\n\n//重置\nconst onReset = () => {\n listForm.key = '';\n getStatementList(true);\n};\n\n//分页功能\nwatch(\n () => listForm.pageNumber,\n () => {\n getStatementList();\n }\n);\nwatch(\n () => listForm.pageSize,\n () => {\n getStatementList();\n }\n);\n</script>\n\n<style lang=\"scss\">\n.statement-list-container {\n width: 100%;\n height: 100%;\n padding: 10px 0 0;\n box-sizing: border-box;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .actions {\n display: flex;\n align-items: center;\n\n .form-context {\n flex: 1;\n margin: 0 10px;\n display: flex;\n }\n\n .el-form-item {\n margin-bottom: 0;\n margin-right: 10px;\n }\n }\n\n .el-table {\n flex: 1;\n }\n\n .el-dialog {\n .el-button--text {\n margin-right: 15px;\n }\n\n .el-form-item {\n width: 100%;\n }\n\n .el-select {\n width: 100%;\n }\n\n .el-input {\n width: 100%;\n }\n\n .dialog-footer button:first-child {\n margin-right: 10px;\n }\n }\n .import-excel-button {\n position: relative;\n .import-excel-input {\n position: absolute;\n left: 0;\n top: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 10;\n }\n }\n}\n</style>\n"],"names":["copyString","str","textArea","flag","router","useRouter","listForm","reactive","data","ref","getStatementList","res","getList","copyLink","row","type","href","hrefName","ElMessage","tableSelections","selectionChangeHandle","selections","importReport","e","file","reader","event","jsonData","item","loading","ElLoading","i","save","exportReport","code","config","description","name","blob","url","fileName","dayjs","a","toDesign","lockEditor","ElMessageBox","unlockEditor","toView","onMounted","dialogFormVisible","form","toAddForm","toEditor","toDelete","del","cancelForm","saveForm","onSearch","onReset","watch"],"mappings":"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"}
@@ -31866,7 +31866,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
31866
31866
  let g = d.map((C) => C.text);
31867
31867
  u > 0 ? o.addRow(g) : r === 0 ? o.getRow(1).values = g : o.addRow(g);
31868
31868
  const p = o.getRow(r + u + 1), S = c[u];
31869
- S.size && !isNaN(S.size) ? S.size > 0 ? p.height = S.size < 25 ? 25 : S.size : p.hidden = !0 : p.height = 25, d.forEach((C, I) => {
31869
+ S && S.size && !isNaN(S.size) ? S.size > 0 ? p.height = S.size < 25 ? 25 : S.size : p.hidden = !0 : p.height = 25, d.forEach((C, I) => {
31870
31870
  var v, w;
31871
31871
  const B = p.getCell(I + 1);
31872
31872
  let { style: U, col: P, row: F, colSpan: z, rowSpan: V, format: $, formatType: T } = C;
@@ -31910,7 +31910,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
31910
31910
  }
31911
31911
  if ($ && $ === "number") {
31912
31912
  let M = "", N = "";
31913
- T && T.numberUseGrouping && T.numberDecimal && (M = T.numberUseGrouping, N = T.numberDecimal), B.numFmt = generateNumFmt(M, N), B.value = Number(C.text);
31913
+ T && (T.numberUseGrouping && (M = T.numberUseGrouping), T.numberDecimal && (N = T.numberDecimal)), B.numFmt = generateNumFmt(M, N), B.value = Number(C.text);
31914
31914
  }
31915
31915
  });
31916
31916
  }), r += c.length;
@@ -32634,7 +32634,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32634
32634
  title: "报表列表",
32635
32635
  icon: "iconfont icon-s-grid"
32636
32636
  },
32637
- component: () => import("./StatementList-5563818b.mjs")
32637
+ component: () => import("./StatementList-5d53ef55.mjs")
32638
32638
  }), e.addRoute("Index", {
32639
32639
  path: "statement/design/:id",
32640
32640
  name: "报表设计",
@@ -32643,7 +32643,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32643
32643
  title: "报表设计",
32644
32644
  icon: "iconfont icon-s-grid"
32645
32645
  },
32646
- component: () => import("./StatementDesign-08bd5b0e.mjs")
32646
+ component: () => import("./StatementDesign-a7300eb3.mjs")
32647
32647
  }), e.addRoute("Index", {
32648
32648
  path: "statement/detail/:id",
32649
32649
  name: "后台报表查看",
@@ -32652,7 +32652,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32652
32652
  title: "后台报表查看",
32653
32653
  icon: "iconfont icon-s-grid"
32654
32654
  },
32655
- component: () => import("./StatementDetail-1b76c0d8.mjs")
32655
+ component: () => import("./StatementDetail-a9842c2d.mjs")
32656
32656
  })), e.addRoute({
32657
32657
  path: "/statementdetail/:id",
32658
32658
  name: "报表查看",
@@ -32662,7 +32662,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32662
32662
  icon: "iconfont icon-s-grid"
32663
32663
  },
32664
32664
  props: !0,
32665
- component: () => import("./StatementDetail-1b76c0d8.mjs")
32665
+ component: () => import("./StatementDetail-a9842c2d.mjs")
32666
32666
  });
32667
32667
  }
32668
32668
  };
@@ -32693,7 +32693,7 @@ function dynamicReportView(K) {
32693
32693
  })
32694
32694
  );
32695
32695
  }
32696
- console.info("%cyh-report %cVer 2.3.29", "color:#409EFF;font-size: 22px;font-weight:bolder;text-shadow: 2px 2px 4px #84c1ff;", "color:#fff;font-size: 12px;background-color:#409EFF;padding:2px 4px;border-radius:3px;");
32696
+ console.info("%cyh-report %cVer 2.3.30", "color:#409EFF;font-size: 22px;font-weight:bolder;text-shadow: 2px 2px 4px #84c1ff;", "color:#fff;font-size: 12px;background-color:#409EFF;padding:2px 4px;border-radius:3px;");
32697
32697
  export {
32698
32698
  CellType as C,
32699
32699
  DataSourceColumnDataType as D,
@@ -32724,4 +32724,4 @@ export {
32724
32724
  dynamicReportView as u,
32725
32725
  validateAndCompleteTableConfig as v
32726
32726
  };
32727
- //# sourceMappingURL=index-15495668.mjs.map
32727
+ //# sourceMappingURL=index-4e632a7f.mjs.map