Merge branch 'fly' into xy-ly

master
fanluyan 2 years ago
commit 1e82623a95

11941
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,15 +1,19 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
<title>视频监控可视化平台</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
<strong
>We're sorry but 视频监控可视化平台 doesn't work properly without
JavaScript enabled. Please enable it to continue.</strong
>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 122 KiB

@ -0,0 +1,164 @@
<template>
<el-dialog
class="photoSetDialog"
title="设置"
:visible.sync="isShow"
:close-on-click-modal="false"
width="40%"
>
<!-- <el-form
label-position="left"
ref="formInfo"
label-width="100px"
:rules="rules"
:model="formdata"
>
<el-form-item label="通道:" prop="name">
<el-tree
:data="listnr"
show-checkbox
:props="defaultProps"
ref="tree"
node-key="id"
:default-expand-all="true"
></el-tree>
</el-form-item>
</el-form> -->
<div class="flexnr">
<div class="w50">通道:</div>
<el-tree
:data="listnr"
show-checkbox
:props="defaultProps"
ref="tree"
node-key="id"
:default-expand-all="true"
></el-tree>
</div>
<div slot="footer" class="dialog-footer">
<!-- <el-button @click="getCheckedNodes"></el-button> -->
<el-button @click="isShow = false"> </el-button>
<el-button type="primary" @click="submitForm()"> </el-button>
</div>
</el-dialog>
</template>
<script>
import {
setScheduleRulel,
getScheduleRulelAccessList,
} from "@/utils/api/index";
export default {
props: {
title: String,
},
data() {
return {
isShow: false,
formdata: {},
rules: {
name: [{ required: true, message: "请选择通道", trigger: "blur" }],
},
listnr: [],
defaultProps: {
children: "list",
label: "name",
},
selid: 0,
ruleid: "",
parmsList: [], //
};
},
mounted() {},
methods: {
//
getdataform(val) {
this.selid = val.id;
this.getlistnr();
},
//
getlistnr() {
getScheduleRulelAccessList({})
.then((res) => {
this.listnr = res.data.list;
})
.catch((err) => {});
},
//
getCheckedNodes() {
this.parmsList = [];
const checkedNodes = this.$refs.tree.getCheckedNodes(false, true); //
//const checkedParam = []; //
let index = -1;
// console.log(checkedNodes);
if (checkedNodes.length !== 0) {
checkedNodes.forEach((item) => {
// list
if (item.list !== undefined) {
index++;
this.parmsList[index] = {
//name: item.name,
termid: item.id,
channelidlist: [],
};
} else {
//list id push channelidlist
this.parmsList[index].channelidlist.push(item.id);
}
//bsManufacturer 线 线id
// if (item.bsManufacturer !== undefined) {
// this.ruleid = item.id;
// console.log(this.ruleid);
// }
});
}
// console.log(this.parmsList);
//channelichilddlist
this.parmsList = this.parmsList
.filter((item) => item.channelidlist.length !== 0)
.map((item) => {
return {
termid: item.termid,
channelidlist: item.channelidlist,
};
});
console.log(this.parmsList);
return this.parmsList;
},
//
submitForm() {
this.getCheckedNodes();
if (this.parmsList.length == 0)
return this.$message.error("通道不能为空");
setScheduleRulel({ list: this.parmsList, ruleid: this.selid })
.then((res) => {
this.isShow = false;
this.$message.success("添加成功");
this.$parent.deviceList();
})
.catch((err) => {
this.$message.error("添加失败");
});
},
display() {
this.isShow = true;
},
hide() {
this.isShow = false;
},
},
};
</script>
<style lang="less">
.photoSetDialog {
.flexnr {
display: flex;
align-items: flex-start;
}
.w50 {
width: 50px;
}
}
</style>

