微信扫码页面

This commit is contained in:
bb_pan 2025-06-30 15:36:14 +08:00
parent e0a1e11988
commit cdfeda1728
3 changed files with 171 additions and 168 deletions

View File

@ -355,7 +355,7 @@ export function PropDetail(id) {
// 获取设备信息-qrCode // 获取设备信息-qrCode
export function getMachineByQrCode(query) { export function getMachineByQrCode(query) {
return request({ return request({
url: '/material/base/machine/getMachineByQrCode', url: '/material/ma_machine/getHisByQrcode',
method: 'get', method: 'get',
params: query params: query
}) })

View File

@ -1,78 +1,76 @@
let chapter = (text, companyName) => { let chapter = (text, companyName) => {
let canvas = document.getElementById("canvas"); let canvas = document.getElementById('canvas')
if(canvas!=null){ if (canvas != null) {
let context = canvas.getContext("2d"); let context = canvas.getContext('2d')
//let text = "XXX专用章"; //let text = "XXX专用章";
//let companyName = "XXX科技股份有限公司"; //let companyName = "XXX科技股份有限公司";
// 绘制印章边框 // 绘制印章边框
let width = canvas.width / 2; let width = canvas.width / 2
let height = canvas.height / 2; let height = canvas.height / 2
context.lineWidth = 3; context.lineWidth = 1 // 边框宽度
context.strokeStyle = "#f00"; context.strokeStyle = '#f00'
context.beginPath(); context.beginPath()
context.arc(width, height, 80, 0, Math.PI * 2); //宽、高、半径 context.arc(width, height, 90, 0, Math.PI * 2) //宽、高、半径
context.stroke(); context.stroke()
//画五角星 //画五角星
create5star(context, width, height, 20, "#f00", 0); create5star(context, width, height, 30, '#f00', 0)
// 绘制印章名称 // 绘制印章名称
context.font = "14px 宋体"; context.font = '16px 宋体'
context.textBaseline = "middle"; //设置文本的垂直对齐方式 context.textBaseline = 'middle' //设置文本的垂直对齐方式
context.textAlign = "center"; //设置文本的水平对对齐方式 context.textAlign = 'center' //设置文本的水平对对齐方式
context.lineWidth = 1; context.lineWidth = 1
context.strokeStyle = "#f00"; // context.strokeStyle = '#f00'
context.strokeText(text, width, height + 50); context.fillStyle = '#f00'
context.fillText(text, width, height + 45)
// 绘制印章单位 // 绘制印章单位
context.translate(width, height); // 平移到此位置, context.translate(width, height) // 平移到此位置,
context.font = "14px 宋体"; context.font = '16px 宋体'
let count = companyName.length; // 字数 let count = companyName.length // 字数
let angle = (4 * Math.PI) / (3 * (count - 1)); // 字间角度 let angle = (4 * Math.PI) / (3 * (count - 1)) // 字间角度
let chars = companyName.split(""); let chars = companyName.split('')
let c; let c
for (let i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
c = chars[i]; // 需要绘制的字符 c = chars[i] // 需要绘制的字符
if (i == 0) { if (i == 0) {
context.rotate((5 * Math.PI) / 6); context.rotate((5 * Math.PI) / 6)
} else { } else {
context.rotate(angle); context.rotate(angle)
} }
context.save(); context.save()
context.translate(65, 0); // 平移到此位置,此时字和x轴垂直公司名称和最外圈的距离 context.translate(80, 0) // 平移到此位置,此时字和x轴垂直公司名称和最外圈的距离
context.rotate(Math.PI / 2); // 旋转90度,让字平行于x轴 context.rotate(Math.PI / 2) // 旋转90度,让字平行于x轴
context.strokeText(c, 0, 0); // 此点为字的中心点 context.fillText(c, 0, 0) // 此点为字的中心点
context.restore(); context.restore()
}
//绘制五角星
function create5star(context, sx, sy, radius, color, rotato) {
context.save()
context.fillStyle = color
context.translate(sx, sy) //移动坐标原点
context.rotate(Math.PI + rotato) //旋转
context.beginPath() //创建路径
// let x = Math.sin(0);
// let y = Math.cos(0);
let dig = (Math.PI / 5) * 4
for (let i = 0; i < 5; i++) {
//画五角星的五条边
let x = Math.sin(i * dig)
let y = Math.cos(i * dig)
context.lineTo(x * radius, y * radius)
}
context.closePath()
context.stroke()
context.fill()
context.restore()
}
} }
}
//绘制五角星 export default chapter
function create5star(context, sx, sy, radius, color, rotato) {
context.save();
context.fillStyle = color;
context.translate(sx, sy); //移动坐标原点
context.rotate(Math.PI + rotato); //旋转
context.beginPath(); //创建路径
// let x = Math.sin(0);
// let y = Math.cos(0);
let dig = (Math.PI / 5) * 4;
for (let i = 0; i < 5; i++) {
//画五角星的五条边
let x = Math.sin(i * dig);
let y = Math.cos(i * dig);
context.lineTo(x * radius, y * radius);
}
context.closePath();
context.stroke();
context.fill();
context.restore();
}
}
};
export default chapter;

View File

@ -3,15 +3,13 @@
<div style="width: 100%; padding: 10px"> <div style="width: 100%; padding: 10px">
<div class="item-box"> <div class="item-box">
<div>设备类型:</div> <div>设备类型:</div>
<div style="margin-left: 10px; color: blue">{{ <div style="margin-left: 10px; color: blue">{{ queryParams.maName }}</div>
queryParams.deviceType
}}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>规格型号:</div> <div>规格型号:</div>
<div style="margin-left: 10px"> <div style="margin-left: 10px; color: blue">
{{ queryParams.specificationType }}</div {{ queryParams.maModel }}
> </div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>二维码编码:</div> <div>二维码编码:</div>
@ -23,140 +21,147 @@
</div> </div>
<div class="item-box"> <div class="item-box">
<div>设备状态:</div> <div>设备状态:</div>
<div style="margin-left: 10px">{{ <div style="margin-left: 10px">{{ queryParams.maStatus }}</div>
queryParams.maStatusName </div>
}}</div> <div class="item-box">
<div>本次检修人员:</div>
<div style="margin-left: 10px">{{ queryParams.checkMan }}</div>
</div> </div>
<!-- <div class="item-box">
<div >本次检修人员:</div>
<div style="margin-left: 10px;">{{queryParams.checkMan}}</div>
</div> -->
<div class="item-box"> <div class="item-box">
<div>本次检修时间:</div> <div>本次检修时间:</div>
<div style="margin-left: 10px; color: blue">{{ <div style="margin-left: 10px; color: blue">{{ queryParams.thisCheckTime }}</div>
queryParams.thisCheckTime
}}</div>
</div>
<div class="item-box">
<div>下次检修时间:</div>
<div style="margin-left: 10px; color: blue">{{
queryParams.nextCheckTime
}}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>检验人员:</div> <div>检验人员:</div>
<div style="margin-left: 10px">{{ queryParams.checkMan }}</div> <div style="margin-left: 10px">{{ queryParams.checkMan }}</div>
</div> </div>
<div class="item-box">
<div>下次检修时间:</div>
<div style="margin-left: 10px; color: blue">{{ queryParams.nextCheckTime }}</div>
</div>
<div class="item-box"> <div class="item-box">
<div>检验结论:</div> <div>检验结论:</div>
<div style="margin-left: 10px; color: blue">{{ <div style="margin-left: 10px; color: blue">{{ queryParams.inspectStatus || '合格' }}</div>
queryParams.inspectStatus || '合格'
}}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>联系电话:</div> <div>联系电话:</div>
<div style="margin-left: 10px">{{ queryParams.phone }}</div> <div style="margin-left: 10px">{{ queryParams.phone }}</div>
</div> </div>
<!-- 主要参数 a链接 -->
<div class="item-box">
<div>主要参数:</div>
<div style="margin-left: 10px">
<a href="" target="_blank" style="color: blue; text-decoration: underline">下载</a>
</div>
</div>
<div class="item-box"> <div class="item-box">
<div>生产厂家:</div> <div>生产厂家:</div>
<div style="margin-left: 10px">{{ queryParams.maVender }}</div> <div style="margin-left: 10px">{{ queryParams.maVender }}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>出厂日期:</div> <div>出厂日期:</div>
<div style="margin-left: 10px">{{ <div style="margin-left: 10px">{{ queryParams.outFacTime }}</div>
queryParams.outFacTime
}}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>出入库次数:</div> <div>初次入库:</div>
<div style="margin-left: 10px">{{ queryParams.inOutNum }}</div> <div style="margin-left: 10px">{{ queryParams.inTime }}</div>
</div>
<div class="item-box">
<div>服务工程次数:</div>
<div style="margin-left: 10px">{{ queryParams.serviceNum }}</div>
</div>
<div class="item-box">
<div>检验次数:</div>
<div style="margin-left: 10px">{{ queryParams.serviceNum }}</div>
</div>
<div class="item-box">
<div>更换配件次数:</div>
<div style="margin-left: 10px">{{ queryParams.checkNum }}</div>
</div>
<div class="item-box">
<div>报废时间:</div>
<div style="margin-left: 10px">{{ queryParams.scrapTime || '暂无' }}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>领料单位:</div> <div>领料单位:</div>
<div style="margin-left: 10px" <div style="margin-left: 10px">{{ queryParams.leaseUnit }}</div>
>{{ queryParams.leaseUnit }}
</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>领料工程:</div> <div>领料工程:</div>
<div style="margin-left: 10px">{{ queryParams.leasePro }} </div> <div style="margin-left: 10px">{{ queryParams.leaseProject }}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>领料时间:</div> <div>领料时间:</div>
<div style="margin-left: 10px" <div style="margin-left: 10px">{{ queryParams.leaseTime }}</div>
>{{ queryParams.leaseTime }}
</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>退料单位:</div> <div>退料单位:</div>
<div style="margin-left: 10px">{{ queryParams.backUnit }} </div> <div style="margin-left: 10px">{{ queryParams.backUnit }}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>退料工程:</div> <div>退料工程:</div>
<div style="margin-left: 10px">{{ queryParams.backPro }} </div> <div style="margin-left: 10px">{{ queryParams.backProject }}</div>
</div> </div>
<div class="item-box"> <div class="item-box">
<div>退料时间:</div> <div>退料时间:</div>
<div style="margin-left: 10px">{{ queryParams.backTime }} </div> <div style="margin-left: 10px">{{ queryParams.backTime }}</div>
</div> </div>
</div> </div>
<div class="bottom-box"> <div class="bottom-box">
<div <div style="width: 100%; text-align: center; margin-bottom: 20px; color: #3e7c53; margin-top: 10px">
style="
width: 100%;
text-align: center;
margin-bottom: 20px;
color: green;
margin-top: 10px;
"
>
</div> </div>
<div style="width: 50%; display: flex; margin-bottom: 10px"> <div style="width: 50%; display: flex">
<div style="color: green"> </div> <div style="color: #3e7c53"> </div>
<div style="border-bottom: 1px solid green">{{ <div style="border-bottom: 1px solid #3e7c53">{{ queryParams.maName }}</div>
queryParams.deviceType
}}</div>
</div> </div>
<div style="width: 50%; display: flex; margin-bottom: 10px"> <div style="width: 50%; display: flex">
<div style="color: green">检验结论</div> <div style="color: #3e7c53">检验结论</div>
<div style="color: red; font-size: 18px; font-weight: 600">{{ <div style="color: red; font-size: 18px; font-weight: 600">
queryParams.inspectStatus || '合格' {{ queryParams.inspectStatus || '合格' }}
}}</div> </div>
</div> </div>
<div style="width: 100%; display: flex; margin-bottom: 10px"> <div style="width: 100%; display: flex">
<div style="color: green"> </div> <div style="color: #3e7c53"> </div>
<div style="border-bottom: 1px solid green">{{ <div style="border-bottom: 1px solid #3e7c53">{{ queryParams.maModel }}</div>
queryParams.specificationType
}}</div>
</div> </div>
<div style="width: 100%; display: flex; margin-bottom: 10px"> <div style="width: 100%; display: flex">
<div style="color: green"> </div> <div style="color: #3e7c53"> </div>
<div style="border-bottom: 1px solid green">{{ <div style="border-bottom: 1px solid #3e7c53">{{ queryParams.maCode }}</div>
queryParams.maCode
}}</div>
</div> </div>
<div style="width: 100%; display: flex; margin-bottom: 10px"> <div style="width: 100%; display: flex">
<div style="color: green">本次检验日期</div> <div style="color: #3e7c53">本次检验日期</div>
<div style="border-bottom: 1px solid green">{{ <div style="border-bottom: 1px solid #3e7c53">{{ queryParams.thisCheckTime }}</div>
queryParams.thisCheckTime
}}</div>
</div> </div>
<div style="width: 100%; display: flex; margin-bottom: 10px"> <div style="width: 100%; display: flex">
<div style="color: green">下次检验日期</div> <div style="color: #3e7c53">下次检验日期</div>
<div style="border-bottom: 1px solid green">{{ <div style="border-bottom: 1px solid #3e7c53">{{ queryParams.nextCheckTime }}</div>
queryParams.nextCheckTime
}}</div>
</div> </div>
<div style="position: absolute; top: 0%; left: 25%"> <div style="width: 50%; display: flex">
<canvas id="canvas" width="180" height="180"></canvas> <div style="color: #3e7c53">检修员</div>
<div style="border-bottom: 1px solid #3e7c53">
{{ queryParams.checkMan }}
</div>
</div>
<div style="width: 50%; display: flex">
<div style="color: #3e7c53">检验员</div>
<div style="border-bottom: 1px solid #3e7c53">
{{ queryParams.checkMan }}
</div>
</div>
<div style="width: 100%; display: flex">
<div style="color: #3e7c53">联系电话</div>
<div style="border-bottom: 1px solid #3e7c53">{{ queryParams.phone }}</div>
</div>
<div style="position: absolute; top: 3%; left: 15%">
<canvas id="canvas" width="200" height="200"></canvas>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import chapter from '../../utils/chapter' import chapter from '@/utils/chapter'
import { getMachineByQrCode } from '@/api/basic/basic' import { getMachineByQrCode } from '@/api/basic/basic'
export default { export default {
data() { data() {
@ -183,8 +188,8 @@ export default {
leaseTime: '', // leaseTime: '', //
backUnit: '', // 退 backUnit: '', // 退
backPro: '', // 退 backPro: '', // 退
backTime: '', // 退 backTime: '' // 退
}, }
} }
}, },
created() { created() {
@ -193,32 +198,32 @@ export default {
this.getMachineByQrCode() this.getMachineByQrCode()
}, },
mounted() { mounted() {
chapter('机具检验专用章', '重庆送变电工程有限公司') chapter('检验专用章', '安徽送变电工程有限公司机具(物流)分公司')
}, },
methods: { methods: {
getMachineByQrCode() { getMachineByQrCode() {
let param = { let param = {
qrCode: this.qrCode, qrCode: this.qrCode
} }
getMachineByQrCode(param).then((response) => { getMachineByQrCode(param).then(response => {
console.log(response, '返回结果-----') console.log(response, '返回结果-----')
this.queryParams = response.data this.queryParams = response.data
}) })
}, }
}, }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.item-box { .item-box {
display: flex; display: flex;
width: 100%; width: 100%;
border-bottom: 1px solid green; border-bottom: 1px solid #3e7c53;
margin-bottom: 10px; margin-bottom: 10px;
} }
.bottom-box { .bottom-box {
display: flex; display: flex;
width: 99%; width: 99%;
border: 4px solid rgb(2, 196, 2); border: 4px solid #3f8b53;
flex-wrap: wrap; flex-wrap: wrap;
margin: auto; margin: auto;
position: relative; position: relative;