<template> <div id="editRecordPlan" v-loading="loading" style="text-align: left;"> <el-dialog title="录制计划" width="700px" top="2rem" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()" > <div id="shared" style="margin-right: 20px;"> <el-form > <el-form-item label="名称"> <el-input type="text" v-model="planName"></el-input> </el-form-item> <el-form-item> <ByteWeektimePicker v-model="byteTime" name="name"/> </el-form-item> <el-form-item> <div style="float: right; margin-top: 20px"> <el-button type="primary" @click="onSubmit">保存</el-button> <el-button @click="close">取消</el-button> </div> </el-form-item> </el-form> </div> </el-dialog> </div> </template> <script> import { ByteWeektimePicker } from 'byte-weektime-picker' export default { name: "editRecordPlan", props: {}, components: {ByteWeektimePicker}, created() { }, data() { return { options: [], loading: false, edit: false, planName: null, id: null, showDialog: false, endCallback: "", byteTime: "", }; }, methods: { openDialog: function (recordPlan, endCallback) { this.endCallback = endCallback; this.showDialog = true; this.byteTime= ""; if (recordPlan) { this.edit = true this.planName = recordPlan.name this.id = recordPlan.id this.$axios({ method: 'get', url: "/api/record/plan/get", params: { planId: recordPlan.id, } }).then((res) => { if (res.data.code === 0 && res.data.data.planItemList) { this.byteTime = this.plan2Byte(res.data.data.planItemList) } }).catch((error) => { console.error(error) }); } }, onSubmit: function () { let planList = this.byteTime2PlanList(); if (!this.edit) { this.$axios({ method: 'post', url: "/api/record/plan/add", data: { name: this.planName, planItemList: planList } }).then((res) => { if (res.data.code === 0) { this.$message({ showClose: true, message: '添加成功', type: 'success', }); this.showDialog = false; this.endCallback() } else { this.$message({ showClose: true, message: res.data.msg, type: 'error' }); } }).catch((error) => { console.error(error) }); }else { this.$axios({ method: 'post', url: "/api/record/plan/update", data: { id: this.id, name: this.planName, planItemList: planList } }).then((res) => { if (res.data.code === 0) { this.$message({ showClose: true, message: '更新成功', type: 'success', }); this.showDialog = false; this.endCallback() } else { this.$message({ showClose: true, message: res.data.msg, type: 'error' }); } }).catch((error) => { console.error(error) }); } }, close: function () { this.showDialog = false; this.id = null this.planName = null this.byteTime = "" this.endCallback = "" if(this.endCallback) { this.endCallback(); } }, byteTime2PlanList() { if (this.byteTime.length === 0) { return; } const DayTimes = 24 * 2; let planList = [] let week = 1; // 把 336长度的 list 分成 7 组,每组 48 个 for (let i = 0; i < this.byteTime.length; i += DayTimes) { let planArray = this.byteTime2Plan(this.byteTime.slice(i, i + DayTimes)); if(!planArray || planArray.length === 0) { week ++; continue } for (let j = 0; j < planArray.length; j++) { planList.push({ planId: this.id, start: planArray[j].start, stop: planArray[j].stop, weekDay: week }) } week ++; } return planList }, byteTime2Plan(weekItem){ let start = null; let stop = null; let result = [] console.log("===================") for (let i = 0; i < weekItem.length; i++) { let item = weekItem[i] console.log(item) if (item === '1') { // 表示选中 stop = i if (start === null ) { start = i } if (i === weekItem.length - 1 && start != null && stop != null) { result.push({ start: start, stop: stop, }) } } else { if (stop !== null){ result.push({ start: start, stop: stop, }) start = null stop = null } } } return result; }, plan2Byte(planList) { let byte = "" let indexArray = {} for (let i = 0; i < planList.length; i++) { let weekDay = planList[i].weekDay let index = planList[i].start let endIndex = planList[i].stop for (let j = index; j <= endIndex; j++) { indexArray["key_" + (j + (weekDay - 1 )*48)] = 1 } } for (let i = 0; i < 336; i++) { if (indexArray["key_" + i]){ byte += "1" }else { byte += "0" } } return byte } }, }; </script>