status.ts 4.65 KB
import { Component,ViewChild } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { Menu } from '../../providers/define-menu';
import { ChartData } from '../../providers/define-chartdata';
import { DataService } from '../../providers/data-service';
import { Chart } from 'chart.js';

/*
  Generated class for the Status page.

  See http://ionicframework.com/docs/v2/components/#navigation for more info on
  Ionic pages and navigation.
*/
@Component({
  selector: 'page-status',
  templateUrl: 'status.html'
})
export class StatusPage {
  @ViewChild('baseChart0') barCanvas0;
  @ViewChild('baseChart1') barCanvas1;
  @ViewChild('baseChart2') barCanvas2;
  @ViewChild('baseChart3') barCanvas3;
  @ViewChild('baseChart4') barCanvas4;
  @ViewChild('baseChart5') barCanvas5;
  @ViewChild('baseChart6') barCanvas6;
  @ViewChild('baseChart7') barCanvas7;

  list_f: Menu[];

  chartOptions: any = {
    scaleShowVerticalLines: false,
    responsive: true,
    legend: {
            display: false
    },
    tooltips: {
            enabled: true,
            callbacks: {
				label: function(tooltipItem, data) {
                    var allData = data.datasets[tooltipItem.datasetIndex].data;
                    var tooltipLabel = data.datasets[tooltipItem.datasetIndex].label;
                    var tooltipData = allData[tooltipItem.index];
					return tooltipLabel + " : " + tooltipData + "%";
				}
            }

    },
    scales: {
        xAxes: [{
            ticks: {
                beginAtZero:true,
                min: 0,
                max: 100,
                callback: function(value){
                  return value+'%';
                }
            }
        }],
        yAxes: [{
            barThickness: 30
        }]
    }

  };
 
  chartLabels: string[] = new Array();
  chartType: string = 'horizontalBar';
  chartLegend: boolean = true;
  chartData: ChartData[] = new Array();
 
  constructor(public navCtrl: NavController, public navParams: NavParams, private dataSevice: DataService) {

    this.list_f = dataSevice.getMenuFirst();

//    this.chartLabels.push("");
    this.chartLabels.push("基礎");
    this.chartLabels.push("応用");

    this.getChartData();
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad StatusPage');
  }

  getChart(context) {
    let data = {
      labels: this.chartLabels,
      datasets: this.chartData
    }

    return new Chart(context, {
      type:   this.chartType,
      data:   data,
      options: this.chartOptions
    });
  }

  getChartData() {

    var promiseArray1 = new Array();
    for (var i = 0; i < this.list_f.length; i++) {
      var key: string;
      key = this.list_f[i].menuId.toString();
      promiseArray1.push(this.dataSevice.getInfo(key));
      promiseArray1.push(this.dataSevice.getInfo(key+"ext"));
    }

    Promise.all(promiseArray1)
    .then(val =>
    {
      for(var i = 0; i< (this.list_f.length * 2); i++)
      {
          var cdata: ChartData = { label:'正答率', 
                                   data: new Array(),
                                   backgroundColor:['rgba(255, 99, 132, 0.2)','rgba(255, 159, 64, 0.2)'],
                                   borderColor:['rgba(255,99,132,1)','rgba(255, 159, 64, 1)'],
                                   borderWidth:2 };
          var num: number;
          var score: number;
          var numext: number;
          var scoreext: number;
          if(val[i] == null)
          {
            num = 0;
          }
          else
          {
            num = +val[i];
          }
          if(val[i+1] == null)
          {
            numext = 0;
          }
          else
          {
            numext = +val[i+1];
          }
          score = Math.floor((num / this.dataSevice.getQaCnt(this.list_f[i / 2].menuId)) * 100);
//          score = 10*i + 10;
          scoreext = Math.floor((numext / this.dataSevice.getExtQaCnt(this.list_f[i / 2].menuId)) * 100);
          cdata.data.push(score);
          cdata.data.push(scoreext);

          this.chartData = new Array();
          this.chartData.push(cdata);
          this.getChart(this.getCanvas(i / 2).nativeElement);

          i++;
      }

    });
  }

  getCanvas(num:number) : any{

      switch(num){
          case 0:
              return this.barCanvas0;
          case 1:
              return this.barCanvas1;
          case 2:
              return this.barCanvas2;
          case 3:
              return this.barCanvas3;
          case 4:
              return this.barCanvas4;
          case 5:
              return this.barCanvas5;
          case 6:
              return this.barCanvas6;
          case 7:
              return this.barCanvas7;
      }
  }
}