You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1113 lines
36 KiB

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="设备名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入设备名" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="序列号" prop="devsn">
<el-input v-model="queryParams.devsn" placeholder="请输入设备序列号" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['web:camera:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['web:camera:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['web:camera:export']">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-refresh" size="mini" @click="register"
v-hasPermi="['web:camera:reboot']">重启服务</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-refresh" size="mini" @click="restartM3u8"
v-hasPermi="['web:camera:m3u8']">重启视频服务</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="cameraList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column min-width="60" align="center" label="序号">
<template slot-scope="scope">
<span>{{ (queryParams.page - 1) * queryParams.limit + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="设备名" align="center" prop="name" />
<el-table-column label="设备ip" align="center" prop="ip" />
<el-table-column label="设备序列号" align="center" prop="devsn" />
<el-table-column label="首次注册时间" align="center" prop="firstTime" width="220"/>
<el-table-column label="心跳时间" align="center" prop="updateTime" width="220"/>
<el-table-column label="4G强度" align="center" prop="rssiLevel" />
<el-table-column label="接入方式" align="center" prop="accessType">
<template slot-scope="scope">
<dict-tag :options="dict.type.camera_access_type" :value="scope.row.accessType"/>
</template>
</el-table-column>
<el-table-column label="摄像机品牌" align="center" prop="brand">
<template slot-scope="scope">
<div v-for="item in brandList">
{{(scope.row.brand == item.id)?item.name:''}}
</div>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<span v-if="scope.row.status == 1">
<el-tag type="success">在线</el-tag>
</span>
<span v-if="scope.row.status == 0">
<el-tag type="info">离线</el-tag>
</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button
size="mini"
type="text"
icon="el-icon-setting"
@click="openFtpCfg(scope.row)"
v-hasPermi="['web:camera:remove']"
>FTP配置</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-search"
@click="showVideo(scope.row)"
v-hasPermi="['web:camera:remove']"
>查看视频</el-button> -->
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['web:camera:edit']">修改</el-button>
<!-- <el-button
size="mini"
type="text"
icon="el-icon-refresh"
@click="reboot(scope.row)"
v-hasPermi="['web:camera:remove']"
v-loading.fullscreen.lock="fullscreenLoading"
>重启</el-button> -->
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['web:camera:remove']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="playVideo(scope.row)"
v-hasPermi="['web:camera:net']">播放视频</el-button>
<el-button size="mini" type="text" icon="el-icon-setting" @click="setConfig(scope.row)"
v-hasPermi="['web:camera:config']">参数</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)"
v-hasPermi="['web:camera:4g']">
<span class="el-dropdown-link">
<i class="el-icon-d-arrow-right el-icon--right"></i>更多
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="refreshRssi" icon="el-icon-s-operation">
刷新4G信号</el-dropdown-item>
<el-dropdown-item command="openFtpCfg" icon="el-icon-setting">FTP配置
</el-dropdown-item>
<el-dropdown-item command="showVideo" icon="el-icon-view">查看视频
</el-dropdown-item>
<el-dropdown-item command="showLog" icon="el-icon-view">查看日志
</el-dropdown-item>
<el-dropdown-item command="showDate" icon="el-icon-view">补光时间
</el-dropdown-item>
<el-dropdown-item command="reboot" icon="el-icon-refresh">重启
</el-dropdown-item>
<el-dropdown-item command="autocfg" icon="el-icon-refresh">自动重启配置
</el-dropdown-item>
<el-dropdown-item command="setTime" icon="el-icon-refresh">时间校准
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.limit"
@pagination="getList" />
<!-- 添加或修改摄像机对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="设备名" prop="name">
<el-input v-model="form.name" placeholder="请输入设备名" />
</el-form-item>
<el-form-item label="设备ip" prop="ip">
<el-input v-model="form.ip" placeholder="请输入设备ip" />
</el-form-item>
<el-form-item label="设备端口" prop="port">
<el-input v-model="form.port" placeholder="请输入设备端口" />
</el-form-item>
<el-form-item label="设备登录账号" prop="username">
<el-input v-model="form.username" placeholder="请输入设备登录账号" />
</el-form-item>
<el-form-item label="设备登录密码" prop="password">
<el-input v-model="form.password" placeholder="请输入设备登录密码" />
</el-form-item>
<el-form-item label="设备序列号" prop="devsn">
<el-input v-model="form.devsn" placeholder="请输入设备序列号" />
</el-form-item>
<el-form-item label="接入方式" prop="accessType">
<el-select v-model="form.accessType" placeholder="请选择接入方式">
<el-option
v-for="dict in dict.type.camera_access_type"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="摄像机品牌" prop="brand">
<el-select v-model="form.brand" placeholder="请选择摄像机品牌">
<el-option
v-for="dict in brandList"
:key="dict.id"
:label="dict.name"
:value="parseInt(dict.id)"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- ftp配置对话框 -->
<el-dialog title="FTP配置" :visible.sync="ftp.open">
<div class="container">
<!-- 表单 -->
<div class="ftpform">
<el-form :model="ftp.form" :label-width="ftp.width">
<el-form-item label="启用">
<el-switch v-model="ftp.run"></el-switch>
</el-form-item>
<el-form-item label="服务器地址">
<el-input v-model="ftp.form.address"></el-input>
</el-form-item>
<el-form-item label="服务器端口">
<el-input v-model="ftp.form.port"></el-input>
</el-form-item>
<el-form-item label="用户名">
<el-input v-model="ftp.form.username"></el-input>
</el-form-item>
<el-form-item label="密码">
<el-input v-model="ftp.form.password"></el-input>
</el-form-item>
<el-form-item label="FTP图片路径">
<el-input v-model="ftp.form.pathRule" type="textarea" :rows="3"></el-input>
</el-form-item>
</el-form>
</div>
<!-- 参考表格 -->
<div class="table">
<div class="head">路径配置参考</div>
<div class="content">
<div class="tips">
<span>%Y: 年</span>
<span>%M: 月</span>
<span>%D: 日</span>
<span>%h: 时</span>
<span>%m: 分</span>
<span>%s: 秒</span>
<span>%u: 毫秒</span>
<span>%c: 通道</span>
<span>%n: 设备序列号</span>
<span>%i: 设备ip</span>
<span>%e: 事件名称</span>
<span>%a: MAC地址</span>
</div>
<div class="notice">
<div>注意: </div>
<div>
文件夹名以/隔开; 多个%%自动转为一个%;
不可出现路径代码提示中没有的"%"+字符组合, 否则将保存失败!
</div>
</div>
</div>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="ftp.open = false">取 消</el-button>
<el-button type="primary" @click="ftpConfirm">确 定</el-button>
</div>
</el-dialog>
<!-- 自动重启配置对话框 -->
<el-dialog title="自动重启配置" :visible.sync="restartcfg.open">
<div class="container">
<!-- 表单 -->
<div class="restartcfgform">
<el-form>
<el-form-item label="启用">
<el-switch v-model="restartcfg.run"></el-switch>
</el-form-item>
<el-select v-model="restartcfg.form.uWeekDay" placeholder="选择星期">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="parseInt(item.value)">
</el-option>
</el-select>
<el-time-select v-model="restartcfg.form.uHour" :picker-options="{
start: '00:00',
step: '01:00',
end: '23:00'
}" placeholder="选择时间">
</el-time-select>
</el-form>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="restartcfg.open = false">取 消</el-button>
<el-button type="primary" @click="restartcfgConfirm">确 定</el-button>
</div>
</el-dialog>
<!-- 日志详情对话框 -->
<el-dialog title="日志查询" :visible.sync="logform.open">
<div >
<!-- 表单 -->
<el-form :model="logform.queryForm" ref="queryForm" size="small" :inline="true" label-width="200px">
<el-date-picker v-model="timeStage" type="datetimerange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" @change="chooseTimeRange" :picker-options="setDateRange">
</el-date-picker>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleAutoQuery">查询</el-button>
</el-form-item>
<el-table :data="logInfoList" stripe style="width: 100%">
<el-table-column label="记录时间" align="center" prop="clogTime" />
<el-table-column label="用户名" align="center" prop="coperUserName" />
<el-table-column label="主类型" align="center" prop="cmainType" />
<el-table-column label="次类型" align="center" prop="csubType" />
<el-table-column label="远程IP" align="center" prop="cremoteIP" />
</el-table>
</el-form>
</div>
</el-dialog>
<el-dialog title="查看时间" :visible.sync="updateDate.open">
<div>
<el-form :model="updateDate.queryForm" label-width="80px">
<el-form-item label="模式">
<el-select v-model="updateDate.queryForm.emMode" placeholder="请选择模式" style="width: 200px;">
<el-option
v-for="item in modelList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="预设亮度">
<el-input-number v-model="updateDate.queryForm.nPreValue" controls-position="right" :min="1" :max="100"></el-input-number>
</el-form-item>
<el-form-item label="亮度">
<el-input-number v-model="updateDate.queryForm.nBrightness" controls-position="right" :min="1" :max="100"></el-input-number>
</el-form-item>
<el-form-item v-if="updateDate.queryForm.emMode=='3'" label="时间段1">
<el-time-picker
size="small"
align="center"
format="HH:mm:ss"
style="width: 150px;margin-right: 5px;"
v-model="updateDate.queryForm.startTime1"
:picker-options="{
selectableRange: '00:00:00 - 23:59:59'
}"
placeholder="任意时间点">
</el-time-picker>
<el-time-picker
size="small"
align="center"
style="width: 150px"
v-model="updateDate.queryForm.endTime1"
:picker-options="{
selectableRange: '00:00:00 - 23:59:59'
}"
placeholder="任意时间点">
</el-time-picker>
</el-form-item>
<el-form-item v-if="updateDate.queryForm.emMode=='3'" label="时间段2">
<el-time-picker
size="small"
align="center"
style="width: 150px;margin-right: 5px;"
v-model="updateDate.queryForm.startTime2"
:picker-options="{
selectableRange: '00:00:00 - 23:59:59'
}"
placeholder="任意时间点">
</el-time-picker>
<el-time-picker
size="small"
align="center"
style="width: 150px"
v-model="updateDate.queryForm.endTime2"
:picker-options="{
selectableRange: '00:00:00 - 23:59:59'
}"
placeholder="任意时间点">
</el-time-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="updateDate.open = false">取 消</el-button>
<el-button type="primary" @click="setLightCfg()">确 定</el-button>
</div>
</div>
</el-dialog>
<!-- <el-dialog title="播放视频" :visible.sync="videoData.open">
<div>
<video
id="my-video"
class="video-js vjs-default-skin"
controls
preload="auto"
width="500px"
>
<source src="http://192.168.1.219/hls/192_168_1_40/live.m3u8" type="application/x-mpegURL" />
</video>
</div>
</el-dialog>-->
<el-dialog
title="播放视频"
:visible.sync="videoData.open"
:close-on-click-modal="false"
:append-to-body="true"
@close="closeVideo"
align="center"
>
<div v-html="videoHtml">
</div>
</el-dialog>
<el-dialog title="水尺参数" :visible.sync="configopen" width="600px" append-to-body>
<el-form ref="cform" :model="configform" label-width="100px">
<el-form-item label="总长度" prop="tLen">
<el-input type="number" v-model="configform.tlen" placeholder="某一时刻水位+水位上水尺长度(单位米)" />
</el-form-item>
<el-form-item label="出水长度" prop="cLen">
<el-input type="number" v-model="configform.clen" placeholder="某一时刻水面上水尺长度(单位米)" />
</el-form-item>
<el-form-item label="出水长度" prop="cP">
<el-input type="number" v-model="configform.cp" placeholder="水面上的水尺长度对应像素" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="configSubmit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { formatDate } from "../../../utils/common";
import { Message } from 'element-ui'
import videojs from "video.js";
import "videojs-contrib-hls";
export default {
name: "Camera",
dicts: ['camera_access_type'],
data() {
return {
videoHtml: '',
// 遮罩层
loading: true,
fullscreenLoading: false,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 摄像机表格数据
cameraList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
configopen: false,
videoData:{
open: false,
},
// 查询参数
queryParams: {
page: 1,
limit: 10,
name: null,
ip: null,
port: null,
username: null,
password: null,
devsn: null,
status: null
},
// 表单参数
form: {},
configform: {},
// 表单校验
rules: {
},
// ftp配置
ftp: {
open: false,
form: {
address: '',
port: '',
username: '',
password: '',
pathRule: '',
isEnable: '',
devsn: '',
accessType: null,
brand: null
},
run: false,
width: '100px'
},
modelList:[
{
value: '0', label: '强制关闭'
},
{
value: '1', label: '强制开启'
},
{
value: '2', label: '自动'
},
{
value: '3', label: '自动时间'
}
],
//自动重启设置
restartcfg: {
open: false,
form: {
id: '',
bEnable: '',
uHour: '',
uWeekDay: '',
},
run: false,
},
//日志
logform: {
open: false,
queryForm: {
id: '',
startTime: '',
endTime: ''
},
run: false,
},
updateDate:{
open: false,
queryForm: {
id: '',
emMode: '',
nPreValue: '1',
nBrightness: '1',
startTime1: new Date(2022, 9, 10, 18, 40),
endTime1: new Date(2022, 9, 10, 18, 40),
startTime2: new Date(2022, 9, 10, 18, 40),
endTime2: new Date(2022, 9, 10, 18, 40),
},
},
logInfoList: [],
options: [{
value: '0',
label: '星期日'
}, {
value: '1',
label: '星期一'
}, {
value: '2',
label: '星期二'
}, {
value: '3',
label: '星期三'
}, {
value: '4',
label: '星期四'
}, {
value: '5',
label: '星期五'
}, {
value: '6',
label: '星期六'
}],
// 摄像机品牌列表
brandList: [],
timeStage: [],
num: Date.now(),
// 设置可选择的时间段,*** 必须在 data 返回数据 ***
setDateRange: {
// 设置不能选择的日期
onPick: ({
maxDate,
minDate
}) => {
if (minDate) { //如果默认有最小日期
this.choiceDate0 = minDate.getTime();
} else { //如果最小日期被清空,则最小日期为当天
this.choiceDate0 = new Date();
}
if (maxDate) {
this.choiceDate0 = '';
}
},
disabledDate: (time) => {
let choiceDateTime = new Date(this.choiceDate0).getTime(); //选中的第一个日期
if (this.choiceDate0) {
//间隔15天,则加减14天---“这主要看需求”
//14天的时间戳:14*24*3600*1000=1209600000
return (time.getTime() > (choiceDateTime + 86400000)) || (time.getTime() < (choiceDateTime - 86400000));
}
},
},
};
},
created() {
this.getList();
this.geBrandList();
},
mounted() {
this.$nextTick(() => {
this.getVideo()
})
},
methods: {
/** 查询brand列表 */
async geBrandList() {
let res = await this.$axiosGet('/web/brand/brands');
if(res.code === 0){
this.brandList = res.data;
}
},
/** 查询摄像机列表 */
async getList() {
this.loading = true;
let res = await this.$axiosGet('/web/camera/list', this.queryParams);
if (res.code === 0) {
this.cameraList = res.data;
this.total = res.count;
}
this.loading = false;
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
name: null,
ip: null,
port: null,
username: null,
password: null,
devsn: null,
status: "0",
accessType: null,
brand: null
};
this.resetForm("form");
},
configreset() {
this.configform = {
id: null,
lstart: null,
tlen: null,
clen: null,
cp: null
};
this.resetForm("configform");
},
// 表单重置
ftpCfgReset() {
this.ftp.form = {
address: '',
port: '',
username: '',
password: '',
pathRule: '',
isEnable: '',
devsn: ''
};
this.resetForm("form");
},
updateDateReset(){
this.updateDate.queryForm= {
id: '',
emMode: '2',
nPreValue: '1',
nBrightness: '1',
startTime1: new Date(2022, 9, 10, 18, 40),
endTime1: new Date(2022, 9, 10, 18, 40),
startTime2: new Date(2022, 9, 10, 18, 40),
endTime2: new Date(2022, 9, 10, 18, 40),
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.page = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加摄像机";
},
// 更多操作触发
handleCommand(command, row) {
switch (command) {
case "refreshRssi":
this.refreshRssi(row);
break;
case "openFtpCfg":
this.openFtpCfg(row);
break;
case "showVideo":
this.showVideo(row);
break;
case "showLog":
this.showLog(row);
break;
case "showDate":
this.showDate(row);
break;
case "reboot":
this.reboot(row);
break;
case "autocfg":
this.autocfg(row);
break;
case "setTime":
this.setTime(row);
break;
case "playVideo":
this.playVideo(row);
break;
default:
break;
}
},
/** 播放视频 */
playVideo(row){
this.videoData.open = true;
this.$nextTick(() => {
this.getVideo('http://192.168.1.219/hls/192_168_1_40/live.m3u8')
})
},
//初始化播放器
getVideo(url) {
this.videoHtml = '<video id="myVideo" width="810px" class="video-js vjs-default-skin" controls></video>';
this.$nextTick(() => {
let options = {
autoplay: true, // 设置自动播放
controls: true, // 显示播放的控件
sources: [ //如果需要切换视频源,src需要动态设置
{
src: url,
type: "application/x-mpegURL" // 告诉videojs,这是一个hls流
}
]
};
// videoJs的第一个参数表示的是,文档中video的id
setTimeout(() => {
this.player = videojs("myVideo", options);
},2000)
})
},
//通过移除DOM彻底关闭视频,避免关闭窗口后依然获取视频流占用资源
closeVideo() {
if (this.player) {
this.player.dispose(); // 该方法会重置videojs的内部状态并移除dom
this.videoHtml = '';
}
//注意关闭窗口时间,要在控件销毁之后,否则会有问题
this.videoData.open = false
},
/** 修改按钮操作 */
async handleUpdate(row) {
this.reset();
const id = row.id || this.ids
let res = await this.$axiosGet('/web/camera/info/' + id);
if (res.code === 0) {
this.form = res.data;
this.open = true;
this.title = "修改";
}
},
setConfig(row){
this.configreset();
this.configform = row.paramsObject;
this.configform.id = row.id;
this.configopen = true;
},
async refreshRssi(row) {
const id = row.id;
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
let res = await this.$axiosGet('/web/camera/refreshRssi/' + id);
if (res.code === 0) {
this.$modal.msgSuccess("执行成功");
this.getList();
}
},
async openFtpCfg(row) {
this.ftpCfgReset();
const id = row.id;
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
let res = await this.$axiosGet('/camera/ftp/getNetCfg', { 'cameraId': id });
if (res.code === 0) {
this.ftp.form = res.data;
this.ftp.run = this.ftp.form.isEnable == 1;
this.ftp.open = true;
}
},
// 发送ftp配置表单
async ftpConfirm() {
this.ftp.form.isEnable = this.ftp.run ? 1 : 0;
let res = await this.$axiosPost('/camera/ftp/editNetCfg', this.ftp.form);
if (res.code === 0) {
this.$modal.msgSuccess("修改成功");
this.ftp.open = false;
}
},
async autocfg(row) {
this.restartcfg.form.id = row.id;
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
let res = await this.$axiosGet('/web/camera/getautocfg/' + this.restartcfg.form.id);
if (res.code === 0) {
this.restartcfg.form = res.data;
if(this.restartcfg.form.uHour <10){
this.restartcfg.form.uHour="0"+this.restartcfg.form.uHour+":00"
}else{
this.restartcfg.form.uHour+=":00"
}
this.restartcfg.form.id = row.id;
this.restartcfg.run = this.restartcfg.form.bEnable == 1;
this.restartcfg.open = true;
}
},
async setTime(row) {
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
let res = await this.$axiosGet('/web/camera/setNowTime/' + row.id);
if (res.code === 0) {
this.$modal.msgSuccess("执行成功");
}
},
//发送自动重启配置表单
async restartcfgConfirm() {
this.restartcfg.form.bEnable = this.restartcfg.run ? 1 : 0;
this.restartcfg.form.uHour = this.restartcfg.form.uHour.substring(0, 2)
let res = await this.$axiosPost('/web/camera/setautocfg', this.restartcfg.form);
if (res.code === 0) {
this.$modal.msgSuccess("修改成功");
this.restartcfg.open = false;
}
},
// 显示时间
showDate(row){
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
// 重置表单
this.updateDateReset()
this.updateDate.queryForm.id = row.id;
this.getLigntCfg(row.id);
},
// 查询时间
async getLigntCfg(id){
let res = await this.$axiosGet('/web/camera/getLigntCfg/' + id);
if(res.code === 0){
let objDate = res.data
this.updateDate.queryForm.emMode = objDate.emMode + '';
this.updateDate.queryForm.nPreValue = objDate.nPreValue;
this.updateDate.queryForm.nBrightness = objDate.nBrightness;
this.updateDate.queryForm.startTime1 = new Date(2022,12,12,objDate.startHour,objDate.startMinute,objDate.startSecond)
this.updateDate.queryForm.endTime1 = new Date(2022,12,12,objDate.endHour,objDate.endMinute,objDate.endSecond)
this.updateDate.queryForm.startTime2 = new Date(2022,12,12,objDate.startHour2,objDate.startMinute2,objDate.startSecond2)
this.updateDate.queryForm.endTime2 = new Date(2022,12,12,objDate.endHour2,objDate.endMinute2,objDate.endSecond2)
this.updateDate.open = true;
}
},
//修改时间
async setLightCfg(){
let queryData = {
id: this.updateDate.queryForm.id,
emMode: this.updateDate.queryForm.emMode,
nPreValue: this.updateDate.queryForm.nPreValue,
nBrightness: this.updateDate.queryForm.nBrightness,
startTime1:formatDate(this.updateDate.queryForm.startTime1).split(' ')[1],
endTime1: formatDate(this.updateDate.queryForm.endTime1).split(' ')[1],
startTime2: formatDate(this.updateDate.queryForm.startTime2).split(' ')[1],
endTime2: formatDate(this.updateDate.queryForm.endTime2).split(' ')[1],
};
let res = await this.$axiosPost('/web/camera/setLightCfg',queryData);
if (res.code === 0){
Message.success(res.msg)
this.updateDate.open = false;
}else{
Message.error(res.msg)
}
},
reboot(row) {
const id = row.id;
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
this.$modal.confirm('是否确认重启').then(() => {
this.exeReboot(id)
}).catch(() => { });
},
async exeReboot(id) {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
// this.fullscreenLoading = true;
let res = await this.$axiosGet('/web/camera/reboot/' + id);
if (res.code === 0) {
// this.fullscreenLoading = false;
loading.close();
this.$modal.msgSuccess("执行成功,请稍等几分钟后继续操作");
this.getList();
}
},
async showVideo(row) {
const id = row.id
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
let res = await this.$axiosGet('/web/camera/showVideo/' + id);
if (res.code === 500) {
this.$modal.msg(res.msg);
}
},
async showLog(row) {
this.logform.queryForm.id = row.id
const status = row.status;
if (status != 1) {
this.$modal.msg("设备未在线");
return;
}
this.logform.open = true;
},
chooseTimeRange() {
if (this.timeStage != null) {
this.logform.queryForm.startTime = formatDate(this.timeStage[0], 'yyyy-MM-dd hh:mm:ss');
this.logform.queryForm.endTime = formatDate(this.timeStage[1], 'yyyy-MM-dd hh:mm:ss');
}
},
async handleAutoQuery() {
if(this.timeStage == null || this.timeStage.length == 0 ){
this.$modal.msg("请选择时间");
return;
}
let res = await this.$axiosGet('/web/camera/getloginfo', this.logform.queryForm);
if (res.code === 0) {
this.logInfoList = res.data;
this.$modal.msgSuccess("查询成功");
}
},
async register() {
let res = await this.$axiosGet('/web/camera/register');
if (res.code === 0) {
this.$modal.msgSuccess("执行成功");
}
},
async restartM3u8() {
let res = await this.$axiosGet('/web/camera/retartPullM3u8');
if (res.code === 0) {
this.$modal.msgSuccess("执行成功,请等待几分钟...");
}
},
async addMethod() {
let res = await this.$axiosPost('/web/camera/add', this.form);
if (res.code === 0) {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}
},
async editMethod() {
let res = await this.$axiosPost('/web/camera/edit', this.form);
if (res.code === 0) {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
this.editMethod();
} else {
this.addMethod();
}
}
});
},
async configSubmit() {
let res = await this.$axiosPost('/web/camera/setConfig', this.configform);
if (res.code === 0) {
this.$modal.msgSuccess("设置成功");
this.configopen = false;
}
},
/** 删除按钮操作 */
async handleDelete(row) {
const ids = row.id || this.ids;
let res = await this.$axiosDelete('/web/camera/delete/' + ids);
if (res.code === 0) {
this.$modal.msgSuccess("删除成功");
this.getList();
}
},
/** 导出按钮操作 */
handleExport() {
this.download('web/camera/export', {
...this.queryParams
}, `camera_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<style scoped>
.container {
display: flex;
}
.ftpform {
width: 300px;
margin-right: 50px;
}
.ftpform .el-form {
width: 100%;
}
.table {
flex: 1;
}
.head {
font-size: 24px;
line-height: 36px;
text-align: center;
height: 36px;
margin: 0 auto;
border-radius: 2px;
box-shadow:
1px 1px 2px hsla(200, 88%, 55%, .22),
inset -2px -2px 2px hsla(200, 88%, 55%, .22),
inset 0 0 1px hsla(200, 88%, 55%, .22);
}
.tips {
margin: 10px 0;
}
.tips span {
display: grid;
grid: 1fr/1fr 10px;
}
.notice {
color: #f33;
padding-right: 20px;
display: flex;
}
.notice div:first-child {
width: 80px;
}
</style>