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

645 lines
19 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-dialog
class="photoSetDialog"
title="设置"
:visible.sync="isShow"
:close-on-click-modal="false"
width="1020px"
@close="handleclose"
>
<div class="setTimeTd">
<div class="ruleBox">
<h3>时间表规则</h3>
<div class="flexTimeGz">
<p class="timeGz" v-for="(val, index) in ruleSchedule" :key="index">
<span>
{{
new Date(val.startTime).getHours() < 10
? "0" + new Date(val.startTime).getHours()
: new Date(val.startTime).getHours()
}}:
{{
new Date(val.startTime).getMinutes() < 10
? "0" + new Date(val.startTime).getMinutes()
: new Date(val.startTime).getMinutes()
}}</span
>
~
<span
>{{
new Date(val.endTime).getHours() < 10
? "0" + new Date(val.endTime).getHours()
: new Date(val.endTime).getHours()
}}:
{{
new Date(val.endTime).getMinutes() < 10
? "0" + new Date(val.endTime).getMinutes()
: new Date(val.endTime).getMinutes()
}}</span
>
间隔<b>{{ val.span }}分钟</b>
</p>
</div>
</div>
<!-- <h3>设置通道</h3> -->
<div class="chooseTDBox">
<label>选择通道:</label>
<div class="checkBox">
<el-radio-group v-model="checkedAisle" @change="handleChange">
<el-radio
:label="val.id"
border
v-for="val in aisleList"
:key="val.id"
>{{ val.name }}</el-radio
>
</el-radio-group>
</div>
</div>
<div class="flexnr" v-loading="loading" v-if="newzzList.length !== 0">
<el-tree
:data="newzzList"
show-checkbox
:props="defaultProps"
ref="tree"
node-key="id"
:default-expand-all="true"
@check-change="getCheckedNodes"
>
<div
v-if="!data.list"
class="custom-tree-node nodelist"
slot-scope="{ data }"
>
<span class="mr10">{{ data.name }}</span>
<div class="math">
偏移时间(分)
<el-input-number
v-model="data.offsetNum"
:min="0"
:max="9"
></el-input-number>
</div>
<div class="math">
规约:
{{ data.protocol }}
</div>
<div
class="deStatus"
v-if="allCheckNode.indexOf(data) != -1 && showtag"
>
<!-- <el-tag type="success">下发成功</el-tag> -->
<el-tag type=""><i class="el-icon-loading"></i>下发中</el-tag>
<!-- <el-tag type="danger">下发失败</el-tag> -->
</div>
</div>
<span v-else class="custom-tree-node" slot-scope="{ data }">
<span>{{ data.name }}</span>
</span>
</el-tree>
</div>
<div class="flexnr" v-else>
<p class="nochannel">暂无图像监测装置</p>
</div>
</div>
<div slot="footer" class="dialog-footer">
<!-- <el-button @click="getCheckedNodes">获取</el-button> -->
<el-button @click="handleclose">取 消</el-button>
<el-button type="primary" @click="submitForm()" :loading="sureloading"
>确 定</el-button
>
</div>
</el-dialog>
</template>
<script>
import {
setScheduleRulel,
getScheduleRulelAccessList,
getTermListByChannelJoggle,
getCmaSchelduleUpload,
} from "@/utils/api/index";
import moment from "moment";
export default {
props: {
title: String,
},
data() {
return {
isactive: "",
contentStyle: { width: "90px" },
isShow: false,
selid: 0, //选中时间表id
ruleSchedule: [], //时间表规则
checkedAisle: "", //选中通道数据
aisleList: [], //通道数据内容
listnr: [], //通道树状结构
defaultProps: {
children: "list",
label: "name",
},
termidArr: [],
ruleid: "",
parmsList: [], //选中的通道
multipleSelection: [],
//新是数据结构参数
newzzList: [],
zzListCheck: [],
loading: false,
//全选
checkAll: true,
isIndeterminate: true, //全选设置默认选中
timer: null,
termidArrNum: -1,
requestList: [],
timer: null,
i: 0,
isCheck: false,
checkNode: null,
zzsuccess: false,
zzpending: false,
zzerror: false,
allCheckNode: [], //获取选中的节点
requestArr: [], //通过requestid获取状态
termzzid: [],
flag: false,
sureloading: false,
showtag: false,
checkOffset: "",
};
},
mounted() {},
methods: {
//判断
getdataform(val) {
console.log(val);
this.selid = val.id;
this.ruleSchedule = val.listTime;
console.log(this.ruleSchedule);
// console.log(this.ruleSchedule, "时间规则");
this.getlistnr();
},
//获取所有通道
getlistnr() {
getScheduleRulelAccessList({})
.then((res) => {
this.listnr = res.data.list;
this.aisleList = res.data.channellist;
})
.catch((err) => {});
},
//选择通道
handleChange() {
console.log(this.checkedAisle);
this.loading = true;
getTermListByChannelJoggle({
id: this.checkedAisle,
})
.then((res) => {
console.log(res);
this.newzzList = res.data.list;
console.log(this.newzzList);
//console.log(a);
this.newzzList = this.getChildren(this.newzzList);
console.log(this.newzzList);
this.loading = false;
})
.catch((err) => {});
},
// 给数组里的每一个对象都添加一个isEdit属性
getChildren(data) {
console.log(data);
return data.map((item) => {
console.log(item);
item = Object.assign({}, item);
item.offsetNum = Math.floor(Math.random() * 10);
if (!!item.list && item.list.length > 0) {
item.list = this.getChildren(item.list);
}
return item;
});
},
handleCheckBox() {
console.log(this.zzListCheck);
},
// //获取所选值
getCheckedNodes(nodeObj) {
this.allCheckNode = this.$refs.tree.getCheckedNodes();
// console.log(this.allCheckNode);
console.log(nodeObj);
console.log(this.allCheckNode);
this.isactive = nodeObj.id;
this.isCheck = this.$refs.tree.getCheckedNodes().indexOf(nodeObj) > -1;
console.log(this.isCheck);
},
// //获取开始时间和结束时间的偏移量
// getruleSchedule() {
// for (var j = 0; j < this.allCheckNode.length; j++) {
// console.log(this.allCheckNode[j].offsetNum);
// for (var i = 0; i < this.ruleSchedule.length; i++) {
// console.log(typeof this.ruleSchedule[i].startTime);
// console.log(this.ruleSchedule[i].startTime);
// var Stime = moment(this.ruleSchedule[i].startTime).format("HH:mm");
// var Etime = moment(this.ruleSchedule[i].endTime).format("HH:mm");
// console.log(Stime, Etime);
// // this.ruleSchedule[i].startTime = new Date(
// // this.ruleSchedule[i].startTime
// // );
// // this.ruleSchedule[i].endTime = new Date(this.ruleSchedule[i].endTime);
// // console.log(this.ruleSchedule[i].startTime);
// // console.log(this.ruleSchedule[i].endTime);
// // moment().add(offsetSeconds, "seconds").toObject();
// // console.log(time);
// }
// }
// },
// 保存确定操作
submitForm() {
//console.log(this.termidArr);
this.sureSum();
this.showtag = true;
},
//时间表
sureSum() {
console.log(this.checkedAisle);
var ruleBox = [];
//循环装置
for (var i = 0; i < this.allCheckNode.length; i++) {
console.log(this.allCheckNode[i].bsManufacturer);
if (
this.allCheckNode[i].bsManufacturer == null ||
this.allCheckNode[i].bsManufacturer == undefined
) {
console.log(this.allCheckNode[i].offsetNum);
//循环时间规则
let timearr = [];
let dayArr = [];
for (var j = 0; j < this.ruleSchedule.length; j++) {
console.log(this.ruleSchedule);
console.log(this.ruleSchedule[j].startTime);
// var Stime = moment(this.ruleSchedule[j].startTime).format("HH:mm");
// var Etime = moment(this.ruleSchedule[j].endTime).format("HH:mm");
var Stime = moment(this.ruleSchedule[j].startTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.format();
var Etime = moment(this.ruleSchedule[j].endTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.format();
var spanTime = this.ruleSchedule[j].span;
console.log(spanTime);
console.log(moment(this.ruleSchedule[j].endTime).hour());
//判断湖南规约
if (this.allCheckNode[i].protocol == "65283") {
console.log("湖南规约");
console.log(Stime, Etime);
console.log(typeof Stime);
console.log(
moment(this.ruleSchedule[j].endTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.hour()
);
console.log(
moment(this.ruleSchedule[j].endTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.minute()
);
//如果偏移之后的时间是第二天,那么不做偏移
console.log(moment().isSame(moment(Etime), "day"));
//判断是不是同一天
if (moment().isSame(moment(Etime), "day")) {
//如果是同一天
timearr.push(
{
hour: Math.floor(this.ruleSchedule[j].span / 60),
minute: this.ruleSchedule[j].span % 60,
preset: 255,
},
{
hour: moment(this.ruleSchedule[j].startTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.hour(),
minute: moment(this.ruleSchedule[j].startTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.minute(),
preset: 255,
},
{
hour: moment(this.ruleSchedule[j].endTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.hour(),
minute: moment(this.ruleSchedule[j].endTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.minute(),
preset: 255,
}
);
} else {
timearr.push(
{
hour: Math.floor(this.ruleSchedule[j].span / 60),
minute: this.ruleSchedule[j].span % 60,
preset: 255,
},
{
hour: moment(this.ruleSchedule[j].startTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.hour(),
minute: moment(this.ruleSchedule[j].startTime)
.add(this.allCheckNode[i].offsetNum, "minute")
.minute(),
preset: 255,
},
{
hour: moment(this.ruleSchedule[j].endTime).hour(),
minute: moment(this.ruleSchedule[j].endTime).minute(),
preset: 255,
}
);
}
console.log(timearr);
}
////判断河南规约
if (this.allCheckNode[i].protocol == "65286") {
console.log("河南规约");
//偏移时间
//this.getDayArr(startDay, endDay);
let startDay = Stime;
let endDay = Etime;
console.log(startDay, endDay);
let startVal = this.$moment(new Date(startDay)).format(
"YYYY-MM-DD HH:mm"
);
console.log(startVal);
while (this.$moment(startVal).isBefore(endDay)) {
dayArr.push(startVal);
// 自增
startVal = this.$moment(new Date(startVal))
.add(spanTime, "minute")
.format("YYYY-MM-DD HH:mm");
console.log(startVal);
}
// // 将结束日期的天放进数组
dayArr.push(
this.$moment(new Date(endDay)).format("YYYY-MM-DD HH:mm")
);
console.log(dayArr);
for (var k = 0; k < dayArr.length; k++) {
//console.log(moment(dayArr[k]).hour());
timearr.push({
hour: moment(dayArr[k]).hour(),
minute: moment(dayArr[k]).minute(),
preset: 255,
});
}
// return dayArr;
}
}
var parmsobj = {
termid: this.allCheckNode[i].id,
channelid: this.checkedAisle,
offset: this.allCheckNode[i].offsetNum,
list: timearr,
};
console.log(parmsobj);
ruleBox.push(parmsobj);
}
console.log(ruleBox);
}
setScheduleRulel({
list: ruleBox,
scheduleid: this.selid,
})
.then((res) => {
console.log(res);
this.requestList = res.data.list;
this.requestTime();
this.timer = window.setInterval(() => {
//console.log(this.requestList);
this.requestTime();
this.i++;
}, 3000);
})
.catch((err) => {
// this.$message({
// duration: 1500,
// showClose: true,
// message: "添加失败",
// type: "error",
// });
});
},
//获取到时间规则,把时间规则转化为对应的规约格式
//湖南规约
getHnTime() {},
//河南规约
getZzTime() {},
//根据requestid查询时间表下发状态
requestTime() {
this.sureloading = true;
getCmaSchelduleUpload({
list: this.requestList,
})
.then((res) => {
this.requestArr = res.data.list;
this.requestList = this.requestArr.filter(function (
value,
index,
arr
) {
console.log(value, index, arr);
return value.status !== 1;
});
if (this.requestList.length == 0) {
this.zzsuccess = true;
this.$message.success("下发成功");
clearInterval(this.timer);
this.timer = null;
this.isShow = false;
this.sureloading = false;
this.showtag = false;
} else if (this.i > 9) {
this.zzerror = true;
this.i = 0;
this.$message.warning("下发失败,请稍后再试!");
clearInterval(this.timer);
this.timer = null;
this.isShow = false;
this.showtag = false;
this.sureloading = false;
}
})
.catch((err) => {});
},
display() {
this.isShow = true;
},
handleclose() {
this.isShow = false;
this.newzzList = [];
this.checkedAisle = "";
console.log(this.allCheckNode, "1111111111");
clearTimeout(this.timer);
this.timer = null;
this.sureloading = false;
this.showtag = false;
},
},
};
</script>
<style lang="less">
.photoSetDialog {
.el-dialog__body {
// height: 360px;
// overflow: auto;
}
.flexnr {
height: 360px;
overflow: auto;
display: flex;
align-items: flex-start;
border: 1px solid #eee;
padding: 16px;
border-radius: 4px;
.el-tree {
flex: 1;
border: 1px solid #eee;
.el-tree-node {
.el-tree-node__content {
height: 40px;
border-bottom: 1px solid #eee;
.mr10 {
margin-right: 10px;
width: 180px;
}
.nodelist {
display: flex;
align-items: center;
.math {
margin-left: 32px;
}
.deStatus {
margin-left: 24px;
}
}
}
}
}
.dybox {
h4 {
font-size: 14px;
color: #333;
line-height: 24px;
font-weight: normal;
}
.xlbox {
h4 {
font-size: 14px;
color: #333;
line-height: 24px;
font-weight: normal;
}
margin-left: 16px;
.zzbox {
h4 {
}
.el-checkbox-group {
// display: flex;
// flex-direction: column;
margin-left: 22px;
.el-checkbox {
line-height: 28px;
//width: 196px;
.el-checkbox__label {
b {
margin-left: 18px;
font-weight: normal;
font-size: 12px;
}
}
}
}
}
}
}
.nochannel {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
}
.w50 {
width: 50px;
}
.setTimeTd {
.ruleBox {
display: flex;
align-items: center;
}
h3 {
margin: 8px 0px;
font-size: 16px;
line-height: 24px;
}
.flexTimeGz {
display: flex;
flex-wrap: wrap;
.timeGz {
line-height: 32px;
margin-right: 16px;
b {
font-weight: normal;
color: @color-primary;
}
span {
margin: 0px 8px;
}
}
}
.setCheckbox {
.el-table__header .el-table-column--selection .cell .el-checkbox:after {
color: #333;
content: "";
font-size: 16px;
margin-left: 12px;
font-weight: bold;
}
}
}
.chooseTDBox {
display: flex;
align-items: center;
margin-bottom: 8px;
margin-top: 12px;
label {
margin-right: 8px;
}
}
.treeTable {
margin-top: 16px;
}
}
</style>