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

报警组件

parent f1f8deab
...@@ -797,6 +797,14 @@ ...@@ -797,6 +797,14 @@
"@types/cordova": "^0.0.34" "@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": { "@ionic-native/splash-screen": {
"version": "5.4.0", "version": "5.4.0",
"resolved": "http://registry.npm.taobao.org/@ionic-native/splash-screen/download/@ionic-native/splash-screen-5.4.0.tgz", "resolved": "http://registry.npm.taobao.org/@ionic-native/splash-screen/download/@ionic-native/splash-screen-5.4.0.tgz",
...@@ -2982,6 +2990,11 @@ ...@@ -2982,6 +2990,11 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-appminimize/-/cordova-plugin-appminimize-1.0.1.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-appminimize/-/cordova-plugin-appminimize-1.0.1.tgz",
"integrity": "sha512-UJZ5g8iFBP42EplS0gKwAQhwr9cUfur95o6w+2NW21pjbgioj1RVZddngy7dO++ABDpkd4HMPYnJw7DqMp5rww==" "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": { "cordova-plugin-device": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "http://registry.npm.taobao.org/cordova-plugin-device/download/cordova-plugin-device-2.0.2.tgz", "resolved": "http://registry.npm.taobao.org/cordova-plugin-device/download/cordova-plugin-device-2.0.2.tgz",
...@@ -2997,6 +3010,11 @@ ...@@ -2997,6 +3010,11 @@
"resolved": "http://registry.npm.taobao.org/cordova-plugin-ionic-webview/download/cordova-plugin-ionic-webview-3.1.2.tgz", "resolved": "http://registry.npm.taobao.org/cordova-plugin-ionic-webview/download/cordova-plugin-ionic-webview-3.1.2.tgz",
"integrity": "sha1-gP4eggZ62Ny8Xs8AytL436DQ4Q8=" "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": { "cordova-plugin-screen-orientation": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-screen-orientation/-/cordova-plugin-screen-orientation-3.0.1.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-screen-orientation/-/cordova-plugin-screen-orientation-3.0.1.tgz",
...@@ -4392,8 +4410,7 @@ ...@@ -4392,8 +4410,7 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
...@@ -4414,14 +4431,12 @@ ...@@ -4414,14 +4431,12 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
...@@ -4436,20 +4451,17 @@ ...@@ -4436,20 +4451,17 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
...@@ -4566,8 +4578,7 @@ ...@@ -4566,8 +4578,7 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
...@@ -4579,7 +4590,6 @@ ...@@ -4579,7 +4590,6 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
...@@ -4594,7 +4604,6 @@ ...@@ -4594,7 +4604,6 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
...@@ -4602,14 +4611,12 @@ ...@@ -4602,14 +4611,12 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
...@@ -4628,7 +4635,6 @@ ...@@ -4628,7 +4635,6 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
...@@ -4709,8 +4715,7 @@ ...@@ -4709,8 +4715,7 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
...@@ -4722,7 +4727,6 @@ ...@@ -4722,7 +4727,6 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
...@@ -4808,8 +4812,7 @@ ...@@ -4808,8 +4812,7 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
...@@ -4845,7 +4848,6 @@ ...@@ -4845,7 +4848,6 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
...@@ -4865,7 +4867,6 @@ ...@@ -4865,7 +4867,6 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
...@@ -4909,14 +4910,12 @@ ...@@ -4909,14 +4910,12 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
} }
} }
}, },
......
...@@ -23,15 +23,18 @@ ...@@ -23,15 +23,18 @@
"@angular/router": "^7.2.2", "@angular/router": "^7.2.2",
"@ionic-native/app-minimize": "^5.5.0", "@ionic-native/app-minimize": "^5.5.0",
"@ionic-native/core": "^5.0.0", "@ionic-native/core": "^5.0.0",
"@ionic-native/local-notifications": "^5.8.0",
"@ionic-native/splash-screen": "^5.0.0", "@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0", "@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^4.1.0", "@ionic/angular": "^4.1.0",
"cordova-android": "7.1.4", "cordova-android": "7.1.4",
"cordova-ios": "~4.5.5", "cordova-ios": "~4.5.5",
"cordova-plugin-appminimize": "1.0.1", "cordova-plugin-appminimize": "1.0.1",
"cordova-plugin-badge": "0.8.8",
"cordova-plugin-device": "2.0.2", "cordova-plugin-device": "2.0.2",
"cordova-plugin-ionic-keyboard": "^2.0.5", "cordova-plugin-ionic-keyboard": "^2.0.5",
"cordova-plugin-ionic-webview": "^3.0.0", "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-screen-orientation": "^3.0.1",
"cordova-plugin-splashscreen": "5.0.2", "cordova-plugin-splashscreen": "5.0.2",
"cordova-plugin-statusbar": "^2.4.2", "cordova-plugin-statusbar": "^2.4.2",
...@@ -79,7 +82,8 @@ ...@@ -79,7 +82,8 @@
"cordova-plugin-ionic-webview": {}, "cordova-plugin-ionic-webview": {},
"cordova-plugin-ionic-keyboard": {}, "cordova-plugin-ionic-keyboard": {},
"cordova-plugin-appminimize": {}, "cordova-plugin-appminimize": {},
"cordova-plugin-screen-orientation": {} "cordova-plugin-screen-orientation": {},
"cordova-plugin-local-notification": {}
}, },
"platforms": [ "platforms": [
"android", "android",
......
...@@ -4,76 +4,85 @@ import {Platform} from '@ionic/angular'; ...@@ -4,76 +4,85 @@ import {Platform} from '@ionic/angular';
import {SplashScreen} from '@ionic-native/splash-screen/ngx'; import {SplashScreen} from '@ionic-native/splash-screen/ngx';
import {StatusBar} from '@ionic-native/status-bar/ngx'; import {StatusBar} from '@ionic-native/status-bar/ngx';
import {Router, NavigationEnd} from '@angular/router'; 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 screen: any;
declare var mqtt: any;
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
templateUrl: 'app.component.html', templateUrl: 'app.component.html',
styles: [` styles: [`
.circle_process{ .circle_process {
width: 100px; width: 100px;
height : 100px; height: 100px;
margin: 0 auto; margin: 0 auto;
display: none; display: none;
} }
.circle_process .wrapper{
.circle_process .wrapper {
width: 50px; width: 50px;
height: 100px; height: 100px;
position: absolute; position: absolute;
top:0; top: 0;
overflow: hidden; overflow: hidden;
} }
.circle_process .right{
right:0; .circle_process .right {
right: 0;
position: relative; position: relative;
left: 50px; left: 50px;
} }
.circle_process .left{
.circle_process .left {
position: relative; position: relative;
top: -100px; top: -100px;
} }
.circle_process .circle{
.circle_process .circle {
width: 80px; width: 80px;
height: 80px; height: 80px;
border:10px solid transparent; border: 10px solid transparent;
border-radius: 50%; border-radius: 50%;
position: absolute; position: absolute;
top:0; top: 0;
transform : rotate(-135deg); transform: rotate(-135deg);
} }
.circle_process .rightcircle{
border-top:10px solid green; .circle_process .rightcircle {
border-right:10px solid green; border-top: 10px solid green;
right:0; border-right: 10px solid green;
right: 0;
animation: circle_right 120s linear infinite; animation: circle_right 120s linear infinite;
-webkit-animation: circle_right 120s linear infinite; -webkit-animation: circle_right 120s linear infinite;
} }
.circle_process .leftcircle{
border-bottom:10px solid green; .circle_process .leftcircle {
border-left:10px solid green; border-bottom: 10px solid green;
left:0; border-left: 10px solid green;
left: 0;
animation: circle_left 120s linear infinite; animation: circle_left 120s linear infinite;
-webkit-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); -webkit-transform: rotate(-135deg);
} }
50%,100%{ 50%, 100% {
-webkit-transform: rotate(45deg); -webkit-transform: rotate(45deg);
} }
} }
@-webkit-keyframes circle_left{
0%,50%{ @-webkit-keyframes circle_left {
0%, 50% {
-webkit-transform: rotate(-135deg); -webkit-transform: rotate(-135deg);
} }
100%{ 100% {
-webkit-transform: rotate(45deg); -webkit-transform: rotate(45deg);
} }
} }
#innerNum { #innerNum {
font-size: 20px; font-size: 20px;
font-weight: 600; font-weight: 600;
...@@ -90,7 +99,8 @@ export class AppComponent implements AfterViewInit, OnDestroy { ...@@ -90,7 +99,8 @@ export class AppComponent implements AfterViewInit, OnDestroy {
private splashScreen: SplashScreen, private splashScreen: SplashScreen,
private statusBar: StatusBar, private statusBar: StatusBar,
private appMinimize: AppMinimize, private appMinimize: AppMinimize,
private router: Router private router: Router,
private mqtt: Mqtt
) { ) {
this.initializeApp(); this.initializeApp();
} }
...@@ -98,19 +108,6 @@ export class AppComponent implements AfterViewInit, OnDestroy { ...@@ -98,19 +108,6 @@ export class AppComponent implements AfterViewInit, OnDestroy {
private backBtnPressed; private backBtnPressed;
private url; private url;
private flag = 0; 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() { initializeApp() {
this.platform.ready().then(() => { this.platform.ready().then(() => {
...@@ -138,11 +135,11 @@ export class AppComponent implements AfterViewInit, OnDestroy { ...@@ -138,11 +135,11 @@ export class AppComponent implements AfterViewInit, OnDestroy {
this.statusBar.overlaysWebView(false); this.statusBar.overlaysWebView(false);
this.splashScreen.hide(); this.splashScreen.hide();
} }
this.initMqtt(); this.mqtt.getUserInfo();
} }
ngOnDestroy(): void { ngOnDestroy(): void {
this.endMqtt(); this.mqtt.endMqtt();
} }
initRouterListen() { initRouterListen() {
...@@ -173,22 +170,4 @@ export class AppComponent implements AfterViewInit, OnDestroy { ...@@ -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'; ...@@ -7,6 +7,7 @@ import {HttpClientModule} from '@angular/common/http';
import {IonicModule, IonicRouteStrategy} from '@ionic/angular'; import {IonicModule, IonicRouteStrategy} from '@ionic/angular';
import {SplashScreen} from '@ionic-native/splash-screen/ngx'; import {SplashScreen} from '@ionic-native/splash-screen/ngx';
import {StatusBar} from '@ionic-native/status-bar/ngx'; import {StatusBar} from '@ionic-native/status-bar/ngx';
import {LocalNotifications} from '@ionic-native/local-notifications/ngx';
import {FormsModule} from '@angular/forms'; import {FormsModule} from '@angular/forms';
import {HTTP_INTERCEPTORS} from '@angular/common/http'; import {HTTP_INTERCEPTORS} from '@angular/common/http';
import {NgZorroAntdMobileModule} from 'ng-zorro-antd-mobile'; import {NgZorroAntdMobileModule} from 'ng-zorro-antd-mobile';
...@@ -15,6 +16,7 @@ import {AppComponent} from './app.component'; ...@@ -15,6 +16,7 @@ import {AppComponent} from './app.component';
import {AppRoutingModule} from './app-routing.module'; import {AppRoutingModule} from './app-routing.module';
import {SubTitleComponent} from './components/sub-title/sub-title.component'; import {SubTitleComponent} from './components/sub-title/sub-title.component';
import {SwitchComponent} from './components/switch/switch.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'; import {AppMinimize} from '@ionic-native/app-minimize/ngx';
...@@ -31,20 +33,22 @@ import {Auth} from './service/auth'; ...@@ -31,20 +33,22 @@ import {Auth} from './service/auth';
import {Http} from './service/http'; import {Http} from './service/http';
import {Transfer} from './service/transfer'; import {Transfer} from './service/transfer';
import {AuthInterceptor} from './service/token'; import {AuthInterceptor} from './service/token';
import {Mqtt} from './service/mqtt';
import {Load} from './service/load'; import {Load} from './service/load';
@NgModule({ @NgModule({
declarations: [ declarations: [
AppComponent, AppComponent,
SubTitleComponent, SubTitleComponent,
SwitchComponent,
AlarmBarComponent,
HomePage, HomePage,
EastPage, EastPage,
LoginPage, LoginPage,
WestPage, WestPage,
AlarmPage, AlarmPage,
RowPage, RowPage,
IndexPage, IndexPage
SwitchComponent
], ],
entryComponents: [], entryComponents: [],
imports: [ imports: [
...@@ -66,9 +70,11 @@ import {Load} from './service/load'; ...@@ -66,9 +70,11 @@ import {Load} from './service/load';
multi: true, multi: true,
}, },
AppMinimize, AppMinimize,
LocalNotifications,
Api, Api,
Auth, Auth,
Http, Http,
Mqtt,
Transfer, Transfer,
Load 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,17 +7,14 @@ ...@@ -7,17 +7,14 @@
</div> </div>
</ion-slide> </ion-slide>
</ion-slides> </ion-slides>
<!--<div class="one" *ngFor="let one of alarms, let i = index">--> <v-alarm-bar></v-alarm-bar>
<!--<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>-->
<div class="seePart"> <div class="seePart">
<v-sub-title title="监测信息"></v-sub-title> <v-sub-title title="监测信息"></v-sub-title>
<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="item" *ngFor="let item of items" (click)="toControl(item.url)">
<div class="left">{{item.name}}</div> <div class="left">{{item.name}}</div>
<div class="right"> <div class="right">
...@@ -32,5 +29,27 @@ ...@@ -32,5 +29,27 @@
<!--<div class="block4">设备状态 <span [ngClass]="{'sucCir': item.state, 'errCir': !item.state}"></span></div>--> <!--<div class="block4">设备状态 <span [ngClass]="{'sucCir': item.state, 'errCir': !item.state}"></span></div>-->
</div> </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>
</div> </div>
...@@ -28,7 +28,9 @@ export class HomePage implements OnInit, OnDestroy { ...@@ -28,7 +28,9 @@ export class HomePage implements OnInit, OnDestroy {
loop: true, loop: true,
spaceBetween: 0 spaceBetween: 0
}; };
alarms = []; alarms = [1, 2, 3, 4, 5];
data = [];
items = [{ items = [{
name: '东中转池', name: '东中转池',
...@@ -44,57 +46,17 @@ export class HomePage implements OnInit, OnDestroy { ...@@ -44,57 +46,17 @@ export class HomePage implements OnInit, OnDestroy {
bei: false, bei: false,
isNB: 1, isNB: 1,
url: 'west' url: 'west'
} }];
// , { state = {
// name: '沉砂池', refreshState: {
// yewei: 12, currentState: 'deactivate',
// nan: 1, drag: false
// bei: 0, },
// isNB: 0, direction: '',
// state: 1, endReachedRefresh: false,
// url: 'east' data: [],
// }, { directionName: 'up'
// 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'
// }
];
ngOnInit(): void { ngOnInit(): void {
this.init(); this.init();
...@@ -120,81 +82,14 @@ export class HomePage implements OnInit, OnDestroy { ...@@ -120,81 +82,14 @@ export class HomePage implements OnInit, OnDestroy {
if (time) { if (time) {
this.load.toLoad('加载中...', false); this.load.toLoad('加载中...', false);
} }
const dong = { this.api.app.getAll(['', (data) => {
name: '东中转池', console.log(data);
yewei: '', if (data.constructor === Array) {
nan: false, this.data = data;
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 { } else {
this.api.presentMsgToast('获取数据失败'); this.api.presentMsgToast('获取数据失败');
} }
if (flagd === 2) { this.load.offLoad();
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');
}
}
} 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];
}]); }]);
} }
...@@ -209,4 +104,12 @@ export class HomePage implements OnInit, OnDestroy { ...@@ -209,4 +104,12 @@ export class HomePage implements OnInit, OnDestroy {
hash: '' hash: ''
}); });
} }
pullToRefresh(event) {
if (event === 'endReachedRefresh') {
console.log(11111111111111);
} else {
console.log(22222222222222);
}
}
} }
...@@ -2,6 +2,7 @@ import {Component, OnInit} from '@angular/core'; ...@@ -2,6 +2,7 @@ import {Component, OnInit} from '@angular/core';
import {Transfer} from '../service/transfer'; import {Transfer} from '../service/transfer';
import {Api} from '../service/api'; import {Api} from '../service/api';
import {fadeIn} from '../animations/fade-in'; import {fadeIn} from '../animations/fade-in';
import {Mqtt} from '../service/mqtt';
@Component({ @Component({
selector: 'v-login', selector: 'v-login',
...@@ -12,7 +13,7 @@ import {fadeIn} from '../animations/fade-in'; ...@@ -12,7 +13,7 @@ import {fadeIn} from '../animations/fade-in';
export class LoginPage implements OnInit { export class LoginPage implements OnInit {
req = {name: '', ps: ''}; req = {name: '', ps: ''};
constructor(private tf: Transfer, private api: Api) { constructor(private tf: Transfer, private api: Api, private mqtt: Mqtt) {
} }
ngOnInit() { ngOnInit() {
...@@ -23,15 +24,14 @@ export class LoginPage implements OnInit { ...@@ -23,15 +24,14 @@ export class LoginPage implements OnInit {
userName: this.req.name, userName: this.req.name,
password: this.req.ps password: this.req.ps
}; };
this.api.login.loginForToken([req, (data) => { this.api.login.login([req, (data) => {
if (data.code === 1) { if (data.code === 1) {
window.localStorage.setItem('token', data.message); window.localStorage.setItem('token', data.message);
const query = {refresh: new Date().getTime()};
this.tf.transfer({ this.tf.transfer({
url: '/index', url: '/index',
query: query,
hash: '' hash: ''
}); });
this.mqtt.getUserInfo();
} else { } else {
this.api.presentMsgToast(data && data.message ? data.message : '登录失败'); this.api.presentMsgToast(data && data.message ? data.message : '登录失败');
} }
......
...@@ -2,21 +2,21 @@ import {Http} from './http'; ...@@ -2,21 +2,21 @@ import {Http} from './http';
import {Injectable} from '@angular/core'; import {Injectable} from '@angular/core';
import {Router} from '@angular/router'; import {Router} from '@angular/router';
import {environment} from '../../environments/environment'; import {environment} from '../../environments/environment';
import {LoadingController, ToastController} from '@ionic/angular'; import {ToastController} from '@ionic/angular';
import {Load} from './load';
@Injectable() @Injectable()
export class Api { 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; tokenLoseflag = 0;
public url = environment.url; public url = environment.url;
private load;
private loadFlag = 1; private loadFlag = 1;
public login = { public login = {
loginForToken: (data) => this.trans('post', '/system/login/loginForToken', data), login: (data) => this.trans('post', '/login', data),
logout: (data) => this.trans('get', '/system/login/logout', data), logout: (data) => this.trans('get', '/logout', data),
}; };
public data = { public data = {
...@@ -24,6 +24,30 @@ export class Api { ...@@ -24,6 +24,30 @@ export class Api {
updateControl: (data) => this.trans('post', '/data/updateControl', data), 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) { private trans(type, addr, data) {
this.sendHttpReq(type, addr, data[0], data[1], data[2], data[3]); this.sendHttpReq(type, addr, data[0], data[1], data[2], data[3]);
} }
...@@ -36,10 +60,10 @@ export class Api { ...@@ -36,10 +60,10 @@ export class Api {
}; };
} else { } else {
nextFunc = (data: any) => { nextFunc = (data: any) => {
// this.offLoading();
if (this.http.handleToken(data)) { if (this.http.handleToken(data)) {
next(data); next(data);
} else { } else {
this.load.offLoad();
if (!this.tokenLoseflag) { if (!this.tokenLoseflag) {
this.presentMsgToast('登录失效,请重新登陆'); this.presentMsgToast('登录失效,请重新登陆');
this.http.toLoginPage(2000); this.http.toLoginPage(2000);
...@@ -54,7 +78,6 @@ export class Api { ...@@ -54,7 +78,6 @@ export class Api {
if (!error) { if (!error) {
error = (err) => { error = (err) => {
let data; let data;
// this.offLoading();
if (err && err.error && err.error.status) { if (err && err.error && err.error.status) {
if (err.error.status === 401) { if (err.error.status === 401) {
data = {code: 0, message: '用户尚未登录'}; data = {code: 0, message: '用户尚未登录'};
...@@ -96,30 +119,4 @@ export class Api { ...@@ -96,30 +119,4 @@ export class Api {
}); });
toast.present(); 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,9 +7,9 @@ export class Load { ...@@ -7,9 +7,9 @@ export class Load {
private isLoad = false; private isLoad = false;
private time = 0; private time = 0;
// private _nFlag = false;
toLoad(msg, type) { toLoad(msg, type) {
if (!this.isLoad) {
this.isLoad = true; this.isLoad = true;
document.getElementById('v-loading').style.display = 'block'; document.getElementById('v-loading').style.display = 'block';
document.getElementById('loading-inner').innerText = msg; document.getElementById('loading-inner').innerText = msg;
...@@ -21,6 +21,7 @@ export class Load { ...@@ -21,6 +21,7 @@ export class Load {
this.addNum(); this.addNum();
} }
} }
}
addNum() { addNum() {
setTimeout(() => { setTimeout(() => {
...@@ -34,12 +35,6 @@ export class Load { ...@@ -34,12 +35,6 @@ export class Load {
offLoad() { offLoad() {
this.isLoad = false; 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('v-loading').style.display = 'none';
document.getElementById('loading-inner').innerText = ''; document.getElementById('loading-inner').innerText = '';
document.getElementById('innerNum').innerText = '0s'; 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 = { export const environment = {
production: true, production: true,
url: 'http://cloud-test.witium.com/api', // 对外访问witiumCloud2网地址 url: 'http://pasture.witium.com/api', // 对外访问测试网地址
// url: 'http://172.16.1.52:8094', // 测试 // url: 'http://172.16.1.52:8094', // 测试
}; };
...@@ -4,9 +4,11 @@ ...@@ -4,9 +4,11 @@
export const environment = { export const environment = {
production: false, 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.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