完成打印缩放功能

master
lynn 6 months ago
parent 36772a5700
commit 9694459ac8

@ -510,7 +510,22 @@ export default {
const inputs = element.getElementsByTagName('input')
Array.from(inputs).forEach(input => {
if (input.type === 'checkbox' || input.type === 'radio') {
// checkboxradio
if (input.type === 'radio') {
// radio
const name = input.name
const checkedRadio = element.querySelector(`input[type="radio"][name="${name}"]:checked`)
if (checkedRadio) {
// radiotd
const td = checkedRadio.closest('td')
if (td) {
// div
const hiddenDiv = td.querySelector('div[style*="display: none"]')
if (hiddenDiv) {
hiddenDiv.textContent = checkedRadio.value
}
}
}
}
return
}
const span = document.createElement('span')
@ -538,9 +553,11 @@ export default {
].forEach(key => {
span.style[key] = style[key]
})
span.style.width = '100%'
span.style.whiteSpace = 'normal'
span.style.wordBreak = 'break-all'
span.style.overflowWrap = 'break-word'
span.style.display = 'block'
span.style.textAlign = 'center'
span.style.width = '100%'
input.parentNode.replaceChild(span, input)
})
@ -570,6 +587,7 @@ export default {
span.style.width = '100%'
span.style.display = 'block'
span.style.textAlign = 'center'
span.style.whiteSpace = 'pre-line' //
select.parentNode.replaceChild(span, select)
})
@ -599,6 +617,7 @@ export default {
span.style.width = '100%'
span.style.display = 'block'
span.style.textAlign = 'center'
span.style.whiteSpace = 'pre-line' //
textarea.parentNode.replaceChild(span, textarea)
})
},
@ -638,12 +657,46 @@ export default {
return Number(val).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
},
printHtml() {
const printNode = this.$refs.printtable.cloneNode(true)
// HTML
const dom = this.$refs.printtable
if (dom) {
//
const inputs = dom.querySelectorAll('input, select, textarea')
inputs.forEach(input => {
const fieldName = input.getAttribute('data-field')
if (fieldName) {
if (input.type === 'checkbox' || input.type === 'radio') {
//
const checkedInput = dom.querySelector(`[data-field="${fieldName}"]:checked`)
if (checkedInput) {
// radio
const name = checkedInput.name
const radioGroup = dom.querySelectorAll(`input[type="radio"][name="${name}"]`)
radioGroup.forEach(radio => {
// radiochecked
radio.removeAttribute('checked')
})
// radiochecked
checkedInput.setAttribute('checked', 'checked')
}
} else {
// value
input.setAttribute('value', input.value)
}
}
})
}
// 使HTML
const printNode = document.createElement('div')
printNode.innerHTML = dom.innerHTML
//
const financeTable = printNode.querySelector('.finance-review-table')
if (financeTable) {
financeTable.remove()
}
//
this.replaceControls(printNode)
@ -661,7 +714,7 @@ export default {
totalInput.value = total.toFixed(2)
}
//
//
const upperCaseInput = printNode.querySelector('input[data-field="upperCaseAmount"]')
if (upperCaseInput) {
upperCaseInput.value = numberToChinese(total)
@ -672,35 +725,52 @@ export default {
? '2mm 10mm 10mm 2mm'
: '10mm 10mm 10mm 10mm';
const win = window.open('', '_blank')
//
const isPortrait = orientation === 'portrait';
const pageWidth = isPortrait ? 210 : 297;
const scale = 0.8;
const translateX = ((pageWidth - pageWidth * scale) / 2).toFixed(2) + 'mm';
win.document.write(`
<html>
<head>
<title>打印</title>
<style>
@page { size: A4 ${orientation}; margin: ${margin}; }
body {
margin: 0;
padding: 0;
body {
margin: 0;
padding: 0;
width: ${pageWidth}mm;
display: flex;
justify-content: center;
align-items: flex-start;
}
.white-container {
width: 100% !important;
margin: 0 auto;
margin-left: 0px;
.white-container {
display: inline-block;
background: #fff;
padding: 0px;
box-sizing: border-box;
transform: scale(${scale}) translateX(${translateX});
transform-origin: top left;
margin: 0;
padding: 0;
}
.form-container {
width: 100% !important;
margin: 0 auto;
}
table {
width: 100%;
border-collapse: collapse;
}
td {
border: 1px solid #000;
padding: 8px;
.form-container { width: 100% !important; margin: 0 auto; }
table { width: 100%; border-collapse: collapse; }
td { border: 1px solid #000; padding: 8px; }
@media print {
body {
width: ${pageWidth}mm;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: flex-start;
}
.white-container {
transform: scale(${scale}) translateX(${translateX});
transform-origin: top left;
display: inline-block;
}
}
</style>
</head>

Loading…
Cancel
Save