Commit de1e2867 authored by yating.lin's avatar yating.lin

接口调试

parent eba7dfa5
......@@ -8,20 +8,20 @@
</ion-header>
<ion-content style="background-color: #F3F4F4;">
<div style="max-height: calc(100% - 100px);overflow-y:auto;">
<ion-item-sliding *ngFor="let cfg of controlConfig">
<ion-item-sliding *ngFor="let allCfg of controlConfig">
<ion-item class="fanItem">
<ion-grid>
<ion-row style="width: 100%">
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">模式名</ion-label>
<ion-input class="inputText" [(ngModel)]="cfg.name" style="width:80px;"></ion-input>
<ion-input class="inputText" [(ngModel)]="allCfg.config.name" style="width:80px;"></ion-input>
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">间隔时间</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.interval"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.interval"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
......@@ -30,7 +30,7 @@
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">设置温度</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.T" (ionFocus)="tempHaveTouch($event)"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.T" (ionFocus)="tempHaveTouch($event)"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
......@@ -39,14 +39,14 @@
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">A区喷淋时间</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.A"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.A"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">B区喷淋时间</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.B"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.B"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
......@@ -55,7 +55,7 @@
</ion-item>
<ion-item-options side="end">
<div style="text-content: center; background-color: lightgray;">
<ion-icon name="remove-circle" color='danger' class="deleteIcon" (click)="deleteModel(cfg)" style="margin-top: 120px;"></ion-icon>
<ion-icon name="remove-circle" color='danger' class="deleteIcon" (click)="deleteModel(allCfg.config)" style="margin-top: 120px;"></ion-icon>
</div>
</ion-item-options>
</ion-item-sliding>
......
import {Component, OnInit} from '@angular/core';
import {Api} from '../../service/api';
import {NavController, PickerController} from '@ionic/angular';
import {ActivatedRoute} from '@angular/router';
import {Load} from '../../service/load';
import {Transfer} from '../../service/transfer';
@Component({
selector: 'v-env-add-model',
......@@ -25,18 +21,21 @@ export class EnvAddModelPage implements OnInit {
}
init() {
this.controlConfig = [{id: 1, name: '', interval: '', T: '', A: '', B: ''}];
this.controlConfig = [{id: 1, config: {id: 1, name: '', interval: '', T: '', A: '', B: ''}}];
}
addModel() {
const modelCount = this.controlConfig.length;
this.controlConfig.push({id: modelCount + 1, name: '', interval: '', T: '', A: '', B: ''});
this.controlConfig.push({id: modelCount + 1, config: {id: modelCount + 1, name: '', interval: '', T: '', A: '', B: ''}});
}
deleteModel(one) {
const updateModel = this.controlConfig.filter(data => data.id !== one.id);
this.controlConfig = updateModel;
this.controlConfig.forEach((item, index) => item.id = index + 1);
this.controlConfig.forEach((item, index) => {
item.id = index + 1;
item.config.id = index + 1;
});
}
saveModels() {
......
......@@ -36,7 +36,7 @@
}
.popLabel {
width: 120px;
// width: 120px;
font-size: 15px;
--padding-start: 5px;
--padding-end: 5px;
......@@ -45,7 +45,7 @@
}
.popContent {
width: 135px !important;
// width: 135px !important;
margin-bottom:5px;
margin-right:5px;
--padding-start: 5px;
......
......@@ -102,7 +102,7 @@
}
.popContent {
width: 135px !important;
// width: 135px !important;
margin-bottom:5px;
margin-right:5px;
--padding-start: 5px;
......
......@@ -71,20 +71,20 @@ export class EnvAlarmPage implements OnInit {
connectedCallback() {
this.innerHTML = `
<ion-list class="popContent">
<ion-radio-group style="width: 135px;">
<ion-item style="width: 135px;">
<ion-radio-group style="">
<ion-item style="">
<ion-label class="popLabel">近一年</ion-label>
<ion-radio slot="start" value="12" checked id="popSelect1"></ion-radio>
</ion-item>
<ion-item style="width: 135px;">
<ion-item style="">
<ion-label class="popLabel">近六个月</ion-label>
<ion-radio slot="start" value="6" id="popSelect2"></ion-radio>
</ion-item>
<ion-item style="width: 135px;">
<ion-item style="">
<ion-label class="popLabel">近三个月</ion-label>
<ion-radio slot="start" value="3" id="popSelect3"></ion-radio>
</ion-item>
<ion-item style="width: 135px;">
<ion-item style="">
<ion-label class="popLabel">近一个月</ion-label>
<ion-radio slot="start" value="1" id="popSelect4"></ion-radio>
</ion-item>
......
......@@ -14,7 +14,7 @@
<div *ngIf="curCowshed.fieldRegionName">
<ion-item lines="full" class="subTitle">
<ion-label>智慧模式选择</ion-label>
<ion-toggle slot="end" color="secondary" style="width:50px" [(checked)]="curCowshed.isWisdomModel"></ion-toggle>
<ion-toggle slot="end" color="secondary" style="width:50px" [disabled]="true" [(checked)]="curCowshed.isWisdomModelChecked" (click)="toggle(curCowshed.isWisdomModelChecked)"></ion-toggle>
</ion-item>
<div style="margin-left: 10px; margin-right: 10px;">
<ion-label text-wrap color="danger" style="margin-left: 20px">选择智慧模式时,风机/喷淋/照明的控制将强制进入有环境条件影响的自控模式</ion-label>
......@@ -48,9 +48,8 @@
<div *ngIf="fan">
<ion-item-divider sticky="true" class="itemDriver subTitle">
<ion-label style="width: 40%">风机模式配置</ion-label>
<ion-select multiple="false" cancelText="取消" okText="确认" class="selectFont" [(ngModel)]="fan.controlModel" [(value)]="fan.controlModel" (ionChange)="workModeEvent(fengJi)">
<ion-select-option value="0">手控模式</ion-select-option>
<ion-select-option value="1">自控模式</ion-select-option>
<ion-select multiple="false" cancelText="取消" okText="确认" class="selectFont" [(ngModel)]="fan.controlModel">
<ion-select-option *ngFor="let option of controlModelOptions" [value]="option.modelId">{{option.modelValue}}</ion-select-option>
</ion-select>
<ion-icon name="add" slot="end" class="iconOpen" *ngIf="!isOpenFan" (click)="openItem('fanCfg')"></ion-icon>
<ion-icon name="remove" slot="end" class="iconOpen" *ngIf="isOpenFan" (click)="openItem('fanCfg')"></ion-icon>
......@@ -86,28 +85,27 @@
<div *ngIf="shower">
<ion-item-divider sticky="true" class="itemDriver subTitle">
<ion-label style="width: 40%">喷淋模式配置</ion-label>
<ion-select multiple="false" cancelText="取消" okText="确认" class="selectFont" [(ngModel)]="shower.controlModel" [(value)]="shower.controlModel" (ionChange)="workModeEvent(shower)">
<ion-select-option value="0">手控模式</ion-select-option>
<ion-select-option value="1">自控模式</ion-select-option>
<ion-select multiple="false" cancelText="取消" okText="确认" class="selectFont" [(ngModel)]="shower.controlModel">
<ion-select-option *ngFor="let option of controlModelOptions" [value]="option.modelId">{{option.modelValue}}</ion-select-option>
</ion-select>
<ion-icon name="add" slot="end" class="iconOpen" *ngIf="!isOpenShower" (click)="openItem('showerCfg')"></ion-icon>
<ion-icon name="remove" slot="end" class="iconOpen" *ngIf="isOpenShower" (click)="openItem('showerCfg')"></ion-icon>
</ion-item-divider>
<div *ngIf="isOpenShower" @shrink >
<ion-item-sliding *ngFor="let cfg of shower.controlConfig">
<ion-item-sliding *ngFor="let allCfg of shower.controlConfig">
<ion-item class="fanItem">
<ion-grid>
<ion-row style="width: 100%">
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">模式名</ion-label>
<ion-input class="inputText" [(ngModel)]="cfg.name" style="width:80px;"></ion-input>
<ion-input class="inputText" [(ngModel)]="allCfg.config.name" style="width:80px;"></ion-input>
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">间隔时间</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.interval"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.interval"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
......@@ -116,29 +114,23 @@
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">设置温度</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.T" (ionFocus)="tempHaveTouch($event)"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.T" (ionFocus)="tempHaveTouch($event)"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
<!-- <ion-col size="auto" style="font-size: 13px;">-->
<!-- <ion-item class="fanItem" lines="none">-->
<!-- <ion-label style="width:80px">偏差温度</ion-label>-->
<!-- <ion-input [(ngModel)]="penLinCfg.A" (ionFocus)="tempHaveTouch()" style="width:50px;"></ion-input>-->
<!-- </ion-item>-->
<!-- </ion-col>-->
</ion-row>
<ion-row style="width: 100%">
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">A区喷淋时间</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.A"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.A"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">B区喷淋时间</ion-label>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="cfg.B"></ion-input>
<ion-input class="inputText" style="width:50px;" [(ngModel)]="allCfg.config.B"></ion-input>
<ion-label></ion-label>
</ion-item>
</ion-col>
......@@ -148,7 +140,7 @@
<ion-item-options side="end">
<!--<ion-button color='danger' expand="full" style="width:15%;height:90%" (click)="deleteShowerModel(cfg)">删除</ion-button>-->
<div style="text-content: center; background-color: lightgray;">
<ion-icon name="remove-circle" color='danger' class="deleteIcon" (click)="deleteShowerModel(cfg)" style="margin-top: 120px;"></ion-icon>
<ion-icon name="remove-circle" color='danger' class="deleteIcon" (click)="deleteShowerModel(allCfg.config)" style="margin-top: 120px;"></ion-icon>
</div>
</ion-item-options>
</ion-item-sliding>
......@@ -162,38 +154,37 @@
<div *ngIf="light">
<ion-item-divider sticky="true" class="itemDriver subTitle">
<ion-label style="width: 40%">照明配置</ion-label>
<ion-select multiple="false" cancelText="取消" okText="确认" class="selectFont" [(ngModel)]="light.controlModel" [(value)]="light.controlModel" (ionChange)="workModeEvent(light)">
<ion-select-option value="0">手控模式</ion-select-option>
<ion-select-option value="1">自控模式</ion-select-option>
<ion-select multiple="false" cancelText="取消" okText="确认" class="selectFont" [(ngModel)]="light.controlModel">
<ion-select-option *ngFor="let option of controlModelOptions" [value]="option.modelId">{{option.modelValue}}</ion-select-option>
</ion-select>
<ion-icon name="add" slot="end" class="iconOpen" *ngIf="!isOpenLight" (click)="openItem('lightCfg')"></ion-icon>
<ion-icon name="remove" slot="end" class="iconOpen" *ngIf="isOpenLight" (click)="openItem('lightCfg')"></ion-icon>
</ion-item-divider>
<div *ngIf="isOpenLight" @shrink >
<ion-item-sliding *ngFor="let cfg of light.controlConfig" >
<ion-item-sliding *ngFor="let allCfg of light.controlConfig" >
<ion-item class="fanItem">
<ion-grid>
<ion-row style="width: 100%">
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">模式名</ion-label>
<ion-input class="inputText" style="width:80px;" [(ngModel)]="cfg.name"></ion-input>
<ion-input class="inputText" style="width:80px;" [(ngModel)]="allCfg.config.name"></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row style="width: 100%">
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">日期范围</ion-label>
<!--<ion-input placeholder={{cfg.startTime}} (ionFocus)="tempHaveTouch()" style="width:50px;"></ion-input>-->
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.startDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.startDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">~</ion-label>
<ion-item class="fanItem" lines="none">
<ion-label style="width:60px">~</ion-label>
<!--<ion-input placeholder={{cfg.endTime}} (ionFocus)="tempHaveTouch()" style="width:50px;"></ion-input>-->
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.stopDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.stopDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
</ion-item>
</ion-col>
</ion-row>
......@@ -201,14 +192,14 @@
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">开灯时间</ion-label>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.on" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.on" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<!--<ion-input style="width:50px;" [(ngModel)]="cfg.on" (ionFocus)="tempHaveTouch()"></ion-input>-->
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">关灯时间</ion-label>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.off" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.off" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<!--<ion-input style="width:50px;" [(ngModel)]="cfg.off" (ionFocus)="tempHaveTouch()"></ion-input>-->
</ion-item>
</ion-col>
......@@ -217,7 +208,7 @@
</ion-item>
<ion-item-options side="end">
<!--<ion-button color='danger' expand="full" style="width:15%;height:90%" (click)="deleteLightModel(cfg)">删除</ion-button>-->
<div style="text-content: center; background-color: lightgray;" (click)="deleteLightModel(cfg)">
<div style="text-content: center; background-color: lightgray;" (click)="deleteLightModel(allCfg.config)">
<ion-icon name="remove-circle" color='danger' class="deleteIcon" style="margin-top: 70px;"></ion-icon>
</div>
</ion-item-options>
......@@ -243,14 +234,14 @@
<ion-item class="timepickerItem" lines="none">
<ion-label style="width:80px">日期范围</ion-label>
<!--<ion-input placeholder={{cfg.startTime}} (ionFocus)="tempHaveTouch()" style="width:50px;"></ion-input>-->
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="waterChannel.controlConfig.startDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="waterChannel.controlConfig.config.startDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="timepickerItem" lines="none">
<ion-label style="width:80px">~</ion-label>
<ion-label style="width:60px">~</ion-label>
<!--<ion-input placeholder={{cfg.endTime}} (ionFocus)="tempHaveTouch()" style="width:50px;"></ion-input>-->
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="waterChannel.controlConfig.stopDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="waterChannel.controlConfig.config.stopDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
</ion-item>
</ion-col>
</ion-row>
......@@ -291,47 +282,6 @@
</ion-col>
</ion-row>
<!--<ion-row>-->
<!--<ion-col>牛群回舍时需恢复上述的设备</ion-col>-->
<!--</ion-row>-->
<!--<ion-row>-->
<!--<ion-col>-->
<!--<ion-item lines="none" class="cow"><ion-label>风机</ion-label>-->
<!--<ion-checkbox color="primary" class="cowCheckBox" slot="start"></ion-checkbox>-->
<!--</ion-item>-->
<!--</ion-col>-->
<!--<ion-col>-->
<!--<ion-item lines="none" class="cow"><ion-label>喷淋</ion-label>-->
<!--<ion-checkbox color="primary" class="cowCheckBox" slot="start"></ion-checkbox>-->
<!--</ion-item>-->
<!--</ion-col>-->
<!--<ion-col>-->
<!--<ion-item lines="none" class="cow"><ion-label>照明</ion-label>-->
<!--<ion-checkbox color="primary" class="cowCheckBox" slot="start"></ion-checkbox>-->
<!--</ion-item>-->
<!--</ion-col>-->
<!--</ion-row>-->
<!--<ion-row>-->
<!--<ion-col>牛群离舍时需完全关闭的设备</ion-col>-->
<!--</ion-row>-->
<!--<ion-row>-->
<!--<ion-col>-->
<!--<ion-item lines="none" class="cow"><ion-label>风机</ion-label>-->
<!--<ion-checkbox color="primary" class="cowCheckBox" slot="start"></ion-checkbox>-->
<!--</ion-item>-->
<!--</ion-col>-->
<!--<ion-col>-->
<!--<ion-item lines="none" class="cow"><ion-label>喷淋</ion-label>-->
<!--<ion-checkbox color="primary" class="cowCheckBox" slot="start"></ion-checkbox>-->
<!--</ion-item>-->
<!--</ion-col>-->
<!--<ion-col>-->
<!--<ion-item lines="none" class="cow"><ion-label>照明</ion-label>-->
<!--<ion-checkbox color="primary" class="cowCheckBox" slot="start"></ion-checkbox>-->
<!--</ion-item>-->
<!--</ion-col>-->
<!--</ion-row>-->
</ion-grid>
</ion-item>
......@@ -343,16 +293,6 @@
<ion-item class="fanItem" *ngIf="isOpenEnvironment" @shrink >
<ion-grid>
<div style="text-align: center; margin-top:10px; margin-bottom: 10px">
<!--<ngx-datatable class='material' [rows]="environmentConfig" [columnMode]="'force'" style="white-space: nowrap; text-align: center">-->
<!--<ngx-datatable-column name="" prop="tittle" width="50px;">-->
<!--</ngx-datatable-column>-->
<!--<ngx-datatable-column name="上限" prop="top" width="20px;" >-->
<!--</ngx-datatable-column>-->
<!--<ngx-datatable-column name="下限" prop="lower" width="20px;">-->
<!--</ngx-datatable-column>-->
<!--<ngx-datatable-column name="" prop="symbol" width="5px;" style="margin-left: 0px">-->
<!--</ngx-datatable-column>-->
<!--</ngx-datatable>-->
<table style="width:80%; display: inline-block; text-align: center">
<tr style="height: 30px">
<th style="width:15%"></th>
......@@ -374,8 +314,8 @@
</tr>
<tr style="height: 30px">
<th>氨气</th>
<td><ion-input [(ngModel)]="curCowshed.environmentConfigJson.HU" (ionFocus)="humHaveTouch($event)" class="tdBorder" style="border-bottom: 1px solid"></ion-input></td>
<td><ion-input [(ngModel)]="curCowshed.environmentConfigJson.HL" (ionFocus)="humHaveTouch($event)" class="tdBorder" style="border-right: 1px solid; border-bottom: 1px solid"></ion-input></td>
<td><ion-input [(ngModel)]="curCowshed.environmentConfigJson.NH3U" (ionFocus)="humHaveTouch($event)" class="tdBorder" style="border-bottom: 1px solid"></ion-input></td>
<td><ion-input [(ngModel)]="curCowshed.environmentConfigJson.NH3L" (ionFocus)="humHaveTouch($event)" class="tdBorder" style="border-right: 1px solid; border-bottom: 1px solid"></ion-input></td>
<td>ppm</td>
</tr>
......@@ -392,25 +332,22 @@
<ion-item class="fanItem" *ngIf="isOpenHeatStress" @shrink >
<ion-grid>
<ion-row>
<ion-item lines="none" class="thiItem">计算公式 0.81* 温度 +(0.99*温度-14.3)*湿度+46.3</ion-item>
<ion-item lines="none" class="thiItem">计算公式 0.81* 温度 +(0.99*温度-14.3)* 湿度+46.3</ion-item>
</ion-row>
<ion-row>
<ion-item lines="none" class="thiItem">等级临界值</ion-item>
</ion-row>
<ion-row>
<ion-col class="thiItem">应激等级</ion-col>
<ion-col class="thiItem">THI值<</ion-col>
<ion-col class="thiItem">预警方式</ion-col>
<ion-col class="thiItem">THI值(<)</ion-col>
<ion-col class="thiItem" style="text-align:left">预警方式</ion-col>
</ion-row>
<ion-row *ngFor="let heatStress of curCowshed.heatStressList">
<ion-col class="thiItem">{{heatStress.heatStressLevel}}</ion-col>
<ion-col class="thiItem">{{heatStress.thi}}</ion-col>
<ion-col class="thiItem">
<ion-select multiple="false" cancelText="取消" okText="确认" [(ngModel)]="heatStress.alarmLevel" [(value)]="heatStress.alarmLevel" (ionChange)="workModeEvent(heatStress)">
<ion-select-option value="无"></ion-select-option>
<ion-select-option value="低"></ion-select-option>
<ion-select-option value="中"></ion-select-option>
<ion-select-option value="高"></ion-select-option>
<ion-select class="heatSelect" multiple="false" cancelText="取消" okText="确认" [(ngModel)]="heatStress.alarmLevel">
<ion-select-option *ngFor="let alarmWay of alarmWays" [value]="alarmWay.alarmId">{{alarmWay.alarmValue}}</ion-select-option>
</ion-select>
</ion-col>
</ion-row>
......
......@@ -81,3 +81,11 @@
margin-left: 10px;
margin-right: 10px;
}
.heatSelect {
font-size:12px;
--padding-bottom: 0px;
--padding-end: 0px;
--padding-start: 0px;
--padding-top: 0px;
}
......@@ -22,7 +22,16 @@ export class EnvCfgPage implements OnInit {
'selecting': false,
};
constructor(public alerCtrl: AlertController, private pickerController: PickerController,
controlModelOptions = [
{modelId: 0, modelValue: '手控模式'},
{modelId: 1, modelValue: '自控模式'}];
alarmWays = [
{alarmId: '无', alarmValue: '无'},
{alarmId: '平台', alarmValue: '平台'},
{alarmId: '平台/短信', alarmValue: '平/短'}];
constructor(public alerCtrl: AlertController, private pickerController: PickerController, private alertController: AlertController,
private api: Api, private load: Load, public nav: NavController, private tf: Transfer, private ac: ActivatedRoute) {
}
......@@ -36,7 +45,7 @@ export class EnvCfgPage implements OnInit {
fieldRegionNo: '',
fieldRegionName: '',
isWisdomModel: 0,
propertyConfig: {toft: '', hoft: ''},
propertyConfig: {toft: 0, hoft: 0},
config: [],
leave: [{type: '风机', flag: true}, {type: '喷淋', flag: false}, {type: '照明', flag: true}],
back: [{type: '风机', flag: false}, {type: '喷淋', flag: true}, {type: '照明', flag: false}],
......@@ -107,33 +116,6 @@ export class EnvCfgPage implements OnInit {
return options;
}
workModeEvent(item) {
// this.updateCowshed();
}
// async openCalendarPicker(numColumns = 1, numOptions = 5, columnOptions = this.defaultColumnOptions) {
// const picker = await this.pickerController.create({
// columns: this.getColumns(numColumns, numOptions, columnOptions),
// buttons: [
// {
// text: 'Cancel',
// role: 'cancel',
// handler: () => {
// this.fanMode.selecting = false;
// }
// },
// {
// text: 'Confirm',
// handler: (value) => {
// console.log(`Got Value ${value}`);
// this.fanMode.selecting = false;
// }
// }
// ]
// });
// await picker.present();
// }
tempHaveTouch(event) {
for (let i = 10; i <= 50; i++) {
this.defaultColumnOptions[0][i - 10] = i.toString();
......@@ -155,14 +137,6 @@ export class EnvCfgPage implements OnInit {
}
}
lightTimeHaveFouch() {
// console.log('lightTimeHaveFouch');
// if (this.light.selecting === false) {
// this.light.selecting = true;
// this.openPicker();
// }
}
ngOnInit() {
// this.pickerController = document.querySelector('ion-picker-controller');
this.init();
......@@ -177,6 +151,7 @@ export class EnvCfgPage implements OnInit {
const count = this.shower.controlConfig.length;
cfg.forEach((item, index) => {
item.id = index + 1 + count;
item.config.id = index + 1 + count;
});
this.shower.controlConfig = [...this.shower.controlConfig, ...cfg];
} else if (data.changeModelCfg) {
......@@ -195,157 +170,157 @@ export class EnvCfgPage implements OnInit {
if (time) {
this.load.toLoad('加载中...', false);
}
// this.api.cowshedApp.getAllRegionData(['', (data) => {
// // 获取所有牛舍信息
// if (data) {
// // 牛舍列表
// if (data.resultIndexDataListForAppVos && data.resultIndexDataListForAppVos.constructor === Array) {
// this.isError = false;
// this.cowshedList = data.resultIndexDataListForAppVos;
// } else {
// this.api.presentMsgToast('获取数据失败');
// this.isError = true;
// }
// }
// this.load.offLoad();
// }]);
// ----------------------------------------------------
this.api.cowshedApp.getAll(['', (data) => {
// 获取所有牛舍信息
if (data) {
// 牛舍列表
if (data.resultIndexDataListForAppVos && data.resultIndexDataListForAppVos.constructor === Array) {
this.isError = false;
this.cowshedList = data.resultIndexDataListForAppVos;
} else {
this.api.presentMsgToast('获取数据失败');
this.isError = true;
}
}
this.load.offLoad();
}]);
// START----------------------------------------------------
// TODO 测试用准备数据
this.cowshedList = [
{
// 0-无热应激 离线 无报警
fieldRegionNo: 'FRN136641006052720640',
fieldRegionName: '1号牛舍',
temp: '23.5',
humi: '82',
heatStressLevel: '0',
online: 0, // 0-离线,1-在线
alarm: 0,
ts: '2019-08-05 23:44',
},
{
// 1-轻度热应激 在线 现控 无报警
fieldRegionNo: 'FN108050436279648256',
fieldRegionName: '2号牛舍',
temp: '23.5',
humi: '82',
heatStressLevel: '1',
online: 1, // 0-离线,1-在线
operationModel: 0, // 0-现控,1-平控
alarm: 0,
ts: '2019-08-05 23:44',
},
{
// 2-中度热应激 在线 平控 非智控(手控) 有报警
fieldRegionNo: 'FN108050436279648256',
fieldRegionName: '3号牛舍',
temp: '23.5',
humi: '82',
heatStressLevel: '2',
online: 1, // 0-离线,1-在线
operationModel: 1, // 0-现控,1-平控
isWisdomModel: 0, // 0-非智控(手控),1-智控
alarm: 1,
ts: '2019-08-05 23:44',
},
{
// 3-重度热应激 在线 平控 非智控(自控) 有报警
fieldRegionNo: 'FN108050436279648256',
fieldRegionName: '4号牛舍',
temp: '23.5',
humi: '82',
heatStressLevel: '3',
online: 1, // 0-离线,1-在线
operationModel: 1, // 0-现控,1-平控
isWisdomModel: 0, // 0-非智控(自控),1-智控
alarm: 1,
ts: '2019-08-05 23:44',
},
{
// 4-II重度热应激 在线 平控 智控 有报警
fieldRegionNo: 'FN108050436279648256',
fieldRegionName: '测试用5号牛舍',
temp: '23.5',
humi: '82',
heatStressLevel: '4',
online: 1, // 0-离线,1-在线
operationModel: 1, // 0-现控,1-平控
isWisdomModel: 1, // 0-非智控(自控),1-智控
alarm: 1,
ts: '2019-08-05 23:44',
},
];
// ----------------------------------------------------
// this.cowshedList = [
// {
// // 0-无热应激 离线 无报警
// fieldRegionNo: 'FRN136641006052720640',
// fieldRegionName: '1号牛舍',
// temp: '23.5',
// humi: '82',
// heatStressLevel: '0',
// online: 0, // 0-离线,1-在线
// alarm: 0,
// ts: '2019-08-05 23:44',
// },
// {
// // 1-轻度热应激 在线 现控 无报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '2号牛舍',
// temp: '23.5',
// humi: '82',
// heatStressLevel: '1',
// online: 1, // 0-离线,1-在线
// operationModel: 0, // 0-现控,1-平控
// alarm: 0,
// ts: '2019-08-05 23:44',
// },
// {
// // 2-中度热应激 在线 平控 非智控(手控) 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '3号牛舍',
// temp: '23.5',
// humi: '82',
// heatStressLevel: '2',
// online: 1, // 0-离线,1-在线
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 0, // 0-非智控(手控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// {
// // 3-重度热应激 在线 平控 非智控(自控) 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '4号牛舍',
// temp: '23.5',
// humi: '82',
// heatStressLevel: '3',
// online: 1, // 0-离线,1-在线
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 0, // 0-非智控(自控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// {
// // 4-II重度热应激 在线 平控 智控 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '测试用5号牛舍',
// temp: '23.5',
// humi: '82',
// heatStressLevel: '4',
// online: 1, // 0-离线,1-在线
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 1, // 0-非智控(自控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// ];
// END----------------------------------------------------
}
// 获取当前牛舍配置信息
selectCowshed() {
this.api.config.getAll([{'fieldRegionNo': this.curFieldRegionNo}, (data) => {
this.api.config.getByFieldRegionNo([{fieldRegionNo: this.curFieldRegionNo}, (data) => {
// ----------------------------------------------------
// START----------------------------------------------------
// TODO 测试用准备数据
data = {
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
fieldRegionNo: 'FRN136641006052720640',
fieldRegionName: '1号牛舍',
isWisdomModel: 1,
propertyConfig: {toft: '1.5', hoft: '2'},
config: [
{fieldDeviceType: '风机',
controlModel: '0',
controlConfig: {TU: 28, TL: 20},
},
{fieldDeviceType: '喷淋',
controlModel: '1',
controlConfig: [{id: 1, name: '模式一', T: 21, A: 35, B: 45, interval: 55},
{id: 2, name: '模式二', T: 21, A: 35, B: 45, interval: 55}]
},
{fieldDeviceType: '照明',
controlModel: '1',
controlConfig: [{id: 1, name: '模式A', startDate: '10-01', stopDate: '11-02', on: '19:00', off: '05:00'},
{id: 2, name: '模式B', startDate: '10-01', stopDate: '11-02', on: '19:00', off: '05:00'}]
},
{fieldDeviceType: '水槽',
controlModel: '0',
controlConfig: {power: 100, startDate: '10-01', stopDate: '11-02'},
}
],
leave: [{type: '风机', flag: true}, {type: '喷淋', flag: false}, {type: '照明', flag: true}],
back: [{type: '风机', flag: false}, {type: '喷淋', flag: true}, {type: '照明', flag: false}],
environmentConfigJson: {HL: 0, HU: 100, TL: -10, TU: 50},
heatStressList: [
{
heatStressLevel: '无应激',
alarmLevel: '无',
thi: 68
},
{
heatStressLevel: '轻度应激',
alarmLevel: '低',
thi: 72
},
{
heatStressLevel: '中度应激',
alarmLevel: '中',
thi: 80
},
{
heatStressLevel: '重度应激',
alarmLevel: '高',
thi: 90
},
{
heatStressLevel: 'II重度应激',
alarmLevel: '高',
thi: 100
}
]
};
// ----------------------------------------------------
// data = {
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// fieldRegionNo: 'FRN136641006052720640',
// fieldRegionName: '1号牛舍',
// isWisdomModel: 1,
// propertyConfig: {toft: '1.5', hoft: '2'},
// config: [
// {fieldDeviceType: '风机',
// controlModel: '0',
// controlConfig: {TU: 28, TL: 20},
// },
// {fieldDeviceType: '喷淋',
// controlModel: '1',
// controlConfig: [{id: 1, name: '模式一', T: 21, A: 35, B: 45, interval: 55},
// {id: 2, name: '模式二', T: 21, A: 35, B: 45, interval: 55}]
// },
// {fieldDeviceType: '照明',
// controlModel: '1',
// controlConfig: [{id: 1, name: '模式A', startDate: '10-01', stopDate: '11-02', on: '19:00', off: '05:00'},
// {id: 2, name: '模式B', startDate: '10-01', stopDate: '11-02', on: '19:00', off: '05:00'}]
// },
// {fieldDeviceType: '水槽',
// controlModel: '0',
// controlConfig: {power: 100, startDate: '10-01', stopDate: '11-02'},
// }
// ],
// leave: [{type: '风机', flag: true}, {type: '喷淋', flag: false}, {type: '照明', flag: true}],
// back: [{type: '风机', flag: false}, {type: '喷淋', flag: true}, {type: '照明', flag: false}],
// environmentConfigJson: {HL: 0, HU: 100, TL: -10, TU: 50},
// heatStressList: [
// {
// heatStressLevel: '无应激',
// alarmLevel: '无',
// thi: 68
// },
// {
// heatStressLevel: '轻度应激',
// alarmLevel: '低',
// thi: 72
// },
// {
// heatStressLevel: '中度应激',
// alarmLevel: '中',
// thi: 80
// },
// {
// heatStressLevel: '重度应激',
// alarmLevel: '高',
// thi: 90
// },
// {
// heatStressLevel: 'II重度应激',
// alarmLevel: '高',
// thi: 100
// }
// ]
// };
// END----------------------------------------------------
if (data) {
this.curCowshed = data;
this.curCowshed.isWisdomModelChecked = this.curCowshed.isWisdomModel ? true : false;
this.initConfig();
} else {
this.api.presentMsgToast('获取数据失败');
......@@ -366,13 +341,25 @@ export class EnvCfgPage implements OnInit {
this.fan = value;
break;
case '喷淋' :
this.shower = value;
const showerConfig = JSON.parse(value.controlConfig);
this.shower.fieldDeviceType = value.fieldDeviceType;
this.shower.controlModel = value.controlModel;
this.shower.dataConfig = value.dataConfig;
this.shower.controlConfig = showerConfig;
break;
case '照明' :
this.light = value;
const lightConfig = JSON.parse(value.controlConfig);
this.light.fieldDeviceType = value.fieldDeviceType;
this.light.controlModel = value.controlModel;
this.light.dataConfig = value.dataConfig;
this.light.controlConfig = lightConfig;
break;
case '水槽' :
this.waterChannel = value;
const waterChannelConfig = JSON.parse(value.controlConfig);
this.waterChannel.fieldDeviceType = value.fieldDeviceType;
this.waterChannel.controlModel = value.controlModel;
this.waterChannel.dataConfig = value.dataConfig;
this.waterChannel.controlConfig = waterChannelConfig;
break;
default:
break;
......@@ -389,9 +376,49 @@ export class EnvCfgPage implements OnInit {
// }
}
toggle(isWisdomModelChecked) {
// btn.op = btn.op ? 1 : 0;
// event.preventDefault();
// a.loading = true;
this.opChangeComfirm(isWisdomModelChecked);
}
async opChangeComfirm(isWisdomModelChecked) {
const msgOp = isWisdomModelChecked ? '打开' : '关闭';
const alert = await this.alertController.create({
header: '请注意',
// subHeader: '确定要' + msgOp + ' ' + msgHeader + ' 这个泵吗?',
message: '即将' + msgOp + '智慧模式,要继续吗?',
mode: 'ios',
buttons: [
{
text: '取消',
cssClass: 'width: 40%',
handler: () => {
this.curCowshed.isWisdomModelChecked = !isWisdomModelChecked;
event.preventDefault();
}
}, {
text: '确定',
cssClass: 'width: 40%',
handler: () => {
this.changeWisdomModel(isWisdomModelChecked);
}
}
]
});
await alert.present();
}
changeWisdomModel(isWisdomModelChecked) {
}
// 修改牛舍配置
updateCowshed() {
this.api.config.updateCowshedConfig([this.curCowshed, (data) => {
this.curCowshed.isWisdomModel = this.curCowshed.isWisdomModelChecked ? 1 : 0;
this.api.config.updateConfig([this.curCowshed, (data) => {
if (data) {
console.log('更新成功');
} else {
......@@ -405,45 +432,45 @@ export class EnvCfgPage implements OnInit {
onReferenceModel() {
let popFanModels = {};
this.api.devicePatternModel.getByFactoryNoAndType([{factoryNo: this.curCowshed.factoryNo, fieldDeviceType: '风机'}, (data) => {
// ---------------------------------------------------------
// START---------------------------------------------------------
// TODO 测试用数据
data = [{
patternModelNo: '1234681324789546',
patternModelName: '春季1',
fieldDeviceType: '风机',
configJson: {name: '模式名A', TU: 20, TL: -10},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '夏季2',
fieldDeviceType: '风机',
configJson: {name: '模式名A', TU: 20, TL: -10},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '秋季3',
fieldDeviceType: '风机',
configJson: {name: '模式名A', TU: 20, TL: -10},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '冬季4',
fieldDeviceType: '风机',
configJson: {name: '模式名', TU: 20, TL: -10},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
}];
// ---------------------------------------------------------
// data = [{
// patternModelNo: '1234681324789546',
// patternModelName: '春季1',
// fieldDeviceType: '风机',
// configJson: {name: '模式名A', TU: 20, TL: -10},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '夏季2',
// fieldDeviceType: '风机',
// configJson: {name: '模式名A', TU: 20, TL: -10},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '秋季3',
// fieldDeviceType: '风机',
// configJson: {name: '模式名A', TU: 20, TL: -10},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '冬季4',
// fieldDeviceType: '风机',
// configJson: {name: '模式名', TU: 20, TL: -10},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// }];
// END---------------------------------------------------------
if (data) {
popFanModels = data;
this.selectModel('风机', 1, popFanModels);
......@@ -456,45 +483,45 @@ export class EnvCfgPage implements OnInit {
let popShowerModels = {};
this.api.devicePatternModel.getByFactoryNoAndType([{factoryNo: this.curCowshed.factoryNo, fieldDeviceType: '喷淋'}, (data) => {
// ---------------------------------------------------------
// START---------------------------------------------------------
// TODO 测试用数据
data = [{
patternModelNo: '1234681324789546',
patternModelName: '春季1',
fieldDeviceType: '喷淋',
configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '夏季2',
fieldDeviceType: '喷淋',
configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '秋季3',
fieldDeviceType: '风机',
configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '冬季4',
fieldDeviceType: '风机',
configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
}];
// ---------------------------------------------------------
// data = [{
// patternModelNo: '1234681324789546',
// patternModelName: '春季1',
// fieldDeviceType: '喷淋',
// configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '夏季2',
// fieldDeviceType: '喷淋',
// configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '秋季3',
// fieldDeviceType: '风机',
// configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '冬季4',
// fieldDeviceType: '风机',
// configJson: {name: '模式名A', T: 25, offset: 3, A: 25, B: 25, interval: 30},
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// }];
// END---------------------------------------------------------
if (data) {
popShowerModels = data;
this.selectModel('喷淋', 2, popShowerModels);
......@@ -507,49 +534,49 @@ export class EnvCfgPage implements OnInit {
let popLightModels = {};
this.api.devicePatternModel.getByFactoryNoAndType([{factoryNo: this.curCowshed.factoryNo, fieldDeviceType: '照明'}, (data) => {
// ---------------------------------------------------------
// START---------------------------------------------------------
// TODO 测试用数据
data = [{
patternModelNo: '1234681324789546',
patternModelName: '春季1',
fieldDeviceType: '照明',
configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
{name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '夏季2',
fieldDeviceType: '风机',
configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
{name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '秋季3',
fieldDeviceType: '风机',
configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
{name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
},
{
patternModelNo: '1234681324789546',
patternModelName: '冬季4',
fieldDeviceType: '风机',
configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
{name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
factoryNo: 'FN108050436279648256',
factoryName: '一厂',
remark: '测试'
}];
// ---------------------------------------------------------
// data = [{
// patternModelNo: '1234681324789546',
// patternModelName: '春季1',
// fieldDeviceType: '照明',
// configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
// {name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '夏季2',
// fieldDeviceType: '风机',
// configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
// {name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '秋季3',
// fieldDeviceType: '风机',
// configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
// {name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// },
// {
// patternModelNo: '1234681324789546',
// patternModelName: '冬季4',
// fieldDeviceType: '风机',
// configJson: [{name: '模式名A', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'},
// {name: '模式名B', startDate: '03-01', stopDate: '05-01', on: '19:00', off: '07:00'}],
// factoryNo: 'FN108050436279648256',
// factoryName: '一厂',
// remark: '测试'
// }];
// END---------------------------------------------------------
if (data) {
popLightModels = data;
this.selectModel('照明', 3, popLightModels);
......@@ -652,14 +679,19 @@ export class EnvCfgPage implements OnInit {
deleteShowerModel(one) {
const updateModel = this.shower.controlConfig.filter(data => data.id !== one.id);
this.shower.controlConfig = updateModel;
this.shower.controlConfig.forEach((item, index) => item.id = index + 1);
this.shower.controlConfig.forEach((item, index) => {
item.id = index + 1;
item.config.id = index + 1;
});
}
deleteLightModel(one) {
const updateModel = this.light.controlConfig.filter(data => data.id !== one.id);
this.light.controlConfig = updateModel;
this.light.controlConfig.forEach((item, index) => item.id = index + 1);
this.light.controlConfig.forEach((item, index) => {
item.id = index + 1;
item.config.id = index + 1;
});
}
toNextPage(device) {
......
......@@ -8,14 +8,14 @@
</ion-header>
<ion-content style="background-color: #F3F4F4;">
<div style="max-height: calc(100% - 100px);overflow-y:auto;">
<ion-item-sliding *ngFor="let cfg of controlConfig" >
<ion-item-sliding *ngFor="let allCfg of controlConfig" >
<ion-item class="fanItem">
<ion-grid>
<ion-row style="width: 100%">
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">模式名</ion-label>
<ion-input class="inputText" style="width:80px;" [(ngModel)]="cfg.name"></ion-input>
<ion-input class="inputText" style="width:80px;" [(ngModel)]="allCfg.config.name"></ion-input>
</ion-item>
</ion-col>
</ion-row>
......@@ -24,14 +24,14 @@
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">日期范围</ion-label>
<!--<ion-input placeholder={{cfg.startTime}} (ionFocus)="tempHaveTouch()" style="width:50px;"></ion-input>-->
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.startDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.startDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">~</ion-label>
<ion-label style="width:60px">~</ion-label>
<!--<ion-input placeholder={{cfg.endTime}} (ionFocus)="tempHaveTouch()" style="width:50px;"></ion-input>-->
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.stopDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.stopDate" displayFormat="MM-DD" cancelText="取消" doneText="确认"></ion-datetime>
</ion-item>
</ion-col>
</ion-row>
......@@ -39,14 +39,14 @@
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">开灯时间</ion-label>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.on" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.on" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<!--<ion-input style="width:50px;" [(ngModel)]="cfg.on" (ionFocus)="tempHaveTouch()"></ion-input>-->
</ion-item>
</ion-col>
<ion-col size="auto" style="font-size: 13px;">
<ion-item class="fanItem" lines="none">
<ion-label style="width:80px">关灯时间</ion-label>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="cfg.off" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<ion-datetime class="inputDateTime timepicker" [(ngModel)]="allCfg.config.off" displayFormat="HH:mm" cancelText="取消" doneText="确认"></ion-datetime>
<!--<ion-input style="width:50px;" [(ngModel)]="cfg.off" (ionFocus)="tempHaveTouch()"></ion-input>-->
</ion-item>
</ion-col>
......@@ -54,7 +54,7 @@
</ion-grid>
</ion-item>
<ion-item-options side="end">
<div style="text-content: center; background-color: lightgray;" (click)="deleteModel(cfg)">
<div style="text-content: center; background-color: lightgray;" (click)="deleteModel(allCfg)">
<ion-icon name="remove-circle" color='danger' class="deleteIcon" style="margin-top: 70px;"></ion-icon>
</div>
</ion-item-options>
......
......@@ -27,26 +27,33 @@ export class EnvChangeModelPage implements OnInit {
}
init() {
this.controlConfig = [{id: 1, name: '', startDate: '', stopDate: '', on: '', off: ''}];
this.controlConfig = [{id: 1, config: {id: 1, name: '', startDate: '', stopDate: '', on: '', off: ''}}];
}
addModel() {
const modelCount = this.controlConfig.length;
this.controlConfig.push({id: modelCount + 1, name: '', startDate: '', stopDate: '', on: '', off: ''});
this.controlConfig.push({
id : modelCount + 1,
config: {id: modelCount + 1, name: '', startDate: '', stopDate: '', on: '', off: ''}});
}
deleteModel(one) {
const updateModel = this.controlConfig.filter(data => data.id !== one.id);
this.controlConfig = updateModel;
this.controlConfig.forEach((item, index) => item.id = index + 1);
this.controlConfig.forEach((item, index) => {
item.id = index + 1;
item.config.id = index + 1;
});
}
saveModels() {
this.controlConfig.forEach((item) => {
item.on = this.formatTime(item.on);
item.off = this.formatTime(item.off);
item.startDate = this.formatDate(item.startDate);
item.stopDate = this.formatDate(item.stopDate);
this.controlConfig.forEach((item, index) => {
item.id = index + 1;
item.config.id = index + 1;
item.config.on = this.formatTime(item.config.on);
item.config.off = this.formatTime(item.config.off);
item.config.startDate = this.formatDate(item.config.startDate);
item.config.stopDate = this.formatDate(item.config.stopDate);
});
const query = '?changeModelCfg=' + JSON.stringify(this.controlConfig);
// this.nav.navigateForward('', );
......
......@@ -19,7 +19,7 @@
<v-kanban class="home-bar" name="温度" [inData]="item.temp" iconClass="vo v-wendu" iconColor="#285B90" iconSize="20px" fontSize="14px"></v-kanban>
<v-kanban class="home-bar" name="湿度" [inData]="item.humi" iconClass="vo v-shidu" iconColor="#285B90" iconSize="20px" fontSize="14px"></v-kanban>
<v-kanban class="home-bar" name="热应激" [inData]="item.heatStressLevelName" iconClass="vo v-nav-ico" [iconColor]="item.heatStressColor" iconSize="20px" fontSize="14px"></v-kanban>
<v-kanban class="home-bar" name="在舍状态" [inData]="item.inHouse.inHouseName" iconClass="vo v-dapeng-" iconColor="#285B90" iconSize="20px" fontSize="14px"></v-kanban>
<v-kanban class="home-bar" name="在舍状态" [inData]="item.inHouse.inHouse === 1 ? '在舍' : '离舍'" iconClass="vo v-dapeng-" iconColor="#285B90" iconSize="20px" fontSize="14px"></v-kanban>
</div>
<div class="inHouse">
<ion-label class="inHouseLabel">在离舍开关控制</ion-label>
......
......@@ -18,7 +18,7 @@ export class EnvDetailPage implements OnInit {
private load: Load,
private tf: Transfer) {}
item: any = {
item = {
factoryNo: '',
factoryName: '',
fieldRegionNo: '',
......@@ -26,13 +26,15 @@ export class EnvDetailPage implements OnInit {
temp: 0,
humi: 0,
heatStressLevel: 0,
heatStressColor: '#71fa1d',
heatStressLevelName: '无',
online: 0,
operationModel: 1,
isWisdomModel: 1,
alarm: 1,
inHouse: {
inHouse: 1,
inHouseName: '',
inHouseName: '离舍',
fieldDeviceNo: '',
fieldDeviceType: '',
},
......@@ -62,8 +64,8 @@ export class EnvDetailPage implements OnInit {
this.comm.remain = 0;
this.ac.queryParams.subscribe((data) => {
this.fieldRegionNo = data.no;
this.getData(0);
});
this.getData(0);
}
initLayout() {
......@@ -104,7 +106,12 @@ export class EnvDetailPage implements OnInit {
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 0, // 0-非智控(自控),1-智控
// alarm: 1,
// inHouse : this.getInHouseState(1), // 0-离舍,1-在舍
// inHouse : {
// inHouse: 1,
// inHouseName: this.getInHouseState(1), // 0-离舍,1-在舍},
// fieldDeviceNo: 'FDN15615456135612',
// fieldDeviceType: '牛舍'
// },
// ts: '2019-08-05 23:44',
// };
// this.initLayout();
......@@ -114,19 +121,19 @@ export class EnvDetailPage implements OnInit {
getHeatStressLevelName(level) {
let levelName = '';
switch (level) {
case '0':
case 0:
levelName = '无';
break;
case '1' :
case 1 :
levelName = '轻';
break;
case '2' :
case 2 :
levelName = '中';
break;
case '3' :
case 3 :
levelName = '重';
break;
case '4' :
case 4 :
levelName = 'II重';
break;
default:
......@@ -154,21 +161,23 @@ export class EnvDetailPage implements OnInit {
// 在离舍开关控制
inHouseControl(inHouse) {
if (inHouse.fieldDeviceNo !== null && inHouse.fieldDeviceNo !== '') {
const opt = {fieldDeviceNo: '', fieldDeviceType: '', op: '', ts: 0};
const opt = {fieldDeviceNo: '', fieldDeviceType: '', op: 0, ts: 0};
opt.fieldDeviceNo = inHouse.fieldDeviceNo;
opt.fieldDeviceType = inHouse.fieldDeviceType;
opt.op = inHouse.inHouse;
opt.op = inHouse.inHouse ? 1 : 0;
opt.ts = new Date().valueOf();
this.comm.remain = 20;
this.api.control.controlCowedSwitch([opt, (data) => {
if (data && data.code === 1) {
this.getData(1);
this.api.presentMsgToast(data.message);
// this.alarmMsg.locked = false;
} else {
this.api.presentMsgToast(data.message);
}
// if (data && data.code === 1) {
// this.getData(1);
// this.api.presentMsgToast(data.message);
// // this.alarmMsg.locked = false;
// } else {
// this.api.presentMsgToast(data.message);
// }
this.getData(0);
this.api.presentMsgToast(data.message);
this.comm.remain = 0;
}]);
}
......
......@@ -23,8 +23,8 @@
margin-bottom: 5px;">控制/状态</h1>
<ion-item *ngIf="batchSwitch" lines="full" insert="false">
<ion-label>一键控制</ion-label>
<ion-toggle slot="end" [checked]="batchSwitch.op === 1" [disabled]="batchSwitch.disabled"
(load)="batchSwitch.load" (ionChange)="toggle(batchSwitch)"></ion-toggle>
<ion-toggle slot="end" [checked]="batchSwitch.op" [disabled]="batchSwitch.disabled"
[(ngModel)]="batchSwitch.op" (load)="batchSwitch.load" (click)="toggle(batchSwitch)"></ion-toggle>
<!--<v-switch (click)="allCheck(batchSwitch)" [value]="batchSwitch.op" [disabled]="batchSwitch.disabled" [loading]="batchSwitch.load"></v-switch>-->
</ion-item>
<div>
......@@ -35,10 +35,10 @@
<ion-card-content class="cardContent">
<!--<ion-toggle slot="middle" [checked]="device.state"></ion-toggle>-->
<ion-toggle class="btn-switch" *ngIf="device.alarm === 0" [checked]="batchSwitch.op === 1" [disabled]="device.disabled"
(click)="deviceCheck(device)"></ion-toggle>
<ion-toggle class="btn-switch" *ngIf="device.alarm === 1" [checked]="batchSwitch.op === 1" [disabled]="device.disabled" color="danger"
(click)="deviceCheck(device)"></ion-toggle>
<ion-toggle class="btn-switch" *ngIf="device.alarm === 0" [checked]="device.op" [disabled]="device.disabled"
[(ngModel)]="device.op" (click)="deviceCheck(device)"></ion-toggle>
<ion-toggle class="btn-switch" *ngIf="device.alarm === 1" [checked]="device.op" [disabled]="device.disabled" color="danger"
[(ngModel)]="device.op" (click)="deviceCheck(device)"></ion-toggle>
<!--<v-switch *ngIf="device.alarm === 0" class="btn-switch" (click)="deviceCheck(device)" [value]="device.state" [disabled]="device.disabled" [loading]="device.load"></v-switch>-->
<!--<v-switch *ngIf="device.alarm === 1" class="btn-switch" color="danger" (click)="deviceCheck(device)" [value]="device.state" [disabled]="device.disabled" [loading]="device.load"></v-switch>-->
</ion-card-content>
......
import { Component, OnInit } from '@angular/core';
import { Component, OnInit } from '@angular/core';
import {Api} from '../../service/api';
import {ActivatedRoute} from '@angular/router';
import {Load} from '../../service/load';
......@@ -21,7 +21,7 @@ export class EnvFanPage implements OnInit {
// 各设备信息
devices = [];
// 一鍵控制按钮
batchSwitch = {op: undefined, type: undefined, load: false, disabled: undefined};
batchSwitch = {op: false, type: undefined, load: false, disabled: undefined};
controlModelOptions = [
{modelId: 0, modelValue: '手控模式'},
......@@ -34,11 +34,17 @@ export class EnvFanPage implements OnInit {
isLoading : true
};
constructor(private api: Api, private ac: ActivatedRoute, private load: Load, private alertControlle: AlertController) { }
constructor(private api: Api, private ac: ActivatedRoute, private load: Load, private alertController: AlertController) { }
ngOnInit() {
this.ionViewWillEnter();
this.init();
}
ionViewWillEnter() {
}
init() {
this.ac.queryParams.subscribe((data) => {
this.fieldRegionNo = data.no;
......@@ -50,28 +56,31 @@ export class EnvFanPage implements OnInit {
this.load.toLoad('加载中...', false);
}
this.api.cowshedApp.getFengJiData([{fieldRegionNo: this.fieldRegionNo}, (data) => {
// if (data && data.fieldRegionNo) {
// this.fieldRegionNo = data.fieldRegionNo;
// this.fieldDeviceType = data.fieldDeviceType;
// this.controlModel = data.controlModel;
// this.devices = data.param;
//
// this.initButtons();
// }
if (data && data.fieldRegionNo) {
this.fieldRegionNo = data.fieldRegionNo;
this.fieldDeviceType = data.fieldDeviceType;
this.controlModel = data.controlModel;
this.devices = data.param;
this.devices.forEach(device => {
device.op = device.state === 1 ? true : false;
});
// START--------------------------------------------------------------------
// TODO 测试用准备数据
this.fieldDeviceType = '风机';
this.controlModel = 0;
this.devices = [{fieldDeviceNo: '136641005998194688', fieldDeviceName: '1号组', state: 1, alarm: 1},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: '2号组', state: 0, alarm: 1},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: '3号组', state: 1, alarm: 0},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: '4号组', state: 0, alarm: 1},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: '5号组', state: 1, alarm: 0},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: '6号组', state: 1, alarm: 0}];
this.initButtons();
// END--------------------------------------------------------------------
this.initButtons();
}
}]);
// START--------------------------------------------------------------------
// TODO 测试用准备数据
// this.fieldDeviceType = '风机';
// this.controlModel = 0;
// this.devices = [{fieldDeviceNo: '136641005998194688', fieldDeviceName: '1号组', state: 1, alarm: 1},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: '2号组', state: 0, alarm: 1},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: '3号组', state: 1, alarm: 0},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: '4号组', state: 0, alarm: 1},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: '5号组', state: 1, alarm: 0},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: '6号组', state: 1, alarm: 0}];
// this.initButtons();
// END--------------------------------------------------------------------
}
initButtons() {
......@@ -85,15 +94,17 @@ export class EnvFanPage implements OnInit {
// [一键控制]按钮(默认: 开启)
// 当任意子按钮[关闭]的状态下: 关闭 以外:开启
this.batchSwitch.op = 1;
this.batchSwitch.op = true;
this.devices.map((device) => {
if (device.state === 0) {
this.batchSwitch.op = 0;
if (device.op === false) {
this.batchSwitch.op = false;
}
});
}
toggle(btn) {
// btn.op = btn.op ? 1 : 0;
// event.preventDefault();
// a.loading = true;
this.opChangeComfirm(btn);
......@@ -101,8 +112,8 @@ export class EnvFanPage implements OnInit {
async opChangeComfirm(btn) {
const msgHeader = this.fieldDeviceType;
const msgOp = btn.op ? '关闭' : '打开';
const alert = await this.alertControlle.create({
const msgOp = btn.op ? '打开' : '关闭';
const alert = await this.alertController.create({
header: '请注意',
// subHeader: '确定要' + msgOp + ' ' + msgHeader + ' 这个泵吗?',
message: '所有' + msgHeader + '即将' + msgOp + ',要继续吗?',
......@@ -112,7 +123,8 @@ export class EnvFanPage implements OnInit {
text: '取消',
cssClass: 'width: 40%',
handler: () => {
this.batchSwitch.op = btn.op === 0 ? 1 : 0;
this.batchSwitch.op = !btn.op;
event.preventDefault();
}
}, {
text: '确定',
......@@ -132,7 +144,7 @@ export class EnvFanPage implements OnInit {
const req = {
fieldRegionNo: this.fieldRegionNo,
fieldDeviceType: this.fieldDeviceType,
op: btn.op ? 0 : 1,
op: btn.op ? 1 : 0,
ts: parseInt((new Date().getTime() / 1000).toString(), 10)
};
this.comm.remain = 120;
......@@ -150,6 +162,12 @@ export class EnvFanPage implements OnInit {
this.comm.remain = 0;
btn.load = false;
}]);
// 子按钮状态
this.devices.forEach((device) => {
device.state = btn.op ? 1 : 0;
device.op = btn.op;
});
}
// 单个设备控制
......@@ -158,7 +176,7 @@ export class EnvFanPage implements OnInit {
const req = {
fieldDeviceNo: btn.fieldDeviceNo,
fieldDeviceType: this.fieldDeviceType,
op: btn.state ? 0 : 1,
op: btn.op ? 1 : 0,
ts: new Date().valueOf()
};
this.comm.remain = 20;
......
......@@ -21,38 +21,39 @@ export class EnvHistoryPage implements OnInit {
item: any = {};
chartOption = {};
tableRows = [];
// START--------------------------------------------------------------------------------
// TODO 以下为假数据 待删除
chartOption = {
backgroundColor: '#F0F8FF',
visualMap: [
{show: false, type: 'continuous', seriesIndex: 0, min: 0, max: 400},
{show: false, type: 'continuous', seriesIndex: 1, dimension: 0, min: 0, max: 400}],
xAxis: {
name: '', type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
yAxis: [
{name: '温度(℃)', type: 'value', splitLine: {show: false}},
{name: '湿度(%)', type: 'value', max: 100, splitLine: {show: false}}
],
series: [
{data: [28, 32, 35, 34, 30, 29, 27], type: 'line'},
{data: [15, 13, 12, 11, 12, 11, 87], yAxisIndex: 1, type: 'line'},
{data: [76, 45, 43, 23, 34, 54, 23], yAxisIndex: 1, type: 'line'}
]
};
// 时间 热应激 温度 湿度 光照 风机 喷淋 照明
tableRows = [
{ts: '17:00', thi: '轻', temp: '23.8', humi: '56', NH3: '70'},
{ts: '17:30', thi: '中', temp: '27.2', humi: '43', NH3: '80'},
{ts: '18:00', thi: '轻', temp: '23.2', humi: '61', NH3: '99'},
{ts: '18:30', thi: '轻', temp: '23.1', humi: '47', NH3: '100'},
{ts: '19:00', thi: '轻', temp: '20.2', humi: '43', NH3: '60'},
{ts: '19:30', thi: '轻', temp: '21.6', humi: '34', NH3: '50'},
{ts: '20:00', thi: '轻', temp: '22.5', humi: '43', NH3: '40'},
];
// chartOption = {
// backgroundColor: '#F0F8FF',
// visualMap: [
// {show: false, type: 'continuous', seriesIndex: 0, min: 0, max: 400},
// {show: false, type: 'continuous', seriesIndex: 1, dimension: 0, min: 0, max: 400}],
// xAxis: {
// name: '', type: 'category',
// data: ['1', '2', '3', '4', '5', '6', '7', '8'],
// },
// yAxis: [
// {name: '温度(℃)', type: 'value', splitLine: {show: false}},
// {name: '湿度(%)', type: 'value', max: 100, splitLine: {show: false}}
// ],
// series: [
// {data: [28, 32, 35, 34, 30, 29, 27], type: 'line'},
// {data: [15, 13, 12, 11, 12, 11, 87], yAxisIndex: 1, type: 'line'},
// {data: [76, 45, 43, 23, 34, 54, 23], yAxisIndex: 1, type: 'line'}
// ]
// };
// // 时间 热应激 温度 湿度 光照 风机 喷淋 照明
// tableRows = [
// {ts: '17:00', thi: '轻', temp: '23.8', humi: '56', NH3: '70'},
// {ts: '17:30', thi: '中', temp: '27.2', humi: '43', NH3: '80'},
// {ts: '18:00', thi: '轻', temp: '23.2', humi: '61', NH3: '99'},
// {ts: '18:30', thi: '轻', temp: '23.1', humi: '47', NH3: '100'},
// {ts: '19:00', thi: '轻', temp: '20.2', humi: '43', NH3: '60'},
// {ts: '19:30', thi: '轻', temp: '21.6', humi: '34', NH3: '50'},
// {ts: '20:00', thi: '轻', temp: '22.5', humi: '43', NH3: '40'},
// ];
// END--------------------------------------------------------------------------------
ngOnInit() {
......@@ -97,7 +98,7 @@ export class EnvHistoryPage implements OnInit {
const humi = [];
const thi = [];
const times = [];
debugger;
if (param.temp && param.temp.constructor === Array) {
param.temp.map(item => {
times.push(new Date(item.time).getHours());
......
......@@ -45,10 +45,10 @@
<span style="text-align: center">{{item.fieldRegionName}}</span><span style="text-align: center; font-size:12px; padding-left:10px; color:red;" *ngIf="item.operationModel === 4">(部分设备处于现控状态)</span></div>
</div>
<div class="content">
<span *ngIf="item.temp" class="detailInfo" style="width: 40%">温度: &nbsp;&nbsp;{{item.temp}} ℃</span>
<span *ngIf="item.humi" class="detailInfo" style="width: 40%">湿度: &nbsp;&nbsp;{{item.humi}} % rH</span>
<span *ngIf="item.humi" class="detailInfo" style="width: 40%">氨气: &nbsp;&nbsp;{{item.NH3}} ppm</span>
<span *ngIf="item.heatStressLevel" class="detailInfo" style="width: 40%">热应激: &nbsp;&nbsp;<span class="warmColor{{item.heatStressLevel}}">{{item.heatStressLevelName}}</span></span>
<span *ngIf="item.temp !== null" class="detailInfo" style="width: 40%">温度: &nbsp;&nbsp;{{item.temp}} ℃</span>
<span *ngIf="item.humi !== null" class="detailInfo" style="width: 40%">湿度: &nbsp;&nbsp;{{item.humi}} % rH</span>
<span *ngIf="item.humi !== null" class="detailInfo" style="width: 40%">氨气: &nbsp;&nbsp;{{item.NH3}} ppm</span>
<span *ngIf="item.heatStressLevel !== null" class="detailInfo" style="width: 40%">热应激: &nbsp;&nbsp;<span class="warmColor{{item.heatStressLevel}}">{{item.heatStressLevelName}}</span></span>
</div>
<div class="bottom">
<div style="width:100%">
......@@ -60,8 +60,8 @@
<!-- 1:远控 0:现控 4:混乱 -->
<div *ngIf="item.operationModel === 1 || item.operationModel === 0" class="online">{{item.operationModel === 1 ? '远控' :'现控'}} </div>
<div *ngIf="item.operationModel === 4" class="offline">现控 </div>
<div *ngIf="item.operationModel" [ngClass]="{'online': item.isWisdomModel, 'offline': !item.isWisdomModel}" class="online">智控 </div>
<div *ngIf="item.ts" class="right">{{item.ts | date: 'yyyy-MM-dd HH:mm'}}</div>
<div *ngIf="item.operationModel !== null" [ngClass]="{'online': item.isWisdomModel, 'offline': !item.isWisdomModel}" class="online">智控 </div>
<div *ngIf="item.ts !== null" class="right">{{item.ts | date: 'yyyy-MM-dd HH:mm'}}</div>
</div>
</div>
</div>
......
......@@ -69,24 +69,25 @@ export class EnvHomePage implements OnInit {
ngOnInit() {
this.init();
this.ionViewWillEnter();
// this.ionViewWillEnter();
}
init() {
this.getData(0);
}
// ionic的生命周期函数
ionViewWillEnter() {
this.slideDidChange();
this.getData(0);
}
// ionic的生命周期函数
// ionViewWillEnter() {
// this.slideDidChange();
// this.getData(0);
// }
getData(time) {
if (this.isNetConnected() === true) {
if (this.isNetConnected()) {
if (time) {
this.load.toLoad('加载中...', false);
}
this.api.cowshedApp.getAllRegionData(['', (data) => {
this.api.cowshedApp.getAll(['', (data) => {
// 热应激良 热应激差 故障总数
if (data) {
this.thiGood = data.thiGood;
......@@ -121,87 +122,90 @@ export class EnvHomePage implements OnInit {
this.isError = true;
}
this.displayItems = this.items;
// START--------------------------------------------------------------------
// TODO 测试用准备数据
// this.thiGood = 1;
// this.thiBad = 12;
// this.alarmTotal = 5;
// this.items = [
// {
// // 0-无热应激 离线 无报警
// fieldRegionNo: 'FRN136641006052720640',
// fieldRegionName: '1号牛舍',
// temp: 23.5,
// humi: 82,
// heatStressLevel: '0',
// heatStressLevelName: this.getHeatStressLevelName('0'),
// online: 0, // 0-离线,1-在线
// alarm: 0,
// ts: '2019-08-05 23:44',
// },
// {
// // 1-轻度热应激 在线 现控 无报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '2号牛舍',
// temp: 23.5,
// humi: 82,
// heatStressLevel: '1',
// heatStressLevelName: this.getHeatStressLevelName('1'),
// online: 1, // 0-离线,1-在线
// operationModel: 0, // 0-现控,1-平控
// alarm: 0,
// ts: '2019-08-05 23:44',
// },
// {
// // 2-中度热应激 在线 平控 非智控(手控) 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '3号牛舍',
// temp: 23.5,
// humi: 82,
// heatStressLevel: '2',
// heatStressLevelName: this.getHeatStressLevelName('2'),
// online: 1, // 0-离线,1-在线
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 0, // 0-非智控(手控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// {
// // 3-重度热应激 在线 平控 非智控(自控) 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '4号牛舍',
// temp: 23.5,
// humi: 82,
// heatStressLevel: '3',
// heatStressLevelName: this.getHeatStressLevelName('3'),
// online: 1, // 0-离线,1-在线
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 0, // 0-非智控(自控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// {
// // 4-II重度热应激 在线 平控 智控 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '测试用5号牛舍',
// temp: 23.5,
// humi: 82.9,
// NH3: 120.999,
// heatStressLevel: '4',
// heatStressLevelName: this.getHeatStressLevelName('4'),
// online: 1, // 0-离线,1-在线
// operationModel: 4, // 0-现控,1-平控
// isWisdomModel: 1, // 0-非智控(自控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// ];
// this.displayItems = this.items;
// END--------------------------------------------------------------------
}
this.load.offLoad();
}]);
// START--------------------------------------------------------------------
// TODO 测试用准备数据
// this.thiGood = 1;
// this.thiBad = 12;
// this.alarmTotal = 5;
// this.items = [
// {
// // 0-无热应激 离线 无报警
// fieldRegionNo: 'FRN136641006052720640',
// fieldRegionName: '1号牛舍',
// temp: 23.5,
// humi: 82,
// NH3: 76.786,
// heatStressLevel: '0',
// heatStressLevelName: this.getHeatStressLevelName(0),
// online: 0, // 0-离线,1-在线
// alarm: 0,
// ts: '2019-08-05 23:44',
// },
// {
// // 1-轻度热应激 在线 现控 无报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '2号牛舍',
// temp: 23.5,
// humi: 82,
// NH3: 10.116,
// heatStressLevel: '1',
// heatStressLevelName: this.getHeatStressLevelName(1),
// online: 1, // 0-离线,1-在线
// operationModel: 0, // 0-现控,1-平控
// alarm: 0,
// ts: '2019-08-05 23:44',
// },
// {
// // 2-中度热应激 在线 平控 非智控(手控) 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '3号牛舍',
// temp: 23.5,
// humi: 82,
// NH3: 60.255,
// heatStressLevel: '2',
// heatStressLevelName: this.getHeatStressLevelName(2),
// online: 1, // 0-离线,1-在线
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 0, // 0-非智控(手控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// {
// // 3-重度热应激 在线 平控 非智控(自控) 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '4号牛舍',
// temp: 23.5,
// humi: 82,
// NH3: 80.213,
// heatStressLevel: '3',
// heatStressLevelName: this.getHeatStressLevelName(3),
// online: 1, // 0-离线,1-在线
// operationModel: 1, // 0-现控,1-平控
// isWisdomModel: 0, // 0-非智控(自控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// {
// // 4-II重度热应激 在线 平控 智控 有报警
// fieldRegionNo: 'FN108050436279648256',
// fieldRegionName: '测试用5号牛舍',
// temp: 23.5,
// humi: 82.9,
// NH3: 120.999,
// heatStressLevel: '4',
// heatStressLevelName: this.getHeatStressLevelName(4),
// online: 1, // 0-离线,1-在线
// operationModel: 4, // 0-现控,1-平控
// isWisdomModel: 1, // 0-非智控(自控),1-智控
// alarm: 1,
// ts: '2019-08-05 23:44',
// },
// ];
// END--------------------------------------------------------------------
}
}
......@@ -216,19 +220,19 @@ export class EnvHomePage implements OnInit {
getHeatStressLevelName(codeId) {
let levelName = '';
switch (codeId) {
case '0':
case 0:
levelName = '无';
break;
case '1' :
case 1 :
levelName = '轻';
break;
case '2' :
case 2 :
levelName = '中';
break;
case '3' :
case 3 :
levelName = '重';
break;
case '4' :
case 4 :
levelName = 'II重';
break;
default:
......
......@@ -34,18 +34,22 @@
margin-bottom: 5px;">控制/状态</h1>
<ion-item *ngIf="devices" lines="full" insert="false">
<ion-label>一键控制</ion-label>
<!-- <ion-toggle slot="end" [checked]="batchSwitch.op"></ion-toggle>-->
<v-switch (click)="allCheck(batchSwitch)" [value]="batchSwitch.op" [disabled]="batchSwitch.disabled" [loading]="batchSwitch.load"></v-switch>
<ion-toggle slot="end" [checked]="batchSwitch.op" [disabled]="batchSwitch.disabled"
[(ngModel)]="batchSwitch.op" (load)="batchSwitch.load" (click)="toggle(batchSwitch)"></ion-toggle>
<!--<v-switch (click)="allCheck(batchSwitch)" [value]="batchSwitch.op" [disabled]="batchSwitch.disabled" [loading]="batchSwitch.load"></v-switch>-->
</ion-item>
<div>
<ion-card *ngFor="let device of devices" class="card" color="white">
<ion-card-header>
<ion-card-header class="cardHeader">
<ion-card-subtitle align="center">{{device.fieldDeviceName}}</ion-card-subtitle>
</ion-card-header>
<ion-card-content>
<!-- <ion-toggle slot="middle" [checked]="device.state"></ion-toggle>-->
<v-switch class="btn-switch" (click)="deviceCheck(device)" [value]="device.state" [disabled]="device.disabled" [loading]="device.load"></v-switch>
<ion-card-content class="cardContent">
<ion-toggle class="btn-switch" *ngIf="device.alarm === 0" [checked]="device.op" [disabled]="device.disabled"
[(ngModel)]="device.op" (click)="deviceCheck(device)"></ion-toggle>
<ion-toggle class="btn-switch" *ngIf="device.alarm === 1" [checked]="device.op" [disabled]="device.disabled" color="danger"
[(ngModel)]="device.op" (click)="deviceCheck(device)"></ion-toggle>
<!--<v-switch class="btn-switch" (click)="deviceCheck(device)" [value]="device.state" [disabled]="device.disabled" [loading]="device.load"></v-switch>-->
</ion-card-content>
</ion-card>
</div>
......
......@@ -8,8 +8,18 @@ i.vo {
.card{
float: none;
display: inline-block;
width:28%;
margin: 10px 10px 5px 5px;
width:22%;
margin: 5px;
}
.cardHeader {
--padding-inline-start: 0px !important;
--padding-inline-end: 0px !important;
padding: 10px;
}
.cardContent {
padding: 5px;
text-align: center;
}
.btn-switch {
......
......@@ -2,6 +2,7 @@ import {Component, Input, OnInit} from '@angular/core';
import {Api} from '../../service/api';
import {ActivatedRoute} from '@angular/router';
import {Load} from '../../service/load';
import {AlertController} from '@ionic/angular';
@Component({
selector: 'v-env-light',
......@@ -35,7 +36,7 @@ export class EnvLightPage implements OnInit {
controlModelOptions = [
{modelId: 0, modelValue: '手控模式'},
{modelId: 1, modelValue: '自控模式'},
{modelId: 2, modelValue: '智慧控制'}];
{modelId: 2, modelValue: '智控模式'}];
// 发送指令延时判断
comm = {
......@@ -43,7 +44,8 @@ export class EnvLightPage implements OnInit {
isLoading: true
};
constructor(private api: Api, private ac: ActivatedRoute, private load: Load, private route: ActivatedRoute) {
constructor(private api: Api, private ac: ActivatedRoute, private load: Load, private route: ActivatedRoute,
private alertControlle: AlertController) {
}
ngOnInit() {
......@@ -68,43 +70,106 @@ export class EnvLightPage implements OnInit {
this.on = data.controlConfig.on;
this.off = data.controlConfig.off;
this.devices = data.param;
this.devices.forEach(device => {
device.op = device.state === 1 ? true : false;
});
// --------------------------------------------------------------------
// START--------------------------------------------------------------------
// TODO 测试用准备数据
this.fieldRegionNo = 'FRN136641006052720640';
this.startDate = '05-01';
this.stopDate = '08-31';
// this.fieldDeviceType = '照明';
// this.controlModel = 2;
this.on = '19:00';
this.off = '05:00';
this.devices = [{fieldDeviceNo: '136641005998194688', fieldDeviceName: 'A号照明组', state: 1},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: 'B号照明组', state: 0},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: 'C号照明组', state: 1},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: 'D号照明组', state: 0},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: 'E号照明组', state: 1},
{fieldDeviceNo: '136641005998194688', fieldDeviceName: 'F号照明组', state: 1}];
// --------------------------------------------------------------------
// [智控(2)]的状态下:非活性(true) 以外:活性(false)
const allDisabled = this.controlModel === 2 ? true : false;
this.batchSwitch.disabled = allDisabled;
this.devices.forEach((device, i) => {
device.disabled = allDisabled;
});
// this.fieldRegionNo = 'FRN136641006052720640';
// this.startDate = '05-01';
// this.stopDate = '08-31';
// // this.fieldDeviceType = '照明';
// // this.controlModel = 2;
// this.on = '19:00';
// this.off = '05:00';
// this.devices = [{fieldDeviceNo: '136641005998194688', fieldDeviceName: 'A号照明组', state: 1},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: 'B号照明组', state: 0},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: 'C号照明组', state: 1},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: 'D号照明组', state: 0},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: 'E号照明组', state: 1},
// {fieldDeviceNo: '136641005998194688', fieldDeviceName: 'F号照明组', state: 1}];
// END--------------------------------------------------------------------
// 设置[一键控制]按钮(默认: 开启)
// 当任意子按钮[关闭]的状态下: 关闭 以外:开启
this.batchSwitch.op = 1;
this.devices.map((device) => {
if (device.state === 0) {
this.batchSwitch.op = 0;
}
});
this.initButtons();
}
}]);
}
initButtons() {
// 智控:2
if (this.controlModel === 2) {
this.batchSwitch.disabled = true;
this.devices.forEach((device) => {
device.disabled = true;
});
} else if (this.controlModel === 1) {
// 自控:1
// 一键控制: 活性 其他按钮: 非活性
this.batchSwitch.disabled = false;
this.devices.forEach((device) => {
device.disabled = true;
});
} else {
// 手控:0
// 一键控制: 活性 其他按钮: 活性
this.batchSwitch.disabled = false;
this.devices.forEach((device) => {
device.disabled = false;
});
}
// 设置[一键控制]按钮(默认: 开启)
// 当任意子按钮[关闭]的状态下: 关闭 以外:开启
this.batchSwitch.op = true;
this.devices.map((device) => {
if (device.op === false) {
this.batchSwitch.op = false;
}
});
}
toggle(btn) {
// btn.op = btn.op ? 1 : 0;
// event.preventDefault();
// a.loading = true;
this.opChangeComfirm(btn);
}
async opChangeComfirm(btn) {
const msgHeader = '照明灯';
const msgOp = btn.op ? '打开' : '关闭';
let msgContent = '';
if (this.controlModel === 0) {
msgContent = '所有' + msgHeader + '即将' + msgOp + ',要继续吗?';
} else {
msgContent = '确认要' + msgOp + '所有' + msgHeader + ',并且自动切换至手动模式吗?';
}
const alert = await this.alertControlle.create({
header: '请注意',
message: msgContent,
mode: 'ios',
buttons: [
{
text: '取消',
cssClass: 'width: 40%',
handler: () => {
this.batchSwitch.op = !btn.op;
event.preventDefault();
}
}, {
text: '确定',
cssClass: 'width: 40%',
handler: () => {
this.allCheck(btn);
}
}
]
});
await alert.present();
}
// 一键控制
allCheck(btn) {
btn.load = true;
......@@ -117,21 +182,26 @@ export class EnvLightPage implements OnInit {
this.comm.remain = 120;
// 一键开启设备
this.api.control.controlBatchSwitch([req, (data) => {
if (data.code === 1) {
this.getData(1);
this.api.presentMsgToast(data.message);
} else {
this.api.presentMsgToast(data.message);
}
this.api.control.controlCowedBatchSwitch([req, (data) => {
// if (data.code === 1) {
// this.getData(1);
// this.api.presentMsgToast(data.message);
// } else {
// this.api.presentMsgToast(data.message);
// }
this.getData(0);
this.api.presentMsgToast(data.message);
this.comm.remain = 0;
btn.load = false;
}]);
// 子按钮状态
this.devices.forEach((device, i) => {
device.state = btn.op ? 0 : 1;
this.devices.forEach((device) => {
device.op = btn.op ? 0 : 1;
});
// 自动控制时, 强制切换至手动模式
this.controlModel = this.controlModel === 1 ? 0 : this.controlModel;
}
// 单个设备控制
......@@ -143,15 +213,18 @@ export class EnvLightPage implements OnInit {
ts: parseInt((new Date().getTime() / 1000).toString(), 10)
};
this.comm.remain = 20;
this.api.control.controlSwitch([req, (data) => {
if (data && data.code === 1) {
this.getData(1);
this.comm.remain = 0;
this.api.presentMsgToast(data.message);
} else {
this.comm.remain = 0;
this.api.presentMsgToast(data.message);
}
this.api.control.controlCowedSwitch([req, (data) => {
// if (data && data.code === 1) {
// this.getData(1);
// this.comm.remain = 0;
// this.api.presentMsgToast(data.message);
// } else {
// this.comm.remain = 0;
// this.api.presentMsgToast(data.message);
// }
this.getData(1);
this.comm.remain = 0;
this.api.presentMsgToast(data.message);
btn.loading = false;
}]);
}
......
......@@ -23,8 +23,8 @@
line-height: 25px;
margin-bottom: 5px;">供液泵状态</h1>
<ion-item lines="full">
<div [ngClass]="{'sucCir': bump.online, 'errCir': !bump.online}"></div>&nbsp;
<span class="content">{{bump.online ? '在线' : '离线'}}</span>
<div [ngClass]="{'sucCir': bump.alarm === 0, 'errCir': bump.alarm === 0}"></div>&nbsp;
<span class="content">{{bump.alarm === 1 ? '异常' : '运行'}}</span>
<span class="content" style="margin-left: 30px">压力: {{bump.press}} Mpa</span>
</ion-item>
<h1 style="
......@@ -33,13 +33,13 @@
border-left: 5px solid #28c9bd;
line-height: 25px;
margin-bottom: 5px;">时间参数</h1>
<ion-item lines="full" *ngIf="controlConfig.a" insert="false">
<span class="content">A区喷淋时间 {{controlConfig.a}} 秒</span>
<ion-item lines="full" insert="false">
<span class="content">{{param[0].fieldDeviceName}}喷淋时间 {{controlConfig.A}} 秒</span>
</ion-item>
<ion-item lines="full" *ngIf="controlConfig.b" insert="false">
<span class="content">B区喷淋时间 {{controlConfig.b}} 秒</span>
<ion-item lines="full" insert="false">
<span class="content">{{param[1].fieldDeviceName}}喷淋时间 {{controlConfig.B}} 秒</span>
</ion-item>
<ion-item lines="full" *ngIf="controlConfig.interval" insert="false">
<ion-item lines="full" insert="false">
<span class="content">间隔时间 {{controlConfig.interval}} 秒</span>
</ion-item>
......@@ -50,15 +50,26 @@
line-height: 25px;
margin-bottom: 5px;">控制/状态</h1>
<div>
<ion-card *ngFor="let a of param" class="card" color="white">
<ion-card-header>
<ion-card-title class="card-title">{{a.fieldDeviceName}}</ion-card-title>
<ion-card *ngFor="let device of param" class="card" color="white">
<ion-card-header class="cardHeader">
<ion-card-title class="card-title">
<div style="width:100%;text-align:center;">
<div style="width:48%;display: inline-block; height: 40px;float: left; text-align: center; padding-top: 10px;">
<div style="text-align: center;margin:auto">{{device.fieldDeviceName}}</div>
</div>
<div style="width:48%;display: inline-block"><img [src]="'../../assets/img/shower-' + device.state + '.png'" style="width:50px !important; margin: auto;"></div>
</div>
</ion-card-title>
</ion-card-header>
<ion-card-content style="margin: 0px; padding-top:0px;">
<span class="content">压力 {{a.press}} MPa</span><br>
<ion-card-content class="cardContent">
<span class="content">压力 {{device.press}} MPa</span><br>
<!-- <ion-toggle [checked]="a.state"></ion-toggle>-->
<v-switch class="btn-switch" (click)="deviceCheck(a)" [value]="a.state" [loading]="a.load"></v-switch>
<ion-toggle class="btn-switch" *ngIf="device.alarm === 0" [checked]="device.op" [disabled]="device.disabled"
[(ngModel)]="device.op" (click)="deviceCheck(device)"></ion-toggle>
<ion-toggle class="btn-switch" *ngIf="device.alarm === 1" [checked]="device.op" [disabled]="device.disabled" color="danger"
[(ngModel)]="device.op" (click)="deviceCheck(device)"></ion-toggle>
<!--<v-switch class="btn-switch" (click)="deviceCheck(a)" [value]="a.state" [loading]="a.load"></v-switch>-->
</ion-card-content>
</ion-card>
</div>
......
.card{
float: none;
display: inline-block;
width:42%;
margin: 10px 10px 5px 10px;
width: 44%;
margin: 3%;
text-align: center;
}
.card-title {
font-size: 20px;
font-size: 16px;
}
.content {
......@@ -19,3 +19,33 @@
display: inline-block;
margin-top: 5px;
}
.sucCir {
width: 17px;
height: 17px;
border-radius: 17px;
background-color: #2ecc71;
display: inline-block;
vertical-align: middle;
box-shadow: #ccc 0.5px 0.5px 3px;
}
.errCir {
width: 17px;
height: 17px;
border-radius: 17px;
background-color: #cb0000;
display: inline-block;
vertical-align: middle;
box-shadow: #ccc 0.5px 0.5px 3px;
}
.cardHeader {
--padding-inline-start: 0px !important;
--padding-inline-end: 0px !important;
padding: 10px;
}
.cardContent {
padding: 5px;
text-align: center;
}
......@@ -27,14 +27,15 @@ export class EnvShowerPage implements OnInit {
// 模式状态
controlModel = 0;
// 供液泵状态
bump = {online: true, press: 0};
bump = {alarm: 0, press: 0};
// 时间参数
controlConfig = {
name: '',
interval: 0, // 间隔时间
a: '', // A区喷淋时间
t: '',
b: '', // A区喷淋时间
A: 0, // A区喷淋时间
T: 0,
B: 0, // A区喷淋时间
offset: 0
};
// 各设备信息
param = [];
......@@ -42,7 +43,7 @@ export class EnvShowerPage implements OnInit {
controlModelOptions = [
{modelId: 0, modelValue: '手控模式'},
{modelId: 1, modelValue: '自控模式'},
{modelId: 2, modelValue: '智慧控制'}];
{modelId: 2, modelValue: '智控模式'}];
constructor(private api: Api, private ac: ActivatedRoute, private load: Load, private route: ActivatedRoute) { }
......@@ -50,16 +51,21 @@ export class EnvShowerPage implements OnInit {
this.init();
}
ionViewWillEnter() {
this.init();
}
init() {
this.route.paramMap.subscribe(params => {this.fieldRegionNo = params.get('fieldRegionNo'); });
this.getData(0);
this.route.paramMap.subscribe(params => {
this.fieldRegionNo = params.get('fieldRegionNo');
this.getData(0);
});
}
getData(time) {
if (time) {
this.load.toLoad('加载中...', false);
}
this.api.cowshedApp.getPenLinData([{'fieldRegionNo' : this.fieldRegionNo}, (data) => {
this.api.cowshedApp.getPenLinData([{fieldRegionNo: this.fieldRegionNo}, (data) => {
if (data) {
this.fieldRegionNo = data.fieldRegionNo;
this.fieldDeviceType = data.fieldDeviceType;
......@@ -67,29 +73,43 @@ export class EnvShowerPage implements OnInit {
this.bump = data.bump;
this.controlConfig = data.controlConfig;
this.param = data.param;
this.param.forEach(device => {
device.op = device.cycle === 1 ? true : false;
});
this.initButtons();
}
}]);
}
initButtons() {
this.param.forEach((device) => {
// disabled:手控状态下 活性false 其他非活性true
device.disabled = this.controlModel === 0 ? false : true;
});
}
// 单个设备控制
deviceCheck(btn) {
const req = {
fieldDeviceNo: btn.fieldDeviceNo,
op: btn.state ? 0 : 1,
fieldDeviceType: this.fieldDeviceType,
op: btn.op ? 1 : 0,
ts: parseInt((new Date().getTime() / 1000).toString(), 10)
};
this.comm.remain = 20;
this.api.control.controlSwitch([req, (data) => {
if (data && data.code === 1) {
this.getData(1);
this.comm.remain = 0;
this.api.presentMsgToast(data.message);
} else {
this.comm.remain = 0;
this.api.presentMsgToast(data.message);
}
this.api.control.controlCowedSwitch([req, (data) => {
// if (data && data.code === 1) {
// this.getData(1);
// this.comm.remain = 0;
// this.api.presentMsgToast(data.message);
// } else {
// this.comm.remain = 0;
// this.api.presentMsgToast(data.message);
// }
this.getData(0);
this.comm.remain = 0;
this.api.presentMsgToast(data.message);
btn.loading = false;
}]);
}
}
......@@ -9,13 +9,13 @@
line-height: 25px;
margin-bottom: 5px;">状态</h1>
<ion-card *ngFor="let device of devices" class="card" color="white">
<ion-card-header>
<ion-card-title> <span [ngClass]="{'sucCir': device.online, 'errCir': !device.online}"></span>&nbsp; {{device .fieldDeviceName}}</ion-card-title>
<ion-card-header class="cardTitle">
<ion-card-title class="cardHeader"> <span class="sucCir"></span>&nbsp; {{device .fieldDeviceName}}</ion-card-title>
</ion-card-header>
<ion-card-content>
<span>当前功率 </span> <span> {{device.kw}} KW<br></span>
<span>估计加热设备台数 </span> <span> {{device.deviceOnlineNum}} 台</span>
<ion-card-content class="cardContent">
<span>当前功率 </span> <span style="color:#0bb8cc"> {{device.kw}} KW<br></span>
<span>估计加热设备台数 </span> <span style="color:#0bb8cc"> {{device.deviceOnlineNum}} 台</span>
</ion-card-content>
</ion-card>
</ion-content>
.card{
float: none;
display: inline-block;
width:97%;
margin: 2%;
}
.cardTitle {
font-size: 20px;
padding: 0px;
}
.cardHeader {
--padding-inline-start: 0px !important;
--padding-inline-end: 0px !important;
padding: 10px;
font-size: 20px;
text-align:left;
}
.cardContent {
padding: 0px 5px 5px 35px;
}
.sucCir {
width: 17px;
height: 17px;
border-radius: 17px;
background-color: #2ecc71;
display: inline-block;
vertical-align: middle;
box-shadow: #ccc 0.5px 0.5px 3px;
}
.errCir {
width: 17px;
height: 17px;
border-radius: 17px;
background-color: #cb0000;
display: inline-block;
vertical-align: middle;
box-shadow: #ccc 0.5px 0.5px 3px;
}
......@@ -26,15 +26,21 @@ export class EnvWaterchannelPage implements OnInit {
// this.ac.queryParams.subscribe((data) => {
// this.fieldRegionNo = data.no;
// });
this.route.paramMap.subscribe(params => {this.fieldRegionNo = params.get('fieldRegionNo'); });
this.getData(0);
this.init();
}
init() {
this.route.paramMap.subscribe(params => {
this.fieldRegionNo = params.get('fieldRegionNo');
this.getData(0);
});
}
getData(time) {
if (time) {
this.load.toLoad('加载中...', false);
}
this.api.cowshedApp.getShuiCaoData([{'fieldRegionNo' : this.fieldRegionNo}, (data) => {
this.api.cowshedApp.getShuiCaoData([{fieldRegionNo: this.fieldRegionNo}, (data) => {
if (data) {
this.devices = data.param;
}
......
......@@ -33,7 +33,7 @@ export class Api {
public cowshedApp = {
// 牛舍首页查询
getAllRegionData: (data) => this.trans('get', '/cowshedApp/getAll', data),
getAll: (data) => this.trans('get', '/cowshedApp/getAll', data),
// 根据牛舍名称查询牛舍信息
getAllForLike: (data) => this.trans('post', '/cowshedApp/getAllForLike', data),
// 获取牛舍的基本信息
......@@ -95,8 +95,8 @@ export class Api {
};
public config = {
getAll: (data) => this.trans('post', '/cowshedConfig/getAll', data),
updateCowshedConfig: (data) => this.trans('post', '/cowshedConfig/updateCowshedConfig', data),
getByFieldRegionNo: (data) => this.trans('post', '/config/getByFieldRegionNo', data),
updateConfig: (data) => this.trans('post', '/config/updateConfig', data),
};
public devicePatternModel = {
......
......@@ -4,12 +4,14 @@
export const environment = {
// production: false,
url: 'http://pasture.witium.com.cn/api', // 对外访问测试网地址
// url: 'http://pasture.witium.com.cn/api', // 对外访问测试网地址
// url: 'http://172.16.1.14:8096',
// url: 'http://cloud-test.witium.com:8096', // 测试
// url: 'http://172.16.1.53:8096', // cy
// url: 'http://172.16.1.51:8097', // lin
// url: 'http://211.161.200.169:19200', // zz
// url: 'http://172.16.1.52:8096', // zz
url: 'http://172.16.1.52:8096', // zz
// url: 'http://172.16.1.13:8096', // 测试
mqttUrl: '172.16.1.24', // mqttUrl: '172.16.1.24:48083',
// mqttUrl: '211.161.200.169', // 辉度外网访问mqtt地址
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment