<template>
	<div class="ScreenFX cm-layout">
		<div class="a_0">
			
		</div>
		<div class="b_0">
			<header>
				<div class="b1_a">
					<h1>水库大坝数据风险预警监控平台</h1>
				</div>
				<div class="b1_b">
					<a href="/dashboard">返回</a>
					<span class="date font_digit" id="nowTime">2021<span>年</span>12<span>月</span>01<span>日</span> 09:12:34</span>
				</div>
				<div class="b1_c">
					<div class="scroll-msg photo-frame" id="scrollMsg">
						<div class="in-box">
							<ul class="">
								<!-- <li v-for="item in alarmList">
									<h5><i :class="'level'+(item.alarmlevel)"></i>{{item.name}}</h5>
									<span>{{alarmlevel[item.alarmlevel]}}</span><font>{{item.time}}</font>
								</li> -->
							</ul>
						</div>
					</div>
				</div>
			</header>
			<section class="b_2">
				<div class="b2_a">
					<div class="b2_a1 abs-flex">
						<div class="flex-disf panle-seat">
							<div class="flex-disf-col panle-inbox">
								<div class="title">
									<h4>各监测项目风险数量月统计</h4>
								</div>
								<div class="content flex-rel">
									<div class="abs-full" id="chart1"></div>
								</div>
							</div>
						</div>
						<div class="flex-disf panle-seat">
							<div class="flex-disf-col panle-inbox">
								<div class="title">
									<h4>风险等级数量月统计</h4>
								</div>
								<div class="content flex-rel">
									<div class="abs-full" id="chart2"></div>
								</div>
							</div>
						</div>
					</div>
					<div class="b2_a2" id="b2_a2">
						<div class="b2a_2a text-abs"><a class="">水库大坝风险等级</a></div>
						<div class="b2a_2b text-abs"><a class="">在线监测</a></div>
						<div class="b2a_2c text-abs"><a class="">实时监测</a></div>
						<div class="b2a_2d text-abs"><a class="">水库大坝安全</a></div>
					</div>
					<div class="b2_a3 abs-flex">
						<div class="flex-disf panle-seat">
							<div class="flex-disf-col panle-inbox">
								<div class="title">
									<h4>各监测项目风险数量年统计</h4>
								</div>
								<div class="content flex-rel">
									<div class="abs-full" id="chart3"></div>
								</div>
							</div>
						</div>
						<div class="flex-disf panle-seat">
							<div class="flex-disf-col panle-inbox">
								<div class="title">
									<h4>各监测项目当前风险预警级别</h4>
								</div>
								<div class="content flex-rel">
									<div class="abs-full scroll-list scrolling4" id="chart4">
										<ul class="info-list">
											<li v-for="item in alarmList">
												<h5><i :class="'level'+(item.alarmlevel)"></i>{{item.name}}</h5>
												<span>{{alarmlevel[item.alarmlevel]}}</span><font>{{item.time}}</font>
											</li>
										</ul>
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
			</section>
		</div>
	</div>
</template>

<script>
import { Tools } from '@/assets/js/common.js';
import { reqApi, Config } from '@/assets/js/httpApi.js';
import { Highchart } from '@/assets/js/chartTemplates.js';

