index.vue 5.78 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';

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']),
		getDeviceTotalData() {
			uni.$u.http.get('/yt/homepage/app').then(res => {
				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>