From 76008bc03a45062660e6ce6fdd656fd8c63273e0 Mon Sep 17 00:00:00 2001
From: taoxu <2622874537@qq.com>
Date: Thu, 7 Dec 2023 16:59:19 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pages/Mystudent/addstu.vue                   | 131 +++++++++++++++++--
 pages/Mystudent/formstu.vue                  |  89 +++++++------
 pages_teacher/teacher_class/class_detail.vue |  31 ++++-
 3 files changed, 188 insertions(+), 63 deletions(-)

diff --git a/pages/Mystudent/addstu.vue b/pages/Mystudent/addstu.vue
index 215860d..89d0a64 100644
--- a/pages/Mystudent/addstu.vue
+++ b/pages/Mystudent/addstu.vue
@@ -1,27 +1,33 @@
 <template>
 	<view class="searchpage">
-		<u-navbar title="搜索" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36'
+		<u-navbar title="添加学生" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36'
 			height='36'></u-navbar>
+			<u-toast ref="uToast" />
 		<view class="serchbox">
 			<view class="serchimg">
 				<image src="https://file.langsi.online/yasiimg/web/static/uVMACkynkipOxuTYDqm0">
 
 				</image>
 			</view>
-			<input type="text" placeholder="搜索相关内容..." class="input" placeholder-style="color:#C7CDD3 ">
+			<input type="text"
+				 v-model="searchKeyword"
+				 placeholder="搜索相关内容..."
+				 class="input"
+				 placeholder-style="color:#C7CDD3"
+				 @input="search()">
 		</view>
 		<view class="check_card">
-			<view class="check_card_stu" v-for="(item,index ) in stulist" :key="index">
+			<view class="check_card_stu " v-for="(item,index ) in stulist" :key="index" @click="toggleSelection(item)" :class="{ 'act1': item.isSelected }"> 
 				<view class="check_card_stu_info_left">
 					<view class="class_card_left">
-						<image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image>
+						<image :src="item.headImgUrl"></image>
 					</view>
 					<view class="class_card_right">
-						<view class="class_card_right_top">
-							李斯丹妮
+						<view class="class_card_right_top" v-html="highlightSearch(item.nickName)">
+							
 						</view>
 						<view class="class_card_right_bot">
-							ID:3324
+							ID:{{item.id}}
 						</view>
 					</view>
 				</view>
@@ -30,9 +36,14 @@
 			
 
 		</view>
-		<view class="zhanwei" style="width: 100%; height: 50rpx;">
+		<view class="zhanwei" style="width: 100%; height: 230rpx;">
 			
 		</view>
+		<view class="botbtn" @click="addstu()" v-show="selectedIds.length>0">
+			<view class="btn">
+				确定添加({{selectedIds.length}})
+			</view>
+		</view>
 	</view>
 </template>
 
