Commit 0c149dff authored by van.chen's avatar van.chen

报警组件

parent f1f8deab
......@@ -797,6 +797,14 @@
"@types/cordova": "^0.0.34"
}
},
"@ionic-native/local-notifications": {
"version": "5.8.0",
"resolved": "https://registry.npm.taobao.org/@ionic-native/local-notifications/download/@ionic-native/local-notifications-5.8.0.tgz",
"integrity": "sha1-ct7K3tXVrViVC5khL5goQTgBZQA=",
"requires": {
"@types/cordova": "^0.0.34"
}
},
"@ionic-native/splash-screen": {
"version": "5.4.0",
"resolved": "http://registry.npm.taobao.org/@ionic-native/splash-screen/download/@ionic-native/splash-screen-5.4.0.tgz",
......@@ -2982,6 +2990,11 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-appminimize/-/cordova-plugin-appminimize-1.0.1.tgz",
"integrity": "sha512-UJZ5g8iFBP42EplS0gKwAQhwr9cUfur95o6w+2NW21pjbgioj1RVZddngy7dO++ABDpkd4HMPYnJw7DqMp5rww=="
},
"cordova-plugin-badge": {
"version": "0.8.8",
"resolved": "https://registry.npm.taobao.org/cordova-plugin-badge/download/cordova-plugin-badge-0.8.8.tgz",
"integrity": "sha1-CSQBhpm0j5LdOzNhVFJzdYIUTJY="
},
"cordova-plugin-device": {
"version": "2.0.2",
"resolved": "http://registry.npm.taobao.org/cordova-plugin-device/download/cordova-plugin-device-2.0.2.tgz",
......@@ -2997,6 +3010,11 @@
"resolved": "http://registry.npm.taobao.org/cordova-plugin-ionic-webview/download/cordova-plugin-ionic-webview-3.1.2.tgz",
"integrity": "sha1-gP4eggZ62Ny8Xs8AytL436DQ4Q8="
},
"cordova-plugin-local-notification": {
"version": "0.9.0-beta.2",
"resolved": "https://registry.npm.taobao.org/cordova-plugin-local-notification/download/cordova-plugin-local-notification-0.9.0-beta.2.tgz",
"integrity": "sha1-46C0o10R+Vu08eNn2brumQnMppU="
},
"cordova-plugin-screen-orientation": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-screen-orientation/-/cordova-plugin-screen-orientation-3.0.1.tgz",
......@@ -4392,8 +4410,7 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"aproba": {
"version": "1.2.0",
......@@ -4414,14 +4431,12 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
......@@ -4436,20 +4451,17 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"core-util-is": {
"version": "1.0.2",
......@@ -4566,8 +4578,7 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"ini": {
"version": "1.3.5",
......@@ -4579,7 +4590,6 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -4594,7 +4604,6 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
......@@ -4602,14 +4611,12 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
......@@ -4628,7 +4635,6 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -4709,8 +4715,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"object-assign": {
"version": "4.1.1",
......@@ -4722,7 +4727,6 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
......@@ -4808,8 +4812,7 @@
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
......@@ -4845,7 +4848,6 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -4865,7 +4867,6 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -4909,14 +4910,12 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true,
"optional": true
"dev": true
}
}
},
......
......@@ -23,15 +23,18 @@
"@angular/router": "^7.2.2",
"@ionic-native/app-minimize": "^5.5.0",
"@ionic-native/core": "^5.0.0",
"@ionic-native/local-notifications": "^5.8.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^4.1.0",
"cordova-android": "7.1.4",
"cordova-ios": "~4.5.5",
"cordova-plugin-appminimize": "1.0.1",
"cordova-plugin-badge": "0.8.8",
"cordova-plugin-device": "2.0.2",
"cordova-plugin-ionic-keyboard": "^2.0.5",
"cordova-plugin-ionic-webview": "^3.0.0",
"cordova-plugin-local-notification": "0.9.0-beta.2",
"cordova-plugin-screen-orientation": "^3.0.1",
"cordova-plugin-splashscreen": "5.0.2",
"cordova-plugin-statusbar": "^2.4.2",
......@@ -79,7 +82,8 @@
"cordova-plugin-ionic-webview": {},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-appminimize": {},
"cordova-plugin-screen-orientation": {}
"cordova-plugin-screen-orientation": {},
"cordova-plugin-local-notification": {}
},
"platforms": [
"android",
......
......@@ -4,76 +4,85 @@ import {Platform} from '@ionic/angular';
import {SplashScreen} from '@ionic-native/splash-screen/ngx';
import {StatusBar} from '@ionic-native/status-bar/ngx';
import {Router, NavigationEnd} from '@angular/router';
import { AppMinimize } from '@ionic-native/app-minimize/ngx';
import {AppMinimize} from '@ionic-native/app-minimize/ngx';
import {Mqtt} from './service/mqtt';
declare var screen: any;
declare var mqtt: any;
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
styles: [`
.circle_process{
.circle_process {
width: 100px;
height : 100px;
height: 100px;
margin: 0 auto;
display: none;
}
.circle_process .wrapper{
.circle_process .wrapper {
width: 50px;
height: 100px;
position: absolute;
top:0;
top: 0;
overflow: hidden;
}
.circle_process .right{
right:0;
.circle_process .right {
right: 0;
position: relative;
left: 50px;
}
.circle_process .left{
.circle_process .left {
position: relative;
top: -100px;
}
.circle_process .circle{
.circle_process .circle {
width: 80px;
height: 80px;
border:10px solid transparent;
border: 10px solid transparent;
border-radius: 50%;
position: absolute;
top:0;
transform : rotate(-135deg);
top: 0;
transform: rotate(-135deg);
}
.circle_process .rightcircle{
border-top:10px solid green;
border-right:10px solid green;
right:0;
.circle_process .rightcircle {
border-top: 10px solid green;
border-right: 10px solid green;
right: 0;
animation: circle_right 120s linear infinite;
-webkit-animation: circle_right 120s linear infinite;
}
.circle_process .leftcircle{
border-bottom:10px solid green;
border-left:10px solid green;
left:0;
.circle_process .leftcircle {
border-bottom: 10px solid green;
border-left: 10px solid green;
left: 0;
animation: circle_left 120s linear infinite;
-webkit-animation: circle_left 120s linear infinite;
}
@-webkit-keyframes circle_right{
0%{
@-webkit-keyframes circle_right {
0% {
-webkit-transform: rotate(-135deg);
}
50%,100%{
50%, 100% {
-webkit-transform: rotate(45deg);
}
}
@-webkit-keyframes circle_left{
0%,50%{
@-webkit-keyframes circle_left {
0%, 50% {
-webkit-transform: rotate(-135deg);
}
100%{
100% {
-webkit-transform: rotate(45deg);
}
}
#innerNum {
font-size: 20px;
font-weight: 600;
......@@ -90,7 +99,8 @@ export class AppComponent implements AfterViewInit, OnDestroy {
private splashScreen: SplashScreen,
private statusBar: StatusBar,
private appMinimize: AppMinimize,
private router: Router
private router: Router,
private mqtt: Mqtt
) {
this.initializeApp();
}
......@@ -98,19 +108,6 @@ export class AppComponent implements AfterViewInit, OnDestroy {
private backBtnPressed;
private url;
private flag = 0;
client;
topic;
msg;
private options = {
keepalive: 10,
clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8),
protocolId: 'MQTT',
protocolVersion: 4,
clean: false,
connectTimeout: 60000,
username: 'pasture',
password: 'Pasture37774020',
};
initializeApp() {
this.platform.ready().then(() => {
......@@ -138,11 +135,11 @@ export class AppComponent implements AfterViewInit, OnDestroy {
this.statusBar.overlaysWebView(false);
this.splashScreen.hide();
}
this.initMqtt();
this.mqtt.getUserInfo();
}
ngOnDestroy(): void {
this.endMqtt();
this.mqtt.endMqtt();
}
initRouterListen() {
......@@ -173,22 +170,4 @@ export class AppComponent implements AfterViewInit, OnDestroy {
}
});
}
initMqtt() {
this.client = mqtt.connect('ws://172.16.1.24:8083/mqtt', this.options);
this.topic = 'Pasture/cy/Alarm';
this.client.on('connect', () => {
this.msg = 'mqtt连接成功';
this.client.subscribe(this.topic);
this.client.on('message', (a, b) => {
console.log(a, JSON.parse(b.toString()));
});
});
}
endMqtt() {
this.client.unsubscribe(this.topic);
this.client.disconnect();
}
}
......@@ -7,6 +7,7 @@ import {HttpClientModule} from '@angular/common/http';
import {IonicModule, IonicRouteStrategy} from '@ionic/angular';
import {SplashScreen} from '@ionic-native/splash-screen/ngx';
import {StatusBar} from '@ionic-native/status-bar/ngx';
import {LocalNotifications} from '@ionic-native/local-notifications/ngx';
import {FormsModule} from '@angular/forms';
import {HTTP_INTERCEPTORS} from '@angular/common/http';
import {NgZorroAntdMobileModule} from 'ng-zorro-antd-mobile';
......@@ -15,6 +16,7 @@ import {AppComponent} from './app.component';
import {AppRoutingModule} from './app-routing.module';
import {SubTitleComponent} from './components/sub-title/sub-title.component';
import {SwitchComponent} from './components/switch/switch.component';
import {AlarmBarComponent} from './components/alarm-bar/alarm-bar.component';
import {AppMinimize} from '@ionic-native/app-minimize/ngx';
......@@ -31,20 +33,22 @@ import {Auth} from './service/auth';
import {Http} from './service/http';
import {Transfer} from './service/transfer';
import {AuthInterceptor} from './service/token';
import {Mqtt} from './service/mqtt';
import {Load} from './service/load';
@NgModule({
declarations: [
AppComponent,
SubTitleComponent,
SwitchComponent,
AlarmBarComponent,
HomePage,
EastPage,
LoginPage,
WestPage,
AlarmPage,
RowPage,
IndexPage,
SwitchComponent
IndexPage
],
entryComponents: [],
imports: [
......@@ -66,9 +70,11 @@ import {Load} from './service/load';
multi: true,
},
AppMinimize,
LocalNotifications,
Api,
Auth,
Http,
Mqtt,
Transfer,
Load
],
......
<div class="alarmBar">
<Icon [type]="'voice'" class="alarmLeftIcon"></Icon>
<div class="alarmShows">
<div class="alarmItem" *ngFor="let one of options;let i = index"
[ngClass]="{'active' : active === i, 'unActive': active !== i}">{{one.a}}</div>
<div>{{one.time | date: 'yyyy-MM-dd HH:mm:ss'}}</div>
</div>
</div>
.alarmBar {
min-height: 40px;
width: 100%;
background-color: #fefcec;
}
.alarmLeftIcon {
color: #f98e55;
height: 20px;
width: 20px;
display: inline-flex;
text-align: center;
padding: 0 5px 0 15px;
vertical-align: middle;
}
.alarmShows {
width: calc(100% - 50px);
display: inline-flex;
font-size: 15px;
min-height: 40px;
padding: 10px 5px;
vertical-align: middle;
}
.alarmItem {
width: 100%;
}
.alarmItem.active {
display: block;
-webkit-animation: slideIn .2s forwards;
animation: slideIn .2s forwards;
}
.alarmItem.unActive {
display: none;
-webkit-animation: slideOut .2s forwards;
animation: slideOut .2s forwards;
}
@-webkit-keyframes slideIn {
from {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
}
@keyframes slideIn {
from {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
}
@-webkit-keyframes slideOut {
from {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
to {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
}
@keyframes slideOut {
from {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
to {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0)
}
}
import {Component, OnInit} from '@angular/core';
@Component({
selector: 'v-alarm-bar',
templateUrl: './alarm-bar.component.html',
styleUrls: ['./alarm-bar.component.scss'],
})
export class AlarmBarComponent implements OnInit {
options = [
{a: '西中转池搅拌开关 01数据异常', time: 1559809667000},
{a: '西中转池搅拌开关 01数据异常', time: 1559809667000},
{a: '西中转池搅拌开关 01数据异常', time: 1559809667000}
];
active = 0;
constructor() {
this.changeAlarm();
}
changeAlarm() {
setTimeout(() => {
if (this.active >= this.options.length - 1) {
this.active = 0;
} else {
this.active++;
}
this.changeAlarm();
}, 2000);
}
ngOnInit() {
}
}
......@@ -7,30 +7,49 @@
</div>
</ion-slide>
</ion-slides>
<!--<div class="one" *ngFor="let one of alarms, let i = index">-->
<!--<NoticeBar [option]="{'content': (i + 1) + '. ' + one, 'font': '14px'}">-->
<!--</NoticeBar>-->
<!--</div>-->
<!--<div class="alarmPart">-->
<!--<v-sub-title title="消息提醒"></v-sub-title>-->
<!--<div class="one" *ngFor="let one of alarms, let i = index" [ngClass]="{'redColor': i === 0}">{{i + 1}}-->
<!--.{{one}}</div>-->
<!--</div>-->
<v-alarm-bar></v-alarm-bar>
<div class="seePart">
<v-sub-title title="监测信息"></v-sub-title>
<div class="item" *ngFor="let item of items" (click)="toControl(item.url)">
<div class="left">{{item.name}}</div>
<div class="right">
<div class="block1">液位: {{item.yewei}}m</div>
<div class="block2 canClick">控制</div>
<div class="gekai"></div>
<div class="block3" *ngIf="item.isNB">
南水 <span [ngClass]="{'sucCir': item.nan, 'errCir': !item.nan}"></span>&nbsp;&nbsp;
北水 <span [ngClass]="{'sucCir': item.bei, 'errCir': !item.bei}"></span>
<!--状态: {{item.nan === 1 ? '开' : '关'}}/{{item.bei === 1 ? '开' : '关'}}-->
<PullToRefresh [direction]="state.direction"
[(ngModel)]="state.refreshState"
[endReachedRefresh]="state.endReachedRefresh"
(onRefresh)="pullToRefresh($event)"
>
<div class="item" *ngFor="let item of items" (click)="toControl(item.url)">
<div class="left">{{item.name}}</div>
<div class="right">
<div class="block1">液位: {{item.yewei}}m</div>
<div class="block2 canClick">控制</div>
<div class="gekai"></div>
<div class="block3" *ngIf="item.isNB">
南水 <span [ngClass]="{'sucCir': item.nan, 'errCir': !item.nan}"></span>&nbsp;&nbsp;
北水 <span [ngClass]="{'sucCir': item.bei, 'errCir': !item.bei}"></span>
<!--状态: {{item.nan === 1 ? '开' : '关'}}/{{item.bei === 1 ? '开' : '关'}}-->
</div>
<!--<div class="block4">设备状态 <span [ngClass]="{'sucCir': item.state, 'errCir': !item.state}"></span></div>-->
</div>
<!--<div class="block4">设备状态 <span [ngClass]="{'sucCir': item.state, 'errCir': !item.state}"></span></div>-->
</div>
</div>
<!--counts: 1-->
<!--factoryName: "一厂"-->
<!--factoryNo: "FN108050436279648256"-->
<!--fieldRegionDataVos: Array(1)-->
<!--0:-->
<!--fieldRegionName: "test"-->
<!--fieldRegionNo: "123"-->
<!--liquidLevel: "6.2"-->
<!--state: 1-->
<!--temp: "26.5"-->
<Accordion [accordion]="true" [defaultActiveKey]="'0'">
<AccordionPanel *ngFor="let one of data; let i = index;"
[key]="i" [header]="one.factoryName">
<List className="my-list">
<ListItem *ngFor="let two of one.fieldRegionDataVos">
{{two.fieldRegionName}}
</ListItem>
</List>
</AccordionPanel>
</Accordion>
</PullToRefresh>
</div>
</div>
......@@ -28,7 +28,9 @@ export class HomePage implements OnInit, OnDestroy {
loop: true,
spaceBetween: 0
};
alarms = [];
alarms = [1, 2, 3, 4, 5];
data = [];
items = [{
name: '东中转池',
......@@ -44,57 +46,17 @@ export class HomePage implements OnInit, OnDestroy {
bei: false,
isNB: 1,
url: 'west'
}
// , {
// name: '沉砂池',
// yewei: 12,
// nan: 1,
// bei: 0,
// isNB: 0,
// state: 1,
// url: 'east'
// }, {
// name: '八角池',
// yewei: 12,
// nan: 1,
// bei: 0,
// isNB: 0,
// state: 1,
// url: 'east'
// }, {
// name: '匀浆池',
// yewei: 12,
// nan: 1,
// bei: 0,
// isNB: 0,
// state: 1,
// url: 'east'
// }, {
// name: '分离池',
// yewei: 12,
// nan: 1,
// bei: 0,
// isNB: 0,
// state: 1,
// url: 'east'
// }, {
// name: '发酵池',
// yewei: 12,
// nan: 1,
// isNB: 0,
// bei: 0,
// state: 1,
// url: 'east'
// }, {
// name: '出料',
// yewei: 12,
// nan: 1,
// isNB: 0,
// bei: 0,
// state: 1,
// url: 'east'
// }
];
}];
state = {
refreshState: {
currentState: 'deactivate',
drag: false
},
direction: '',
endReachedRefresh: false,
data: [],
directionName: 'up'
};
ngOnInit(): void {
this.init();
......@@ -120,81 +82,14 @@ export class HomePage implements OnInit, OnDestroy {
if (time) {
this.load.toLoad('加载中...', false);
}
const dong = {
name: '东中转池',
yewei: '',
nan: false,
bei: false,
isNB: 1,
url: 'east'
};
const xi = {
name: '西中转池',
yewei: '',
nan: false,
bei: false,
isNB: 1,
url: 'west'
};
let flagd = 0;
// flagx = 0;
// 东中转池 19041003 0号通道为液位
this.api.data.getRealData([{sn: '19041003', type: 'WTDR18X'}, (data) => {
flagd ++;
if (time) {
this.load.offLoad();
}
if (data && data.constructor === Array) {
if (data.length > 0) {
if (data[0].value) {
data[0].value = Number(data[0].value) > 0 ? data[0].value : '0';
data[0].value = Number(data[0].value) <= 6.5 ? data[0].value : '6.5';
dong.yewei = (6.5 - Number(data[0].value)).toFixed(2);
}
}
} else {
this.api.presentMsgToast('获取数据失败');
}
if (flagd === 2) {
this.items[0] = dong;
this.items = [...this.items];
}
}]);
// 东中转池 19041004 0,1号通道为南水 2,3号通道为北水
this.api.data.getRealData([{sn: '19041004', type: 'WTDR66C'}, (data) => {
flagd ++;
if (data && data.constructor === Array) {
if (data.length > 0) {
if (data[0]) {
dong.nan = !!(data[0].value === '1.0');
}
if (data[2]) {
dong.bei = !!(data[2].value === '1.0');
}
}
this.api.app.getAll(['', (data) => {
console.log(data);
if (data.constructor === Array) {
this.data = data;
} else {
this.api.presentMsgToast('获取数据失败');
}
if (flagd === 2) {
this.items[0] = dong;
this.items = [...this.items];
}
}]);
// 西中转池 19041006 0号通道为液位
this.api.data.getRealData([{sn: '19041006', type: 'WTDR18X'}, (data) => {
if (data && data.constructor === Array) {
if (data.length > 0) {
if (data[0].value) {
data[0].value = Number(data[0].value) > 0 ? data[0].value : '0';
data[0].value = Number(data[0].value) <= 6.5 ? data[0].value : '6.5';
xi.yewei = (6.5 - Number(data[0].value)).toFixed(2);
}
}
} else {
this.api.presentMsgToast('获取数据失败');
}
this.items[1] = xi;
this.items = [...this.items];
this.load.offLoad();
}]);
}
......@@ -209,4 +104,12 @@ export class HomePage implements OnInit, OnDestroy {
hash: ''
});
}
pullToRefresh(event) {
if (event === 'endReachedRefresh') {
console.log(11111111111111);
} else {
console.log(22222222222222);
}
}
}
......@@ -2,6 +2,7 @@ import {Component, OnInit} from '@angular/core';
import {Transfer} from '../service/transfer';
import {Api} from '../service/api';
import {fadeIn} from '../animations/fade-in';
import {Mqtt} from '../service/mqtt';
@Component({
selector: 'v-login',
......@@ -12,7 +13,7 @@ import {fadeIn} from '../animations/fade-in';
export class LoginPage implements OnInit {
req = {name: '', ps: ''};
constructor(private tf: Transfer, private api: Api) {
constructor(private tf: Transfer, private api: Api, private mqtt: Mqtt) {
}
ngOnInit() {
......@@ -23,15 +24,14 @@ export class LoginPage implements OnInit {
userName: this.req.name,
password: this.req.ps
};
this.api.login.loginForToken([req, (data) => {
this.api.login.login([req, (data) => {
if (data.code === 1) {
window.localStorage.setItem('token', data.message);
const query = {refresh: new Date().getTime()};
this.tf.transfer({
url: '/index',
query: query,
hash: ''
});
this.mqtt.getUserInfo();
} else {
this.api.presentMsgToast(data && data.message ? data.message : '登录失败');
}
......
......@@ -2,21 +2,21 @@ import {Http} from './http';
import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
import {environment} from '../../environments/environment';
import {LoadingController, ToastController} from '@ionic/angular';
import {ToastController} from '@ionic/angular';
import {Load} from './load';
@Injectable()
export class Api {
constructor(private http: Http, private router: Router, private toast: ToastController, private loading: LoadingController) {
constructor(private http: Http, private router: Router, private toast: ToastController, private load: Load) {
}
tokenLoseflag = 0;
public url = environment.url;
private load;
private loadFlag = 1;
public login = {
loginForToken: (data) => this.trans('post', '/system/login/loginForToken', data),
logout: (data) => this.trans('get', '/system/login/logout', data),
login: (data) => this.trans('post', '/login', data),
logout: (data) => this.trans('get', '/logout', data),
};
public data = {
......@@ -24,6 +24,30 @@ export class Api {
updateControl: (data) => this.trans('post', '/data/updateControl', data),
};
public app = {
getAll: (data) => this.trans('get', '/app/getAll', data),
getDeviceData: (data) => this.trans('post', '/app/getDeviceData', data),
getLiquidLevelData: (data) => this.trans('post', '/app/getLiquidLevelData', data),
getNorthSouthWaterData: (data) => this.trans('post', '/app/getNorthSouthWaterData', data),
};
public user = {
addUser: (data) => this.trans('post', '/user/addUser', data),
deleteUser: (data) => this.trans('post', '/user/deleteUser', data),
getAll: (data) => this.trans('get', '/user/getAll', data),
getByUserNameForLike: (data) => this.trans('post', '/user/getByUserNameForLike', data),
updatePassword: (data) => this.trans('post', '/user/updatePassword', data),
getSelfInfo: (data) => this.trans('get', '/user/getSelfInfo', data),
updateUser: (data) => this.trans('post', '/user/updateUser', data),
};
public alarm = {
addAlarmLog: (data) => this.trans('post', '/alarm/addAlarmLog', data),
getAlarmByTerm: (data) => this.trans('post', '/alarm/getAlarmByTerm', data),
getAllAlarm: (data) => this.trans('get', '/alarm/getAllAlarm', data),
getLatestAlarm: (data) => this.trans('get', '/alarm/getLatestAlarm', data)
};
private trans(type, addr, data) {
this.sendHttpReq(type, addr, data[0], data[1], data[2], data[3]);
}
......@@ -36,10 +60,10 @@ export class Api {
};
} else {
nextFunc = (data: any) => {
// this.offLoading();
if (this.http.handleToken(data)) {
next(data);
} else {
this.load.offLoad();
if (!this.tokenLoseflag) {
this.presentMsgToast('登录失效,请重新登陆');
this.http.toLoginPage(2000);
......@@ -54,7 +78,6 @@ export class Api {
if (!error) {
error = (err) => {
let data;
// this.offLoading();
if (err && err.error && err.error.status) {
if (err.error.status === 401) {
data = {code: 0, message: '用户尚未登录'};
......@@ -96,30 +119,4 @@ export class Api {
});
toast.present();
}
// MMP因为提前加载了内部的component,结果把里面的loading全加载出来了
// 简直阿西了个巴巴, 老规矩,标志位,只能出现一个,出现多的但是还没有消失就不给
async doLoading(msg) {
if (this.loadFlag) {
this.loadFlag = 0;
this.load = await this.loading.create({
spinner: 'circles',
mode: 'ios',
message: msg,
duration: 90000
});
await this.load.present();
}
}
async offLoading() {
if (!this.loadFlag) {
this.loadFlag = 1;
await this.load.dismiss();
} else {
setTimeout(() => {
this.offLoading();
}, 3000);
}
}
}
......@@ -7,18 +7,19 @@ export class Load {
private isLoad = false;
private time = 0;
// private _nFlag = false;
toLoad(msg, type) {
this.isLoad = true;
document.getElementById('v-loading').style.display = 'block';
document.getElementById('loading-inner').innerText = msg;
if (type) {
this.time = 0;
// @ts-ignore
document.getElementsByClassName('circle_process')[0].style.display = 'block';
document.getElementById('innerNum').innerText = this.time.toString() + 's';
this.addNum();
if (!this.isLoad) {
this.isLoad = true;
document.getElementById('v-loading').style.display = 'block';
document.getElementById('loading-inner').innerText = msg;
if (type) {
this.time = 0;
// @ts-ignore
document.getElementsByClassName('circle_process')[0].style.display = 'block';
document.getElementById('innerNum').innerText = this.time.toString() + 's';
this.addNum();
}
}
}
......@@ -34,12 +35,6 @@ export class Load {
offLoad() {
this.isLoad = false;
// if (this._nFlag) {
// this._nFlag = false;
// // @ts-ignore
// document.getElementsByClassName('circle_process')[0].style.display = 'none';
// document.getElementById('innerNum').style.display = 'none';
// }
document.getElementById('v-loading').style.display = 'none';
document.getElementById('loading-inner').innerText = '';
document.getElementById('innerNum').innerText = '0s';
......
import {Injectable} from '@angular/core';
import {LocalNotifications} from '@ionic-native/local-notifications/ngx';
import {Api} from './api';
declare var mqtt: any;
@Injectable()
export class Mqtt {
constructor(private localNotifications: LocalNotifications, private api: Api) {}
client;
topic;
msg;
private options = {
keepalive: 10,
clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8),
protocolId: 'MQTT',
protocolVersion: 4,
clean: false,
connectTimeout: 60000,
username: 'pasture',
password: 'Pasture37774020',
};
getUserInfo() {
this.api.user.getSelfInfo(['', (data) => {
if (data.userName) {
this.initMqtt(data.userName);
} else {
this.api.presentMsgToast('报警消息订阅失败');
}
}]);
}
public initMqtt(name) {
this.client = mqtt.connect('ws://172.16.1.24:8083/mqtt', this.options);
this.topic = 'Pasture/' + name + '/Alarm';
this.client.on('connect', () => {
this.msg = 'mqtt连接成功';
this.client.subscribe(this.topic);
this.client.on('message', (a, b) => {
console.log(b.toString());
this.localNotifications.schedule([{
title: '牧场报警',
text: JSON.parse(b.toString())[0].description,
sound: 'file://beep.caf',
icon: 'https://witcloud-oss.oss-cn-shanghai.aliyuncs.com/mysqldump/pasture.png',
foreground: true,
silent: false,
vibrate: true,
led: '#ff0000'
}]);
});
});
}
public endMqtt() {
this.client.unsubscribe(this.topic);
this.client.disconnect();
}
}
export const environment = {
production: true,
url: 'http://cloud-test.witium.com/api', // 对外访问witiumCloud2网地址
url: 'http://pasture.witium.com/api', // 对外访问测试网地址
// url: 'http://172.16.1.52:8094', // 测试
};
......@@ -4,9 +4,11 @@
export const environment = {
production: false,
url: 'http://cloud-test.witium.com/api', // 对外访问witiumCloud2地址
// url: 'http://pasture.witium.com/api', // 对外访问测试网地址
// url: 'http://cloud-test.witium.com:8096', // 测试
url: 'http://172.16.1.53:8097', // cy
// url: 'http://172.16.1.52:8096', // zz
// url: 'http://172.16.1.13:8094', // 测试
// url: 'http://172.16.1.52:8094', // zz
};
/*
......
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