<template> <view class="pages"> <u-navbar title="添加班级" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36' height='36' :custom-back="addclassinfo"></u-navbar> <view class="serchbox"> <view class="serchimg"> <image src="https://file.langsi.online/yasiimg/web/static/uVMACkynkipOxuTYDqm0"> </image> </view> <input type="text" v-model="searchKeyword" placeholder="搜索相关内容..." class="input" placeholder-style="color:#C7CDD3" @input="search()"> </view> <view class="teacher_card_box" > <view class="teacher_card" v-for="(item, index) in classlist" v-if="isloding == false" :key="index" @click="toggleSelection(item)" :class="{ 'act1': item.isSelected }"> <view class="class_card_left"> <image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image> </view> <view class="class_card_right"> <view class="class_card_right_top" v-html="highlightSearch(item.name)"> </view> <view class="class_card_right_bot"> 共{{item.totalMembers}}人 </view> </view> </view> </view> <view class="zhanwei" style="width: 100%; height: 230rpx;"> </view> <view class="botbtn" v-if="selectclass.length>0"> <view class="btn" @click="addclassinfo()"> 确定添加({{selectclass.length}}) </view> </view> </view> </template> <script> export default { data() { return { bgc: { backgroundColor: "#transparent", }, showpage:1, classlist:{}, changeclasslist:{}, isloding:true, selectclass: [], searchKeyword:'' } }, onLoad(option) { this.selectclass=JSON.parse(decodeURIComponent(option.classinfo)) }, onShow() { this.getclassList() }, methods: { addclassinfo(){ uni.setStorageSync('selectedClassInfo', this.selectclass); // Navigate back to the previous page uni.navigateBack({ delta: 1, // Number of pages to go back success(res) { console.log(res); }, fail(err) { console.error(err); } }); }, toggleSelection(item) { const selectedIndex = this.selectclass.findIndex(selectedItem => selectedItem.id === item.id); if (selectedIndex === -1) { // If not selected, add to the array and apply the 'act1' class this.selectclass.push({ name: item.name, avatar: item.avatar, id: item.id }); item.isSelected = true; } else { item.isSelected = false; // If already selected, remove from the array and remove the 'act1' class this.selectclass.splice(selectedIndex, 1); } console.log(this.selectclass, 'this.selectclass'); }, isSelectedClass(item) { return this.selectclass.some(selectedItem => selectedItem.id === item.id); }, search() { // 根据关键字过滤 this.classlist if(this.searchKeyword!=''){ const filteredList = JSON.parse(JSON.stringify(this.changeclasslist)).filter(item => item.name.includes(this.searchKeyword)); // 更新 this.classlist 为过滤后的列表 this.classlist = filteredList; this.selectclass.forEach(selectedItem => { const index = this.classlist.findIndex(item => item.id === selectedItem.id); if (index !== -1) { this.$set(this.classlist, index, { ...this.classlist[index], isSelected: true }); } }); }else{ this.fuwei() } }, highlightSearch(name) { // 使用正则表达式替换匹配到的 searchKeyword 为带有颜色的文字 if (this.searchKeyword) { const regex = new RegExp(this.searchKeyword, 'gi'); return name.replace(regex, match => `<span style="color: #2D7CE6 ;">${match}</span>`); } return name; }, fuwei() { this.classlist = JSON.parse(JSON.stringify(this.changeclasslist)); this.selectclass.forEach(selectedItem => { const index = this.classlist.findIndex(item => item.id === selectedItem.id); if (index !== -1) { this.$set(this.classlist, index, { ...this.classlist[index], isSelected: true }); } }); }, getclassList() { this.$u.get("https://api.admin-v2.langsi.online/admin-api/classroom/page").then(res => { if (res.code === 0) { this.classlist = res.data.list; this.changeclasslist = JSON.parse(JSON.stringify(this.classlist)); this.isloding = false; this.selectclass.forEach(selectedItem => { const index = this.classlist.findIndex(item => item.id === selectedItem.id); if (index !== -1) { this.$set(this.classlist, index, { ...this.classlist[index], isSelected: true }); } }); } }); }, } } </script> <style lang="scss"> page { background: linear-gradient(183deg, #F0F6FF 0%, #FAFAFA 100%); } .pages { padding: 0 32rpx; .serchbox { padding: 0 32rpx; display: flex; flex-wrap: nowrap; margin-top: 30rpx; align-items: center; width: 686rpx; height: 88rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; .serchimg { width: 30.51rpx; height: 32rpx; margin-right: 24rpx; } .input { margin: 0 auto; width: 568rpx; height: 88rpx; border-radius: 30rpx; // background-color: #f5f8fc; // display: flex; // justify-content: center; // align-items: center; // text-align: center; font-size: 28rpx; font-family: Source Han Sans CN, Source Han Sans CN-Light; font-weight: 300; text-align: left; color: #a7b9cd; letter-spacing: 1.2rpx; line-height: 36rpx; // padding: 0 100rpx; // padding-right: 135rpx; box-sizing: border-box; } } .teacher_card_box{ margin-top: 20rpx; .teacher_card{ margin-bottom: 20rpx; padding: 24rpx; display: flex; flex-wrap: nowrap; width: 686rpx; height: 148rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; border: 2rpx solid #FFFFFF; .class_card_left { width: 84rpx; height: 84rpx; } .class_card_right { margin-left: 20rpx; display: flex; flex-wrap: wrap; .class_card_right_top { width: 100%; font-size: 28rpx; font-family:'PingFang','PingFang'; font-weight: bold; color: #072F5A; } .class_card_right_bot { margin-top: 8rpx; background: #EBF3FF; border-radius: 4rpx 4rpx 4rpx 4rpx; padding: 10rpx 20rpx; font-size: 20rpx; font-family:'PingFang','PingFang'; font-weight: 500; color: #2D7CE6; } } } .student_card{ margin-bottom: 20rpx; padding: 24rpx; display: flex; flex-wrap: nowrap; width: 686rpx; height: 124rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; border: 2rpx solid #FFFFFF; .class_card_left { width: 76rpx; height: 76rpx; } .class_card_right { margin-left: 20rpx; display: flex; flex-wrap: wrap; .class_card_right_top { width: 100%; font-size: 28rpx; font-family:'PingFang','PingFang'; font-weight: bold; color: #072F5A; } .class_card_right_bot { margin-top: 4rpx; font-size: 20rpx; font-family:'PingFang','PingFang'; font-weight: 500; color: rgba(7,47,90,0.6); } } } .act1{ border: 2rpx solid #2D7CE6; } } .botbtn{ padding: 32rpx 32rpx 0 32rpx; margin-left: -32rpx; position: fixed; bottom: 0; width: 750rpx; height: 200rpx; background: #FFFFFF; box-shadow: 0rpx -10rpx 16rpx 0rpx rgba(202,202,202,0.25); border-radius: 40rpx 40rpx 0rpx 0rpx; .btn{ display: flex; align-items: center; justify-content: center; font-size: 28rpx; font-family:'PingFang','PingFang'; font-weight: 800; color: #FFFFFF; width: 686rpx; height: 80rpx; background: linear-gradient(180deg, #74AFFF 0%, #2D7CE6 100%); border-radius: 104rpx 104rpx 104rpx 104rpx; } } } </style>