@ -11,9 +11,12 @@
v-for="item in terminalPhoto"
:key="item.id"
>
<viewer class="bigimg">
<viewer class="bigimg" v-if="item.path.indexOf('nopic') == -1">
<img :src="item.path" alt="" />
</viewer>
<div class="bigimg" v-else>
<img :src="item.path" alt="" />
</div>
</swiper-slide>
<div
class="swiper-button-next swiper-button-white"
@ -36,7 +39,7 @@
:key="item.id"
>
<img :src="item.path" alt="" />
<p class="timeInfo">
<p class="timeInfo" v-if="item.path.indexOf('nopic') == -1">
{{ $moment(item.photoTime).format("YYYY-MM-DD ") }}
</p>
</swiper-slide>
@ -123,13 +126,22 @@ export default {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
img {
width: 100%;
//height: 100%;
// object-fit: cover;
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
}
}
.swiper-button-prev.swiper-button-disabled,
.swiper-button-next.swiper-button-disabled {
opacity: 0.35;
cursor: auto;
pointer-events: none;
display: none !important;
}
}
.gallery-thumbs {
width: 100%;
@ -141,12 +153,13 @@ export default {
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
img {
width: 100%;
//height: 100%;
//object-fit: cover;
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
}
}

@ -23,6 +23,12 @@
show-overflow-tooltip
width="160px"
>
<template slot-scope="scope">
<span v-if="scope.row.hadisplayNamesPan == ''">{{
scope.row.hadisplayNamesPan
}}</span>
<span v-else>{{ scope.row.cmdid }}</span>
</template>
</el-table-column>
<el-table-column
prop="cmdid"

@ -0,0 +1,64 @@
<template>
<el-dialog
class="deviceUpgradeDialog"
title="装置升级"
:visible.sync="isShow"
:close-on-click-modal="false"
width="400px"
>
<div class="upload">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:file-list="fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">
只能上传jpg/png文件且不超过500kb
</div>
</el-upload>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="isShow = false"> </el-button>
<el-button type="primary" @click="submitForm()"> </el-button>
</div>
</el-dialog>
</template>
<script>
export default {
props: {
title: String,
},
data() {
return {
isShow: false,
fileList: [],
};
},
mounted() {},
methods: {
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file);
},
//
submitForm() {
this.isShow = false;
},
display() {
this.isShow = true;
},
hide() {
this.isShow = false;
},
},
};
</script>
<style lang="less">
.deviceUpgradeDialog {
}
</style>

