<template>
|
|
<uv-popup
|
|
mode="bottom"
|
|
ref="coursePopup"
|
|
round="32rpx"
|
|
bg-color="#f8f8f8"
|
|
safeAreaInsetBottom
|
|
>
|
|
<view class="course-popup">
|
|
<view class="popup-header">
|
|
<view>
|
|
<uv-icon name="arrow-down" color="black" size="20"></uv-icon>
|
|
</view>
|
|
<view class="popup-title">课程</view>
|
|
<view class="popup-title" @click="toggleSort">
|
|
倒序
|
|
</view>
|
|
</view>
|
|
<view class="course-list">
|
|
<view
|
|
v-for="course in displayCourseList"
|
|
:key="course.id"
|
|
class="course-item"
|
|
:class="{ 'active': course.id === currentCourse }"
|
|
@click="selectCourse(course.id)"
|
|
>
|
|
<view class="course-number" :class="{ 'highlight': course.id === currentCourse }">
|
|
{{ String(course.index).padStart(2, '0') }}
|
|
</view>
|
|
<view class="course-content">
|
|
<view class="course-english" :class="{ 'highlight': course.id === currentCourse }">
|
|
{{ course.english }}
|
|
</view>
|
|
<view class="course-chinese" :class="{ 'highlight': course.id === currentCourse }">
|
|
{{ course.chinese }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</uv-popup>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'CoursePopup',
|
|
props: {
|
|
courseList: {
|
|
type: Array,
|
|
default: () => []
|
|
},
|
|
currentCourse: {
|
|
type: [String, Number],
|
|
default: 1
|
|
},
|
|
isReversed: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
},
|
|
computed: {
|
|
displayCourseList() {
|
|
return this.isReversed ? [...this.courseList].reverse() : this.courseList;
|
|
}
|
|
},
|
|
methods: {
|
|
open() {
|
|
if (this.$refs.coursePopup) {
|
|
this.$refs.coursePopup.open()
|
|
}
|
|
},
|
|
close() {
|
|
if (this.$refs.coursePopup) {
|
|
this.$refs.coursePopup.close()
|
|
}
|
|
},
|
|
toggleSort() {
|
|
this.$emit('toggle-sort')
|
|
},
|
|
selectCourse(courseId) {
|
|
this.$emit('select-course', courseId)
|
|
this.close()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
/* 课程弹出窗样式 */
|
|
.course-popup {
|
|
padding: 0 32rpx;
|
|
max-height: 80vh;
|
|
}
|
|
|
|
.popup-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 20rpx 0;
|
|
border-bottom: 2rpx solid #EEEEEE;
|
|
}
|
|
|
|
.popup-title {
|
|
font-family: PingFang SC;
|
|
font-weight: 500;
|
|
font-size: 34rpx;
|
|
color: #181818;
|
|
}
|
|
|
|
.course-list {
|
|
max-height: 60vh;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.course-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 24rpx;
|
|
padding-top: 24rpx;
|
|
padding-right: 8rpx;
|
|
padding-bottom: 24rpx;
|
|
padding-left: 8rpx;
|
|
border-bottom: 1px solid #EEEEEE;
|
|
cursor: pointer;
|
|
|
|
&:last-child {
|
|
border-bottom: none;
|
|
}
|
|
}
|
|
|
|
.course-number {
|
|
width: 80rpx;
|
|
font-family: PingFang SC;
|
|
font-size: 36rpx;
|
|
color: #999;
|
|
|
|
&.highlight {
|
|
color: #06DADC;
|
|
}
|
|
}
|
|
|
|
.course-content {
|
|
flex: 1;
|
|
}
|
|
|
|
.course-english {
|
|
font-family: PingFang SC;
|
|
font-weight: 600;
|
|
font-size: 36rpx;
|
|
line-height: 44rpx;
|
|
color: #252545;
|
|
margin-bottom: 8rpx;
|
|
|
|
&.highlight {
|
|
color: #06DADC;
|
|
}
|
|
}
|
|
|
|
.course-chinese {
|
|
font-size: 28rpx;
|
|
line-height: 48rpx;
|
|
color: #3B3D3D;
|
|
|
|
&.highlight {
|
|
color: #06DADC;
|
|
}
|
|
}
|
|
</style>
|