|
|
<template>
|
|
|
<el-dialog
|
|
|
class="setTimeDialog"
|
|
|
title="拍照时间表设置"
|
|
|
:visible.sync="isShow"
|
|
|
:close-on-click-modal="false"
|
|
|
width="1000px"
|
|
|
@close="handleclose"
|
|
|
>
|
|
|
<div class="zzinfo">装置编号:{{ areaData.cmdid }}</div>
|
|
|
<el-tabs v-model="activeName" type="border-card" @tab-click="handleClick">
|
|
|
<el-tab-pane label="拍照时间表查询" name="1">
|
|
|
<div class="searchTime">
|
|
|
<div class="channelBox">
|
|
|
<span>选择通道:</span>
|
|
|
<el-select
|
|
|
v-model="selectChannel"
|
|
|
placeholder="请选择"
|
|
|
@change="changeChannel"
|
|
|
>
|
|
|
<el-option
|
|
|
v-for="item in channelList"
|
|
|
:key="item.channelid"
|
|
|
:label="
|
|
|
item.alias !== null && item.alias !== ''
|
|
|
? item.alias
|
|
|
: item.channelname
|
|
|
"
|
|
|
:value="item.channelid"
|
|
|
>
|
|
|
{{
|
|
|
item.alias !== null && item.alias !== ""
|
|
|
? item.alias
|
|
|
: item.channelname
|
|
|
}}
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="timeContain">
|
|
|
<div class="timeLeft" v-loading="baseTimeLoading">
|
|
|
<h3>
|
|
|
时间表({{ baseTimeList.length }})
|
|
|
<span v-if="baseTimeList.length !== 0 && offsetNumTime !== null"
|
|
|
>偏移量({{ offsetNumTime }}分钟)</span
|
|
|
>
|
|
|
</h3>
|
|
|
<div class="tagsBox" v-if="baseTimeList.length !== 0">
|
|
|
<el-tag v-for="(item, index) in baseTimeList" :key="index"
|
|
|
>{{ $moment(item).format("HH:mm") }}
|
|
|
</el-tag>
|
|
|
</div>
|
|
|
<div class="nodata" v-else>
|
|
|
<el-empty description="暂无数据"></el-empty>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="timeRight" v-loading="deviceTimeLoading">
|
|
|
<h3>
|
|
|
装置时间表({{ deviceTimeList.length }})
|
|
|
<span v-if="deviceTimeList.length !== 0"
|
|
|
><el-button type="text" size="mini" @click="deviceTimeClick"
|
|
|
><i class="el-icon-refresh"></i>刷新装置时间表</el-button
|
|
|
></span
|
|
|
>
|
|
|
<el-button v-else type="primary" @click="deviceTimeClick"
|
|
|
>装置时间表</el-button
|
|
|
>
|
|
|
</h3>
|
|
|
<div class="tagsBox" v-if="deviceTimeList.length !== 0">
|
|
|
<el-tag v-for="(item, index) in deviceTimeList" :key="index">{{
|
|
|
$moment(item).format("HH:mm")
|
|
|
}}</el-tag>
|
|
|
</div>
|
|
|
<div class="nodata" v-else>
|
|
|
<el-empty description="暂无数据"> </el-empty>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
<el-tab-pane label="拍照时间表下发" name="2">
|
|
|
<div class="setTimerule">
|
|
|
<el-table
|
|
|
ref="multipleTable"
|
|
|
:data="rulesListNew"
|
|
|
stripe
|
|
|
tooltip-effect="dark"
|
|
|
style="width: 100%"
|
|
|
height="calc(100% - 40px)"
|
|
|
v-loading="ruleLoading"
|
|
|
>
|
|
|
<!-- <el-table-column type="index" width="55"> </el-table-column>
|
|
|
<el-table-column type="selection" width="55"> </el-table-column> -->
|
|
|
<template slot="empty">
|
|
|
<el-empty :image-size="160" description="暂无数据"></el-empty>
|
|
|
</template>
|
|
|
<el-table-column label="名称" show-overflow-tooltip>
|
|
|
<template slot-scope="scope">{{ scope.row.name }}</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="时间表规则">
|
|
|
<template slot-scope="scope">
|
|
|
<p
|
|
|
class="timeGz"
|
|
|
v-for="(val, index) in scope.row.listTime"
|
|
|
:key="index"
|
|
|
>
|
|
|
<span>{{ val.startTime }} </span>
|
|
|
|
|
|
~
|
|
|
<span>{{ val.endTime }}</span>
|
|
|
间隔:<b>{{ val.timeSpan }}分钟</b>
|
|
|
</p>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column
|
|
|
prop="remark"
|
|
|
label="备注"
|
|
|
show-overflow-tooltip
|
|
|
></el-table-column>
|
|
|
<el-table-column fixed="right" label="操作" width="140">
|
|
|
<template slot-scope="scope">
|
|
|
<el-button
|
|
|
type="primary"
|
|
|
@click.native.stop="handleSet(scope.row)"
|
|
|
>设置</el-button
|
|
|
>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
<div class="pageNation">
|
|
|
<el-pagination
|
|
|
@current-change="handleCurrentChange"
|
|
|
@size-change="handleSizeChange"
|
|
|
:current-page="page"
|
|
|
:page-size="pageSize"
|
|
|
layout="sizes, prev, pager, next, jumper,total"
|
|
|
:total="total"
|
|
|
background
|
|
|
>
|
|
|
</el-pagination>
|
|
|
</div>
|
|
|
</div>
|
|
|
<el-dialog
|
|
|
class="setRoadDialog"
|
|
|
title="设置"
|
|
|
:visible.sync="isShowset"
|
|
|
:close-on-click-modal="false"
|
|
|
width="660px"
|
|
|
append-to-body
|
|
|
@close="closebtn"
|
|
|
>
|
|
|
<div class="setTimeTd">
|
|
|
<div class="ruleinfo">
|
|
|
<h3>装置信息</h3>
|
|
|
<!-- <el-descriptions title="" :column="3" border>
|
|
|
<el-descriptions-item label="装置名称">{{
|
|
|
areaData.name
|
|
|
}}</el-descriptions-item>
|
|
|
<el-descriptions-item label="装置编号">
|
|
|
{{ areaData.cmdid }}</el-descriptions-item
|
|
|
>
|
|
|
</el-descriptions> -->
|
|
|
<p>
|
|
|
<span>{{ infoData.dyname }}</span> /
|
|
|
<span>{{ infoData.bsManufacturer }}</span> /
|
|
|
<span>{{ infoData.xlname }}</span> /
|
|
|
<span>{{ infoData.zzcmid }}</span>
|
|
|
</p>
|
|
|
</div>
|
|
|
<div class="ruleinfo">
|
|
|
<h3>时间表规则</h3>
|
|
|
<div class="ruleBox">
|
|
|
<span class="nameinfo"
|
|
|
>时间表名称:{{ currentTimeRule.name }}</span
|
|
|
>
|
|
|
<div class="listGz">
|
|
|
<p
|
|
|
class="timeGz"
|
|
|
v-for="(val, index) in currentTimeRule.listTime"
|
|
|
:key="index"
|
|
|
>
|
|
|
<span>{{ val.startTime }} </span>
|
|
|
|
|
|
~
|
|
|
<span>{{ val.endTime }}</span>
|
|
|
间隔:<b>{{ val.timeSpan }}分钟</b>
|
|
|
</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="ruleinfo">
|
|
|
<div class="math">
|
|
|
偏移时间(分):
|
|
|
<el-input-number
|
|
|
v-model="setNum"
|
|
|
:min="0"
|
|
|
:max="minTimeSpan"
|
|
|
></el-input-number>
|
|
|
{{ minTimeSpan }}
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="ruleinfo">
|
|
|
<h3>选择通道</h3>
|
|
|
<div class="checkBox">
|
|
|
<el-radio-group v-model="timeChannel">
|
|
|
<el-radio
|
|
|
:label="item.channelid"
|
|
|
border
|
|
|
v-for="item in timeChannelList"
|
|
|
:key="item.channelid"
|
|
|
>{{
|
|
|
item.alias !== null && item.alias !== ""
|
|
|
? item.alias
|
|
|
: item.channelname
|
|
|
}}</el-radio
|
|
|
>
|
|
|
</el-radio-group>
|
|
|
</div>
|
|
|
</div>
|
|
|
<p class="fail" v-show="failedFlag">时间表下发失败,请重新下发!</p>
|
|
|
</div>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<el-button @click="closebtn">取 消</el-button>
|
|
|
<el-button type="primary" @click="submitForm" :loading="sureloading"
|
|
|
>确 定</el-button
|
|
|
>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
|
</el-dialog>
|
|
|
</template>
|
|
|
<script>
|
|
|
import {
|
|
|
getChannelListJoggle,
|
|
|
getSchedulenr,
|
|
|
getScheduleRulelListJoggle,
|
|
|
getScheduleRulelAccessList,
|
|
|
setTermCamera,
|
|
|
getTermCameraRequest,
|
|
|
getTermStatus,
|
|
|
setScheduleRulel,
|
|
|
} from "@/utils/api/index";
|
|
|
export default {
|
|
|
props: {
|
|
|
title: String,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
isShow: false,
|
|
|
activeName: "1", //选项卡
|
|
|
infoData: {},
|
|
|
selectChannel: "", //选中的通道
|
|
|
channelList: [], //通道选项
|
|
|
baseTimeList: [], //数据库时间表
|
|
|
deviceTimeList: [], //装置时间表
|
|
|
baseTimeLoading: false,
|
|
|
deviceTimeLoading: false,
|
|
|
deviceTimer: null, //装置循环获取
|
|
|
deviceNum: 1, //循环次数
|
|
|
offsetTime: 0, //偏移量
|
|
|
minTimeSpan: "",
|
|
|
page: 1, // 当前页数
|
|
|
pageSize: 20, // 每页数量
|
|
|
total: 0, //总条数
|
|
|
rulesList: [], //规则列表
|
|
|
rulesListNew: [], //改成自己想要的数据结构
|
|
|
ruleLoading: false, //时间表规则列表loading
|
|
|
isShowset: false, //下发时间表弹窗
|
|
|
currentTimeRule: [],
|
|
|
setNum: 0, //偏移时间
|
|
|
timeChannel: "",
|
|
|
timeChannelList: [], //下发时间表通道
|
|
|
sureloading: false, //点击确定loading
|
|
|
|
|
|
offsetNumTime: null,
|
|
|
failedFlag: false,
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
|
areaData() {
|
|
|
return this.$store.state.currentData;
|
|
|
},
|
|
|
},
|
|
|
mounted() {},
|
|
|
methods: {
|
|
|
handleClick(tab, event) {
|
|
|
console.log(tab, event);
|
|
|
if (tab.name == 1) {
|
|
|
this.selectChannel = 1;
|
|
|
this.getDataBaseTime(this.areaData.id, this.selectChannel);
|
|
|
}
|
|
|
//下发的时候执行获取列表
|
|
|
if (tab.name == 2) {
|
|
|
this.deviceTimeList = [];
|
|
|
this.getruleList();
|
|
|
}
|
|
|
this.deviceTimeLoading = false;
|
|
|
window.clearInterval(this.deviceTimer);
|
|
|
this.deviceTimer = null;
|
|
|
this.deviceNum = 1;
|
|
|
},
|
|
|
//获取通道
|
|
|
getChannelSelect() {
|
|
|
getChannelListJoggle({ termid: this.areaData.id })
|
|
|
.then((res) => {
|
|
|
this.channelList = res.data.list;
|
|
|
this.timeChannelList = res.data.list;
|
|
|
this.timeChannel = this.channelList[0].channelid;
|
|
|
this.selectChannel = this.channelList[0].channelid;
|
|
|
console.log(this.channelList);
|
|
|
this.changeChannel();
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
//修改通道
|
|
|
changeChannel() {
|
|
|
console.log(this.selectChannel);
|
|
|
this.getDataBaseTime(this.areaData.id, this.selectChannel);
|
|
|
this.baseTimeLoading = true;
|
|
|
this.deviceTimeList = [];
|
|
|
},
|
|
|
//获取数据库时间表数据
|
|
|
getDataBaseTime(id, channelId) {
|
|
|
getSchedulenr({
|
|
|
channelid: channelId,
|
|
|
terminalid: id,
|
|
|
})
|
|
|
.then((res) => {
|
|
|
console.log(res);
|
|
|
let val = res.data.list;
|
|
|
this.offsetNumTime = res.data.offset;
|
|
|
if (
|
|
|
this.areaData.protocol == "65283" ||
|
|
|
this.areaData.protocol == "65285" ||
|
|
|
this.areaData.protocol == "65290"
|
|
|
) {
|
|
|
//湖南规约
|
|
|
console.log("湖南");
|
|
|
console.log(val);
|
|
|
var hnarr = [];
|
|
|
for (var i = 0; i < val.length; i++) {
|
|
|
if (i % 3 == 0) {
|
|
|
var hnobj = {};
|
|
|
hnobj.span = val[i].hour * 60 + val[i].minute;
|
|
|
console.log("时间间隔");
|
|
|
} else if (i % 3 == 1) {
|
|
|
console.log("开始时间");
|
|
|
console.log("a");
|
|
|
hnobj.startTime = this.$moment(val[i]).format("HH:mm");
|
|
|
} else if (i % 3 == 2) {
|
|
|
console.log("结束时间");
|
|
|
hnobj.endTime = this.$moment(val[i]).format("HH:mm");
|
|
|
hnarr.push(hnobj);
|
|
|
}
|
|
|
}
|
|
|
console.log("222222222222222222");
|
|
|
console.log(hnarr);
|
|
|
console.log("22222222222222222222222");
|
|
|
let dayArr = [];
|
|
|
//根据开始时间结束时间生产数组
|
|
|
for (let k = 0; k < hnarr.length; k++) {
|
|
|
console.log(hnarr[k].startTime);
|
|
|
console.log(hnarr[k].endTime);
|
|
|
console.log(hnarr[k].span);
|
|
|
let Stime = this.$moment(hnarr[k].startTime, "HH:mm").format(
|
|
|
"YYYY-MM-DD HH:mm:ss"
|
|
|
);
|
|
|
|
|
|
let Etime = this.$moment(hnarr[k].endTime, "HH:mm").format(
|
|
|
"YYYY-MM-DD HH:mm:ss"
|
|
|
);
|
|
|
let spanTime = hnarr[k].span;
|
|
|
|
|
|
while (
|
|
|
this.$moment(Stime).isBefore(this.$moment(Etime)) ||
|
|
|
this.$moment(Stime).isSame(this.$moment(Etime))
|
|
|
) {
|
|
|
dayArr.push(Stime);
|
|
|
Stime = this.$moment(Stime)
|
|
|
.add(spanTime, "minute")
|
|
|
.format("YYYY-MM-DD HH:mm:ss");
|
|
|
}
|
|
|
// // 将结束日期的天放进数组
|
|
|
console.log(dayArr);
|
|
|
}
|
|
|
this.baseTimeList = [...new Set(dayArr)];
|
|
|
} else {
|
|
|
//其他规约
|
|
|
this.baseTimeList = res.data.list;
|
|
|
}
|
|
|
this.baseTimeLoading = false;
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
//获取装置的时间表
|
|
|
deviceTimeClick() {
|
|
|
console.log("点击了获取装置时间表");
|
|
|
if (this.areaData.onlinestatus === 1) {
|
|
|
this.deviceTimeLoading = true;
|
|
|
let params = [
|
|
|
{
|
|
|
name: "act",
|
|
|
value: "schedule",
|
|
|
},
|
|
|
{
|
|
|
name: "flag",
|
|
|
value: 0,
|
|
|
},
|
|
|
{
|
|
|
name: "channel",
|
|
|
value: this.selectChannel,
|
|
|
},
|
|
|
];
|
|
|
this.setTermFn(params);
|
|
|
} else {
|
|
|
this.$message({
|
|
|
duration: 1500,
|
|
|
showClose: true,
|
|
|
message: "装置下线,发送指令失败",
|
|
|
type: "error",
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
//装置获取拍照时间表和下发公用接口
|
|
|
setTermFn(dataParams) {
|
|
|
console.log("点击了统一的接口", dataParams);
|
|
|
setTermCamera({
|
|
|
termId: this.areaData.id,
|
|
|
list: dataParams,
|
|
|
})
|
|
|
.then((res) => {
|
|
|
console.log(res);
|
|
|
this.requestid = res.data.requestId;
|
|
|
clearInterval(this.timer);
|
|
|
this.deviceTimer = window.setInterval(() => {
|
|
|
this.getinfo();
|
|
|
this.deviceNum++;
|
|
|
console.log(this.deviceNum, this.deviceNum * 1000);
|
|
|
}, 1000 * this.deviceNum);
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
getinfo() {
|
|
|
getTermCameraRequest({ requestid: this.requestid })
|
|
|
.then((res) => {
|
|
|
if (res.data.success == 1) {
|
|
|
this.deviceTimeLoading = false;
|
|
|
window.clearInterval(this.deviceTimer);
|
|
|
this.deviceTimer = null;
|
|
|
this.deviceNum = 1;
|
|
|
console.log(JSON.parse(res.data.data));
|
|
|
//this.deviceTimeList = JSON.parse(res.data.data).groupData;
|
|
|
//this.processingData(JSON.parse(res.data.data).groupData); //执行数据转化
|
|
|
this.processingData(JSON.parse(res.data.data).groupData); //执行数据转化
|
|
|
console.log(this.deviceTimeList);
|
|
|
this.$message({
|
|
|
duration: 1500,
|
|
|
showClose: true,
|
|
|
message: "装置时间表已更新",
|
|
|
type: "success",
|
|
|
});
|
|
|
} else if (this.deviceNum > 9) {
|
|
|
this.deviceTimeLoading = false;
|
|
|
|
|
|
window.clearInterval(this.deviceTimer);
|
|
|
this.deviceTimer = null;
|
|
|
this.deviceNum = 1;
|
|
|
this.$message({
|
|
|
duration: 1500,
|
|
|
showClose: true,
|
|
|
message: "查询失败",
|
|
|
type: "error",
|
|
|
});
|
|
|
}
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
//获取时间表规则列表
|
|
|
getruleList() {
|
|
|
this.ruleLoading = true;
|
|
|
getScheduleRulelListJoggle({
|
|
|
pageindex: this.page,
|
|
|
pagesize: this.pageSize,
|
|
|
})
|
|
|
.then((res) => {
|
|
|
console.log(res);
|
|
|
this.rulesList = res.data.list;
|
|
|
this.total = res.data.total;
|
|
|
this.rulesListNew = [];
|
|
|
this.changeListData(this.rulesList);
|
|
|
this.ruleLoading = false;
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
//时间表规则数据转化
|
|
|
changeListData(data) {
|
|
|
//循环数据
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
|
console.log(data[i]);
|
|
|
var ruleArr = [];
|
|
|
//循环规则
|
|
|
for (let k = 0; k < data[i].list.length; k++) {
|
|
|
if (k % 3 == 0) {
|
|
|
//定义一个空对象
|
|
|
var ruleObj = {};
|
|
|
|
|
|
ruleObj.timeSpan =
|
|
|
data[i].list[k].hour * 60 + data[i].list[k].minute;
|
|
|
console.log("时间间隔", ruleObj.timeSpan);
|
|
|
} else if (k % 3 == 1) {
|
|
|
//开始时间
|
|
|
ruleObj.startTime = this.$moment(data[i].list[k]).format("HH:mm");
|
|
|
console.log(this.$moment(data[i].list[k]).format("HH:mm"));
|
|
|
} else if (k % 3 == 2) {
|
|
|
ruleObj.endTime = this.$moment(data[i].list[k]).format("HH:mm");
|
|
|
console.log(this.$moment(data[i].list[k]).format("HH:mm"));
|
|
|
ruleArr.push(ruleObj);
|
|
|
}
|
|
|
}
|
|
|
this.rulesListNew.push({
|
|
|
id: data[i].id,
|
|
|
list: data[i].list,
|
|
|
name: data[i].name,
|
|
|
remark: data[i].remark,
|
|
|
listTime: ruleArr,
|
|
|
});
|
|
|
}
|
|
|
console.log(this.rulesListNew);
|
|
|
},
|
|
|
//根据规约处理时间表数据
|
|
|
processingData(val) {
|
|
|
console.log(this.areaData.protocol);
|
|
|
if (
|
|
|
this.areaData.protocol == "65283" ||
|
|
|
this.areaData.protocol == "65285" ||
|
|
|
this.areaData.protocol == "65290"
|
|
|
) {
|
|
|
//湖南规约
|
|
|
console.log("湖南");
|
|
|
console.log(val);
|
|
|
var hnarr = [];
|
|
|
for (var i = 0; i < val.length; i++) {
|
|
|
if (i % 3 == 0) {
|
|
|
var hnobj = {};
|
|
|
hnobj.span = val[i].hour * 60 + val[i].minute;
|
|
|
console.log("时间间隔");
|
|
|
} else if (i % 3 == 1) {
|
|
|
console.log("开始时间");
|
|
|
console.log("a");
|
|
|
hnobj.startTime = this.$moment(val[i]).format("HH:mm");
|
|
|
} else if (i % 3 == 2) {
|
|
|
console.log("结束时间");
|
|
|
hnobj.endTime = this.$moment(val[i]).format("HH:mm");
|
|
|
hnarr.push(hnobj);
|
|
|
}
|
|
|
}
|
|
|
console.log("222222222222222222");
|
|
|
console.log(hnarr);
|
|
|
console.log("22222222222222222222222");
|
|
|
let dayArr = [];
|
|
|
//根据开始时间结束时间生产数组
|
|
|
for (let k = 0; k < hnarr.length; k++) {
|
|
|
console.log(hnarr[k].startTime);
|
|
|
console.log(hnarr[k].endTime);
|
|
|
console.log(hnarr[k].span);
|
|
|
let Stime = this.$moment(hnarr[k].startTime, "HH:mm").format(
|
|
|
"YYYY-MM-DD HH:mm:ss"
|
|
|
);
|
|
|
|
|
|
let Etime = this.$moment(hnarr[k].endTime, "HH:mm").format(
|
|
|
"YYYY-MM-DD HH:mm:ss"
|
|
|
);
|
|
|
let spanTime = hnarr[k].span;
|
|
|
if (this.$moment(Etime).isBefore(this.$moment(Stime))) {
|
|
|
let zeroEnd = this.$moment("23:59", "HH:mm").format(
|
|
|
"YYYY-MM-DD HH:mm:ss"
|
|
|
);
|
|
|
let zeroStart = this.$moment("00:00", "HH:mm").format(
|
|
|
"YYYY-MM-DD HH:mm:ss"
|
|
|
);
|
|
|
while (
|
|
|
this.$moment(Stime).isBefore(this.$moment(zeroEnd)) ||
|
|
|
this.$moment(Stime).isSame(this.$moment(zeroEnd))
|
|
|
) {
|
|
|
dayArr.push(Stime);
|
|
|
Stime = this.$moment(Stime)
|
|
|
.add(spanTime, "minute")
|
|
|
.format("YYYY-MM-DD HH:mm:ss");
|
|
|
}
|
|
|
while (
|
|
|
this.$moment(zeroStart).isBefore(this.$moment(Etime)) ||
|
|
|
this.$moment(zeroStart).isSame(this.$moment(Etime))
|
|
|
) {
|
|
|
dayArr.push(zeroStart);
|
|
|
zeroStart = this.$moment(zeroStart)
|
|
|
.add(spanTime, "minute")
|
|
|
.format("YYYY-MM-DD HH:mm:ss");
|
|
|
}
|
|
|
} else {
|
|
|
while (
|
|
|
this.$moment(Stime).isBefore(this.$moment(Etime)) ||
|
|
|
this.$moment(Stime).isSame(this.$moment(Etime))
|
|
|
) {
|
|
|
dayArr.push(Stime);
|
|
|
Stime = this.$moment(Stime)
|
|
|
.add(spanTime, "minute")
|
|
|
.format("YYYY-MM-DD HH:mm:ss");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// // 将结束日期的天放进数组
|
|
|
console.log(dayArr);
|
|
|
}
|
|
|
this.deviceTimeList = [...new Set(dayArr)];
|
|
|
} else {
|
|
|
//其他规约
|
|
|
this.deviceTimeList = val;
|
|
|
}
|
|
|
},
|
|
|
//设置下发时间表规则
|
|
|
handleSet(val) {
|
|
|
console.log(val);
|
|
|
this.minTimeSpan = Math.min(...val.listTime.map((item) => item.timeSpan));
|
|
|
console.log(this.minTimeSpan);
|
|
|
this.minTimeSpan = this.minTimeSpan > 10 ? 10 : this.minTimeSpan - 1;
|
|
|
this.isShowset = true;
|
|
|
this.currentTimeRule = val;
|
|
|
getScheduleRulelAccessList({ termid: this.areaData.id })
|
|
|
.then((res) => {
|
|
|
console.log(res);
|
|
|
this.infoData = {
|
|
|
dyname: res.data.list[0].name,
|
|
|
|
|
|
xlname: res.data.list[0].list[0].name,
|
|
|
bsManufacturer: res.data.list[0].list[0].bsManufacturer,
|
|
|
zzname:
|
|
|
res.data.list[0].list[0].list[0].name == null
|
|
|
? res.data.list[0].list[0].list[0].cmdid
|
|
|
: res.data.list[0].list[0].list[0].name,
|
|
|
zzcmid: res.data.list[0].list[0].list[0].cmdid,
|
|
|
};
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
//确定下发
|
|
|
//xympadmn --act=schedule [0xCA] --flag=[Request Set Flag, default is set=1, 0: request] --channel=[Channel No] --group=[Group] --hour1=[Hour 1] --min1=[Minute 1] --preset1=[Preset 1]
|
|
|
submitForm() {
|
|
|
console.log(this.currentTimeRule);
|
|
|
this.failedFlag = false;
|
|
|
let timeArrList = [];
|
|
|
if (
|
|
|
this.areaData.protocol == "65285" &&
|
|
|
this.currentTimeRule.listTime.length > 1
|
|
|
) {
|
|
|
this.$message({
|
|
|
duration: 1500,
|
|
|
showClose: true,
|
|
|
message: "不支持多段时间表,请选择单段时间表",
|
|
|
type: "warning",
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
this.sureloading = true;
|
|
|
getTermStatus({ termId: this.areaData.id }).then((res) => {
|
|
|
console.log(res);
|
|
|
if (res.data.isonline) {
|
|
|
console.log(this.timeChannel, this.setNum, this.areaData.protocol);
|
|
|
let params = [
|
|
|
{
|
|
|
name: "act",
|
|
|
value: "schedule",
|
|
|
},
|
|
|
{
|
|
|
name: "flag",
|
|
|
value: 1,
|
|
|
},
|
|
|
{
|
|
|
name: "channel",
|
|
|
value: this.timeChannel,
|
|
|
},
|
|
|
];
|
|
|
let scheduleTimeList = this.currentTimeRule.listTime;
|
|
|
console.log(this.currentTimeRule.listTime);
|
|
|
let timeArr = []; //获取时间列表
|
|
|
//获取当前时间规则,转化成时间点
|
|
|
for (let i = 0; i < scheduleTimeList.length; i++) {
|
|
|
console.log(scheduleTimeList[i]);
|
|
|
var Stime = this.$moment(scheduleTimeList[i].startTime, "HH:mm")
|
|
|
.add(this.setNum, "minute")
|
|
|
.format("YYYY-MM-DD HH:mm:ss");
|
|
|
|
|
|
// var Etime = this.$moment(scheduleTimeList[i].endTime, "HH:mm")
|
|
|
// .add(this.setNum, "minute")
|
|
|
// .format("YYYY-MM-DD HH:mm:ss");
|
|
|
//结束时间不添加偏移量
|
|
|
var Etime = this.$moment(
|
|
|
scheduleTimeList[i].endTime,
|
|
|
"HH:mm"
|
|
|
).format("YYYY-MM-DD HH:mm:ss");
|
|
|
var spanTime = scheduleTimeList[i].timeSpan;
|
|
|
console.log(Stime, Etime, spanTime);
|
|
|
if (
|
|
|
this.areaData.protocol == "65283" ||
|
|
|
this.areaData.protocol == "65285" ||
|
|
|
this.areaData.protocol == "65290"
|
|
|
) {
|
|
|
//湖南
|
|
|
console.log("湖南", scheduleTimeList.length);
|
|
|
|
|
|
// 设置时间间隔
|
|
|
let fistSpan = this.$moment(new Date())
|
|
|
.startOf("day")
|
|
|
.minutes(spanTime)
|
|
|
.format("YYYY-MM-DD HH:mm:ss");
|
|
|
timeArr.push(fistSpan, Stime, Etime);
|
|
|
console.log(timeArr);
|
|
|
} else {
|
|
|
while (
|
|
|
this.$moment(Stime).isBefore(this.$moment(Etime)) ||
|
|
|
this.$moment(Stime).isSame(this.$moment(Etime))
|
|
|
) {
|
|
|
timeArr.push(Stime);
|
|
|
Stime = this.$moment(Stime)
|
|
|
.add(spanTime, "minute")
|
|
|
.format("YYYY-MM-DD HH:mm:ss");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
console.log(timeArr);
|
|
|
let group = timeArr.length;
|
|
|
params.push({
|
|
|
name: "group",
|
|
|
value: group,
|
|
|
});
|
|
|
for (let m = 0; m < timeArr.length; m++) {
|
|
|
params.push(
|
|
|
{
|
|
|
name: "hour" + (m + 1),
|
|
|
value: this.$moment(timeArr[m]).hour(),
|
|
|
},
|
|
|
{
|
|
|
name: "min" + (m + 1),
|
|
|
value: this.$moment(timeArr[m]).minute(),
|
|
|
},
|
|
|
{
|
|
|
name: "preset" + (m + 1),
|
|
|
value: 255,
|
|
|
}
|
|
|
);
|
|
|
}
|
|
|
console.log(params);
|
|
|
for (var k = 0; k < timeArr.length; k++) {
|
|
|
//console.log(moment(dayArr[k]).hour());
|
|
|
timeArrList.push({
|
|
|
hour: this.$moment(timeArr[k]).hour(),
|
|
|
minute: this.$moment(timeArr[k]).minute(),
|
|
|
preset: 255,
|
|
|
});
|
|
|
}
|
|
|
console.log(timeArrList);
|
|
|
var parmsobj = {
|
|
|
termid: this.areaData.id,
|
|
|
channelid: this.timeChannel,
|
|
|
offset: this.setNum,
|
|
|
list: timeArrList,
|
|
|
};
|
|
|
console.log(parmsobj);
|
|
|
this.setTimeRuleJava(parmsobj); //使用java接口调用下发时间表
|
|
|
//this.setTermFnRule(params);
|
|
|
} else {
|
|
|
this.sureloading = false;
|
|
|
this.$message({
|
|
|
duration: 1500,
|
|
|
showClose: true,
|
|
|
message: "装置下线,发送指令失败",
|
|
|
type: "error",
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
//使用接口下发时间表会写进数据库
|
|
|
setTimeRuleJava(parmsobj) {
|
|
|
console.log(parmsobj);
|
|
|
setScheduleRulel({
|
|
|
scheduleid: this.currentTimeRule.id,
|
|
|
list: [parmsobj],
|
|
|
})
|
|
|
.then((res) => {
|
|
|
console.log(res);
|
|
|
if (res.data.list.length !== 0) {
|
|
|
this.requestid = res.data.list[0].requestid;
|
|
|
console.log(this.requestid);
|
|
|
clearInterval(this.timer);
|
|
|
this.deviceTimer = window.setInterval(() => {
|
|
|
this.getinfoRules();
|
|
|
this.deviceNum++;
|
|
|
console.log(this.deviceNum, this.deviceNum * 1000);
|
|
|
}, 1000 * this.deviceNum);
|
|
|
} else {
|
|
|
console.log("未获取到requestid");
|
|
|
}
|
|
|
})
|
|
|
.catch((err) => {
|
|
|
// this.$message({
|
|
|
// duration: 1500,
|
|
|
// showClose: true,
|
|
|
// message: "添加失败",
|
|
|
// type: "error",
|
|
|
// });
|
|
|
});
|
|
|
},
|
|
|
//下发时间表
|
|
|
setTermFnRule(dataParams) {
|
|
|
setTermCamera({
|
|
|
termId: this.areaData.id,
|
|
|
list: dataParams,
|
|
|
})
|
|
|
.then((res) => {
|
|
|
console.log(res);
|
|
|
this.requestid = res.data.requestId;
|
|
|
clearInterval(this.timer);
|
|
|
this.deviceTimer = window.setInterval(() => {
|
|
|
this.getinfoRules();
|
|
|
this.deviceNum++;
|
|
|
console.log(this.deviceNum, this.deviceNum * 1000);
|
|
|
}, 1000 * this.deviceNum);
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
getinfoRules() {
|
|
|
getTermCameraRequest({ requestid: this.requestid })
|
|
|
.then((res) => {
|
|
|
if (res.data.success == 1) {
|
|
|
this.sureloading = false;
|
|
|
window.clearInterval(this.deviceTimer);
|
|
|
this.deviceTimer = null;
|
|
|
this.deviceNum = 1;
|
|
|
console.log(JSON.parse(res.data.data));
|
|
|
this.isShowset = false;
|
|
|
this.$message({
|
|
|
duration: 1500,
|
|
|
showClose: true,
|
|
|
message: "时间表下发成功",
|
|
|
type: "success",
|
|
|
});
|
|
|
} else if (this.deviceNum > 9) {
|
|
|
this.sureloading = false;
|
|
|
window.clearInterval(this.deviceTimer);
|
|
|
this.deviceTimer = null;
|
|
|
this.deviceNum = 1;
|
|
|
this.failedFlag = true;
|
|
|
this.$message({
|
|
|
duration: 1500,
|
|
|
showClose: true,
|
|
|
message: "时间表下发失败",
|
|
|
type: "error",
|
|
|
});
|
|
|
}
|
|
|
})
|
|
|
.catch((err) => {});
|
|
|
},
|
|
|
//关闭下发弹窗
|
|
|
closebtn() {
|
|
|
this.isShowset = false;
|
|
|
this.sureloading = false;
|
|
|
this.setNum = 0;
|
|
|
},
|
|
|
display() {
|
|
|
this.isShow = true;
|
|
|
this.getChannelSelect();
|
|
|
console.log(this.areaData);
|
|
|
},
|
|
|
handleclose() {
|
|
|
this.isShow = false;
|
|
|
this.sureloading = false;
|
|
|
this.deviceTimeLoading = false;
|
|
|
this.activeName = "1"; //选项卡
|
|
|
this.selectChannel = ""; //选中的通道
|
|
|
this.channelList = []; //通道选项
|
|
|
this.baseTimeList = []; //数据库时间表
|
|
|
this.deviceTimeList = []; //装置时间表
|
|
|
window.clearInterval(this.deviceTimer);
|
|
|
this.deviceTimer = null;
|
|
|
this.deviceNum = 1;
|
|
|
this.failedFlag = false;
|
|
|
},
|
|
|
//点击分页
|
|
|
handleCurrentChange(val) {
|
|
|
this.page = val;
|
|
|
this.getruleList();
|
|
|
},
|
|
|
//每页条数
|
|
|
handleSizeChange(val) {
|
|
|
this.pageSize = val;
|
|
|
this.getruleList();
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
<style lang="less">
|
|
|
.setTimeDialog {
|
|
|
.zzinfo {
|
|
|
position: absolute;
|
|
|
top: 22px;
|
|
|
left: 170px;
|
|
|
}
|
|
|
.el-dialog__body {
|
|
|
margin-bottom: 12px;
|
|
|
.el-tabs__content {
|
|
|
height: 425px;
|
|
|
.searchTime {
|
|
|
.channelBox {
|
|
|
margin-bottom: 12px;
|
|
|
}
|
|
|
.timeContain {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
.timeLeft {
|
|
|
width: 428px;
|
|
|
height: 336px;
|
|
|
border-radius: 4px;
|
|
|
border: 1px solid #eee;
|
|
|
padding: 12px;
|
|
|
}
|
|
|
.timeRight {
|
|
|
width: 428px;
|
|
|
height: 336px;
|
|
|
border-radius: 4px;
|
|
|
border: 1px solid #eee;
|
|
|
padding: 12px;
|
|
|
h3 {
|
|
|
.el-button {
|
|
|
margin-left: 14px;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
.timeLeft,
|
|
|
.timeRight {
|
|
|
h3 {
|
|
|
line-height: 24px;
|
|
|
height: 24px;
|
|
|
}
|
|
|
}
|
|
|
.tagsBox {
|
|
|
height: 308px;
|
|
|
overflow: auto;
|
|
|
.el-tag--small {
|
|
|
margin: 4px;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
.el-tab-pane {
|
|
|
height: 100%;
|
|
|
.setTimerule {
|
|
|
height: 100%;
|
|
|
.timeGz {
|
|
|
line-height: 24px;
|
|
|
b {
|
|
|
font-weight: 400;
|
|
|
color: #169e8c;
|
|
|
}
|
|
|
}
|
|
|
.el-button {
|
|
|
width: 80px;
|
|
|
}
|
|
|
.pageNation {
|
|
|
justify-content: flex-start;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
.setRoadDialog {
|
|
|
.setTimeTd {
|
|
|
.ruleinfo {
|
|
|
margin-bottom: 16px;
|
|
|
h3 {
|
|
|
font-size: 14px;
|
|
|
margin-bottom: 8px;
|
|
|
}
|
|
|
.ruleBox {
|
|
|
display: flex;
|
|
|
flex-wrap: wrap;
|
|
|
align-items: center;
|
|
|
.nameinfo {
|
|
|
//margin-bottom: 8px;
|
|
|
margin-right: 16px;
|
|
|
height: 24px;
|
|
|
line-height: 24px;
|
|
|
}
|
|
|
.timeGz {
|
|
|
height: 24px;
|
|
|
line-height: 24px;
|
|
|
b {
|
|
|
font-weight: 400;
|
|
|
color: #169e8c;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
.fail {
|
|
|
color: red;
|
|
|
line-height: 28px;
|
|
|
font-size: 12px;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</style>
|