<!-- * @Description: * @Autor: renchao * @LastEditTime: 2023-09-11 11:29:36 --> <template> <div class="from-clues loadingtext" v-Loading="loading" element-loading-text="拼命加载中..." style="height:720px;text-align: center;"> <!-- 表单部分 --> <el-tabs v-model="activeName" @tab-click="handleClick" v-if="headTabBdcqz.length >1"> <el-tab-pane :label="item.qlr + (item.bdcqzh !== null ? '(' + item.bdcqzh + ')' : '')" :name="item.bsmBdcqz" v-for="(item, index) in headTabBdcqz" :key="index"> </el-tab-pane> </el-tabs> <el-empty description="暂无数据" v-if="headTabBdcqz.length == 0 && noData"></el-empty> <div :style="{'width':'1180px','height': `calc(100% - ${hdiffHeight}px)`,'overflow-y': 'auto'}"> <canvas ref="zs" width="1000" v-show="this.bdcqz.bdcqzlx==1" height="700"></canvas> <canvas ref="zm" width="1180" v-show="this.bdcqz.bdcqzlx==2" height="780"></canvas> </div> </div> </template> <script> import { datas } from "../../javascript/zsyl.js"; import { getSlsqBdcqzList } from "@/api/bdcqz.js" export default { name: "zsyl", props: { formData: { type: Object, default: {} } }, data () { return { key: 0, noData: false, imgSrc: require('@/image/bdcqz/bdcqzs2.jpg'), bdczmSrc: require('@/image/bdcqz/bdczm.jpg'), loading: false, //印刷序列号集合 ysxlh: [], //列名称对象 columns: [], //选择的不动产权证文件 bdcqz: '', //证书打开类型 是否需要展示打印按钮 isToPrint: false, //tab切换栏数组 headTabBdcqz: [], //tab选择绑定值 activeName: '', //证书图片预览 previewImage: '', ruleForm: { bsmBdcqz: '', szmc: '不动产权证书', bsmBdcqz: '', szzh: '', ysxlh: '', }, } }, mounted () { this.columns = datas.columns(); if (this.formData.bdcqz) { //从缮证进入 this.bdcqz = this.formData.bdcqz } else { //从按钮进入 this.getHeadTabBdcqz(); } }, methods: { /** * @description: 获取证书内容 * @param {*} code * @author: renchao */ getRowValue (code) { var value = this.bdcqz[code]; return value; }, /** * @description: 获取受理申请下全部不动产权证 * @author: renchao */ getHeadTabBdcqz () { this.loading = true getSlsqBdcqzList({ bsmSlsq: this.formData.bsmSlsq }).then(res => { if (res.code == 200) { this.noData = true if (res.result && res.result.length > 0) { this.bdcqz = res.result[0] this.headTabBdcqz = res.result if (this.formData.bsmBdcqz) { this.activeName = this.formData.bsmBdcqz } else { this.activeName = res.result[0].bsmBdcqz } if (this.bdcqz.bdcqzlx == 1) { this.drawTextOnImage() } else { this.drawTextzmImage() } } } this.loading = false }) }, /** * @description: tab表头切换方法 * @param {*} e * @author: renchao */ handleClick (tab, event) { this.bdcqz = this.headTabBdcqz[tab.index] if (this.bdcqz.bdcqzlx == 1) { this.drawTextOnImage() } else { this.drawTextzmImage() } }, /** * @description: 不动产证书 * @author: renchao */ drawTextOnImage () { function getByteLen (val) { var len = 0; if (!val) return len; for (var i = 0; i < val.length; i++) { var length = val.charCodeAt(i); if (length >= 0 && length <= 128) { len += 1; } else { len += 2; } } return len; } const canvas = this.$refs.zs; const context = canvas.getContext('2d'); const image = new Image(); image.onload = () => { context.drawImage(image, 0, 0); context.font = '18px 楷体'; context.fillStyle = '#000000'; context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 60, 56); context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 113, 56); context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 180, 56); context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 370, 56); context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 129, 97); context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : '', 129, 136); this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' + this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length) context.fillText(this.bdcdyh ? this.bdcdyh : '', 129, 223); context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : '', 129, 263); context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : '', 129, 303); context.fillText(this.bdcqz.yt ? this.bdcqz.yt : '', 129, 346); // context.fillText(this.bdcqz.mj ? this.bdcqz.mj : '', 129, 386); let lines6 = this.bdcqz.mj ? this.bdcqz.mj.split(' ') : []; if (getByteLen(this.bdcqz.mj) > 41) { lines6.forEach((line, index) => { const y = 378 + (index * 27); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 330) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 129, y + (index * 20)); // 调整行高 }) }) } else { lines6.forEach((line, index) => { const y = 386 + (index * 27); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 330) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 129, y + (index * 20)); // 调整行高 }) }) } // context.fillText(this.bdcqz.syqx ? this.bdcqz.syqx : '', 129, 429); // 权利其他状态 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n') : []; for (let i = 0; i < lines.length; i++) { let num = Math.ceil(getByteLen(lines[i]) / 38) if (getByteLen(lines[i]) > 38) { let currentLine = ''; let arr = []; for (let word of lines[i]) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 323) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); if (i > 0) { arr.forEach((line, index) => { context.fillText(line, 129, 480 + (26 * (i - 1)) + 4 * num + (index * 14)); // 调整行高 }) } else { arr.forEach((line, index) => { context.fillText(line, 129, 490 + (26 * (i - 1)) + (index * 14)); // 调整行高 }) } } else { if (i > 0) { context.fillText(lines[i] ? lines[i] : '', 129, 490 + 4 * num + (24 * (i - 1))); } else { context.fillText(lines[i] ? lines[i] : '', 129, 495 + (24 * (i - 1))); } } } let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n') : []; lines1.forEach((line, index) => { const y = 100 + (index * 30); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 395) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 580, y + (index * 30)); // 调整行高 }) }) let lines3 = this.bdcqz.syqx ? this.bdcqz.syqx.split(' ') : []; if (getByteLen(this.bdcqz.syqx) > 41) { lines3.forEach((line, index) => { const y = 423 + (index * 27); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 330) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 129, y + (index * 20)); // 调整行高 }) }) } else { lines3.forEach((line, index) => { const y = 430 + (index * 27); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 315) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 129, y + (index * 20)); // 调整行高 }) }) } let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : []; if (getByteLen(this.bdcqz.zl) > 41) { lines2.forEach((line, index) => { const y = 170 + (index * 20); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 336) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 129, y + (index * 20)); // 调整行高 }) }) } else { lines2.forEach((line, index) => { const y = 180 + (index * 20); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 336) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 129, y + (index * 20)); // 调整行高 }) }) } } image.src = this.imgSrc }, /** * @description: 不动产证明 * @author: renchao */ drawTextzmImage () { function getByteLen (val) { var len = 0; if (!val) return len; for (var i = 0; i < val.length; i++) { var length = val.charCodeAt(i); if (length >= 0 && length <= 128) { len += 1; } else { len += 2; } } return len; } const canvas = this.$refs.zm; const context = canvas.getContext('2d'); const image = new Image(); image.onload = () => { context.drawImage(image, 0, 0); context.font = '18px 楷体'; context.fillStyle = '#000000'; // ysxlh context.fillText(this.bdcqz.ysxlh ? this.bdcqz.ysxlh : '', 280, 712); // djsj if (this.bdcqz.djsj) { let djsjList = this.bdcqz.djsj.split(' ')[0].split('/') context.fillText(djsjList[0] ? djsjList[0] : '', 327, 580); context.fillText(djsjList[1] ? djsjList[1] : '', 393, 580); context.fillText(djsjList[2] ? djsjList[2] : '', 443, 580); } context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 620, 125); context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 665, 125); context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 750, 125); context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 960, 123); context.fillText(this.bdcqz.zmqlhsx ? this.bdcqz.zmqlhsx : '', 775, 180); context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 775, 228); // 义务人 context.fillText(this.bdcqz.ywr ? this.bdcqz.ywr : '', 775, 275); // context.fillText(this.bdcqz.zl ? this.bdcqz.zl : '', 775, 325); let lines2 = this.bdcqz.zl ? this.bdcqz.zl.split(' ') : []; if (getByteLen(this.bdcqz.zl) > 41) { lines2.forEach((line, index) => { const y = 315 + (index * 20); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 295) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 775, y + (index * 20)); // 调整行高 }) }) } else { lines2.forEach((line, index) => { const y = 325 + (index * 20); // 每行文本的垂直位置 let currentLine = ''; let arr = []; for (let word of line) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= 295) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); arr.forEach((line, index) => { context.fillText(line, 775, y + (index * 20)); // 调整行高 }) }) } // bdcdyh this.bdcdyh = this.bdcqz.bdcdyh.slice(0, 6) + ' ' + this.bdcqz.bdcdyh.slice(6, 12) + ' ' + this.bdcqz.bdcdyh.slice(12, 19) + ' ' + this.bdcqz.bdcdyh.slice(19, this.bdcqz.bdcdyh.length) context.fillText(this.bdcdyh ? this.bdcdyh : '', 775, 373); // qlqtzk const maxWidth = 295; // 最大宽度限制 let lines = this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk.split('\n') : []; for (let i = 0; i < lines.length; i++) { let num = Math.ceil(getByteLen(lines[i]) / 37) if (getByteLen(lines[i]) > 37) { let currentLine = ''; let arr = []; for (let word of lines[i]) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= maxWidth) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); if (i > 0) { arr.forEach((line, index) => { context.fillText(line, 770, 428 + (25 * (i - 1)) + 5 * num + (index * 15)); // 调整行高 }) } else { arr.forEach((line, index) => { context.fillText(line, 770, 435 + (25 * (i - 1)) + (index * 14)); // 调整行高 }) } } else { if (i > 0) { context.fillText(lines[i] ? lines[i] : '', 770, 440 + 5 * num + (24 * (i - 1))); } else { context.fillText(lines[i] ? lines[i] : '', 770, 440 + (24 * (i - 1))); } } } // fj let lines1 = this.bdcqz.fj ? this.bdcqz.fj.split('\n') : []; for (let i = 0; i < lines1.length; i++) { let num = Math.ceil(getByteLen(lines1[i]) / 37) if (getByteLen(lines1[i]) > 37) { let currentLine = ''; let arr = []; for (let word of lines1[i]) { const testLine = currentLine + word; const lineWidth = context.measureText(testLine).width; if (lineWidth <= maxWidth) { currentLine = testLine; } else { arr.push(currentLine); currentLine = word; } } arr.push(currentLine); if (i > 0) { arr.forEach((line, index) => { context.fillText(line, 770, 610 + (25 * (i - 1)) + 5 * num + (index * 15)); // 调整行高 }) } else { arr.forEach((line, index) => { context.fillText(line, 770, 610 + (25 * (i - 1)) + (index * 15)); // 调整行高 }) } } else { if (i > 0) { context.fillText(lines1[i] ? lines1[i] : '', 770, 610 + 5 * num + (23 * (i - 1))); } else { context.fillText(lines1[i] ? lines1[i] : '', 770, 610 + (23 * (i - 1))); } } } } image.src = this.bdczmSrc; } }, computed:{ hdiffHeight(){ return this.headTabBdcqz.length > 1 ? 54 :0 } } } </script> <style scoped lang="scss"> @import "~@/styles/mixin.scss"; .imgClass { display: inline-block; height: auto; max-width: 100%; } .middle_padding { padding-bottom: 10px; } .zsyl-button { text-align: center; margin-top: 20px; .operation_button { width: 100px; border: 1px solid rgb(0, 121, 254); } .dy-button { color: white; background-color: rgb(0, 121, 254); } } .table-column { border-spacing: 1px; width: 100%; tr td { border: 1px solid #ccc; text-align: center; height: 40px; padding: 4px; font-size: 13px; background: rgb(251, 249, 229); } } .zsyl-title { background: #fafbe5; text-align: center; padding: 5px 0px; font-size: 20px; } .no-data { font-size: 18px; display: flex; text-align: center; justify-content: center; } </style>