From a43188c3a10050a9b062fe15d3bd2c30887be672 Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Tue, 13 Dec 2022 14:42:25 +0800 Subject: [PATCH 01/35] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=AD=94=E5=A2=99?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ControlPanelDialog.vue | 565 ++++++++++++++++++++++++++ src/i18n/en-US/index.ts | 5 + src/i18n/zh-CN/index.ts | 5 + src/pages/TopToolBar.vue | 28 ++ 4 files changed, 603 insertions(+) create mode 100644 src/components/ControlPanelDialog.vue diff --git a/src/components/ControlPanelDialog.vue b/src/components/ControlPanelDialog.vue new file mode 100644 index 0000000..3579af3 --- /dev/null +++ b/src/components/ControlPanelDialog.vue @@ -0,0 +1,565 @@ + + + + + diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index 8d9e02c..1f0690d 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -398,4 +398,9 @@ export default { "server commit hash": "Server Commit Hash", "edit user or password": "Edit User Or Password", "old password error": "Old Password Error", + "magic wall":"Magic Wall", + "angle":"Angle", + "topology diagram":"Topology Diagram", + "physical central location":"Central Location", + "monitors list":"Monitors List", }; diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts index c090c28..2a607d5 100644 --- a/src/i18n/zh-CN/index.ts +++ b/src/i18n/zh-CN/index.ts @@ -668,4 +668,9 @@ export default { "new password": "新密码", "edit user or password": "修改用户名和密码", "old password error": "旧密码不匹配", + "magic wall":"魔墙", + "angle":"角度", + "topology diagram":"拓扑图", + "physical central location":"物理中心位置", + "monitors list":"显示器", }; diff --git a/src/pages/TopToolBar.vue b/src/pages/TopToolBar.vue index a761bb4..9399e19 100644 --- a/src/pages/TopToolBar.vue +++ b/src/pages/TopToolBar.vue @@ -310,6 +310,27 @@ + + + + + + + + + + {{ $t("magic wall") }} + + + + + + + @@ -496,6 +518,9 @@ import { useStore } from "src/store"; import GridSettingDialog from "src/components/GridSettingDialog.vue"; import SpecialVideoGridSettingDialog from "src/components/SpecialVideoGridSettingDialog.vue"; + +import ControlPanelDialog from "src/components/ControlPanelDialog.vue"; + import BackgroundImageDialog from "src/components/BackgroundImageDialog.vue"; import RecoveryDatabaseDialog from "src/components/RecoveryDatabaseDialog.vue"; import UpgradeDialog from "src/components/UpgradeDialog.vue"; @@ -527,6 +552,9 @@ export default defineComponent({ components: { GridSettingDialog, SpecialVideoGridSettingDialog, + + ControlPanelDialog, + BackgroundImageDialog, RecoveryDatabaseDialog, UpgradeDialog, From 2b1ab68d29d025f5bdb7b0490eb1940ef1d4ed40 Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Tue, 13 Dec 2022 14:56:36 +0800 Subject: [PATCH 02/35] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/ClientConnection.ts | 31 +++++++ .../EditJointActionEquipmentDialog.vue | 19 ++++- src/components/FileManageDialog.vue | 26 +++++- src/components/SystemSettingDialog.vue | 10 +-- src/entities/MagicWallConfig.ts | 8 ++ src/entities/RectF.ts | 34 ++++++++ src/entities/WSProtocol.ts | 82 +++++++++++++++++++ src/i18n/en-US/index.ts | 3 + src/i18n/zh-CN/index.ts | 4 + src/pages/TopToolBar.vue | 15 +++- 10 files changed, 217 insertions(+), 15 deletions(-) create mode 100644 src/entities/MagicWallConfig.ts create mode 100644 src/entities/RectF.ts diff --git a/src/common/ClientConnection.ts b/src/common/ClientConnection.ts index a512d2d..91e6af8 100644 --- a/src/common/ClientConnection.ts +++ b/src/common/ClientConnection.ts @@ -15,6 +15,7 @@ import TimingTaskEntity from "src/entities/TimingTaskEntity"; import JointActionEquipmentTableEntity from "src/entities/JointActionEquipmentTableEntity"; import { CustomProtocol } from "src/entities/WSProtocolCustom"; import ClientConnectionCustom from "./ClientConnectionCustom"; +import MagicWallConfig from "src/entities/MagicWallConfig"; class _RpcInfo { send_timestamp: number; @@ -1232,6 +1233,36 @@ export default class ClientConnection { } } + public async getMagicWallConfig() { + try { + return await this.doRpc( + new Protocol.RpcGetMagicWallConfigRequestEntity() + ); + } catch (e) { + console.error(e); + } + } + + public async setMagicWallConfig(config: MagicWallConfig) { + try { + return await this.doRpc( + new Protocol.RpcSetMagicWallConfigRequestEntity(config) + ); + } catch (e) { + console.error(e); + } + } + + public async testA() { + try { + return await this.doRpc( + new Protocol.RpcTestARequestEntity() + ); + } catch (e) { + console.error(e); + } + } + public async setHdmiInDecodeType(index: number, type: string) { try { return await this.doRpc( diff --git a/src/components/EditJointActionEquipmentDialog.vue b/src/components/EditJointActionEquipmentDialog.vue index 41c5b12..f8d9466 100644 --- a/src/components/EditJointActionEquipmentDialog.vue +++ b/src/components/EditJointActionEquipmentDialog.vue @@ -92,7 +92,10 @@ (val) => (val && val.length > 0) || $t('Please type something'), (val) => - isIpAddress(val) || $t('Please input vaild ip address'), + isHost(val) || + $t( + 'Please input vaild host. example: 192.168.1.1 or 192.168.1.1:8080' + ), ]" lazy-rules /> @@ -182,6 +185,15 @@ export default defineComponent({ connect_type: "network", }, }, + { + key: "CX_MISP3000", + label: $t.t("CX_MISP3000"), + value: { + protocol: "CX_MISP3000", + protocol_version: "Normal", + connect_type: "network", + }, + }, // { // key: "VTRON2", // label: $t.t("VTRON2"), @@ -305,7 +317,8 @@ export default defineComponent({ message: (is_add.value ? $t.t("add") : $t.t("edit")) + $t.t(" ") + - $t.t(" equipment data") + + $t.t(" ") + + $t.t("equipment data") + (success ? $t.t("success") : $t.t("fail")) + "!", position: "top", @@ -316,7 +329,7 @@ export default defineComponent({ show_dialog.value = false; } }, - isIpAddress(str: string) { + isHost(str: string) { return ( str == "localhost" || /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/.test( diff --git a/src/components/FileManageDialog.vue b/src/components/FileManageDialog.vue index 50d1c7b..5b198bb 100644 --- a/src/components/FileManageDialog.vue +++ b/src/components/FileManageDialog.vue @@ -228,6 +228,30 @@ }} {{ props.value }} +
+ + + + {{ + (props.row.file_size / 1024 / 1024 / 1024).toFixed(2) + }}GB + + + {{ (props.row.file_size / 1024 / 1024).toFixed(2) }}MB + + + {{ (props.row.file_size / 1024).toFixed(2) }} KB + + +
{{ props.value }}
@@ -554,7 +578,7 @@ export default defineComponent({ align: "center", label: $t.t("file size"), field: (val: FileEntity) => - val.is_directory ? null : Math.ceil((val ? val.file_size : 0) / 1000), + val.is_directory ? null : Math.ceil((val ? val.file_size : 0) / 1024), format: (val: any) => (val != null ? `${val} KB` : ""), sortable: true, }, diff --git a/src/components/SystemSettingDialog.vue b/src/components/SystemSettingDialog.vue index 07ad765..8a51d81 100644 --- a/src/components/SystemSettingDialog.vue +++ b/src/components/SystemSettingDialog.vue @@ -1166,9 +1166,7 @@
@@ -1361,8 +1359,6 @@ import { EWeekDays } from "src/entities/EWeekDays"; import SystenSettingAdvancedNetworkDialog from "src/components/SystenSettingAdvancedNetworkDialog.vue"; import { AdvancedIpAddressEntity } from "src/entities/AdvancedIpAddressEntity"; -import { EDeviceAttribute } from "src/entities/EDeviceAttribute"; - import version from "../../package.json"; import { Md5 } from "ts-md5"; @@ -1521,7 +1517,7 @@ export default defineComponent({ const timing_tasks: Ref = ref([]); let click_count = ref(0); - const target_click_count = ref(30); + const target_click_count = ref(20); let client_version = ref(version); let server_version = ref("unknow"); let server_commit_hash = ref("unknow"); @@ -1990,7 +1986,7 @@ export default defineComponent({ Cookies.remove("auto_login"); SessionStorage.clear(); try { - $q.fullscreen.exit(); + $q.fullscreen.exit(); } catch {} window.location.reload(); } diff --git a/src/entities/MagicWallConfig.ts b/src/entities/MagicWallConfig.ts new file mode 100644 index 0000000..8917983 --- /dev/null +++ b/src/entities/MagicWallConfig.ts @@ -0,0 +1,8 @@ +import RotatedRectF from "./RectF"; + +export default class MagicWallConfig { + magic_wall_enable = false; + row = 0; + col = 0; + windows: RotatedRectF[] = []; +} diff --git a/src/entities/RectF.ts b/src/entities/RectF.ts new file mode 100644 index 0000000..d84612e --- /dev/null +++ b/src/entities/RectF.ts @@ -0,0 +1,34 @@ +export default class RectF { + lt: PointF = new PointF(0, 0); + w: number = 0; + h: number = 0; + + constructor(lt: PointF = new PointF(0, 0), h: number = 0, w: number = 0) { + this.lt = lt; + this.h = h; + this.w = w; + } +} + +export class PointF { + constructor(x: number = 0, y: number = 0) { + this.x = x; + this.y = y; + } + x: number = 0; + y: number = 0; +} + +export class RotatedRectF extends RectF { + angle: number = 0; + + constructor( + lt: PointF = new PointF(0, 0), + h: number = 0, + w: number = 0, + angle: number = 0 + ) { + super(lt, h, w); + this.angle = angle; + } +} diff --git a/src/entities/WSProtocol.ts b/src/entities/WSProtocol.ts index ade9141..db26a97 100644 --- a/src/entities/WSProtocol.ts +++ b/src/entities/WSProtocol.ts @@ -12,6 +12,7 @@ import { SerialPortConfigEntity } from "./SerialPortConfigEntity"; import { ConnectTableEntity } from "./ConnectTableEntity"; import TimingTaskEntity from "./TimingTaskEntity"; import JointActionEquipmentTableEntity from "./JointActionEquipmentTableEntity"; +import MagicWallConfig from "./MagicWallConfig"; export namespace Protocol { export class Commands { @@ -474,6 +475,18 @@ export namespace Protocol { return Commands.PROTOCOL_PREFIX + "SetHDMIRotation"; } + public static get kRpcSetMagicWallConfig() { + return Commands.PROTOCOL_PREFIX + "RpcSetMagicWallConfig"; + } + + public static get kRpcGetMagicWallConfig() { + return Commands.PROTOCOL_PREFIX + "RpcGetMagicWallConfig"; + } + + public static get kRpcTestA() { + return Commands.PROTOCOL_PREFIX + "RpcTestA"; + } + static _all_commands = new Set([ Commands.kUnKnowCommand, Commands.kSearchDevice, @@ -590,6 +603,9 @@ export namespace Protocol { Commands.kRpcDeleteJointActionEquipment, Commands.kCleanBrowserCache, Commands.kSetHDMIRotation, + Commands.kRpcGetMagicWallConfig, + Commands.kRpcSetMagicWallConfig, + Commands.kRpcTestA, ]); public static get AllCommands() { return this._all_commands; @@ -3036,4 +3052,70 @@ export namespace Protocol { this.rotation = rotation; } } + + export class RpcGetMagicWallConfigRequestEntity extends PacketEntity { + constructor(rpc_id = 0) { + super(); + super.command = Commands.kRpcGetMagicWallConfig; + super.flag = PacketEntity.FLAG_REQUEST; + super.rpc_id = rpc_id; + } + timestamp = Date.now(); + } + + export class RpcGetMagicWallConfigResponseEntity extends PacketEntity { + constructor() { + super(); + super.flag = PacketEntity.FLAG_RESPONSE; + } + + config: MagicWallConfig = new MagicWallConfig(); + success = false; + } + + export class RpcSetMagicWallConfigRequestEntity extends PacketEntity { + constructor(config: MagicWallConfig, rpc_id = 0) { + super(); + super.command = Commands.kRpcSetMagicWallConfig; + super.flag = PacketEntity.FLAG_REQUEST; + super.rpc_id = rpc_id; + + this.config = config ?? new MagicWallConfig(); + } + config: MagicWallConfig = new MagicWallConfig(); + } + + export class RpcSetMagicWallConfigResponseEntity extends PacketEntity { + constructor() { + super(); + super.flag = PacketEntity.FLAG_RESPONSE; + } + config: MagicWallConfig = new MagicWallConfig(); + success = false; + } + + export class RpcTestARequestEntity extends PacketEntity { + constructor(rpc_id = 0) { + super(); + super.command = Commands.kRpcTestA; + super.flag = PacketEntity.FLAG_REQUEST; + super.rpc_id = rpc_id; + } + timestamp = 0; + } + + export class RpcTestAResponseEntity extends PacketEntity { + constructor() { + super(); + super.flag = PacketEntity.FLAG_RESPONSE; + } + lt_t = 0; + lt_l = 0; + rt_t = 0; + rt_r = 0; + rb_b = 0; + rb_r = 0; + lb_b = 0; + lb_l = 0; + } } diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index 1f0690d..67747fc 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -398,6 +398,9 @@ export default { "server commit hash": "Server Commit Hash", "edit user or password": "Edit User Or Password", "old password error": "Old Password Error", + "Please input vaild host. example: 192.168.1.1 or 192.168.1.1:8080": + "Please Input Vaild Host. Example: 192.168.1.1 or 192.168.1.1:8080", + "equipment data": "Equipment Data", "magic wall":"Magic Wall", "angle":"Angle", "topology diagram":"Topology Diagram", diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts index 2a607d5..378f89d 100644 --- a/src/i18n/zh-CN/index.ts +++ b/src/i18n/zh-CN/index.ts @@ -668,9 +668,13 @@ export default { "new password": "新密码", "edit user or password": "修改用户名和密码", "old password error": "旧密码不匹配", + "magic wall":"魔墙", "angle":"角度", "topology diagram":"拓扑图", "physical central location":"物理中心位置", "monitors list":"显示器", + "Please input vaild host. example: 192.168.1.1 or 192.168.1.1:8080": + "请输入合法地址. 例: 192.168.1.1 或 192.168.1.1:8080", + "equipment data": "联动设备", }; diff --git a/src/pages/TopToolBar.vue b/src/pages/TopToolBar.vue index 9399e19..c0a8aec 100644 --- a/src/pages/TopToolBar.vue +++ b/src/pages/TopToolBar.vue @@ -462,7 +462,8 @@ - + + {{ $store.state.fan_temp.toFixed(1) }} ℃ @@ -496,7 +497,7 @@ /> - - - + + + + + diff --git a/src/store/index.ts b/src/store/index.ts index d236d0b..ff1f844 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -39,7 +39,27 @@ export class CustomDefines { function_mirroring_output = false; function_magic_wall=false; } +class test_monitor { + w = 0.0; + h = 0.0; + currentx = 0.0; + currenty = 0.0; + centerx = 0.0; + centery = 0.0; + angle = 0; + id = 0; + constructor(id: number, w: number, h: number) { + this.currentx = 0.0; + this.currenty = 0.0; + this.angle = 0; + this.centerx = 0; + this.centery = 0; + this.id = id; + this.w = w; + this.h = h; + } +} export interface StateInterface { // Define your own store structure, using submodules if needed // example: ExampleStateInterface; @@ -77,7 +97,7 @@ export interface StateInterface { device_attribute: number; power_state: boolean; product_name: string; - + show_monitor_list:test_monitor[]; custom_defines: CustomDefines; isLedPlayer: () => boolean; @@ -340,9 +360,8 @@ export default store(function (/* { ssrContext } */) { device_attribute: 0, power_state: false, product_name: EProductNames.LED_PLAYER, - + show_monitor_list:[], custom_defines: new CustomDefines(), - isLedPlayer: () => { return ( Store.state.product_name == EProductNames.LED_PLAYER || @@ -358,6 +377,9 @@ export default store(function (/* { ssrContext } */) { setInitialized(state: StateInterface, playload?: any) { state.initialized = true; }, + setShowMonitorList(state: StateInterface, playload?: any) { + state.show_monitor_list = playload + }, updateLandspace(state: StateInterface, playload?: any) { if (typeof playload == "boolean") { state.landspace = playload; From d47ebdf1d4b2eccd305b35514a3fa771b2104d18 Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Mon, 30 Jan 2023 14:35:50 +0800 Subject: [PATCH 30/35] =?UTF-8?q?=E9=AD=94=E5=A2=99=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=9B=A0=E6=81=A2=E5=A4=8D=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E7=BC=A9=E6=94=BE=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ControlPanelDialog.vue | 69 ++++++++++++++------------- src/pages/WallPage.vue | 33 ++++++------- 2 files changed, 50 insertions(+), 52 deletions(-) diff --git a/src/components/ControlPanelDialog.vue b/src/components/ControlPanelDialog.vue index afcdb3f..052d0df 100644 --- a/src/components/ControlPanelDialog.vue +++ b/src/components/ControlPanelDialog.vue @@ -1189,42 +1189,40 @@ export default defineComponent({ test_monitor_list.value[index].active = true; }; let test_delete_flag = false; - const refresh_all=()=> { - test_monitor_wall.value = []; - current_index.value = -1; - percenter.value = last_percenter.value; - multiple_select.value = []; - multiple.value = false; - loading.value = false; - test_monitor_list.value.forEach((element) => { - element.isHide = false; - }); - last_wall.value.forEach((element) => { - element.isShow = true; - test_monitor_wall.value.push(JSON.parse(JSON.stringify(element))); - test_monitor_list.value[element.id].isHide = true; - }); - realtime_upload(); - }; + const refresh_all = () => { + test_monitor_wall.value = []; + current_index.value = -1; + percenter.value = last_percenter.value; + multiple_select.value = []; + multiple.value = false; + loading.value = false; + test_monitor_list.value.forEach((element) => { + element.isHide = false; + }); + last_wall.value.forEach((element) => { + element.isShow = true; + test_monitor_wall.value.push(JSON.parse(JSON.stringify(element))); + test_monitor_list.value[element.id].isHide = true; + }); + realtime_upload(); + }; EventBus.getInstance().on(EventNamesDefine.WindowResize, () => { const wall_dom = wall.value; - console.log(test_monitor_wall.value) if (wall_dom) { - test_monitor_wall.value.forEach((element) => { + test_monitor_wall.value.forEach(async (element) => { let teph = element.InitialH; let tepw = element.InitialW; - element.InitialH = wall_dom.offsetHeight * element.resizeh; - element.InitialW = wall_dom.offsetWidth * element.resizew; - element.h = element.InitialH * percenter.value; - element.w = element.InitialW * percenter.value; - let sizeh = element.InitialH / teph; - let sizew = element.InitialW / tepw; - element.currentx = element.currentx * sizew; - element.currenty = element.currenty * sizeh; - element.centerx = Math.floor(element.currentx + element.w / 2); - element.centery = Math.floor(element.currenty + element.h / 2); + element.InitialH = wall_dom.offsetHeight * element.resizeh; + element.InitialW = wall_dom.offsetWidth * element.resizew; + element.h = element.InitialH * percenter.value; + element.w = element.InitialW * percenter.value; + let sizeh = element.InitialH / teph; + let sizew = element.InitialW / tepw; + element.currentx = element.currentx * sizew; + element.currenty = element.currenty * sizeh; + element.centerx = Math.floor(element.currentx + element.w / 2); + element.centery = Math.floor(element.currenty + element.h / 2); }); - getpx(); } }); return { @@ -1317,6 +1315,8 @@ export default defineComponent({ extend(true, item, test_monitor_list.value[element.index]); let sizeh = wall_dom.offsetHeight / element.background_h; let sizew = wall_dom.offsetWidth / element.background_w; + item.resizew = element.w ; + item.resizeh = element.h ; item.currentx = element.lt.x * wall_dom.offsetWidth; item.currenty = element.lt.y * wall_dom.offsetHeight; percenter.value = parseFloat(element.percenter.toString()); @@ -1325,6 +1325,7 @@ export default defineComponent({ item.InitialW = element.initial_w * sizew; item.h = item.InitialH * percenter.value; item.w = item.InitialW * percenter.value; + item.centerx = Math.floor(item.currentx + item.w / 2); item.centery = Math.floor(item.currenty + item.h / 2); item.angle = element.angle; @@ -1391,9 +1392,9 @@ export default defineComponent({ }); const setMagic = await client.setMagicWallConfig(cloud_monitor_list); if (setMagic?.success) { - let monitorList:any=[] + let monitorList: any = []; test_monitor_wall.value.forEach((element, index) => { - if (element.isShow&&wall_dom) { + if (element.isShow && wall_dom) { monitorList.push({ id: element.id, currentx: element.currentx / wall_dom.offsetWidth, @@ -1401,7 +1402,7 @@ export default defineComponent({ h: element.h / wall_dom.offsetHeight, w: element.w / wall_dom.offsetWidth, angle: parseInt(element.angle.toString()), - centerx: element.centerx/ wall_dom.offsetWidth, + centerx: element.centerx / wall_dom.offsetWidth, centery: element.centery / wall_dom.offsetHeight, }); } @@ -1775,7 +1776,7 @@ export default defineComponent({ } realtime_upload(); }, - + changewidth() { let item = test_monitor_list.value[monitor_list_current_index.value]; item.w = Number(item.cmw) * lcm.value; diff --git a/src/pages/WallPage.vue b/src/pages/WallPage.vue index 8c54333..8bddfb2 100644 --- a/src/pages/WallPage.vue +++ b/src/pages/WallPage.vue @@ -28,7 +28,9 @@ item.y * ($refs.wall?.offsetHeight ?? 0) " :zIndex=" - $store.state.windows_sort.findIndex((element) => element == item.uuid) +1 + $store.state.windows_sort.findIndex( + (element) => element == item.uuid + ) + 1 " :isActive="item.uuid == $store.state.selected_window" :resizeIconSize="14" @@ -76,12 +78,7 @@ $store.state.custom_defines.function_magic_wall " > -
+
+ {{ item.id + 1 }} { show_windows_flag.value = true; }); + if (wall.value) { + let teph = wall.value?.clientHeight / offsetHeight; + let tepw = wall.value?.clientWidth / offsetWidth; + } }, 100); - }; EventBus.getInstance().on( @@ -355,7 +357,8 @@ export default defineComponent({ const last_context_menu_pos_x = ref(0); const last_context_menu_pos_y = ref(0); - + let offsetHeight = 0; + let offsetWidth = 0; const plan_running = computed( () => $store.state.current_running_plan.trim() != "" ); @@ -712,16 +715,9 @@ export default defineComponent({ } }; - const magic_height = (h: number) => { - const wall_dom = wall.value; - if (wall_dom?.parentElement) { - h = wall_dom.parentElement.offsetHeight * 0.6; - } - return 500; - }; + const show_magic_wall = async () => { - console.log( $store.state.windows_sort) // $store.state.windows_sort.findIndex((element) => element == item.uuid) let client = GlobalData.getInstance().getCurrentClient(); if (client) { @@ -731,6 +727,8 @@ export default defineComponent({ const wall_dom = wall.value; let monitorList: any = []; if (a && wall_dom) { + offsetHeight = wall_dom.clientHeight; + offsetWidth = wall_dom.clientHeight; a.forEach((element) => { let item: test_monitor = new test_monitor(0, 0, 0); item.h = element.h; @@ -1063,7 +1061,6 @@ export default defineComponent({ }; return { - magic_height, windows, wall, window_rect_edit_dialog, From 6864213d673c977bf571b54bf666797a34e0752c Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Mon, 30 Jan 2023 14:37:53 +0800 Subject: [PATCH 31/35] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=AD=94=E5=A2=99=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/en-US/index.ts | 1 + src/i18n/zh-CN/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index f1e9110..ada3458 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -403,6 +403,7 @@ export default { "Please Input Vaild Host. Example: 192.168.1.1 or 192.168.1.1:8080", "equipment data": "Equipment Data", "set magic wall":"Set Magic wall", + "update magic wall":"Update Magic Wall", "magic wall":"Magic Wall", "angle":"Angle", "topology diagram":"Topology Diagram", diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts index f038641..e2a6a65 100644 --- a/src/i18n/zh-CN/index.ts +++ b/src/i18n/zh-CN/index.ts @@ -669,6 +669,7 @@ export default { "edit user or password": "修改用户名和密码", "old password error": "旧密码不匹配", "set magic wall":"设置魔墙", + "update magic wall":"更新魔墙", "magic wall":"魔墙", "angle":"角度", "topology diagram":"拓扑图", From 9c211e13bf3e261e0b04108a69764b8bfb87387a Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Tue, 31 Jan 2023 14:17:21 +0800 Subject: [PATCH 32/35] =?UTF-8?q?=E9=AD=94=E5=A2=99=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AF=BC=E5=87=BA=E5=9D=90=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ControlPanelDialog.vue | 214 ++++++++++++++++++-------- 1 file changed, 149 insertions(+), 65 deletions(-) diff --git a/src/components/ControlPanelDialog.vue b/src/components/ControlPanelDialog.vue index 052d0df..512b3b9 100644 --- a/src/components/ControlPanelDialog.vue +++ b/src/components/ControlPanelDialog.vue @@ -553,7 +553,16 @@ - + + + { - // if (element.isShow&&wall_dom) { - // monitorList.push({ - // id: element.id, - // currentx: element.currentx / wall_dom.offsetWidth, - // currenty: element.currenty / wall_dom.offsetHeight, - // h: element.h / wall_dom.offsetHeight, - // w: element.w / wall_dom.offsetWidth, - // angle: parseInt(element.angle.toString()), - // centerx: element.centerx/ wall_dom.offsetWidth, - // centery: element.centery / wall_dom.offsetHeight, - // }); - // } - // }); - // $store.commit("setShowMonitorList", monitorList); - // } - // if(!setMagic?.success){ - // $q.notify({ - // color: "negative", - // icon: "warning", - // message: - // $t.t("update magic wall") + - // $t.t("fail") + - // "!", - // position: "top", - // timeout: 2500, - // }); - // } - // } + if (client) { + const setMagic = await client.setMagicWallConfig(cloud_monitor_list); + if (setMagic?.success) { + let monitorList:any=[] + test_monitor_wall.value.forEach((element, index) => { + if (element.isShow&&wall_dom) { + monitorList.push({ + id: element.id, + currentx: element.currentx / wall_dom.offsetWidth, + currenty: element.currenty / wall_dom.offsetHeight, + h: element.h / wall_dom.offsetHeight, + w: element.w / wall_dom.offsetWidth, + angle: parseInt(element.angle.toString()), + centerx: element.centerx/ wall_dom.offsetWidth, + centery: element.centery / wall_dom.offsetHeight, + }); + } + }); + $store.commit("setShowMonitorList", monitorList); + } + if(!setMagic?.success){ + $q.notify({ + color: "negative", + icon: "warning", + message: + $t.t("update magic wall") + + $t.t("fail") + + "!", + position: "top", + timeout: 2500, + }); + } + } }; const getpx = () => { const wall_dom = wall.value; @@ -895,26 +934,29 @@ export default defineComponent({ }); } }; - const radians = () => { - const item = test_monitor_wall.value[current_index.value]; + const radians = (item: test_monitor) => { return /*a*/ (item.angle * Math.PI) / 180; }; const calculateCoordinates = ( px: number, py: number, cx: number, - cy: number + cy: number, + item: test_monitor ) => { const x = - cx + (px - cx) * Math.cos(radians()) - (py - cy) * Math.sin(radians()); + cx + + (px - cx) * Math.cos(radians(item)) - + (py - cy) * Math.sin(radians(item)); const y = - cy + (px - cx) * Math.sin(radians()) + (py - cy) * Math.cos(radians()); + cy + + (px - cx) * Math.sin(radians(item)) + + (py - cy) * Math.cos(radians(item)); return { x, y }; }; - const four_point = () => { - const item = test_monitor_wall.value[current_index.value]; + const four_point = (item: test_monitor) => { item.centerx = parseInt(item.centerx.toString()); item.centery = parseInt(item.centery.toString()); const x2: number = item.currentx + item.w; @@ -924,25 +966,29 @@ export default defineComponent({ item.currentx, item.currenty, item.centerx, - item.centery + item.centery, + item ); const point_left_bootom = calculateCoordinates( item.currentx, y2, item.centerx, - item.centery + item.centery, + item ); const point_right_top = calculateCoordinates( x2, item.currenty, item.centerx, - item.centery + item.centery, + item ); const point_right_bottom = calculateCoordinates( x2, y2, item.centerx, - item.centery + item.centery, + item ); const point_list = [ point_left_top, @@ -976,7 +1022,7 @@ export default defineComponent({ item: test_monitor = test_monitor_wall.value[current_index.value] ) => { const wall_dom = wall.value; - const point_list = four_point(); + const point_list = four_point(item); if (wall_dom) { if (item.angle != 0 && point_list) { let minx = 0; @@ -999,7 +1045,7 @@ export default defineComponent({ item: test_monitor = test_monitor_wall.value[current_index.value] ) => { const wall_dom = wall.value; - const point_list = four_point(); + const point_list = four_point(item); if (wall_dom) { if (item.angle != 0 && point_list) { let maxx = 0; @@ -1040,7 +1086,7 @@ export default defineComponent({ item: test_monitor = test_monitor_wall.value[current_index.value] ) => { const wall_dom = wall.value; - const point_list = four_point(); + const point_list = four_point(item); if (wall_dom) { if (item.angle != 0 && point_list) { let miny = 0; @@ -1063,7 +1109,7 @@ export default defineComponent({ item: test_monitor = test_monitor_wall.value[current_index.value] ) => { const wall_dom = wall.value; - const point_list = four_point(); + const point_list = four_point(item); if (wall_dom) { if (item.angle != 0 && point_list) { let maxy = 0; @@ -1141,7 +1187,7 @@ export default defineComponent({ const exceedrange = (item: test_monitor) => { const wall_dom = wall.value; let a = 0; - const point_list = four_point(); + const point_list = four_point(item); if (wall_dom && point_list) { let maxx = 0; let maxy = 0; @@ -1212,16 +1258,16 @@ export default defineComponent({ test_monitor_wall.value.forEach(async (element) => { let teph = element.InitialH; let tepw = element.InitialW; - element.InitialH = wall_dom.offsetHeight * element.resizeh; - element.InitialW = wall_dom.offsetWidth * element.resizew; - element.h = element.InitialH * percenter.value; - element.w = element.InitialW * percenter.value; - let sizeh = element.InitialH / teph; - let sizew = element.InitialW / tepw; - element.currentx = element.currentx * sizew; - element.currenty = element.currenty * sizeh; - element.centerx = Math.floor(element.currentx + element.w / 2); - element.centery = Math.floor(element.currenty + element.h / 2); + element.InitialH = wall_dom.offsetHeight * element.resizeh; + element.InitialW = wall_dom.offsetWidth * element.resizew; + element.h = element.InitialH * percenter.value; + element.w = element.InitialW * percenter.value; + let sizeh = element.InitialH / teph; + let sizew = element.InitialW / tepw; + element.currentx = element.currentx * sizew; + element.currenty = element.currenty * sizeh; + element.centerx = Math.floor(element.currentx + element.w / 2); + element.centery = Math.floor(element.currenty + element.h / 2); }); } }); @@ -1315,8 +1361,7 @@ export default defineComponent({ extend(true, item, test_monitor_list.value[element.index]); let sizeh = wall_dom.offsetHeight / element.background_h; let sizew = wall_dom.offsetWidth / element.background_w; - item.resizew = element.w ; - item.resizeh = element.h ; + item.currentx = element.lt.x * wall_dom.offsetWidth; item.currenty = element.lt.y * wall_dom.offsetHeight; percenter.value = parseFloat(element.percenter.toString()); @@ -1325,7 +1370,8 @@ export default defineComponent({ item.InitialW = element.initial_w * sizew; item.h = item.InitialH * percenter.value; item.w = item.InitialW * percenter.value; - + item.resizew = item.InitialW / wall_dom.offsetWidth; + item.resizeh = item.InitialH / wall_dom.offsetHeight; item.centerx = Math.floor(item.currentx + item.w / 2); item.centery = Math.floor(item.currenty + item.h / 2); item.angle = element.angle; @@ -1827,6 +1873,44 @@ export default defineComponent({ }); realtime_upload(); }, + export_magic_wall() { + let export_list: any = []; + let res:string=""; + test_monitor_wall.value.forEach((ele, index) => { + const point_list = four_point(ele); + if (wall.value && point_list && ele.isShow) { + point_list?.forEach((element) => { + if(wall.value ){ + element.x =Math.round((element.x / wall.value.offsetWidth) * 3840); + element.y = Math.round((element.y / wall.value.offsetHeight) * 2160); + } + + }); + let item: exporttxt = new exporttxt(0, 0, 0, 0, {}, {}, {}, {}); + item.id = ele.id; + item.point_left_top = [point_list[0]]; + item.point_left_bootom = [point_list[1]]; + item.point_right_top = [point_list[2]]; + item.point_right_bottom = [point_list[3]]; + item.w = Math.round((ele.w / wall.value?.offsetWidth) * 3840); + item.h = Math.round((ele.h / wall.value.offsetHeight) * 2160); + item.angle = ele.angle; + export_list.push(JSON.parse(JSON.stringify(item))); + res=res+JSON.stringify(item)+"\r\n" + } + }); + + const status = exportFile("important.txt", res); + if (status === true) { + } else { + $q.notify({ + type: "warning", + message: $t.t("data export ") + $t.t("fail") + "!", + position: "top", + timeout: 1500, + }); + } + }, }; }, }); From 939ce286f3c77c3f8dffe41f53bbe898df1f89cf Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Tue, 31 Jan 2023 14:26:51 +0800 Subject: [PATCH 33/35] =?UTF-8?q?=E9=AD=94=E5=A2=99=EF=BC=9A=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=A0=BC=E5=BC=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ControlPanelDialog.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ControlPanelDialog.vue b/src/components/ControlPanelDialog.vue index 512b3b9..a401388 100644 --- a/src/components/ControlPanelDialog.vue +++ b/src/components/ControlPanelDialog.vue @@ -1899,7 +1899,7 @@ export default defineComponent({ res=res+JSON.stringify(item)+"\r\n" } }); - + res=res.replace(/\"/g,""); const status = exportFile("important.txt", res); if (status === true) { } else { From 17118497e2bfce86c551b6f2f63da9a8508c61b8 Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Tue, 31 Jan 2023 14:30:55 +0800 Subject: [PATCH 34/35] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ControlPanelDialog.vue | 4 +--- src/i18n/en-US/index.ts | 4 +++- src/i18n/zh-CN/index.ts | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/ControlPanelDialog.vue b/src/components/ControlPanelDialog.vue index a401388..ad8c2b4 100644 --- a/src/components/ControlPanelDialog.vue +++ b/src/components/ControlPanelDialog.vue @@ -557,7 +557,7 @@ { const point_list = four_point(ele); @@ -1895,7 +1894,6 @@ export default defineComponent({ item.w = Math.round((ele.w / wall.value?.offsetWidth) * 3840); item.h = Math.round((ele.h / wall.value.offsetHeight) * 2160); item.angle = ele.angle; - export_list.push(JSON.parse(JSON.stringify(item))); res=res+JSON.stringify(item)+"\r\n" } }); diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index ada3458..532da18 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -409,5 +409,7 @@ export default { "topology diagram":"Topology Diagram", "physical central location":"Central Location", "monitors list":"Monitors List", - "resize":"Resize" + "resize":"Resize", + "export magic":"Export" + }; diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts index e2a6a65..657da36 100644 --- a/src/i18n/zh-CN/index.ts +++ b/src/i18n/zh-CN/index.ts @@ -679,4 +679,5 @@ export default { "请输入合法地址. 例: 192.168.1.1 或 192.168.1.1:8080", "equipment data": "联动设备", "resize":"缩放", + "export magic":"导出" }; From 3accecee65d68660696d9f33589c2e3d9875f69c Mon Sep 17 00:00:00 2001 From: miao <2514145421@qq.com> Date: Wed, 1 Feb 2023 09:26:29 +0800 Subject: [PATCH 35/35] =?UTF-8?q?=E9=AD=94=E5=A2=99=EF=BC=9A=E5=B0=86?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=8C=89=E9=92=AE=E6=8D=A2=E6=88=90shift+s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ControlPanelDialog.vue | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/components/ControlPanelDialog.vue b/src/components/ControlPanelDialog.vue index ad8c2b4..6ec2246 100644 --- a/src/components/ControlPanelDialog.vue +++ b/src/components/ControlPanelDialog.vue @@ -57,6 +57,11 @@ //右 alignRight(); } + //保存魔墙配置 + if (evt.keyCode==83&&evt.shiftKey) { + //右 + export_magic_wall(); + } } " @keyup=" @@ -555,6 +560,7 @@ = ref(null); let current_index = ref(-1); @@ -997,6 +1001,14 @@ export default defineComponent({ point_right_bottom, ]; return point_list; + }else{ + const point_list =[ + {x:item.currentx,y:item.currenty},//左上 + {x:x2,y:item.currenty},//右上 + {x:item.currentx,y:y2},//左下 + {x:x2,y:y2}//右下 + ] + return point_list; } }; let offsetHeight = ref(0.0); @@ -1272,6 +1284,7 @@ export default defineComponent({ } }); return { + magic_isbutton, refresh_all, getpx, lcm, @@ -1361,7 +1374,6 @@ export default defineComponent({ extend(true, item, test_monitor_list.value[element.index]); let sizeh = wall_dom.offsetHeight / element.background_h; let sizew = wall_dom.offsetWidth / element.background_w; - item.currentx = element.lt.x * wall_dom.offsetWidth; item.currenty = element.lt.y * wall_dom.offsetHeight; percenter.value = parseFloat(element.percenter.toString()); @@ -1622,6 +1634,7 @@ export default defineComponent({ test_monitor_wall.value[index].isShow = true; realtime_upload(); }, + //cache和与主存间的地址映射由硬件自动完成 closeAllWindows() { current_index.value = -1; test_monitor_wall.value.forEach((ele) => { @@ -1898,7 +1911,7 @@ export default defineComponent({ } }); res=res.replace(/\"/g,""); - const status = exportFile("important.txt", res); + const status = exportFile("magic_wall.txt", res); if (status === true) { } else { $q.notify({