<style lang="less" scoped>
    #statistics{
        background:#f2f2f2;
        height:100%;
        display: flex;
        flex-direction: column;
        .Content{
            height:100%;
            // height:1px;
            // flex-grow: 1;
            // overflow: auto;
            // -webkit-overflow-scrolling: touch;
        }
        .Content>.double{
            display:flex;
            >.card{
                flex-grow:1;
                width:50%;
            }
        }
        .card{
            border-radius: 6px;
            background:#fff;
            box-shadow: 1px 1px 10px -1px #888;
            overflow: hidden;
            margin:6px;
            position:relative;
            .imgBC{
                position:absolute;
                top:32px;
            }
            img{
                max-height: 80%;
                left: 50%;
                transform: translate(-50%,0);
            }
            >.head{
                background: linear-gradient(90deg,#708bf6, #2d8cf0, #00B2EE);
                padding:5px 0;
                color:#fff;
                text-align: center;
            }
            >.foot{
                display:flex;
                font-size:10px;
                >div{
                    flex-grow:1;
                    width:50%;
                    margin:4px 0;
                    text-align: center;
                    >p{
                        margin:2px 0;
                        &:last-child{
                            color:#009BDE;
                        }
                    }
                }
            }
        }
    }
</style>
<template>
    <div id="statistics">
        <searchComponent :search='search' />
        <div class="Content">
            <div class='double'>
                <div class="card">
                    <div class="head">月总订单金额同比率</div>
                    <div  ref='chart1' style="width:100%;height:150px;"/>
                </div>
                <div class="card">
                    <div class="head">月总订单金额环比率</div>
                    <div  ref='chart2' style="width:100%;height:150px;"/>
                </div>
            </div>

            <div class="card">
                <div class="head">销售排行</div>
                <div ref='chart3' :style="{width:'100%',height:'180px',opacity:chartData.set3.length>0?'1':'0'}" />
                <img v-if="chartData.set3.length==0" src="@/assets/noData.jpg" class="imgBC" />
                <div class="foot">
                    <div style="border-right:1px solid #009BDE;">
                        <p>销售笔数</p>
                        <p >{{chartData.set4.iSellCount}}</p>
                    </div>
                    <div>
                        <p>销售额</p>
                        <p>￥{{chartData.set4.nSellAmount}}万</p>
                    </div>
                </div>
            </div>
            <div class="card">
                <div class="head">产品颜色销售排行</div>
                <div ref='chart5' :style="{width:'100%',height:'230px',opacity:chartData.set5.length>0?'1':'0'}" />
                <img v-if="chartData.set5.length==0" src="@/assets/noData.jpg" class="imgBC" />
            </div>
            <div class="card">
                <div class="head">产品销售排行</div>
                <div ref='chart6' :style="{width:'100%',height:'230px',opacity:chartData.set6.length>0?'1':'0'}" />
                <img v-if="chartData.set6.length==0" src="@/assets/noData.jpg" class="imgBC" />
            </div>
        </div>
        
    </div>
</template>
<script>
import Util from '@/libs/util.js'
import searchComponent from '@/components/search'
import { Confirm } from 'vux'
import { clearTimeout, setTimeout } from 'timers';
import { toUnicode } from 'punycode';
import echarts from 'echarts';

