344 lines
9.4 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="top-statistics">
<div class="statistics-item">
<span class="title">三级入场教育</span>
<span class="statistics-item-content">总数1</span>
<span class="statistics-item-content">完成率1</span>
<span class="statistics-item-content">已完成1</span>
<span class="statistics-item-content">100%</span>
</div>
<div class="statistics-item">
<span class="title">特种作业人员安全教育</span>
<span class="statistics-item-content">总数1</span>
<span class="statistics-item-content">完成率1</span>
<span class="statistics-item-content">已完成1</span>
<span class="statistics-item-content">100%</span>
</div>
<div class="statistics-item">
<span class="title">日常安全教育</span>
<span class="statistics-item-content">总数1</span>
<span class="statistics-item-content">完成率1</span>
<span class="statistics-item-content">已完成1</span>
<span class="statistics-item-content">100%</span>
</div>
<div class="statistics-item">
<span class="title">安全技术交底</span>
<span class="statistics-item-content">总数1</span>
<span class="statistics-item-content">完成率1</span>
<span class="statistics-item-content">已完成1</span>
<span class="statistics-item-content">100%</span>
</div>
<div class="statistics-item">
<span class="title">施工技术交流</span>
<span class="statistics-item-content">总数1</span>
<span class="statistics-item-content">完成率1</span>
<span class="statistics-item-content">已完成1</span>
<span class="statistics-item-content">100%</span>
</div>
<div class="statistics-item">
<span class="title">VR安全教育</span>
<span class="statistics-item-content">总数1</span>
<span class="statistics-item-content">完成率1</span>
<span class="statistics-item-content">已完成1</span>
<span class="statistics-item-content">100%</span>
</div>
</div> -->
<div class="table-one">
<div class="tabList">
<div>序号</div>
<div>姓名</div>
<div>性别</div>
<div>民族</div>
<div>照片</div>
<div>所属企业</div>
<div>所属班组</div>
<div>身份证号</div>
<div>联系电话</div>
<div>考试时间</div>
<div>培训状态</div>
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
<div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{ index + 1 }}</div>
<div>{{ item.workerName }}</div>
<div>{{ item.sex == 1 ? "男" : "女" }}</div>
<div>{{ item.nation }}</div>
<div class="list-img">
<el-image
fit="contain"
class="el-img"
:src="BASEURL + '/image/' + item.fieldAcquisitionUrl"
:preview-src-list="[BASEURL + '/image/' + item.fieldAcquisitionUrl]"
>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.enterpriseName" placement="top-start">
<span>{{item.enterpriseName}}</span>
</el-tooltip>
</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.personType == 1 ? item.teamName : item.departmentName" placement="top-start">
<span>{{ item.personType == 1 ? item.teamName : item.departmentName }}</span>
</el-tooltip>
</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.idCard" placement="top-start">
<span>{{item.idCard}}</span>
</el-tooltip>
</div>
<div>{{ item.phoneNumber }}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.educationTime" placement="top-start">
<span>{{item.educationTime}}</span>
</el-tooltip>
</div>
<div>{{ item.isExamPass == -1 ? "未培训" : item.isExamPass == 1 ? "合格" : "不合格" }}</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 { getSafeEducationDataApi } from "@/api/modules/agjtCommandApi";
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
let pageNo = ref(1 as any);
let moreScroll = ref(true as any);
const refScrollbar = ref(null as any); // 绑定到滚动的盒子上
const partyMemberList = ref({} as any);
//获取数据
const getMemberCountList = async (tip: any) => {
let requestData: any = {
projectSn: store.sn,
pageNo: tip == "search" ? 1 : pageNo.value,
pageSize: 100
};
if (props.tip == "实时") {
requestData.presence = 1;
} else if (props.tip == "日累积") {
requestData.attendance = 1;
} else {
requestData.inserviceType = 1;
}
const res: any = await getSafeEducationDataApi(requestData);
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) => {
const scrollTop = e.target.scrollTop;
const scrollHeight = e.target.scrollHeight;
const clientHeight = e.target.clientHeight;
// 向上加载更多
if (scrollTop >= scrollHeight - clientHeight - 1) {
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;
.top-statistics {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
color: white;
margin: 0 5%;
.statistics-item {
width: 240px;
height: 95px;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
position: relative;
.title {
position: absolute;
top: 4%;
left: 4%;
}
&-content {
display: inline-block;
width: 50%;
height: auto;
text-indent: 1.5em;
}
&-content:nth-child(2) {
margin-top: 8%;
}
&-content:nth-child(3) {
margin-top: 8%;
}
}
.statistics-item:nth-child(1) {
background: url("@/assets/images/commandScreen/bg6.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(2) {
background: url("@/assets/images/commandScreen/bg2.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(3) {
background: url("@/assets/images/commandScreen/bg4.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(4) {
background: url("@/assets/images/commandScreen/bg1.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(5) {
background: url("@/assets/images/commandScreen/bg3.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(6) {
background: url("@/assets/images/commandScreen/bg5.png") no-repeat;
background-size: 100% 100%;
}
}
.table-one {
height: 90%;
.tabList {
display: flex;
// width: 100%;
height: 5%;
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: 10%;
}
}
.listBox {
height: 92%;
.listStyle {
display: flex;
align-items: center;
text-align: center;
color: #fff;
font-size: 12px;
margin-bottom: 5px;
.list-img {
.el-img {
width: 30px;
height: 30px;
img {
display: flex;
align-items: center;
width: 100%;
height: 100%;
}
}
}
div {
width: 10%;
white-space: nowrap; //单行
overflow: hidden;
text-overflow: ellipsis;
}
}
.listStyle:hover {
background: #091f3f;
}
}
}
:deep() {
.el-tabs__item {
color: white;
}
.el-tabs__item.is-active {
color: var(--el-color-primary);
}
}
}
}
.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>