2025-04-01 09:03:51 +08:00

410 lines
9.1 KiB
Vue

<template>
<view class="box flex justify-center align-items flex-column">
<!-- 全部课程 -->
<view class="hot flex flex-column align-items" style="margin-top: 32rpx; height: 100%;">
<view class="header flex align-items" style="justify-content: space-between;">
<!-- <view class="h-left flex align-items">
<image src="../../static/center/Total.png" mode=""
style="width: 168rpx; height: 32rpx; margin-left: 14rpx;"></image>
</view> -->
<!-- <view class="h-right flex align-items" @click="openShow">
<span style="margin-right: 12rpx; color: #EAEAEA;">筛选</span>
<image src="../../static/center/Sift.png" mode=""
style="width: 34rpx; height: 34rpx; margin-right: 9rpx;"></image>
</view> -->
</view>
<view class="new flex align-items" style="">
<view class="flex justify-center align-items " style="" v-for="(item,index) in list" :key="index"
:style="{ marginLeft: index % 2 == 0 ? '32rpx' : '0' }">
<view class="con-center flex justify-center flex-column" style="align-items: flex-start;">
<image :src="item.image" mode="" style="width: 280rpx; height: 200rpx;"></image>
<span class="jita">吉他入门教学</span>
<view class="mingeBox flex justify-center align-items">
<image :src="item.icon" mode="" style="width: 36rpx; height: 36rpx;"></image>
<span class="minge">{{item.now}}/{{item.altogether}}名额</span>
</view>
<span class="money">{{item.money}}</span>
<span class="line-row"></span>
</view>
<span class="line" v-if="index % 2 == 0"></span>
</view>
</view>
</view>
<!-- 弹窗 -->
<u-popup :show="show" mode="right" height="100%" @close="closeShow" class="relative" :custom-style="popupStyle">
<view class="flex align-items flex-column" style="width:500rpx">
<view class="pop-header flex align-items flex-column" style="justify-content: space-around;">
<view class="flex align-items" style="width:449rpx;justify-content: space-between;">
<span class="types">课程类型</span>
<span class="select" @click="cancel(0)">取消选择</span>
</view>
<span class="pop-line"></span>
</view>
<view class="selectBox flex align-items" style="justify-content: flex-start;flex-wrap: wrap;">
<view class="selectType" v-for="(item,index) in types" :key="index" @click="toggleSelection(item)"
:class="{ selected: isSelected(item) }">
{{item}}
</view>
</view>
</view>
<!-- 上课地点 -->
<view class="flex align-items flex-column" style="width:500rpx">
<view class="pop-header flex align-items flex-column" style="justify-content: space-around;">
<view class="flex align-items" style="width:449rpx;justify-content: space-between;">
<span class="types">上课地点</span>
<span class="select" @click="cancel(1)">取消选择</span>
</view>
<span class="pop-line"></span>
</view>
<view class="selectBox flex align-items" style="justify-content: flex-start;flex-wrap: wrap;">
<view class="selectType" v-for="(item,index) in areas" :key="index" @click="areaSelection(item)"
:class="{ selected: areaSelected(item) }">
{{item}}
</view>
</view>
</view>
<view class="btn">
<!-- <u-button :custom-style="customStyle">月落</u-button> -->
<image src="../../static/center/btn.png" mode=""></image>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
types: ['电脑技术', '电脑技术', '电脑技术', '电脑技术', '音乐', '绘画', '体育运动'],
areas: ['老城区', '涧西区', '洛龙区', '西工区', '新安县', '栾川县', '伊川县'],
typeList: [],
areaList: [],
popupStyle:{
background: "#EAEAEA",
},
list: [{
image: "../../static/center/jita.jpeg",
name: "吉他入门教学",
icon: "../../static/center/minge.png",
now: "200",
altogether: '600',
money: "600",
rank: "../../static/center/rank1.png",
},
{
image: "../../static/center/jita.jpeg",
name: "吉他入门教学",
icon: "../../static/center/minge.png",
now: "200",
altogether: '600',
money: "600",
rank: "../../static/center/rank1.png",
},
{
image: "../../static/center/jita.jpeg",
name: "吉他入门教学",
icon: "../../static/center/minge.png",
now: "200",
altogether: '600',
money: "600",
rank: "../../static/center/rank1.png",
},
{
image: "../../static/center/jita.jpeg",
name: "吉他入门教学",
icon: "../../static/center/minge.png",
now: "200",
altogether: '600',
money: "600",
rank: "../../static/center/rank1.png",
},
{
image: "../../static/center/jita.jpeg",
name: "吉他入门教学",
icon: "../../static/center/minge.png",
now: "200",
altogether: '600',
money: "600",
rank: "../../static/center/rank1.png",
}
]
}
},
methods: {
openShow() {
this.show = true
},
closeShow(){
this.typeList = []
this.areaList = []
this.show = false
},
//类型选择
toggleSelection(item) {
if (this.typeList.includes(item)) {
// 取消选中
this.typeList = this.typeList.filter(i => i !== item);
} else {
// 选中
this.typeList.push(item);
}
console.log(this.typeList)
},
isSelected(item) {
return this.typeList.includes(item);
},
// 上课地点
areaSelection(item){
if (this.areaList.includes(item)) {
// 取消选中
this.areaList = this.areaList.filter(i => i !== item);
} else {
// 选中
this.areaList.push(item);
}
},
areaSelected(item) {
return this.areaList.includes(item);
},
// 取消选择
cancel(num){
if (num == 0) {
this.typeList = []
} else {
this.areaList = []
}
},
}
}
</script>
<style lang="scss" scoped>
.box {
padding: 0 30rpx 0rpx 30rpx;
background-color: #F1F2F8;
}
.search {
margin-top: 30rpx;
height: 52rpx;
border: 4rpx #EAEAEA dashed;
.dashed {
image {
width: 50rpx;
height: 50rpx;
}
}
.input {
border: 4rpx solid #EAEAEA;
padding-left: 12rpx;
height: 100%;
width: 100%;
}
/deep/ .input-placeholder {
font-weight: 800;
font-size: 24rpx;
color: #8B8B8B;
line-height: 54rpx;
}
}
.w-100 {
width: 100%;
}
.flex {
display: flex;
}
.justify-center {
justify-content: center;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.hot {
width: 100%;
height: 504rpx;
}
.header {
width: 100%;
height: 42rpx;
background: #4974FF;
margin-top: 42rpx;
box-shadow: 2rpx 2rpx 0rpx 0rpx rgba(0, 0, 0, 0.4);
image {}
}
.content {
height: 462rpx;
overflow-x: auto;
/* 允许横向滚动 */
white-space: nowrap;
}
.new {
width: 100%;
justify-content: flex-start;
display: flex;
flex-wrap: wrap;
position: relative;
}
.pos {
position: absolute;
bottom: 0rpx;
right: 0rpx;
}
.content,
.new {
width: 100%;
background: #EAEAEA;
border-radius: 0rpx 0rpx 0rpx 0rpx;
/* 禁止换行 */
.con-center {
width: 280rpx;
height: 398rpx;
.jita {
font-weight: 800;
font-size: 28rpx;
color: #343434;
line-height: 32rpx;
margin-top: 14rpx;
}
.line-row {
width: 280rpx;
height: 1rpx;
background: #D9D9D9;
margin: 12rpx 0 12rpx 0;
box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25);
}
.mingeBox {
.minge {
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
line-height: 32rpx;
}
}
.money {
display: flex;
align-self: flex-end;
font-weight: 800;
font-size: 36rpx;
color: #FF2323;
line-height: 32rpx;
margin-top: 24rpx;
}
}
.line {
height: 398rpx;
width: 1rpx;
background: #D9D9D9;
margin: 0rpx 34rpx 0 34rpx;
box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25);
}
}
.ovr:first-child {
margin-left: 34rpx;
}
.ovr:last-child {
margin-right: 34rpx;
}
.footer {
margin: 120rpx 0 40rpx 0;
font-weight: 500;
font-size: 24rpx;
color: #BCBCBC;
line-height: 32rpx;
}
.pop-header {
margin-top: 35rpx;
.types {
font-weight: 800;
font-size: 24rpx;
color: #343434;
line-height: 32rpx;
}
.select {
font-weight: 400;
font-size: 20rpx;
color: #343434;
line-height: 32rpx;
}
.pop-line {
width: 449rpx;
height: 2rpx;
margin-top: 18rpx;
background: #D9D9D9;
box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(0, 0, 0, 0.25);
}
}
.selectBox {
width: 449rpx;
.selectType {
height: 21rpx;
background: #D9D9D9;
font-weight: 500;
font-size: 24rpx;
color: #4B4B4B;
display: flex;
justify-content: center;
align-items: center;
padding: 12rpx 14rpx 17rpx 14rpx;
margin: 24rpx 12rpx 0 0;
}
}
.selectType.selected {
background-color: #007bff;
color: white;
}
.relative{
position: relative;
background-color: red;
}
.btn{
position: absolute;
bottom: 53rpx;
width: 449rpx;
left: 30rpx;
image{
width: 449rpx;
height: 73rpx;
}
}
</style>