中化加油站项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

738 lines
25 KiB

import {
Component,
OnInit,
ViewChild,
TemplateRef,
ViewContainerRef,
} from "@angular/core";
import { Router, NavigationEnd } from "@angular/router";
import { filter } from "rxjs/operators";
import { NavChangeService } from "../../service/navChange.service";
import { CacheTokenService } from "../../service/cache-token.service"; //引入服务
import { NzMessageService } from "ng-zorro-antd/message";
import { SignalRAspNetCoreHelper } from "../../../shared/helpers/SignalRAspNetCoreHelper";
import { NzNotificationService } from "ng-zorro-antd/notification";
import { GetOutOfLineDetailsComponent } from "../today-warning/get-out-of-line-details/get-out-of-line-details.component";
import { NzModalService } from "ng-zorro-antd/modal";
import { HttpClient } from "@angular/common/http";
import {
ChangePasswordComponent,
MyValidators,
} from "../change-password/change-password.component";
import { listRefreshService } from "../../service/listRefresh.service";
declare var abp: any;
import * as moment from "moment";
import { FormBuilder, FormGroup, Validators } from "@angular/forms";
import { DisposeequipmentComponent } from "../records/warning-statistics-list/disposeequipment/disposeequipment.component";
import { SelectedMenu } from "src/app/service/selectedMenu.service";
import { Location } from "@angular/common";
import { SystemModelComponent } from "./system-model/system-model.component";
import { PatternService } from "src/app/service/pattern.service";
@Component({
selector: "app-home",
templateUrl: "./home.component.html",
styleUrls: ["./home.component.scss"],
})
export class HomeComponent implements OnInit {
@ViewChild("warning", { static: false }) template?: TemplateRef<{}>;
passwordValidateForm!: FormGroup;
constructor(
private listRefreshService: listRefreshService,
private http: HttpClient,
private router: Router,
private navChangeService: NavChangeService,
public token: CacheTokenService,
private message: NzMessageService,
private notificationService: NzNotificationService,
private modal: NzModalService,
private viewContainerRef: ViewContainerRef,
private fb: FormBuilder,
private selectedMenu: SelectedMenu,
private location: Location,
private patternService: PatternService
) {
const { password } = MyValidators;
this.passwordValidateForm = this.fb.group({
oldpassword: [null, [Validators.required]],
newpassword: [null, [Validators.required, password]],
affirmpassword: [null, [Validators.required, password]],
});
}
isGasStationNav: boolean;
isGasStation: boolean;
isGasStationBack: boolean;
num;
surname: string;
userName: string;
//菜单
menu1 = [
{ name: "首页", url: "/homepage" },
{ name: "数字油站", url: "/plan" },
{ name: "今日预警", url: "/todaywarning" },
{ name: "预警记录", url: "/records_nav" },
{ name: "证照管理", url: "/audit" },
];
menu2 = [
{ name: "数字油站", url: "/plan/petrolStation" },
{ name: "今日预警", url: "/todaywarning/petrolStation" },
{ name: "预警记录", url: "/records_nav/petrolStation" },
{ name: "证照管理", url: "/license/petrolStation" },
];
menu3 = [
{ name: "组织机构管理", url: "/system/organization" },
{ name: "用户管理", url: "/system/user" },
{ name: "角色管理", url: "/system/role" },
{ name: "分析主机管理", url: "/system/host" },
{ name: "推送管理", url: "/system/push" },
{ name: "经营类证照管理", url: "/system/updateOfLicense" },
{ name: "资产类证照管理", url: "/system/fileOfLicense" },
{ name: "菜单管理", url: "/system/menu" },
];
xitongguanli = false;
userMenu = [];
tap = [];
menuList1 = [];
menuList2 = [];
selectedItem;
routerChange(item) {
if (JSON.parse(sessionStorage.getItem("isGasStation"))) {
let a = JSON.parse(sessionStorage.getItem("3dSceneData"));
if (!a.hasBuildingInfo && item.url == "/plan/petrolStation") {
this.message.info("当前油站未开通!");
return;
}
}
if (item.name == this.selectedItem) {
return;
}
sessionStorage.setItem("selectedMenu", item.name);
this.selectedItem = item.name;
this.router.navigate([item.url]);
}
isProd: boolean;
ngOnInit(): void {
this.isProd = this.patternService.isProd;
this.initSelectedItem(this.router);
let a = sessionStorage.getItem("userdata");
this.userMenu = JSON.parse(a).menus;
for (let index = 0; index < this.userMenu.length; index++) {
let a = this.userMenu[index].name;
this.tap.push(a);
}
if (sessionStorage.getItem("selectedMenu")) {
this.selectedItem = sessionStorage.getItem("selectedMenu");
}
this.isGasStation = JSON.parse(sessionStorage.getItem("isGasStation"));
//初始化登陆 如果是油站用户
if (this.isGasStation) {
this.isGasStationNav = true;
for (let index = 0; index < this.menu2.length; index++) {
for (let k = 0; k < this.tap.length; k++) {
if (this.tap[k] == this.menu2[index].name) {
this.menuList1.push(this.menu2[index]);
}
}
}
} else {
//初始化登陆 如果是管理者用户
this.isGasStationNav = false;
this.isGasStationBack = false;
for (let index = 0; index < this.menu1.length; index++) {
for (let k = 0; k < this.tap.length; k++) {
if (this.tap[k] == this.menu1[index].name) {
this.menuList1.push(this.menu1[index]);
}
}
}
for (let index = 0; index < this.tap.length; index++) {
if (this.tap[index] == "系统管理") {
this.xitongguanli = true;
}
}
}
this.router.events
.pipe(filter((event) => event instanceof NavigationEnd))
.subscribe((event: any) => {
console.log('走这里Elma44',event)
//管理者进入油站页面
if (event.url.indexOf("petrolStation") != -1 && !this.isGasStation) {
//控制返回按钮显示
this.isGasStationNav = true;
this.isGasStationBack = true;
}
//管理者进入非油站页面
if (event.url.indexOf("petrolStation") == -1 && !this.isGasStation) {
//控制返回按钮显示
this.isGasStationNav = false;
this.isGasStationBack = false;
}
//油站人员进入管理页面
if (event.url.indexOf("petrolStation") == -1 && this.isGasStation) {
//控制返回按钮显示
this.isGasStationNav = false;
this.isGasStationBack = false;
}
//油站人员进入油站
if (event.url.indexOf("petrolStation") != -1 && this.isGasStation) {
//控制返回按钮显示
this.isGasStationNav = true;
this.isGasStationBack = false;
}
});
setInterval(() => {
this.getTime();
}, 1000);
if (this.isGasStation) {
this.surname = JSON.parse(
sessionStorage.getItem("userdataOfgasstation")
).name;
this.userName = JSON.parse(
sessionStorage.getItem("userdataOfgasstation")
).userName;
} else {
this.surname = JSON.parse(sessionStorage.getItem("userdata")).name;
this.userName = JSON.parse(sessionStorage.getItem("userdata")).userName;
}
// if (
// (sessionStorage.getItem("isDefaultPassword") == "true" ||
// sessionStorage.getItem("isPasswordExpired") == "true") &&
// JSON.parse(sessionStorage.getItem("userdata")).userName != "admin"
// ) {
// this.changePasswordPopup();
// }
this.getWarningSwitch();
}
initSelectedItem(event) {
// console.log(666, event);
if (event.url.indexOf("/homepage") !== -1) {
sessionStorage.setItem("selectedMenu", "首页");
this.selectedItem = "首页";
} else if (event.url.indexOf("/todaywarning") !== -1) {
sessionStorage.setItem("selectedMenu", "今日预警");
this.selectedItem = "今日预警";
} else if (event.url.indexOf("/records_nav") != -1) {
this.selectedItem = "预警记录";
}
}
isWarningVoice = true; //预警声音
isWarningWindow = true; //预警弹窗
/**
* 预警开关
*/
getWarningSwitch() {
this.http
.get("/api/services/app/Session/GetCurrentLoginInformations")
.subscribe((data: any) => {
let popupConfig = data.result.user.popupConfig;
if (!popupConfig) {
this.isWarningVoice = true;
this.isWarningWindow = true;
return;
}
this.isWarningVoice = JSON.parse(popupConfig).isWarningVoice;
this.isWarningWindow = JSON.parse(popupConfig).isWarningWindow;
});
}
warningSwitch(type) {
let body = {
isWarningVoice:
type === "voice" ? !this.isWarningVoice : this.isWarningVoice,
isWarningWindow:
type === "window" ? !this.isWarningWindow : this.isWarningWindow,
};
this.http
.post("/api/services/app/User/SetPopupConfig", body, {
params: {
userId: JSON.parse(sessionStorage.getItem("userdata")).id,
},
})
.subscribe(
(data) => {
if (type === "voice") {
this.isWarningVoice = !this.isWarningVoice;
this.isWarningVoice
? this.message.success("预警声音已开启")
: this.message.success("预警声音已关闭");
} else if (type === "window") {
this.isWarningWindow = !this.isWarningWindow;
this.isWarningWindow
? this.message.success("预警弹窗已开启")
: this.message.success("预警弹窗已关闭");
}
},
(err) => {
this.message.error("修改失败");
}
);
}
ngAfterViewInit() {
SignalRAspNetCoreHelper.initSignalR();
abp.event.on("abp.notifications.received", this.reloadPage);
}
reloadPage = (userNotification) => {
console.log("abp.notifications.received收到通知", userNotification);
if (
this.router.url.indexOf("todaywarning") != -1 ||
this.router.url.indexOf("homepage") != -1
) {
let obj = {
type: "add",
data: userNotification,
};
this.listRefreshService.sendMessage(obj); //发布一条消息
}
this.receiptOfNotification(userNotification);
};
//右下角消息弹窗
messageId = [];
receiptOfNotification(userNotification) {
if (this.isWarningVoice) {
// if (!window.speechSynthesis) {
// this.message.create("warning", `该游览器不支持语音播报`);
// } else {
// let speakMsg = new SpeechSynthesisUtterance(
// "请注意,收到一条新的预警信息,请及时处理!"
// );
// speakMsg.lang = "zh-CN";
// speakMsg.rate = 1;
// speakMsg.pitch = 1.5;
// window.speechSynthesis.speak(speakMsg);
// }
this.Sound();
}
if (this.isWarningWindow) {
let obj = {
id: userNotification.notification.entityId,
messageId: this.notificationService.template(this.template!, {
nzPlacement: "bottomRight",
nzClass: "receiptOfNotification",
nzDuration: 0,
nzData: userNotification,
}).messageId,
};
this.messageId.push(obj);
}
}
Sound() {
var mp3Url = "../../../assets/sound/warning.mp3";
var player = new Audio(mp3Url);
player.play(); //播放 mp3这个音频对象
}
modalData;
look(item) {
console.log("推送信息", item);
let params = {
id: item.notification.entityId,
};
this.http
.get("/api/services/app/ViolateRecord/Get", {
params: params,
})
.subscribe((data: any) => {
console.log("推送信息后获取信息", data);
setTimeout(() => {
let copydata = data.result;
if (copydata.violation.violationType == "设备监测") {
copydata.violatedItemSnapshotObj = JSON.parse(
copydata.violatedItemSnapshot
);
const modal = this.modal.create({
nzContent: DisposeequipmentComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 380,
nzBodyStyle: {
border: "1px solid #91CCFF",
"border-radius": "0px",
padding: "7px",
"box-shadow": "0 0 8px 0 #fff",
"background-image": "linear-gradient(#003665, #000f25)",
},
nzComponentParams: {
data: copydata,
},
nzFooter: null,
nzClosable: false,
nzOnOk: async () => {
if (instance.isScrap) {
await new Promise((resolve) => {
let body = {
id: copydata.violatedItemSnapshotObj.id,
isScrapped: true,
organizationUnitId:
copydata.violatedItemSnapshotObj.organizationUnitId,
name: instance.copydata2.violatedItemSnapshotObj.name,
storageLocation:
instance.copydata2.violatedItemSnapshotObj
.storageLocation,
productionDate: moment(
instance.copydata2.violatedItemSnapshotObj
.productionDate
).format("yyyy-MM-DD"),
maintenanceDate: moment(
instance.copydata2.violatedItemSnapshotObj
.maintenanceDate
).format("yyyy-MM-DD"),
validityEndTime: moment(
instance.copydata2.violatedItemSnapshotObj
.validityEndTime
).format("yyyy-MM-DD"),
};
this.http
.put("/api/services/app/FireEquipment/Update", body)
.subscribe((data: any) => {
let body = {
id: copydata.id,
handleRecord: "报废成功!",
};
this.http
.post(
"/api/services/app/ViolateRecord/HandleViolateRecord",
body
)
.subscribe((data) => {
resolve(data);
this.message.create("success", "报废成功!");
copydata.handleTime = new Date();
if (this.router.url.indexOf("todaywarning") != -1) {
let obj = {
type: "updatehandleTime",
data: copydata.id,
};
this.listRefreshService.sendMessage(obj); //发布一条消息
}
return true;
});
});
});
} else {
if (instance.validateForm.valid) {
await new Promise((resolve) => {
let body = {
id: copydata.violatedItemSnapshotObj.id,
name: instance.validateForm.value.name,
storageLocation:
instance.validateForm.value.storageLocation,
productionDate: moment(
instance.validateForm.value.productionDate
).format("yyyy-MM-DD"),
maintenanceDate: moment(
instance.validateForm.value.maintenanceDate
).format("yyyy-MM-DD"),
validityEndTime: moment(
instance.validateForm.value.validityEndTime
).format("yyyy-MM-DD"),
organizationUnitId:
copydata.violatedItemSnapshotObj.organizationUnitId,
};
this.http
.put("/api/services/app/FireEquipment/Update", body)
.subscribe((data: any) => {
let body = {
id: copydata.id,
handleRecord: "维保成功!",
};
this.http
.post(
"/api/services/app/ViolateRecord/HandleViolateRecord",
body
)
.subscribe((data) => {
resolve(data);
this.message.create("success", "维保成功!");
copydata.handleTime = new Date();
if (
this.router.url.indexOf("todaywarning") != -1
) {
let obj = {
type: "updatehandleTime",
data: copydata.id,
};
this.listRefreshService.sendMessage(obj); //发布一条消息
}
return true;
});
});
});
} else {
this.message.create("warning", "请填写完整!");
return false;
}
}
},
});
const instance = modal.getContentComponent();
} else {
const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent,
nzWrapClassName: "vertical-center-modal",
nzViewContainerRef: this.viewContainerRef,
nzWidth:
document.documentElement.clientHeight < 650 ||
document.documentElement.clientWidth < 1400
? 1000
: 1200,
nzClosable: false,
nzClassName: "modelnobg",
nzBodyStyle: {
"border-radius": "0px",
padding: "0px",
},
nzComponentParams: {
data: copydata,
},
nzFooter: null,
});
const instance = modal.getContentComponent();
}
}, 0);
this.messageId.forEach((element) => {
if (element.id == item.notification.entityId) {
this.notificationService.remove(element.messageId);
}
});
this.readMess(item.notification.id);
});
}
//标记为已读
readMess(id) {
let body = {
id: id,
};
this.http
.post("/api/services/app/Notification/Read", body)
.subscribe((data: any) => {
console.log("标记已读成功");
});
}
close(item) {
this.messageId.forEach((element) => {
if (element.id == item.notification.entityId) {
this.notificationService.remove(element.messageId);
}
});
}
//处置
updateState(item, type) {
let body = {
id: item.notification.entityId,
operation: type,
};
this.http
.put(
"/api/services/app/StationValidityLicenseNotificationRecord/UpdateState",
body
)
.subscribe(
(data) => {
this.messageId.forEach((element) => {
if (element.id == item.notification.entityId) {
this.notificationService.remove(element.messageId);
}
});
this.message.create("success", "操作成功");
},
(err) => {
this.message.create("error", "操作失败");
}
);
}
ngOnDestroy() {
console.log("退出");
abp.event.off("abp.notifications.received", this.reloadPage);
abp.signalr.disconnect();
this.notificationService.remove();
}
//获得时间
time: string;
getTime() {
let myDate = new Date();
let y = myDate.getFullYear();
let M = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
let d = myDate.getDate(); //获取当前日(1-31)
let h = myDate.getHours(); //获取当前小时数(0-23)
let m = myDate.getMinutes(); //获取当前分钟数(0-59)
let s = myDate.getSeconds(); //获取当前秒数(0-59)
//检查是否小于10
M = check(M);
d = check(d);
h = check(h);
m = check(m);
s = check(s);
let timestr = y + "-" + M + "-" + d + " " + h + ":" + m + ":" + s;
this.time = timestr;
//时间数字小于10,则在之前加个“0”补位。
function check(i) {
let num = i < 10 ? "0" + i : i;
return num;
}
}
//退出系统
signOut() {
this.message.create("success", `退出成功`);
this.token.delete();
sessionStorage.clear();
localStorage.removeItem("isautologin");
this.router.navigate(["/login"]);
}
navChange(router) {
if (router == "/oliStationInfo") {
this.router.navigate([router], {
queryParams: {
id: JSON.parse(sessionStorage.getItem("userdata")).organization.id,
},
});
} else {
this.router.navigate([router]);
}
}
navChange2() {
for (let index = 0; index < this.menu3.length; index++) {
for (let k = 0; k < this.tap.length; k++) {
if (this.tap[k] == this.menu3[index].name) {
this.menuList2.push(this.menu3[index]);
}
}
}
if (this.menuList2.length == 0) {
this.message.create("warning", "未分配系统管理菜单");
return;
} else {
window.open(this.menuList2[0].url);
}
}
goback() {
this.router.navigate(["/plan"]);
this.isGasStationNav = false;
}
//全屏
isfullscreen: boolean = false;
fullscreenToggle() {
const docElmWithBrowsersFullScreenFunctions =
document.documentElement as HTMLElement & {
mozRequestFullScreen(): Promise<void>;
webkitRequestFullscreen(): Promise<void>;
msRequestFullscreen(): Promise<void>;
};
if (docElmWithBrowsersFullScreenFunctions.requestFullscreen) {
docElmWithBrowsersFullScreenFunctions.requestFullscreen();
} else if (docElmWithBrowsersFullScreenFunctions.mozRequestFullScreen) {
/* Firefox */
docElmWithBrowsersFullScreenFunctions.mozRequestFullScreen();
} else if (docElmWithBrowsersFullScreenFunctions.webkitRequestFullscreen) {
/* Chrome, Safari and Opera */
docElmWithBrowsersFullScreenFunctions.webkitRequestFullscreen();
} else if (docElmWithBrowsersFullScreenFunctions.msRequestFullscreen) {
/* IE/Edge */
docElmWithBrowsersFullScreenFunctions.msRequestFullscreen();
}
this.isfullscreen = true;
}
closefullscreen() {
const docWithBrowsersExitFunctions = document as Document & {
mozCancelFullScreen(): Promise<void>;
webkitExitFullscreen(): Promise<void>;
msExitFullscreen(): Promise<void>;
};
if (docWithBrowsersExitFunctions.exitFullscreen) {
docWithBrowsersExitFunctions.exitFullscreen();
} else if (docWithBrowsersExitFunctions.mozCancelFullScreen) {
/* Firefox */
docWithBrowsersExitFunctions.mozCancelFullScreen();
} else if (docWithBrowsersExitFunctions.webkitExitFullscreen) {
/* Chrome, Safari and Opera */
docWithBrowsersExitFunctions.webkitExitFullscreen();
} else if (docWithBrowsersExitFunctions.msExitFullscreen) {
/* IE/Edge */
docWithBrowsersExitFunctions.msExitFullscreen();
}
this.isfullscreen = false;
}
//修改密码
changePassword() {
const modal: any = this.modal.create({
nzTitle: "修改密码",
nzContent: ChangePasswordComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 288,
nzComponentParams: {},
nzOnOk: async () => {
if (instance.validateForm.valid) {
let word = JSON.parse(
JSON.stringify(instance.validateForm.value.newpassword)
).toLowerCase();
if (
instance.validateForm.value.newpassword !=
instance.validateForm.value.affirmpassword
) {
this.message.create("warning", "两次密码输入不一致!");
return false;
}
if (word.indexOf("sino") != -1 || word.indexOf("zhonghua") != -1) {
this.message.create(
"warning",
"口令禁止包含 sinochem、sino、zhonghua (含大小写变体) 等中国中化相关字符"
);
return false;
} else {
await new Promise((resolve, reject) => {
let body = {
currentPassword: instance.validateForm.value.oldpassword,
newPassword: instance.validateForm.value.newpassword,
};
this.http
.post("/api/services/app/User/ChangePassword", body)
.subscribe(
(data) => {
resolve(data);
this.message.create("success", "修改成功!");
return true;
},
(err) => {
this.message.create("warning", err.error.error.message);
modal.config.nzOkLoading = false;
return false;
}
);
});
}
} else {
this.message.create("warning", "请填写完整!");
return false;
}
},
});
const instance = modal.getContentComponent();
}
}