index.vue 5.94 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.offLine }}</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.inActive }}</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'])"
								class="u-flex sigle-child">
								<view class="sigle-text">
									<text class="home-text-total">{{ alertData.activedAlarm }}</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.clearedAck }}</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.clearedUnack }}</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'
	import { useNavigateTo } from '@/plugins/utils.js'

	export default {
		components: {
			fTabbar
		},
		data() {
			return {
				deviceData: {
					onLine: 0,
					offLine: 0,
					inActive: 0
				},
				alertData: {
					activedAlarm: 0,
					clearedAck: 0,
					clearedUnack: 0
				}
			};
		},
		onLoad() {
			// 隐藏原生的tabbar
			uni.hideTabBar();
			this.getDeviceTotalData();
			uni.setStorageSync('getConfiguration', {
				isConfiguration: false
			});
			uni.removeStorageSync('getConfiguration');
		},
		onPullDownRefresh() {
			this.getDeviceTotalData();
			setTimeout(function () {
				uni.stopPullDownRefresh();
				uni.$u.toast('下拉刷新成功...');
			}, 1000);
		},
		methods: {
			...mapActions(['updateBadgeTotal']),
			async getDeviceTotalData() {
				const res = await api.homeApi.getHomeStatisticsApi()
				if (res) {
					for(let i in this.deviceData) Reflect.set(this.deviceData,i,res.totalDevice[i])
					for(let i in this.alertData) Reflect.set(this.alertData,i,res.totalAlarm[i])
					//异步实时更新告警徽标数
					this.updateBadgeTotal(res.totalAlarm?.activedAlarm);
				}
			},
			showToastWip() {
				uni.$u.toast('拼命开发中 ...');
			},
			openCamera() {
				useNavigateTo('camera/camera')
			},
			openOrgStatus() {
				useNavigateTo('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>