@ -0,0 +1,172 @@
<template>
<el-dialog
class="pictureTagsDialog"
title="图片绘制"
:visible.sync="isShow"
:close-on-click-modal="false"
width="1000px"
>
<div class="picPannel">
<div class="imgbox">
<img
src="http://47.96.238.157/image/2023/04/24/01/DSH10H00000000001_1_FF_20230424192442.jpg"
/>
<canvas
id="myCanvas"
class="myCanvas"
ref="myCanvas"
@mousedown="mousedown"
@mouseup="mouseup"
@mousemove="mousemove"
></canvas>
</div>
<div class="setBox">
<div class="infoCompany">
<p><label>电压等级</label><span>220kv</span></p>
<p><label>线路名称</label><span>i1测试线路-SH</span></p>
<p><label>装置名称</label><span>XY-SIMULATOR-0001</span></p>
</div>
<div class="setColor">
<p>
<label>颜色</label
><el-color-picker v-model="color"></el-color-picker>
</p>
<p>
<label>线宽</label>
<el-input-number
v-model="num"
controls-position="right"
@change="handleChange"
:min="1"
:max="10"
></el-input-number>
</p>
<p>
<el-button type="primary">重新绘制</el-button>
<el-button type="primary">保存绘制</el-button>
</p>
</div>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="isShow = false"> </el-button>
<el-button type="primary" @click="submitForm()"> </el-button>
</div>
</el-dialog>
</template>
<script>
export default {
props: {
title: String,
},
data() {
return {
color: "#409EFF",
num: 1,
flag: false,
x: 0,
y: 0,
isShow: false,
fileList: [],
};
},
mounted() {},
methods: {
//线
handleChange(value) {
console.log(value);
},
//
submitForm() {
this.isShow = false;
},
display() {
this.isShow = true;
},
hide() {
this.isShow = false;
},
mousedown(e) {
console.log("鼠标落下");
this.flag = true;
this.x = e.offsetX; // X
this.y = e.offsetY; // Y
console.log(this.x, this.y);
},
mouseup(e) {
console.log("鼠标抬起");
this.flag = false;
},
mousemove(e) {
console.log("鼠标移动");
this.drawRect(e);
},
drawRect(e) {
if (this.flag) {
console.log("绘制图形");
const canvas = this.$refs.myCanvas;
var ctx = canvas.getContext("2d");
let x = this.x;
let y = this.y;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
//线
ctx.strokeStyle = this.color;
// 线
ctx.lineWidth = this.num;
console.log(x, y, e.offsetX - x, e.offsetY - y);
ctx.strokeRect(x, y, e.offsetX - x, e.offsetY - y);
}
},
},
};
</script>
<style lang="less">
.pictureTagsDialog {
.picPannel {
display: flex;
flex-direction: row;
justify-content: space-between;
position: relative;
.imgbox {
width: 698px;
position: relative;
img {
width: 100%;
height: 100%;
}
.myCanvas {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
.setBox {
width: 230px;
padding: 12px;
border: 3px solid #2d8cf0;
.infoCompany {
display: flex;
flex-direction: column;
line-height: 32px;
margin-bottom: 16px;
}
}
.setColor {
display: flex;
flex-direction: column;
line-height: 32px;
p {
display: flex;
align-items: center;
margin-bottom: 16px;
}
}
}
}
</style>

@ -70,34 +70,34 @@
>主动拍照</el-button
>
<el-button type="primary" @click="handleShowErr"
>主动录像</el-button
>获取GPS位置</el-button
>
<el-button type="primary" @click="handleShowErr"
>历史图片</el-button
>装置复位</el-button
>
<el-button type="primary" @click="handleShowErr"
>历史图片对比</el-button
>
<el-button type="primary" @click="handleShowErr"
<el-button type="primary" @click="handlePanel"
>图片标记</el-button
>
<el-button type="primary" @click="handleShowErr"
>主动巡航</el-button
>
<el-button type="primary" @click="handleShowErr"
>隐患类型</el-button
>
<el-button type="primary" @click="handleShowErr"
>监拍点信息</el-button
>
<el-button type="primary" @click="handleShowErr">
设备信息</el-button
>
<el-button type="primary" @click="handleUpGrade"
>装置升级</el-button
>
</div>
</div>
</div>
</div>
<setschedule ref="setschedule_ref"></setschedule>
<!-- 装置升级 -->
<deviceUpgrade ref="deviceupgrade_ref"></deviceUpgrade>
<!-- 绘制图片 -->
<pictureTags ref="pictureTags_ref"></pictureTags>
</div>
</div>
</template>
@ -111,11 +111,15 @@ import {
import carouselChart from "../components/carouselChart.vue";
import setschedule from "./components/setschedule.vue";
import deviceUpgrade from "./components/deviceUpgrade.vue";
import pictureTags from "./components/pictureTags.vue";
export default {
components: {
carouselChart,
setschedule,
deviceUpgrade,
pictureTags,
},
data() {
return {
@ -275,6 +279,14 @@ export default {
type: "warning",
});
},
//
handleUpGrade() {
this.$refs.deviceupgrade_ref.display();
},
//
handlePanel() {
this.$refs.pictureTags_ref.display();
},
},
};
</script>
@ -329,6 +341,7 @@ export default {
width: 220px;
padding: 16px 16px;
border-left: 1px solid #dcdfe6;
position: relative;
.monitorItemBox,
.paramsDate,
.setTimebtn {
@ -344,6 +357,8 @@ export default {
}
}
.setTimebtn {
// position: absolute;
// bottom: 0px;
.buttonGroup {
display: flex;
flex-wrap: wrap;

@ -0,0 +1,216 @@
<template>
<div class="parameterArea">
<div class="timeBox"></div>
<div class="monitorItemBox">
<h3>检测项</h3>
<div class="btnBox">
<el-button
type="primary"
v-for="(item, index) in MonitorItem"
:key="index"
icon="el-icon-thumb"
>{{ item.name }}</el-button
>
</div>
</div>
<div class="monitorPointBox">
<h3>监拍点</h3>
<div class="btnBox">
<el-button
type="primary"
v-for="(item, index) in MonitorPoint"
:key="index"
icon="el-icon-thumb"
>{{ item.name }}</el-button
>
</div>
</div>
<div class="actionItem">
<h3>操作项</h3>
<div class="btnBox">
<el-button
type="primary"
v-for="(item, index) in actionItem"
:key="index"
icon="el-icon-thumb"
>{{ item.name }}</el-button
>
</div>
</div>
<div class="configItem">
<h3>配置项</h3>
<div class="btnBox">
<el-button
type="primary"
v-for="(item, index) in configItem"
:key="index"
icon="el-icon-thumb"
>{{ item.name }}</el-button
>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
//
MonitorItem: [
{
name: "图片视频",
},
{
name: "测温",
},
{
name: "微气象",
},
{
name: "倾斜监测",
},
{
name: "风偏监测",
},
{
name: "覆冰检测",
},
{
name: "实时视频",
},
{
name: "弧垂",
},
{
name: "电压检测",
},
],
//
MonitorPoint: [
{
name: "小号侧",
},
{
name: "大号侧",
},
],
//
actionItem: [
{
name: "主动拍照",
},
{
name: "主动录像",
},
{
name: "声光报警",
},
{
name: "图片调阅",
},
{
name: "微信推送",
},
{
name: "历史图片",
},
{
name: "线缆绘制",
},
{
name: "清除绘制",
},
{
name: "主动巡检",
},
{
name: "指令集",
},
{
name: "开启雨刮",
},
{
name: "喊话",
},
{
name: "上一设备",
},
{
name: "下一设备",
},
{
name: "返回",
},
{
name: "历史对比",
},
{
name: "图片标记",
},
{
name: "主动巡航",
},
],
//
configItem: [
{
name: "设置分组",
},
{
name: "隐患类型",
},
{
name: "地图查看",
},
{
name: "监拍点信息",
},
{
name: "告警级别",
},
{
name: "设备信息",
},
{
name: "设置漏告",
},
],
};
},
};
</script>
<style lang="less">
// .parameterArea {
// width: 300px;
// padding: 16px 8px;
// .monitorItemBox,
// .monitorPointBox,
// .actionItem,
// .configItem {
// border: 1px solid @border-color-base;
// padding: 8px 16px 8px 16px;
// margin-bottom: 32px;
// h3 {
// font-size: 16px;
// margin-bottom: 8px;
// background: transparent;
// color: @color-text-regular;
// }
// .btnBox {
// display: flex;
// flex-wrap: wrap;
// justify-content: space-between;
// .el-button {
// width: 84px;
// padding: 6px 0px;
// font-size: 12px;
// margin-bottom: 8px;
// }
// .el-button + .el-button {
// margin-left: 0px;
// }
// }
// }
// }
</style>

@ -0,0 +1,191 @@
<template>
<div class="picture" v-if="photoData">
<div class="picTop">
<h3>{{ photoData.text }}</h3>
<div class="total">
<span>监拍设备:14 监拍点:14 视频:0 测温:0 微气象:0 </span>
</div>
</div>
<div class="picmain">
<div class="photosPic">
<div class="topTitle">
<h4>{{ photoData.children[0].text }};大号侧</h4>
<div class="iconList">
<i class="el-icon-video-camera" title="主副机"></i>
<i class="el-icon-video-camera" title="夜视"></i>
<i class="el-icon-video-camera" title="云台"></i>
<i class="el-icon-video-camera" title="T基+通道"></i>
<i class="el-icon-video-camera" title="声光告警"></i>
<i class="el-icon-video-camera" title="测温"></i>
<i class="el-icon-video-camera" title="微气象"></i>
</div>
</div>
<ul class="picShow">
<li
v-for="(item, index) in lagrePic.slice(0, 4)"
:key="index"
@click="picShow(index)"
>
<img :src="'http://180.166.218.222:8104/media/' + item.filePath" />
<span class="timeShow">{{ item.captureTime }}</span>
</li>
</ul>
</div>
<div class="photosPic">
<div class="topTitle">
<h4>{{ photoData.children[0].text }};小号测</h4>
<div class="iconList">
<i class="el-icon-video-camera" title="主副机"></i>
<i class="el-icon-video-camera" title="夜视"></i>
<i class="el-icon-video-camera" title="云台"></i>
<i class="el-icon-video-camera" title="T基+通道"></i>
<i class="el-icon-video-camera" title="声光告警"></i>
<i class="el-icon-video-camera" title="测温"></i>
<i class="el-icon-video-camera" title="微气象"></i>
</div>
</div>
<ul class="picShow">
<li
v-for="(item, index) in smallPic.slice(0, 4)"
:key="index"
@click="picShow(index)"
>
<img :src="'http://180.166.218.222:8104/media/' + item.filePath" />
<span class="timeShow">{{ item.captureTime }}</span>
</li>
</ul>
</div>
</div>
<div class="page">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage4"
:page-size="100"
layout="prev, pager, next, jumper,total"
:total="400"
>
</el-pagination>
</div>
</div>
</template>
<script>
export default {
props: ["photoData"],
data() {
return {
dataPhoto: "",
lagrePic: [],
smallPic: [],
currentPage4: 4,
};
},
mounted: function () {
this.getPhoto();
},
methods: {
handleSizeChange(val) {
console.log(`每页 ${val}`);
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
getPhoto() {
console.log(photo);
//this.dataPhoto = photo;
photo.forEach((item) => {
console.log(item);
if (item.orientation === "1") {
this.lagrePic.push(item);
} else {
this.smallPic.push(item);
}
});
},
picShow(index) {
console.log(index);
},
},
};
</script>
<style lang="less">
.picture {
flex: 1;
padding: 16px;
width: 100%;
.picTop {
display: flex;
justify-content: space-between;
align-items: baseline;
h3 {
font-size: 24px;
line-height: 30px;
color: @color-text-regular;
}
.total span {
color: @color-text-secondary;
font-size: 14px;
line-height: 30px;
}
}
.picmain {
border: 1px solid @border-color-base;
.photosPic {
padding-bottom: 12px;
border-bottom: 1px solid @border-color-base;
&:last-child {
border-bottom: 0px solid @border-color-base;
}
.topTitle {
display: flex;
justify-content: space-between;
align-items: center;
h4 {
padding: 0 10px;
display: inline-block;
line-height: 45px;
color: @color-text-regular;
font-size: 16px;
font-weight: bold;
}
.iconList {
i {
color: @color-text-secondary;
margin-right: 12px;
font-size: 28px;
}
}
}
.picShow {
display: flex;
padding-left: 6px;
justify-content: space-between;
li {
display: inline-block;
position: relative;
width: 24.5%;
img {
width: 100%;
height: 100%;
}
.timeShow {
position: absolute;
top: 0;
left: 0;
background: @color-primary;
display: inline-block;
color: @color-white;
font-size: 14px;
padding: 4px;
}
}
}
}
}
.page {
margin-top: 16px;
}
}
</style>
Loading…
Cancel
Save