2024-05-11 21:43:15 +08:00

415 lines
9.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="political-outlook">
<div class="content">
<div class="all-score">
<span>综合得分78</span>
</div>
<div class="all-title">
<span>月度安全综合评分表</span>
</div>
<div class="all-subTitle">
<span>工程名称123测试工程</span>
<span>表格日期2024-05-10</span>
</div>
<div class="table-one">
<div class="tabList">
<div>考核分类</div>
<div>考核指标</div>
<div>指标说明</div>
<div>单模块权重</div>
<div>模块权重</div>
<div>模块得分</div>
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
<div class="table-head-nine">
<div class="table-head-nine-part1" v-for="(value2, key2, index2) in value" :key="index2">
<div class="category-title">
<span>{{ key2 }}</span>
</div>
<div class="category-content">
<div v-for="(item, index3) in value2" :key="index3">
<div>
<span>{{ index3 + 1 }}</span>
</div>
<div>{{item.name}}</div>
<div>
<span>{{item.value}}</span>
</div>
</div>
</div>
<div class="category-title">
<span>{{ key2 }}</span>
</div>
<div class="category-title">
<span>{{ key2 }}</span>
</div>
</div>
<div class="table-head-nine-part2">
<div class="category-title">
<span>AI报警</span>
</div>
<div class="category-title">
<span>AI违章抓拍</span>
</div>
<div class="category-title">
<span>告警数量月度环比对比</span>
</div>
<div class="category-title">
<span>123</span>
</div>
<div class="category-title">
<span>123</span>
</div>
</div>
<div class="table-head-nine-part3">
<div><span>综合得分</span></div>
<div>
<span>89</span>
</div>
</div>
</div>
<!-- <div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{ item.workerName }}</div>
<div>{{ item.rectifiedNum }}</div>
<div>{{ item.overTimeRectifiedNum }}</div>
<div>{{ item.overTimeNotRectifiedNum }}</div>
<div>{{ item.rectifiedNumRatio }}</div>
<div>{{ item.rectifiedNumRatioTimely }}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
<p>暂无数据</p>
</div> -->
</el-scrollbar>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted } from "vue";
import { GlobalStore } from "@/stores";
import { getMemberJobStatusApi } from "@/api/modules/agjtCommandApi";
const store = GlobalStore();
const props = defineProps(["tip"]);
let pageNo = ref(1 as any);
let moreScroll = ref(true as any);
const refScrollbar = ref(null as any); // 绑定到滚动的盒子上
const partyMemberList = ref({} as any);
const value = ref({
"隐患治理排查": {
"隐患整改率": {name: 123,value: 456},
"隐患及时整改率": {name: 123,value: 456},
"隐患闭合率": {name: 123,value: 456},
"隐患及时复查率": {name: 123,value: 456},
"隐患自检数量": {name: 123,value: 456},
},
"危大工程": {
"危大工程覆盖率": {name: 123,value: 456},
"旁站记录更新": {name: 123,value: 456},
},
"风险管理": {
"风险排查执行率": {name: 123,value: 456},
"风险辨识数量": {name: 123,value: 456},
},
"安全教育": {
"三级入场教育完成率": {name: 123,value: 456}
}
});
//获取数据
const getMemberCountList = async (tip: any) => {
let requestData: any = {
projectSn: store.sn,
pageSize: 100,
pageNo: 1
};
const res: any = await getMemberJobStatusApi(requestData);
console.log("获取人员信息列表", res);
if (tip == "more") {
partyMemberList.value = partyMemberList.value.concat(res.result.records);
} else {
partyMemberList.value = res.result.records;
}
// 为图片拼接IP
// partyMemberList.value.map((item:any) => {
// item.fieldAcquisitionUrl = BASEURL + '/image/' + item.fieldAcquisitionUrl
// })
if (res.result.pages == pageNo.value) {
moreScroll.value = false;
} else {
pageNo.value = pageNo.value + 1;
}
};
onMounted(async () => {
await getMemberCountList("search");
refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// console.log("滚动容器", e);
const scrollTop = e.target.scrollTop;
const scrollHeight = e.target.scrollHeight;
const clientHeight = e.target.clientHeight;
// console.log("滚动容器", scrollTop, scrollHeight, clientHeight);
// 向上加载更多
if (scrollTop >= scrollHeight - clientHeight - 1) {
// console.log("加载更多");
if (moreScroll.value) {
getMemberCountList("more");
}
}
});
});
</script>
<style lang="scss" scoped>
@mixin flex {
display: flex;
align-items: center;
}
.political-outlook {
height: 97%;
margin: 0 60px;
.content {
height: 95%;
width: 100%;
margin-top: 10px;
// background: url("@/assets/images/cardImg.png") no-repeat;
background-size: 100% 100%;
padding: 20px 15px;
.all-subTitle {
font-size: 16px;
color: white;
display: flex;
justify-content: space-between;
margin-top: 10px;
}
.all-title {
text-align: center;
font-size: 18px;
color: white;
margin-top: 10px;
}
.all-score {
width: 100%;
height: 31px;
line-height: 31px;
background: linear-gradient(90deg, rgba(52, 146, 252, 0.43) 0%, #3186e8 31%, rgba(21, 43, 78, 0.02) 100%);
margin-top: 10px;
text-indent: 2em;
span {
font-size: 18px;
color: white;
font-style: italic;
}
}
.table-one {
height: 88%;
.tabList {
display: flex;
// width: 100%;
height: 8%;
background: url("@/assets/images/vehicleManagement/ListTitleImg.png") no-repeat;
background-size: 100% 100%;
// position: absolute;
left: 75.5%;
top: 75%;
color: #ccc;
font-size: calc(100vw * 14 / 1920);
line-height: 30px;
align-items: center;
margin-top: 2%;
div {
text-align: center;
width: 17%;
}
}
.listBox {
height: 70%;
.listStyle {
display: flex;
align-items: center;
text-align: center;
color: #fff;
font-size: 12px;
padding: 5px 0px;
.list-img {
.el-img {
width: 30px;
height: 30px;
img {
display: flex;
align-items: center;
width: 100%;
height: 100%;
}
}
}
div {
width: 17%;
white-space: nowrap; //单行
overflow: hidden;
text-overflow: ellipsis;
}
}
.listStyle:hover {
background: #091f3f;
}
}
.table-head-nine {
display: flex;
flex-direction: column;
.table-head-nine-part1 {
display: flex;
align-items: center;
text-align: center;
color: white;
font-size: 14px;
.category-title {
width: 17%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
// overflow-wrap: anywhere;
// text-align: left !important;
}
.category-content {
width: 49%;
> div {
width: 100%;
height: 30px;
line-height: 30px;
display: flex;
>div{
width: 33.3%;
display: flex;
align-items: center;
justify-content: center;
white-space: nowrap;
text-align: center;
}
>div:nth-child(2){
text-align: left;
justify-content: flex-start;
}
}
}
}
.table-head-nine-part2 {
display: flex;
align-items: center;
text-align: center;
color: white;
font-size: 14px;
>div{
height: 30px;
line-height: 30px;
}
> div:nth-child(1) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(2) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(3) {
width: 34%;
text-align: left;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(4) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(5) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
}
.table-head-nine-part3 {
display: flex;
align-items: center;
text-align: center;
color: white;
font-size: 14px;
>div{
height: 30px;
line-height: 30px;
}
> div:nth-child(1) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #086d93;
}
}
> div:nth-child(2) {
width: 49%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
}
}
}
:deep() {
.el-tabs__item {
color: white;
}
.el-tabs__item.is-active {
color: white;
}
}
}
}
.notoDta {
top: 35%;
width: 20%;
left: 40%;
position: absolute;
text-align: center;
img {
width: 40%;
margin: 5% 30%;
}
p {
color: #fff;
font-size: calc(100vw * 14 / 1920);
margin: -6% 37%;
}
}
// element 组件样式
:deep() {
.el-date-editor .el-range-input,
.el-range-separator {
color: #fff;
}
.el-input__wrapper {
background: #112d59;
}
.el-input__inner {
color: #fff;
}
.el-button {
background-color: #2758c0;
color: white;
border-color: transparent;
}
}
// ::v-deep .el-select .el-input .el-select__caret {
// color: #fff;
// }
</style>