shenzhen-dev #2

Merged
admin merged 614 commits from shenzhen-dev into master 2025-06-03 18:28:43 +08:00
8 changed files with 184 additions and 139 deletions
Showing only changes of commit 89f2dc7935 - Show all commits

View File

@ -84,6 +84,11 @@ export const getAlarmRecordApi = (params: {}) => {
export const getAlarmTypeCountApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/aiStatistic/selectAiAnalyseHardWareAlarmTypeCount`, params, { headers: { noLoading: true } });
};
// 顶部数据分页接口
export const getAlarmTypeCountPageApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/aiStatistic/selectAiAnalyseHardWareAlarmTypeCountPage`, params, { headers: { noLoading: true } });
};
// centerTop底部按钮显示数据接口
export const getStatsDirectorateBigScreenApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/xzSecurityQualityInspectionRecord/statsDirectorateBigScreen`, params, { headers: { noLoading: true } });

View File

@ -60,9 +60,9 @@
<span
style="font-size: 12px;">安全教育&nbsp;&nbsp;{{ statsDirectorateBigScreen.workerInfoAuditRecordNum }}</span>
</div>
<div class="classify-div-item" @click="openDialogData({ index: 3, title: '影响进度因素' })">
<div class="classify-div-item" style="width: 280px;" @click="openDialogData({ index: 3, title: '影响进度计划因素' })">
<span
style="font-size: 12px;">极端恶劣天气&nbsp;&nbsp;{{ statsDirectorateBigScreen.taskProgressContentNum }}</span>
style="font-size: 12px;">影响进度计划因素&nbsp;&nbsp;{{ statsDirectorateBigScreen.taskProgressContentNum }}</span>
</div>
<div class="classify-div-item" @click="openDialogData({ index: 4, title: '风险统计' })">
<span

View File

@ -3,54 +3,14 @@
<div class="content">
<!-- v-show="topDangerList.length > 0" -->
<div class="top-statistics" v-show="topDangerList.length > 0">
<div class="statistics-item" v-for="(item,index) in topDangerList" :key="index">
<span class="title">{{item.alarmTypeName}}</span>
<span class="statistics-item-content">今日报警次数{{ item.alarmNumToday }}</span>
<span class="statistics-item-content">本月报警次数{{ item.alarmNumMonth }}</span>
<span class="statistics-item-content">历史报警次数{{ item.alarmNumYesterday }}</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>
</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>
</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>
</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>
</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>
</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>
</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>
</div> -->
<el-scrollbar class="statistics-listBox" ref="refAlarmScrollbar">
<div class="statistics-item" :style="{background: `url(${bgImgSet(index)}) no-repeat`,backgroundSize: '100% 100%'}" v-for="(item,index) in topDangerList" :key="index">
<span class="title">{{item.alarmTypeName}}</span>
<span class="statistics-item-content">今日报警次数{{ item.alarmNumToday }}</span>
<span class="statistics-item-content">本月报警次数{{ item.alarmNumMonth }}</span>
<span class="statistics-item-content">历史报警次数{{ item.alarmNumYesterday }}</span>
</div>
</el-scrollbar>
</div>
<div style="position: relative; height: 180px;" v-if="topDangerList.length == 0">
<div class="notoDta">
@ -129,13 +89,22 @@
</template>
<script lang="ts" setup>
import { ref, onMounted } from "vue";
import { ref, onMounted, computed } from "vue";
import { GlobalStore } from "@/stores";
import { getCompanyDataList, getMemberInfoList } from "@/api/modules/labor";
import type { TabsPaneContext } from 'element-plus'
import { getAlarmTypeOption } from "@/api/modules/aIEarlyWarn";
import noDataImage from "@/assets/images/vehicleManagement/car.png";
import { getAlarmRecordApi, getAlarmTypeCountApi } from "@/api/modules/agjtCommandApi";
import { getAlarmRecordApi, getAlarmTypeCountPageApi } from "@/api/modules/agjtCommandApi";
import bgImg1 from "@/assets/images/commandScreen/bg1.png";
import bgImg2 from "@/assets/images/commandScreen/bg2.png";
import bgImg3 from "@/assets/images/commandScreen/bg3.png";
import bgImg4 from "@/assets/images/commandScreen/bg4.png";
import bgImg5 from "@/assets/images/commandScreen/bg5.png";
import bgImg6 from "@/assets/images/commandScreen/bg6.png";
import bgImg7 from "@/assets/images/commandScreen/bg7.png";
import bgImg8 from "@/assets/images/commandScreen/bg8.png";
const bgImgList = ref([bgImg1,bgImg2,bgImg3,bgImg4,bgImg5,bgImg6,bgImg7,bgImg8])
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
@ -143,21 +112,39 @@ let showDialog = ref(false as any);
const enterpriseListData = ref([] as any);
const topDangerList = ref([] as any)
let pageNo = ref(1 as any);
const alarmPageInfo = ref({
pageNo: 1
})
let moreAlarmScroll = ref(true as any);
const refAlarmScrollbar = ref(null as any); //
let moreScroll = ref(true as any);
const refScrollbar = ref(null as any); //
const detailData = ref({} as any);
const partyMemberList = ref({} as any);
let aiAlarmTypeEnum = ref([] as any);
//
const bgImgSet = (index:any) => {
return bgImgList.value[index % bgImgList.value.length]
}
//
const getQualityStatisticsNumDataFn = async () => {
let data = {
const getQualityStatisticsNumDataFn = async (tip: any) => {
let requestData:any = {
sn: store.sn,
type: 1
};
const res: any = await getAlarmTypeCountApi(data);
if (res.code == 200) {
console.log("安全隐患顶部数据",res)
topDangerList.value = res.result.alarmList || []
type: 1,
pageNo: tip == 'search'?1:alarmPageInfo.value.pageNo,
pageSize: 100,
}
const res: any = await getAlarmTypeCountPageApi(requestData);
console.log("获取人员信息列表", res);
if(tip == 'more'){
topDangerList.value = topDangerList.value.concat(res.result.alarmPage.records);
} else {
topDangerList.value = res.result.alarmPage.records;
}
if (res.result.alarmPage.pages == alarmPageInfo.value.pageNo) {
moreAlarmScroll.value = false;
} else {
alarmPageInfo.value.pageNo = alarmPageInfo.value.pageNo + 1;
}
};
//
@ -236,7 +223,7 @@ const getMemberCountList = async (tip:any) => {
onMounted(async () => {
await getCompanyList();
await getMemberCountList('search');
await getQualityStatisticsNumDataFn();
await getQualityStatisticsNumDataFn('search');
getWarnTypeOption();
refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// console.log("", e);
@ -244,6 +231,7 @@ onMounted(async () => {
const scrollHeight = e.target.scrollHeight;
const clientHeight = e.target.clientHeight;
// console.log("", scrollTop, scrollHeight, clientHeight);
console.log("滚动容器", moreScroll.value);
//
if (scrollTop >= scrollHeight - clientHeight - 1) {
// console.log("");
@ -252,6 +240,19 @@ onMounted(async () => {
}
}
});
refAlarmScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// console.log("", e);
const scrollTop = e.target.scrollTop;
const scrollHeight = e.target.scrollHeight;
const clientHeight = e.target.clientHeight;
//
if (scrollTop >= scrollHeight - clientHeight) {
// console.log("");
if (moreAlarmScroll.value) {
getQualityStatisticsNumDataFn("more");
}
}
});
});
</script>
@ -373,17 +374,26 @@ onMounted(async () => {
padding: 20px 15px;
.top-statistics{
width: 90%;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 20px;
height: 35%;
color: white;
margin: 0 auto;
.statistics-listBox{
height: 100%;
:deep(){
.el-scrollbar__view{
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 20px;
}
}
}
.statistics-item{
width: 200px;
// height: 95px;
display: flex;
flex-direction: column;
position: relative;
background-size: 100% 100%;
.title{
position: absolute;
top: 4%;
@ -408,38 +418,38 @@ onMounted(async () => {
// 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/bg7.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(4){
background: url("@/assets/images/commandScreen/bg8.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(5){
background: url("@/assets/images/commandScreen/bg1.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%;
}
.statistics-item:nth-child(7){
background: url("@/assets/images/commandScreen/bg4.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(8){
background: url("@/assets/images/commandScreen/bg3.png") no-repeat;
background-size: 100% 100%;
}
// .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/bg7.png") no-repeat;
// background-size: 100% 100%;
// }
// .statistics-item:nth-child(4){
// background: url("@/assets/images/commandScreen/bg8.png") no-repeat;
// background-size: 100% 100%;
// }
// .statistics-item:nth-child(5){
// background: url("@/assets/images/commandScreen/bg1.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%;
// }
// .statistics-item:nth-child(7){
// background: url("@/assets/images/commandScreen/bg4.png") no-repeat;
// background-size: 100% 100%;
// }
// .statistics-item:nth-child(8){
// background: url("@/assets/images/commandScreen/bg3.png") no-repeat;
// background-size: 100% 100%;
// }
}
.top-search {
@include flex;

View File

@ -105,7 +105,8 @@ const changeSelect = (index: any) => {
//
const getStatisticsNumDataFn = async () => {
let data = {
projectSn: store.sn
projectSn: store.sn,
recordType: 1
};
const res: any = await getStatisticsNumDataApi(data);
if (res.code == 200) {
@ -305,7 +306,7 @@ onMounted(async () => {
}
}
.table-one {
height: 30%;
height: 37%;
.tabList {
display: flex;
// width: 100%;
@ -326,7 +327,7 @@ onMounted(async () => {
}
}
.listBox {
height: 69%;
height: 75%;
.listStyle {
display: flex;
align-items: center;
@ -369,7 +370,7 @@ onMounted(async () => {
}
}
.notoDta {
top: 35%;
top: 10%;
width: 20%;
left: 40%;
position: absolute;

View File

@ -349,7 +349,8 @@ onMounted(async () => {
margin: 0 auto;
padding: 20px 0;
.statistics-item{
width: 450px;
width: 90%;
// width: 450px;
// height: 95px;
padding-bottom: 10px;
display: flex;
@ -479,7 +480,7 @@ onMounted(async () => {
}
}
.notoDta {
top: 35%;
top: 20%;
width: 20%;
left: 40%;
position: absolute;

View File

@ -244,7 +244,7 @@ onMounted(async () => {
}
}
.table-one {
height: 68%;
height: 90%;
.tabList {
display: flex;
// width: 100%;
@ -265,7 +265,7 @@ onMounted(async () => {
}
}
.listBox {
height: 69%;
height: 92%;
.listStyle {
display: flex;
align-items: center;

View File

@ -3,8 +3,15 @@
<div class="content">
<div class="top-data-show">
<div class="top-left">
<el-date-picker v-model="dateTime" type="month" placeholder="请选择日期" value-format="YYYY-MM" :clearable="false" @change="dateChange"/>
<el-calendar v-model="calendarVal" style="width: 95%; margin-top: 15px"/>
<el-date-picker
v-model="dateTime"
type="month"
placeholder="请选择日期"
value-format="YYYY-MM"
:clearable="false"
@change="dateChange"
/>
<el-calendar v-model="calendarVal" style="width: 95%; margin-top: 15px" />
</div>
<div class="top-right">
<div class="right-title-data">
@ -18,17 +25,17 @@
<div class="inspect-data-item">
<div class="inspect-style inspect-one"></div>
<span>人为因素</span>
<span>{{ topStatisticData.data?topStatisticData.data[0].count:0 }}</span>
<span>{{ topStatisticData.data ? topStatisticData.data[0].count : 0 }}</span>
</div>
<div class="inspect-data-item">
<div class="inspect-style inspect-two"></div>
<span>环境因素</span>
<span>{{ topStatisticData.data?topStatisticData.data[1].count:0 }}</span>
<span>{{ topStatisticData.data ? topStatisticData.data[1].count : 0 }}</span>
</div>
<div class="inspect-data-item">
<div class="inspect-style inspect-three"></div>
<span>不可抗力因素</span>
<span>{{ topStatisticData.data?topStatisticData.data[2].count:0 }}</span>
<span>{{ topStatisticData.data ? topStatisticData.data[2].count : 0 }}</span>
</div>
</div>
</div>
@ -48,7 +55,11 @@
<div>{{ item.regionName }}</div>
<div>{{ item.enterpriseName }}</div>
<div>{{ delayEvent(item.delayEventType) }}</div>
<div>{{ item.delayEventReason }}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.delayEventReason" placement="top-start">
<span>{{item.delayEventReason}}</span>
</el-tooltip>
</div>
<div class="list-img">
<el-image
fit="contain"
@ -56,6 +67,9 @@
:src="BASEURL + '/image/' + item.image"
:preview-src-list="[BASEURL + '/image/' + item.image]"
>
<template #error>
<el-image :src="noDataImage" :preview-src-list="[noDataImage]" fit="contain" class="el-no-img" alt="" />
</template>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
@ -74,29 +88,31 @@
import { ref, onMounted, watch } from "vue";
import { GlobalStore } from "@/stores";
import { getDelayEventTypeApi, getProgressContentApi } from "@/api/modules/agjtCommandApi";
import noDataImage from "@/assets/images/vehicleManagement/car.png";
import moment from "moment";
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
const dateTime:any = ref(null);
const calendarVal:any = ref();
const dateTime: any = ref(null);
const calendarVal: any = ref();
let pageNo = ref(1 as any);
let moreScroll = ref(true as any);
const refScrollbar = ref(null as any); //
const tableParams = ref({
calendarVal: ""
})
});
const partyMemberList = ref({} as any);
const topStatisticData = ref({} as any)
const delayEvent = (type:string) => {
const arrType = ["人为因素","环境因素","不可抵抗因素"];
const topStatisticData = ref({} as any);
const delayEvent = (type: string) => {
const arrType = ["人为因素", "环境因素", "不可抵抗因素"];
const arr = type.split(",");
return arr.map((item:any) => arrType[item - 1]).join("、")
}
return arr.map((item: any) => arrType[item - 1]).join("、");
};
//
const dateChange = async () => {
calendarVal.value = dateTime.value
calendarVal.value = dateTime.value;
getDelayEventTypeFn();
};
//
const getDelayEventTypeFn = async () => {
@ -117,7 +133,7 @@ const getMemberCountList = async (tip: any) => {
date: tableParams.value.calendarVal,
pageNo: tip == "search" ? 1 : pageNo.value,
pageSize: 100,
hasDelayEvent:1,
hasDelayEvent: 1
};
const res: any = await getProgressContentApi(requestData);
console.log("获取人员信息列表", res);
@ -142,16 +158,16 @@ watch(
// console.log(newVal, "newVal");
if (newVal) {
// props.xData = newVal;
console.log(newVal)
tableParams.value.calendarVal = moment(newVal).format("YYYY-MM-DD")
dateTime.value = moment(newVal).format("YYYY-MM-DD")
console.log(newVal);
tableParams.value.calendarVal = moment(newVal).format("YYYY-MM-DD");
dateTime.value = moment(newVal).format("YYYY-MM-DD");
getMemberCountList("search");
}
}
);
onMounted(async () => {
dateTime.value = moment(new Date()).format("YYYY-MM")
calendarVal.value = moment(new Date()).format("YYYY-MM-DD")
dateTime.value = moment(new Date()).format("YYYY-MM");
calendarVal.value = moment(new Date()).format("YYYY-MM-DD");
await getDelayEventTypeFn();
await getMemberCountList("search");
refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
@ -275,7 +291,8 @@ onMounted(async () => {
color: white;
background-color: #143a85;
}
.el-calendar-table td.is-today,.el-calendar-table td.is-selected {
.el-calendar-table td.is-today,
.el-calendar-table td.is-selected {
color: white;
background-color: #143a85;
}
@ -283,7 +300,7 @@ onMounted(async () => {
.el-calendar-table__row {
.prev,
.current,
.next{
.next {
border-color: #35538c;
color: white;
.el-calendar-day {
@ -314,32 +331,32 @@ onMounted(async () => {
margin-top: 5px;
}
}
.right-inspect-data{
.right-inspect-data {
margin-top: 12%;
.inspect-data-item{
.inspect-data-item {
display: flex;
align-items: center;
margin-bottom: 3%;
.inspect-style{
.inspect-style {
width: 10px;
height: 10px;
border: 1px solid #fff;
margin-right: 5px;
margin-top: 2px;
}
.inspect-one{
background-color: #EE1A1A;
.inspect-one {
background-color: #ee1a1a;
}
.inspect-two{
background-color: #079CAF;
.inspect-two {
background-color: #079caf;
}
.inspect-three{
background-color: #FFDF00;
.inspect-three {
background-color: #ffdf00;
}
>span:nth-child(2){
margin-right: auto
> span:nth-child(2) {
margin-right: auto;
}
>span:nth-child(3){
> span:nth-child(3) {
margin-right: 10px;
}
}
@ -387,6 +404,10 @@ onMounted(async () => {
height: 100%;
}
}
.el-no-img {
width: 30px;
height: 30px;
}
}
div {
width: 17%;

View File

@ -104,6 +104,13 @@ const login = (formEl: FormInstance | undefined) => {
if (COMPANY === "agjtCommand") {
// menuList.value = AGJTCommandMenu;
if(![5,10].includes(result.accountType)){
ElMessage({
message: "账号类型不匹配",
type: "warning"
});
return;
}
router.push("/commandScreen");
} else {
router.push("/projectOverview");