export default {
	components: {},
	data() {
		return {
			alarmList:[],
			alarmlevel:['正常', '红色预警', '橙色预警', '黄色预警', '蓝色预警'],
		}
	},
	mounted() {
		this.$nextTick(() => {
			this.pageApi = Config.getModuleInfo(this);
			this.chart1 = this.$el.querySelector("#chart1");
			this.chart2 = this.$el.querySelector("#chart2");
			this.chart3 = this.$el.querySelector("#chart3");

			// 时钟
			var nowTimeEl = this.$el.querySelector("#nowTime");
			var Loop1 = qf.Async.intervalLoop(1000, function(){
				var dateTime = Tools.Dates.format('yyyy年MM月dd日 HH:mm:ss');
				dateTime = dateTime.replace(/年|月|日/g, function(a){return '<span>'+a+'</span>'});
				nowTimeEl.innerHTML = dateTime;
				//Loop1.clear();
			}, function(){
				var dateTime = Tools.Dates.format('yyyy年MM月dd日 HH:mm:ss');
				dateTime = dateTime.replace(/年|月|日/g, function(a){return '<span>'+a+'</span>'});
				nowTimeEl.innerHTML = dateTime;
			});
			
			setTimeout(() => {
			this.loadData();
			}, 500);
		});
	},
	methods: {
		loadData(){
			// 风险数量年统计
			reqApi.common.requstEdge('get', 'tab/Abnormal/statistics', {date:'year'}).then((res)=>{
				var list = res.body || [];
				var barSeriesData = [], categories = [], Catch = {}, i = 0;
				for(var item of list){
					var sum = item.red + item.orange + item.yellow + item.blue;
					barSeriesData.push({color:Highchart.getRandomColor(i++), y:sum});
					categories.push(item.name);
					Catch['red'] = ~~Catch['red'] + item.red;
					Catch['orange'] = ~~Catch['orange'] + item.orange;
					Catch['yellow'] = ~~Catch['yellow'] + item.yellow;
					Catch['blue'] = ~~Catch['blue'] + item.blue;
				};
				var pieSeriesData = [
					{name:'红色报警', y:Catch['red'], color:'red'},
					{name:'橙色报警', y:Catch['orange'], color:'orange'},
					{name:'黄色报警', y:Catch['yellow'], color:'yellow'},
					{name:'蓝色报警', y:Catch['blue'], color:'blue'},
				];
				var opts = {
					chartConfig:{
						chart: {
							marginTop:20,
							marginLeft:60,
							marginBottom:20,
						},
						title: {
							text:''
						},
						xAxis: {
							labels: {
								rotation:0, 
								y:5,
								x:-5,
								style:{
									fontSize:'.14rem',
								},
							},
							categories: categories,
						},
						plotOptions: {
							series: {
								stacking: 'normal'
							},
							bar: {
								dataLabels: {
									enabled: true,
									allowOverlap: true // 允许数据标签重叠
								}
							}
						},
						labels: {
							/* items: [{
								html: '水果消耗',
								style: {
									left: '100px',
									top: '18px',
									//color: (Highcharts.theme && Highcharts.theme.textColor) || 'black'
								}
							}] */
						},
						series: [{
							type:'bar',
							name: '设备报警数量',
							data: barSeriesData,
							borderWidth:0,
							//color:'yellow'
						}, {
							type:'pie',
							name:'报警统计',
							innerSize:'60%',
							data:pieSeriesData,
							center: ['85%', '50%'],
							size: '40%',
							borderWidth:0,
							showInLegend: false,
							dataLabels: {
								enabled: false
							}
						}]
					},
					isSeriesData:true,
					notExtendsOptions:true,
				};
				Highchart.template.high(this.chart3, {}, opts);
			});
			
			// 监测项滚动列表
			reqApi.common.requstEdge('get', '/tab/Abnormal/typelist', {}).then((res)=>{
				var body = res.body || [];
				this.alarmList = body;
				
				this.$nextTick(() => {
					// 小窗口无缝滚动
					var scrollMsg = this.$el.querySelector("#scrollMsg");
					var listBox = scrollMsg.firstElementChild.firstElementChild;
					var risk = this.getHighAlarmLevel(body);
					listBox.innerHTML = '<li><h5><i></i>水库大坝风险等级</h5><span class="level'+(risk.level)+'">'+risk.text+'</span></li>';

					Tools.singleViewSeamlessScroll(scrollMsg);

					// 列表滚动
					var chart4 = this.$el.querySelector("#chart4");
					qf.UI.scrollingPreview(chart4);
				});
			});

			// 风险数量月统计
			reqApi.common.requstEdge('get', 'tab/Abnormal/statistics', {date:'month'}).then((res)=>{
				var list = res.body || [];
				var barSeriesData = [], categories = [], Catch = {}, i = 0;
				for(var item of list){
					var sum = item.red + item.orange + item.yellow + item.blue;
					barSeriesData.push({name:item.equipname, y:sum, color:Highchart.getRandomColor(i++)});
					categories.push(item.name);
					Catch['red'] = ~~Catch['red'] + item.red;
					Catch['orange'] = ~~Catch['orange'] + item.orange;
					Catch['yellow'] = ~~Catch['yellow'] + item.yellow;
					Catch['blue'] = ~~Catch['blue'] + item.blue;
				};
				var pieSeriesData = [
					{name:'红色报警', y:Catch['red'], color:'red'},
					{name:'橙色报警', y:Catch['orange'], color:'orange'},
					{name:'黄色报警', y:Catch['yellow'], color:'yellow'},
					{name:'蓝色报警', y:Catch['blue'], color:'blue'},
				];

				// 监测项按月统计
				var itemOptions = {
					chartConfig:{
						chart: {
							type: 'column',
							marginTop:15,
							marginLeft:20,
							marginBottom:15,
						},
						xAxis: {
							labels: {
								rotation:-25, 
								style:{
									//fontSize:'.14rem',
								},
							},
							visible:false,
						},
						series: [{
							type: 'column',
							name: '设备报警数量',
							data: barSeriesData,
							borderWidth:0,
							dataLabels: {
								enabled: true,
								rotation: -90,
								color: '#FFFFFF',
								align: 'right',
								//format: '{point.y:.1f}', // :.1f 为保留 1 位小数
								y: 10
							}
						}]
					},
					isSeriesData:true,
					notExtendsOptions:true,
				};
				Highchart.template.high(this.chart1, {}, itemOptions);


				//风险等级数量月统计
				var pieOptions = {
					chartConfig:{
						chart: {
							type: 'pie',
							animation: false,
							events: {
								load: function() {
								}
							},
							options3d: {
								enabled: true,
								alpha: 65,
								beta: 0
							},
							marginLeft:5,
							marginRight:5,
						},
						plotOptions: {
							pie: {
								allowPointSelect: true,
								cursor: 'pointer',
								depth: 35,
								dataLabels: {
									enabled: true,
									connectorPadding:0,
									distance:15,
								}
							}
						},
						series: [{
							type:'pie',
							name:'报警统计',
							//innerSize:'70%',
							data:pieSeriesData,
							size: '80%',
							borderWidth:0,
						}]
					},
					isSeriesData:true,
					notExtendsOptions:true,
				};
				Highchart.template.high(this.chart2, {}, pieOptions);
			});
		},
		// 获取最高报警值
		getHighAlarmLevel(list){
			var value = 0;
			for(var item of list){
				if(!value || item.alarmlevel && item.alarmlevel < value){
					value = item.alarmlevel;
				}
			};return {text:this.alarmlevel[value], level:value};
		},
	},
}
</script>

