From 37da31df696a0959b914256a62189526e742b5ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9C=E7=AC=99=E6=AD=8C?= <2277317060@qq.com> Date: Tue, 5 Aug 2025 17:36:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/print/index.vue | 65 ++++++++----- src/views/print/nodes/inputNode.vue | 138 ++++++++++++++++++++++++++++ src/views/print/tool.js | 17 +++- src/views/print/view.vue | 8 +- 4 files changed, 204 insertions(+), 24 deletions(-) create mode 100644 src/views/print/nodes/inputNode.vue diff --git a/src/views/print/index.vue b/src/views/print/index.vue index 84dec49..2ee6600 100644 --- a/src/views/print/index.vue +++ b/src/views/print/index.vue @@ -38,14 +38,16 @@ 可选择 - 横线 - - 竖线 - - 矩形 - - 圆形 + 可输入 + + + + + + + +

表单组件

@@ -98,6 +100,10 @@ + @@ -385,8 +391,9 @@ import BarCodeNode from './nodes/barCodeNode.vue'; import QRCodeNode from './nodes/QRCodeNode.vue'; import TimeNode from './nodes/timeNode.vue'; import SelectNode from './nodes/selectNode.vue'; +import InputNode from './nodes/inputNode.vue'; import { updatePrintTemplateList } from '@/api/system/printTemplateList'; -import { getPrintTemplateInfo, updatePrintTemplateInfo } from '@/api/system/printTemplateInfo'; +import { getPrintTemplateInfo, listPrintTemplateInfo, updatePrintTemplateInfo } from '@/api/system/printTemplateInfo'; import { getPrintTemplateNode, getSysPrintTemplateNodeList, updateTemplateNode } from '@/api/system/printTemplateNode'; const router = useRouter(); @@ -498,6 +505,7 @@ const save = () => { height: pageHeight.value, activeFlag: '1' }); + console.log(nodes.value); updateTemplateNode( nodes.value.map(e => { return { @@ -509,6 +517,7 @@ const save = () => { height: e.dimensions.height, x: e.position.x, y: e.position.y, + parentNode: e.parentNode, data: JSON.stringify(e.data) }; }) @@ -536,40 +545,52 @@ onMounted(() => { zoom: 1 }); }); - let nodesData = localStorage.getItem('printNodes') - if(nodesData){ - nodes.value = JSON.parse(nodesData); - pid.value = nodes.value.find(e => e.name === 'area')?.id; - } - console.log(nodes.value); + // let nodesData = localStorage.getItem('printNodes') + // if(nodesData){ + // nodes.value = JSON.parse(nodesData); + // pid.value = nodes.value.find(e => e.name === 'area')?.id; + // } - getPrintTemplateInfo(router.currentRoute.value.query.id).then(e => { - let data = e.data; - pageType.value = data.paperType === '自定义' ? 'zdy' : data.paperType; + listPrintTemplateInfo({ templateListId: router.currentRoute.value.query.id }).then(e => { + let data = e.rows[0] || {}; + pageType.value = (data.paperType || 'A4') === '自定义' ? 'zdy' : data.paperType; pageId.value = data.templateInfoId; - pageWidth.value = data.width; - pageHeight.value = data.height; + pageWidth.value = data.width || 21; + pageHeight.value = data.height || 29.7; getSysPrintTemplateNodeList({ templateInfoId: data.templateInfoId }).then(v => { - nodes.value = v.data.map(vv => { + nodes.value = v.data.map((vv, index) => { return { id: vv.id, type: vv.type, name: vv.name, + extent: 'parent', dimensions: { width: vv.width, height: vv.height }, + computedPosition: { + x: parseFloat(vv.x || 0), + y: parseFloat(vv.y || 0), + z: index + 1 + }, handleBounds: { source: null, target: null }, position: { - x: vv.x, - y: vv.y + x: parseFloat(vv.x || 0), + y: parseFloat(vv.y || 0) }, + parentNode: vv.parentNode, data: JSON.parse(vv.data) }; }); + if (nodes.value.length > 0) { + pid.value = nodes.value.find(e => e.name === 'area')?.id; + } else { + clear(); + } + console.log(nodes.value); }); }); }); diff --git a/src/views/print/nodes/inputNode.vue b/src/views/print/nodes/inputNode.vue new file mode 100644 index 0000000..9edc219 --- /dev/null +++ b/src/views/print/nodes/inputNode.vue @@ -0,0 +1,138 @@ + + + + diff --git a/src/views/print/tool.js b/src/views/print/tool.js index 54f37f3..d12c791 100644 --- a/src/views/print/tool.js +++ b/src/views/print/tool.js @@ -13,7 +13,7 @@ const cmToPx = (cm) => { const getOption = (e, name) => { - let commonOption = { field: name }; + let commonOption = { field: name || '' }; if (e === 'text') { return { ...commonOption, @@ -53,6 +53,19 @@ const getOption = (e, name) => { type: 'left', isShow: false, width: 1, color: '#000', borderType: 'solid' }] }; + } else if (e === 'inputNode') { + return { + ...commonOption, + default: '', + selectOptions: [], + horizontalAlign: 'center', + verticalAlign: 'center', + border: [{ type: 'top', isShow: false, width: 1, color: '#000', borderType: 'solid' }, { + type: 'right', isShow: false, width: 1, color: '#000', borderType: 'solid' + }, { type: 'bottom', isShow: false, width: 1, color: '#000', borderType: 'solid' }, { + type: 'left', isShow: false, width: 1, color: '#000', borderType: 'solid' + }] + }; } else { return {}; } @@ -70,6 +83,8 @@ const getNodeSize = (e) => { return { width: cmToPx(8), height: cmToPx(1) }; } else if (e === 'select') { return { width: cmToPx(4), height: cmToPx(1) }; + } else if (e === 'inputNode') { + return { width: cmToPx(4), height: cmToPx(1) }; } else { return { width: cmToPx(5), height: cmToPx(2) }; } diff --git a/src/views/print/view.vue b/src/views/print/view.vue index 439b4f5..9b27177 100644 --- a/src/views/print/view.vue +++ b/src/views/print/view.vue @@ -30,6 +30,11 @@ :pageSize="{width: cmToPx(pageWidth) ,height: cmToPx(pageHeight) }" v-bind="i"> + @@ -74,6 +79,7 @@ import BarCodeNode from './nodes/barCodeNode.vue'; import QRCodeNode from './nodes/QRCodeNode.vue'; import TimeNode from './nodes/timeNode.vue'; import SelectNode from './nodes/selectNode.vue'; +import InputNode from './nodes/inputNode.vue'; const printType = ref(0); const printers = ref([ @@ -238,7 +244,7 @@ defineExpose({ /* 打印样式:仅显示图片区域 */ @media print { @page { - + margin: 0;