<template>
	<el-container>
		<el-header>
			<div class="right-panel">
				<el-select v-model="queryType" @change="queryTypeChange">
					<el-option v-for="item in typeOptions" 
					:key="item" 
					:label="item" 
					:value="item"
					>
					</el-option>
				</el-select>
				<el-date-picker
					v-if="queryType=='月'"
					v-model="queryDate"
					type="month"
					placeholder="查询月期"
					value-format="YYYY-MM"
					style="width:100%"
				>
				</el-date-picker>
				<el-date-picker
					v-if="queryType=='年'"
					v-model="queryDate"
					type="year"
					placeholder="查询年份"
					value-format="YYYY"
					style="width:100%"
				>
				</el-date-picker>
				<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
			</div>
		</el-header>
		<el-main>
			<el-card shadow="never" style="margin-bottom: 8px;">
				<el-row :gutter="10">
					<el-col :lg="12">
						<el-card shadow="never">
							<div id="bachart1" style="width:100%;height:300px;"></div>
							<!-- <scEcharts height="300px" :option="option"></scEcharts> -->
						</el-card>
					</el-col>
					<el-col :lg="12">
						<el-card shadow="never">
							<el-table :data="tableData7">
								<el-table-column type="index" width="50" />
								<el-table-column label="物料名" prop="物料名">
								</el-table-column>
								<el-table-column label="月份" prop="月" v-if="queryType=='年'">
								</el-table-column>
								<el-table-column label="周" prop="周" v-else>
								</el-table-column>
								<el-table-column label="规格" prop="规格">
								</el-table-column>
								<el-table-column label="型号" prop="型号">
								</el-table-column>
								<el-table-column label="合格数" prop="合格数">
								</el-table-column>
							</el-table>
						</el-card>
					</el-col>
				</el-row>
			</el-card>
			<el-card shadow="never" style="margin-bottom: 8px;">
				<el-row :gutter="10">
					<el-col :lg="12">
						<el-card shadow="never">
							<div id="bachart2" style="width:100%;height:300px;"></div>
							<!-- <scEcharts height="300px" :option="option2"></scEcharts> -->
						</el-card>
					</el-col>
					<el-col :lg="12">
						<el-card shadow="never">
							<el-table :data="tableData10">
								<el-table-column type="index" width="50" />
								<el-table-column label="物料名" prop="物料名">
								</el-table-column>
								<el-table-column label="月份" prop="月" v-if="queryType=='年'">
								</el-table-column>
								<el-table-column label="周" prop="周" v-else>
								</el-table-column>
								<el-table-column label="规格" prop="规格">
								</el-table-column>
								<el-table-column label="型号" prop="型号">
								</el-table-column>
								<el-table-column label="合格数" prop="合格数">
								</el-table-column>
							</el-table>
						</el-card>
					</el-col>
				</el-row>
			</el-card>
			<el-card shadow="never" style="margin-bottom: 8px;">
				<el-row :gutter="10">
					<el-col :lg="12">
						<el-card shadow="never">
							<div id="bachart3" style="width:100%;height:300px;"></div>
							<!-- <scEcharts height="300px" :option="option3"></scEcharts> -->
						</el-card>
					</el-col>
					<el-col :lg="12">
						<el-card shadow="never">
							<el-table :data="tableDataAVG">
								<el-table-column type="index" width="50" />
								<el-table-column label="物料名" prop="物料名">
								</el-table-column>
								<el-table-column label="月份" prop="月" v-if="queryType=='年'">
								</el-table-column>
								<el-table-column label="周" prop="周" v-else>
								</el-table-column>
								<el-table-column label="合格数" prop="count_ok">
								</el-table-column>
							</el-table>
						</el-card>
					</el-col>
				</el-row>
			</el-card>
			<el-card shadow="never" style="margin-bottom: 8px;">
				<el-row :gutter="10">
					<el-col :lg="12">
						<el-card shadow="never">
							<div id="bachart4" style="width:100%;height:300px;"></div>
							<!-- <scEcharts height="300px" :option="option4"></scEcharts> -->
						</el-card>
					</el-col>
					<el-col :lg="12">
						<el-card shadow="never">
							<el-table :data="tableData6">
								<el-table-column type="index" width="50" />
								<el-table-column label="物料名" prop="物料名">
								</el-table-column>
								<el-table-column label="月份" prop="月" v-if="queryType=='年'">
								</el-table-column>
								<el-table-column label="周" prop="周" v-else>
								</el-table-column>
								<el-table-column label="规格" prop="name">
								</el-table-column>
								<el-table-column label="型号" prop="name">
								</el-table-column>
								<el-table-column label="合格数" prop="count_ok">
								</el-table-column>
							</el-table>
						</el-card>
					</el-col>
				</el-row>
			</el-card>
		</el-main>
	</el-container>
