543 lines
14 KiB
Vue
Raw Normal View History

2024-04-27 21:59:29 +08:00
<template>
<div class="home">
<div class="nav">
<div class="iconBack"><i
class="el-icon-arrow-left"
style="color: white"
></i></div>
<div class="pageName">
<h2 class="tou">人员二维码</h2>
</div>
</div>
<div class="content">
<div
class="place"
ref="backgroundElement"
:style="{
backgroundImage: 'url(' + srcImgUrl + ')'
}"
>
<div :style="{
height: backimgheight + 'px'
}">
<div
class="
content-up"
:style="{ width: backimgwidth + 'px' }"
>
<div
class="upDiv"
:style="{ width: backimgwidth + 'px', height: backimgheightUp + 'px', }"
>
<div
class="hear"
:style="{ fontSize: backimgFontSize * 0.9 + 'px', padding: backimgFontSize * 0.7 + 'px' }"
>
{{ currentTime }}
</div>
<div class="qr">
<div
:style="{ paddingTop: backimgFontSize + 'px' }"
v-if="backimgwidth != 0"
>
<vue-qr
:text="qrUrl"
:callback="qrCallBack"
:size="qrsize"
:margin="0"
:colorDark="fontColor"
colorLight="white"
:logoScale="0.2"
:dotScale="0.7"
>
</vue-qr>
</div>
<div
class="tip"
:style="{ 'color': fontColor, fontSize: backimgFontSize * 0.9 + 'px' }"
>
<p v-if="WorkerInfo.safeScore >= 90">无风险</p>
<p v-if="WorkerInfo.safeScore >= 80 && WorkerInfo.safeScore < 90"><i
v-if="WorkerInfo.safeScore < 90"
class="el-icon-warning"
:style="{ 'color': fontColor }"
></i>低风险</p>
<p v-if="WorkerInfo.safeScore < 80"><i
v-if="WorkerInfo.safeScore < 90"
class="el-icon-warning"
:style="{ 'color': fontColor }"
></i>高风险</p>
</div>
</div>
</div>
</div>
<div class="content-down">
<div
class="downDiv"
style="text-align: center;"
:style="{ height: backimgheightDown + 'px' }"
>
<div
class="downHear"
:style="{
fontSize: backimgFontSize * 0.65 + 'px',
width: backimgwidth + 'px',
paddingTop: backimgFontSize * 0.4 + 'px',
paddingBottom: backimgFontSize * 0.4 + 'px'
}"
>
<div class="down-up">
<div class="left-downHear">姓名</div>
<div class="right-downHear">{{ WorkerInfo.workerName | hideName }}</div>
</div>
<div class="down-up">
<div class="left-downHear">证件号码</div>
<div class="right-downHear">{{ WorkerInfo.idCard | hideIdNum }}</div>
</div>
</div>
<div
class="text"
v-if="WorkerInfo.safeScore >= 90 && backimgwidth != 0"
:style="{ 'color': fontColor, paddingTop: backimgFontSize * 0.3 + 'px', height: backimgFontSize * 8.27 + 'px' }"
>
通过后台查询到您无扣分风险
</div>
<div
class="text2"
v-if="WorkerInfo.safeScore < 90 && backimgwidth != 0"
:style="{ 'color': fontColor, paddingTop: backimgFontSize * 0.3 + 'px', paddingBottom: backimgFontSize * 0.3 + 'px', height: backimgFontSize * 8.27 + 'px', width: backimgFontSize * 13.35 + 'px' }"
>
<div
class="text2-title"
:style="{ fontSize: backimgFontSize * 0.6 + 'px', }"
>通过后台查询到您有以下扣分记录</div>
<ul
class="text2-content"
v-infinite-scroll="load"
style="overflow:auto"
:style="{ fontSize: backimgFontSize * 0.5 + 'px', height: backimgFontSize * 7.5 + 'px', }"
>
<li
class="text2-item"
v-for="( item, i ) in scoreRecord "
:key="item.id"
:style="{ height: backimgFontSize * 2 + 'px', paddingTop: backimgFontSize * 0.33 + 'px', width: ((backimgFontSize * 13.35) - 25) + 'px' }"
>{{ i + 1 }}. {{ item.deductReason }}</li>
</ul>
</div>
<div
class="foot"
v-if="WorkerInfo.safeScore >= 90"
:style="{ 'color': fontColor, paddingTop: backimgFontSize * 0.4 + 'px', fontSize: backimgFontSize * 0.9 + 'px' }"
>
可通行
</div>
<div
class="foot"
v-if="WorkerInfo.safeScore >= 80 && WorkerInfo.safeScore < 90"
:style="{ 'color': fontColor, paddingTop: backimgFontSize * 0.4 + 'px', fontSize: backimgFontSize * 0.9 + 'px' }"
>
安全分已经低于90分
</div>
<div
class="foot"
v-if="WorkerInfo.safeScore < 80"
:style="{ 'color': fontColor, paddingTop: backimgFontSize * 0.4 + 'px', fontSize: backimgFontSize * 0.9 + 'px' }"
>
安全分已经低于80分
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import vueQr from 'vue-qr'
// import imgerr from '../assets'
export default {
name: 'myLogin',
components: {
vueQr
},
data () {
return {
//二维码大小
qrsize: 230,
//动态背景宽
backimgwidth: 0,
//动态背景高
backimgheight: 0,
//动态背景高(上)
backimgheightUp: 0,
//动态背景高(下)
backimgheightDown: 0,
//动态字体大小
backimgFontSize: 0,
//扣分记录
scoreRecord: [],
//当前时间
currentTime: "",
//名字
name: "王富贵",
idNum: "210811196005132133",
//动态背景图片
srcImgUrl: "",
//背景图片
// imgUrl: ["../../assets/健康.png", "../../assets/低险.png", "../../assets/危险.png"],
imgUrl: {
img1: require("../../assets/健康.png"),
img2: require("../../assets/低险.png"),
img3: require("../../assets/危险.png")
},
id: "",
// 用于生成二维码的url
qrUrl: "",
// 下载数据base64
qrDownloadUrl: "",
//二维码颜色
fontColor: "green",
//下方结构
flag: true,
//劳务人员信息
WorkerInfo: {},
}
},
// beforeCreate () {
// this.getBackgroundImageSize();
// },
created () {
this.updateTime();
setInterval(() => {
this.updateTime();
}, 1);
this.getId();
},
mounted () {
this.setColor(this.WorkerInfo.safeScore);
this.setImg(this.WorkerInfo.safeScore);
this.getScoreRecord();
setTimeout(() => {
this.getBackgroundImageSize();
}, 1000); // 延迟1秒钟执行您可以根据实际情况调整延迟时间
},
methods: {
getBackgroundImageSize () {
var backgroundImage = new Image();
var imageUrl = getComputedStyle(document.querySelector('.place')).backgroundImage.slice(4, -1).replace(/['"]/g, "");
backgroundImage.src = imageUrl;
var self = this; // 保存this指向到变量self
backgroundImage.onload = function () {
var containerWidth = document.querySelector('.place').clientWidth;
var containerHeight = document.querySelector('.place').clientHeight;
var imageWidth = backgroundImage.width;
var imageHeight = backgroundImage.height;
console.log("containerWidth :" + containerWidth);
console.log("containerHeight :" + containerHeight);
console.log("imageWidth :" + imageWidth);
console.log("imageHeight :" + imageHeight);
var scaleX = containerWidth / imageWidth;
var scaleY = containerHeight / imageHeight;
var displayWidth, displayHeight;
if (scaleX < scaleY) {
displayWidth = containerWidth;
displayHeight = imageHeight * scaleX;
} else {
displayWidth = imageWidth * scaleY;
displayHeight = containerHeight;
}
self.backimgwidth = displayWidth * 0.8;
self.backimgheight = displayHeight;
self.qrsize = displayWidth * 0.6;
self.backimgheightUp = self.backimgheight * (53 / 100);
self.backimgheightDown = self.backimgheight * (47 / 100);
self.backimgFontSize = self.qrsize * 0.1;
console.log("处理过的背景图宽度: " + self.backimgwidth);
console.log("处理过的背景图高度: " + self.backimgheight);
console.log("二维码大小: " + self.qrsize);
console.log("动态字体大小: " + self.backimgFontSize);
}
},
async getScoreRecord () {
const params = {
workerId: this.id,
};
const { data: res } = await this.$http.get('/xmgl/xzDeductScoreRecord/list', params);
console.log(res);
if (res.success == true && res.result.length != 0) {
this.scoreRecord = res.result;
console.log(this.scoreRecord);
}
},
load () { },
updateTime () {
const date = new Date();
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
this.currentTime = `${year}-${month}-${day} ${hours}:${minutes}`;
},
setImg (fenshu) {
if (fenshu >= 90) {
this.srcImgUrl = this.imgUrl.img1;
} else if (fenshu >= 80 && fenshu < 90) {
this.srcImgUrl = this.imgUrl.img2;
} else if (fenshu < 80) {
this.srcImgUrl = this.imgUrl.img3;
}
},
setColor (fenshu) {
if (fenshu >= 90) {
this.fontColor = "green";
} else if (fenshu >= 80 && fenshu < 90) {
this.fontColor = "rgb(255, 230, 0)";
} else if (fenshu < 80) {
this.fontColor = "red";
}
},
getId () {
// console.log(this.$route.params);
this.WorkerInfo = this.$route.params.WorkerInfo;
console.log(this.WorkerInfo);
this.qrUrl = this.WorkerInfo.id;
},
// 二维码刷新后调用
qrCallBack (qrUrl) {
this.qrDownloadUrl = qrUrl;
},
// 下载二维码
downloadQrcode () {
let a = document.createElement('a');
a.download = '我的二维码';
a.href = this.qrDownloadUrl;
a.click();
},
//换颜色
handleQrCode (type) {
switch (type) {
case 1:
this.fontColor = 'green'
break
case 2:
this.fontColor = 'orange'
break
case 3:
this.fontColor = 'red'
break
}
},
},
filters: {
// 加密身份证号
hideIdNum (val) {
return `${val.substring(0, 3)}*************${val.substring(val.length - 2)}`
},
// 加密名字
hideName (val) {
return `${val.substring(0, 1)}**`
}
}
}
</script>
<style scoped>
.content {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: calc(100% - 3.33rem);
}
.place {
width: 90%;
height: 100%;
background-image: url(../../assets/健康.png);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.content-up {
width: 100%;
height: 54.5%;
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.content-down {
height: 45.5%;
}
.upDiv {
/* background-color: yellow; */
/* position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%); */
display: flex;
flex-direction: column;
justify-content: flex-end;
/* height: 500px; */
}
.hear {
display: flex;
align-items: center;
justify-content: center;
}
.qr {}
.tip {
font-weight: bold;
border-bottom: 0.16rem dashed gray;
}
.text2-title {
display: flex;
font-size: 0.6rem;
}
.text2-content {
display: flex;
flex-direction: column;
justify-content: space-around;
margin-top: 0;
}
.text2-item {
/* display: flex;
padding-left: 0; */
float: left;
/* 设置元素浮动 */
}
ul {
padding-inline-start: 10px;
}
li {
text-align: left;
/* 保持文本从左边开始 */
}
.text2 {
/* height: 40%; */
/* line-height: 1rem; */
/* font-size: 0.5rem; */
font-weight: bold;
}
.text {
/* height: 40%; */
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
font-weight: bold;
}
.foot {
font-size: 1.3rem;
font-weight: bold;
}
.down-up {
display: flex;
justify-content: space-between;
}
.downDiv {
/* height: 100%; */
}
.downHear {
display: flex;
flex-direction: column;
justify-content: space-between;
/* height: 15%; */
font-weight: bold;
border-bottom: 1px solid gray;
}
.home {
width: 100%;
height: 100%;
}
.nav {
background-color: rgb(0, 128, 255);
width: 100%;
height: 3.33rem;
display: flex;
align-items: center;
justify-content: center;
}
.iconBack {
position: absolute;
left: 0;
font-size: 2.08rem;
}
.warnToken {
position: absolute;
font-size: 2.08rem;
}
.pageName {}
.tou {
margin: 0;
color: white;
}
</style>