| 
									
										
										
										
											2024-09-25 18:30:46 +08:00
										 |  |  |  | <template> | 
					
						
							|  |  |  |  | 	<view class="page"> | 
					
						
							|  |  |  |  | 		<u-navbar title="应用设备" :border-bottom="false" :background="bgc" title-color='#fff' back-icon-color="#fff" | 
					
						
							|  |  |  |  | 			title-size='36' height='42'></u-navbar> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		<view class="box" v-if="loading"> | 
					
						
							|  |  |  |  | 			<view class="box_list" v-for="(item, index) in list" :key="index" @click="btnactive(item.deviceId,index,item)" > | 
					
						
							|  |  |  |  | 				<view :class="['boxlist', { active: tcidlist.includes(item.deviceId) }]"> | 
					
						
							|  |  |  |  | 					<view :class="['toptime', { activewz: tcidlist.includes(item.deviceId) }]"> | 
					
						
							| 
									
										
										
										
											2024-09-28 18:10:03 +08:00
										 |  |  |  | 						<text>{{item.deviceName.length > 5 ? item.deviceName.substring(0,4) + '...' : item.deviceName}} | 
					
						
							|  |  |  |  | 						      <text style="display: block;margin-top: 10rpx;">SN:{{item.deviceNo}}</text> | 
					
						
							|  |  |  |  | 						</text> | 
					
						
							|  |  |  |  | 							<text v-if="tcidlist.includes(item.deviceId)">已应用</text> | 
					
						
							|  |  |  |  | 							<text v-else>未应用</text> | 
					
						
							| 
									
										
										
										
											2024-09-25 18:30:46 +08:00
										 |  |  |  | 						</view> | 
					
						
							|  |  |  |  | 					</view> | 
					
						
							|  |  |  |  | 					<view class="ccc"> | 
					
						
							|  |  |  |  | 						 | 
					
						
							|  |  |  |  | 					</view> | 
					
						
							|  |  |  |  | 				</view> | 
					
						
							|  |  |  |  | 			</view>  | 
					
						
							|  |  |  |  |   | 
					
						
							|  |  |  |  | 			<view class="" v-if="listflag" | 
					
						
							|  |  |  |  | 				style="color: #ccc;font-size: 36rpx;margin-top: 200rpx;text-align: center;"> | 
					
						
							|  |  |  |  | 				暂无设备 | 
					
						
							|  |  |  |  | 			</view> | 
					
						
							|  |  |  |  | 			<view class="anniu"  @click="btnqd"> | 
					
						
							|  |  |  |  | 				<!-- <view class="xinz" @click="btnadd"> | 
					
						
							|  |  |  |  | 					新建套餐 | 
					
						
							|  |  |  |  | 				</view> --> | 
					
						
							|  |  |  |  | 				<view class="xinz"> | 
					
						
							|  |  |  |  | 					确定 | 
					
						
							|  |  |  |  | 				</view> | 
					
						
							|  |  |  |  | 			</view> | 
					
						
							|  |  |  |  | 		</view> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	</view> | 
					
						
							|  |  |  |  | </template> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <script> | 
					
						
							|  |  |  |  | 	export default { | 
					
						
							|  |  |  |  | 		data() { | 
					
						
							|  |  |  |  | 			return { | 
					
						
							|  |  |  |  | 				list: '', | 
					
						
							|  |  |  |  | 				loading: false, | 
					
						
							|  |  |  |  | 				disabled: false, | 
					
						
							|  |  |  |  | 				btnWidth: 180, | 
					
						
							|  |  |  |  | 				show: false, | 
					
						
							|  |  |  |  | 				options: [{ | 
					
						
							|  |  |  |  | 					text: '删除', | 
					
						
							|  |  |  |  | 					style: { | 
					
						
							|  |  |  |  | 						backgroundColor: '#dd524d' | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 				}], | 
					
						
							|  |  |  |  | 				deviceId: '', | 
					
						
							|  |  |  |  | 				bgc: { | 
					
						
							|  |  |  |  | 					backgroundColor: "#8883f0", | 
					
						
							|  |  |  |  | 				}, | 
					
						
							|  |  |  |  | 				activeid: '', | 
					
						
							|  |  |  |  | 				checkboxes: [], | 
					
						
							|  |  |  |  | 				tcidlist: [], | 
					
						
							|  |  |  |  | 				titaoc: [], | 
					
						
							|  |  |  |  | 				newobj: [], | 
					
						
							|  |  |  |  | 				listflag:false, | 
					
						
							|  |  |  |  | 				titflag:'', | 
					
						
							|  |  |  |  | 				arrlists:[], | 
					
						
							|  |  |  |  | 				deviceList:[], | 
					
						
							|  |  |  |  | 			}; | 
					
						
							|  |  |  |  | 		}, | 
					
						
							|  |  |  |  | 		onLoad(option) { | 
					
						
							|  |  |  |  | 			uni.removeStorageSync('tcidlist') | 
					
						
							|  |  |  |  | 			 | 
					
						
							|  |  |  |  | 			this.deviceId = option.id | 
					
						
							|  |  |  |  | 			if(option.title == '确定'){ | 
					
						
							|  |  |  |  | 				this.titflag = '确定' | 
					
						
							|  |  |  |  | 				// this.deviceList = JSON.parse(option.list)
 | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		}, | 
					
						
							|  |  |  |  | 		created() { | 
					
						
							|  |  |  |  | 			// 初始化checkboxes数组,每个元素都设为false(表示初始时不显示复选框)  
 | 
					
						
							|  |  |  |  | 			// this.checkboxes = new Array(this.list.length).fill(false);
 | 
					
						
							|  |  |  |  | 		}, | 
					
						
							|  |  |  |  | 		onShow() { | 
					
						
							|  |  |  |  | 			this.tcidlist = [] | 
					
						
							|  |  |  |  | 			this.getlist() | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		}, | 
					
						
							|  |  |  |  | 		// 分享到好友(会话)
 | 
					
						
							|  |  |  |  | 		onShareAppMessage: function() { | 
					
						
							|  |  |  |  | 			return { | 
					
						
							|  |  |  |  | 				title: '创想物联', | 
					
						
							|  |  |  |  | 				path: '/pages/shouye/index' | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		}, | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// 分享到朋友圈  
 | 
					
						
							|  |  |  |  | 		onShareTimeline: function() { | 
					
						
							|  |  |  |  | 			return { | 
					
						
							|  |  |  |  | 				title: '创想物联', | 
					
						
							|  |  |  |  | 				query: '', | 
					
						
							|  |  |  |  | 				path: '/pages/shouye/index' | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		}, | 
					
						
							|  |  |  |  | 		methods: { | 
					
						
							|  |  |  |  | 			// 查询套餐已有设备
 | 
					
						
							|  |  |  |  | 			getao() { | 
					
						
							|  |  |  |  | 				this.$u.get(`/app/suit/${this.deviceId}`).then(res => { | 
					
						
							|  |  |  |  | 					if (res.code == 200) { | 
					
						
							|  |  |  |  | 						if (res.data.deviceList.length > 0) { | 
					
						
							|  |  |  |  | 							this.titaoc = res.data.deviceList | 
					
						
							|  |  |  |  | 								let uniqueSuitIds = new Set(); | 
					
						
							|  |  |  |  | 								this.arrlists = new Set() | 
					
						
							|  |  |  |  | 								this.list.forEach(item => { | 
					
						
							|  |  |  |  | 									if (this.titaoc.some(titaocItem => titaocItem.deviceId == item.deviceId)) { | 
					
						
							|  |  |  |  | 										uniqueSuitIds.add(item.deviceId); | 
					
						
							|  |  |  |  | 										this.arrlists.add(item) | 
					
						
							|  |  |  |  | 									} | 
					
						
							|  |  |  |  | 								}) | 
					
						
							|  |  |  |  | 								this.tcidlist = Array.from(uniqueSuitIds); | 
					
						
							|  |  |  |  | 								let matchedItems = this.list.filter(item => uniqueSuitIds.has(item.deviceId)) | 
					
						
							|  |  |  |  | 								let unmatchedItems = this.list.filter(item => !uniqueSuitIds.has(item.deviceId)) | 
					
						
							|  |  |  |  | 								this.list = matchedItems.concat(unmatchedItems) | 
					
						
							|  |  |  |  | 								// this.list = this.list
 | 
					
						
							|  |  |  |  | 						}else{ | 
					
						
							|  |  |  |  | 							// this.list = this.list
 | 
					
						
							|  |  |  |  | 							this.tcidlist = [] | 
					
						
							|  |  |  |  | 						} | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 				}) | 
					
						
							|  |  |  |  | 			}, | 
					
						
							|  |  |  |  | 			getadd(){ | 
					
						
							|  |  |  |  | 					if (this.deviceList.length > 0) { | 
					
						
							|  |  |  |  | 						this.titaoc = this.deviceList | 
					
						
							|  |  |  |  | 							let uniqueSuitIds = new Set(); | 
					
						
							|  |  |  |  | 							this.arrlists = new Set() | 
					
						
							|  |  |  |  | 							this.list.forEach(item => { | 
					
						
							|  |  |  |  | 								if (this.titaoc.some(titaocItem => titaocItem.deviceId == item.deviceId)) { | 
					
						
							|  |  |  |  | 									uniqueSuitIds.add(item.deviceId); | 
					
						
							|  |  |  |  | 									this.arrlists.add(item) | 
					
						
							|  |  |  |  | 								} | 
					
						
							|  |  |  |  | 							}) | 
					
						
							|  |  |  |  | 							this.tcidlist = Array.from(uniqueSuitIds); | 
					
						
							|  |  |  |  | 							let matchedItems = this.list.filter(item => uniqueSuitIds.has(item.deviceId)) | 
					
						
							|  |  |  |  | 							let unmatchedItems = this.list.filter(item => !uniqueSuitIds.has(item.deviceId)) | 
					
						
							|  |  |  |  | 							this.list = matchedItems.concat(unmatchedItems) | 
					
						
							|  |  |  |  | 					}else{ | 
					
						
							|  |  |  |  | 						this.tcidlist = [] | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 			}, | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			btnactive(id, index,item) { | 
					
						
							|  |  |  |  | 				const indexInTcidList = this.tcidlist.indexOf(id); | 
					
						
							|  |  |  |  | 				if (indexInTcidList !== -1) { | 
					
						
							|  |  |  |  | 					this.tcidlist.splice(indexInTcidList, 1); | 
					
						
							|  |  |  |  | 				} else { | 
					
						
							|  |  |  |  | 					this.tcidlist.push(id);  | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 				this.toggleItemInArray(this.arrlists, item) | 
					
						
							|  |  |  |  | 			}, | 
					
						
							|  |  |  |  | 			toggleItemInArray(arr, item) {   | 
					
						
							|  |  |  |  | 			  // 检查元素是否存在于数组中  
 | 
					
						
							|  |  |  |  | 			  const index = arr.indexOf(item);   | 
					
						
							|  |  |  |  | 			  if (index > -1) {   | 
					
						
							|  |  |  |  | 			    // 如果存在,则删除该元素  
 | 
					
						
							|  |  |  |  | 			    arr.splice(index, 1);   | 
					
						
							|  |  |  |  | 			    console.log('元素已删除');   | 
					
						
							|  |  |  |  | 			  } else {   | 
					
						
							|  |  |  |  | 			    // 如果不存在,则添加该元素  
 | 
					
						
							|  |  |  |  | 			    arr.push(item);   | 
					
						
							|  |  |  |  | 			    console.log('元素已添加');   | 
					
						
							|  |  |  |  | 			  }   | 
					
						
							|  |  |  |  | 			  // 打印更新后的数组  
 | 
					
						
							|  |  |  |  | 			  console.log(arr);   | 
					
						
							|  |  |  |  | 			}, | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			// 点击确定
 | 
					
						
							|  |  |  |  | 			btnqd() { | 
					
						
							|  |  |  |  | 				if(this.titflag == '确定'){ | 
					
						
							|  |  |  |  | 					uni.setStorageSync('tcidlist', this.arrlists) | 
					
						
							|  |  |  |  | 					uni.navigateBack() | 
					
						
							|  |  |  |  | 				}else{ | 
					
						
							|  |  |  |  | 					// this.$u.delete(`/app/suit/delByDevice/${this.deviceId}`).then(res => {})
 | 
					
						
							|  |  |  |  | 					let numArr = this.tcidlist.map(item => parseInt(item, 10)) | 
					
						
							|  |  |  |  | 					let data = { | 
					
						
							|  |  |  |  | 						deviceIds: numArr, | 
					
						
							|  |  |  |  | 						suitId: this.deviceId | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 					this.$u.put(`/app/suit`, data).then((res) => { | 
					
						
							|  |  |  |  | 						if (res.code == 200) { | 
					
						
							|  |  |  |  | 							uni.showToast({ | 
					
						
							|  |  |  |  | 								title: res.msg, | 
					
						
							|  |  |  |  | 								icon: 'success', | 
					
						
							|  |  |  |  | 								duration: 1000, | 
					
						
							|  |  |  |  | 							}) | 
					
						
							|  |  |  |  | 							if(this.titflag == '确定'){ | 
					
						
							|  |  |  |  | 								 | 
					
						
							|  |  |  |  | 							}else{ | 
					
						
							|  |  |  |  | 								this.getao() | 
					
						
							|  |  |  |  | 							} | 
					
						
							|  |  |  |  | 							setTimeout(() => { | 
					
						
							|  |  |  |  | 								uni.navigateBack() | 
					
						
							|  |  |  |  | 							}, 1000) | 
					
						
							|  |  |  |  | 						} | 
					
						
							|  |  |  |  | 					}) | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			}, | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			getlist() { | 
					
						
							|  |  |  |  | 				let data = { | 
					
						
							|  |  |  |  | 					pageNum: 1, | 
					
						
							|  |  |  |  | 					pageSize: 99 | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 				this.$u.get(`/app/device/list`, data).then((res) => { | 
					
						
							|  |  |  |  | 					if (res.code == 200) { | 
					
						
							|  |  |  |  | 						if(res.rows.length > 0){ | 
					
						
							|  |  |  |  | 							this.listflag = false | 
					
						
							|  |  |  |  | 							this.list = res.rows | 
					
						
							|  |  |  |  | 							this.list = this.list.map(item => ({ | 
					
						
							|  |  |  |  | 								...item, | 
					
						
							|  |  |  |  | 								tcidlist: this.tcidlist | 
					
						
							|  |  |  |  | 							})) | 
					
						
							|  |  |  |  | 							if(this.titflag == '确定'){ | 
					
						
							|  |  |  |  | 								// this.getadd()
 | 
					
						
							|  |  |  |  | 							}else{ | 
					
						
							|  |  |  |  | 								this.getao() | 
					
						
							|  |  |  |  | 							} | 
					
						
							|  |  |  |  | 							 | 
					
						
							|  |  |  |  | 							// console.log(this.list); 
 | 
					
						
							|  |  |  |  | 							this.loading = true | 
					
						
							|  |  |  |  | 						}else{ | 
					
						
							|  |  |  |  | 							this.listflag = true | 
					
						
							|  |  |  |  | 						} | 
					
						
							|  |  |  |  | 						 | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 				}); | 
					
						
							|  |  |  |  | 			}, | 
					
						
							|  |  |  |  | 		 | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	}; | 
					
						
							|  |  |  |  | </script> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <style lang="scss"> | 
					
						
							|  |  |  |  | 	// /deep/ .u-title {
 | 
					
						
							|  |  |  |  | 	// 	padding-bottom: 22rpx;
 | 
					
						
							|  |  |  |  | 	// }
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// /deep/ .u-icon__icon {
 | 
					
						
							|  |  |  |  | 	// 	padding-bottom: 22rpx;
 | 
					
						
							|  |  |  |  | 	// }
 | 
					
						
							|  |  |  |  | 	.active { | 
					
						
							|  |  |  |  | 		background-color: #8883F0 !important; | 
					
						
							|  |  |  |  | 		border-radius: 20rpx; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	.activewz { | 
					
						
							|  |  |  |  | 		color: #fff !important; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	page { | 
					
						
							|  |  |  |  | 		background: #F4F5F7; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | .anniu { | 
					
						
							|  |  |  |  | 				position: fixed; | 
					
						
							|  |  |  |  | 				bottom: 0; | 
					
						
							|  |  |  |  | 				left: 50%; | 
					
						
							|  |  |  |  | 				transform: translateX(-50%); | 
					
						
							|  |  |  |  | 				display: flex; | 
					
						
							|  |  |  |  | 				height: 200rpx; | 
					
						
							|  |  |  |  | 				padding-top: 40rpx; | 
					
						
							|  |  |  |  | 				background-color: #fff; | 
					
						
							|  |  |  |  | 				// justify-content: space-between;
 | 
					
						
							|  |  |  |  | 				width: 100%; | 
					
						
							|  |  |  |  | 				padding-left: 50rpx; | 
					
						
							|  |  |  |  | 				padding-right: 50rpx; | 
					
						
							|  |  |  |  | 				.xinz { | 
					
						
							|  |  |  |  | 					width: 100%; | 
					
						
							|  |  |  |  | 					height: 84rpx; | 
					
						
							|  |  |  |  | 					background: #8883F0; | 
					
						
							|  |  |  |  | 					filter: blur(0px); | 
					
						
							|  |  |  |  | 					text-align: center; | 
					
						
							|  |  |  |  | 					line-height: 84rpx; | 
					
						
							|  |  |  |  | 					font-size: 36rpx; | 
					
						
							|  |  |  |  | 					color: #FFFFFF; | 
					
						
							|  |  |  |  | 					border-radius: 18rpx; | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	.page { | 
					
						
							|  |  |  |  | 		width: 750rpx; | 
					
						
							|  |  |  |  | 		padding-bottom: 400rpx; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		.box { | 
					
						
							|  |  |  |  | 			width: 750rpx; | 
					
						
							|  |  |  |  | 			height: 100%; | 
					
						
							|  |  |  |  | 			background: #F4F5F7; | 
					
						
							|  |  |  |  | 			border-radius: 0rpx 0rpx 0rpx 0rpx; | 
					
						
							|  |  |  |  | 			padding: 50rpx; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			.box_list { | 
					
						
							|  |  |  |  | 				background-color: #fff; | 
					
						
							|  |  |  |  | 				margin-top: 20rpx; | 
					
						
							|  |  |  |  | 				border-radius: 20rpx; | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			.boxlist { | 
					
						
							|  |  |  |  | 				padding: 40rpx 42rpx; | 
					
						
							|  |  |  |  | 				box-sizing: border-box; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				.ccc { | 
					
						
							|  |  |  |  | 					display: flex; | 
					
						
							|  |  |  |  | 					align-items: center; | 
					
						
							|  |  |  |  | 					justify-content: space-between; | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				.toptime { | 
					
						
							|  |  |  |  | 					font-size: 32rpx; | 
					
						
							|  |  |  |  | 					color: #000000; | 
					
						
							|  |  |  |  | 					display: flex; | 
					
						
							|  |  |  |  | 					justify-content: space-between; | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				.bumday { | 
					
						
							|  |  |  |  | 					margin-top: 10rpx; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 					text { | 
					
						
							|  |  |  |  | 						font-size: 32rpx; | 
					
						
							|  |  |  |  | 						color: #95989D; | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			/deep/ .u-swipe-action { | 
					
						
							|  |  |  |  | 				margin-top: 30rpx; | 
					
						
							|  |  |  |  | 				border-radius: 20rpx; | 
					
						
							|  |  |  |  | 				width: 654rpx; | 
					
						
							|  |  |  |  | 				height: 182rpx; | 
					
						
							|  |  |  |  | 				background: #FFFFFF; | 
					
						
							|  |  |  |  | 				box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1); | 
					
						
							|  |  |  |  | 				filter: blur(0px); | 
					
						
							|  |  |  |  | 				border: 0; | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			/deep/ .u-swipe-del { | 
					
						
							|  |  |  |  | 				height: 190rpx; | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | </style> |