<style lang="scss" scope>
	@font-face {
		font-family:"diget year";
		src: url("~@/assets/fonts/DS-Digital.ttf");
	};
	.font_digit{font-family:diget year;}
	
	.ScreenFX {
		position:relative;height:100%;width:100%;overflow:hidden;background-color:#00164e;
		.a_0, .b_0, .c_0{position:absolute;}
		.a_0{
			position:relative;height:100%;width:100%;
			background:no-repeat center center url('~@/assets/images/fx_bg_min.png');
			background-size:100% 100%;
		}
		
		.b_0{
			top:0;left:0;width:100%;height:100%;
			header{
				position:absolute;top:0;left:0;height:0;width:100%;display:flex;justify-content:center;color:#2EF4EE;z-index:10;
				
				.b1_a, .b1_b, .b1_c{position:absolute;}
				.b1_a{
					position:absolute;width:7.75rem;height:.75rem;margin-left:.20rem;
					&:before{
						content:"";position:absolute;top:0;left:0;height:100%;width:100%;
						background-image:linear-gradient(to bottom, transparent 0%, #005fd3 80%);
						transform:scaleY(1.00) perspective(1rem) rotateX(-13deg);
					}
					h1{
						position:relative;z-index:1;
						font-size:.45rem;line-height:1;margin-top:-.04rem;text-align:center;line-height:.75rem;
						background-image:linear-gradient(to bottom, #f1ffff, #b8ecf9, #7fcfff);
						-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:.03rem;
					}
				}
				.b1_b{
					top:.49rem;left:.49rem;height:.40rem;width:4.55rem;display:flex;
					a{
						width:1.10rem;height:.36rem;line-height:.36rem;background-color:#0d3475;margin-right:5px;border-radius:.12rem;text-align:center;font-size:.14rem;cursor:pointer;color:#36CCD4;
					}
					.date{
						line-height:.43rem;font-size:.28rem;margin-left:.10rem;
						span{font-family:serif;font-size:.24rem;margin:0 .05rem;}
					}
				}
				.b1_c{
					top:.49rem;right:.49rem;height:.43rem;width:4.30rem;line-height:.40rem;font-size:.16rem;
					.photo-frame{
						position:relative;height:100%;width:100%;
						&:before, &:after, .in-box:before, .in-box:after{
							content:"";position:absolute;height:.10rem;width:.10rem;z-index:1;
							border-style:solid;border-color:#C0E2FF;
						}
						&:before, &:after{top:-1px;}
						&:before{left:-1px;border-width:.02rem 0 0 .02rem;}
						&:after{right:-1px;border-width:.02rem .02rem 0 0;}
						.in-box{
							position:absolute;top:0;left:0;height:100%;width:100%;
							&:before, &:after{bottom:-1px;}
							&:before{left:-1px;border-width:0 0 .02rem .02rem;}
							&:after{right:-1px;border-width:0 .02rem .02rem 0;}
							ul{
								position:relative;height:100%;overflow:hidden;margin:0 .15rem;
								li{
									position:absolute;top:0;left:0;height:100%;width:100%;
									display:flex;justify-content:space-between;
									transform:scale(1);transform-origin:0px 0px;transform:translateY(100%);
								}
								.is-animating{
									transition:transform .4s ease-in-out;
								}
								.scroll-in{
									transform:translateY(0%) scale(1);
								}
								.scroll-out{
									transform:translateY(-100%) scale(1);
								}

								.level1{
									color:#F93C58,
								}
								.level2{
									color:#FA953A,
								}
								.level3{
									color:#E9FA3C,
								}
								.level4{
									color:#3BAFFB,
								}
							}
						}
					}
				}
			}

			.b_2, .b2_a{height:100%;width:100%;}
			.b2_a{
				position:relative;
				.abs-flex{
					top:1.12rem;height:9.20rem;width:4.87rem;flex-direction:column;
					.panle-seat{
						margin-top:.20rem;
						background:no-repeat center center url('~@/assets/images/fx_panel_min.png');
						background-size:100% 100%;
						.panle-inbox{
							margin:.14rem;
						}
						.title{
							margin:.10rem 0;
							background-image:linear-gradient(to right, transparent 10%, #075CAD, transparent 90%);
							h4{
								height:.30rem;line-height:.30rem;text-align:center;font-family:serif;font-size:.20rem;
								background-image:linear-gradient(to bottom, #f1ffff, #b8ecf9, #7fcfff);
								-webkit-background-clip:text;-webkit-text-fill-color:transparent;
							}
						}
					}
					.panle-seat:first-child{
						margin-top:0;
					}
					.scroll-list{
						overflow-y:scroll;
						
					}
				}
				.b2_a1{left:.34rem;}
				.b2_a3{right:.34rem;}

				.b2_a2{
					color:#fff;font-size:.30rem;
					.b2a_2a{
						top:4.07rem;left:9.50rem;
					}
					.b2a_2b{
						top:5.27rem;left:6.25rem;
					}
					.b2a_2c{
						top:5.16rem;left:12.95rem;
					}
					.b2a_2d{
						top:7.55rem;left:9.60rem;
					}
				}
			}
		}

		.info-list{
			li{
				display:flex;justify-content:space-between;height:.49rem;line-height:.47rem;
				border:1px solid #0f5680;margin:.06rem 0;padding:0 .10rem;
				background-image:linear-gradient(to right, transparent 30%, #13286b 80%);color:#35ecfa;
				h5{
					font-weight:normal;color:#fff;font-size:.14rem;

					display:flex;align-items:center;
					i{
						position:relative;width:.30rem;height:.24rem;margin-right:.06rem;
						display:flex;justify-content:center;
						&:before{
							content:"";position:absolute;height:0;width:0;bottom:0;
							border-width:.24rem .14rem;border-style:solid;
						}
						&:after{
							content:"!";position:absolute;font-style:normal;line-height:.30rem;font-size:.14rem;color:black;
						}
					}
					.level0{
						&:before{
							border-color:transparent;
						}
						&:after{
							content:"";
						}
					}
					.level1{
						&:before{
							border-color:transparent transparent #F93C58 transparent;
						}
					}
					.level2{
						&:before{
							border-color:transparent transparent #FA953A transparent;
						}
					}
					.level3{
						&:before{
							border-color:transparent transparent #E9FA3C transparent;
						}
					}
					.level4{
						&:before{
							border-color:transparent transparent #3BAFFB transparent;
						}
					}
				}
				span{font-size:.16rem;display:inline-block;margin-left:5px;}
				font{font-size:.14rem;margin-left:5px;}

				h5, span, font, div{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-wrap:normal;}
			}
		}
	}
</style>