| | |
| | | <template> |
| | | <div class="timeRangeSliderBox"> |
| | | <canvas :id="mainId" :ref="mainId" width="700px" height="260px">抱歉,您的浏览器不支持canvas!请更换浏览器</canvas> |
| | | <canvas :id="mainId" :ref="mainId" width="700px" height="260px" |
| | | >抱歉,您的浏览器不支持canvas!请更换浏览器</canvas |
| | | > |
| | | <canvas |
| | | :id="`${mainId}Dummy`" |
| | | :ref="`${mainId}Dummy`" |
| | |
| | | @mousedown="mouseDown($event)" |
| | | @mousemove="mousemove($event)" |
| | | @mouseup="mouseup($event)" |
| | | >抱歉,您的浏览器不支持canvas!请更换浏览器</canvas> |
| | | <div class="popup-box" :style="`top:${popPos.y + 10}px;left:${popPos.x - 70}px`" v-if="isPopup"> |
| | | >抱歉,您的浏览器不支持canvas!请更换浏览器</canvas |
| | | > |
| | | <div |
| | | class="popup-box" |
| | | :style="`top:${popPos.y + 10}px;left:${popPos.x - 70}px`" |
| | | v-if="isPopup" |
| | | > |
| | | <div> |
| | | <b>开始时间:</b> |
| | | <input |
| | |
| | | <b>:</b> |
| | | <input v-model="changeTime.endMin" type="number" placeholder="分" /> |
| | | </div> |
| | | <div style="margin-top:5px;"> |
| | | <div style="margin-top: 5px"> |
| | | <el-button @click="deleteRange">删除</el-button> |
| | | <el-button @click="cancalPop">取消</el-button> |
| | | <el-button @click="timeAck">确定</el-button> |
| | |
| | | <script> |
| | | export default { |
| | | mounted() { |
| | | |
| | | this.initMain(); |
| | | this.initMainDummy(); |
| | | }, |
| | |
| | | isPopup: false, |
| | | popPos: { |
| | | x: "", |
| | | y: "" |
| | | y: "", |
| | | }, |
| | | changeTime: { |
| | | startHour: "", |
| | | startMin: "", |
| | | endHour: "", |
| | | endMin: "" |
| | | endMin: "", |
| | | }, |
| | | rangeArrBackup: "", |
| | | styleClass: { |
| | | weekTextColor: "", |
| | | minutePerColor: "#cdcdcd", |
| | | minutePerTextColor: "#808080" |
| | | } |
| | | minutePerTextColor: "#808080", |
| | | }, |
| | | }; |
| | | }, |
| | | props: { |
| | | timeData: { |
| | | default: () => { }, |
| | | type: Array |
| | | default: () => {}, |
| | | type: Array, |
| | | }, |
| | | mainId: { |
| | | type: String, |
| | | default: "" |
| | | default: "", |
| | | }, |
| | | itemId: { |
| | | type: String, |
| | | default: "" |
| | | default: "", |
| | | }, |
| | | itemName: { |
| | | type: String, |
| | | default: "" |
| | | default: "", |
| | | }, |
| | | edit: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | default: false, |
| | | }, |
| | | }, |
| | | watch: { |
| | | changeTime: { |
| | |
| | | } |
| | | |
| | | if (newVal.startMin > 60) { |
| | | newVal.startMin = 0 |
| | | newVal.startMin = 0; |
| | | } |
| | | if (newVal.startMin < 0) { |
| | | newVal.startMin = 60 |
| | | newVal.startMin = 60; |
| | | } |
| | | if (newVal.endMin > 60) { |
| | | newVal.endMin = 0 |
| | | newVal.endMin = 0; |
| | | } |
| | | if (newVal.endMin < 0) { |
| | | newVal.endMin = 0 |
| | | newVal.endMin = 0; |
| | | } |
| | | |
| | | if (parseInt(newVal.startHour) == parseInt(newVal.endHour) && parseInt(newVal.startMin) > parseInt(newVal.endMin)) { |
| | | newVal.startMin = 0 |
| | | if ( |
| | | parseInt(newVal.startHour) == parseInt(newVal.endHour) && |
| | | parseInt(newVal.startMin) > parseInt(newVal.endMin) |
| | | ) { |
| | | newVal.startMin = 0; |
| | | } |
| | | }, |
| | | deep: true |
| | | } |
| | | deep: true, |
| | | }, |
| | | }, |
| | | methods: { |
| | | timeAck() { |
| | |
| | | let perM = perH / 60; |
| | | |
| | | let tempRangeInfo = this.rangeArr[rangeInfo.ownedIndex].rangeInfo; |
| | | tempRangeInfo.maxX = this.changeTime.endHour * perH + this.changeTime.endMin * perM + 50.5; |
| | | tempRangeInfo.minX = this.changeTime.startHour * perH + this.changeTime.startMin * perM + 50.5; |
| | | tempRangeInfo.maxX = |
| | | this.changeTime.endHour * perH + this.changeTime.endMin * perM + 50.5; |
| | | tempRangeInfo.minX = |
| | | this.changeTime.startHour * perH + |
| | | this.changeTime.startMin * perM + |
| | | 50.5; |
| | | tempRangeInfo.width = tempRangeInfo.maxX - tempRangeInfo.minX; |
| | | for (let i = 0; i < this.gridArr.length; i++) { |
| | | let num = 0; |
| | | for (let j = 0; j < this.rangeArr.length; j++) { |
| | | if (this.gridArr[i].posIndex === this.rangeArr[j].rangeInfo.posIndex) { |
| | | this.gridArr[i].rangeList.splice(num, 1, this.rangeArr[j].rangeInfo); |
| | | if ( |
| | | this.gridArr[i].posIndex === this.rangeArr[j].rangeInfo.posIndex |
| | | ) { |
| | | this.gridArr[i].rangeList.splice( |
| | | num, |
| | | 1, |
| | | this.rangeArr[j].rangeInfo |
| | | ); |
| | | num++; |
| | | } |
| | | } |
| | |
| | | return; |
| | | } |
| | | this.actRange.rangeInfo.minX = tempMinxX; |
| | | this.actRange.rangeInfo.maxX = tempMinxX + this.actRange.rangeInfo.width; |
| | | this.actRange.rangeInfo.maxX = |
| | | tempMinxX + this.actRange.rangeInfo.width; |
| | | this.currentPointX = e.offsetX; |
| | | let tempRangeList = this.gridArr[this.actRange.rangeInfo.posIndex].rangeList; |
| | | let tempRangeList = |
| | | this.gridArr[this.actRange.rangeInfo.posIndex].rangeList; |
| | | this.redraw(); |
| | | // console.log("move-ed"); |
| | | } else if ( |
| | |
| | | if ( |
| | | this.actRange.rangeInfo.minX <= limit.limitLeft || |
| | | this.actRange.rangeInfo.minX + this.actRange.rangeInfo.width >= |
| | | limit.limitRight |
| | | limit.limitRight |
| | | ) { |
| | | return; |
| | | } |
| | | let tempX |
| | | let tempX; |
| | | if (this.x < 50) { |
| | | tempX = 50 |
| | | tempX = 50; |
| | | } else if (this.x > 650) { |
| | | tempX = 650 |
| | | tempX = 650; |
| | | } else { |
| | | tempX = this.x |
| | | tempX = this.x; |
| | | } |
| | | let temp = tempX - this.currentPointX > 0 ? true : false; |
| | | let newWith = 0; |
| | |
| | | width: 10, |
| | | height: 14, |
| | | posIndex: this.actGrid.posIndex, |
| | | ownedIndex: 0 |
| | | } |
| | | ownedIndex: 0, |
| | | }, |
| | | }; |
| | | let actRangeIndex = 0; |
| | | for (let i = 0; i < tempRangeList.length; i++) { |
| | |
| | | } |
| | | } |
| | | } |
| | | this.actGrid.rangeList = this.gridArr[ |
| | | this.actGrid.posIndex |
| | | ].rangeList; |
| | | this.actGrid.rangeList = |
| | | this.gridArr[this.actGrid.posIndex].rangeList; |
| | | this.actRange = this.rangeArr[this.actRangeIndex]; |
| | | this.isCreate = true; |
| | | } |
| | |
| | | if ( |
| | | (this.actRange.rangeInfo.minX <= limit.limitLeft || |
| | | this.actRange.rangeInfo.minX + this.actRange.rangeInfo.width >= |
| | | limit.limitRight) && |
| | | limit.limitRight) && |
| | | this.noLimit > 5 |
| | | ) { |
| | | this.isResizeRight = false; |
| | |
| | | return; |
| | | } |
| | | this.actRange.rangeInfo.maxX = this.x > 650 ? 650 : this.x; |
| | | this.actRange.rangeInfo.width = this.actRange.rangeInfo.maxX - this.actRange.rangeInfo.minX; |
| | | this.actRange.rangeInfo.width = |
| | | this.actRange.rangeInfo.maxX - this.actRange.rangeInfo.minX; |
| | | this.noLimit++; |
| | | this.redraw(); |
| | | return; |
| | |
| | | let behind = this.rangeArr[this.actRangeIndex + 1]; |
| | | let obj = { |
| | | limitLeft: 50, |
| | | limitRight: 650 |
| | | limitRight: 650, |
| | | }; |
| | | if (before === undefined && behind === undefined) { |
| | | return obj; |
| | |
| | | width: 600, |
| | | height: 14, |
| | | posIndex: i, |
| | | rangeList: [] |
| | | rangeList: [], |
| | | }; |
| | | this.gridArr.push(tempGrid); |
| | | let timePer = 600 / 24; |
| | |
| | | width: diffRange, |
| | | height: 14, |
| | | posIndex: i, |
| | | ownedIndex: this.rangeArr.length |
| | | ownedIndex: this.rangeArr.length, |
| | | }; |
| | | rang[j].rangeInfo = rangeInfo; |
| | | this.gridArr[i].rangeList.push(rangeInfo); |
| | |
| | | minuteEnd = minuteEnd < 10 ? "0" + minuteEnd : minuteEnd; |
| | | let textStart = `${hourStart < 10 ? "0" + hourStart : hourStart}:${ |
| | | minutetStart === 60 ? "00" : minutetStart |
| | | }`; |
| | | }`; |
| | | let textEnd = `${hourEnd < 10 ? "0" + hourEnd : hourEnd}:${ |
| | | minuteEnd === 60 ? "00" : minuteEnd |
| | | }`; |
| | | }`; |
| | | let startPointX = rangeInfo.minX - 14; |
| | | let startPointY = rangeInfo.maxY + 10; |
| | | let endPointX = rangeInfo.maxX - 13; |
| | |
| | | day: i + 1, |
| | | time_range: (() => { |
| | | let range = []; |
| | | this.rangeArr.forEach(item => { |
| | | this.rangeArr.forEach((item) => { |
| | | if (item.rangeInfo.posIndex === i) { |
| | | let rangeInfo = item.rangeInfo; |
| | | let hourStart = parseInt((rangeInfo.minX - 50.5) / (600 / 24)); |
| | |
| | | minuteEnd = minuteEnd < 10 ? "0" + minuteEnd : minuteEnd; |
| | | range.push({ |
| | | start: hourStart + ":" + minutetStart, |
| | | end: hourEnd + ":" + minuteEnd |
| | | end: hourEnd + ":" + minuteEnd, |
| | | }); |
| | | } |
| | | }); |
| | | return range; |
| | | })() |
| | | })(), |
| | | }); |
| | | } |
| | | |
| | | let obj = { |
| | | id: this.itemId, |
| | | name: this.itemName, |
| | | time_rule: timeRule |
| | | timeRule: timeRule, |
| | | }; |
| | | this.$emit("range-update", obj); |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |