forked from integrated_whb/integrated_whb_vue
告警类型统计与 区域人员统计
parent
481750be3f
commit
7145e51ebb
|
@ -4,14 +4,14 @@
|
|||
<layout-title title="人员类型统计" />
|
||||
<div class="option">
|
||||
<div
|
||||
v-for="(item, index) in data.block1OptionsList"
|
||||
v-for="(item, index) in data.block1OptionsList.data"
|
||||
:key="index"
|
||||
class="list"
|
||||
>
|
||||
<img :src="item.img" alt="" class="img" />
|
||||
<div class="label">{{ item.label }}</div>
|
||||
<div class="label">{{ item.name }}</div>
|
||||
<div class="num">
|
||||
<count-up :end-val="item.count"></count-up>
|
||||
<count-up :end-val="item.value"></count-up>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,29 +22,27 @@
|
|||
<div
|
||||
v-for="(item, index) in data.block2OptionsList"
|
||||
:key="index"
|
||||
:class="['list', { alarm: item.total > 0 }]"
|
||||
:class="['list', { alarm: item.count > 0 }]"
|
||||
@click="fnAlarmTypeClick(item)"
|
||||
>
|
||||
<div class="name">{{ item.label }}</div>
|
||||
<div class="name">{{ typeList[item.eleType] }}</div>
|
||||
<div class="num">
|
||||
<count-up :end-val="item.total"></count-up>
|
||||
<count-up :end-val="item.count"></count-up>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="block3">
|
||||
<layout-title title="人员定位情况" />
|
||||
<layout-title title="区域人员统计" />
|
||||
<div class="option">
|
||||
<div class="table">
|
||||
<div class="tr">
|
||||
<div class="td">姓名</div>
|
||||
<div class="td">卡号</div>
|
||||
<div class="td">电量</div>
|
||||
<div class="td">区域</div>
|
||||
<div class="td">人员</div>
|
||||
</div>
|
||||
<div v-for="(item, index) in data.block3List" :key="index" class="tr">
|
||||
<div class="td">{{ item.name }}</div>
|
||||
<div class="td">{{ item.cardNo }}</div>
|
||||
<div class="td">{{ item.stset + "%" }}</div>
|
||||
<div class="td">{{ item.group }}</div>
|
||||
<div class="td">{{ item.count }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -57,7 +55,7 @@
|
|||
/>
|
||||
<teleport to="body">
|
||||
<div
|
||||
v-if="data.block2OptionsList.some((item) => item.total > 0)"
|
||||
v-if="data.block2OptionsList.some((item) => item.count > 0)"
|
||||
class="alarm_full_screen"
|
||||
>
|
||||
<div
|
||||
|
@ -79,7 +77,18 @@ import {
|
|||
getAlarmTypeCount,
|
||||
getPersonnelPositioningCount,
|
||||
} from "@/request/bi/mapApi.js";
|
||||
|
||||
import { handleGetPerList, handleInit } from "@/views/BI/js/trajectory.js";
|
||||
const typeList = {
|
||||
1: "滞留报警",
|
||||
2: "串岗报警",
|
||||
3: "超员报警",
|
||||
4: "缺员报警",
|
||||
5: "静止报警",
|
||||
6: "一键报警",
|
||||
7: "越界报警",
|
||||
8: "聚集告警",
|
||||
9: "作业告警",
|
||||
};
|
||||
const data = reactive({
|
||||
block1OptionsList: [
|
||||
{
|
||||
|
@ -90,51 +99,20 @@ const data = reactive({
|
|||
],
|
||||
eleType: 0,
|
||||
block2OptionsList: [],
|
||||
block3List: [
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
{
|
||||
name: "赵一诺",
|
||||
Office: "大堂经理",
|
||||
electricity: "30%",
|
||||
},
|
||||
],
|
||||
block3List: [],
|
||||
form: {},
|
||||
drawer: false,
|
||||
});
|
||||
setInterval(async () => {
|
||||
const res = await handleGetPerList();
|
||||
data.block1OptionsList = res.perDataList;
|
||||
data.block2OptionsList = res.armDataList;
|
||||
data.block3List = res.regPerDataList;
|
||||
}, 2000);
|
||||
const fnInit = async () => {
|
||||
await handleInit();
|
||||
};
|
||||
fnInit();
|
||||
const getPersonnelData = async () => {
|
||||
const resData = await getPersonnelTypeCount();
|
||||
await nextTick(() => {
|
||||
|
@ -146,7 +124,7 @@ const getPersonnelData = async () => {
|
|||
const fnAlarmTypeClick = (e) => {
|
||||
data.drawer = true;
|
||||
data.form.title = e.label;
|
||||
data.eleType = e.type;
|
||||
data.eleType = e.eleType;
|
||||
};
|
||||
const getAlarmTypeData = async () => {
|
||||
const resData = await getAlarmTypeCount();
|
||||
|
|
|
@ -10,7 +10,12 @@ const pls_ip = userStore.getUserInfo.POST_URL;
|
|||
let entityArr = [];
|
||||
let billboardArr = [];
|
||||
const fencesArr = [];
|
||||
|
||||
const leftObj = {
|
||||
perDataList: [],
|
||||
armDataList: [],
|
||||
regPerDataList: [], // 区域人员统计
|
||||
deptDataList: [], // 部门统计
|
||||
};
|
||||
const { open, close } = useWebSocket(
|
||||
encodeURI("ws://" + pls_ip.replace("http://", "") + "/netty/test.io?u=1"),
|
||||
// encodeURI("ws://58.58.162.14:8084/netty/test.io?userid=1"),
|
||||
|
@ -25,13 +30,13 @@ const { open, close } = useWebSocket(
|
|||
onMessage: (ws, event) => {
|
||||
const msg = unzip(event.data);
|
||||
const decodedMsg = JSON.parse(decodeURIComponent(msg));
|
||||
console.log(decodedMsg);
|
||||
if (decodedMsg.msg === "000") {
|
||||
peoMovement(decodedMsg.data);
|
||||
}
|
||||
if (decodedMsg.msg === "006") {
|
||||
addNewPerson(decodedMsg.data);
|
||||
}
|
||||
changeLeftObjData(decodedMsg);
|
||||
},
|
||||
onDisconnected: () => {
|
||||
if (entityArr && entityArr.children) {
|
||||
|
@ -47,6 +52,13 @@ const { open, close } = useWebSocket(
|
|||
},
|
||||
}
|
||||
);
|
||||
export const handleGetPerList = async () => {
|
||||
return leftObj;
|
||||
};
|
||||
export const handleInit = async () => {
|
||||
getOnlineUser();
|
||||
open();
|
||||
};
|
||||
export const handleTrajectory = (b) => {
|
||||
if (b) {
|
||||
getOnlineUser();
|
||||
|
@ -149,7 +161,20 @@ const drawCanvas = (name, floor) => {
|
|||
ctx.fillText((name || "未知人员") + `(${floor}F)`, width / 2, height / 2);
|
||||
return canvas;
|
||||
};
|
||||
|
||||
const changeLeftObjData = (decodedMsg) => {
|
||||
if (decodedMsg.msg === "005") {
|
||||
leftObj.perDataList = decodedMsg.data;
|
||||
}
|
||||
if (decodedMsg.msg === "003") {
|
||||
leftObj.armDataList = decodedMsg.data;
|
||||
}
|
||||
if (decodedMsg.msg === "002") {
|
||||
leftObj.regPerDataList = decodedMsg.data;
|
||||
}
|
||||
if (decodedMsg.msg === "008") {
|
||||
leftObj.deptDataList = decodedMsg.data;
|
||||
}
|
||||
};
|
||||
const addNewPerson = (data) => {
|
||||
data.forEach((item) => {
|
||||
const entity = item.split(",");
|
||||
|
@ -203,8 +228,8 @@ function peoMovement(moveData) {
|
|||
Number(Number(itData[4]) + 2.05),
|
||||
2000
|
||||
); // 人物铭牌平滑移动
|
||||
console.log(b.entity.floor);
|
||||
console.log(Number(itData[6]));
|
||||
// console.log(b.entity.floor);
|
||||
// console.log(Number(itData[6]));
|
||||
if (Number(itData[6]) !== Number(b.entity.floor)) {
|
||||
b.entity.floor = itData[6];
|
||||
billboardArr.children[m].uopdateImg(
|
||||
|
|
Loading…
Reference in New Issue