export default {
    name:"statistics",
    components:{searchComponent},
    data(){
        return{
            search:{
                dBeginDate:Util.dateFormat(new Date(),'yyyy-MM-01'),
                dEndDate:Util.dateFormat(new Date(),'yyyy-MM-dd'),
            },
            iProjectId:5599,
            chartData:{
                set3:[],
                set4:{
                    iSellCount:0,
                    nSellAmount:0,
                },
                set5:[],
                set6:[],
            },
            chart1:null,
            chart2:null,
            chart3:null,
            chart5:null,
            chart6:null,
        }
    },
    created(){
        window.s=this
    },
    activated(){
        setTimeout(()=>{
            this.chart1.resize()
            this.chart2.resize()
            this.resize(this.chart3,1.15)
            this.resize(this.chart5,1.35)
            this.resize(this.chart6,1.35)
        })
    },
    mounted(){
        window.h=this

        this.createChart('chart1')
        this.createChart('chart2')
        this.createChart('chart3')
        this.createChart('chart5','set5',true)
        this.createChart('chart6','set6',true)
        window.addEventListener('resize',()=>{
            setTimeout(()=>{
                this.chart1.resize()
                this.chart2.resize()
                this.resize(this.chart3,1.15)
                this.resize(this.chart5,1.35)
                this.resize(this.chart6,1.35)
            })
        })

        this.iProjectId= this.$route.params.iProjectId;
        this.$store.dispatch('setIproject',this.iProjectId);
        this.searchData();
        
        this.global.$off('searchData');
        this.global.$on('searchData',()=>{
            this.searchData()
        })
    },
    methods:{
        createChart(name,kield,isLinstener){
            var myChart=this.$echarts.init(this.$refs[name])
            if(isLinstener){
                let time=0
                myChart.getZr().on('mousedown',param=>{
                    const pointInPixel = [param.offsetX, param.offsetY]
                    if (myChart.containPixel('grid', pointInPixel)) {
                        let index = myChart.convertFromPixel({ seriesIndex: 0 }, [param.offsetX, param.offsetY])[0]
                        time=setTimeout(()=>{
                            var data=this.chartData[kield]
                            var options=myChart.getOption()
                            options.tooltip[0].show=false
                            myChart.setOption(options)
                            this.$vux.confirm.show({
                                title:"提示",
                                content:"是否查看详情",
                                onConfirm:()=>{
                                    this.$store.dispatch('setChartHearData',data[index]).then(()=>{
                                        this.$router.push({name:"chartMmcolorsaleDetail"});
                                    })
                                    options.tooltip[0].show=true
                                    myChart.setOption(options)
                                },
                                onCancel(){
                                    options.tooltip[0].show=true
                                    myChart.setOption(options)
                                }
                            })
                        },500)
                    }
                })
                myChart.getZr().on('mousemove',()=>{
                    clearTimeout(time)
                })
                myChart.getZr().on('mouseup',()=>{
                    clearTimeout(time)
                })
            };
            this[name]=myChart
        },
        resize(chart,rate){
            var options=chart.getOption()
            if(!options)return;
            options.dataZoom[0].end=options.dataZoom[0].start+(window.innerWidth*rate)/options.xAxis[0].data.length
            chart.setOption(options)
            chart.resize()
        },

        async searchData(){//搜索数据
            await this.chart1Data()
            await this.chart2Data()
            this.showValue()
        },
        async chart1Data(){
            var value =await this.request('sellinfo',{
                params:{
                    dStartDate:this.search.dBeginDate,
                    dEndDate:this.search.dEndDate
                }
            },true,{iProjectId:this.iProjectId})
            Object.assign(this.chartData,{
                nOrderSameRatio:Math.round((value.set1&&value.set1[0]&&value.set1[0].nOrderSameRatio||0)*100)/100,
                nOrderRingRatio:Math.round((value.set2&&value.set2[0]&&value.set2[0].nOrderRingRatio||0)*100)/100,
                set4:{
                    iSellCount:value.set4&&value.set4[0]&&value.set4[0].iSellCount||0,
                    nSellAmount:Math.round((value.set4&&value.set4[0]&&value.set4[0].nSellAmount||0)/100)/100
                }
            })
            console.log()
            this.chartData.set3=typeof value.set3=='object'&&value.set3.length>0&&value.set3.map(v=>{
                v.value=Math.round(v.nAmount/100)/100
                return v
            })||[]
        },
        async chart2Data(){
            var value=await this.request('getMmcolorsaletop',{
                params:this.search
            },true,{iProjectId:this.iProjectId})

            this.chartData.set5=typeof value=='object'&&value.length>0&&value||[]
            this.chartData.set5.forEach(v=>v.type='mmcolorsaletop')

            var value=await this.request('getMmsaletop',{
                params:this.search
            },true,{iProjectId:this.iProjectId})

            this.chartData.set6=typeof value=='object'&&value.length>0&&value||[]
            this.chartData.set6.forEach(v=>v.type='mmsaletop')
        },
        showValue(){
            this.drawRing({
                e:this.chart1,
                value:this.chartData.nOrderSameRatio
            })
            this.drawRing({
                e:this.chart2,
                value:this.chartData.nOrderRingRatio
            })
            this.drawLing({
                e:this.chart3,
                value:this.chartData.set3
            })
            this.drawLing2({
                e:this.chart5,
                value:this.chartData.set5
            })
            this.drawLing2({
                e:this.chart6,
                value:this.chartData.set6
            })
        },
        drawRing(data){//仪表盘
            data.e.setOption({
                tooltip : {
                    show:false,
                },
                series: [
                    {
                        type: 'gauge',
                        data: [{value: data.value, name: '比例'}],
                        radius:"90%",
                        min:-100,
                        max:100,
                        title:{
                            fontSize:10
                        },
                        detail:{
                            fontSize:11,
                            formatter:'{value}%',
                            padding:[50,0,0,0],
                        },
                        axisLine:{
                            show:false,
                            lineStyle:{
                                color:[[0.5,'red'],[0.75,'#1CB712'],[0.90,'#156F8E'],[1,'#152989']],
                                width:15
                            }
                        },
                        splitLine:{
                            length:15
                        },
                        axisLabel:{
                            fontSize:9,
                            distance:1,
                        },
                        itemStyle:{
                            opacity:0.3,
                        },
                    }
                ]
            })
        },
        drawLing(data){//折线
            data.e.setOption({
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'cross',
                        crossStyle: {
                            color: '#111'
                        }
                    },
                    formatter:val=>{
                        return data.value[val[0].dataIndex].nAmount
                    }
                },
                toolbox: {
                    feature: {
                        restore: {show: true},
                    },
                },
                grid: {
                    top:30,
                    height:130,
                    right:10,
                },
                xAxis: {
                    type:"category",
                    data:data.value.map(v=>v.sYearMonth),
                    axisPointer:{
                        type:"shadow"
                    },
                    axisTick:{
                        alignWithLabel: true
                    },
                    axisLabel: {
                        interval:0 
                    },
                    minInterval:10,
                },
                yAxis: {
                    type: 'value',
                    name:"金额(万)",
                    offset:-10,
                },
                dataZoom: [{
                    type: 'inside',
                    xAxisIndex: 0,
                    show: false, //flase直接隐藏图形
                    filterMode: 'empty',
                    start: 0,//滚动条的起始位置
                    end: (window.innerWidth*1.15)/data.value.length //滚动条的截止位置（按比例分割你的柱状图x轴长度）
                }],
                series: [
                    {
                        id: 'a',
                        type: 'line',
                        smooth: true,
                        symbolSize: 10,
                        data: data.value.map(v=>v.value),
                        label:{
                            show:true,
                            formatter:val=>{
                                return `${val.data}万`
                            }
                        },
                        itemStyle:{
                            normal:{
                                color:'#708bf6'
                            }
                        }
                    }
                ]
            })
        },
        drawLing2(data){
            data.e.setOption({
                color:['#5cadff','#1c2438'],
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'cross',
                        crossStyle: {
                            color: '#111'
                        }
                    }
                },
                toolbox: {
                    feature: {
                        // dataView: {show: true, readOnly: false},
                        // magicType: {show: true, type: ['line', 'bar']},
                        restore: {show: true},
                        // saveAsImage: {show: true}
                    },
                },
                grid: {
                    left: '2%',   // 与容器左侧的距离
                    right: '2%', // 与容器右侧的距离
                    height:160,
                    containLabel: true
                },
                legend: {
                    data:['金额','数量'],
                    x: 'left'
                },
                xAxis: [{
                    type: 'category',
                    data: data.value.map(v=>`${v.sMaterialNo}\n${v.sColorNo || ''}\n${v.sUnit || ''}`),
                    axisPointer: {
                        type: 'shadow'
                    },
                    axisTick: {
                        alignWithLabel: true
                    },
                    axisLabel: {
                        interval:0 
                    },
                }],
                yAxis: [
                    {
                        type: 'value',
                        name: '金额',
                        axisLabel: {
                            formatter: '{value}'
                        },
                        scale:true,
                        axisLine:{
                            lineStyle:{
                                color:'#5CADFF',
                            }
                        }
                    },
                    {
                        type: 'value',
                        name: '数量',
                        scale:true,
                        axisLabel: {
                            formatter: '{value}'
                        }
                    }
                ],
                series: [
                    {
                        name:'金额',
                        type:'bar',
                        data:data.value.map(v=>v.nAmount),
                        barWidth:32,
                        color:new echarts.graphic.LinearGradient(0.5, 0, 0.5, 1, [{
                                offset: 0,
                                color: '#708bf6'
                            }, {
                                offset: 1,
                                color: '#00B2EE'
                        }])
                    },
                    {
                        name:'数量',
                        type:'line',
                        yAxisIndex: 1,
                        data:data.value.map(v=>v.nQty),
                        itemStyle:{
                            normal:{
                                color:'#708bf6'
                            }
                        }
                    }
                ],
                dataZoom: [{
                    type: 'inside',
                    show: true, //flase直接隐藏图形
                    xAxisIndex: [0],
                    left: '9%', //滚动条靠左侧的百分比
                    start: 0,//滚动条的起始位置
                    end: (window.innerWidth*1.35)/data.value.length //滚动条的截止位置（按比例分割你的柱状图x轴长度）
                }],
            })
        }
    },
}
</script>
