device-popup.vue 2.85 KB
<template>
	<u-popup @close="$emit('close')" closeable bgColor="#fff" :show="show" mode="bottom" :round="20"
		@touchmove.stop.prevent="disabledScroll">
		<view class="filter" @touchmove.stop.prevent="disabledScroll">
			<view class="filter-title"><text>筛选条件</text></view>
			<query-item :filterList="deviceStatus" title="设备状态"
				@clickTag="currentIndex => handleClickTag(currentIndex, deviceStatus)"></query-item>
			<query-item :filterList="alarmStatus" title="告警状态"
				@clickTag="currentIndex => handleClickTag(currentIndex, alarmStatus)"></query-item>
			<query-item :filterList="typeStatus" title="设备类型"
				@clickTag="currentIndex => handleClickTag(currentIndex, typeStatus)"></query-item>
			<query-item :filterList="collectStatus" title="设备是否收藏"
				@clickTag="currentIndex => handleClickTag(currentIndex, collectStatus)"></query-item>
			<view class="button-group">
				<view>
					<u-button :customStyle="{ color: '#333' }" color="#e3e3e5" shape="circle" text="重置"
						@click="resetFilter"></u-button>
				</view>
				<view>
					<u-button color="#3388ff" shape="circle" text="确认" @click="confirmFilter"></u-button>
				</view>
			</view>
		</view>
	</u-popup>
</template>

<script>
	import queryItem from './query-item.vue'
	import {
		deviceStatus,
		alarmStatus,
		typeStatus,
		collectStatus
	} from '../config/data.js'

	export default {
		components: {
			queryItem
		},
		props: {
			show: Boolean
		},
		data() {
			return {
				deviceStatus,
				alarmStatus,
				typeStatus,
				collectStatus
			}
		},
		methods: {
			disabledScroll() {
				return;
			},
			handleClickTag(currentIndex, list) {
				list.map((item, index) => {
					item.checked = index === currentIndex;
				});
			},
			resetFilter() {
				const {deviceStatus,alarmStatus,typeStatus} = this;
				[deviceStatus, alarmStatus, typeStatus].forEach(item => item.map((item, index) => (item.checked = index ===0)));
			},
			confirmFilter() {
				const deviceState = this.deviceStatus.find(item => item.checked);
				const alarmStatus = this.alarmStatus.find(item => item.checked);
				const deviceType = this.typeStatus.find(item => item.checked);
				const isCollect = this.collectStatus.find(item => item.checked)
				this.$emit('queryCondition', {
					deviceState: deviceState.type ? deviceState.type : undefined,
					deviceType: deviceType.type ? deviceType.type : undefined,
					isCollect:isCollect.type?isCollect.type:undefined,
					alarmStatus: alarmStatus.type === 0 || alarmStatus.type === 1 ? alarmStatus.type : undefined
				})
			},
		}
	}
</script>

<style lang="scss" scoped>
	.filter {
		padding: 0 30rpx;

		.filter-title {
			text-align: center;
			margin-top: 14px;
			font-size: 16px;
			font-weight: 700;
		}

		.button-group {
			display: flex;
			margin-top: 40rpx;
			justify-content: space-between;

			view {
				width: 330rpx;
			}
		}
	}
</style>