88 lines
2.2 KiB
Vue
88 lines
2.2 KiB
Vue
![]() |
<template>
|
|||
|
<picker-view
|
|||
|
class="picker-body"
|
|||
|
:value="timeIndex"
|
|||
|
@change="handleTimeChange"
|
|||
|
>
|
|||
|
<!-- 分钟列 -->
|
|||
|
<picker-view-column>
|
|||
|
<view
|
|||
|
v-for="min in minutes"
|
|||
|
:key="min"
|
|||
|
class="item"
|
|||
|
:class="{ active: timeIndex[0] === minutes.indexOf(min) }"
|
|||
|
>{{ min }}分</view>
|
|||
|
</picker-view-column>
|
|||
|
|
|||
|
<!-- 秒数列 -->
|
|||
|
<picker-view-column>
|
|||
|
<view
|
|||
|
v-for="sec in seconds"
|
|||
|
:key="sec"
|
|||
|
class="item"
|
|||
|
:class="{ active: timeIndex[1] === seconds.indexOf(sec) }"
|
|||
|
>{{ sec }}秒</view>
|
|||
|
</picker-view-column>
|
|||
|
</picker-view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
export default {
|
|||
|
name: "TimePicker",
|
|||
|
props: {
|
|||
|
// 初始时间(格式:{ minutes: '02', seconds: '30' })
|
|||
|
defaultTime: {
|
|||
|
type: Object,
|
|||
|
default: () => ({ minutes: '00', seconds: '00' })
|
|||
|
}
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
minutes: Array.from({ length: 60 }, (_, i) => i.toString().padStart(2, '0')), // 00-59
|
|||
|
seconds: Array.from({ length: 60 }, (_, i) => i.toString().padStart(2, '0')), // 00-59
|
|||
|
timeIndex: [0, 0], // 当前选中索引
|
|||
|
selectedTime: { minutes: '00', seconds: '00' } // 当前选择的时间
|
|||
|
};
|
|||
|
},
|
|||
|
created() {
|
|||
|
// 初始化默认时间
|
|||
|
const minIndex = this.minutes.indexOf(this.defaultTime.minutes);
|
|||
|
const secIndex = this.seconds.indexOf(this.defaultTime.seconds);
|
|||
|
this.timeIndex = [minIndex, secIndex];
|
|||
|
this.selectedTime = { ...this.defaultTime };
|
|||
|
},
|
|||
|
methods: {
|
|||
|
// 时间变化时更新选中值
|
|||
|
handleTimeChange(e) {
|
|||
|
this.timeIndex = e.detail.value;
|
|||
|
const [minIdx, secIdx] = this.timeIndex;
|
|||
|
this.selectedTime = {
|
|||
|
minutes: this.minutes[minIdx],
|
|||
|
seconds: this.seconds[secIdx]
|
|||
|
};
|
|||
|
this.$emit("change", this.selectedTime); // 实时通知父组件
|
|||
|
},
|
|||
|
|
|||
|
// 提供给父组件的方法:获取当前时间
|
|||
|
getCurrentTime() {
|
|||
|
return this.selectedTime;
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
|
|||
|
<style scoped>
|
|||
|
.picker-body {
|
|||
|
height: 180px;
|
|||
|
background: #3A3A3A;
|
|||
|
border-radius: 10px;
|
|||
|
}
|
|||
|
.item {
|
|||
|
color: rgba(255, 255, 255, 0.7);
|
|||
|
text-align: center;
|
|||
|
padding: 10px 0;
|
|||
|
}
|
|||
|
.item.active {
|
|||
|
color: #A3FF00; /* 选中项高亮 */
|
|||
|
}
|
|||
|
</style>
|