</template>
<script>
	import * as echarts from "echarts";
	import T from '@/components/scEcharts/echarts-theme-T.js';
	echarts.registerTheme('T', T);
	import scEcharts from '@/components/scEcharts';
	function deepCopy(obj) {
		return JSON.parse(JSON.stringify(obj));
	}
	export default {
		name: 'chart',
		components: {
			scEcharts
		},
		data() {
			return {
				queryType:'月',
				queryDate:'',
				start_date:'',
				end_date:'',
				currentYear:'',
				currentMonth:'',
				xAxisOrigin:[],
				xAxisData:[],
				typeOptions:['月','年'],
				basicOption: {
					backgroundColor: 'transparent',
					title: {
						text: '',
					},
					grid: {
						top: '80px'
					},
					tooltip: {
						trigger: 'axis'
					},
					xAxis: {
						type: 'category',
						data: []
					},
					yAxis: {
						type: 'value'
					},
					lenged:[],
					series: [{
						data: [0, 0, 0, 0, 0, 0, 0],
						stack: 'Ad',
						type: 'bar',
						barWidth: '15px',
					}]
				},
				tableData6:[],
				tableData7:[],
				tableData10:[],
				tableDataAVG:[],
				firstWeekNum:1,
				endWeekNum:4,
				monthList:['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']
			}
		},
		mounted(){
			let that =this;
			let date = new Date();
			let year = date.getFullYear();
			let month = date.getMonth()+1;
			let days = new Date(year, month, 0).getDate();
			that.currentYear = year;
			that.currentMonth = month;
			that.start_date =year+'-'+month+'-01';
			that.end_date = year+'-'+month+'-'+new Date(year, month, 0).getDate();
			let month1=month;
			if(month1<10){month1='0'+month1}
			that.queryDate = year+'-'+month1;
			that.firstWeekNum = that.getWeekOfYear(new Date('2024-1-01'));
			that.endWeekNum = that.getWeekOfYear(new Date('2024-1-31'));
			let duration = that.endWeekNum - that.firstWeekNum + 1;
			for(let i =1;i<=duration;i++ ){
				that.xAxisOrigin.push('第'+i+'周');
			}
			that.xAxisData = that.xAxisOrigin;
			that.getData6();
			that.getData7();
			that.getData10();
			that.getDataDAVG();
		},
		methods:{
			setChart(name, option = null) {
				// 根据name 渲染数据, option需填写，否则option为模拟数据
				var myChart = echarts.getInstanceByDom(document.getElementById(name));
				if (myChart == undefined) {
					myChart = echarts.init(document.getElementById(name), 'T');
				}
				if (option == null) {
					option = Object.assign({}, this.basicOption)
				}
				setTimeout(() => {
					try {
						myChart.setOption(option);
					} catch (error) { }
				}, 500)
			},
			queryTypeChange(value){
				console.log(value)
				this.queryDate = '';
			},
			getWeekOfYear(date) {
				var target = new Date(date.getFullYear(), date.getMonth(), date.getDate()); // 创建目标日期对象
				var firstDayOfYear = new Date(target.getFullYear(), 0, 1); // 创建当前年份第一天的日期对象
				if(target.getTime()==firstDayOfYear.getTime()){
					return 1;
				}else{
					return Math.ceil((target - firstDayOfYear + 8 * (firstDayOfYear.getTimezoneOffset() / 480)) / 604800000);
				}
				 // 计算两者之间相隔的周数并返回结果
			},
			getData6(){
				let that = this;
				let option = deepCopy(that.basicOption);
				option.xAxis.data = that.xAxisData;
				option.title.text = '6车间';
				let exec = that.queryType=='月'?'productStatisticWeek':'productStatisticYear';
				let obj = {
					query: { start_date: that.start_date, end_date: that.end_date, dept_name: "6车间" },
				};
				that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
					// console.log('6生产车间统计:',res);
					let tableData6 = res.data2.ds0;
					if(tableData6.length>0){
						option.series = [];
						let seriesData = [],nameList = [];
						tableData6.forEach(ite=>{
							if(nameList.indexOf(ite.物料名)>-1){}else{
								nameList.push(ite.物料名);
								seriesData.push([])
							}
						})
						if(that.queryType=='月'){
							tableData6.forEach(item => {
								let indexX = nameList.indexOf(item.物料名);
								let indexY = item.周-that.firstWeekNum;
								seriesData[indexX][indexY]=item.合格数;
							});
						}else{
							tableData6.forEach(item => {
								let indexX = nameList.indexOf(item.物料名);
								let indexY = item.month-1;
								seriesData[indexX][indexY]=item.合格数;
							});
						}
						for(let n=0;n<seriesData.length;n++){
							let obj = {};
							obj.name= nameList[n];
							obj.stack= 'Ad';
							obj.type= 'bar';
							obj.barWidth= '15px';
							obj.data= seriesData[n];
							option.series.push(obj)
						}
						that.setChart("bachart3", option);
					}else{
						that.setChart("bachart3", option);
					}
				});
			},
			getData7(){
				let that = this;
				let obj = {
					query: { start_date: that.start_date, end_date: that.end_date, dept_name: "7车间" },
				};
				let option = deepCopy(that.basicOption);
				option.xAxis.data = that.xAxisData;
				option.title.text = '预制棒（7车间）';
				let exec = that.queryType=='月'?'lineWeek':'lineMonth';
				that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
					console.log('7生产车间统计:',res);
					let tableData7 = res.data2.ds0;
					that.tableData7 = tableData7;
					debugger;
					if(tableData7.length>0){
						debugger;
						option.series = [];
						let seriesData = [],nameList = [];
						tableData7.forEach(ite=>{
							if(nameList.indexOf(ite.物料名)>-1){}else{
								nameList.push(ite.物料名);
								seriesData.push([])
							}
						})
						tableData7.forEach(item => {
							let indexX=0,indexY=0;
							if(that.queryType=='月'){
								indexX = nameList.indexOf(item.物料名);
								indexY = item.周-that.firstWeekNum;
							}else{
								indexX = nameList.indexOf(item.物料名);
								indexY = item.月-1;
							}
							seriesData[indexX][indexY]=item.合格数;
						});
						for(let n=0;n<seriesData.length;n++){
							let obj = {};
							obj.name= nameList[n];
							obj.stack= 'Ad';
							obj.type= 'bar';
							obj.barWidth= '15px';
							obj.data= seriesData[n];
							option.series.push(obj)
						}
						that.setChart("bachart1", option);
					}else{
						that.setChart("bachart1", option);
					}
				});
			},
			getData10(){
				let that = this;
				let option = deepCopy(that.basicOption);
				option.xAxis.data = that.xAxisData;
				option.title.text = '预制管（10车间）';
				let obj = {
					query: { start_date: that.start_date, end_date: that.end_date, dept_name: "10车间" },
				};
				let exec = that.queryType=='月'?'lineWeek':'lineMonth';
				that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
					// console.log('10生产车间统计:',res);
					let tableData10 = res.data2.ds0;
					that.tableData10 = tableData10;
					if(tableData10.length>0){
						option.series = [];
						let seriesData = [],nameList = [];
						tableData10.forEach(ite=>{
							if(nameList.indexOf(ite.物料名)>-1){}else{
								nameList.push(ite.物料名);
								seriesData.push([])
							}
						})
						tableData10.forEach(item => {
							let indexX=0,indexY=0;
							if(that.queryType=='月'){
								indexX = nameList.indexOf(item.物料名);
								indexY = item.周-that.firstWeekNum;
							}else{
								indexX = nameList.indexOf(item.物料名);
								indexY = item.月-1;
							}
							seriesData[indexX][indexY]=item.合格数;
						});
						for(let n=0;n<seriesData.length;n++){
							let obj = {};
							obj.name= nameList[n];
							obj.stack= 'Ad';
							obj.type= 'bar';
							obj.barWidth= '15px';
							obj.data= seriesData[n];
							option.series.push(obj)
						}
						that.setChart("bachart2", option);
					}else{
						that.setChart("bachart2", option);
					}
				});
			},
			getDataDAVG(){
				let that = this;
				let option = deepCopy(that.basicOption);
				option.xAxis.data = that.xAxisData;
				option.title.text = 'AVG';
				let obj = {
					query: { start_date: that.start_date, end_date: that.end_date},
				};
				let exec = that.queryType=='月'?'AVGWeek':'AVGMonth';
				that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
					// console.log('AVG统计:',res);
					let tableDataAVG = res.data2.ds0;
					let seriesData = [];
					if(tableDataAVG.length>0){
						tableDataAVG.forEach(item => {
							let index=0;
							if(that.queryType=='月'){
								index = item.month-1;
							}else{
								index = item.周-that.firstWeekNum;
							}
							seriesData[index]=item.合格数;
						});
						let obj = {};
						obj.name= 'AVG';
						obj.type= 'bar';
						obj.barWidth= '15px';
						obj.data= seriesData;
						option.series.push(obj)
						that.setChart("bachart4", option);
					}else{
						that.setChart("bachart4", option);
					}
				});
			},
			handleQuery(){
				let that = this;
				if(this.queryType=='月'){
					if(this.queryDate!==''&&this.queryDate!==null){
						this.start_date =this.queryDate+'-01';
						let arr = this.queryDate.split('-');
						this.end_date = this.queryDate+'-'+new Date(arr[0], arr[1], 0).getDate();
						this.firstWeekNum = this.getWeekOfYear(new Date(this.start_date));
						this.endWeekNum = this.getWeekOfYear(new Date(this.end_date));
						let duration = this.endWeekNum - this.firstWeekNum + 1;
						let xAxisData = [];
						for(let i =1;i<=duration;i++ ){
							xAxisData.push('第'+i+'周');
						}
						that.xAxisData = xAxisData;
					}else{
						this.start_date =this.currentYear+'-'+this.currentMonth+'-01';
						this.end_date = this.currentYear+'-'+this.currentMonth+'-'+new Date(this.currentYear, this.currentMonth, 0).getDate();
						let date = new Date(this.start_date);
						this.firstWeekNum = this.getWeekOfYear(date);
						this.xAxisData = this.xAxisOrigin;
					}
				}else{
					if(this.queryDate!==''&&this.queryDate!==null){
						this.start_date = this.queryDate+'-01-01';
						this.end_date = this.queryDate+'-12-31';
					}else{
						this.start_date = this.currentYear+'-01-01';
						this.end_date = this.currentYear+'-12-31';
					}
					that.xAxisData = that.monthList;
				}
				this.getData6();
				this.getData7();
				this.getData10();
				this.getDataDAVG();
			},
		},
	}
</script>

<style>
</style>
