fix(aiot): 重构时间选择器为两个独立的TimePicker

- 将 TimePicker.RangePicker 改为两个独立的 TimePicker
- 使用 startTime 和 endTime 分别控制开始和结束时间
- 添加时间分隔符"至"提升可读性
- 修复编辑功能,现在可以正常编辑模板时间段
- 解决时间选择器无法显示和选择的问题

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-13 16:35:50 +08:00
parent fd6ac90b67
commit e163bf5152

View File

@@ -30,7 +30,8 @@ const emit = defineEmits<{
}>(); }>();
// 当前编辑的时间段 // 当前编辑的时间段
const currentRange = ref<[Dayjs, Dayjs] | null>(null); const startTime = ref<Dayjs | null>(null);
const endTime = ref<Dayjs | null>(null);
// 正在编辑的时间段索引 // 正在编辑的时间段索引
const editingIndex = ref<number | null>(null); const editingIndex = ref<number | null>(null);
@@ -78,15 +79,14 @@ const templates = [
// 添加或更新时间段 // 添加或更新时间段
function addPeriod() { function addPeriod() {
if (!currentRange.value) { if (!startTime.value || !endTime.value) {
message.warning('请选择时间'); message.warning('请选择开始时间和结束时间');
return; return;
} }
const [start, end] = currentRange.value;
const newPeriod: WorkingHourPeriod = { const newPeriod: WorkingHourPeriod = {
start: start.format('HH:mm'), start: startTime.value.format('HH:mm'),
end: end.format('HH:mm'), end: endTime.value.format('HH:mm'),
}; };
// 校验:结束时间必须晚于开始时间 // 校验:结束时间必须晚于开始时间
@@ -132,22 +132,22 @@ function addPeriod() {
message.success('时间段已添加'); message.success('时间段已添加');
} }
currentRange.value = null; startTime.value = null;
endTime.value = null;
} }
// 编辑时间段 // 编辑时间段
function editPeriod(index: number) { function editPeriod(index: number) {
const period = periods.value[index]; const period = periods.value[index];
currentRange.value = [ startTime.value = dayjs(period.start, 'HH:mm');
dayjs(period.start, 'HH:mm'), endTime.value = dayjs(period.end, 'HH:mm');
dayjs(period.end, 'HH:mm'),
];
editingIndex.value = index; editingIndex.value = index;
} }
// 取消编辑 // 取消编辑
function cancelEdit() { function cancelEdit() {
currentRange.value = null; startTime.value = null;
endTime.value = null;
editingIndex.value = null; editingIndex.value = null;
} }
@@ -229,11 +229,19 @@ function getDuration(period: WorkingHourPeriod): string {
</div> </div>
<div class="time-picker-row"> <div class="time-picker-row">
<TimePicker.RangePicker <TimePicker
v-model:value="currentRange" v-model:value="startTime"
format="HH:mm" format="HH:mm"
:minute-step="30" :minute-step="30"
:placeholder="['开始时间', '结束时间']" placeholder="开始时间"
style="flex: 1"
/>
<span class="time-separator"></span>
<TimePicker
v-model:value="endTime"
format="HH:mm"
:minute-step="30"
placeholder="结束时间"
style="flex: 1" style="flex: 1"
/> />
<Button v-if="editingIndex !== null" @click="cancelEdit"> <Button v-if="editingIndex !== null" @click="cancelEdit">
@@ -392,9 +400,15 @@ function getDuration(period: WorkingHourPeriod): string {
.time-picker-row { .time-picker-row {
display: flex; display: flex;
gap: 12px; gap: 12px;
align-items: center;
margin-bottom: 16px; margin-bottom: 16px;
} }
.time-separator {
color: rgba(0, 0, 0, 0.45);
font-size: 14px;
}
/* 时间段列表 */ /* 时间段列表 */
.periods-list { .periods-list {
background: #fafafa; background: #fafafa;