@@ -41,10 +52,13 @@
 		data() {
 			return {
 				bgc: {
-					backgroundColor: "#transparent",
+					backgroundColor: "#F6F9FC",
 				},
 				checkindex: 1,
-				stulist:[]
+				stulist:[],
+				searchKeyword:'',
+				orgstulist:[],
+				selectedIds: [],
 			}
 		},
 		onLoad(option) {
@@ -53,14 +67,81 @@
 			this.getallstu()
 		},
 		methods: {
+			addstu() {
+			let data = {
+				memberId: this.selectedIds[0],
+				// memberId: '1522',
+				roomId: this.classid
+			};
+			
+			this.$u.post(`https://api.admin-v2.langsi.online/admin-api/classroom/members/add`, data).then(res => {
+				if (res.code === 0) {
+					this.$refs.uToast.show({
+						title: '添加成功',
+						type: 'success',
+						position:'top'
+					})
+					this.selectedIds=[]
+					this.fuwei()
+				}else{
+					this.$refs.uToast.show({
+						title: '添加失败',
+						type: 'error',
+						position:'top'
+						
+					})
+					this.selectedIds=[]
+					this.fuwei()
+				}
+			});
+			},
+			 toggleSelection(item) {
+			    const selectedIndex = this.selectedIds.indexOf(item.id);
+			
+			    if (selectedIndex === -1) {
+			      // If not selected, add to the array and apply the 'act1' class
+			      this.selectedIds.push(item.id);
+			      item.isSelected = true;  // Add a property to the item to track selection
+			    } else {
+			      // If already selected, remove from the array and remove the 'act1' class
+			      this.selectedIds.splice(selectedIndex, 1);
+			      item.isSelected = false;
+			    }
+				console.log(this.selectedIds,'selectedIdsselectedIdsselectedIds');
+			  },
+			search() {
+			    // 根据关键字过滤 this.classlist
+			    if (this.searchKeyword !== '') {
+			        const filteredList = JSON.parse(JSON.stringify(this.orgstulist)).filter(item => {
+			            // 匹配 nickName 或者 id
+			            return item.nickName.includes(this.searchKeyword) || item.id.toString().includes(this.searchKeyword);
+			        });
+			        // 更新 this.classlist 为过滤后的列表
+			        this.stulist = filteredList;
+			    } else {
+			        this.fuwei();
+			    }
+			},
+			fuwei() {
+				
+				this.stulist = JSON.parse(JSON.stringify(this.orgstulist));
+			},
+			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;
+			  },
 			getallstu(){
 				this.$u.get(`https://api.admin-v2.langsi.online/admin-api/v2/ybs-user/page`).then(res => {
 				
 							
 					if (res.code == 0) {
-						this.stulist=res.data.list	
-						// this.classlist = res.data.list
-						// this.isloding = false
+						this.stulist=res.data.list
+						this.orgstulist = JSON.parse(JSON.stringify(res.data.list));
+						
 							
 					}
 				})
@@ -203,5 +284,29 @@
 				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>
\ No newline at end of file
diff --git a/pages/Mystudent/formstu.vue b/pages/Mystudent/formstu.vue
index 8a385f5..e174b40 100644
--- a/pages/Mystudent/formstu.vue
+++ b/pages/Mystudent/formstu.vue
@@ -20,9 +20,11 @@
 					</image>
 				</view>
 				<input type="text"
-					   placeholder="搜索相关内容..."
-					   class="input"
-					   placeholder-style="color:#C7CDD3 ">
+					  v-model="searchKeyword"
+					  placeholder="搜索相关内容..."
+					  class="input"
+					  placeholder-style="color:#C7CDD3"
+					  @input="search()">
 			</view>
 			
 		</view>
@@ -32,51 +34,17 @@
 		</view>
 
 		<view class="check_card" v-show="checkindex==1">
-			<view class="check_card_stu">
+			<view class="check_card_stu" v-for="(item,index ) in stulist" :key="index">
 				<view class="check_card_stu_info_left">
 					<view class="class_card_left">
-						<image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image>
+						<image :src="item.memberInfo.avatar"></image>
 					</view>
 					<view class="class_card_right">
-						<view class="class_card_right_top">
-							李斯丹妮
+						<view class="class_card_right_top"  v-html="highlightSearch(item.memberInfo.name)">
+						
 						</view>
 						<view class="class_card_right_bot">
-							ID:3324
-						</view>
-					</view>
-				</view>
-				<view class="check_card_stu_info_right">
-					<view class="class_info" >
-							<view class="class_info_top" >
-								平均成绩/分
-							</view>
-							<view class="class_info_bot" >
-								6
-							</view>
-						</view>
-					<view class="class_info" >
-							<view class="class_info_top" >
-								作业完成度
-							</view>
-							<view class="class_info_bot" >
-								80%
-							</view>
-						</view>
-						
-				</view>
-			</view>
-			<view class="check_card_stu ">
-				<view class="check_card_stu_info_left">
-					<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">
-							李斯丹妮
-						</view>
-						<view class="class_card_right_bot">
-							ID:3324
+							ID:{{item.memberInfo.id}}
 						</view>
 					</view>
 				</view>
@@ -101,6 +69,7 @@
 				</view>
 			</view>
 			
+			
 		</view>
 		<!-- <view class="botbtn">
 			<view class="btn">
@@ -119,20 +88,54 @@ export default {
 				backgroundColor: "#F6F9FC",
 			},
 			checkindex: 1,
+			stulist:[],
+			searchKeyword:'',
+			orgstulist:[],
+			
 		}
 	},
 	onLoad(option) {
 		// this.classid=option.id
 		this.classid=15
+		
+	},
+	onShow() {
 		this.getclassteacher()
 	},
 	methods: {
+	
+		search() {
+		    // 根据关键字过滤 this.classlist
+		    if (this.searchKeyword !== '') {
+		        const filteredList = JSON.parse(JSON.stringify(this.orgstulist)).filter(item => {
+		            // 匹配 nickName 或者 id
+		            return item.memberInfo.name.includes(this.searchKeyword) || item.memberInfo.id.toString().includes(this.searchKeyword);
+		        });
+		        // 更新 this.classlist 为过滤后的列表
+		        this.stulist = filteredList;
+		    } else {
+		        this.fuwei();
+		    }
+		},
+		fuwei() {
+			
+			this.stulist = JSON.parse(JSON.stringify(this.orgstulist));
+		},
+		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;
+		  },
 		getclassteacher(){
 			this.$u.get(`https://api.admin-v2.langsi.online/admin-api/classroom/members/list?classId=${this.classid}`).then(res => {
 			
 						
 				if (res.code == 0) {
-					this.teacherlist=res.data.list
+					this.stulist=res.data
+					this.orgstulist = JSON.parse(JSON.stringify(res.data));
 					// this.classlist = res.data.list
 					// this.isloding = false
 						
diff --git a/pages_teacher/teacher_class/class_detail.vue b/pages_teacher/teacher_class/class_detail.vue
index b8409a8..2c5fd91 100644
--- a/pages_teacher/teacher_class/class_detail.vue
+++ b/pages_teacher/teacher_class/class_detail.vue
@@ -37,8 +37,11 @@
 						<text>班级成员</text>
 						<u-icon name="arrow-right" color="#646D7B" size="16"></u-icon>
 					</view>
-					<view class="view_images">
-						<image :src="item1.url" mode="" v-for="(item1,index) in item.image"></image>
+					<view class="view_images"  >
+						<image :src="item.memberInfo.avatar" mode=""  v-for="(item,index ) in classinfo.members" :key="index" v-if="index<=4"></image>
+						<view class="shenlue" v-if="classinfo.members.length>4">
+							{{classinfo.members.length}}
+						</view>
 					</view>
 				</view>
 			</view>
@@ -123,10 +126,10 @@
 		onLoad(option) {
 			// this.classid=option.id
 			this.classid=15
-			this.getclassinfo()
+			
 		},
 		onShow(){
-			
+			this.getclassinfo()
 		},
 		methods:{
 			getclassinfo() {
@@ -233,7 +236,7 @@
 			display: flex;
 			justify-content: space-evenly;
 			height: 160rpx;
-			background: linear-gradient(174deg, #FFF2E4 0%, #FFFFFF 100%);
+			background: linear-gradient(174deg, #FFF2E4 10%, #FFFFFF 100%);
 			border-radius: 20rpx 20rpx 20rpx 20rpx;
 			// padding: 60rpx;
 
@@ -258,16 +261,30 @@
 
 		.view_images {
 			display: flex;
-			justify-content: space-between;
+			// justify-content: space-between;
 			margin-top: 20rpx;
 			
 
 			image {
-			
+				margin-right: 16rpx;
 				width: 36rpx;
 				height: 36rpx;
 				
 			}
+			.shenlue{
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				background-color: #FFF2E4;
+				border-radius: 50%;
+				width: 36rpx;
+				height: 36rpx;
+				font-size: 20rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 800;
+				color: #F18F21;
+				
+			}
 		}
 
 		.view_operation {