渲染 页面 数据处理 结构解析
This commit is contained in:
		
							parent
							
								
									5b50cad2fc
								
							
						
					
					
						commit
						f805ef513e
					
				|  | @ -5,7 +5,7 @@ | |||
| 				  :background="bgc" | ||||
| 				  title-color='#2E4975' | ||||
| 				  title-size='36' | ||||
| 				  height='36'></u-navbar> | ||||
| 				  height='36' :custom-back="addclassinfo"></u-navbar> | ||||
| 		<view class="serchbox"> | ||||
| 			<view class="serchimg"> | ||||
| 				<image src="https://file.langsi.online/yasiimg/web/static/uVMACkynkipOxuTYDqm0"> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| 	<view class="searchpage"> | ||||
| 		<u-navbar title="添加学生" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36' | ||||
| 			height='36'></u-navbar> | ||||
| 			height='36'  :custom-back="addstu"></u-navbar> | ||||
| 			<u-toast ref="uToast" /> | ||||
| 		<view class="serchbox"> | ||||
| 			<view class="serchimg"> | ||||
|  | @ -71,6 +71,7 @@ | |||
| 		}, | ||||
| 		methods: { | ||||
| 			addstu() { | ||||
| 				console.log('调用了'); | ||||
| 				uni.setStorageSync('selectedStuInfo', this.selectedIds); | ||||
| 							 | ||||
| 				// Navigate back to the previous page | ||||
|  |  | |||
|  | @ -1,153 +1,210 @@ | |||
| <template> | ||||
| 	<!-- 外层循环 --> | ||||
| 	<view> | ||||
| 		<view v-for="(item,index) in transformedData" :key="index"> | ||||
| 		<view v-for="(item, index) in transformedData" | ||||
| 			  :key="index"> | ||||
| 			<!-- 剑18循环 --> | ||||
| 			<view> | ||||
| 				<view class="view_bages"> | ||||
| 					<view>{{item.examName}}</view> | ||||
| 					<view>{{ item.examName }}</view> | ||||
| 				</view> | ||||
| 			</view> | ||||
| 			<!-- 渲染Text --> | ||||
| 			<view class="substance"> | ||||
| 				<text v-for="text in textArr" :key="text" @click="textClick(item,text)" :class="{active: item.active == text}">{{text}}</text> | ||||
| 				<text v-for="text in textArr" | ||||
| 					  :key="text" | ||||
| 					  @click="textClick(item, text)" | ||||
| 					  :class="{ active: item.active == text }">{{ text }}</text> | ||||
| 			</view> | ||||
| 			<!-- 内容 --> | ||||
| 			<view class="compose_bodys"> | ||||
| 				<view v-for="text in textArr" :key="text" class="zz"> | ||||
| 					<view class="compose_body" v-for="Task in taskArr" :key="Task" v-if="item.active == text"> | ||||
| 				<view v-for="text in textArr" | ||||
| 					  :key="text" | ||||
| 					  class="zz"> | ||||
| 					<view class="compose_body" | ||||
| 						  v-for="Task in taskArr" | ||||
| 						  :key="Task" | ||||
| 						  v-if="item.active == text"> | ||||
| 						<view class="compose_left"> | ||||
| 							<view>{{Task}}</view> | ||||
| 							<view>{{ Task }}</view> | ||||
| 							<view> | ||||
| 								<text class="fickle">{{item[text][Task].caption}}</text> | ||||
| 								<text class="fickle2">{{item[text][Task].themeCaption}}</text> | ||||
| 								<text class="fickle">{{ item[text][Task].caption }}</text> | ||||
| 								<text class="fickle2">{{ item[text][Task].themeCaption }}</text> | ||||
| 							</view> | ||||
| 						</view> | ||||
| 
 | ||||
| 						<view> | ||||
| 							<u-checkbox @change="checkboxChange(item[text][Task].id,$event)" v-model="item[text][Task].subsetArr">{{item.name}}</u-checkbox> | ||||
| 							<u-checkbox @change="checkboxChange(item, text, Task, $event)" | ||||
| 										v-model="item[text][Task].subsetArr">{{ item.name }}</u-checkbox> | ||||
| 						</view> | ||||
| 					</view> | ||||
| 				</view> | ||||
| 			</view> | ||||
| 		</view> | ||||
| 	</view> | ||||
| 
 | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| 	export default { | ||||
| 		data() { | ||||
| 			return { | ||||
| 				transformedData: [], | ||||
| 				// 复选框 | ||||
| 				subsetArr:[], | ||||
| 				textArr:['test1','test2','test3','test4'], | ||||
| 				taskArr:['task1','task2'], | ||||
| 				// 接口参数 | ||||
| 				comsapi: { | ||||
| 					"key": "", | ||||
| 					"mode": "home", | ||||
| 					"exam": "", | ||||
| 					"caption": "0", | ||||
| 					"themeCaption": "", | ||||
| 					"type": "", | ||||
| 					"isStudy": 0, | ||||
| 					"isEval": 0 | ||||
| 				}, | ||||
| export default { | ||||
| 	data() { | ||||
| 		return { | ||||
| 			transformedData: [], | ||||
| 			// 复选框 | ||||
| 			subsetArr: [], | ||||
| 			textArr: ['test1', 'test2', 'test3', 'test4'], | ||||
| 			taskArr: ['task1', 'task2'], | ||||
| 			// 接口参数 | ||||
| 			comsapi: { | ||||
| 				"key": "", | ||||
| 				"mode": "home", | ||||
| 				"exam": "", | ||||
| 				"caption": "0", | ||||
| 				"themeCaption": "", | ||||
| 				"type": "", | ||||
| 				"isStudy": 0, | ||||
| 				"isEval": 0 | ||||
| 			}, | ||||
| 			orgtransformedData: [], | ||||
| 			selectwrite: [], | ||||
| 		} | ||||
| 	}, | ||||
| 	created() { | ||||
| 		this.getCompose() | ||||
| 	}, | ||||
| 	methods: { | ||||
| 		//写作接口	 | ||||
| 		getCompose() { | ||||
| 			this.$u.post('https://api.admin-v2.langsi.online/admin-api/writing/all/search', this.comsapi).then(res => { | ||||
| 				let arr = res.data | ||||
| 				for (let a of arr) { | ||||
| 					a.active = 'test1' | ||||
| 				} | ||||
| 				this.transformedData = arr | ||||
| 				this.orgtransformedData = JSON.parse(JSON.stringify(arr)); | ||||
| 				// let json = JSON.stringify(this.transformedData) | ||||
| 				console.log(this.transformedData, 'this.transformedData'); | ||||
| 			}) | ||||
| 		}, | ||||
| 		textClick(item, text) { | ||||
| 			item.active = text | ||||
| 			this.$forceUpdate() | ||||
| 		}, | ||||
| 		checkboxChange(item, text, Task, event) { | ||||
| 			const examName = item.examName; | ||||
| 			const test = text; // text 就是 test 字段的内容 | ||||
| 			const taskId = Task; // Task 就是 task 字段的内容 | ||||
| 			const id = String(item[test][taskId].id); | ||||
| 
 | ||||
| 			// 构建对象 | ||||
| 			const newObject = { | ||||
| 				examName: examName, | ||||
| 				test: test, | ||||
| 				task: taskId, | ||||
| 				id: id, | ||||
| 			}; | ||||
| 
 | ||||
| 			// 查找数组中是否已存在相应的对象 | ||||
| 			const existingObjectIndex = this.findIndexByFields(this.selectwrite, newObject); | ||||
| 
 | ||||
| 			if (existingObjectIndex === -1) { | ||||
| 				// 如果不存在,添加到数组 | ||||
| 				this.selectwrite.push(newObject); | ||||
| 			} else { | ||||
| 				// 如果存在,根据索引删除对象 | ||||
| 				this.selectwrite.splice(existingObjectIndex, 1); | ||||
| 			} | ||||
| 			 | ||||
| 			this.$parent.updatawrite(this.selectwrite) | ||||
| 			// 更新其他状态... | ||||
| 		}, | ||||
| 		created() { | ||||
| 			this.getCompose() | ||||
| 		}, | ||||
| 		methods: { | ||||
| 			//写作接口	 | ||||
| 			getCompose() { | ||||
| 				this.$u.post('https://api.admin-v2.langsi.online/admin-api/writing/all/search', this.comsapi).then(res => { | ||||
| 					let arr =  res.data | ||||
| 					for(let a of arr) { | ||||
| 						a.active = 'test1' | ||||
| 					} | ||||
| 					this.transformedData =arr | ||||
| 				}) | ||||
| 			}, | ||||
| 			textClick(item, text) { | ||||
| 				item.active = text | ||||
| 				this.$forceUpdate() | ||||
| 			}, | ||||
| 			checkboxChange(e,id){ | ||||
| 				if(id.value) { | ||||
| 					this.subsetArr.push(e) | ||||
| 				}else { | ||||
| 				let  index=this.subsetArr.indexOf(e); | ||||
| 					if(e!==-1) { | ||||
| 						this.subsetArr.splice(index, 1); | ||||
| 		findIndexByFields(array, fields) { | ||||
| 			// 根据指定字段值查找对象在数组中的索引 | ||||
| 			for (let i = 0; i < array.length; i++) { | ||||
| 				let isEqual = true; | ||||
| 				for (const key in fields) { | ||||
| 					if (fields[key] !== array[i][key]) { | ||||
| 						isEqual = false; | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 				console.log(this.subsetArr) | ||||
| 				if (isEqual) { | ||||
| 					return i; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 			return -1; | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
| 	.view_bages { | ||||
| 		font-size: 40rpx; | ||||
| 		font-weight: 400; | ||||
| 		color: #2E4975; | ||||
| 	} | ||||
| 	.substance { | ||||
| 		margin: 20rpx 0; | ||||
| 		text { | ||||
| 			padding: 10rpx 30rpx; | ||||
| 			margin-right: 20rpx; | ||||
| 			background: #FFFFFF; | ||||
| 			border-radius: 12rpx 12rpx 12rpx 12rpx; | ||||
| 		} | ||||
| 	} | ||||
| .compose_bodys{ | ||||
| 	margin: 30rpx 0; | ||||
| .view_bages { | ||||
| 	font-size: 40rpx; | ||||
| 	font-weight: 400; | ||||
| 	color: #2E4975; | ||||
| } | ||||
| 	.compose_body { | ||||
| 		display: flex; | ||||
| 
 | ||||
| .substance { | ||||
| 	margin: 20rpx 0; | ||||
| 
 | ||||
| 	text { | ||||
| 		padding: 10rpx 30rpx; | ||||
| 		margin-right: 20rpx; | ||||
| 		background: #FFFFFF; | ||||
| 		align-items: center; | ||||
| 		justify-content: space-between; | ||||
| 		margin: 0rpx 20rpx; | ||||
| 		border-bottom: 2rpx solid #F2F2F2; | ||||
| 	} | ||||
| 	.compose_body:last-child { | ||||
| 		border: none; | ||||
| 	} | ||||
| 	.zz{ | ||||
| 		background: #ffff; | ||||
| 		border-radius: 12rpx 12rpx 12rpx 12rpx; | ||||
| 	} | ||||
| 	.compose_left { | ||||
| 		display: flex; | ||||
| 		padding: 24rpx 0; | ||||
| 		margin: 0 24rpx; | ||||
| 	} | ||||
| 	.fickle { | ||||
| 		padding: 4rpx 22rpx; | ||||
| 		font-size: 20rpx; | ||||
| 		font-weight: 500; | ||||
| 		color: #2D7CE6; | ||||
| 		margin-left: 12rpx; | ||||
| 		background: #E1EEFF; | ||||
| 		border-radius: 8rpx 8rpx 8rpx 8rpx; | ||||
| 	} | ||||
| 	.fickle2 { | ||||
| 		padding: 4rpx 32rpx; | ||||
| 		font-size: 20rpx; | ||||
| 		font-weight: 500; | ||||
| 		color: #FB9734; | ||||
| 		margin-left: 12rpx; | ||||
| 		background: #FFEBD7; | ||||
| 		border-radius: 8rpx 8rpx 8rpx 8rpx; | ||||
| 	} | ||||
| 	.active { | ||||
| 		color: #fff; | ||||
| 		background: #007AFF !important; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| .compose_bodys { | ||||
| 	margin: 30rpx 0; | ||||
| } | ||||
| 
 | ||||
| .compose_body { | ||||
| 	display: flex; | ||||
| 	background: #FFFFFF; | ||||
| 	align-items: center; | ||||
| 	justify-content: space-between; | ||||
| 	margin: 0rpx 20rpx; | ||||
| 	border-bottom: 2rpx solid #F2F2F2; | ||||
| } | ||||
| 
 | ||||
| .compose_body:last-child { | ||||
| 	border: none; | ||||
| } | ||||
| 
 | ||||
| .zz { | ||||
| 	background: #ffff; | ||||
| 	border-radius: 12rpx 12rpx 12rpx 12rpx; | ||||
| } | ||||
| 
 | ||||
| .compose_left { | ||||
| 	display: flex; | ||||
| 	padding: 24rpx 0; | ||||
| 	margin: 0 24rpx; | ||||
| } | ||||
| 
 | ||||
| .fickle { | ||||
| 	padding: 4rpx 22rpx; | ||||
| 	font-size: 20rpx; | ||||
| 	font-weight: 500; | ||||
| 	color: #2D7CE6; | ||||
| 	margin-left: 12rpx; | ||||
| 	background: #E1EEFF; | ||||
| 	border-radius: 8rpx 8rpx 8rpx 8rpx; | ||||
| } | ||||
| 
 | ||||
| .fickle2 { | ||||
| 	padding: 4rpx 32rpx; | ||||
| 	font-size: 20rpx; | ||||
| 	font-weight: 500; | ||||
| 	color: #FB9734; | ||||
| 	margin-left: 12rpx; | ||||
| 	background: #FFEBD7; | ||||
| 	border-radius: 8rpx 8rpx 8rpx 8rpx; | ||||
| } | ||||
| 
 | ||||
| .active { | ||||
| 	color: #fff; | ||||
| 	background: #007AFF !important; | ||||
| } | ||||
| </style> | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user