Commit f58afd78 authored by van.chen's avatar van.chen

init

parent d22ed590
...@@ -8,7 +8,13 @@ ...@@ -8,7 +8,13 @@
"sourceRoot": "src", "sourceRoot": "src",
"projectType": "application", "projectType": "application",
"prefix": "app", "prefix": "app",
"schematics": {}, "schematics": {
"@schematics/angular:component": {
"inlineStyle": true,
"styleext": "scss",
"spec": false
}
},
"architect": { "architect": {
"build": { "build": {
"builder": "@angular-devkit/build-angular:browser", "builder": "@angular-devkit/build-angular:browser",
...@@ -28,7 +34,8 @@ ...@@ -28,7 +34,8 @@
"src/assets" "src/assets"
], ],
"styles": [ "styles": [
"src/styles.css", "src/styles.scss",
"src/assets/iconfont/iconfont.css",
"node_modules/ng-zorro-antd/ng-zorro-antd.min.css" "node_modules/ng-zorro-antd/ng-zorro-antd.min.css"
], ],
"scripts": [ "scripts": [
...@@ -88,7 +95,8 @@ ...@@ -88,7 +95,8 @@
"tsConfig": "src/tsconfig.spec.json", "tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "src/karma.conf.js", "karmaConfig": "src/karma.conf.js",
"styles": [ "styles": [
"src/styles.css", "src/styles.scss",
"src/assets/iconfont/iconfont.css",
"node_modules/ng-zorro-antd/ng-zorro-antd.min.css" "node_modules/ng-zorro-antd/ng-zorro-antd.min.css"
], ],
"scripts": [ "scripts": [
......
import { Component } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import {zh_CN, en_US, NzI18nService} from 'ng-zorro-antd';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
templateUrl: './app.component.html', templateUrl: './app.component.html',
styleUrls: ['./app.component.css'] styleUrls: ['./app.component.css']
}) })
export class AppComponent { export class AppComponent implements OnInit {
title = 'witiumCloud2'; constructor(private translateService: TranslateService, private nzI18nService: NzI18nService) {}
ngOnInit() {
// --- set i18n begin ---
this.translateService.addLangs(['zh', 'en', 'jpn']);
const lan = localStorage.getItem('default_language');
if (lan) {
this.translateService.setDefaultLang(lan);
this.translateService.use(lan);
if (lan === 'zh') {
this.nzI18nService.setLocale(zh_CN);
} else {
this.nzI18nService.setLocale(en_US);
}
} else {
this.translateService.setDefaultLang('zh');
this.translateService.use('zh');
this.nzI18nService.setLocale(zh_CN);
}
// --- set i18n end ---
}
} }
...@@ -2,6 +2,7 @@ import {BrowserModule} from '@angular/platform-browser'; ...@@ -2,6 +2,7 @@ import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core'; import {NgModule} from '@angular/core';
import {RoutingModule} from './router.module'; import {RoutingModule} from './router.module';
import {NgZorroAntdModule} from 'ng-zorro-antd'; import {NgZorroAntdModule} from 'ng-zorro-antd';
import {FormsModule} from '@angular/forms';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {HttpClientModule, HttpClient} from '@angular/common/http'; import {HttpClientModule, HttpClient} from '@angular/common/http';
...@@ -11,6 +12,7 @@ import {NgxEchartsModule} from 'ngx-echarts'; ...@@ -11,6 +12,7 @@ import {NgxEchartsModule} from 'ngx-echarts';
import {LayoutModule} from './layout/layout.module'; import {LayoutModule} from './layout/layout.module';
// 主组件注册 // 主组件注册
import {AppComponent} from './app.component'; import {AppComponent} from './app.component';
import {LoadingComponent} from './component/loading/loading.component';
// 国际化相关内容 // 国际化相关内容
import {TranslateLoader, TranslateModule} from '@ngx-translate/core'; import {TranslateLoader, TranslateModule} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader'; import {TranslateHttpLoader} from '@ngx-translate/http-loader';
...@@ -18,10 +20,10 @@ import {TranslateHttpLoader} from '@ngx-translate/http-loader'; ...@@ -18,10 +20,10 @@ import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import {HTTP_INTERCEPTORS} from '@angular/common/http'; import {HTTP_INTERCEPTORS} from '@angular/common/http';
export function createTranslateHttpLoader(http: HttpClient) { export function createTranslateHttpLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json'); return new TranslateHttpLoader(http, '../assets/i18n/', '.json');
} }
// 配置 angular i18n // 配置 angular i18n
import {registerLocaleData} from '@angular/common'; import {registerLocaleData} from '@angular/common';
import zh from '@angular/common/locales/zh'; import zh from '@angular/common/locales/zh';
...@@ -41,9 +43,11 @@ import {CheckService} from './service/check'; ...@@ -41,9 +43,11 @@ import {CheckService} from './service/check';
@NgModule({ @NgModule({
declarations: [ declarations: [
AppComponent, AppComponent,
LoadingComponent
], ],
imports: [ imports: [
BrowserModule, BrowserModule,
FormsModule,
NgxEchartsModule, NgxEchartsModule,
LayoutModule, LayoutModule,
BrowserAnimationsModule, BrowserAnimationsModule,
......
<div class="searchItem" [ngClass]="{'inModal': inModal}">
<div class="item-label">{{label}}</div>
<div class="item-input">
<nz-date-picker *ngIf="!readonly" [(ngModel)]="date" nzPlaceHolder="" [nzShowTime]="showTime" [nzStyle]="{'width': '100%'}" style="width: 100%" (ngModelChange)="onChange()"></nz-date-picker>
<span *ngIf="readonly">{{date | date: 'yyyy-MM-dd HH:mm:ss'}}</span>
</div>
</div>
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-search-date',
templateUrl: './search-date.component.html'
})
export class SearchDateComponent implements OnInit {
@Input() label: any;
_value: any;
date: any;
@Input()
get value(): any {
return this._value;
}
set value(_value: any) {
this.initDate(_value);
}
@Input() showTime: any = false;
@Input() inModal: any = false;
@Input() readonly: any = false;
@Output() valueChange = new EventEmitter();
constructor() { }
ngOnInit() {
}
initDate(date) {
date = Number(date);
if (!isNaN(date)) {
this.date = new Date(date);
} else {
this.date = '';
}
}
onChange() {
const value = new Date(this.date).getTime();
this.valueChange.emit(value);
}
}
<div class="searchItem" [ngClass]="{'inModal': inModal}">
<div class="item-label">{{label}}</div>
<div class="item-input">
<input *ngIf="!readonly" nz-input [type]="type" [(ngModel)]="value" [maxlength]="maxlength" (ngModelChange)="onChange()">
<span *ngIf="readonly">{{value}}</span>
</div>
</div>
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-search-item',
templateUrl: './search-item.component.html'
})
export class SearchItemComponent implements OnInit {
@Input() label: any;
@Input() value: any;
@Input() type: any = 'text';
@Input() inModal: any = false;
@Input() readonly: any = false;
@Input() maxlength: any = 200;
@Output() valueChange = new EventEmitter();
constructor() {}
ngOnInit() {}
onChange() {
this.valueChange.emit(this.value);
}
}
<div class="searchItem" [ngClass]="{'inModal': inModal}">
<div class="item-label">{{label}}</div>
<div class="item-input">
<nz-select *ngIf="!readonly" [(ngModel)]="value" [nzNoAnimation]="true" style="width: 100%;" [nzMode]="nzMode" (ngModelChange)="onChange()">
<nz-option *ngFor="let one of data" [nzLabel]="one[optL]" [nzValue]="one[optV]"></nz-option>
</nz-select>
<span *ngIf="readonly">{{value}}</span>
</div>
</div>
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-search-select',
templateUrl: './search-select.component.html'
})
export class SearchSelectComponent implements OnInit {
@Input() label: any;
@Input() value: any;
@Input() optL: any = 'label';
@Input() optV: any = 'value';
@Input() nzMode: any = 'default';
@Input() inModal: any = false;
@Input() readonly: any = false;
@Input() data: any = [];
@Output() valueChange = new EventEmitter();
constructor() { }
ngOnInit() {
}
onChange() {
this.valueChange.emit(this.value);
}
}
.transfer-main {
display: inline-flex;
}
.transfer-left {
margin-right: 10px;
}
.transfer-right {
margin-left: 10px;
}
.transfer-item {
line-height: 30px;
text-indent: 15px;
}
.transfer-item:hover,.transfer-item:active,.transfer-item:visited,.transfer-item:focus {
background-color: #1890ff;
opacity: 0.5;
color: #ffffff;
}
.transfer-con {
display: inline-block;
overflow-x: hidden;
overflow-y: auto;
width: 100%;
}
.transfer-part {
width: calc(50% - 10px);
height: calc(100% - 2px);
overflow: hidden;
display: inline-block;
border: 1px solid #cccccc;
border-radius: 5px;
}
.transfer-input {
width: calc(100% - 40px);
border: 1px solid #ccc;
height: 30px;
box-shadow: none;
padding: 0 10px;
padding-right: 28px;
outline: none !important;
}
.transfer-title {
margin: -1px -1px 0 -1px;
position: relative;
}
.transfer-search {
font-size: 16px;
position: absolute;
z-index: 9;
right: 0;
width: 30px;
height: 30px;
text-align: center;
top: 35px;
color: rgba(0,0,0,.25);
}
.transfer-none {
text-align: center;
margin-top: 40%;
font-size: 16px;
color: #cccccc;
}
.right {
float: right;
}
.transfer-head {
height: 30px;
padding: 0 10px;
font-weight: 600;
line-height: 30px;
margin: -1px;
border: 1px solid #ccc;
}
<div class="transfer-main" [ngStyle]="transferStyle">
<div class="transfer-part transfer-left">
<div class="transfer-title">
<div class="transfer-head">{{'waitForSelect' | translate}}<span class="right editSpan" (click)="checkAll()">{{'allSelected' | translate}}</span></div>
<input class="transfer-input" [(ngModel)]="searchLeftKey" [placeholder]="'pleaseFillInKeyword' | translate">
<span class="transfer-search" (click)="searchLeft()"><i nz-icon type="search"></i></span>
</div>
<div id="transfer-left" class="transfer-con" style="height: calc(100% - 62px);">
<div class="transfer-item" *ngFor="let one of left,let i = index" (click)="moveToRight(i, one)">{{one[label]}}</div>
<div *ngIf="isloading" style="text-align: center;padding-top: 10px;">
<nz-spin [nzTip]="('loading' | translate) + '...'"></nz-spin>
</div>
<div class="transfer-none" *ngIf="left.length === 0">{{'noData' | translate}}</div>
</div>
</div>
<div class="transfer-part transfer-right">
<div class="transfer-title">
<div class="transfer-head">{{'selected' | translate}}<span class="right editSpan" (click)="checkNone()">{{'allCleanUp' | translate}}</span></div>
</div>
<div id="transfer-right" class="transfer-con" style="height: calc(100% - 30px);">
<div class="transfer-item" *ngFor="let one of right,let i = index" (click)="moveToLeft(i, one)">{{one[label]}}</div>
<div class="transfer-none" *ngIf="right.length === 0">{{'noData' | translate}}</div></div>
</div>
</div>
import { Component, OnInit, AfterViewInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-transfer',
templateUrl: './transfer.component.html',
styleUrls: ['./transfer.component.css']
})
export class TransferComponent implements OnInit, AfterViewInit {
left: any = [];
right: any = [];
listData = [];
searchLeftKey = '';
isloading = false;
_list: any = [];
constructor() {}
@Input()
transferStyle: any = {'width': '450px', 'height': '300px'};
@Input()
label = 'title';
@Input()
get list(): any {
return this._list;
}
set list(_list: any) {
this.listData = _list;
this.initTransfer();
}
ngOnInit() {
}
ngAfterViewInit() {
this.initTransfer();
}
initTransfer() {
this.searchLeftKey = '';
const list = this.listData, left = [], right = [];
if (list.length === 0) {
this.left = left;
this.right = right;
}
list.map((item, index) => {
if (!item.direction || item.direction === 'left') {
if (left.length < 100) {
left.push(item);
}
} else {
right.push(item);
}
if (index === list.length - 1) {
this.left = left;
this.right = right;
setTimeout(() => {
this.addMore();
}, 1);
}
});
}
addMore() {
const left = document.getElementById('transfer-left');
left.scrollTop = 0;
let flag = 0;
left.onscroll = () => {
if (left.scrollTop > left.scrollHeight - 400 && flag === 0 ) {
this.isloading = true;
flag = 1;
setTimeout(() => {
const leftObj = {...this.left};
const str = JSON.stringify(this.right);
const list = this.listData.filter((item) => str.indexOf('"' + this.label + '":"' + item[this.label] + '"') <= -1);
this.left = leftObj.concat(list.filter((item) => item[this.label].indexOf(this.searchLeftKey) > -1).filter((item, index) => index >= this.left.length && index < this.left.length + 100));
this.isloading = false;
flag = 0;
}, 2000);
}
};
}
moveToLeft(i, one) {
this.right.splice(i, 1);
this.left.push(one);
}
moveToRight(i, one) {
this.left.splice(i, 1);
this.right.push(one);
}
searchLeft() {
const str = JSON.stringify(this.right);
let list = this.listData.filter((item) => str.indexOf('"' + this.label + '":"' + item[this.label] + '"') <= -1);
list = list.filter((item) => item[this.label].indexOf(this.searchLeftKey) > -1).filter((item, index) => index < 100);
this.left = list;
}
getSelected() {
return this.right;
}
checkNone() {
this.right = [];
this.searchLeft();
}
checkAll() {
this.right = Array.from(new Set(this.right.concat(this.left)));
this.searchLeft();
}
}
...@@ -34,10 +34,9 @@ export class LoginComponent implements OnInit { ...@@ -34,10 +34,9 @@ export class LoginComponent implements OnInit {
userName: this.req.userName, userName: this.req.userName,
password: this.req.password password: this.req.password
}; };
this.api.login.dologin([req, (data: any) => { this.api.login.loginForToken([req, (data: any) => {
if (data.constructor === Object) { if (data.constructor === Object) {
if (data.code === 1) { if (data.code === 1) {
debugger;
window.sessionStorage.setItem('_AMap_AMap.MapInner', data.message); window.sessionStorage.setItem('_AMap_AMap.MapInner', data.message);
this.router.navigate(['app/home']); this.router.navigate(['app/home']);
// this.getCurUser(); // this.getCurUser();
......
...@@ -11,12 +11,12 @@ ...@@ -11,12 +11,12 @@
<app-leftmenu #leftmenu [isCollapsed]="isCollapsed" [selectedItem]="selectedItem"></app-leftmenu> <app-leftmenu #leftmenu [isCollapsed]="isCollapsed" [selectedItem]="selectedItem"></app-leftmenu>
</nz-sider> </nz-sider>
<nz-layout> <nz-layout>
<nz-header class="logoBackground bottomLine" style="padding:0;position:fixed; width:100%;z-index: 99;"> <nz-header class="logoBackground bottomLine" style="padding:0;position:fixed; width:100%;z-index: 99;border-bottom: 1px solid rgb(230, 230, 230);">
<i class="iconfont trigger textStyle1 whenHover" [class.icon-toFold]="!isCollapsed" <i class="iconfont trigger textStyle1 whenHover" [class.icon-toFold]="!isCollapsed"
[class.icon-toOpen]="isCollapsed" (click)="changeCollapsed()"></i> [class.icon-toOpen]="isCollapsed" (click)="changeCollapsed()"></i>
<label class="linkToPersonSetting whenHover textStyle1" routerLink="/app/systemSet/personSet"> <label class="linkToPersonSetting whenHover textStyle1" routerLink="/app/system/person">
<i class="iconfont icon-user"></i> <i class="iconfont icon-user"></i>
{{'personSet' | translate}} {{'person' | translate}}
</label> </label>
<label class="loginOut whenHover textStyle1" (click)="loginOut()"> <label class="loginOut whenHover textStyle1" (click)="loginOut()">
{{'signOut' | translate}} {{'signOut' | translate}}
......
...@@ -10,6 +10,7 @@ $headerSlideBackground: rgba(255, 255, 255, 1); ...@@ -10,6 +10,7 @@ $headerSlideBackground: rgba(255, 255, 255, 1);
:host ::ng-deep .logo { :host ::ng-deep .logo {
text-align: center; text-align: center;
border-bottom: 1px solid rgb(230, 230, 230);
} }
.logoBackground { .logoBackground {
...@@ -32,7 +33,6 @@ $headerSlideBackground: rgba(255, 255, 255, 1); ...@@ -32,7 +33,6 @@ $headerSlideBackground: rgba(255, 255, 255, 1);
z-index: 5; z-index: 5;
position: fixed; position: fixed;
padding: 5px; padding: 5px;
border-right: 1px solid #e6e6e6;
} }
ul { ul {
...@@ -43,9 +43,9 @@ ul { ...@@ -43,9 +43,9 @@ ul {
} }
.width-200{ .width-200{
width: 200px; width: 199px;
} }
.width-80{ .width-80{
width: 80px; width: 79px;
} }
...@@ -11,6 +11,17 @@ import {FooterComponent} from './footer/footer.component'; ...@@ -11,6 +11,17 @@ import {FooterComponent} from './footer/footer.component';
import {BreadcrumbComponent} from './breadcrumb/breadcrumb.component'; import {BreadcrumbComponent} from './breadcrumb/breadcrumb.component';
import {HomeComponent} from '../main/home/home.component'; import {HomeComponent} from '../main/home/home.component';
import {LayoutRoutingModule} from '../router.module'; import {LayoutRoutingModule} from '../router.module';
import {PersonComponent} from '../main/person/person.component';
import {RoleComponent} from '../main/role/role.component';
import {UserComponent} from '../main/user/user.component';
import {OperateComponent} from '../main/operate/operate.component';
import {LogComponent} from '../main/log/log.component';
// 通用组件
import {SearchDateComponent} from '../component/search-date/search-date.component';
import {SearchItemComponent} from '../component/search-item/search-item.component';
import {SearchSelectComponent} from '../component/search-select/search-select.component';
import {TransferComponent} from '../component/transfer/transfer.component';
@NgModule({ @NgModule({
imports: [ imports: [
TranslateModule, TranslateModule,
...@@ -36,7 +47,16 @@ import {LayoutRoutingModule} from '../router.module'; ...@@ -36,7 +47,16 @@ import {LayoutRoutingModule} from '../router.module';
LeftmenuComponent, LeftmenuComponent,
FooterComponent, FooterComponent,
BreadcrumbComponent, BreadcrumbComponent,
HomeComponent HomeComponent,
PersonComponent,
UserComponent,
RoleComponent,
LogComponent,
OperateComponent,
SearchDateComponent,
SearchItemComponent,
SearchSelectComponent,
TransferComponent
] ]
}) })
export class LayoutModule { export class LayoutModule {
......
...@@ -29,41 +29,10 @@ export class LeftmenuComponent implements OnInit, OnDestroy { ...@@ -29,41 +29,10 @@ export class LeftmenuComponent implements OnInit, OnDestroy {
type: 1, type: 1,
child: [] child: []
}, { }, {
name: 'dataManage', name: 'system',
icon: 'iconfont icon-data',
type: 0,
// {name: 'actualData'}, {name: 'compare'}
child: []
}, {
name: 'pointAnalyse',
icon: 'iconfont icon-alarmUp',
type: 0,
child: []
}, {
name: 'alarmWarn',
icon: 'iconfont icon-warn',
type: 0,
// {name: 'warnInfo'}, {name: 'alarmInfo'}
child: []
}, {
name: 'deviceManage',
icon: 'iconfont icon-device',
type: 0,
// {name: 'gatewayManage'}, {name: 'collectorManage'}, {name: 'deviceModel'}, {name: 'deviceType'}
child: []
// }, {
// name: 'moduleCenter',
// icon: 'iconfont icon-edit',
// type: 0,
// child: [{name: 'moduleManage'}, {name: 'partManage'}, {name: 'channelTopic'}, {name: 'subjectManage'}]
}, {
name: 'systemSet',
icon: 'iconfont icon-setting', icon: 'iconfont icon-setting',
type: 0, type: 0,
child: [{name: 'personSet'}, {name: 'roleManage'}, {name: 'areaManage'}, child: [{name: 'person'}, {name: 'role'}, {name: 'user'}, {name: 'operate'}, {name: 'log'}]
{name: 'departmentManage'}, {name: 'pointManage'}, {name: 'factoryManage'},
{name: 'userManage'}, {name: 'operateSet'}, {name: 'loginLog'}]
// child: []
}]; }];
isOpen = {monitoring: false, deviceManage: false, pileManage: false, moduleCenter: false, systemSet: false}; isOpen = {monitoring: false, deviceManage: false, pileManage: false, moduleCenter: false, systemSet: false};
isSelected = ['', '']; isSelected = ['', ''];
......
<div class="searchBar" @fade>
<app-search-date [label]="'startTime' | translate" [(value)]="req.startTime" showTime="true"></app-search-date>
<app-search-date [label]="'endTime' | translate" [(value)]="req.endTime" showTime="true"></app-search-date>
<div class="btnLine">
<button nz-button [nzType]="'primary'" [nzLoading]="isLoading" (click)="onSearch()"><span>{{'search' | translate}}</span></button>
<button nz-button class="btnAll" [nzLoading]="isLoading" (click)="onGetAll()"><span>{{'allData' | translate}}</span></button>
</div>
</div>
<div class="tableBar" @fade>
<nz-table #nzTable
[nzData]="data"
[nzSize]="'middle'"
nzShowSizeChanger
[nzShowPagination]="true"
[nzLoading]="isLoading"
[nzFrontPagination]="false"
[nzTotal]="total"
[(nzPageIndex)]="page"
[(nzPageSize)]="rows"
(nzPageIndexChange)="searchData()"
(nzPageSizeChange)="searchData()">
<thead nz-thead>
<tr>
<th nz-th><span>{{'num' | translate}}</span></th>
<th nz-th><span>{{'loginName' | translate}}</span></th>
<th nz-th><span>{{'userRealName' | translate}}</span></th>
<th nz-th><span>{{'loginTime' | translate}}</span></th>
<th nz-th><span>{{'loginWay' | translate}}</span></th>
<th nz-th><span>{{'loginInfo' | translate}}</span></th>
</tr>
</thead>
<tbody nz-tbody>
<tr *ngFor="let one of nzTable.data, let i = index">
<td nz-td>{{i + 1}}</td>
<td nz-td>{{one.userName}}</td>
<td nz-td>{{one.realName}}</td>
<td nz-td>{{one.loginTime | date : 'yyyy-MM-dd HH:mm:ss'}}</td>
<td nz-td>{{'webPlatform' | translate}}</td>
<td nz-td>{{one.ipAddress}}</td>
</tr>
</tbody>
</nz-table>
</div>
import { Component, OnInit } from '@angular/core';
import {ApiService} from '../../service/api';
import {NzMessageService} from 'ng-zorro-antd';
import {TranslateService} from '@ngx-translate/core';
import {fadeIn} from '../../animation/fade-in';
@Component({
selector: 'app-log',
templateUrl: './log.component.html',
styles: [],
animations: [fadeIn]
})
export class LogComponent implements OnInit {
req: any = {};
data = [];
isLoading = false;
page: any = 1;
rows: any = 10;
total: any;
constructor(private api: ApiService, private message: NzMessageService, private translate: TranslateService) {
}
ngOnInit() {
this.getData();
}
getData() {
this.isLoading = true;
this.api.loginlog.getAll(this.page, this.rows, ['', this.next]);
}
onSearch() {
this.page = 1;
this.query();
}
query() {
this.isLoading = true;
const req = {
startTime: this.req.startTime ? new Date(this.req.startTime).getTime() : '',
endTime: this.req.endTime ? new Date(this.req.endTime).getTime() : ''
};
this.api.loginlog.getByTime(this.page, this.rows, [req, this.next]);
}
onGetAll() {
this.page = 1;
this.req = {};
this.getData();
}
next = (data) => {
if ( data && data.rows && data.rows.constructor === Array) {
this.data = data.rows;
this.total = data.total;
} else {
this.message.error(data.message || this.translate.instant('wrongToGetData'));
}
this.isLoading = false;
}
searchData() {
if (this.req.startTime || this.req.endTime) {
this.query();
} else {
this.getData();
}
}
}
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-operate',
templateUrl: './operate.component.html',
styles: []
})
export class OperateComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-person',
templateUrl: './person.component.html',
styles: []
})
export class PersonComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
<!--<div class="searchBar" @fade>-->
<!--<div class="btnLine">-->
<button nz-button [nzType]="'primary'" [nzLoading]="isLoading" (click)="add()"><span>{{'add' | translate}}</span></button>
<!--<button nz-button class="btnAll" [nzLoading]="isLoading" (click)="onGetAll()"><span>{{'allData' | translate}}</span></button>-->
<!--</div>-->
<!--</div>-->
<div class="tableBar" @fade>
<nz-table #nzTable
[nzData]="data"
[nzLoading]="isLoading">
<thead nz-thead>
<tr>
<th nz-th><span>{{'num' | translate}}</span></th>
<th nz-th><span>{{'roleNo' | translate}}</span></th>
<th nz-th><span>{{'roleName' | translate}}</span></th>
<th nz-th><span>{{'companyName' | translate}}</span></th>
<th nz-th><span>{{'remark' | translate}}</span></th>
<th nz-th><span>{{'oper' | translate}}</span></th>
</tr>
</thead>
<tbody nz-tbody>
<tr *ngFor="let one of nzTable.data,let i = index">
<td nz-td>{{i + 1}}</td>
<td nz-td>{{one.roleNo}}</td>
<td nz-td>{{one.roleName}}</td>
<td nz-td>{{one.companyName}}</td>
<td nz-td>{{one.remark}}</td>
<td nz-td>
<span class="editSpan" (click)="edit(one)">{{'edit' | translate}}</span>
<nz-divider nzType="vertical"></nz-divider>
<span class="deleteFontColor" (click)="deleteConfirm(one.roleNo)">{{'delete' | translate}}</span>
</td>
</tr>
</tbody>
</nz-table>
</div>
<nz-modal [(nzVisible)]="isVisible" [nzTitle]="(isUpdate ? 'editRole' : 'addRole') | translate" [nzContent]="modalContent" nzWidth="500"
[nzFooter]="modalFooter" (nzOnCancel)="cancel()" nzMaskClosable="false">
<ng-template #modalContent>
<app-search-item [(value)]="req.roleName" [label]="'roleName' | translate" inModal="true"></app-search-item>
<app-search-item [(value)]="req.description" [label]="'description' | translate" inModal="true"></app-search-item>
<div class="searchItem inModal">
<div class="item-label">选择权限</div>
<div class="item-input">
<nz-tree #tree
[nzData]="nodes"
nzCheckable
nzMultiple
[nzCheckedKeys]="defaultCheckedKeys"
[nzExpandedKeys]="defaultExpandedKeys"
>
</nz-tree>
</div>
</div>
<app-search-item [(value)]="req.remark" [label]="'remark' | translate" inModal="true"></app-search-item>
</ng-template>
<ng-template #modalFooter>
<button nz-button nzType="default" [nzLoading]="isLoading" (click)="cancel()"><span>{{'cancel' | translate}}</span></button>
<button nz-button nzType="primary" [nzLoading]="isLoading" (click)="save()"><span>{{'confirm' | translate}}</span></button>
</ng-template>
</nz-modal>
import {Component, OnInit, ViewChild} from '@angular/core';
import {ApiService} from '../../service/api';
import {CheckService} from '../../service/check';
import {NzMessageService, NzModalService} from 'ng-zorro-antd';
import {TranslateService} from '@ngx-translate/core';
import {fadeIn} from '../../animation/fade-in';
@Component({
selector: 'app-role',
templateUrl: './role.component.html',
animations: [fadeIn],
styles: []
})
export class RoleComponent implements OnInit {
@ViewChild('tree') tree: any;
req: any = {};
data: any = [];
isLoading = false;
isVisible = false;
isUpdate = false;
userName = '';
permissions = [];
defaultCheckedKeys = [];
defaultExpandedKeys = [];
nodes = [];
constructor(private api: ApiService, private message: NzMessageService, private translate: TranslateService,
private modalService: NzModalService, private ck: CheckService) {
}
ngOnInit() {
this.init();
}
init() {
this.getData();
this.getPermissions();
}
next = (data) => {
if (data && data.constructor === Array) {
this.data = data;
} else if (data && data.code === 1) {
this.message.success(data.message ? data.message : '操作成功');
this.isVisible = false;
} else if (data && data.code === 0) {
this.message.error(data.message ? data.message : '操作失败');
} else {
this.message.error(data && data.message ? data.message : '获取数据失败');
}
this.isLoading = false;
}
getData() {
this.isLoading = true;
this.api.role.getAll(['', this.next]);
}
getPermissions() {
this.isLoading = true;
this.api.permission.getAll(['', (data) => {
if (data.constructor === Array) {
this.permissions = data;
} else {
this.message.error(data && data.message ? data.message : '获取数据失败');
}
this.isLoading = false;
}]);
}
initPermissions(data) {
const obj = [];
if (data && data.constructor === Array && data.length > 0) {
data.map((one, i) => {
obj[i] = {
title: one.parentSidebarName,
key: one.parentSidebarName,
selectable: false,
children: []
};
if (one.sidebarVos.length > 0) {
one.sidebarVos.map((two, j) => {
obj[i].children[j] = {
title: two.sidebarName,
key: two.sidebarName,
selectable: false,
children: [],
isLeaf: two.permissionShowVos.length === 0
};
if (two.permissionShowVos.length > 0) {
two.permissionShowVos.map((three, k) => {
obj[i].children[j].children[k] = {
title: three.permissionName,
key: three.permissionName,
selectable: false,
isLeaf: true
};
});
}
});
}
});
this.nodes = obj;
}
}
add() {
this.req = {};
this.isUpdate = false;
this.initPermissions([...this.permissions]);
this.isVisible = true;
}
edit(one) {
this.isUpdate = true;
this.req = {...one};
this.api.permission.getPermissionByRoleNo([{roleNo: one.roleNo}, (data) => {
this.initPermissions(data);
this.isVisible = true;
}]);
}
cancel() {
this.isVisible = false;
}
save() {
this.isLoading = true;
this.req.permissions = this.getSelected();
if (this.isUpdate) {
this.api.role.updateRole([this.req, this.next]);
} else {
this.api.role.addRole([this.req, this.next]);
}
}
getSelected() {
const nodes = this.tree.getTreeNodes();
const obj = [];
if (nodes.length > 0) {
nodes.map((one) => {
if (one.children.length > 0) {
one.children.map((two) => {
if (two.children.length === 0 && two.isChecked) {
obj.push(two.key);
} else if (two.children.length > 0) {
two.children.map((three) => {
if (three.isChecked) {
obj.push(three.key);
}
});
}
});
} else if (one.isChecked) {
obj.push(one.key);
}
});
return obj;
}
}
deleteConfirm(one) {
this.modalService.confirm({
nzTitle : '<i></i>',
nzContent: '<b>' + this.translate.instant('confirmDeleteThisRecord') + '</b>',
nzOnOk : () => this.delete(one)
});
}
delete(one) {
this.api.role.deleteRole([{roleNo: one}, this.next]);
}
}
<div class="searchBar" @fade>
<app-search-item [label]="'userName' | translate" [(value)]="userName"></app-search-item>
<div class="btnLine">
<button nz-button [nzType]="'primary'" [nzLoading]="isLoading" (click)="onSearch()"><span>{{'search' | translate}}</span></button>
<button nz-button class="btnAll" [nzLoading]="isLoading" (click)="onGetAll()"><span>{{'allData' | translate}}</span></button>
<button nz-button class="btnAdd" [nzLoading]="isLoading" (click)="add()"><span>{{'add' | translate}}</span></button>
</div>
</div>
<div class="tableBar" @fade>
<nz-table #nzTable
[nzData]="data"
[nzLoading]="isLoading">
<thead nz-thead>
<tr>
<th nz-th><span>{{'num' | translate}}</span></th>
<th nz-th><span>{{'userNo' | translate}}</span></th>
<th nz-th><span>{{'userRealName' | translate}}</span></th>
<th nz-th><span>{{'userName' | translate}}</span></th>
<th nz-th><span>{{'nickName' | translate}}</span></th>
<th nz-th><span>{{'email' | translate}}</span></th>
<th nz-th><span>{{'phone' | translate}}</span></th>
<th nz-th><span>{{'userRole' | translate}}</span></th>
<th nz-th><span>{{'oper' | translate}}</span></th>
</tr>
</thead>
<tbody nz-tbody>
<tr *ngFor="let one of nzTable.data,let i = index">
<td nz-td>{{i + 1}}</td>
<td nz-td>{{one.userNo}}</td>
<td nz-td>{{one.realName}}</td>
<td nz-td>{{one.userName}}</td>
<td nz-td>{{one.nickName}}</td>
<td nz-td>{{one.email}}</td>
<td nz-td>{{one.phone}}</td>
<td nz-td>{{one.roleName}}</td>
<td nz-td>
<span class="editSpan" (click)="edit(one)">{{'edit' | translate}}</span>
<nz-divider nzType="vertical"></nz-divider>
<span class="deleteFontColor" (click)="deleteConfirm(one.userNo)">{{'delete' | translate}}</span>
</td>
</tr>
</tbody>
</nz-table>
</div>
<nz-modal [(nzVisible)]="isVisible" [nzTitle]="(isUpdate ? 'editUser' : 'addUser') | translate" [nzContent]="modalContent" nzWidth="500"
[nzFooter]="modalFooter" (nzOnCancel)="cancel()" nzMaskClosable="false">
<ng-template #modalContent>
<app-search-item [(value)]="req.userName" [label]="'nickName' | translate" inModal="true"></app-search-item>
<app-search-item [(value)]="req.realName" [label]="'userRealName' | translate" inModal="true"></app-search-item>
<app-search-item [(value)]="req.nickName" [label]="'loginName' | translate" inModal="true"></app-search-item>
<app-search-select [(value)]="req.companyNo" [label]="'selectCompany' | translate" optL="companyName"
[data]="companys" inModal="true" optV="companyNo"></app-search-select>
<app-search-select [(value)]="req.roleNo" [label]="'selectRole' | translate" optL="roleName"
[data]="roles" inModal="true" optV="roleNo"></app-search-select>
<app-search-item [(value)]="req.password" type="password" *ngIf="!isUpdate"
[label]="'loginPassword' | translate" inModal="true"></app-search-item>
<app-search-item [(value)]="req.phone" [label]="'userPhone' | translate" inModal="true" [maxlength]="11"></app-search-item>
<app-search-item [(value)]="req.email" [label]="'userEmail' | translate" inModal="true"></app-search-item>
<app-search-item [(value)]="req.img" [label]="'userImg' | translate" inModal="true"></app-search-item>
<app-search-item [(value)]="req.remark" [label]="'remark' | translate" inModal="true"></app-search-item>
</ng-template>
<ng-template #modalFooter>
<button nz-button nzType="default" [nzLoading]="isLoading" (click)="cancel()"><span>{{'cancel' | translate}}</span></button>
<button nz-button nzType="primary" [nzLoading]="isLoading" (click)="save()"><span>{{'confirm' | translate}}</span></button>
</ng-template>
</nz-modal>
import {Component, OnInit} from '@angular/core';
import {ApiService} from '../../service/api';
import {CheckService} from '../../service/check';
import {NzMessageService, NzModalService} from 'ng-zorro-antd';
import {TranslateService} from '@ngx-translate/core';
import {fadeIn} from '../../animation/fade-in';
@Component({
selector: 'app-user',
templateUrl: './user.component.html',
animations: [fadeIn],
styles: [`
:host::ng-deep .cdk-overlay-pane {
height: 300px;
overflow-y: auto;
}
`]
})
export class UserComponent implements OnInit {
req: any = {};
data: any = [];
isLoading = false;
isVisible = false;
isUpdate = false;
userName = '';
companys = [];
roles = [];
constructor(private api: ApiService, private message: NzMessageService, private translate: TranslateService,
private modalService: NzModalService, private ck: CheckService) {
}
ngOnInit() {
this.init();
}
init() {
this.getData();
this.getCompanys();
this.getRoles();
}
getCompanys() {
this.isLoading = true;
this.api.company.getAll(['', (data) => {
if (data.constructor === Array) {
this.companys = data;
} else {
this.message.error(data && data.message ? data.message : '获取数据失败');
}
this.isLoading = false;
}]);
}
getRoles() {
this.isLoading = true;
this.api.role.getAll(['', (data) => {
if (data.constructor === Array) {
this.roles = data;
} else {
this.message.error(data && data.message ? data.message : '获取数据失败');
}
this.isLoading = false;
}]);
}
next = (data) => {
if (data && data.constructor === Array) {
this.data = data;
} else if (data && data.code === 1) {
this.message.success(data.message ? data.message : '操作成功');
this.init();
this.isVisible = false;
} else if (data && data.code === 0) {
this.message.error(data.message ? data.message : '操作失败');
} else {
this.message.error(data && data.message ? data.message : '获取数据失败');
}
this.isLoading = false;
}
getData() {
this.isLoading = true;
this.api.user.getAll(['', this.next]);
}
onSearch() {
this.isLoading = true;
this.api.user.getByUserNameForLike([{userName: this.userName}, this.next]);
}
onGetAll() {
this.userName = '';
this.getData();
}
add() {
this.isUpdate = false;
this.req = {};
this.isVisible = true;
}
edit(one) {
this.isUpdate = true;
this.req = {...one};
this.isVisible = true;
}
save() {
this.isLoading = true;
if (this.isUpdate) {
this.api.user.updateUser([this.req, this.next]);
} else {
this.api.user.addUser([this.req, this.next]);
}
}
cancel() {
this.isVisible = false;
}
deleteConfirm(one) {
this.modalService.confirm({
nzTitle : '<i></i>',
nzContent: '<b>' + this.translate.instant('confirmDeleteThisRecord') + '</b>',
nzOnOk : () => this.delete(one)
});
}
delete(one) {
this.api.user.deleteUser([{userNo: one}, this.next]);
}
}
...@@ -2,6 +2,11 @@ import { RouterModule, Routes } from '@angular/router'; ...@@ -2,6 +2,11 @@ import { RouterModule, Routes } from '@angular/router';
import { LayoutComponent } from './layout/layout.component'; import { LayoutComponent } from './layout/layout.component';
import { AuthService } from './service/auth'; import { AuthService } from './service/auth';
import { HomeComponent } from './main/home/home.component'; import { HomeComponent } from './main/home/home.component';
import {LogComponent} from './main/log/log.component';
import {OperateComponent} from './main/operate/operate.component';
import {PersonComponent} from './main/person/person.component';
import {RoleComponent} from './main/role/role.component';
import {UserComponent} from './main/user/user.component';
const AppRoutes: Routes = [ const AppRoutes: Routes = [
{path: '', redirectTo: '/extra/login', pathMatch: 'full'}, {path: '', redirectTo: '/extra/login', pathMatch: 'full'},
...@@ -19,6 +24,11 @@ const routes: Routes = [ ...@@ -19,6 +24,11 @@ const routes: Routes = [
children: [ children: [
{path: '', redirectTo: '/extra/login', pathMatch: 'full'}, {path: '', redirectTo: '/extra/login', pathMatch: 'full'},
{path: 'home', component: HomeComponent}, {path: 'home', component: HomeComponent},
{path: 'system/user', component: UserComponent},
{path: 'system/role', component: RoleComponent},
{path: 'system/person', component: PersonComponent},
{path: 'system/operate', component: OperateComponent},
{path: 'system/log', component: LogComponent},
] ]
} }
]; ];
......
This diff is collapsed.
...@@ -8,7 +8,6 @@ export class AuthService implements CanActivateChild, OnInit { ...@@ -8,7 +8,6 @@ export class AuthService implements CanActivateChild, OnInit {
public login = false; public login = false;
private permissionR = ''; private permissionR = '';
// 判断是否有 cookie 的标识
isLogin = false; isLogin = false;
constructor(private router: Router, private menu: MenuService, private permission: PermissionService) { constructor(private router: Router, private menu: MenuService, private permission: PermissionService) {
...@@ -29,11 +28,12 @@ export class AuthService implements CanActivateChild, OnInit { ...@@ -29,11 +28,12 @@ export class AuthService implements CanActivateChild, OnInit {
// 登录验证,如果有值就返回true.没有就跳转登录 // 登录验证,如果有值就返回true.没有就跳转登录
checkLogin() { checkLogin() {
if (window.sessionStorage.getItem('_AMap_AMap.MapInner')) {
return true; return true;
} // if (window.sessionStorage.getItem('_AMap_AMap.MapInner')) {
this.router.navigate(['/extra/login']); // return true;
return false; // }
// this.router.navigate(['/extra/login']);
// return false;
} }
// 路由跳转权限检测 // 路由跳转权限检测
......
This diff is collapsed.
{ {
"---------------a": "---------------a", "-----------菜单-----------": "-----------菜单-----------",
"---------------b": "---------------b", "system": "系统管理",
"percent": "百分值", "log": "登陆日志",
"change": "变更", "operate": "操作日志",
"alarm": "报警", "user": "后台用户管理",
"alarmInfo": "报警信息", "role": "角色管理",
"alarmWarn": "报警预警", "person": "个人设置",
"home": "首页",
"-----------常用-----------": "-----------常用-----------",
"signOut": "登出",
"num": "序号",
"startTime": "开始时间",
"endTime": "结束时间",
"search": "查询",
"allData": "所有数据",
"add": "新增",
"edit": "编辑", "edit": "编辑",
"departmentManage": "部门管理", "delete": "删除",
"---------------c": "---------------c", "remark": "备注",
"search":"查询", "oper": "操作",
"operate": "操作",
"operateSet": "操作设置",
"collectorManage": "传感器管理",
"factoryManage":"厂区管理",
"factoryPaint":"厂区配置图",
"---------------d": "---------------d",
"tel": "电话",
"loginName": "登录名",
"loginLog": "登录日志",
"current": "当前",
"---------------e": "---------------e",
"---------------f": "---------------f",
"---------------g": "---------------g",
"more":"更多",
"personSet":"个人设置",
"---------------h": "---------------h",
"---------------i": "---------------i",
"---------------j": "---------------j",
"pointAnalyse": "监测点分析",
"pointManage": "监测点管理",
"pointType": "监测点类型",
"pointPaint":"监测点配置图",
"machineRoom": "机房管理",
"machineRoomDetail": "机房详情",
"end": "结束",
"roleManage": "角色管理",
"---------------k": "---------------k",
"start": "开始",
"---------------l": "---------------l",
"historyData": "历史数据",
"type": "类型",
"---------------m": "---------------m",
"name": "名称",
"moduleManage": "模块管理",
"description": "描述", "description": "描述",
"---------------n": "---------------n", "permission": "权限",
"---------------o": "---------------o", "cancel": "取消",
"---------------p": "---------------p",
"channelTopic": "配置模板管理",
"moduleCenter": "配置中心",
"---------------q": "---------------q",
"remove": "清除",
"confirm": "确认", "confirm": "确认",
"cancel":"取消", "email": "邮箱",
"areaManage":"产线管理", "phone": "手机号码",
"cuttingMachine": "切削机管理", "-----------业务-----------": "-----------业务-----------",
"cuttingMachineDetail": "切削机详情", "loginName": "登录名",
"---------------r": "---------------r", "userRealName": "用户姓名",
"---------------s": "---------------s", "loginTime": "登录时间",
"deviceManage": "设备管理", "loginWay": "登录方式",
"deviceType": "传感器类型", "loginInfo": "登录信息",
"deviceModel": "设备型号", "userNo": "用户编号",
"delete": "删除", "userName": "用户名",
"time": "时间", "nickName": "用户昵称",
"data": "数据", "webPlatform": "web端",
"compare": "数据对比", "userRole": "用户角色",
"dataManage": "数据管理", "companyName": "公司名称",
"actualData": "实时数据", "roleName": "角色名称",
"all": "所有", "roleNo": "角色编号",
"home":"首页", "addUser": "新增用户",
"---------------t": "---------------t", "editUser": "编辑用户",
"loginOut":"退出", "selectCompany": "选择公司",
"partManage": "通道模板管理", "loginPassword": "登录密码",
"condition": "条件", "selectRole": "选择角色",
"---------------u": "---------------u", "userPhone": "用户手机",
"---------------v": "---------------v", "userEmail": "用户邮箱",
"---------------w": "---------------w", "userImg": "用户头像",
"gatewayManage": "网关管理", "editRole": "编辑角色",
"---------------x": "---------------x", "addRole": "新增角色",
"index": "序号", "confirmDeleteThisRecord": "确认删除这条记录吗"
"detail":"详情",
"systemSet": "系统设置",
"add": "新增",
"adr": "地址",
"---------------y": "---------------y",
"user": "用户",
"userManage": "后台用户管理",
"warnInfo": "预警信息",
"warnNew": "预警新增",
"warnEdit": "预警编辑",
"---------------z": "---------------z",
"status": "状态",
"subjectManage": "主题模板管理",
"---------------else": "---------------else",
"xdkDetail": "XDK传感器",
"cissDetail": "CISS传感器"
} }
This diff is collapsed.
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1551691409347'); /* IE9 */
src: url('iconfont.eot?t=1551691409347#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAABTAAAsAAAAAJ9QAABRxAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCIRgq5SK4mATYCJAOBLAtYAAQgBYRtB4J8GxIhRUaGjQOAQH1UZP+fErghE6rh/SulqCChZRkko1t2a4p90Mzro2fVqW031Y4L4SGZj/olZim3Rbmn19XBBgt2sEkMBUi0LV0xf+EOjxlKSfC03/9m7+4XVUStkgiRhIckniBq8kgoVr3j8WASyhue32bvv48jBm2BAX4UowgrQNBmglXgOCtXxRJYpbhq1mUs05VzuCpd9N0RAGkOKF8AAfuT2VegtkxMN9bGW0W/+PxzEKQPCC+ESpqfw5v/0/VIuvIvHZs9jMBYHI5HxXDP/3vW57b7lAxPkWLX7XjFB+iiGnjp/CS/za+K8TZpsAIC+N5t5ECCzub2lVKM1dre3d/MiH+vU1c7uUwlXEnFV162DlPXXpdFX8avHxKEQXZIQSmEcglomKygXLRcIN6aqXh713Za1kKlnekRDx+7vSuRVPh/bNI+rMJpP3QzirIx7/r6JDQbt1Ta+/zlz4Sg0PpLSEdSgAkhICgJo5LG6PqIS5be19hprK5UryOuOr8+/YhWb6RSl2k3dPDwk5tIA/9cLSVZT08vCcdLkbEUhWp7ZE7aKHvepbLm+7suqRWLTSqaI+MaDpxwCfgLESlJOpUiesusbcxeswVeUGYbx4YtI1GKYZ2h1U0WW2ql9e9xu6UtnSFL3n/MA/r1ajZtzIyiMmzIIg2atFtsTr1Z3Vr16JO1WKjRuAmTBgya0mFUpxFdkjZ15i0g1YOqrVA14qLFBN4A+gkC0EsMBZoJMjBNUIAxggbMEHSgEAygIpjAMOEADBFOwCKCDTQQHKCJcAHaCVebvJFuAMwR7kA9wQVmCYzFO5IPQCvhCfQQXkAfIQAy4Q+0ECHAQiISaCQSWRCZBCyITAFgkkgFBog0YJBIB6aIYUAHkcmqZ6QKgE6iCBgh9EAXsQxIxFqgjS9jgDr+Aub5v44FYIl1kUOAh6DxMdDaRBPTTkelaFBJ2JpJIaOKetzgpSR5yUup1FlMYkbWk8AAbiQpWTPgZqxEEJWTVW255Dq/CTtqhr17jQVlDBMmC2NlzrNryqx57SI1WTEMP/QqPE1J1UW+0AIUkaMPFSC0bD6dcGgXKBCjR+rcnEZ6biC9qJvmeyITPrfJ7N2XZFl4wapwWMpzO/Xvv+u+lluxBFs0eSPnAF0hP4nno4Gxi/y9OHCRsRH2pkNFj5rzRq5f8L8GZOW36Ja7xCFXFaziSer0KfE3pRyxiIKV7ginoVSkXRFDhnB8CpLbu+mIrHamTY/uLo60HN2AzAWBxpwh0w3UdYMuKtGhLh4oCvioarOqyjTD3tzoOCciyVBKZgnmeYsRJEeAXOJa9NvCnfZW7RZ/M9dSJOSoReiv6HxuHewwKACVJSrlrDBEstzeKFYqXK0jYQv4AB9XYA61qdsOph0vBAkVOaxEz/igJEYqueh/LkeQWXGf3S14NyOtXLVrzHpOW/EmRX+uc9QUu4kNwG5DnAriLb4D7ErixGfR5fgOKGvM4z6FLgBI+Va6uX4HAOF2Gw0qVtGgkGs3Y6ja1hlWgvE4sEOGbnhTtJPTH8R3C4ARjAPgxJbD7OLElG9xHC04B+nyxAzPZmK+chsbTPuiu4BTrKgHvOycuj1S2dTYG24nMl2SGZEZcXf7LZSFb7p/2/76k/Ovj55YcePzSQdXu4JD3uRv1u0LGDnplM0Io/mf29NA6LrtIKkWVqusKsrUaQmFjnOho0fUiqXXSlTKSmVNrFdBzhfa5gKbPJPBjwsKFZ2uGbzZ31q3BauthSQdayrekGogCM/wTCve5jBEaUg2ltAptceQOUwwB3AlQarTXV9ZD1NQb8OVFg5YOxmDtRTWH3d8YUzGUSlg5maMKl9Lo3IcliY6v9TEdqLtdE6lmfqdJKm3oy/Z1/ZUAlfhTd1IgsrtgcdeesL/+ZGWzDicZ5xUFUUKxzzgxZcz5za7QjFJllU26Sa58iZZPT92M33d+w1euhUuOTif8ZxUn6wnXvhZKPojr4QgcfWzww51vE5nQfdD/k+8nW2g2nJ0gOEaghXlqFJJsTHQOCrwkWAVmoKMt9GgMT7po+bhch3j/WCBAw747B5JSd7GMiBJtnbW8VEabLYBNO6ZWqFET6+4394P6/UG/XFKCutxnV084S44922GptoAjd155UW3Wh36hshoy/fpbzdtggRRzQRZ+hwNX/WYPseVN1zkqq+QR5k8GRmHI8NoYA8eGF6Lhgb/GULbCzmYze1pYAA7xOPG8ViRD1eK4RGppLhie2Ai3W0ymJbrduWIe0phJ4yUE7WEwuZVdnxECs+sUmxad8ISJaonhejSy21FPSpED3iXarfXH3W+O6ZngI4eowP/jYYjssgSZEqsKkQxFw+U+CNRh/FZwmwkxkLIjiu6iZHIB5OR7CnA+GxPO04lzcEJeVFG8H3RdalC7hdtFig1ydabg2SkIIxGo9TbUjt5aijLz5zO05LBjzFJtQVrd81wlbZUM0qRbDcTeopYGFe5UfuKoJRrRw8fVmqYCUHF7WX7HC0v60BQUB6Xlaiqdpd63okfFk3dJwrgkRHgw6vHGMHLyD5nVRCcXvK4BYGG6O+aSwEnXZ5iP8yjKbz771ws817iJ3NK5p3jGwZixWwQ2mZC9i/9pDOtdhSRj+Z00rFCaEcQ3hE/yqSYt0A2dXGdVIrIGntnZTduv7Jxo6qVS+F0geHdWrt42Uqc9j+/sadJtxKbkG57c0aWGUatRnPK8sCFMwqiYkSVXctg/iGjSTWZPDZ2GmpmfF7JyNGgSQgT6/OpTn5hJRQ9nOKXZXYaHTaO8w104/Nrm+U6m1QrUavLn+VhkE/nwEXnh8fe4ADbs5v1zVc+LAKes01rDqs1ZEm7KzQ27faGrvILAu5XLQFQB49u8JFdRytt+aeGKe5VrKiSxI+Drj4mTMkm2lrtSwtb6jaP2D7jDKilhTk7+78qWEVOzXCGqgCA0lbSbCE6AEpiZpmdESzup4qYPkXHmtqRyvBvXzYdvXiT70TQ4G8tuRerCu4459kH98F6r0HlaquC+57PaeAU7t9/9RRdyHQRRbjj345eu4bibg8ELhwMEDH2AsIu/C5A8qyMgvNOnJiHG8ZtovOI/EqftXXIgoWwLlRQjIF1P4Vxs24OD9ASYN3HY17m/Dn6RtgXruutUO5sPwHXzm8IbzPT9SvX5XYoLvomqpnAc/R15Nn5+d5Y84vjpwZiPI46U5uabaJfYipYzOmTPFm4mEYTfRINNjXRtiHN1bWxCxld6tDQOepIQh+b+EruvA1AgqSGUAdiuiW3cBtjfgsANyoe9dztATxUWs9ncb29drWZw2ebjQaDsY0jZretWSvxAj4YiJIpUvQMMUNvVXDWpLAZEh9NShgz1SHs7+2C+CkU7eQxrfcDMCdZs7aNLea0GYxGg5nN55jXrq7EAFcn00L9JKQM0VSyFmpgpAYp2ykNBKFGOaTTE+HmjXA8K2Czw0TkKItsZgWx4Ph3sBMhAJu1srv3xOLtbtowdPm5C0vhMlgcupwEe34ZGqp1m83n371XEX0yxqmzAjEYYaXoxlcgaBRSiZgDvOe6Z8/OA5FsKIFZWoI95FzhKAwzq7GSEg+Jx8AAwgEuHxgSuUSB/XuAc2dKirG37EbOQ+w2ZEkYL15+KmGyRZ8GmGIWOP3tItPMg+8GzbxrvMvYeha2e1tYZ3cNmmkllWi7z4SMBLjN0wG8iCykoQHJskf+UZI530yyt3hb7JGsj26yEbB8EdrVhS5KWwZFaufNq003svGw9iPRHi765xaj7PRW9XfGHYM5C5rqkWE42JtgDjgqXcezAwsc1OumrPNwQBbYSR8BW0dTiqg+WcQGUSggM2/uIP4yZNTtyieqA6UpZWmhYPimw/lDPq5b14fPrysSGC00gu5lijRITSh41PtywdbevN4kt9E5P96K653WNivyXZMrZkyZEmwYuHsG2vX/tc5VIkKmiGk840+zn1GK3EOsEBTQXPkHqF7XhKmE8PqK7f1cc56JbsPrApDlPNOTPwPYSeqcxxIdxL263nr9Dx2Q6eSDxc4ZmyhHL0aXrwTR2mxFuC59Riuy2/Sgn2t8Wkvf/Yf7Zze9eUA4ABIPjuQZvYw8a9GIFiKXZRQYWRKzfCTP8LCOPB9DD7P3cW9v2mymlsfMwvKuW0e0kFBiZ2Ev+PE4GByPQDp95SUfRXccYqaDgAS/XUfpGWFMfYz+Tigr48FphX8AoJuRYQf8ko+a0uk5QkIMITZHyRx72D/5gBKauaJAhf/pt8z0pDv6aD0rlK68OFfuGyjimmFst4/iyGwlMyc2u1/h4ZcdajWZrFZ1dnbk/F01CPtswo00HG0VCB3r7px3Eo5yvl0cO/xy5e9r7lGW0SNL4nTPf25hr1+2hjt6KaW0vkJy0GNcZpb78BK7BKpsvK5VysoQecVGtnLH6R215BjlfnnKkmy3gTPGZznYrfVenm2/dOj9aOU+ObDZ7siDB2i6N2wImpEyuis4KhXHqCtUqgvK8i1WrfUMtw+gBXGQrlJRGdRd85tEaVKprMdNs6rS+FMBm+YJ8m8hTr7O9FjnFOJbzaci15l06rMZQSzaUZ2dIHcX1/8bcN2h1+rB+SXJrPTasXeXW8OuHewm5dcULqnePWUJx2mocnPmYiUR8yvww4QrCzzHDxH/O34c6QKssE8ex5q8y3LgUa8gJ9SlJF4antscmROROzTzf7ZKsIO8s0hXXq4r2tnhfU4L3y32vPqbNeJs5YsEJVs6c3wBLTcbndI3Y+2bTCbt5AzllHDles8zE9lZsZCv+ttKeRHqS/hU2JxnmFoK1jnuql8KoawwXwYSQNF8tYHj/5FNAblYJT0dblnmvOyI6wONy/cHnFfkzYOmwc3kV6QH3100gG0YPXrsWJl8/569+yoejMPG8bfemzRMSfQd3dqYsNkB/nJUKo7I+UmtJh9PjwBHIoEH+8mJNdBjd2Jzc0vL1ZXOhQTx6GpTfPunDytWfPgQbxXAfcU+Cj4e0JCtxPoEfT09//n8lyfXJwB/Qjg/YnyQAWQzGQp7ep76PM2T+ygAc2Zg5Wt/kTMcvXrNaEbCNWvKqsMlxWVhtaaHQfjFheeDGVlkLUWNlVNXneGyRrncHDNmfxtcY4Bhf20wpq2scsKcqioda7Q3HfgON6Gu7eb1rjEBJrkc6obGMBypWqojBtsBr/14pWyL9yhBl57nkTfYHWHuHhNgLLth11h/0yg/hprCeHHUcr7tAj0bt2MxR6HVh0EFVzok22gE93saRjIUGDjItNETVpD5SKKmNBkRXd0jiS6sxz2i2hg4YnW7JG9ktRmOjJXUP/9HjdRVI5nCoCzLBR0xF3mc9BjJJeouWILUIiSzvhpIOnyvpc74kBtpUg7vxPsbcEFHIrpBOT+LXDMHczFpy8WoZHLo5N5Fs0/i/v0dnyySrxd1HKUyXBlUKWg7SL2eFBMH47TZQGu7cY1tMNRk09pgbUdj0dcyiv0rnHKxtCHdsDnr14Sk4J+FxvBFgvVoFczFxaRIXxErih60eDIzHJcCTbxQaEF5qGUYDn5yukgI7Lgd3aouA1JQthhH3+4IJFxyDB4b9QCulDukZbiBPDE5mmER6gtULD6v55GekIwovXtnL/xmS14ks2bsmSlO8atu3TtSlvI3xXNmHpGYN9PzVF82ct20eLl9slNWBdjqpU5g9/dHsroWbso6QjtMtVSF2QnhWh0gzGepEFEUFSkQDyU7qYeMM9geCqSoCFGkslvhihWwVXQhsxkpczodqahAcKcHAhcOFnQt3O6yHSDbXdvjZOa9Cpf2EzJpvHnHSFggm2WpcF06hIpZi61id7EVIqZpBDQ+pZjKd+dTiyl8pqoVtrWVT4PMZuSfuDAMqalBMkGapioVv4OHpGi1KYg9a0CnMubRlkQiv+KbR3KTftxusShDLLEZsyeQmWGa5Qfw0ITTuP/+09OiQaaLKMJX6nx4+jTEPT9i56OiweiBxo+Y+8n3/127BnwGUrVy23lJ/exjJm1zD/jSUa4J4wYyAsGKNmHg+uF2dAwGDYIptv+t0ALUOnL781IAasslHy0DoHZaulA5AOTHaGLS0c+zFXULTjols1BZcmc+6cjIn1EdSL35FuwC3EWDJCQRLZr0JB9EA6a9Lg/RepXtfe2JOqEq8H6R1ygVwt/g9byspZP+yB50CF4X1Gp5OwHreVr1Uy7k56jyR46h8QCQidDNWaJaDU1c7UBRJqt3v/SjGbTC2AhGd6C8nDoAO6LCNtnaJCbBsf9frzfwvFMm1NBivhOG/vsv/+1G2iKE6pUcQV9HLo9GFS018T87rs4rYa23+uHEeMlzjTCG1s0dsaL2g0absKI6sEk+ZYlbLKlC83st/u+X0e1z/aL6Mtv/ExrVR6hKgzEqazRrLRFLqTot1lL1Gu2gmi1x4PItepyCSqUJi13YUUmnR1Sl3TOcoyLe4AIRn6g6/X656xk2U80OJVaQLdZ89795YARBZz5vJlmq3vGycav/wjAyMHLu+/uH3BNVc9juXyUvWJFpBOjncBTxxjMV87wzwJzJNKYTWtlGitv9bufPd7C1VCYbD4wg6IzPm7VoslT99mXz9fN/YRgZOKHV+6L/kHs6f+Nga5/B+kJqplZlUfdzOBKU5I3RkKkYzygJ89tLRovu6YRWtmIBqd3boeX5rGTLP6qML2LwtamZXHIGgSJGghQZchgC/sBqDgVKVOvNdrc/HP+X6fO+uLy6vrm9u394fHp+eX17//j8Mj8KQcdRkltlCqnSkJWjS70Au6XQrxSiqIJ1LIS+oJfFjWqIU+2OwDYuRkt1Z3OBsHB4ThZn7TIHa3WPUMP8mkDF4poz65myswu/N6xLjEVSDTrcmPpSEtRTr7uEDFz+trWDH/lLyoEAzZAzCupKqaOKVFChSzIbTckoaJaOzWLZcgl7bYesBEvTjbF3fRs3qGp0ZJ0zhmlhvyiUvJ9MAAA=') format('woff2'),
url('iconfont.woff?t=1551691409347') format('woff'),
url('iconfont.ttf?t=1551691409347') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1551691409347#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-mag:before {
content: "\e695";
}
.icon-humid:before {
content: "\e611";
}
.icon-loginout:before {
content: "\e626";
}
.icon-downward:before {
content: "\e610";
}
.icon-toRight:before {
content: "\e777";
}
.icon-menu:before {
content: "\e61e";
}
.icon-toLeft:before {
content: "\e619";
}
.icon-yonghu:before {
content: "\e639";
}
.icon-search:before {
content: "\e61a";
}
.icon-upward:before {
content: "\e60b";
}
.icon-tag:before {
content: "\e62b";
}
.icon-device:before {
content: "\e623";
}
.icon-pw:before {
content: "\e69f";
}
.icon-acc:before {
content: "\e61b";
}
.icon-shang:before {
content: "\e64e";
}
.icon-xia:before {
content: "\e650";
}
.icon-warn:before {
content: "\e680";
}
.icon-toFold:before {
content: "\e622";
}
.icon-toOpen:before {
content: "\e624";
}
.icon-setting:before {
content: "\e608";
}
.icon-gyros:before {
content: "\e625";
}
.icon-tianjia:before {
content: "\e607";
}
.icon-alarmUp:before {
content: "\e649";
}
.icon-alarmDown:before {
content: "\e64a";
}
.icon-data:before {
content: "\e615";
}
.icon-delete:before {
content: "\e612";
}
.icon-noise:before {
content: "\e65a";
}
.icon-home:before {
content: "\e64f";
}
.icon-edit:before {
content: "\e60d";
}
.icon-up:before {
content: "\e645";
}
.icon-down:before {
content: "\e646";
}
.icon-right:before {
content: "\e648";
}
.icon-left:before {
content: "\e64b";
}
.icon-alarm0:before {
content: "\e60c";
}
.icon-alarm:before {
content: "\e60f";
}
.icon-temp:before {
content: "\e61f";
}
.icon-press:before {
content: "\e61d";
}
.icon-yuyan:before {
content: "\f031";
}
.icon-user:before {
content: "\f2dc";
}
.icon-light:before {
content: "\e634";
}
.icon-left0:before {
content: "\e617";
}
.icon-right0:before {
content: "\e61c";
}
This diff is collapsed.
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
export const environment = { export const environment = {
production: false, production: false,
baseUrl: 'http://172.16.1.23:8092', // 对外访问测试网地址 baseUrl: 'http://172.16.1.52:8094', // 对外访问测试网地址
imgUrl: 'http://172.16.1.23' // 图片地址 imgUrl: 'http://172.16.1.23' // 图片地址
}; };
......
/* You can add global styles to this file, and also import other style files */
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
This diff is collapsed.
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