|
@@ -18,6 +18,10 @@
|
|
|
|
|
|
|
|
const emit = defineEmits(['updateNvr']);
|
|
const emit = defineEmits(['updateNvr']);
|
|
|
|
|
|
|
|
|
|
+ const minLength = 800;
|
|
|
|
|
+ const sliderScale = ref(1);
|
|
|
|
|
+ const sliderLength = ref(800);
|
|
|
|
|
+
|
|
|
// 定义长条的位置
|
|
// 定义长条的位置
|
|
|
const sliderPosition = ref(0);
|
|
const sliderPosition = ref(0);
|
|
|
|
|
|
|
@@ -43,8 +47,8 @@
|
|
|
sliderPosition.value =
|
|
sliderPosition.value =
|
|
|
delta > props.startPosition
|
|
delta > props.startPosition
|
|
|
? props.startPosition
|
|
? props.startPosition
|
|
|
- : delta < props.startPosition - durationMins.value
|
|
|
|
|
- ? props.startPosition - durationMins.value
|
|
|
|
|
|
|
+ : delta < props.startPosition - sliderLength.value
|
|
|
|
|
+ ? props.startPosition - sliderLength.value
|
|
|
: delta;
|
|
: delta;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -102,18 +106,20 @@
|
|
|
// 计算停驻时间
|
|
// 计算停驻时间
|
|
|
const onTime = computed(() => {
|
|
const onTime = computed(() => {
|
|
|
const res =
|
|
const res =
|
|
|
- Number(props.startTime.valueOf()) + (props.startPosition - sliderPosition.value) * 1000 * 60;
|
|
|
|
|
|
|
+ Number(props.startTime.valueOf()) +
|
|
|
|
|
+ ((props.startPosition - sliderPosition.value) / sliderScale.value) * 1000 * 60;
|
|
|
return new Date(res);
|
|
return new Date(res);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 推动时间前进
|
|
// 推动时间前进
|
|
|
const pushTime = () => {
|
|
const pushTime = () => {
|
|
|
- const delta = sliderPosition.value - 1;
|
|
|
|
|
|
|
+ const detaDistance = durationMins.value >= 10 ? 1 : 0.1;
|
|
|
|
|
+ const delta = sliderPosition.value - detaDistance * sliderScale.value;
|
|
|
sliderPosition.value =
|
|
sliderPosition.value =
|
|
|
delta > props.startPosition
|
|
delta > props.startPosition
|
|
|
? props.startPosition
|
|
? props.startPosition
|
|
|
- : delta < props.startPosition - durationMins.value
|
|
|
|
|
- ? props.startPosition - durationMins.value
|
|
|
|
|
|
|
+ : delta < props.startPosition - sliderLength.value
|
|
|
|
|
+ ? props.startPosition - sliderLength.value
|
|
|
: delta;
|
|
: delta;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -125,7 +131,13 @@
|
|
|
const marginMins = startTime.getMinutes();
|
|
const marginMins = startTime.getMinutes();
|
|
|
const marginMinsRight = endTime.getMinutes();
|
|
const marginMinsRight = endTime.getMinutes();
|
|
|
// 拉动条的长度设置为分钟数
|
|
// 拉动条的长度设置为分钟数
|
|
|
- container!.style.width = `${durationMins}px`;
|
|
|
|
|
|
|
+ if (durationMins >= minLength) {
|
|
|
|
|
+ container!.style.width = `${durationMins}px`;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ container!.style.width = `${minLength}px`;
|
|
|
|
|
+ sliderScale.value = minLength / durationMins;
|
|
|
|
|
+ sliderLength.value = durationMins >= 800 ? durationMins : 800;
|
|
|
|
|
+ }
|
|
|
// 计算持续小时数 向下取整
|
|
// 计算持续小时数 向下取整
|
|
|
const duration = Math.floor(durationMins / 60) + (marginMins > marginMinsRight ? 1 : 0);
|
|
const duration = Math.floor(durationMins / 60) + (marginMins > marginMinsRight ? 1 : 0);
|
|
|
if (marginMins === 0) {
|
|
if (marginMins === 0) {
|
|
@@ -147,14 +159,14 @@
|
|
|
// 刻度元素
|
|
// 刻度元素
|
|
|
const mark = document.createElement('div');
|
|
const mark = document.createElement('div');
|
|
|
mark.className = 'time-slider-mark';
|
|
mark.className = 'time-slider-mark';
|
|
|
- mark.style.left = `${i * 60 - marginMins}px`;
|
|
|
|
|
|
|
+ mark.style.left = `${(i * 60 - marginMins) * sliderScale.value}px`;
|
|
|
container?.appendChild(mark);
|
|
container?.appendChild(mark);
|
|
|
|
|
|
|
|
// 刻度文本
|
|
// 刻度文本
|
|
|
const text = document.createElement('span');
|
|
const text = document.createElement('span');
|
|
|
text.className = 'time-slider-text';
|
|
text.className = 'time-slider-text';
|
|
|
text.textContent = `${(startHours + i) % 24}:00`;
|
|
text.textContent = `${(startHours + i) % 24}:00`;
|
|
|
- text.style.left = `${i * 60 - marginMins - 12}px`;
|
|
|
|
|
|
|
+ text.style.left = `${(i * 60 - marginMins) * sliderScale.value - 12}px`;
|
|
|
container?.appendChild(text);
|
|
container?.appendChild(text);
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
@@ -185,7 +197,9 @@
|
|
|
}
|
|
}
|
|
|
const vPoint = document.createElement('div');
|
|
const vPoint = document.createElement('div');
|
|
|
vPoint.className = 'violations-point';
|
|
vPoint.className = 'violations-point';
|
|
|
- vPoint.style.left = `${(vTime.valueOf() - startTime.valueOf()) / (1000 * 60) - 5}px`;
|
|
|
|
|
|
|
+ vPoint.style.left = `${
|
|
|
|
|
+ ((vTime.valueOf() - startTime.valueOf()) / (1000 * 60)) * sliderScale.value - 5
|
|
|
|
|
+ }px`;
|
|
|
vLine.appendChild(vPoint);
|
|
vLine.appendChild(vPoint);
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|