yh-report 2.3.27 → 2.3.28

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-6569f3e0.mjs";
3
+ import { n as u } from "./index-5ef47044.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-3faf1b77.mjs.map
28
+ //# sourceMappingURL=StatementDetail-052a9f16.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatementDetail-3faf1b77.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-052a9f16.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-6569f3e0.mjs";
3
+ import { g as X, s as D, d as Z, a as ee } from "./index-5ef47044.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-c41a6a09.mjs.map
416
+ //# sourceMappingURL=StatementList-24795c0d.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatementList-c41a6a09.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-24795c0d.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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"}
@@ -2432,7 +2432,15 @@ function changeConfig(K, Z) {
2432
2432
  ...o.colData,
2433
2433
  ...o.rowData
2434
2434
  };
2435
- if (o.type === CellType.FIELD && (o.colData || o.rowData || Z) && o.format === FormatType.STRING && o.fun && (o.rawData = o.fun.replace(StringFunRex, (t, n) => (n = n.toUpperCase(), get(r, n, t)))), o.type === CellType.FUN && o.fun ? (o.fun = o.fun.replace(StringFunRex, (t, n) => (n = n.toUpperCase(), get(r, n, t))), o.rawData !== "" && typeof o.rawData == "number" ? needComputedCell.set(`${a}:${e}`, o) : needComputedCell.set(a, o)) : o.format ? o.text = formatCellValue(o.rawData || o.text || "", o.format, o.formatType) : o.text = o.rawData || o.text || "-", o.customRender)
2435
+ if (o.type === CellType.FIELD && (o.colData || o.rowData || Z)) {
2436
+ if (o.format === FormatType.STRING && o.fun)
2437
+ o.rawData = o.fun.replace(StringFunRex, (t, n) => (n = n.toUpperCase(), get(r, n, t)));
2438
+ else if (o.isStaticData && o.data && o.data.startsWith("row:")) {
2439
+ let t = o.data.replace("row:", "").toUpperCase();
2440
+ o.rawData = r[t];
2441
+ }
2442
+ }
2443
+ if (o.type === CellType.FUN && o.fun ? (o.fun = o.fun.replace(StringFunRex, (t, n) => (n = n.toUpperCase(), get(r, n, t))), o.rawData !== "" && typeof o.rawData == "number" ? needComputedCell.set(`${a}:${e}`, o) : needComputedCell.set(a, o)) : o.format ? o.text = formatCellValue(o.rawData || o.text || "", o.format, o.formatType) : o.text = o.rawData || o.text || "-", o.customRender)
2436
2444
  try {
2437
2445
  o = new Function(
2438
2446
  "cell",
@@ -6630,7 +6638,7 @@ function getLoopItem(K, Z, e, E) {
6630
6638
  return K.reduce((m, o) => {
6631
6639
  if (o.loop)
6632
6640
  return m.push(o), m;
6633
- if (!o.data)
6641
+ if (e === "row" && (o.dataIndex === void 0 || o.dataIndex === null) && (o.dataIndex = 0), !o.data)
6634
6642
  return m;
6635
6643
  const a = Z[o.data];
6636
6644
  if (!a)
@@ -32620,7 +32628,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32620
32628
  title: "报表列表",
32621
32629
  icon: "iconfont icon-s-grid"
32622
32630
  },
32623
- component: () => import("./StatementList-c41a6a09.mjs")
32631
+ component: () => import("./StatementList-24795c0d.mjs")
32624
32632
  }), e.addRoute("Index", {
32625
32633
  path: "statement/design/:id",
32626
32634
  name: "报表设计",
@@ -32629,7 +32637,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32629
32637
  title: "报表设计",
32630
32638
  icon: "iconfont icon-s-grid"
32631
32639
  },
32632
- component: () => import("./StatementDesign-9602e19a.mjs")
32640
+ component: () => import("./StatementDesign-8a37caf6.mjs")
32633
32641
  }), e.addRoute("Index", {
32634
32642
  path: "statement/detail/:id",
32635
32643
  name: "后台报表查看",
@@ -32638,7 +32646,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32638
32646
  title: "后台报表查看",
32639
32647
  icon: "iconfont icon-s-grid"
32640
32648
  },
32641
- component: () => import("./StatementDetail-3faf1b77.mjs")
32649
+ component: () => import("./StatementDetail-052a9f16.mjs")
32642
32650
  })), e.addRoute({
32643
32651
  path: "/statementdetail/:id",
32644
32652
  name: "报表查看",
@@ -32648,7 +32656,7 @@ const exportExcel = async (K, Z, e = "gray", E = 0) => {
32648
32656
  icon: "iconfont icon-s-grid"
32649
32657
  },
32650
32658
  props: !0,
32651
- component: () => import("./StatementDetail-3faf1b77.mjs")
32659
+ component: () => import("./StatementDetail-052a9f16.mjs")
32652
32660
  });
32653
32661
  }
32654
32662
  };
@@ -32679,7 +32687,7 @@ function dynamicReportView(K) {
32679
32687
  })
32680
32688
  );
32681
32689
  }
32682
- console.info("%cyh-report %cVer 2.3.27", "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;");
32690
+ console.info("%cyh-report %cVer 2.3.28", "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;");
32683
32691
  export {
32684
32692
  CellType as C,
32685
32693
  DataSourceColumnDataType as D,
@@ -32710,4 +32718,4 @@ export {
32710
32718
  dynamicReportView as u,
32711
32719
  validateAndCompleteTableConfig as v
32712
32720
  };
32713
- //# sourceMappingURL=index-6569f3e0.mjs.map
32721
+ //# sourceMappingURL=index-5ef47044.mjs.map