Showing
15 changed files
with
492 additions
and
117 deletions
| ... | ... | @@ -20,9 +20,11 @@ |
| 20 | 20 | "@angular/platform-browser-dynamic": "2.2.1", |
| 21 | 21 | "@angular/platform-server": "2.2.1", |
| 22 | 22 | "@ionic/storage": "^1.1.7", |
| 23 | + "chart.js": "^2.5.0", | |
| 23 | 24 | "ionic-angular": "2.1.0", |
| 24 | 25 | "ionic-native": "2.4.1", |
| 25 | 26 | "ionicons": "3.0.0", |
| 27 | + "ng2-charts": "^1.5.0", | |
| 26 | 28 | "rxjs": "5.0.0-beta.12", |
| 27 | 29 | "sw-toolbox": "3.4.0", |
| 28 | 30 | "zone.js": "0.6.26" | ... | ... |
| ... | ... | @@ -7,8 +7,11 @@ import { QaPage } from '../pages/qa/qa'; |
| 7 | 7 | import { ExtunitPage } from '../pages/extunit/extunit'; |
| 8 | 8 | import { ExtqaPage } from '../pages/extqa/extqa'; |
| 9 | 9 | import { HelpPage } from '../pages/help/help'; |
| 10 | +import { StatusPage } from '../pages/status/status' | |
| 10 | 11 | import { DataService } from '../providers/data-service'; |
| 11 | 12 | import { Storage } from '@ionic/storage'; |
| 13 | +import { ChartsModule } from 'ng2-charts/charts/charts'; | |
| 14 | +import '../../node_modules/chart.js/dist/Chart.bundle.min.js'; | |
| 12 | 15 | |
| 13 | 16 | @NgModule({ |
| 14 | 17 | declarations: [ |
| ... | ... | @@ -18,10 +21,12 @@ import { Storage } from '@ionic/storage'; |
| 18 | 21 | QaPage, |
| 19 | 22 | ExtunitPage, |
| 20 | 23 | ExtqaPage, |
| 21 | - HelpPage | |
| 24 | + HelpPage, | |
| 25 | + StatusPage | |
| 22 | 26 | ], |
| 23 | 27 | imports: [ |
| 24 | - IonicModule.forRoot(MyApp) | |
| 28 | + IonicModule.forRoot(MyApp), | |
| 29 | + ChartsModule | |
| 25 | 30 | ], |
| 26 | 31 | bootstrap: [IonicApp], |
| 27 | 32 | entryComponents: [ |
| ... | ... | @@ -31,7 +36,8 @@ import { Storage } from '@ionic/storage'; |
| 31 | 36 | QaPage, |
| 32 | 37 | ExtunitPage, |
| 33 | 38 | ExtqaPage, |
| 34 | - HelpPage | |
| 39 | + HelpPage, | |
| 40 | + StatusPage | |
| 35 | 41 | ], |
| 36 | 42 | providers: [{ provide: ErrorHandler, useClass: IonicErrorHandler }, Storage, DataService] |
| 37 | 43 | }) | ... | ... |
| ... | ... | @@ -34,6 +34,7 @@ export class ExtqaPage { |
| 34 | 34 | selectstate: Array<boolean> = new Array(); |
| 35 | 35 | subscription; |
| 36 | 36 | screenHeight:number; |
| 37 | + positiveCnt: number; | |
| 37 | 38 | |
| 38 | 39 | constructor(public navCtrl: NavController, public navParams: NavParams, private dataSevice: DataService) { |
| 39 | 40 | this.menuId = navParams.get("menuId"); |
| ... | ... | @@ -47,6 +48,7 @@ export class ExtqaPage { |
| 47 | 48 | this.ds = dataSevice; |
| 48 | 49 | this.nv = navCtrl; |
| 49 | 50 | this.selected = -1; |
| 51 | + this.positiveCnt = 0; | |
| 50 | 52 | for (var i = 0; i < this.qa1.choicesId.length; i++) { |
| 51 | 53 | this.selectstate.push(false); |
| 52 | 54 | } |
| ... | ... | @@ -74,6 +76,7 @@ export class ExtqaPage { |
| 74 | 76 | if (this.selected === this.qa1.answerId) { //正解 |
| 75 | 77 | this.result = "正解"; |
| 76 | 78 | this.resultcolor = "danger"; |
| 79 | + this.positiveCnt++; | |
| 77 | 80 | } |
| 78 | 81 | else { |
| 79 | 82 | this.result = "不正解"; |
| ... | ... | @@ -84,8 +87,10 @@ export class ExtqaPage { |
| 84 | 87 | if (this.index >= (this.qaList.length - 1)) |
| 85 | 88 | { |
| 86 | 89 | var key: string; |
| 90 | + var value: string; | |
| 87 | 91 | key = this.qa1.menuId + ":" + this.qa1.unitId; |
| 88 | - this.dataSevice.saveInfo(key); | |
| 92 | + value = this.positiveCnt + ":" + this.qaList.length; | |
| 93 | + this.dataSevice.saveInfo(key, value); | |
| 89 | 94 | } |
| 90 | 95 | |
| 91 | 96 | var element = document.getElementsByClassName('question-card'); | ... | ... |
| ... | ... | @@ -23,7 +23,7 @@ |
| 23 | 23 | <ion-item (click)="itemSelected(ptn1)"> |
| 24 | 24 | <ion-icon name='ribbon' item-left [color]="list1state[i] != done ? 'secondary' : 'light'"></ion-icon> |
| 25 | 25 | {{ptn1.unitName}} |
| 26 | - <ion-note item-right *ngIf="list1state[i] != done">クリア!</ion-note> | |
| 26 | + <ion-note item-right *ngIf="list1state[i] != done">{{list1state[i]}}</ion-note> | |
| 27 | 27 | <ion-note item-right *ngIf="list1state[i] == done">未実施</ion-note> |
| 28 | 28 | </ion-item> |
| 29 | 29 | </ion-list> | ... | ... |
| ... | ... | @@ -73,8 +73,12 @@ export class ExtunitPage { |
| 73 | 73 | for(var i = 0; i< this.list1num; i++) |
| 74 | 74 | { |
| 75 | 75 | this.list1state[i] = val[i]; |
| 76 | + if(val[i] != null) | |
| 77 | + { | |
| 78 | + var svdata = val[i].toString().split(":"); | |
| 79 | + this.list1state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 80 | + } | |
| 76 | 81 | } |
| 77 | - | |
| 78 | 82 | }); |
| 79 | 83 | } |
| 80 | 84 | } | ... | ... |
| ... | ... | @@ -22,6 +22,12 @@ |
| 22 | 22 | |
| 23 | 23 | <button ion-button full large>1・2年生の復習</button> |
| 24 | 24 | |
| 25 | + <ion-buttons end> | |
| 26 | + <button ion-button center color="danger" round (click)="gotoStatus()" icon-left> | |
| 27 | + <ion-icon name="stats"></ion-icon>達成状況を確認 | |
| 28 | + </button> | |
| 29 | + </ion-buttons> | |
| 30 | + | |
| 25 | 31 | <p *ngFor="let item_f of list_f"> |
| 26 | 32 | <button ion-button color="light" block round (click)="itemSelected(item_f)">{{item_f.title}}</button> |
| 27 | 33 | </p> | ... | ... |
| ... | ... | @@ -3,6 +3,7 @@ import { NavController, NavParams } from 'ionic-angular'; |
| 3 | 3 | import { DataService } from '../../providers/data-service'; |
| 4 | 4 | import { Menu } from '../../providers/define-menu'; |
| 5 | 5 | import { UnitPage } from '../unit/unit'; |
| 6 | +import { StatusPage } from '../status/status'; | |
| 6 | 7 | |
| 7 | 8 | /* |
| 8 | 9 | Generated class for the Menu page. |
| ... | ... | @@ -34,4 +35,8 @@ export class MenuPage { |
| 34 | 35 | itemSelected(item: Menu) { |
| 35 | 36 | this.navCtrl.push(UnitPage, {menuId: item.menuId, title:item.title}); |
| 36 | 37 | } |
| 38 | + | |
| 39 | + gotoStatus() { | |
| 40 | + this.navCtrl.push(StatusPage); | |
| 41 | + } | |
| 37 | 42 | } | ... | ... |
| ... | ... | @@ -34,6 +34,7 @@ export class QaPage { |
| 34 | 34 | selectstate: Array<boolean> = new Array(); |
| 35 | 35 | subscription; |
| 36 | 36 | screenHeight:number; |
| 37 | + positiveCnt: number; | |
| 37 | 38 | |
| 38 | 39 | constructor(public navCtrl: NavController, public navParams: NavParams, private dataSevice: DataService) { |
| 39 | 40 | this.menuId = navParams.get("menuId"); |
| ... | ... | @@ -47,6 +48,7 @@ export class QaPage { |
| 47 | 48 | this.ds = dataSevice; |
| 48 | 49 | this.nv = navCtrl; |
| 49 | 50 | this.selected = -1; |
| 51 | + this.positiveCnt = 0; | |
| 50 | 52 | for (var i = 0; i < this.qa1.choicesId.length; i++) { |
| 51 | 53 | this.selectstate.push(false); |
| 52 | 54 | } |
| ... | ... | @@ -77,6 +79,7 @@ export class QaPage { |
| 77 | 79 | if (this.selected === this.qa1.answerId) { //正解 |
| 78 | 80 | this.result = "正解"; |
| 79 | 81 | this.resultcolor = "danger"; |
| 82 | + this.positiveCnt++; | |
| 80 | 83 | } |
| 81 | 84 | else { |
| 82 | 85 | this.result = "不正解"; |
| ... | ... | @@ -87,8 +90,10 @@ export class QaPage { |
| 87 | 90 | if (this.index >= (this.qaList.length - 1)) |
| 88 | 91 | { |
| 89 | 92 | var key: string; |
| 93 | + var value: string; | |
| 90 | 94 | key = this.qa1.menuId + ":" + this.qa1.unitId; |
| 91 | - this.dataSevice.saveInfo(key); | |
| 95 | + value = this.positiveCnt + ":" + this.qaList.length; | |
| 96 | + this.dataSevice.saveInfo(key, value); | |
| 92 | 97 | } |
| 93 | 98 | |
| 94 | 99 | var element = document.getElementsByClassName('question-card'); | ... | ... |
src/pages/status/status.html
0 → 100644
| 1 | +<!-- | |
| 2 | + Generated template for the Status page. | |
| 3 | + | |
| 4 | + See http://ionicframework.com/docs/v2/components/#navigation for more info on | |
| 5 | + Ionic pages and navigation. | |
| 6 | +--> | |
| 7 | +<ion-header> | |
| 8 | + <ion-navbar color="primary"> | |
| 9 | + <ion-title>達成状況</ion-title> | |
| 10 | + </ion-navbar> | |
| 11 | +</ion-header> | |
| 12 | + | |
| 13 | +<ion-content padding class="status-page"> | |
| 14 | + <ion-item-group> | |
| 15 | + <ion-item-divider color="light">> | |
| 16 | + {{list_f[0].title}} | |
| 17 | + </ion-item-divider> | |
| 18 | + <canvas #baseChart0 height="70" class="status-canvas"></canvas> | |
| 19 | + </ion-item-group> | |
| 20 | + | |
| 21 | + <ion-item-group> | |
| 22 | + <ion-item-divider color="light">> | |
| 23 | + {{list_f[1].title}} | |
| 24 | + </ion-item-divider> | |
| 25 | + <canvas #baseChart1 height="70" class="status-canvas"></canvas> | |
| 26 | + </ion-item-group> | |
| 27 | + | |
| 28 | + <ion-item-group> | |
| 29 | + <ion-item-divider color="light">> | |
| 30 | + {{list_f[2].title}} | |
| 31 | + </ion-item-divider> | |
| 32 | + <canvas #baseChart2 height="70" class="status-canvas"></canvas> | |
| 33 | + </ion-item-group> | |
| 34 | + | |
| 35 | + <ion-item-group> | |
| 36 | + <ion-item-divider color="light">> | |
| 37 | + {{list_f[3].title}} | |
| 38 | + </ion-item-divider> | |
| 39 | + <canvas #baseChart3 height="70" class="status-canvas"></canvas> | |
| 40 | + </ion-item-group> | |
| 41 | + | |
| 42 | + <ion-item-group> | |
| 43 | + <ion-item-divider color="light">> | |
| 44 | + {{list_f[4].title}} | |
| 45 | + </ion-item-divider> | |
| 46 | + <canvas #baseChart4 height="70" class="status-canvas"></canvas> | |
| 47 | + </ion-item-group> | |
| 48 | + | |
| 49 | + <ion-item-group> | |
| 50 | + <ion-item-divider color="light">> | |
| 51 | + {{list_f[5].title}} | |
| 52 | + </ion-item-divider> | |
| 53 | + <canvas #baseChart5 height="70" class="status-canvas"></canvas> | |
| 54 | + </ion-item-group> | |
| 55 | + | |
| 56 | + <ion-item-group> | |
| 57 | + <ion-item-divider color="light">> | |
| 58 | + {{list_f[6].title}} | |
| 59 | + </ion-item-divider> | |
| 60 | + <canvas #baseChart6 height="70" class="status-canvas"></canvas> | |
| 61 | + </ion-item-group> | |
| 62 | + | |
| 63 | + <ion-item-group> | |
| 64 | + <ion-item-divider color="light">> | |
| 65 | + {{list_f[7].title}} | |
| 66 | + </ion-item-divider> | |
| 67 | + <canvas #baseChart7 height="70" class="status-canvas"></canvas> | |
| 68 | + </ion-item-group> | |
| 69 | +</ion-content> | ... | ... |
src/pages/status/status.scss
0 → 100644
src/pages/status/status.ts
0 → 100644
| 1 | +import { Component,ViewChild } from '@angular/core'; | |
| 2 | +import { NavController, NavParams } from 'ionic-angular'; | |
| 3 | +import { Menu } from '../../providers/define-menu'; | |
| 4 | +import { ChartData } from '../../providers/define-chartdata'; | |
| 5 | +import { DataService } from '../../providers/data-service'; | |
| 6 | +import { Chart } from 'chart.js'; | |
| 7 | + | |
| 8 | +/* | |
| 9 | + Generated class for the Status page. | |
| 10 | + | |
| 11 | + See http://ionicframework.com/docs/v2/components/#navigation for more info on | |
| 12 | + Ionic pages and navigation. | |
| 13 | +*/ | |
| 14 | +@Component({ | |
| 15 | + selector: 'page-status', | |
| 16 | + templateUrl: 'status.html' | |
| 17 | +}) | |
| 18 | +export class StatusPage { | |
| 19 | + @ViewChild('baseChart0') barCanvas0; | |
| 20 | + @ViewChild('baseChart1') barCanvas1; | |
| 21 | + @ViewChild('baseChart2') barCanvas2; | |
| 22 | + @ViewChild('baseChart3') barCanvas3; | |
| 23 | + @ViewChild('baseChart4') barCanvas4; | |
| 24 | + @ViewChild('baseChart5') barCanvas5; | |
| 25 | + @ViewChild('baseChart6') barCanvas6; | |
| 26 | + @ViewChild('baseChart7') barCanvas7; | |
| 27 | + | |
| 28 | + list_f: Menu[]; | |
| 29 | + | |
| 30 | + chartOptions: any = { | |
| 31 | + scaleShowVerticalLines: false, | |
| 32 | + responsive: true, | |
| 33 | + legend: { | |
| 34 | + display: false | |
| 35 | + }, | |
| 36 | + tooltips: { | |
| 37 | + enabled: true, | |
| 38 | + callbacks: { | |
| 39 | + label: function(tooltipItem, data) { | |
| 40 | + var allData = data.datasets[tooltipItem.datasetIndex].data; | |
| 41 | + var tooltipLabel = data.datasets[tooltipItem.datasetIndex].label; | |
| 42 | + var tooltipData = allData[tooltipItem.index]; | |
| 43 | + return tooltipLabel + " : " + tooltipData + "%"; | |
| 44 | + } | |
| 45 | + } | |
| 46 | + | |
| 47 | + }, | |
| 48 | + scales: { | |
| 49 | + xAxes: [{ | |
| 50 | + ticks: { | |
| 51 | + beginAtZero:true, | |
| 52 | + min: 0, | |
| 53 | + max: 100, | |
| 54 | + callback: function(value){ | |
| 55 | + return value+'%'; | |
| 56 | + } | |
| 57 | + } | |
| 58 | + }], | |
| 59 | + yAxes: [{ | |
| 60 | + barThickness: 20 | |
| 61 | + }] | |
| 62 | + } | |
| 63 | + | |
| 64 | + }; | |
| 65 | + | |
| 66 | + chartLabels: string[] = new Array(); | |
| 67 | + chartType: string = 'horizontalBar'; | |
| 68 | + chartLegend: boolean = true; | |
| 69 | + chartData: ChartData[] = new Array(); | |
| 70 | + | |
| 71 | + constructor(public navCtrl: NavController, public navParams: NavParams, private dataSevice: DataService) { | |
| 72 | + | |
| 73 | + this.list_f = dataSevice.getMenuFirst(); | |
| 74 | + for(var i = 0; i < this.list_f.length; i++){ | |
| 75 | +// this.chartLabels.push(this.list_f[i].title); | |
| 76 | + } | |
| 77 | + | |
| 78 | + this.chartLabels.push(""); | |
| 79 | + this.getChartData(); | |
| 80 | + } | |
| 81 | + | |
| 82 | + ionViewDidLoad() { | |
| 83 | + console.log('ionViewDidLoad StatusPage'); | |
| 84 | + } | |
| 85 | + | |
| 86 | + getChart(context) { | |
| 87 | + let data = { | |
| 88 | + labels: this.chartLabels, | |
| 89 | + datasets: this.chartData | |
| 90 | + } | |
| 91 | + | |
| 92 | + return new Chart(context, { | |
| 93 | + type: this.chartType, | |
| 94 | + data: data, | |
| 95 | + options: this.chartOptions | |
| 96 | + }); | |
| 97 | + } | |
| 98 | + | |
| 99 | + getChartData() { | |
| 100 | + | |
| 101 | + var promiseArray1 = new Array(); | |
| 102 | + for (var i = 0; i < this.list_f.length; i++) { | |
| 103 | + var key: string; | |
| 104 | + key = this.list_f[i].menuId.toString(); | |
| 105 | + promiseArray1.push(this.dataSevice.getInfo(key)); | |
| 106 | + } | |
| 107 | + | |
| 108 | + Promise.all(promiseArray1) | |
| 109 | + .then(val => | |
| 110 | + { | |
| 111 | + for(var i = 0; i< this.list_f.length; i++) | |
| 112 | + { | |
| 113 | + var cdata: ChartData = { label:'正答率', | |
| 114 | + data: new Array(), | |
| 115 | + backgroundColor:['rgba(255, 99, 132, 0.2)'], | |
| 116 | + borderColor:['rgba(255,99,132,1)'], | |
| 117 | + borderWidth:2 }; | |
| 118 | + var num: number; | |
| 119 | + var score: number; | |
| 120 | + if(val[i] == null) | |
| 121 | + { | |
| 122 | + num = 0; | |
| 123 | + } | |
| 124 | + else | |
| 125 | + { | |
| 126 | + num = +val[i]; | |
| 127 | + } | |
| 128 | + score = Math.floor((num / this.dataSevice.getQaCnt(this.list_f[i].menuId)) * 100); | |
| 129 | +// score = 10*i + 10; | |
| 130 | + cdata.data.push(score); | |
| 131 | + this.chartData = new Array(); | |
| 132 | + this.chartData.push(cdata); | |
| 133 | + this.getChart(this.getCanvas(i).nativeElement); | |
| 134 | + } | |
| 135 | + | |
| 136 | + }); | |
| 137 | + } | |
| 138 | + | |
| 139 | + getCanvas(num:number) : any{ | |
| 140 | + | |
| 141 | + switch(num){ | |
| 142 | + case 0: | |
| 143 | + return this.barCanvas0; | |
| 144 | + case 1: | |
| 145 | + return this.barCanvas1; | |
| 146 | + case 2: | |
| 147 | + return this.barCanvas2; | |
| 148 | + case 3: | |
| 149 | + return this.barCanvas3; | |
| 150 | + case 4: | |
| 151 | + return this.barCanvas4; | |
| 152 | + case 5: | |
| 153 | + return this.barCanvas5; | |
| 154 | + case 6: | |
| 155 | + return this.barCanvas6; | |
| 156 | + case 7: | |
| 157 | + return this.barCanvas7; | |
| 158 | + } | |
| 159 | + } | |
| 160 | +} | ... | ... |
| ... | ... | @@ -57,10 +57,10 @@ |
| 57 | 57 | |
| 58 | 58 | <ion-list class="unit-list" padding> |
| 59 | 59 | <ion-item *ngFor="let ptn1 of list1; let i = index;" (click)="itemSelected(ptn1)"> |
| 60 | - <ion-icon name='ribbon' item-left [color]="list1state[i] != done ? 'secondary' : 'light'"></ion-icon> | |
| 60 | + <ion-icon name='ribbon' item-left [color]="list1state[i] != null ? 'secondary' : 'light'"></ion-icon> | |
| 61 | 61 | {{ptn1.unitName}} |
| 62 | - <ion-note item-right *ngIf="list1state[i] != done">クリア!</ion-note> | |
| 63 | - <ion-note item-right *ngIf="list1state[i] == done">未実施</ion-note> | |
| 62 | + <ion-note item-right *ngIf="list1state[i] != null">{{list1state[i]}}</ion-note> | |
| 63 | + <ion-note item-right *ngIf="list1state[i] == null">未実施</ion-note> | |
| 64 | 64 | </ion-item> |
| 65 | 65 | </ion-list> |
| 66 | 66 | </ion-card> |
| ... | ... | @@ -85,10 +85,10 @@ |
| 85 | 85 | |
| 86 | 86 | <ion-list class="unit-list" *ngIf="list2dsp" padding> |
| 87 | 87 | <ion-item *ngFor="let ptn2 of list2; let i = index;" (click)="itemSelected(ptn2)"> |
| 88 | - <ion-icon name='ribbon' item-left [color]="list2state[i] != done ? 'secondary' : 'light'"></ion-icon> | |
| 88 | + <ion-icon name='ribbon' item-left [color]="list2state[i] != null ? 'secondary' : 'light'"></ion-icon> | |
| 89 | 89 | {{ptn2.unitName}} |
| 90 | - <ion-note item-right *ngIf="list2state[i] != done">クリア!</ion-note> | |
| 91 | - <ion-note item-right *ngIf="list2state[i] == done">未実施</ion-note> | |
| 90 | + <ion-note item-right *ngIf="list2state[i] != null">{{list2state[i]}}</ion-note> | |
| 91 | + <ion-note item-right *ngIf="list2state[i] == null">未実施</ion-note> | |
| 92 | 92 | </ion-item> |
| 93 | 93 | </ion-list> |
| 94 | 94 | </ion-card> |
| ... | ... | @@ -113,10 +113,10 @@ |
| 113 | 113 | |
| 114 | 114 | <ion-list class="unit-list" *ngIf="list3dsp" padding> |
| 115 | 115 | <ion-item *ngFor="let ptn3 of list3; let i = index;" (click)="itemSelected(ptn3)"> |
| 116 | - <ion-icon name='ribbon' item-left [color]="list3state[i] != done ? 'secondary' : 'light'"></ion-icon> | |
| 116 | + <ion-icon name='ribbon' item-left [color]="list3state[i] != null ? 'secondary' : 'light'"></ion-icon> | |
| 117 | 117 | {{ptn3.unitName}} |
| 118 | - <ion-note item-right *ngIf="list3state[i] != done">クリア!</ion-note> | |
| 119 | - <ion-note item-right *ngIf="list3state[i] == done">未実施</ion-note> | |
| 118 | + <ion-note item-right *ngIf="list3state[i] != null">{{list3state[i]}}</ion-note> | |
| 119 | + <ion-note item-right *ngIf="list3state[i] == null">未実施</ion-note> | |
| 120 | 120 | </ion-item> |
| 121 | 121 | </ion-list> |
| 122 | 122 | </ion-card> |
| ... | ... | @@ -141,10 +141,10 @@ |
| 141 | 141 | |
| 142 | 142 | <ion-list class="unit-list" *ngIf="list4dsp" padding> |
| 143 | 143 | <ion-item *ngFor="let ptn4 of list4; let i = index;" (click)="itemSelected(ptn4)"> |
| 144 | - <ion-icon name='ribbon' item-left [color]="list4state[i] != done ? 'secondary' : 'light'"></ion-icon> | |
| 144 | + <ion-icon name='ribbon' item-left [color]="list4state[i] != null ? 'secondary' : 'light'"></ion-icon> | |
| 145 | 145 | {{ptn4.unitName}} |
| 146 | - <ion-note item-right *ngIf="list4state[i] != done">クリア!</ion-note> | |
| 147 | - <ion-note item-right *ngIf="list4state[i] == done">未実施</ion-note> | |
| 146 | + <ion-note item-right *ngIf="list4state[i] != null">{{list4state[i]}}</ion-note> | |
| 147 | + <ion-note item-right *ngIf="list4state[i] == null">未実施</ion-note> | |
| 148 | 148 | </ion-item> |
| 149 | 149 | </ion-list> |
| 150 | 150 | </ion-card> |
| ... | ... | @@ -169,10 +169,10 @@ |
| 169 | 169 | |
| 170 | 170 | <ion-list class="unit-list" *ngIf="list5dsp" padding> |
| 171 | 171 | <ion-item *ngFor="let ptn5 of list5; let i = index;" (click)="itemSelected(ptn5)"> |
| 172 | - <ion-icon name='ribbon' item-left [color]="list5state[i] != done ? 'secondary' : 'light'"></ion-icon> | |
| 172 | + <ion-icon name='ribbon' item-left [color]="list5state[i] != null ? 'secondary' : 'light'"></ion-icon> | |
| 173 | 173 | {{ptn5.unitName}} |
| 174 | - <ion-note item-right *ngIf="list5state[i] != done">クリア!</ion-note> | |
| 175 | - <ion-note item-right *ngIf="list5state[i] == done">未実施</ion-note> | |
| 174 | + <ion-note item-right *ngIf="list5state[i] != null">{{list5state[i]}}</ion-note> | |
| 175 | + <ion-note item-right *ngIf="list5state[i] == null">未実施</ion-note> | |
| 176 | 176 | </ion-item> |
| 177 | 177 | </ion-list> |
| 178 | 178 | </ion-card> |
| ... | ... | @@ -197,10 +197,10 @@ |
| 197 | 197 | |
| 198 | 198 | <ion-list class="unit-list" *ngIf="list6dsp" padding> |
| 199 | 199 | <ion-item *ngFor="let ptn6 of list6; let i = index;" (click)="itemSelected(ptn6)"> |
| 200 | - <ion-icon name='ribbon' item-left [color]="list6state[i] != done ? 'secondary' : 'light'"></ion-icon> | |
| 200 | + <ion-icon name='ribbon' item-left [color]="list6state[i] != null ? 'secondary' : 'light'"></ion-icon> | |
| 201 | 201 | {{ptn6.unitName}} |
| 202 | - <ion-note item-right *ngIf="list6state[i] != done">クリア!</ion-note> | |
| 203 | - <ion-note item-right *ngIf="list6state[i] == done">未実施</ion-note> | |
| 202 | + <ion-note item-right *ngIf="list6state[i] != null">{{list6state[i]}}</ion-note> | |
| 203 | + <ion-note item-right *ngIf="list6state[i] == null">未実施</ion-note> | |
| 204 | 204 | </ion-item> |
| 205 | 205 | </ion-list> |
| 206 | 206 | </ion-card> |
| ... | ... | @@ -225,10 +225,10 @@ |
| 225 | 225 | |
| 226 | 226 | <ion-list class="unit-list" *ngIf="list7dsp" padding> |
| 227 | 227 | <ion-item *ngFor="let ptn7 of list7; let i = index;" (click)="itemSelected(ptn7)"> |
| 228 | - <ion-icon name='ribbon' item-left [color]="list7state[i] != done ? 'secondary' : 'light'"></ion-icon> | |
| 228 | + <ion-icon name='ribbon' item-left [color]="list7state[i] != null ? 'secondary' : 'light'"></ion-icon> | |
| 229 | 229 | {{ptn7.unitName}} |
| 230 | - <ion-note item-right *ngIf="list7state[i] != done">クリア!</ion-note> | |
| 231 | - <ion-note item-right *ngIf="list7state[i] == done">未実施</ion-note> | |
| 230 | + <ion-note item-right *ngIf="list7state[i] != null">{{list7state[i]}}</ion-note> | |
| 231 | + <ion-note item-right *ngIf="list7state[i] == null">未実施</ion-note> | |
| 232 | 232 | </ion-item> |
| 233 | 233 | </ion-list> |
| 234 | 234 | </ion-card> | ... | ... |
| ... | ... | @@ -72,6 +72,14 @@ export class UnitPage { |
| 72 | 72 | |
| 73 | 73 | stageStateKey: string; |
| 74 | 74 | |
| 75 | + positiveCnt1: number; | |
| 76 | + positiveCnt2: number; | |
| 77 | + positiveCnt3: number; | |
| 78 | + positiveCnt4: number; | |
| 79 | + positiveCnt5: number; | |
| 80 | + positiveCnt6: number; | |
| 81 | + positiveCnt7: number; | |
| 82 | + | |
| 75 | 83 | constructor(public navCtrl: NavController, private navParams: NavParams, |
| 76 | 84 | public alertCtrl: AlertController, public toastCtrl: ToastController, private dataSevice: DataService) { |
| 77 | 85 | |
| ... | ... | @@ -80,6 +88,13 @@ export class UnitPage { |
| 80 | 88 | this.stageStateKey = "stageState" + this.menuId; |
| 81 | 89 | |
| 82 | 90 | this.currentItem = null; |
| 91 | + this.positiveCnt1 = 0; | |
| 92 | + this.positiveCnt2 = 0; | |
| 93 | + this.positiveCnt3 = 0; | |
| 94 | + this.positiveCnt4 = 0; | |
| 95 | + this.positiveCnt5 = 0; | |
| 96 | + this.positiveCnt6 = 0; | |
| 97 | + this.positiveCnt7 = 0; | |
| 83 | 98 | |
| 84 | 99 | this.list2dsp = false; |
| 85 | 100 | this.list3dsp = false; |
| ... | ... | @@ -179,6 +194,17 @@ export class UnitPage { |
| 179 | 194 | console.log('ionViewDidLoad UnitPage'); |
| 180 | 195 | } |
| 181 | 196 | |
| 197 | + ionViewWillLeave(){ | |
| 198 | + var key: string; | |
| 199 | + var value: string; | |
| 200 | + key = this.menuId.toString(); | |
| 201 | + value = (this.positiveCnt1 + this.positiveCnt2 | |
| 202 | + + this.positiveCnt3 + this.positiveCnt4 | |
| 203 | + + this.positiveCnt5 + this.positiveCnt6 | |
| 204 | + + this.positiveCnt7).toString(); | |
| 205 | + this.dataSevice.savePositiveInfo(key, value); | |
| 206 | + } | |
| 207 | + | |
| 182 | 208 | itemSelected(item: Unit) { |
| 183 | 209 | this.currentItem = item; |
| 184 | 210 | this.navCtrl.push(QaPage,{menuId: this.menuId, unitId: item.unitId, title: item.unitName}); |
| ... | ... | @@ -242,7 +268,7 @@ export class UnitPage { |
| 242 | 268 | { |
| 243 | 269 | msg = "次のステージを獲得しました!" |
| 244 | 270 | this.isOpenNext = true; |
| 245 | - this.dataSevice.saveInfo(this.stageStateKey); | |
| 271 | + this.dataSevice.saveDone(this.stageStateKey); | |
| 246 | 272 | } |
| 247 | 273 | |
| 248 | 274 | const toast = this.toastCtrl.create({ |
| ... | ... | @@ -283,6 +309,12 @@ export class UnitPage { |
| 283 | 309 | { |
| 284 | 310 | alldone = false; |
| 285 | 311 | } |
| 312 | + else | |
| 313 | + { | |
| 314 | + var svdata = val[i].toString().split(":"); | |
| 315 | + this.list1state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 316 | + this.positiveCnt1 = +svdata[0]; | |
| 317 | + } | |
| 286 | 318 | } |
| 287 | 319 | |
| 288 | 320 | if(alldone) |
| ... | ... | @@ -293,120 +325,144 @@ export class UnitPage { |
| 293 | 325 | }); |
| 294 | 326 | break; |
| 295 | 327 | case 2: |
| 296 | - var promiseArray2 = new Array(); | |
| 297 | - for (var i = 0; i < this.list2num; i++) { | |
| 298 | - var key: string; | |
| 299 | - key = this.menuId + ":" + this.list2[i].unitId; | |
| 300 | - promiseArray2.push(this.dataSevice.getInfo(key)); | |
| 301 | - } | |
| 328 | + var promiseArray2 = new Array(); | |
| 329 | + for (var i = 0; i < this.list2num; i++) { | |
| 330 | + var key: string; | |
| 331 | + key = this.menuId + ":" + this.list2[i].unitId; | |
| 332 | + promiseArray2.push(this.dataSevice.getInfo(key)); | |
| 333 | + } | |
| 302 | 334 | |
| 303 | - Promise.all(promiseArray2) | |
| 304 | - .then(val => | |
| 305 | - { | |
| 306 | - var alldone = true; | |
| 307 | - for(var i = 0; i< this.list2num; i++) | |
| 335 | + Promise.all(promiseArray2) | |
| 336 | + .then(val => | |
| 308 | 337 | { |
| 309 | - this.list2state[i] = val[i]; | |
| 310 | - if(val[i] == null) | |
| 338 | + var alldone = true; | |
| 339 | + for(var i = 0; i< this.list2num; i++) | |
| 311 | 340 | { |
| 312 | - alldone = false; | |
| 341 | + this.list2state[i] = val[i]; | |
| 342 | + if(val[i] == null) | |
| 343 | + { | |
| 344 | + alldone = false; | |
| 345 | + } | |
| 346 | + else | |
| 347 | + { | |
| 348 | + var svdata = val[i].toString().split(":"); | |
| 349 | + this.list2state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 350 | + this.positiveCnt2 = +svdata[0]; | |
| 351 | + } | |
| 313 | 352 | } |
| 314 | - } | |
| 315 | 353 | |
| 316 | - if(alldone) | |
| 317 | - { | |
| 318 | - this.openkeyword2 = true; | |
| 319 | - this.list3dsp = true; | |
| 320 | - } | |
| 321 | - }); | |
| 354 | + if(alldone) | |
| 355 | + { | |
| 356 | + this.openkeyword2 = true; | |
| 357 | + this.list3dsp = true; | |
| 358 | + } | |
| 359 | + }); | |
| 322 | 360 | |
| 323 | 361 | break; |
| 324 | 362 | case 3: |
| 325 | - var promiseArray3 = new Array(); | |
| 326 | - for (var i = 0; i < this.list3num; i++) { | |
| 327 | - var key: string; | |
| 328 | - key = this.menuId + ":" + this.list3[i].unitId; | |
| 329 | - promiseArray3.push(this.dataSevice.getInfo(key)); | |
| 330 | - } | |
| 363 | + var promiseArray3 = new Array(); | |
| 364 | + for (var i = 0; i < this.list3num; i++) { | |
| 365 | + var key: string; | |
| 366 | + key = this.menuId + ":" + this.list3[i].unitId; | |
| 367 | + promiseArray3.push(this.dataSevice.getInfo(key)); | |
| 368 | + } | |
| 331 | 369 | |
| 332 | - Promise.all(promiseArray3) | |
| 333 | - .then(val => | |
| 334 | - { | |
| 335 | - var alldone = true; | |
| 336 | - for(var i = 0; i< this.list3num; i++) | |
| 370 | + Promise.all(promiseArray3) | |
| 371 | + .then(val => | |
| 337 | 372 | { |
| 338 | - this.list3state[i] = val[i]; | |
| 339 | - if(val[i] == null) | |
| 373 | + var alldone = true; | |
| 374 | + for(var i = 0; i< this.list3num; i++) | |
| 340 | 375 | { |
| 341 | - alldone = false; | |
| 376 | + this.list3state[i] = val[i]; | |
| 377 | + if(val[i] == null) | |
| 378 | + { | |
| 379 | + alldone = false; | |
| 380 | + } | |
| 381 | + else | |
| 382 | + { | |
| 383 | + var svdata = val[i].toString().split(":"); | |
| 384 | + this.list3state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 385 | + this.positiveCnt3 = +svdata[0]; | |
| 386 | + } | |
| 342 | 387 | } |
| 343 | - } | |
| 344 | 388 | |
| 345 | - if(alldone) | |
| 346 | - { | |
| 347 | - this.openkeyword3 = true; | |
| 348 | - this.list4dsp = true; | |
| 349 | - } | |
| 350 | - }); | |
| 389 | + if(alldone) | |
| 390 | + { | |
| 391 | + this.openkeyword3 = true; | |
| 392 | + this.list4dsp = true; | |
| 393 | + } | |
| 394 | + }); | |
| 351 | 395 | |
| 352 | - break; | |
| 396 | + break; | |
| 353 | 397 | case 4: |
| 354 | - var promiseArray4 = new Array(); | |
| 355 | - for (var i = 0; i < this.list4num; i++) { | |
| 356 | - var key: string; | |
| 357 | - key = this.menuId + ":" + this.list4[i].unitId; | |
| 358 | - promiseArray4.push(this.dataSevice.getInfo(key)); | |
| 359 | - } | |
| 398 | + var promiseArray4 = new Array(); | |
| 399 | + for (var i = 0; i < this.list4num; i++) { | |
| 400 | + var key: string; | |
| 401 | + key = this.menuId + ":" + this.list4[i].unitId; | |
| 402 | + promiseArray4.push(this.dataSevice.getInfo(key)); | |
| 403 | + } | |
| 360 | 404 | |
| 361 | - Promise.all(promiseArray4) | |
| 362 | - .then(val => | |
| 363 | - { | |
| 364 | - var alldone = true; | |
| 365 | - for(var i = 0; i< this.list4num; i++) | |
| 405 | + Promise.all(promiseArray4) | |
| 406 | + .then(val => | |
| 366 | 407 | { |
| 367 | - this.list4state[i] = val[i]; | |
| 368 | - if(val[i] == null) | |
| 408 | + var alldone = true; | |
| 409 | + for(var i = 0; i< this.list4num; i++) | |
| 369 | 410 | { |
| 370 | - alldone = false; | |
| 411 | + this.list4state[i] = val[i]; | |
| 412 | + if(val[i] == null) | |
| 413 | + { | |
| 414 | + alldone = false; | |
| 415 | + } | |
| 416 | + else | |
| 417 | + { | |
| 418 | + var svdata = val[i].toString().split(":"); | |
| 419 | + this.list4state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 420 | + this.positiveCnt4 = +svdata[0]; | |
| 421 | + } | |
| 371 | 422 | } |
| 372 | - } | |
| 373 | 423 | |
| 374 | - if(alldone) | |
| 375 | - { | |
| 376 | - this.openkeyword4 = true; | |
| 377 | - this.list5dsp = true; | |
| 378 | - } | |
| 379 | - }); | |
| 380 | - break; | |
| 424 | + if(alldone) | |
| 425 | + { | |
| 426 | + this.openkeyword4 = true; | |
| 427 | + this.list5dsp = true; | |
| 428 | + } | |
| 429 | + }); | |
| 430 | + break; | |
| 381 | 431 | case 5: |
| 382 | 432 | |
| 383 | - var promiseArray5 = new Array(); | |
| 384 | - for (var i = 0; i < this.list5num; i++) { | |
| 385 | - var key: string; | |
| 386 | - key = this.menuId + ":" + this.list5[i].unitId; | |
| 387 | - promiseArray5.push(this.dataSevice.getInfo(key)); | |
| 388 | - } | |
| 433 | + var promiseArray5 = new Array(); | |
| 434 | + for (var i = 0; i < this.list5num; i++) { | |
| 435 | + var key: string; | |
| 436 | + key = this.menuId + ":" + this.list5[i].unitId; | |
| 437 | + promiseArray5.push(this.dataSevice.getInfo(key)); | |
| 438 | + } | |
| 389 | 439 | |
| 390 | - Promise.all(promiseArray5) | |
| 391 | - .then(val => | |
| 392 | - { | |
| 393 | - var alldone = true; | |
| 394 | - for(var i = 0; i< this.list5num; i++) | |
| 440 | + Promise.all(promiseArray5) | |
| 441 | + .then(val => | |
| 395 | 442 | { |
| 396 | - this.list5state[i] = val[i]; | |
| 397 | - if(val[i] == null) | |
| 443 | + var alldone = true; | |
| 444 | + for(var i = 0; i< this.list5num; i++) | |
| 398 | 445 | { |
| 399 | - alldone = false; | |
| 446 | + this.list5state[i] = val[i]; | |
| 447 | + if(val[i] == null) | |
| 448 | + { | |
| 449 | + alldone = false; | |
| 450 | + } | |
| 451 | + else | |
| 452 | + { | |
| 453 | + var svdata = val[i].toString().split(":"); | |
| 454 | + this.list5state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 455 | + this.positiveCnt5 = +svdata[0]; | |
| 456 | + } | |
| 400 | 457 | } |
| 401 | - } | |
| 402 | 458 | |
| 403 | - if(alldone) | |
| 404 | - { | |
| 405 | - this.openkeyword5 = true; | |
| 406 | - this.list6dsp = true; | |
| 407 | - } | |
| 408 | - }); | |
| 409 | - break; | |
| 459 | + if(alldone) | |
| 460 | + { | |
| 461 | + this.openkeyword5 = true; | |
| 462 | + this.list6dsp = true; | |
| 463 | + } | |
| 464 | + }); | |
| 465 | + break; | |
| 410 | 466 | case 6: |
| 411 | 467 | var promiseArray6 = new Array(); |
| 412 | 468 | for (var i = 0; i < this.list6num; i++) { |
| ... | ... | @@ -426,6 +482,12 @@ export class UnitPage { |
| 426 | 482 | { |
| 427 | 483 | alldone = false; |
| 428 | 484 | } |
| 485 | + else | |
| 486 | + { | |
| 487 | + var svdata = val[i].toString().split(":"); | |
| 488 | + this.list6state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 489 | + this.positiveCnt6 = +svdata[0]; | |
| 490 | + } | |
| 429 | 491 | } |
| 430 | 492 | |
| 431 | 493 | if(alldone) |
| ... | ... | @@ -454,6 +516,12 @@ export class UnitPage { |
| 454 | 516 | { |
| 455 | 517 | alldone = false; |
| 456 | 518 | } |
| 519 | + else | |
| 520 | + { | |
| 521 | + var svdata = val[i].toString().split(":"); | |
| 522 | + this.list7state[i] = svdata[1] + "問中" + svdata[0] + "問正解!"; | |
| 523 | + this.positiveCnt7 = +svdata[0]; | |
| 524 | + } | |
| 457 | 525 | } |
| 458 | 526 | |
| 459 | 527 | if(alldone) | ... | ... |
| ... | ... | @@ -100,6 +100,15 @@ export class DataService { |
| 100 | 100 | return subjectList; |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | + public getQaCnt(menuId:number): number { | |
| 104 | + var num = 0; | |
| 105 | + for (var i = 0; i < this.subject.length; i++) { | |
| 106 | + if (this.subject[i].menuId === menuId) { | |
| 107 | + num++; | |
| 108 | + } | |
| 109 | + } | |
| 110 | + return num; | |
| 111 | + } | |
| 103 | 112 | |
| 104 | 113 | public getQa(menuId: number, unitId: number): Qa[] { |
| 105 | 114 | var qaItem: Qa[] = new Array(); |
| ... | ... | @@ -131,7 +140,7 @@ export class DataService { |
| 131 | 140 | return key; |
| 132 | 141 | } |
| 133 | 142 | |
| 134 | - public saveInfo(key: string) { | |
| 143 | + public saveDone(key: string) { | |
| 135 | 144 | this.st.get(key).then(val => { |
| 136 | 145 | if (val == "done") { |
| 137 | 146 | } else { |
| ... | ... | @@ -140,6 +149,27 @@ export class DataService { |
| 140 | 149 | }); |
| 141 | 150 | } |
| 142 | 151 | |
| 152 | + public saveInfo(key: string, value: string) { | |
| 153 | + this.st.get(key).then(val => { | |
| 154 | + if (val == null) { | |
| 155 | + this.st.set(key, value); | |
| 156 | + } else { | |
| 157 | + var svdata = val.toString().split(":"); | |
| 158 | + var nwdata = value.split(":"); | |
| 159 | + if(+svdata[0] < +nwdata[0]) | |
| 160 | + { | |
| 161 | + this.st.set(key, value); | |
| 162 | + } | |
| 163 | + } | |
| 164 | + }); | |
| 165 | + } | |
| 166 | + | |
| 167 | + public savePositiveInfo(key: string, value: string) { | |
| 168 | + this.st.get(key).then(val => { | |
| 169 | + this.st.set(key, value); | |
| 170 | + }); | |
| 171 | + } | |
| 172 | + | |
| 143 | 173 | public getInfo(key: string): any { |
| 144 | 174 | return this.st.get(key); |
| 145 | 175 | } | ... | ... |
Please
register
or
login
to post a comment