index.vue 5.93 KB
<template>
	<view class="index-page">
		<!-- 公共组件-每个页面必须引入 -->
		<public-module></public-module>
		<view>
			<!-- 基础统计 -->
			<view class="basic-sty">
				<view class="basic-text"><text class="text text-bold">基础统计</text></view>
				<view class="basic">
					<view class="basic-item">
						<view class="item-child-top u-flex">
							<image class="item-image" src="../../static/device-total.png"></image>
							<text class="item-text home-text-muted">设备统计</text>
						</view>
						<view class="item-child-bottom u-flex">
							<view @click="navigatorDeviceStatus('ONLINE')" class="u-flex sigle-child">
								<view class="sigle-text">
									<text class="home-text-total">{{ deviceData.onLine }}</text>
								</view>
								<view class="sigle-value"><text class="home-text-total-bottom">在线</text></view>
							</view>
							<view @click="navigatorDeviceStatus('OFFLINE')" class="u-flex sigle-child">
								<view class="sigle-text">
									<text class="home-text-total">{{ deviceData.unLine }}</text>
								</view>
								<view class="sigle-value"><text class="home-text-total-bottom">离线</text></view>
							</view>
							<view @click="navigatorDeviceStatus('INACTIVE')" class="u-flex sigle-child">
								<view class="sigle-text">
									<text class="home-text-total">{{ deviceData.noActive }}</text>
								</view>
								<view class="sigle-value"><text class="home-text-total-bottom">待激活</text></view>
							</view>
						</view>
					</view>
					<view class="basic-item">
						<view class="item-child-top u-flex">
							<image class="item-image" src="../../static/alert.png"></image>
							<text class="item-text home-text-muted">告警统计</text>
						</view>
						<view class="item-child-bottom u-flex">
							<view @click="navigatorAlarmStatus(['ACTIVE_UNACK', 'ACTIVE_ACK'])"
								class="u-flex sigle-child">
								<view class="sigle-text">
									<text class="home-text-total">{{ alertData.noHandle }}</text>
								</view>
								<view class="sigle-value"><text class="home-text-total-bottom">未处理</text></view>
							</view>
							<view @click="navigatorAlarmStatus('CLEARED_ACK')" class="u-flex sigle-child">
								<view class="sigle-text">
									<text class="home-text-total">{{ alertData.doneHandle }}</text>
								</view>
								<view class="sigle-value"><text class="home-text-total-bottom">已处理</text></view>
							</view>
							<view @click="navigatorAlarmStatus('CLEARED_UNACK')" class="u-flex sigle-child">
								<view class="sigle-text">
									<text class="home-text-total">{{ alertData.errorReport }}</text>
								</view>
								<view class="sigle-value"><text class="home-text-total-bottom">误报</text></view>
							</view>
						</view>
					</view>
				</view>
			</view>
			<!-- 基础统计 -->
			<!-- 四宫格CSS最新网格布局-->
			<view class="grid-container">
				<!-- <view class="grid-item" @click="showToastWip()">
					<view class="item-center">
						<view class="center"><image class="image" src="../../static/form.png"></image></view>
						<view class="center-text"><text class="text text-muted">维修工单</text></view>
					</view>
				</view> -->
				<view @click="openCamera" class="grid-item">
					<view class="item-center">
						<view class="center">
							<image class="image" src="../../static/camer.png"></image>
						</view>
						<view class="center-text"><text class="text text-muted" style="">摄像头管理</text></view>
					</view>
				</view>
				<!-- <view class="grid-item" @click="showToastWip()">
					<view class="item-center">
						<view class="center"><image class="image" src="../../static/device.png"></image></view>
						<view class="center-text"><text class="text text-muted">设备接入</text></view>
					</view>
				</view> -->
				<view @click="openOrgStatus" class="grid-item">
					<view class="item-center">
						<view class="center">
							<image class="image" src="../../static/status.png"></image>
						</view>
						<view class="center-text"><text class="text text-muted">组态</text></view>
					</view>
				</view>
			</view>
			<!-- 四宫格 -->
		</view>
		<f-tabbar></f-tabbar>
	</view>
</template>

<script>
	import fTabbar from '@/components/module/f-tabbar/f-tabbar';
	import {
		mapActions
	} from 'vuex';
	import api from '@/api/index.js'

	export default {
		components: {
			fTabbar
		},
		data() {
			return {
				deviceData: {
					onLine: 0,
					unLine: 0,
					noActive: 0
				},
				alertData: {
					noHandle: 0,
					doneHandle: 0,
					errorReport: 0
				}
			};
		},
		onLoad() {
			// 隐藏原生的tabbar
			uni.hideTabBar();
			this.getDeviceTotalData();
			uni.setStorageSync('getConfiguration', {
				isConfiguration: false
			});
			uni.removeStorageSync('getConfiguration');
		},
		methods: {
			...mapActions(['updateBadgeTotal']),
			async getDeviceTotalData() {
				const res = await api.homeApi.getHomeStatisticsApi()
				if (res) {
					this.deviceData.onLine = res.totalDevice?.onLine;
					this.deviceData.unLine = res.totalDevice?.offLine;
					this.deviceData.noActive = res.totalDevice?.inActive;
					this.alertData.noHandle = res.totalAlarm?.activedAlarm;
					this.alertData.doneHandle = res.totalAlarm?.clearedAck;
					this.alertData.errorReport = res.totalAlarm?.clearedUnack;
					//异步实时更新告警徽标数
					this.updateBadgeTotal(res.totalAlarm?.activedAlarm);
				}
			},
			showToastWip() {
				uni.$u.toast('拼命开发中 ...');
			},
			openCamera() {
				uni.navigateTo({
					url: 'camera/camera'
				});
			},
			openOrgStatus() {
				uni.navigateTo({
					url: 'configuration/configuration'
				});
			},
			//告警状态查询
			navigatorAlarmStatus(e) {
				uni.reLaunch({
					url: '../alarm/alarm?type=' + JSON.stringify(e)
				});
			},
			//设备状态查询
			navigatorDeviceStatus(e) {
				uni.reLaunch({
					url: `../device/device?deviceState=${e}`
				});
			}
		}
	};
</script>

<style lang="scss" scoped>
	@import './static/index.scss';
</style>