Merge branch 'shenzhen-dev' of http://139.9.66.234:18023/yjlHub/zhgdlarge into dev-Rain

This commit is contained in:
Vce 2024-05-13 14:59:00 +08:00
commit 619588e27f
11 changed files with 383 additions and 118 deletions

View File

@ -9,7 +9,7 @@ module.exports = {
"ie >= 8", "ie >= 8",
"last 10 versions" // 所有主流浏览器最近10版本用 "last 10 versions" // 所有主流浏览器最近10版本用
], ],
grid: true grid: false
}, },
"postcss-pxtorem": { "postcss-pxtorem": {
rootValue: 192, // 设计稿宽度的1/ 10 rootValue: 192, // 设计稿宽度的1/ 10

View File

@ -8,14 +8,23 @@
<div class="cbHeaderLine"></div> <div class="cbHeaderLine"></div>
</div> </div>
<div class="cbContent"> <div class="cbContent">
<vue3-seamless-scroll :speed="1" :list="listData" :step="0.3" :hover="true" class="scroll"> <div v-if="listData.length < 10 && listData.length !== 0">
<div class="item" v-for="(item, index) in listData" :key="index"> <div class="item" v-for="(item, index) in listData" :key="index">
<div class="itemHead"> <div class="itemHead">
<div class="itemHeadInner" v-if="item.type === 1">{{ item.header }}</div> <div v-if="JSON.parse(item.payload).level">
<div class="itemHeadInner2" v-if="item.type === 3">{{ item.header }}</div> <div class="itemHeadInner1" v-if="JSON.parse(item.payload).level === 1">重大风险</div>
<div class="itemHeadInner2" v-if="JSON.parse(item.payload).level === 2">较大风险</div>
<div class="itemHeadInner3" v-if="JSON.parse(item.payload).level === 3">一般风险</div>
<div class="itemHeadInner4" v-if="JSON.parse(item.payload).level === 4">低风险</div>
</div>
<div v-else>
<!-- <div class="itemHeadInner" v-if="JSON.parse(item.payload).isSuperDanger !== undefined && JSON.parse(item.payload).isSuperDanger === true">超危工程</div> -->
<div class="itemHeadInner5" v-if="JSON.parse(item.payload).isSuperDanger === true">超危工程</div>
<div class="itemHeadInner6" v-if="JSON.parse(item.payload).isSuperDanger === false">危大工程</div>
</div>
<div class="itemContent"> <div class="itemContent">
<el-tooltip class="box-item" effect="dark" :content="item.content" placement="top-start"> <el-tooltip class="box-item" effect="dark" :content="item.msg" placement="top-start">
<text style="margin-left:10px">{{ item.content }}</text> <text style="margin-left:10px">{{ item.msg }}</text>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
@ -25,15 +34,55 @@
</el-tooltip> </el-tooltip>
</div> --> </div> -->
<div class="itemTime"> <div class="itemTime">
<text class="timeInfo">{{ item.startTime + '-' + item.endTime }}</text> <text class="timeInfo">{{ JSON.parse(item.payload).time }}</text>
</div>
</div>
</div>
<div v-else>
<vue3-seamless-scroll v-if="listData.length>0" :speed="1" :list="listData" :limitScrollNum="10" :step="0.3" :hover="true" class="scroll">
<div class="item" v-for="(item, index) in listData" :key="index">
<div class="itemHead">
<div v-if="JSON.parse(item.payload).level">
<div class="itemHeadInner1" v-if="JSON.parse(item.payload).level === 1">重大风险</div>
<div class="itemHeadInner2" v-if="JSON.parse(item.payload).level === 2">较大风险</div>
<div class="itemHeadInner3" v-if="JSON.parse(item.payload).level === 3">一般风险</div>
<div class="itemHeadInner4" v-if="JSON.parse(item.payload).level === 4">低风险</div>
</div>
<div v-else>
<!-- <div class="itemHeadInner" v-if="JSON.parse(item.payload).isSuperDanger !== undefined && JSON.parse(item.payload).isSuperDanger === true">超危工程</div> -->
<div class="itemHeadInner5" v-if="JSON.parse(item.payload).isSuperDanger === true">超危工程</div>
<div class="itemHeadInner6" v-if="JSON.parse(item.payload).isSuperDanger === false">危大工程</div>
</div>
<div class="itemContent">
<el-tooltip class="box-item" effect="dark" :content="item.msg" placement="top-start">
<text style="margin-left:10px">{{ item.msg }}</text>
</el-tooltip>
</div>
</div>
<!-- <div class="itemContent">
<el-tooltip class="box-item" effect="dark" :content="item.content" placement="top-start">
{{item.content}}
</el-tooltip>
</div> -->
<div class="itemTime">
<text class="timeInfo">{{ JSON.parse(item.payload).time }}</text>
</div> </div>
</div> </div>
</vue3-seamless-scroll> </vue3-seamless-scroll>
</div>
<div class="notoDta" v-if="listData.length == 0">
<img src="@/assets/images/noData.png" alt="" />
<p>暂无数据</p>
</div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {
getNoticeListApi
} from "@/api/modules/projectOverview";
import { Vue3SeamlessScroll } from "vue3-seamless-scroll"; import { Vue3SeamlessScroll } from "vue3-seamless-scroll";
import Card from "@/components/card.vue"; import Card from "@/components/card.vue";
import { ref, watch, onMounted } from "vue"; import { ref, watch, onMounted } from "vue";
@ -42,32 +91,74 @@ import { GlobalStore } from "@/stores";
const store = GlobalStore(); const store = GlobalStore();
let listData = ref([ let listData = ref([
{ header: '重大风险', type: 1, content: '正处于吊装施工重大风险作业阶段,请注意在操作前,应对吊装设备进行安全把控...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: '', type: 1, content: '...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: '重大风险', type: 1, content: '正处于吊装施工重大风险作业阶段,请注意在操作前,应对吊装设备进行安全把控...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: '', type: 1, content: '...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: '重大风险', type: 1, content: '正处于吊装施工重大风险作业阶段,请注意在操作前,应对吊装设备进行安全把控...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: '', type: 1, content: '...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: '重大风险', type: 1, content: '正处于吊装施工重大风险作业阶段,请注意在操作前,应对吊装设备进行安全把控...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: '', type: 1, content: '...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: '重大风险', type: 1, content: '正处于吊装施工重大风险作业阶段,请注意在操作前,应对吊装设备进行安全把控...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: '', type: 1, content: '...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: '重大风险', type: 1, content: '正处于吊装施工重大风险作业阶段,请注意在操作前,应对吊装设备进行安全把控...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: '', type: 1, content: '...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
{ header: 'AI报警', type: 3, content: '1#塔吊报警频次较上周增长60%,塔吊间各个设之间的衔接进行全面检查,以防止...', startTime: '2024-04-01', endTime: "2024-04-20" }, // { header: 'AI', type: 3, content: '1#60%...', startTime: '2024-04-01', endTime: "2024-04-20" },
]) ])
onMounted(async () => { const getNoticeList = async () => {
// const res: any = await getNoticeListApi({ projectSn: store.sn, type: 10, pageNo: 1, pageSize: 99999, });
const res: any = await getNoticeListApi({ isBigScreen: 1 ,type:32});
console.log('隐患智能分析', res);
listData.value = res.result.records;
// listData.value.push({
// accountId:"1779721457571291137",
// id:"1789601398432559107",
// imageUrl:null,
// isRead:0,
// msg:"1",
// payload:"{\"level\":4,\"time\":\"2024-05-12 18:19:40\"}",
// sendTime: "2024-05-12 18:19:57",
// title: "",
// type: "31",
// })
console.log("================center================",listData.value)
}
onMounted(async () => {
await getNoticeList();
}); });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.notoDta {
top: 30%;
width: 50%;
// left: 40%;
position: absolute;
text-align: center;
left:50%;
transform: translateX(-50%);
img {
width: 30%;
margin: 5% 22%;
}
p {
color: #fff;
font-size: calc(100vw * 14 / 1920);
margin: -6% 30%;
}
}
.scroll { .scroll {
height: 100%; height: 100%;
width: 100%;
overflow: hidden; overflow: hidden;
} }
@ -130,7 +221,7 @@ onMounted(async () => {
// background: #fff; // background: #fff;
.item { .item {
width: 100%; width: 100%;
line-height: 130%; line-height: 110%;
display: flex; display: flex;
align-items: center; align-items: center;
// justify-content: flex-start; // justify-content: flex-start;
@ -146,21 +237,60 @@ onMounted(async () => {
font-size: 16px; font-size: 16px;
width: 75%; width: 75%;
.itemHeadInner { .itemHeadInner1 {
border: 1px solid #f77c7d; border: 1px solid #e02020;
box-shadow: 0 0 0 1px #f77c7d; box-shadow: 0 0 0 1px #e02020;
background: rgba(247, 124, 125, 0.4); background: rgba(224,32,32, 0.4);
border-radius: 3px; border-radius: 3px;
padding: 0 15px; padding: 0 15px;
margin: 9px 0; margin: 9px 0;
margin-left: 2px; margin-left: 2px;
} }
.itemHeadInner2 { .itemHeadInner2 {
font-size: 16px; font-size: 16px;
border: 1px solid #0db027; border: 1px solid #f46649;
box-shadow: 0 0 0 1px #0db027; box-shadow: 0 0 0 1px #f46649;
background: rgba(13, 176, 39, 0.4); background: rgba(244,102,73, 0.4);
border-radius: 3px;
padding: 0 15px;
margin: 9px 0;
margin-left: 2px;
}
.itemHeadInner3 {
font-size: 16px;
border: 1px solid #ecbe45;
box-shadow: 0 0 0 1px #ecbe45;
background: rgba(236,190,69, 0.4);
border-radius: 3px;
padding: 0 15px;
margin: 9px 0;
margin-left: 2px;
}
.itemHeadInner4 {
font-size: 16px;
border: 1px solid #5394f7;
box-shadow: 0 0 0 1px #5394f7;
background: rgba(83,148,247, 0.4);
border-radius: 3px;
padding: 0 15px;
margin: 9px 0;
margin-left: 2px;
}
.itemHeadInner5 {
font-size: 16px;
border: 1px solid #9400D3;
box-shadow: 0 0 0 1px #9400D3;
background: rgba(148,0,211, 0.4);
border-radius: 3px;
padding: 0 15px;
margin: 9px 0;
margin-left: 2px;
}
.itemHeadInner6 {
font-size: 16px;
border: 1px solid #00CED1;
box-shadow: 0 0 0 1px #00CED1;
background: rgba( 0,206,209, 0.4);
border-radius: 3px; border-radius: 3px;
padding: 0 15px; padding: 0 15px;
margin: 9px 0; margin: 9px 0;

View File

@ -52,22 +52,22 @@
</div> </div>
<div class="classify-div"> <div class="classify-div">
<div class="classify-div-item" @click="openDialogData({index: 1, title: '危大工程'})"> <div class="classify-div-item" @click="openDialogData({index: 1, title: '危大工程'})">
<span>危大工程&nbsp;&nbsp;{{statsDirectorateBigScreen.dangerousEngineeringRecordNum}}</span> <span style="font-size: 12px;">危大工程&nbsp;&nbsp;{{statsDirectorateBigScreen.dangerousEngineeringRecordNum}}</span>
</div> </div>
<div class="classify-div-item" @click="openDialogData({index: 2, title: '安全教育'})"> <div class="classify-div-item" @click="openDialogData({index: 2, title: '安全教育'})">
<span>安全教育&nbsp;&nbsp;{{statsDirectorateBigScreen.workerInfoAuditRecordNum}}</span> <span style="font-size: 12px;">安全教育&nbsp;&nbsp;{{statsDirectorateBigScreen.workerInfoAuditRecordNum}}</span>
</div> </div>
<div class="classify-div-item" @click="openDialogData({index: 3, title: '影响进度的因素'})"> <div class="classify-div-item" @click="openDialogData({index: 3, title: '影响进度的因素'})">
<span>极端恶劣天气&nbsp;&nbsp;{{statsDirectorateBigScreen.taskProgressContentNum}}</span> <span style="font-size: 12px;">极端恶劣天气&nbsp;&nbsp;{{statsDirectorateBigScreen.taskProgressContentNum}}</span>
</div> </div>
<div class="classify-div-item" @click="openDialogData({index: 4, title: '风险统计'})"> <div class="classify-div-item" @click="openDialogData({index: 4, title: '风险统计'})">
<span>风险统计&nbsp;&nbsp;{{statsDirectorateBigScreen.securityQualityInspectionRecordNum}}</span> <span style="font-size: 12px;">风险统计&nbsp;&nbsp;{{statsDirectorateBigScreen.securityQualityInspectionRecordNum}}</span>
</div> </div>
<div class="classify-div-item" @click="openDialogData({index: 5, title: '安全隐患'})"> <div class="classify-div-item" @click="openDialogData({index: 5, title: '安全隐患'})">
<span>安全隐患&nbsp;&nbsp;{{statsDirectorateBigScreen.securityQualityInspectionRecordNum}}</span> <span style="font-size: 12px;">安全隐患&nbsp;&nbsp;{{statsDirectorateBigScreen.securityQualityInspectionRecordNum}}</span>
</div> </div>
<div class="classify-div-item" @click="openDialogData({index: 6, title: 'AI警报'})"> <div class="classify-div-item" @click="openDialogData({index: 6, title: 'AI警报'})">
<span>AI警报&nbsp;&nbsp;{{statsDirectorateBigScreen.aiAnalyseHardWareAlarmRecordNum}}</span> <span style="font-size: 12px;">AI警报&nbsp;&nbsp;{{statsDirectorateBigScreen.aiAnalyseHardWareAlarmRecordNum}}</span>
</div> </div>
</div> </div>
<div class="background-title"> <div class="background-title">

View File

@ -91,7 +91,6 @@ let listData = ref([
{ header: "特种作业人员教育", type: 2, content: "1#塔吊报警频次较上周增长60%,塔吊间各个设备之间的衔接进行全面检查,以防止" } { header: "特种作业人员教育", type: 2, content: "1#塔吊报警频次较上周增长60%,塔吊间各个设备之间的衔接进行全面检查,以防止" }
]); ]);
let questionTotal = ref(0 as any);
let dataList2 = ref([ let dataList2 = ref([
{ {
value: 0, value: 0,
@ -157,6 +156,7 @@ const getPersonList = async () => {
dataList2.value[1].value = res.result.personType.toaltPerson.totalPerson; dataList2.value[1].value = res.result.personType.toaltPerson.totalPerson;
dataList2.value[2].value = res.result.personType.toaltPerson.totalPerson; dataList2.value[2].value = res.result.personType.toaltPerson.totalPerson;
console.log("安全教育智能分析666", res); console.log("安全教育智能分析666", res);
drawEchart2();
} }
}; };
// -- // --
@ -166,7 +166,7 @@ const getMemberJobStatusFn = async () => {
pageSize: 5, pageSize: 5,
pageNo: 1 pageNo: 1
}; };
if (dateRange.value.length > 0) { if (dateRange.value && dateRange.value.length > 0) {
requestData.inspectTime_begin = dateRange.value[0]; requestData.inspectTime_begin = dateRange.value[0];
requestData.inspectTime_end = dateRange.value[1]; requestData.inspectTime_end = dateRange.value[1];
} }
@ -185,7 +185,7 @@ const getInspectManStatusFn = async () => {
pageSize: 5, pageSize: 5,
pageNo: 1 pageNo: 1
}; };
if (dateRange.value.length > 0) { if (dateRange.value && dateRange.value.length > 0) {
requestData.inspectTime_begin = dateRange.value[0]; requestData.inspectTime_begin = dateRange.value[0];
requestData.inspectTime_end = dateRange.value[1]; requestData.inspectTime_end = dateRange.value[1];
} }
@ -204,7 +204,7 @@ const getEnterpriseStatusFn = async () => {
pageSize: 5, pageSize: 5,
pageNo: 1 pageNo: 1
}; };
if (dateRange.value.length > 0) { if (dateRange.value && dateRange.value.length > 0) {
requestData.inspectTime_begin = dateRange.value[0]; requestData.inspectTime_begin = dateRange.value[0];
requestData.inspectTime_end = dateRange.value[1]; requestData.inspectTime_end = dateRange.value[1];
} }
@ -267,7 +267,6 @@ function drawEchart2() {
trigger: "item" trigger: "item"
}, },
title: { title: {
// text: questionTotal.value,
text: "100%", text: "100%",
subtext: "入场三级教育\n完成率", subtext: "入场三级教育\n完成率",
x: "24%", x: "24%",
@ -505,21 +504,7 @@ function drawEchart2() {
// echartsTest.resize(); // echartsTest.resize();
// }) // })
} }
//
// const safeData = ref(null as any);
const qualityInfo = async () => {
const res: any = await selectQualityStatisticsApi({ projectSn: store.sn });
// dataList2.value[0].value = res.result.total.rectificationNum;
// dataList2.value[1].value = res.result.total.totalNum - res.result.total.rectificationNum;
questionTotal.value = res.result.total.totalNum;
drawEchart2();
};
//
defineExpose({
qualityInfo
});
onMounted(async () => { onMounted(async () => {
qualityInfo();
getMemberJobStatusFn(); getMemberJobStatusFn();
getPersonList(); getPersonList();
}); });

View File

@ -39,24 +39,49 @@
<div class="cbHeaderLine"></div> <div class="cbHeaderLine"></div>
</div> </div>
<div class="cbContent"> <div class="cbContent">
<vue3-seamless-scroll v-show="listData.length>0" :list="listData" :step="1" :limitScrollNum="10" :hover="true" class="scroll"> <div v-if="listData2.length < 10 && listData2.length !== 0">
<div class="item" v-for="(item, index) in listData" :key="index"> <div class="item" v-for="(item, index) in listData2" :key="index">
<div class="itemHead"> <div class="itemHead">
<div class="itemHeadInner" v-if="item.type === 1">{{ item.title }}</div> <div class="itemHeadInner1" v-if="JSON.parse(item.payload).level === 1">重大风险</div>
<div class="itemHeadInner2" v-if="item.type === 2">{{ item.title }}</div> <div class="itemHeadInner2" v-if="JSON.parse(item.payload).level === 2">较大风险</div>
<div class="itemHeadInner3" v-if="item.type == 10">{{ item.title }}</div> <div class="itemHeadInner3" v-if="JSON.parse(item.payload).level === 3">一般风险</div>
<div class="itemHeadInner4" v-if="JSON.parse(item.payload).level === 4">低风险</div>
<div class="itemContent">
<el-tooltip class="box-item" effect="dark" :content="item.msg" placement="top-start">
<text style="margin-left:10px">{{ item.msg }}</text>
</el-tooltip>
</div>
</div> </div>
<div class="itemContent"> <div class="itemTime">
<el-tooltip class="box-item" effect="dark" :content="item.msg" placement="top-start"> <text class="timeInfo">{{ JSON.parse(item.payload).time }}</text>
{{ item.msg }} </div>
</el-tooltip> </div>
</div>
<div class="notoDta" v-else-if="listData2.length == 0">
<img src="@/assets/images/noData.png" alt="" />
<p>暂无数据</p>
</div>
<div v-else>
<vue3-seamless-scroll v-if="listData2.length > 0" :speed="1" :list="listData2" :step="0.3" :limitScrollNum="10" :hover="true" class="scroll">
<div class="item" v-for="(item, index) in listData2" :key="index">
<div class="itemHead">
<div class="itemHeadInner1" v-if="JSON.parse(item.payload).level === 1">重大风险</div>
<div class="itemHeadInner2" v-if="JSON.parse(item.payload).level === 2">较大风险</div>
<div class="itemHeadInner3" v-if="JSON.parse(item.payload).level === 3">一般风险</div>
<div class="itemHeadInner4" v-if="JSON.parse(item.payload).level === 4">低风险</div>
<div class="itemContent">
<el-tooltip class="box-item" effect="dark" :content="item.msg" placement="top-start">
<text style="margin-left:10px">{{ item.msg }}</text>
</el-tooltip>
</div>
</div>
<div class="itemTime">
<text class="timeInfo">{{ JSON.parse(item.payload).time }}</text>
</div> </div>
</div> </div>
</vue3-seamless-scroll> </vue3-seamless-scroll>
<div class="notoDta" v-if="listData.length == 0"> </div>
<img src="@/assets/images/noData.png" alt="" />
<p>暂无数据</p>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -89,7 +114,7 @@ let majorDangerRate = ref(50 as any);
let overdueMajorDangerCount = ref(20 as any); let overdueMajorDangerCount = ref(20 as any);
let overdueMajorDangerRate = ref(50 as any); let overdueMajorDangerRate = ref(50 as any);
let listData = ref([ let listData2 = ref([
// { title: '', type: 1, msg: '...' }, // { title: '', type: 1, msg: '...' },
// { title: '', type: 2, msg: '...' }, // { title: '', type: 2, msg: '...' },
// { title: '', type: 1, msg: '...' }, // { title: '', type: 1, msg: '...' },
@ -749,9 +774,22 @@ const getSelectQualityStatisticsNum = async () => {
} }
const getNoticeList = async () => { const getNoticeList = async () => {
const res: any = await getNoticeListApi({ projectSn: store.sn, type: 10, pageNo: 1, pageSize: 99999, }); // const res: any = await getNoticeListApi({ projectSn: store.sn, type: 10, pageNo: 1, pageSize: 99999, });
const res: any = await getNoticeListApi({ isBigScreen: 1 ,type:31});
console.log('隐患智能分析', res); console.log('隐患智能分析', res);
listData.value = res.result.records; listData2.value = res.result.records;
// listData2.value.push({
// accountId:"1779721457571291137",
// id:"1789601398432559107",
// imageUrl:null,
// isRead:0,
// msg:"1",
// payload:"{\"level\":4,\"time\":\"2024-05-12 18:19:40\"}",
// sendTime: "2024-05-12 18:19:57",
// title: "",
// type: "31",
// })
console.log("================================",listData2.value)
} }
watch(dateRange,async () => { watch(dateRange,async () => {
@ -896,7 +934,7 @@ onMounted(async () => {
// background-color: #fff; // background-color: #fff;
// padding: 0 20px; // padding: 0 20px;
position: relative; position: relative;
overflow: hidden;
.cbHeader { .cbHeader {
width: 100%; width: 100%;
height: 40px; height: 40px;
@ -937,29 +975,34 @@ onMounted(async () => {
background-size: 100% 100%; background-size: 100% 100%;
} }
} }
.cbContent { .cbContent {
width: 100%; width: 100%;
height: calc(100% - 60px); height: calc(100% - 55px);
// height: 100%;
// background: #fff; // background: #fff;
.item { .item {
// width: 100%; width: 100%;
line-height: 130%; line-height: 110%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-start; // justify-content: flex-start;
justify-content: space-between;
// background-color: green; // background-color: green;
color: #fff; color: #fff;
.itemHead { .itemHead {
white-space: nowrap; white-space: nowrap;
display: flex;
justify-content: center;
align-items: center;
font-size: 16px;
width: 65%;
.itemHeadInner { .itemHeadInner1 {
font-size: 16px; border: 1px solid #e02020;
border: 1px solid #f77c7d; box-shadow: 0 0 0 1px #e02020;
box-shadow: 0 0 0 1px #f77c7d; background: rgba(224,32,32, 0.4);
background: rgba(247, 124, 125, 0.4);
border-radius: 3px; border-radius: 3px;
padding: 0 15px; padding: 0 15px;
margin: 9px 0; margin: 9px 0;
@ -968,37 +1011,119 @@ onMounted(async () => {
.itemHeadInner2 { .itemHeadInner2 {
font-size: 16px; font-size: 16px;
border: 1px solid #56a8f8; border: 1px solid #f46649;
box-shadow: 0 0 0 1px #56a8f8; box-shadow: 0 0 0 1px #f46649;
background: rgba(86, 168, 248, 0.4); background: rgba(244,102,73, 0.4);
border-radius: 3px;
padding: 0 15px;
margin: 9px 0;
margin-left: 2px;
}
.itemHeadInner3 {
font-size: 16px;
border: 1px solid #ecbe45;
box-shadow: 0 0 0 1px #ecbe45;
background: rgba(236,190,69, 0.4);
border-radius: 3px;
padding: 0 15px;
margin: 9px 0;
margin-left: 2px;
}
.itemHeadInner4 {
font-size: 16px;
border: 1px solid #5394f7;
box-shadow: 0 0 0 1px #5394f7;
background: rgba(83,148,247, 0.4);
border-radius: 3px; border-radius: 3px;
padding: 0 15px; padding: 0 15px;
margin: 9px 0; margin: 9px 0;
margin-left: 2px; margin-left: 2px;
} }
.itemHeadInner3 { .itemContent {
font-size: 16px; margin-left: 10px;
border: 1px solid #0db027; font-size: 15px;
box-shadow: 0 0 0 1px #0db027; white-space: nowrap;
background: rgba(13, 176, 39, 0.4); overflow: hidden;
border-radius: 3px; text-overflow: ellipsis;
padding: 0 15px; width: 100%;
margin: 9px 0;
margin-left: 2px;
} }
} }
.itemContent { .itemTime {
margin-left: 10px; // background-color: #fff;
font-size: 15px; width: 35%;
white-space: nowrap; font-size: 16px;
overflow: hidden;
text-overflow: ellipsis;
.timeInfo {
display: flex;
justify-content: flex-end;
margin-right: 10px;
}
} }
} }
} }
// .cbContent {
// width: 100%;
// height: calc(100% - 60px);
// // background: #fff;
// .item {
// // width: 100%;
// line-height: 130%;
// display: flex;
// align-items: center;
// justify-content: flex-start;
// // background-color: green;
// color: #fff;
// .itemHead {
// white-space: nowrap;
// .itemHeadInner {
// font-size: 16px;
// border: 1px solid #f77c7d;
// box-shadow: 0 0 0 1px #f77c7d;
// background: rgba(247, 124, 125, 0.4);
// border-radius: 3px;
// padding: 0 15px;
// margin: 9px 0;
// margin-left: 2px;
// }
// .itemHeadInner2 {
// font-size: 16px;
// border: 1px solid #56a8f8;
// box-shadow: 0 0 0 1px #56a8f8;
// background: rgba(86, 168, 248, 0.4);
// border-radius: 3px;
// padding: 0 15px;
// margin: 9px 0;
// margin-left: 2px;
// }
// .itemHeadInner3 {
// font-size: 16px;
// border: 1px solid #0db027;
// box-shadow: 0 0 0 1px #0db027;
// background: rgba(13, 176, 39, 0.4);
// border-radius: 3px;
// padding: 0 15px;
// margin: 9px 0;
// margin-left: 2px;
// }
// }
// .itemContent {
// margin-left: 10px;
// font-size: 15px;
// white-space: nowrap;
// overflow: hidden;
// text-overflow: ellipsis;
// }
// }
// }
} }
} }
} }

View File

@ -373,8 +373,8 @@ onMounted(async () => {
.top-statistics{ .top-statistics{
width: 90%; width: 90%;
display: grid; display: grid;
grid-gap: 20px;
grid-template-columns: repeat(4, 1fr); grid-template-columns: repeat(4, 1fr);
grid-gap: 20px;
color: white; color: white;
margin: 0 auto; margin: 0 auto;
.statistics-item{ .statistics-item{

View File

@ -50,23 +50,48 @@
<span v-else-if="key2 == '安全教育'">25</span> <span v-else-if="key2 == '安全教育'">25</span>
</div> </div>
</div> </div>
<div class="table-head-nine-part2"> <div class="table-head-nine-part1">
<div class="category-title" style="width: 14.6%"> <div class="category-title">
<span>AI报警</span> <span>AI报警</span>
</div> </div>
<div class="category-title" style="width: 22%"> <div class="category-content" style="width:80%">
<span>AI违章抓拍</span> <div>
<div>
<span>AI违章抓拍</span>
</div>
<div style="width:50%">告警数量月度环比对比</div>
<div style="width:20%">
<span>100%</span>
</div>
</div>
</div> </div>
<div class="category-title" style="width:48%"> <div class="category-other" style="width: 10%">
<span>告警数量月度环比对比</span>
</div>
<div class="category-title" style="width:5%">
<span>20%</span> <span>20%</span>
</div> </div>
<div class="category-title" style="width: 10.4%;margin:0 0 0 0"> <div class="category-other" style="width: 10%">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ countData.aiScore || 0 }}</span> <span>{{ countData.aiScore || 0 }}</span>
</div> </div>
</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>100%</span>
</div>
<div class="category-title">
<span>20%</span>
</div>
<div class="category-title">
<span>{{ countData.aiScore || 0 }}</span>
</div>
</div> -->
<div class="table-head-nine-part3"> <div class="table-head-nine-part3">
<div style="width: 14.5%"><span>综合得分</span></div> <div style="width: 14.5%"><span>综合得分</span></div>
<div style="width: 85.5%"> <div style="width: 85.5%">

View File

@ -249,8 +249,8 @@ onMounted(async () => {
width: 95%; width: 95%;
height: 50%; height: 50%;
display: grid; display: grid;
grid-gap: 20px;
grid-template-columns: repeat(4, 1fr); grid-template-columns: repeat(4, 1fr);
grid-gap: 20px;
color: white; color: white;
margin: 0 auto; margin: 0 auto;
margin-top: 3%; margin-top: 3%;

View File

@ -328,8 +328,8 @@ onMounted(async () => {
.top-statistics{ .top-statistics{
width: 60%; width: 60%;
display: grid; display: grid;
grid-gap: 20px;
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
grid-gap: 20px;
color: white; color: white;
margin: 0 auto; margin: 0 auto;
.statistics-item{ .statistics-item{

View File

@ -188,8 +188,8 @@ onMounted(async () => {
padding: 20px 15px; padding: 20px 15px;
.top-statistics { .top-statistics {
display: grid; display: grid;
grid-gap: 20px;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
color: white; color: white;
margin: 0 5%; margin: 0 5%;
.statistics-item { .statistics-item {

View File

@ -182,8 +182,8 @@ onMounted(async () => {
padding: 20px 15px; padding: 20px 15px;
.top-statistics { .top-statistics {
display: grid; display: grid;
grid-gap: 20px;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
color: white; color: white;
margin: 0 5%; margin: 0 5%;
.statistics-item { .statistics-item {