diff --git a/digital-future-summit/src/app/implementation/layout/layout.component.html b/digital-future-summit/src/app/implementation/layout/layout.component.html
index 67667a1..ff20c5b 100644
--- a/digital-future-summit/src/app/implementation/layout/layout.component.html
+++ b/digital-future-summit/src/app/implementation/layout/layout.component.html
@@ -1,72 +1,112 @@
-
-
-
-
- 装备云
-
-
-
- 零部件云
-
-
-
- AIOT设备智能化
-
-
-
- 知识中台
-
-
-
- chatFile
-
-
-
- 数据中台
-
-
-
- 互联中台
-
-
-
- 智能工作台
-
-
-
-
- T100
-
-
-
- E10
-
-
-
-
- 高效设计研发
-
-
-
-
- 高管数智助理
-
-
-
- 业务中台
-
-
-
- 智能生产控制
-
-
-
- 智能合并报表
-
-
-
-
智驱中台
+
+
+
+
+
+
+ 装备云
+
+
+
+ 零部件云
+
+
+
+ AIOT设备智能
+
+
+
+ 知识中台
+
+
+
+ chatFile
+
+
+
+ 数据中台
+
+
+
+ 互联中台
+
+
+
+ 智能工作台
+
+
+
+
+ T100
+
+
+
+ E10
+
+
+
+
+ 高效设计研发
+
+
+
+
+ 高管数智助理
+
+
+
+ 业务中台
+
+
+
+ 智能生产控制
+
+
+
+ 智能合并报表
+
+
+
+ 智驱中台
+
\ No newline at end of file
diff --git a/digital-future-summit/src/app/implementation/layout/layout.component.less b/digital-future-summit/src/app/implementation/layout/layout.component.less
index 159b4ec..3468eca 100644
--- a/digital-future-summit/src/app/implementation/layout/layout.component.less
+++ b/digital-future-summit/src/app/implementation/layout/layout.component.less
@@ -7,130 +7,170 @@
/* 背景图等比例缩小填充整个容器 */
height: 100vh;
/* 使背景图铺满整个浏览器窗口 */
- display: flex;
- justify-content: center;
- align-items: center;
- position: relative;
}
-.layout-body .img {
+.tab{
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 10000;
+ width: 800px;
+ background-color: aqua;
+}
+
+.container .img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
+ display: none;
+}
+
+
+.container {
+ margin: 0;
+ padding: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: absolute;
+ z-index: 100;
+ /* background-color: rgba(255, 0, 0, 0.5); */
+ /* 使用RGBA设置背景颜色为红色,透明度为50% */
+ height: 100vh;
+ width: 100%;
}
-.layout-body .box {
+
+.container .box {
position: absolute;
z-index: 1000;
- background-color: white;
font-size: large;
text-align: center;
padding: 10px 10px;
cursor: pointer;
+ border: 1px solid #ddd;
}
-.layout-body .box-equipmentCloud {
- top: 20px;
- left: 20px;
- width: 150px;
+.container .box-equipmentCloud {
+ top: 10%;
+ left: 2%;
+ width: 320px;
+ height: 100px;
}
-.layout-body .box-partsCloud {
- top: 70px;
- left: 20px;
- width: 150px;
+
+.container .box-partsCloud {
+ top: 10%;
+ right: 2%;
+ width: 350px;
+ height: 100px;
}
-.layout-body .box-AIOT {
- top: 120px;
+.container .box-KMO {
+ top: 170px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-KMO {
- top: 170px;
+.container .box-chatFile {
+ top: 220px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-chatFile {
- top: 220px;
+
+.container .box-AIOT {
+ top: 120px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-DMP {
+.container .box-DMP {
top: 300px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-iPaaS {
+.container .box-iPaaS {
top: 350px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-EIP {
+.container .box-EIP {
top: 400px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-T100bs {
+.container .box-T100bs {
top: 450px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-E10229 {
+.container .box-E10229 {
top: 500px;
left: 20px;
width: 150px;
+ background-color: wheat;
}
-.layout-body .box-PLM {
+.container .box-PLM {
top: 550px;
left: 20px;
width: 150px;
- color:darkmagenta;
+ color: darkmagenta;
+ background-color: wheat;
}
-.layout-body .box-assistant {
+.container .box-assistant {
top: 20px;
right: 0px;
width: 150px;
color: brown;
+ background-color: wheat;
}
-.layout-body .box-BSC {
+.container .box-BSC {
top: 70px;
right: 0px;
width: 150px;
color: brown;
+ background-color: wheat;
}
-.layout-body .box-mes {
+.container .box-SSO_mes {
top: 120px;
right: 0px;
width: 150px;
color: brown;
+ background-color: wheat;
}
-.layout-body .box-SCS {
+.container .box-SCS {
top: 170px;
right: 0px;
width: 150px;
color: brown;
+ background-color: wheat;
}
-.layout-body .box-AASK {
+.container .box-AASK {
top: 220px;
right: 0px;
width: 150px;
color: brown;
+ background-color: wheat;
}
\ No newline at end of file
diff --git a/digital-future-summit/src/app/implementation/layout/layout.component.ts b/digital-future-summit/src/app/implementation/layout/layout.component.ts
index fc1b570..cb2dd75 100644
--- a/digital-future-summit/src/app/implementation/layout/layout.component.ts
+++ b/digital-future-summit/src/app/implementation/layout/layout.component.ts
@@ -2,14 +2,12 @@
import { systemList } from "./system";
// import { DwHttpApiInterceptor } from "@webdpt/framework/http";
/* eslint-disable quotes */
-import { Component, OnInit } from "@angular/core";
+import { Component, ElementRef, OnInit, Renderer2 } from "@angular/core";
import {
DigiMiddlewareAuthApp,
DigiMiddlewareAuthUser,
} from "app/config/app-auth-token";
import { CommonService } from "../service/common.service";
-import { log } from "console";
-import { menuData } from './../menu/model/menu.model';
@Component({
selector: "app-layout",
@@ -18,25 +16,51 @@ import { menuData } from './../menu/model/menu.model';
})
export class LayoutComponent implements OnInit {
// 登出: https://iam-test.digiwincloud.com.cn/api/iam/v2/identity/logout
- userToken: string;
systemMaps = {};
- user_info = {
- userId: "", // 当前用户账号
- tenantId: "", // 当前用户租户id
- productKey: "", // json字段的头部
- };
queryDisplayList = [];
- constructor(private commonService: CommonService) { }
+ USER_ID = '';
+
+ dragEnable: boolean = false;
+
+ isDragging: boolean = false;
+
+ layoutUsers = ['digiwin0001', 'digiwin0002', 'digiwin0003', 'digiwin0004', 'digiwin0005', 'default',
+ 'digiwin0006', 'digiwin0007', 'digiwin0008', 'digiwin0009', 'digiwin0010', 'dongsk@digiwin.com'];
+
+ divContent = {
+ sysId: '',
+ top: '',
+ left: '',
+ height: '',
+ width: '',
+ userId: 'default',
+ tenantId: '',
+ topPercent: '',
+ leftPercent: '',
+ heightPercent: '',
+ widthPercent: ''
+ };
+
+
+ constructor(private commonService: CommonService, private el: ElementRef, private renderer: Renderer2) { }
ngOnInit(): void {
this.systemMaps = systemList;
this.initSystemBySemcSSO();
}
-
/**
* 通过请求queryDisplayList接口登录
*/
initSystemBySemcSSO() {
+
+
+ const DwUserInfo = JSON.parse(sessionStorage.getItem("DwUserInfo"));
+
+ this.USER_ID = DwUserInfo.userId;
+ this.dragEnable = this.USER_ID === 'dongsk@digiwin.com';
+
+ console.log(this.dragEnable);
+
const headers = {
"Digi-Middleware-Auth-App": DigiMiddlewareAuthApp,
"Digi-Middleware-Auth-User": DigiMiddlewareAuthUser,
@@ -55,15 +79,64 @@ export class LayoutComponent implements OnInit {
url: item.cloudwebsite,
applicationAppId: item.applicationAppId
};
+
+ // 非管理员加载
+ this.divContent.userId = this.USER_ID;
+ if (this.USER_ID === 'dongsk@digiwin.com') {
+ this.divContent.userId = "default";
+ }
+ this.initSysLayout();
+
});
console.log("systemMaps", this.systemMaps);
+
}).catch((error) => console.error(error));
}
+ initSysLayout() {
+ if (!this.layoutUsers.includes(this.divContent.userId)) {
+ return;
+ }
+ const DwUserInfo = JSON.parse(sessionStorage.getItem("DwUserInfo"));
+ this.commonService.postWithHeaders(this.commonService.apiUrl + "/restful/standard/demo/api/517/config/list",
+ {
+ userId: this.divContent.userId,
+ tenantId: DwUserInfo.tenantId,
+ sysId: ''
+ },
+ {
+ "Digi-Middleware-Auth-App": DigiMiddlewareAuthApp,
+ "Digi-Middleware-Auth-User": DigiMiddlewareAuthUser,
+ }
+ ).then(res => {
+ if (res && res.response) {
+ res.response.forEach(item => {
+ console.log(item);
+ const sysEL = this.el.nativeElement.querySelector('#' + item.sysId);
+ // this.renderer.setStyle(sysEL, 'top', item.top);
+ // this.renderer.setStyle(sysEL, 'left', item.left);
+ // this.renderer.setStyle(sysEL, 'width', item.width);
+ // this.renderer.setStyle(sysEL, 'height', item.height);
+
+ this.renderer.setStyle(sysEL, 'top', item.topPercent);
+ this.renderer.setStyle(sysEL, 'left', item.leftPercent);
+ this.renderer.setStyle(sysEL, 'width', item.widthPercent);
+ this.renderer.setStyle(sysEL, 'height', item.heightPercent);
+ });
+ }
+ });
+ }
+
jumpToSystem(key: string) {
- console.log(this.systemMaps);
+
+ const DwUserInfo = JSON.parse(sessionStorage.getItem("DwUserInfo"));
+
+ if (DwUserInfo.userId === 'dongsk@digiwin.com') {
+ return;
+ }
+
if (this.systemMaps[key] == null) {
return;
}
@@ -72,12 +145,10 @@ export class LayoutComponent implements OnInit {
// 免密跳转
if (item.linkLogin) {
- window.open(item.url,'_blank');
+ window.open(item.url, '_blank');
return;
}
- const DwUserInfo = JSON.parse(sessionStorage.getItem("DwUserInfo"));
-
const headers = {
"Digi-Middleware-Auth-App": DigiMiddlewareAuthApp,
"Digi-Middleware-Auth-User": DigiMiddlewareAuthUser,
@@ -129,4 +200,107 @@ export class LayoutComponent implements OnInit {
}
}
+ handleElementDrag(data: any) {
+ // console.log(data);
+
+ if (data.type === 'mousedown') {
+ this.isDragging = true;
+ this.divContent.height = data.height;
+ this.divContent.width = data.width;
+ this.divContent.top = data.top;
+ this.divContent.left = data.left;
+ this.divContent.sysId = data.id;
+ }
+
+ if (data.type !== 'mouseup') {
+ return;
+ }
+
+ if (data.left === '' || data.top === '') {
+ return;
+ }
+
+ const DwUserInfo = JSON.parse(sessionStorage.getItem("DwUserInfo"));
+
+ this.divContent.sysId = data.id;
+ this.divContent.top = data.top;
+ this.divContent.left = data.left;
+ this.divContent.height = data.height;
+ this.divContent.width = data.width;
+ this.divContent.tenantId = DwUserInfo.tenantId;
+
+ console.log(this.divContent);
+ // this.commonService.postWithHeaders(this.commonService.apiUrl + "/restful/standard/demo/api/517/config/save",
+ // divContentX,
+ // {
+ // "Digi-Middleware-Auth-App": DigiMiddlewareAuthApp,
+ // "Digi-Middleware-Auth-User": DigiMiddlewareAuthUser,
+ // }
+ // ).then(res => {
+ // if (res && res.response) {
+ // alert('sucess!');
+ // }
+ // });
+ this.isDragging = false;
+
+ }
+
+ changeDiv(type: String) {
+
+ const sysEL = this.el.nativeElement.querySelector('#' + this.divContent.sysId);
+ if (sysEL === null) {
+ return;
+ }
+ if (type === 'W') {
+ this.renderer.setStyle(sysEL, 'width', this.divContent.width);
+ }
+ if (type === 'H') {
+ this.renderer.setStyle(sysEL, 'height', this.divContent.width);
+ }
+
+ }
+
+ save() {
+
+ if (!this.layoutUsers.includes(this.divContent.userId)) {
+ return;
+ }
+
+ if (this.divContent.left === '' || this.divContent.top === '' || this.divContent.sysId === '' ||
+ this.divContent.width === '' || this.divContent.height === '') {
+ return;
+ }
+
+
+ // 计算百分比
+ const windowWidth: number = window.innerWidth;
+ const windowHeight: number = window.innerHeight;
+
+ const top = parseFloat(this.divContent.top.replace("px", ""));
+ const left = parseFloat(this.divContent.left.replace("px", ""));
+ const width = parseFloat(this.divContent.width.replace("px", ""));
+ const height = parseFloat(this.divContent.height.replace("px", ""));
+
+ this.divContent.topPercent = (Number((top / windowHeight).toFixed(4)) * 100).toString() + "%";
+ this.divContent.leftPercent = (Number((left / windowWidth).toFixed(4)) * 100).toString() + "%";
+ this.divContent.widthPercent = (Number((width / windowWidth).toFixed(4)) * 100).toString() + "%";
+ this.divContent.heightPercent = (Number((height / windowHeight).toFixed(4)) * 100).toString() + "%";
+
+ console.log('--save--divContent--', this.divContent);
+
+ this.commonService.postWithHeaders(this.commonService.apiUrl + "/restful/standard/demo/api/517/config/save",
+ this.divContent,
+ {
+ "Digi-Middleware-Auth-App": DigiMiddlewareAuthApp,
+ "Digi-Middleware-Auth-User": DigiMiddlewareAuthUser,
+ }
+ ).then(res => {
+ if (res && res.response) {
+ alert('sucess!');
+ this.divContent.sysId = '';
+ }
+ });
+
+ }
+
}
diff --git a/digital-future-summit/src/app/implementation/layout/system.ts b/digital-future-summit/src/app/implementation/layout/system.ts
index e8fbaf5..0d00789 100644
--- a/digital-future-summit/src/app/implementation/layout/system.ts
+++ b/digital-future-summit/src/app/implementation/layout/system.ts
@@ -1,7 +1,7 @@
/* eslint-disable quotes */
export const systemList = {
EIP: {
- key:"EIP",
+ key: "EIP",
title: "智驱工作台",
sid: 821224928908288,
id: "digiwinSummit",
@@ -10,19 +10,24 @@ export const systemList = {
mockLogin: false,
ssoLogin: false,
},
+ T100: {
+ key: "T100",
+ title: "T100",
+ url: "http://221.226.187.245:12080/wtoppth/ua/r/app/gwc_azzi000_nologin?Arg=2222",
+ mockLogin: false,
+ ssoLogin: false,
+ linkLogin: true,
+ },
iPaaS: {
- key:"iPaaS",
+ key: "iPaaS",
title: "数环通用",
- sid: 821224928908288,
- id: "digiwinSummit",
- name: "数智未来峰会",
url: "https://api.solinkup.com/console/loginByPhone?phone=13851711172",
mockLogin: false,
ssoLogin: false,
linkLogin: true,
},
DMP: {
- key:"DMP",
+ key: "DMP",
title: "数据中台",
sid: 150269977879104,
id: "zhoujg",
@@ -32,7 +37,7 @@ export const systemList = {
ssoLogin: false,
},
chatFile: {
- key:"chatFile",
+ key: "chatFile",
title: "chatFile",
sid: 610301619790400,
id: "ShanghaiWorldExpo",
@@ -42,7 +47,7 @@ export const systemList = {
ssoLogin: false,
},
KMO: {
- key:"KMO",
+ key: "KMO",
title: "知识中台",
sid: 610301619790400,
id: "ShanghaiWorldExpo",
@@ -52,7 +57,7 @@ export const systemList = {
ssoLogin: false,
},
AIOT: {
- key:"AIOT",
+ key: "AIOT",
title: "AIOT",
sid: 190963220054592,
id: "zhoujg999",
@@ -62,7 +67,7 @@ export const systemList = {
ssoLogin: false,
},
equipmentCloud: {
- key:"equipmentCloud",
+ key: "equipmentCloud",
title: "装备云",
sid: 500620095189568,
id: "88880310",
@@ -72,7 +77,7 @@ export const systemList = {
ssoLogin: false,
},
partsCloud: {
- key:"partsCloud",
+ key: "partsCloud",
title: '零部件云',
sid: 473371184808512,
id: '20220815',
@@ -80,5 +85,15 @@ export const systemList = {
url: "https://athena.digiwincloud.com.cn",
mockLogin: false,
ssoLogin: false,
+ },
+ scsCloud: {
+ key: "partsCloud",
+ title: '智合报',
+ sid: 484411116737088,
+ id: 'SCST100Athena',
+ name: 'scs华为云发版测试',
+ url: "https://athena.digiwincloud.com.cn",
+ mockLogin: false,
+ ssoLogin: false,
}
};
diff --git a/digital-future-summit/src/app/implementation/shared/draggable/draggable.directive.ts b/digital-future-summit/src/app/implementation/shared/draggable/draggable.directive.ts
new file mode 100644
index 0000000..59451b4
--- /dev/null
+++ b/digital-future-summit/src/app/implementation/shared/draggable/draggable.directive.ts
@@ -0,0 +1,76 @@
+import { Directive, ElementRef, EventEmitter, HostListener, Output, Input, Renderer2 } from '@angular/core';
+import { element } from 'protractor';
+
+@Directive({
+ selector: '[appDraggable]'
+})
+export class DraggableDirective {
+ private offsetX: number = 0;
+ private offsetY: number = 0;
+ private isDragging: boolean = false;
+
+ constructor(private el: ElementRef, private renderer: Renderer2) { }
+
+ @Input() dragEnable: boolean;
+
+ @Output() dragEvent = new EventEmitter
();
+
+ @HostListener('mousedown', ['$event'])
+ onMouseDown(event: MouseEvent) {
+ if (!this.dragEnable || this.isDragging) {
+ return;
+ }
+ this.isDragging = true;
+ this.offsetX = event.clientX - this.el.nativeElement.getBoundingClientRect().left;
+ this.offsetY = event.clientY - this.el.nativeElement.getBoundingClientRect().top;
+
+ // this.renderer.setStyle(this.el.nativeElement, 'poniter', 'move');
+
+ this.dragEvent.emit({
+ type: 'mousedown',
+ left: this.el.nativeElement.getBoundingClientRect().left + 'px',
+ top: this.el.nativeElement.getBoundingClientRect().top + 'px',
+ height: this.el.nativeElement.clientHeight + 'px',
+ width: this.el.nativeElement.clientWidth + 'px',
+ id: this.el.nativeElement.getAttribute('id')
+ });
+ }
+
+ @HostListener('mousemove', ['$event'])
+ onMouseMove(event: MouseEvent) {
+ if (this.isDragging) {
+ const x = event.clientX - this.offsetX;
+ const y = event.clientY - this.offsetY;
+ this.renderer.setStyle(this.el.nativeElement, 'left', x + 'px');
+ this.renderer.setStyle(this.el.nativeElement, 'top', y + 'px');
+
+ // this.dragEvent.emit({
+ // type: 'mousemove',
+ // left: this.el.nativeElement.style.left,
+ // top: this.el.nativeElement.style.top,
+ // height: this.el.nativeElement.clientHeight + 'px',
+ // width: this.el.nativeElement.clientWidth + 'px',
+ // id: this.el.nativeElement.getAttribute('id')
+ // });
+ }
+ }
+
+ @HostListener('mouseup')
+ onMouseUp() {
+ if (!this.dragEnable) {
+ return;
+ }
+ this.isDragging = false;
+ // 记录div位置
+ // console.log('Left: ' + this.el.nativeElement.style.left + ', Top: ' + this.el.nativeElement.style.top);
+ this.dragEvent.emit({
+ type: 'mouseup',
+ left: this.el.nativeElement.style.left,
+ top: this.el.nativeElement.style.top,
+ height: this.el.nativeElement.clientHeight + 'px',
+ width: this.el.nativeElement.clientWidth + 'px',
+ id: this.el.nativeElement.getAttribute('id')
+ });
+ // this.renderer.removeStyle(this.el.nativeElement, 'poniter');
+ }
+}
diff --git a/digital-future-summit/src/app/implementation/shared/shared.module.ts b/digital-future-summit/src/app/implementation/shared/shared.module.ts
index 7c55c3b..c63c32c 100644
--- a/digital-future-summit/src/app/implementation/shared/shared.module.ts
+++ b/digital-future-summit/src/app/implementation/shared/shared.module.ts
@@ -2,6 +2,7 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DwExceptionModule } from '@webdpt/components/exception';
+import { DraggableDirective } from './draggable/draggable.directive';
/**
* 共享模組
@@ -18,7 +19,11 @@ import { DwExceptionModule } from '@webdpt/components/exception';
exports: [
FormsModule,
ReactiveFormsModule,
- DwExceptionModule
+ DwExceptionModule,
+ DraggableDirective
+ ],
+ declarations: [
+ DraggableDirective
]
})
export class SharedModule { }