Merge branch 'zyl' of http://xny.yj-3d.com:3000/zhouyulong/electron-4 into zyl
@ -1,6 +1,10 @@
|
|||||||
server:
|
server:
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
port: 8848
|
port: 8848
|
||||||
|
path: C:\Users\MSI\AppData\Roaming\dzsp_shijingjun_offline_Y_save
|
||||||
|
poi:
|
||||||
|
global:
|
||||||
|
enabled: false
|
||||||
sdk:
|
sdk:
|
||||||
port: 8888
|
port: 8888
|
||||||
spring:
|
spring:
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
41b/ujShRZRf9Aa433FD3uyIZuxWSSqXWXlc2dyQfJ75ED0HNbadcdsPF5CaMuJ624E+iLBfS14muki3Kp1qv3N0KPVdc0TjJDyrO+AVfwFghRHbXEWYEGb3GpmVU0MwclqNNggKfnTvj0gDIpFBNl/nxMZKwYXbYk8nqd3yUDfwLryTr1ScTPGegLiv1C+r1SDxtenx4d2fxqS6FkGbV5TA9+UoajQ1PHwDUdI7SfpxjvK4tQscOcu0R0wLgUa3LypkZtybW+yeNEhnp/jeYw==
|
41b/ujShRZRf9Aa433FD3uyIZuxWSSqXWXlc2dyQfJ75ED0HNbadcdsPF5CaMuJ624E+iLBfS14muki3Kp1qv3N0KPVdc0TjJDyrO+AVfwE2pkhuoGoZ8sNGSUSrom2NhRIwJNl4SNhqGkxKvDJhRhWfxw6LHS3T/4NDVmw/KlXwLryTr1ScTPGegLiv1C+r0BN58Qcbdy/IN4J0/xuadZTA9+UoajQ1PHwDUdI7SfpTyz/mXYghVpbQcW8OYTHqLypkZtybW+yeNEhnp/jeYw==
|
||||||
@ -13,6 +13,8 @@ const http = require("http");
|
|||||||
const yaml = require("js-yaml");
|
const yaml = require("js-yaml");
|
||||||
let Store = require('electron-store')
|
let Store = require('electron-store')
|
||||||
Store.initRenderer();
|
Store.initRenderer();
|
||||||
|
const store = new Store()
|
||||||
|
|
||||||
|
|
||||||
process.on('unhandledRejection', (reason) => {
|
process.on('unhandledRejection', (reason) => {
|
||||||
console.error('主进程异步异常:', reason);
|
console.error('主进程异步异常:', reason);
|
||||||
@ -128,6 +130,10 @@ function createWindow(): void {
|
|||||||
})
|
})
|
||||||
let ymlBatPath = process.env.NODE_ENV === 'development' ? path.resolve(app.getAppPath(), 'resources', 'java', 'app', 'application.yml') : path.join(process.resourcesPath, 'app.asar.unpacked', 'resources', 'java', 'app', 'application.yml')
|
let ymlBatPath = process.env.NODE_ENV === 'development' ? path.resolve(app.getAppPath(), 'resources', 'java', 'app', 'application.yml') : path.join(process.resourcesPath, 'app.asar.unpacked', 'resources', 'java', 'app', 'application.yml')
|
||||||
ymlBatPath = process.platform === 'win32' ? ymlBatPath.replace(/^(\w:)/, '/$1') : ymlBatPath
|
ymlBatPath = process.platform === 'win32' ? ymlBatPath.replace(/^(\w:)/, '/$1') : ymlBatPath
|
||||||
|
let ymlPath = ymlBatPath.substring(1, 200)
|
||||||
|
const ymlContent = yaml.load(fs.readFileSync(ymlPath, 'utf8'));
|
||||||
|
ymlContent.server.path = path.dirname(store.path)
|
||||||
|
fs.writeFileSync(ymlPath, yaml.dump(ymlContent));
|
||||||
ipcMain.on("getIniConfig", (event, option) => {
|
ipcMain.on("getIniConfig", (event, option) => {
|
||||||
let ymlPath = ymlBatPath.substring(1, 200)
|
let ymlPath = ymlBatPath.substring(1, 200)
|
||||||
console.log("iniPath", ymlPath);
|
console.log("iniPath", ymlPath);
|
||||||
@ -415,8 +421,6 @@ function createWindow(): void {
|
|||||||
"1300",
|
"1300",
|
||||||
"-y",
|
"-y",
|
||||||
"730",
|
"730",
|
||||||
"-rtsp_transport",
|
|
||||||
"tcp",
|
|
||||||
obj.url,
|
obj.url,
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@ -428,6 +432,9 @@ function createWindow(): void {
|
|||||||
console.log("out");
|
console.log("out");
|
||||||
console.log(err);
|
console.log(err);
|
||||||
e.sender.send("openFFPlayOut", err);
|
e.sender.send("openFFPlayOut", err);
|
||||||
|
if (obj.id) {
|
||||||
|
e.sender.send("openFFPlayOut_" + obj.id, err, obj.id);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/* .on("stdout", function(err, m) {
|
/* .on("stdout", function(err, m) {
|
||||||
@ -502,7 +509,7 @@ function windowAllClosed() {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (isQuitting) {
|
if (isQuitting) {
|
||||||
console.log('清理脚本执行超时,强制退出');
|
console.log('清理脚本执行超时,强制退出');
|
||||||
cleanupProcess.kill(); // 终止卡住的脚本
|
// cleanupProcess.kill(); // 终止卡住的脚本
|
||||||
forceQuit();
|
forceQuit();
|
||||||
}
|
}
|
||||||
}, 3000); // 3秒超时
|
}, 3000); // 3秒超时
|
||||||
|
|||||||
1
src/renderer/components.d.ts
vendored
@ -26,7 +26,6 @@ declare module 'vue' {
|
|||||||
ElOption: typeof import('element-plus/es')['ElOption']
|
ElOption: typeof import('element-plus/es')['ElOption']
|
||||||
ElPagination: typeof import('element-plus/es')['ElPagination']
|
ElPagination: typeof import('element-plus/es')['ElPagination']
|
||||||
ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
|
ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
|
||||||
ElPopover: typeof import('element-plus/es')['ElPopover']
|
|
||||||
ElRow: typeof import('element-plus/es')['ElRow']
|
ElRow: typeof import('element-plus/es')['ElRow']
|
||||||
ElSelect: typeof import('element-plus/es')['ElSelect']
|
ElSelect: typeof import('element-plus/es')['ElSelect']
|
||||||
ElSlider: typeof import('element-plus/es')['ElSlider']
|
ElSlider: typeof import('element-plus/es')['ElSlider']
|
||||||
|
|||||||
4
src/renderer/public/sdk/YJEarth.min.js
vendored
@ -297,11 +297,6 @@
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content .row .input-select-unit-box,
|
|
||||||
.YJ-custom-base-dialog>.content .row .input-select-fit-unit-box {
|
|
||||||
flex: 0 0 270px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content .row:last-child {
|
.YJ-custom-base-dialog>.content .row:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
@ -424,7 +419,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content .attribute .attribute-content-link .link_add_btn,
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-link .link_add_btn,
|
||||||
.YJ-custom-base-dialog>.content .attribute .attribute-content-vr .vr_add_btn {
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-vr .vr_add_btn,
|
||||||
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-rtmp .rtmp_add_btn {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
@ -436,12 +432,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content .attribute .attribute-content-link .link_add,
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-link .link_add,
|
||||||
.YJ-custom-base-dialog>.content .attribute .attribute-content-vr .vr_add {
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-vr .vr_add,
|
||||||
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-rtmp .rtmp_add {
|
||||||
padding-right: 30px;
|
padding-right: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content .attribute .attribute-content-link .tr .td:last-child button:first-child,
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-link .tr .td:last-child button:first-child,
|
||||||
.YJ-custom-base-dialog>.content .attribute .attribute-content-vr .tr .td:last-child button:first-child {
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-vr .tr .td:last-child button:first-child,
|
||||||
|
.YJ-custom-base-dialog>.content .attribute .attribute-content-rtmp .tr .td:last-child button:first-child {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -531,7 +529,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .table-body,
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .table-body,
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .table-body {
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .table-body,
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .table-body {
|
||||||
max-height: 172px;
|
max-height: 172px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -816,8 +815,8 @@
|
|||||||
|
|
||||||
.fly-roam>.content .table .tr .th:nth-child(2),
|
.fly-roam>.content .table .tr .th:nth-child(2),
|
||||||
.fly-roam>.content .table .tr .td:nth-child(2) {
|
.fly-roam>.content .table .tr .td:nth-child(2) {
|
||||||
flex: 0 0 100px;
|
flex: 0 0 180px;
|
||||||
width: 100px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fly-roam>.content .table .tr .th:last-child,
|
.fly-roam>.content .table .tr .th:last-child,
|
||||||
@ -2514,7 +2513,9 @@
|
|||||||
.YJ-custom-base-dialog.polygon>.content .attribute-content-link .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.polygon>.content .attribute-content-link .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.polygon>.content .attribute-content-link .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.polygon>.content .attribute-content-link .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.polygon>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.polygon>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.polygon>.content .attribute-content-vr .table .tr .td:nth-child(3) {
|
.YJ-custom-base-dialog.polygon>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.polygon>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.polygon>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
|
||||||
flex: 0 0 165px;
|
flex: 0 0 165px;
|
||||||
width: 165px;
|
width: 165px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@ -2596,7 +2597,9 @@
|
|||||||
.YJ-custom-base-dialog.assemble>.content .attribute-content-link .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.assemble>.content .attribute-content-link .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.assemble>.content .attribute-content-link .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.assemble>.content .attribute-content-link .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.assemble>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.assemble>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.assemble>.content .attribute-content-vr .table .tr .td:nth-child(3) {
|
.YJ-custom-base-dialog.assemble>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.assemble>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.assemble>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
|
||||||
flex: 0 0 165px;
|
flex: 0 0 165px;
|
||||||
width: 165px;
|
width: 165px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@ -2643,14 +2646,20 @@
|
|||||||
.YJ-custom-base-dialog.circle>.content .attribute-content-link .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.circle>.content .attribute-content-link .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.circle>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.circle>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.circle>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.circle>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.circle>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.circle>.content .attribute-content-rtmp .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-link .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-link .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-link .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-link .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.attackArrow>.content .attribute-content-rtmp .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-link .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-link .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-link .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-link .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-vr .table .tr .td:nth-child(3) {
|
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
|
||||||
flex: 0 0 165px;
|
flex: 0 0 165px;
|
||||||
width: 165px;
|
width: 165px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@ -2946,8 +2955,9 @@
|
|||||||
.YJ-custom-base-dialog.polyline>.content input.input-text {
|
.YJ-custom-base-dialog.polyline>.content input.input-text {
|
||||||
background-color: rgba(0, 0, 0, 0.5) !important;
|
background-color: rgba(0, 0, 0, 0.5) !important;
|
||||||
border-radius: unset !important;
|
border-radius: unset !important;
|
||||||
border-top: 1px solid rgba(var(--color-base1), 0.5) !important;
|
border: none;
|
||||||
border-bottom: 1px solid rgba(var(--color-base1), 0.5) !important;
|
border-top: 1px solid rgba(var(--color-base1), 0.7) !important;
|
||||||
|
border-bottom: 1px solid rgba(var(--color-base1), 0.7) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist input {
|
.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist input {
|
||||||
@ -3133,7 +3143,9 @@
|
|||||||
.YJ-custom-base-dialog.model>.content .attribute-content-link .table .tr .th:nth-child(2),
|
.YJ-custom-base-dialog.model>.content .attribute-content-link .table .tr .th:nth-child(2),
|
||||||
.YJ-custom-base-dialog.model>.content .attribute-content-link .table .tr .td:nth-child(2),
|
.YJ-custom-base-dialog.model>.content .attribute-content-link .table .tr .td:nth-child(2),
|
||||||
.YJ-custom-base-dialog.model>.content .attribute-content-vr .table .tr .th:nth-child(2),
|
.YJ-custom-base-dialog.model>.content .attribute-content-vr .table .tr .th:nth-child(2),
|
||||||
.YJ-custom-base-dialog.model>.content .attribute-content-vr .table .tr .td:nth-child(2) {
|
.YJ-custom-base-dialog.model>.content .attribute-content-vr .table .tr .td:nth-child(2),
|
||||||
|
.YJ-custom-base-dialog.model>.content .attribute-content-rtmp .table .tr .th:nth-child(2),
|
||||||
|
.YJ-custom-base-dialog.model>.content .attribute-content-rtmp .table .tr .td:nth-child(2) {
|
||||||
flex: 0 0 210px;
|
flex: 0 0 210px;
|
||||||
width: 210px;
|
width: 210px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@ -3461,7 +3473,7 @@
|
|||||||
|
|
||||||
.YJ-custom-checkbox-left:checked::after,
|
.YJ-custom-checkbox-left:checked::after,
|
||||||
.YJ-custom-checkbox-right:checked::after {
|
.YJ-custom-checkbox-right:checked::after {
|
||||||
content: "\2714";
|
content: "✔";
|
||||||
background-color: rgba(var(--color-base1), 1);
|
background-color: rgba(var(--color-base1), 1);
|
||||||
color: rgba(var(--color-sdk-auxiliary), 1);
|
color: rgba(var(--color-sdk-auxiliary), 1);
|
||||||
width: 25px;
|
width: 25px;
|
||||||
@ -3496,7 +3508,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content input.YJ-custom-checkbox[type=checkbox]:checked::after {
|
.YJ-custom-base-dialog>.content input.YJ-custom-checkbox[type=checkbox]:checked::after {
|
||||||
content: "\2714";
|
content: "✔";
|
||||||
background-color: rgba(var(--color-base1), 1);
|
background-color: rgba(var(--color-base1), 1);
|
||||||
color: rgba(var(--color-sdk-auxiliary), 1);
|
color: rgba(var(--color-sdk-auxiliary), 1);
|
||||||
width: 12px;
|
width: 12px;
|
||||||
|
|||||||
@ -1,8 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="12" height="12" viewBox="0 0 12 12" >
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.65869140625" height="16" viewBox="0 0 15.65869140625 16" fill="none"><path d="M14.9742 4.33334L0.682905 4.33334C0.308133 4.33334 0 4.03334 0 3.66666C0 3.3 0.308133 3 0.682905 3L14.9742 3C15.349 3 15.6571 3.3 15.6571 3.66666C15.6571 4.03334 15.349 4.33334 14.9742 4.33334Z" fill="#FFFFFF" ></path><path d="M6.02972 3.48334C6.01307 3.38334 6.00474 3.275 6.00474 3.16666C6.00474 2.15834 6.82924 1.33334 7.83697 1.33334C8.84469 1.33334 9.66919 2.15834 9.66919 3.16666C9.66919 3.275 9.66086 3.375 9.64421 3.48334L10.9851 3.48334C10.9934 3.38334 11.0017 3.275 11.0017 3.16666C11.0017 1.41666 9.5859 0 7.83697 0C6.08803 0 4.67223 1.41666 4.67223 3.16666C4.67223 3.275 4.68054 3.375 4.68888 3.48334L6.02972 3.48334ZM12.4925 3.64166L12.4925 14.6667L3.16481 14.6667L3.16481 3.64166L1.83228 3.64166L1.83228 14.9583C1.83228 15.5333 2.29867 16 2.87332 16L12.784 16C13.3586 16 13.825 15.5333 13.825 14.9583L13.825 3.64166L12.4925 3.64166Z" fill="#FFFFFF" ></path><path d="M5.50491 12.4834L5.48826 12.4834C5.12182 12.4834 4.83032 12.1917 4.83032 11.8251L4.83032 7.14172C4.83032 6.77506 5.12182 6.4834 5.48826 6.4834L5.50491 6.4834C5.87137 6.4834 6.16285 6.77506 6.16285 7.14172L6.16285 11.8334C6.16285 12.1917 5.87137 12.4834 5.50491 12.4834ZM7.83683 12.4834L7.82018 12.4834C7.45373 12.4834 7.16224 12.1917 7.16224 11.8251L7.16224 7.14172C7.16224 6.77506 7.45373 6.4834 7.82018 6.4834L7.83683 6.4834C8.20327 6.4834 8.49477 6.77506 8.49477 7.14172L8.49477 11.8334C8.49477 12.1917 8.20327 12.4834 7.83683 12.4834ZM10.1688 12.4834L10.1521 12.4834C9.78565 12.4834 9.49417 12.1917 9.49417 11.8251L9.49417 7.14172C9.49417 6.77506 9.78565 6.4834 10.1521 6.4834L10.1688 6.4834C10.5352 6.4834 10.8267 6.77506 10.8267 7.14172L10.8267 11.8334C10.8267 12.1917 10.5352 12.4834 10.1688 12.4834Z" fill="#FFFFFF" ></path></svg>
|
||||||
<path d="M11.3166 3.25L0.598117 3.25C0.317037 3.25 0.0859375 3.025 0.0859375 2.74999C0.0859375 2.475 0.317037 2.25 0.598117 2.25L11.3166 2.25C11.5977 2.25 11.8288 2.475 11.8288 2.74999C11.8288 3.025 11.5977 3.25 11.3166 3.25Z" >
|
|
||||||
</path>
|
|
||||||
<path d="M4.60805 2.6125C4.59556 2.5375 4.58931 2.45625 4.58931 2.37499C4.58931 1.61875 5.20768 1 5.96348 1C6.71927 1 7.33765 1.61875 7.33765 2.37499C7.33765 2.45625 7.3314 2.53125 7.31891 2.6125L8.32454 2.6125C8.3308 2.5375 8.33703 2.45625 8.33703 2.37499C8.33703 1.06249 7.27518 0 5.96348 0C4.65178 0 3.58993 1.06249 3.58993 2.37499C3.58993 2.45625 3.59616 2.53125 3.60241 2.6125L4.60805 2.6125ZM9.45511 2.73124L9.45511 11L2.45936 11L2.45936 2.73124L1.45996 2.73124L1.45996 11.2188C1.45996 11.65 1.80976 12 2.24075 12L9.67372 12C10.1047 12 10.4545 11.65 10.4545 11.2188L10.4545 2.73124L9.45511 2.73124Z" >
|
|
||||||
</path>
|
|
||||||
<path d="M4.21395 9.36328L4.20146 9.36328C3.92663 9.36328 3.70801 9.14452 3.70801 8.86952L3.70801 5.35702C3.70801 5.08203 3.92663 4.86328 4.20146 4.86328L4.21395 4.86328C4.48879 4.86328 4.70741 5.08203 4.70741 5.35702L4.70741 8.87578C4.70741 9.14452 4.48879 9.36328 4.21395 9.36328ZM5.96289 9.36328L5.9504 9.36328C5.67556 9.36328 5.45695 9.14452 5.45695 8.86952L5.45695 5.35702C5.45695 5.08203 5.67556 4.86328 5.9504 4.86328L5.96289 4.86328C6.23772 4.86328 6.45635 5.08203 6.45635 5.35702L6.45635 8.87578C6.45635 9.14452 6.23772 9.36328 5.96289 9.36328ZM7.71183 9.36328L7.69933 9.36328C7.4245 9.36328 7.20589 9.14452 7.20589 8.86952L7.20589 5.35702C7.20589 5.08203 7.4245 4.86328 7.69933 4.86328L7.71183 4.86328C7.98666 4.86328 8.20527 5.08203 8.20527 5.35702L8.20527 8.87578C8.20527 9.14452 7.98666 9.36328 7.71183 9.36328Z" >
|
|
||||||
</path>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.9 KiB |
1
src/renderer/public/sdk/custom/img/icon-resetView.svg
Normal file
|
After Width: | Height: | Size: 31 KiB |
@ -152,14 +152,14 @@ export default {
|
|||||||
},
|
},
|
||||||
system: {
|
system: {
|
||||||
systemTitle: '系统面板',
|
systemTitle: '系统面板',
|
||||||
authorize: '授权信息',
|
authorize: '授权管理',
|
||||||
setting: '系统设置',
|
setting: '系统管理',
|
||||||
project: '工程管理',
|
project: '工程管理',
|
||||||
device: '设备管理',
|
device: '设备管理',
|
||||||
materials: '物资管理',
|
materials: '物资管理',
|
||||||
modelManage: '模型管理',
|
modelManage: '模型管理',
|
||||||
graphLabelManage: '军标管理',
|
|
||||||
photoManage: '图标管理',
|
photoManage: '图标管理',
|
||||||
|
graphLabelManage: '军标管理',
|
||||||
version: '版本信息'
|
version: '版本信息'
|
||||||
},
|
},
|
||||||
auths: {
|
auths: {
|
||||||
@ -259,6 +259,7 @@ export default {
|
|||||||
ISC摄像头: 'ISC摄像头',
|
ISC摄像头: 'ISC摄像头',
|
||||||
传感器: '传感器',
|
传感器: '传感器',
|
||||||
全景图: '全景图',
|
全景图: '全景图',
|
||||||
|
rtmp: 'rtmp',
|
||||||
物资: '物资',
|
物资: '物资',
|
||||||
编辑内容: '编辑内容',
|
编辑内容: '编辑内容',
|
||||||
打开文本编辑器: '打开文本编辑器',
|
打开文本编辑器: '打开文本编辑器',
|
||||||
|
|||||||
@ -258,6 +258,7 @@ export default {
|
|||||||
ISC摄像头: 'ISC Camera',
|
ISC摄像头: 'ISC Camera',
|
||||||
传感器: 'Sensor',
|
传感器: 'Sensor',
|
||||||
全景图: 'Panorama photo',
|
全景图: 'Panorama photo',
|
||||||
|
rtmp: 'rtmp',
|
||||||
物资: 'Materials',
|
物资: 'Materials',
|
||||||
编辑内容: 'Edit content',
|
编辑内容: 'Edit content',
|
||||||
打开文本编辑器: 'Open the editor',
|
打开文本编辑器: 'Open the editor',
|
||||||
|
|||||||
@ -257,6 +257,7 @@ export default {
|
|||||||
ISC摄像头: 'ISC攝像頭',
|
ISC摄像头: 'ISC攝像頭',
|
||||||
传感器: '傳感器',
|
传感器: '傳感器',
|
||||||
全景图: '全景圖',
|
全景图: '全景圖',
|
||||||
|
rtmp: 'rtmp',
|
||||||
物资: '物資',
|
物资: '物資',
|
||||||
编辑内容: '編輯內容',
|
编辑内容: '編輯內容',
|
||||||
打开文本编辑器: '打開文本編輯器',
|
打开文本编辑器: '打開文本編輯器',
|
||||||
|
|||||||
@ -415,11 +415,11 @@ img {
|
|||||||
.ztree li span.button.chk {
|
.ztree li span.button.chk {
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
.ztree li span.button.roots_open, .ztree li span.button.bottom_open, .ztree li span.button.center_open {
|
.ztree li span.button.root_open, .ztree li span.button.roots_open, .ztree li span.button.bottom_open, .ztree li span.button.center_open {
|
||||||
background: url(../images/tree/roots-open.png) 0 0 no-repeat;
|
background: url(../images/tree/roots-open.png) 0 0 no-repeat;
|
||||||
background-position: center !important;
|
background-position: center !important;
|
||||||
}
|
}
|
||||||
.ztree li span.button.roots_close, .ztree li span.button.bottom_close, .ztree li span.button.center_close{
|
.ztree li span.button.root_close, .ztree li span.button.roots_close, .ztree li span.button.bottom_close, .ztree li span.button.center_close{
|
||||||
background: url(../images/tree/roots-close.png) 0 0 no-repeat;
|
background: url(../images/tree/roots-close.png) 0 0 no-repeat;
|
||||||
background-position: center !important;
|
background-position: center !important;
|
||||||
}
|
}
|
||||||
@ -605,6 +605,22 @@ img {
|
|||||||
bottom: 126px !important;
|
bottom: 126px !important;
|
||||||
right: 16px !important;
|
right: 16px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.YJ-custom-base-dialog>.content .row .input-select-unit-box {
|
||||||
|
.el-select {
|
||||||
|
.el-select__wrapper {
|
||||||
|
border: 1px solid rgba(var(--color-base1), 0.5);
|
||||||
|
}
|
||||||
|
&:nth-of-type(1) .el-select__wrapper {
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
&:nth-of-type(2) .el-select__wrapper {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.custom-slider-tooltip {
|
.custom-slider-tooltip {
|
||||||
|
|||||||
@ -19,6 +19,9 @@ export const addMapSource = async ({type, id, sourceName = '未命名对象', op
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete options.host
|
delete options.host
|
||||||
|
if(options.attribute && options.attribute.rtmp) {
|
||||||
|
delete options.attribute.rtmp
|
||||||
|
}
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'rendezvous':
|
case 'rendezvous':
|
||||||
case 'attackArrow':
|
case 'attackArrow':
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="boxBody">
|
<div class="boxBody">
|
||||||
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="80px"
|
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="80px"
|
||||||
@keyup.enter.native="submitForm(ruleForm)">
|
@keyup.enter.native="submitForm(ruleForm)" @submit.native.prevent>
|
||||||
<el-form-item label="名称:" prop="sourceName">
|
<el-form-item label="名称:" prop="sourceName">
|
||||||
<!-- @input="removeSpaces" -->
|
<!-- @input="removeSpaces" -->
|
||||||
<el-input v-model.trim="form.sourceName" placeholder="图层文件夹"></el-input>
|
<el-input v-model.trim="form.sourceName" placeholder="图层文件夹"></el-input>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="boxBody">
|
<div class="boxBody">
|
||||||
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="80px"
|
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="80px"
|
||||||
@keyup.enter.native="submitForm(ruleForm)">
|
@keyup.enter.native="submitForm(ruleForm)" @submit.native.prevent>
|
||||||
<el-form-item label="名称:" prop="sourceName">
|
<el-form-item label="名称:" prop="sourceName">
|
||||||
<!-- @input="removeSpaces" -->
|
<!-- @input="removeSpaces" -->
|
||||||
<el-input v-model.trim="form.sourceName" placeholder="节点名称"></el-input>
|
<el-input v-model.trim="form.sourceName" placeholder="节点名称"></el-input>
|
||||||
@ -49,9 +49,11 @@ const removeSpaces = (value: string) => {
|
|||||||
}
|
}
|
||||||
const close = () => {
|
const close = () => {
|
||||||
$changeComponentPop('.editdirectoryBox', false)
|
$changeComponentPop('.editdirectoryBox', false)
|
||||||
|
setTimeout(() => {
|
||||||
sourceId.value = ''
|
sourceId.value = ''
|
||||||
form.sourceName = ''
|
form.sourceName = ''
|
||||||
ruleForm.value?.resetFields()
|
ruleForm.value?.resetFields()
|
||||||
|
}, 200);
|
||||||
}
|
}
|
||||||
const submitForm = async (formEl: FormInstance | undefined) => {
|
const submitForm = async (formEl: FormInstance | undefined) => {
|
||||||
if (!formEl) return
|
if (!formEl) return
|
||||||
@ -69,6 +71,7 @@ const add = throttle(async () => {
|
|||||||
sourceName: form.sourceName
|
sourceName: form.sourceName
|
||||||
})
|
})
|
||||||
cusUpdateNode({ id: sourceId.value, sourceName: form.sourceName, params: undefined })
|
cusUpdateNode({ id: sourceId.value, sourceName: form.sourceName, params: undefined })
|
||||||
|
close()
|
||||||
// console.log(res)
|
// console.log(res)
|
||||||
}, 3000)
|
}, 3000)
|
||||||
// //上传或修改树的层级
|
// //上传或修改树的层级
|
||||||
|
|||||||
1
src/renderer/src/icons/svg/close.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 10 10" fill="none"><path d="M5.69937 5L9.80167 0.897704C10.0017 0.697704 10 0.59666 10 0.39666C9.9 0.19666 9.80334 0.1 9.60334 0C9.40334 0 9.3023 -0.00167015 9.1023 0.19833L5 4.30063L0.897704 0.19833C0.797704 0.0983299 0.701044 0 0.501044 0C0.401044 0 0.29833 0.0983299 0.19833 0.19833C0.0983299 0.29833 0 0.401044 0 0.501044C0 0.701044 0.0983299 0.797704 0.19833 0.897704L4.30063 5L0.19833 9.1023C-0.00167015 9.3023 0 9.40334 0 9.60334C0.1 9.80334 0.19666 9.9 0.39666 10C0.59666 10 0.697704 10.0017 0.897704 9.80167L5 5.69937L9.1023 9.80167C9.2023 9.90167 9.29896 10 9.49896 10C9.59896 10 9.70167 9.90167 9.80167 9.80167C9.90167 9.70167 10 9.59896 10 9.49896C10 9.29896 9.90167 9.2023 9.80167 9.1023L5.69937 5Z" fill="#FFFFFF" ></path></svg>
|
||||||
|
After Width: | Height: | Size: 863 B |
1
src/renderer/src/icons/svg/crossPoint.svg
Normal file
|
After Width: | Height: | Size: 36 KiB |
1
src/renderer/src/icons/svg/posiFly.svg
Normal file
|
After Width: | Height: | Size: 20 KiB |
1
src/renderer/src/icons/svg/video.svg
Normal file
|
After Width: | Height: | Size: 16 KiB |
@ -28,7 +28,7 @@ export const sysChange = async (eventBus) => {
|
|||||||
let coor = systemSetting.coordinate ? systemSetting.coordinate : 'EPSG:4326'
|
let coor = systemSetting.coordinate ? systemSetting.coordinate : 'EPSG:4326'
|
||||||
YJ.Global.setCoordinateSystem(window.earth, coor)
|
YJ.Global.setCoordinateSystem(window.earth, coor)
|
||||||
//设置坐标格式
|
//设置坐标格式
|
||||||
// YJ.Global.setDMS(window.earth, systemSetting.positionType)
|
YJ.Global.setDMS(window.earth, systemSetting.positionType)
|
||||||
|
|
||||||
//比例尺
|
//比例尺
|
||||||
await YJ.Global.SheetIndexStatusSwitch(window.earth, systemSetting.sheetIndexStatusSwitch)
|
await YJ.Global.SheetIndexStatusSwitch(window.earth, systemSetting.sheetIndexStatusSwitch)
|
||||||
|
|||||||
@ -194,6 +194,34 @@ const bottomMenuList = ref([
|
|||||||
}
|
}
|
||||||
let id = new YJ.Tools().randomString()
|
let id = new YJ.Tools().randomString()
|
||||||
let name = t(`default.point`)
|
let name = t(`default.point`)
|
||||||
|
let defaultStyle = (JSON.parse(localStorage.getItem('defaultStyle') || '{}').point) || {}
|
||||||
|
if(!defaultStyle) {
|
||||||
|
defaultStyle = {}
|
||||||
|
}
|
||||||
|
if(!defaultStyle.billboard) {
|
||||||
|
defaultStyle.billboard = {}
|
||||||
|
}
|
||||||
|
if(!defaultStyle.label) {
|
||||||
|
defaultStyle.label = {}
|
||||||
|
}
|
||||||
|
if(defaultStyle.billboard.image) {
|
||||||
|
try {
|
||||||
|
let urlObject = new URL(defaultStyle.billboardimage)
|
||||||
|
let pathname = urlObject.pathname
|
||||||
|
let folderName = pathname.split('/')[1]
|
||||||
|
if(folderName === 'iconLibrary') {
|
||||||
|
let ip = localStorage.getItem('ip') || ''
|
||||||
|
let ipObject = new URL(ip)
|
||||||
|
urlObject.port = ipObject.port
|
||||||
|
defaultStyle.billboard.image = urlObject.href
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
urlObject.port = availablePort.value+''
|
||||||
|
defaultStyle.billboard.image = urlObject.href
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
}
|
||||||
|
}
|
||||||
await addMapSource({
|
await addMapSource({
|
||||||
type: 'point',
|
type: 'point',
|
||||||
id: id,
|
id: id,
|
||||||
@ -203,13 +231,19 @@ const bottomMenuList = ref([
|
|||||||
name: name,
|
name: name,
|
||||||
position: position,
|
position: position,
|
||||||
billboard: {
|
billboard: {
|
||||||
show: true,
|
show: defaultStyle.billboard.show || true,
|
||||||
image:
|
image:
|
||||||
YJ.Global.getBillboardDefaultUrl() ||
|
defaultStyle.billboard.image || "http://localhost:" +
|
||||||
"http://localhost:" +
|
|
||||||
availablePort.value +
|
availablePort.value +
|
||||||
"/" +
|
"/" +
|
||||||
"GEMarker1/A-ablu-blank.png",
|
"GEMarker1/A-ablu-blank.png",
|
||||||
|
scale: defaultStyle.billboard.scale || 3,
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
show: defaultStyle.show || true,
|
||||||
|
color: defaultStyle.label.color,
|
||||||
|
fontFamily: defaultStyle.label.fontFamily,
|
||||||
|
fontSize: defaultStyle.label.fontSize,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -232,6 +266,7 @@ const bottomMenuList = ref([
|
|||||||
}
|
}
|
||||||
let id = new YJ.Tools().randomString()
|
let id = new YJ.Tools().randomString()
|
||||||
let name = t(`default.line`)
|
let name = t(`default.line`)
|
||||||
|
let defaultStyle = (JSON.parse(localStorage.getItem('defaultStyle') || '{}').line) || {}
|
||||||
await addMapSource({
|
await addMapSource({
|
||||||
type: 'line',
|
type: 'line',
|
||||||
id: id,
|
id: id,
|
||||||
@ -239,7 +274,18 @@ const bottomMenuList = ref([
|
|||||||
opt: {
|
opt: {
|
||||||
id: id,
|
id: id,
|
||||||
name: name,
|
name: name,
|
||||||
positions: positions
|
positions: positions,
|
||||||
|
color: defaultStyle.color,
|
||||||
|
width: defaultStyle.width,
|
||||||
|
type: defaultStyle.type,
|
||||||
|
noseToTail: defaultStyle.noseToTail,
|
||||||
|
smooth: defaultStyle.smooth,
|
||||||
|
extend: defaultStyle.extend,
|
||||||
|
extendWidth: defaultStyle.extendWidth,
|
||||||
|
extendColor: defaultStyle.extendColor,
|
||||||
|
rotate: defaultStyle.rotate,
|
||||||
|
speed: defaultStyle.speed,
|
||||||
|
space: defaultStyle.space,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -259,6 +305,7 @@ const bottomMenuList = ref([
|
|||||||
}
|
}
|
||||||
let id = new YJ.Tools().randomString()
|
let id = new YJ.Tools().randomString()
|
||||||
let name = t(`default.curve`)
|
let name = t(`default.curve`)
|
||||||
|
let defaultStyle = (JSON.parse(localStorage.getItem('defaultStyle') || '{}').curve) || {}
|
||||||
await addMapSource({
|
await addMapSource({
|
||||||
type: 'curve',
|
type: 'curve',
|
||||||
id: id,
|
id: id,
|
||||||
@ -266,7 +313,17 @@ const bottomMenuList = ref([
|
|||||||
opt: {
|
opt: {
|
||||||
id: id,
|
id: id,
|
||||||
name: name,
|
name: name,
|
||||||
positions: positions
|
positions: positions,
|
||||||
|
color: defaultStyle.color,
|
||||||
|
width: defaultStyle.width,
|
||||||
|
type: defaultStyle.type,
|
||||||
|
noseToTail: defaultStyle.noseToTail,
|
||||||
|
extend: defaultStyle.extend,
|
||||||
|
extendWidth: defaultStyle.extendWidth,
|
||||||
|
extendColor: defaultStyle.extendColor,
|
||||||
|
rotate: defaultStyle.rotate,
|
||||||
|
speed: defaultStyle.speed,
|
||||||
|
space: defaultStyle.space,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -202,7 +202,7 @@ const routeImport = () => {
|
|||||||
filters: [
|
filters: [
|
||||||
{
|
{
|
||||||
name: '路网', //、底图
|
name: '路网', //、底图
|
||||||
extensions: ['PBFL']
|
extensions: ['pbf']
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -483,6 +483,7 @@ const importProject = () => {
|
|||||||
console.log(arr, 'arrarr')
|
console.log(arr, 'arrarr')
|
||||||
arr.pop()
|
arr.pop()
|
||||||
// let path: any = 'C:/Users/Administrator/AppData/Roaming/yjearth'
|
// let path: any = 'C:/Users/Administrator/AppData/Roaming/yjearth'
|
||||||
|
console.log(paths[0], arr.join('/'), 'pathpath')
|
||||||
unzip_file(paths[0], arr.join('/'))
|
unzip_file(paths[0], arr.join('/'))
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
// loadingInstance.close()
|
// loadingInstance.close()
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
<el-table-column prop="password" label="密码" width="120" />
|
<el-table-column prop="password" label="密码" width="120" />
|
||||||
<el-table-column prop="channel" label="通道号" width="120" />
|
<el-table-column prop="channel" label="通道号" width="120" />
|
||||||
<el-table-column prop="flvUrl" label="flv地址" width="300" />
|
<el-table-column prop="flvUrl" label="flv地址" width="300" />
|
||||||
<el-table-column fixed="right" label="操作" min-width="140">
|
<el-table-column fixed="right" label="操作" min-width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" size="small" @click="edit('编辑设备', scope.row)">
|
<el-button type="primary" size="small" @click="edit('编辑设备', scope.row)">
|
||||||
编辑
|
编辑
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<!-- 主题色 -->
|
<!-- 主题色 -->
|
||||||
<div class="detailSkin"></div>
|
<!-- <div class="detailSkin"></div> -->
|
||||||
<div class="detailSkin">
|
<div class="detailSkin">
|
||||||
<span class="titleLabel">{{ t('systemSetting.theme') }}</span>
|
<span class="titleLabel">{{ t('systemSetting.theme') }}</span>
|
||||||
<el-select
|
<el-select
|
||||||
@ -66,7 +66,13 @@
|
|||||||
<el-select style="width: 175px" v-model="systemSetting.coordinate" @change="sysChange">
|
<el-select style="width: 175px" v-model="systemSetting.coordinate" @change="sysChange">
|
||||||
<div
|
<div
|
||||||
class="group-header"
|
class="group-header"
|
||||||
:class="isHotGroupOpen ? 'arrowActive' : ''"
|
:class="
|
||||||
|
name_map1.filter((item) => {
|
||||||
|
return item.epsg == systemSetting.coordinate
|
||||||
|
}).length > 0
|
||||||
|
? 'arrowActive'
|
||||||
|
: ''
|
||||||
|
"
|
||||||
@click="toggleGroup('hot')"
|
@click="toggleGroup('hot')"
|
||||||
>
|
>
|
||||||
地理坐标系
|
地理坐标系
|
||||||
@ -74,14 +80,26 @@
|
|||||||
v-if="isHotGroupOpen"
|
v-if="isHotGroupOpen"
|
||||||
name="arrow2"
|
name="arrow2"
|
||||||
:size="10"
|
:size="10"
|
||||||
color="rgba(0, 255, 255, 1)"
|
:color="
|
||||||
|
name_map1.filter((item) => {
|
||||||
|
return item.epsg == systemSetting.coordinate
|
||||||
|
}).length > 0
|
||||||
|
? 'rgba(0, 255, 255, 1)'
|
||||||
|
: 'rgba(255, 255, 255, 1)'
|
||||||
|
"
|
||||||
style="margin-left: 10px"
|
style="margin-left: 10px"
|
||||||
></svg-icon>
|
></svg-icon>
|
||||||
<svg-icon
|
<svg-icon
|
||||||
v-else
|
v-else
|
||||||
name="arrow1"
|
name="arrow1"
|
||||||
:size="10"
|
:size="10"
|
||||||
color="rgba(255, 255, 255, 1)"
|
:color="
|
||||||
|
name_map1.filter((item) => {
|
||||||
|
return item.epsg == systemSetting.coordinate
|
||||||
|
}).length > 0
|
||||||
|
? 'rgba(0, 255, 255, 1)'
|
||||||
|
: 'rgba(255, 255, 255, 1)'
|
||||||
|
"
|
||||||
style="margin-left: 10px"
|
style="margin-left: 10px"
|
||||||
></svg-icon>
|
></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
@ -95,7 +113,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="group-header"
|
class="group-header"
|
||||||
:class="isHotGroupOpen2 ? 'arrowActive' : ''"
|
:class="
|
||||||
|
name_map2.filter((item) => {
|
||||||
|
return item.epsg == systemSetting.coordinate
|
||||||
|
}).length > 0
|
||||||
|
? 'arrowActive'
|
||||||
|
: ''
|
||||||
|
"
|
||||||
@click="toggleGroup('ty')"
|
@click="toggleGroup('ty')"
|
||||||
>
|
>
|
||||||
投影坐标系
|
投影坐标系
|
||||||
@ -103,14 +127,26 @@
|
|||||||
v-if="isHotGroupOpen2"
|
v-if="isHotGroupOpen2"
|
||||||
name="arrow2"
|
name="arrow2"
|
||||||
:size="10"
|
:size="10"
|
||||||
color="rgba(0, 255, 255, 1)"
|
:color="
|
||||||
|
name_map2.filter((item) => {
|
||||||
|
return item.epsg == systemSetting.coordinate
|
||||||
|
}).length > 0
|
||||||
|
? 'rgba(0, 255, 255, 1)'
|
||||||
|
: 'rgba(255, 255, 255, 1)'
|
||||||
|
"
|
||||||
style="margin-left: 10px"
|
style="margin-left: 10px"
|
||||||
></svg-icon>
|
></svg-icon>
|
||||||
<svg-icon
|
<svg-icon
|
||||||
v-else
|
v-else
|
||||||
name="arrow1"
|
name="arrow1"
|
||||||
:size="10"
|
:size="10"
|
||||||
color="rgba(255, 255, 255, 1)"
|
:color="
|
||||||
|
name_map2.filter((item) => {
|
||||||
|
return item.epsg == systemSetting.coordinate
|
||||||
|
}).length > 0
|
||||||
|
? 'rgba(0, 255, 255, 1)'
|
||||||
|
: 'rgba(255, 255, 255, 1)'
|
||||||
|
"
|
||||||
style="margin-left: 10px"
|
style="margin-left: 10px"
|
||||||
></svg-icon>
|
></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
@ -124,7 +160,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="detailSkin"></div>
|
<!-- <div class="detailSkin"></div> -->
|
||||||
<div class="detailSkin" v-show="showPosiType">
|
<div class="detailSkin" v-show="showPosiType">
|
||||||
<span class="titleLabel">{{ t('systemSetting.latitude') }}</span>
|
<span class="titleLabel">{{ t('systemSetting.latitude') }}</span>
|
||||||
<el-select
|
<el-select
|
||||||
@ -167,7 +203,7 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="detailSkin1"></div>
|
<!-- <div class="detailSkin1"></div> -->
|
||||||
<div class="detailSkin1">
|
<div class="detailSkin1">
|
||||||
<span class="titleLabel">{{ t('systemSetting.areaUnit') }}</span>
|
<span class="titleLabel">{{ t('systemSetting.areaUnit') }}</span>
|
||||||
<el-select
|
<el-select
|
||||||
@ -202,7 +238,7 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="detailSkin1"></div>
|
<!-- <div class="detailSkin1"></div> -->
|
||||||
<div class="detailSkin1">
|
<div class="detailSkin1">
|
||||||
<span class="titleLabel">{{ t('systemSetting.speedUnit') }}</span>
|
<span class="titleLabel">{{ t('systemSetting.speedUnit') }}</span>
|
||||||
<el-select
|
<el-select
|
||||||
@ -268,7 +304,7 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="detailSkin1"></div>
|
<!-- <div class="detailSkin1"></div> -->
|
||||||
<div class="detailSkin1">
|
<div class="detailSkin1">
|
||||||
<span class="titleLabel">{{ t('ConcurrencyControl') }}</span>
|
<span class="titleLabel">{{ t('ConcurrencyControl') }}</span>
|
||||||
<el-select
|
<el-select
|
||||||
@ -703,21 +739,25 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.seting_content {
|
.seting_content {
|
||||||
width: 100%;
|
width: calc(100% - 22px);
|
||||||
padding: 15px 0 0 22px;
|
margin: 15px 0 0 22px;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(3, 1fr);
|
||||||
.detailSkin {
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.detailSkin {
|
||||||
|
width: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: left;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
flex-direction: row;
|
||||||
padding-bottom: 15px;
|
padding-bottom: 15px;
|
||||||
> span {
|
> span {
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
color: #c8cfcf;
|
color: #c8cfcf;
|
||||||
display: block;
|
display: block;
|
||||||
width: 86px;
|
// width: 86px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -725,10 +765,12 @@ onMounted(() => {
|
|||||||
.seting_content1 {
|
.seting_content1 {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 15px 0 0 22px;
|
padding: 15px 0 0 22px;
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
flex-wrap: wrap;
|
||||||
.detailSkin1 {
|
.detailSkin1 {
|
||||||
width: 100%;
|
width: 50%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
@ -737,7 +779,7 @@ onMounted(() => {
|
|||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
color: #c8cfcf;
|
color: #c8cfcf;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 86px;
|
// width: 86px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -760,7 +802,7 @@ onMounted(() => {
|
|||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
color: #c8cfcf;
|
color: #c8cfcf;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 86px;
|
// width: 86px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -792,5 +834,6 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
.titleLabel {
|
.titleLabel {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
|
text-align: left !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -105,12 +105,12 @@
|
|||||||
<el-tab-pane :label="t('system.modelManage')" name="modelManage">
|
<el-tab-pane :label="t('system.modelManage')" name="modelManage">
|
||||||
<modelManage></modelManage>
|
<modelManage></modelManage>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane :label="t('system.graphLabelManage')" name="graphLabelManage">
|
|
||||||
<graphLabelManage></graphLabelManage>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane :label="t('system.photoManage')" name="photoManage">
|
<el-tab-pane :label="t('system.photoManage')" name="photoManage">
|
||||||
<photoManage></photoManage>
|
<photoManage></photoManage>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane :label="t('system.graphLabelManage')" name="graphLabelManage">
|
||||||
|
<graphLabelManage></graphLabelManage>
|
||||||
|
</el-tab-pane>
|
||||||
<el-tab-pane :label="t('system.version')" name="version">
|
<el-tab-pane :label="t('system.version')" name="version">
|
||||||
<version></version>
|
<version></version>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|||||||
@ -810,7 +810,7 @@ const methodMap = {
|
|||||||
//模型压平
|
//模型压平
|
||||||
pressModel() {
|
pressModel() {
|
||||||
if ((window as any).checkAuthIsValid) {
|
if ((window as any).checkAuthIsValid) {
|
||||||
let selectedNode = window.treeObj.getSelectedNodes()[0]
|
let selectedNode = window.treeObj?.getSelectedNodes()[0]
|
||||||
if (selectedNode) {
|
if (selectedNode) {
|
||||||
let isTileset = ['bim', 'tileset'].includes(selectedNode.sourceType)
|
let isTileset = ['bim', 'tileset'].includes(selectedNode.sourceType)
|
||||||
if (!isTileset) {
|
if (!isTileset) {
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
<div class="div-item">
|
<div class="div-item">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col input-select-unit-box">
|
<div class="col">
|
||||||
<span class="label">等高距</span>
|
<span class="label">等高距</span>
|
||||||
<div class="input-number input-number-unit-1">
|
<div class="input-number input-number-unit-1">
|
||||||
<input
|
<input
|
||||||
@ -35,8 +35,8 @@
|
|||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box" style="flex: 0 0 60px"></div>
|
<div class="col" style="flex: 0 0 60px"></div>
|
||||||
<div class="col input-select-unit-box" style="flex: 0 0 157px">
|
<div class="col" style="flex: 0 0 157px">
|
||||||
<span class="label">选中线颜色</span>
|
<span class="label">选中线颜色</span>
|
||||||
<div class="active-color"></div>
|
<div class="active-color"></div>
|
||||||
</div>
|
</div>
|
||||||
@ -49,11 +49,11 @@
|
|||||||
<span class="label">计曲线</span>
|
<span class="label">计曲线</span>
|
||||||
<input class="btn-switch index-contour-switch" type="checkbox" />
|
<input class="btn-switch index-contour-switch" type="checkbox" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box" style="flex: 0 0 120px">
|
<div class="col" style="flex: 0 0 120px">
|
||||||
<span class="label">计曲线颜色</span>
|
<span class="label">计曲线颜色</span>
|
||||||
<div class="index-contour-color"></div>
|
<div class="index-contour-color"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box">
|
<div class="col">
|
||||||
<span class="label">计曲线宽度</span>
|
<span class="label">计曲线宽度</span>
|
||||||
<div class="input-number input-number-unit-1">
|
<div class="input-number input-number-unit-1">
|
||||||
<input
|
<input
|
||||||
@ -74,11 +74,11 @@
|
|||||||
<span class="label">首曲线</span>
|
<span class="label">首曲线</span>
|
||||||
<input class="btn-switch intermediate-contour-switch" type="checkbox" />
|
<input class="btn-switch intermediate-contour-switch" type="checkbox" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box" style="flex: 0 0 120px">
|
<div class="col" style="flex: 0 0 120px">
|
||||||
<span class="label">首曲线颜色</span>
|
<span class="label">首曲线颜色</span>
|
||||||
<div class="intermediate-contour-color"></div>
|
<div class="intermediate-contour-color"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box">
|
<div class="col">
|
||||||
<span class="label">首曲线宽度</span>
|
<span class="label">首曲线宽度</span>
|
||||||
<div class="input-number input-number-unit-1">
|
<div class="input-number input-number-unit-1">
|
||||||
<input
|
<input
|
||||||
@ -99,11 +99,11 @@
|
|||||||
<span class="label">间曲线</span>
|
<span class="label">间曲线</span>
|
||||||
<input class="btn-switch halfInterval-contour-switch" type="checkbox" />
|
<input class="btn-switch halfInterval-contour-switch" type="checkbox" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box" style="flex: 0 0 120px">
|
<div class="col" style="flex: 0 0 120px">
|
||||||
<span class="label">间曲线颜色</span>
|
<span class="label">间曲线颜色</span>
|
||||||
<div class="halfInterval-contour-color"></div>
|
<div class="halfInterval-contour-color"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box">
|
<div class="col">
|
||||||
<span class="label">间曲线宽度</span>
|
<span class="label">间曲线宽度</span>
|
||||||
<div class="input-number input-number-unit-1">
|
<div class="input-number input-number-unit-1">
|
||||||
<input
|
<input
|
||||||
@ -123,11 +123,11 @@
|
|||||||
<span class="label">助曲线</span>
|
<span class="label">助曲线</span>
|
||||||
<input class="btn-switch supplementary-contour-switch" type="checkbox" />
|
<input class="btn-switch supplementary-contour-switch" type="checkbox" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box" style="flex: 0 0 120px">
|
<div class="col" style="flex: 0 0 120px">
|
||||||
<span class="label">助曲线颜色</span>
|
<span class="label">助曲线颜色</span>
|
||||||
<div class="supplementary-contour-color"></div>
|
<div class="supplementary-contour-color"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-unit-box">
|
<div class="col">
|
||||||
<span class="label">助曲线宽度</span>
|
<span class="label">助曲线宽度</span>
|
||||||
<div class="input-number input-number-unit-1">
|
<div class="input-number input-number-unit-1">
|
||||||
<input
|
<input
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
ref="baseDialog"
|
ref="baseDialog"
|
||||||
class="fly-roam"
|
class="fly-roam"
|
||||||
title="飞行漫游"
|
title="飞行漫游"
|
||||||
width="382px"
|
width="460px"
|
||||||
left="180px"
|
left="180px"
|
||||||
top="100px"
|
top="100px"
|
||||||
:closeCallback="closeCallBack"
|
:closeCallback="closeCallBack"
|
||||||
@ -14,9 +14,9 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col" style="flex: 0 0 205px">
|
<div class="col" style="flex: 0 0 205px">
|
||||||
<span class="label">名称</span>
|
<span class="label">名称</span>
|
||||||
<input class="input" type="text" name="name" />
|
<input class="input" type="text" name="name" placeholder="请输入名称" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<!-- <div class="col">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="repeat"
|
name="repeat"
|
||||||
@ -30,7 +30,7 @@
|
|||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
<span class="label">循环播放</span>
|
<span class="label">循环播放</span>
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
@ -95,14 +95,14 @@
|
|||||||
<svg class="icon-edit"><use xlink:href="#yj-icon-edit"></use></svg>调整视点
|
<svg class="icon-edit"><use xlink:href="#yj-icon-edit"></use></svg>调整视点
|
||||||
</button>
|
</button>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="col">
|
<!-- <div class="col">
|
||||||
<button class="afreshPlay">
|
<button class="afreshPlay">
|
||||||
<svg class="icon-play"><use xlink:href="#yj-icon-play"></use></svg>全局播放
|
<svg class="icon-play"><use xlink:href="#yj-icon-play"></use></svg>全局播放
|
||||||
</button>
|
</button>
|
||||||
<button class="cease" style="margin-left: 10px">
|
<button class="cease" style="margin-left: 10px">
|
||||||
<svg-icon name="stop" :size="12" color="rgba(255, 255, 255, 1)"></svg-icon>结束播放
|
<svg-icon name="stop" :size="12" color="rgba(255, 255, 255, 1)"></svg-icon>结束播放
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div> -->
|
||||||
<!-- <div class="col">
|
<!-- <div class="col">
|
||||||
<button class="cease">
|
<button class="cease">
|
||||||
<svg class="icon-pause"><use xlink:href="#yj-icon-pause"></use></svg>结束播放
|
<svg class="icon-pause"><use xlink:href="#yj-icon-pause"></use></svg>结束播放
|
||||||
@ -110,8 +110,30 @@
|
|||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col" style="flex: 0 0 200px">
|
<div class="col" style="flex: 0 0 300px">
|
||||||
|
<span class="label">默认时长</span>
|
||||||
|
<div class="input-number input-number-unit-3">
|
||||||
<input
|
<input
|
||||||
|
class="input total-time"
|
||||||
|
type="number"
|
||||||
|
title=""
|
||||||
|
min="0"
|
||||||
|
max="999999.99"
|
||||||
|
step="0.01"
|
||||||
|
name="defaultTime"
|
||||||
|
value="0"
|
||||||
|
/>
|
||||||
|
<span class="unit" style="top: 6px">s</span>
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
<button class="add-point" style="margin-left: 10px">
|
||||||
|
<svg class="icon-add"><use xlink:href="#yj-icon-add"></use></svg>增加视点
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col" style="flex: 0 0 300px">
|
||||||
|
<!-- <input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="isTotalTime"
|
name="isTotalTime"
|
||||||
style="
|
style="
|
||||||
@ -122,7 +144,7 @@
|
|||||||
width: auto;
|
width: auto;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
"
|
"
|
||||||
/>
|
/> -->
|
||||||
<span class="label">设置总时长</span>
|
<span class="label">设置总时长</span>
|
||||||
<div class="input-number input-number-unit-3">
|
<div class="input-number input-number-unit-3">
|
||||||
<input
|
<input
|
||||||
@ -138,6 +160,14 @@
|
|||||||
<span class="unit" style="top: 6px">s</span>
|
<span class="unit" style="top: 6px">s</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
|
<button class="isTotalTime" style="margin-left: 10px">应用</button>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="repeat"
|
||||||
|
class="YJ-custom-checkbox"
|
||||||
|
style="cursor: pointer; width: auto; margin-right: 5px; margin-left: 10px"
|
||||||
|
/>
|
||||||
|
<span class="label">循环</span>
|
||||||
<!-- <button style="margin-left: 10px" @click="apply">应用</button> -->
|
<!-- <button style="margin-left: 10px" @click="apply">应用</button> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -161,8 +191,14 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div style="position: absolute; left: 24px; display: flex">
|
<div style="position: absolute; left: 24px; display: flex">
|
||||||
<button class="add-point">
|
<button class="afreshPlay">
|
||||||
<svg class="icon-add"><use xlink:href="#yj-icon-add"></use></svg>增加视点
|
<svg class="icon-play"><use xlink:href="#yj-icon-play"></use></svg>播放
|
||||||
|
</button>
|
||||||
|
<button class="cease" style="margin-left: 10px">
|
||||||
|
<svg-icon name="stop" :size="12" color="rgba(255, 255, 255, 1)"></svg-icon>结束
|
||||||
|
</button>
|
||||||
|
<button class="video" style="margin-left: 10px" @click="startVideo">
|
||||||
|
<svg-icon name="video" :size="12"></svg-icon>录制
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<button class="saveRoam" @click="draw">保存</button>
|
<button class="saveRoam" @click="draw">保存</button>
|
||||||
@ -180,6 +216,7 @@ import { app } from 'electron'
|
|||||||
import { TreeApi } from '@/api/tree'
|
import { TreeApi } from '@/api/tree'
|
||||||
import { useTreeNode } from '../tree/hooks/treeNode'
|
import { useTreeNode } from '../tree/hooks/treeNode'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { $sendElectronChanel } from '@/utils/communication'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { cusAddNodes } = useTreeNode()
|
const { cusAddNodes } = useTreeNode()
|
||||||
@ -236,8 +273,24 @@ const draw = (data) => {
|
|||||||
type: 'warning'
|
type: 'warning'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
console.log(data)
|
const startVideo = () => {
|
||||||
|
document.getElementById('earthContainer').style.zIndex = 100
|
||||||
|
$sendElectronChanel('startRecoder')
|
||||||
|
ElMessage({
|
||||||
|
message: '按ESC结束录制',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
|
||||||
|
const handleKeyDown = (e) => {
|
||||||
|
if (e.key === 'Escape') {
|
||||||
|
$sendElectronChanel('endRecoder')
|
||||||
|
window.removeEventListener('keydown', handleKeyDown)
|
||||||
|
document.getElementById('earthContainer').style.zIndex = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
window.addEventListener('keydown', handleKeyDown)
|
||||||
}
|
}
|
||||||
|
|
||||||
const clangeViewPointHeight = () => {}
|
const clangeViewPointHeight = () => {}
|
||||||
@ -275,15 +328,40 @@ defineExpose({
|
|||||||
linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
|
linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
|
||||||
linear-gradient(180deg, rgba(27, 248, 195, 0.2) 0%, rgba(27, 248, 195, 0) 100%) !important;
|
linear-gradient(180deg, rgba(27, 248, 195, 0.2) 0%, rgba(27, 248, 195, 0) 100%) !important;
|
||||||
border: 1px solid rgba(27, 248, 195, 1) !important;
|
border: 1px solid rgba(27, 248, 195, 1) !important;
|
||||||
|
color: rgba(27, 248, 195, 1) !important;
|
||||||
|
svg {
|
||||||
|
fill: rgba(27, 248, 195, 1) !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.cease {
|
.cease {
|
||||||
background:
|
background:
|
||||||
linear-gradient(180deg, rgba(241, 108, 85, 0.2) 0%, rgba(241, 108, 85, 0) 100%),
|
linear-gradient(180deg, rgba(241, 108, 85, 0.2) 0%, rgba(241, 108, 85, 0) 100%),
|
||||||
rgba(0, 0, 0, 0.5) !important;
|
rgba(0, 0, 0, 0.5) !important;
|
||||||
border: 1px solid rgba(241, 108, 85, 1) !important;
|
border: 1px solid rgba(241, 108, 85, 1) !important;
|
||||||
|
color: rgba(241, 108, 85, 1) !important;
|
||||||
|
svg {
|
||||||
|
fill: rgba(241, 108, 85, 1) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.video {
|
||||||
|
background:
|
||||||
|
linear-gradient(
|
||||||
|
180deg,
|
||||||
|
rgba(71, 27, 5, 0.3) 0%,
|
||||||
|
rgba(71, 27, 5, 0.3) 0%,
|
||||||
|
rgba(255, 143, 87, 0) 100%
|
||||||
|
),
|
||||||
|
rgba(0, 0, 0, 0.5) !important;
|
||||||
|
border: 1px solid rgba(255, 165, 92, 1) !important;
|
||||||
|
color: rgba(255, 165, 92, 1) !important;
|
||||||
}
|
}
|
||||||
::v-deep .content input.YJ-custom-checkbox[type='checkbox'] {
|
::v-deep .content input.YJ-custom-checkbox[type='checkbox'] {
|
||||||
border: 1px solid rgba(var(--color-base1), 1) !important;
|
border: 1px solid rgba(var(--color-base1), 1) !important;
|
||||||
background-color: rgba(0, 0, 0, 0.5) !important;
|
background-color: unset !important;
|
||||||
|
}
|
||||||
|
::v-deep .iconBut {
|
||||||
|
background: unset !important;
|
||||||
|
border: unset !important;
|
||||||
|
padding: unset !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -20,9 +20,26 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="div-item item" data-type="0" v-show="isShowing">
|
<div class="div-item item" data-type="0" v-show="isShowing">
|
||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
<p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px">
|
<p
|
||||||
|
style="
|
||||||
|
font-size: 16px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
<span style="margin-right: 10px">度</span>
|
<span style="margin-right: 10px">度</span>
|
||||||
<span style="font-size: 12px; margin-bottom: 5px; color: #f16c55">例如116.6°, 39.9°</span>
|
<span style="font-size: 12px; margin-bottom: 5px; color: #f16c55"
|
||||||
|
>例如116.6°, 39.9°</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; ">
|
||||||
|
<button class="pickUp">拾 取</button>
|
||||||
|
<button class="convert" style="margin-left: 10px">转 换</button>
|
||||||
|
</div>
|
||||||
</p>
|
</p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
@ -45,17 +62,23 @@
|
|||||||
<use xlink:href="#yj-icon-copy"></use>
|
<use xlink:href="#yj-icon-copy"></use>
|
||||||
</svg>
|
</svg>
|
||||||
</i>
|
</i>
|
||||||
<button class="convert" style="margin-left: 10px">转 换</button>
|
<!-- <button class="convert" style="margin-left: 10px">转 换</button> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-item item" data-type="1" v-show="isShowing">
|
<div class="div-item item" data-type="1" v-show="isShowing">
|
||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
<p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px">
|
<p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px;display: flex; justify-content: space-between;">
|
||||||
|
<div>
|
||||||
<span style="margin-right: 10px">度分</span>
|
<span style="margin-right: 10px">度分</span>
|
||||||
<span style="font-size: 12px; margin-bottom: 5px; color: #f16c55"
|
<span style="font-size: 12px; margin-bottom: 5px; color: #f16c55"
|
||||||
>例如95°10.1702', 49°12.4015'</span
|
>例如95°10.1702', 49°12.4015'</span
|
||||||
>
|
>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; ">
|
||||||
|
<button class="pickUp">拾 取</button>
|
||||||
|
<button class="convert" style="margin-left: 10px">转 换</button>
|
||||||
|
</div>
|
||||||
</p>
|
</p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col" style="flex-direction: column">
|
<div class="col" style="flex-direction: column">
|
||||||
@ -120,17 +143,23 @@
|
|||||||
<use xlink:href="#yj-icon-copy"></use>
|
<use xlink:href="#yj-icon-copy"></use>
|
||||||
</svg>
|
</svg>
|
||||||
</i>
|
</i>
|
||||||
<button class="convert" style="margin-left: 10px">转 换</button>
|
<!-- <button class="convert" style="margin-left: 10px">转 换</button> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-item item" data-type="2" v-show="isShowing">
|
<div class="div-item item" data-type="2" v-show="isShowing">
|
||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
<p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px">
|
<p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px;display: flex; justify-content: space-between;">
|
||||||
|
<div>
|
||||||
<span style="margin-right: 10px">度分秒</span>
|
<span style="margin-right: 10px">度分秒</span>
|
||||||
<span style="font-size: 12px; margin-bottom: 5px; color: #f16c55"
|
<span style="font-size: 12px; margin-bottom: 5px; color: #f16c55"
|
||||||
>例如11°18'54.37", 39°13'46.57"</span
|
>例如11°18'54.37", 39°13'46.57"</span
|
||||||
>
|
>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; ">
|
||||||
|
<button class="pickUp">拾 取</button>
|
||||||
|
<button class="convert" style="margin-left: 10px">转 换</button>
|
||||||
|
</div>
|
||||||
</p>
|
</p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col" style="flex-direction: column">
|
<div class="col" style="flex-direction: column">
|
||||||
@ -215,7 +244,7 @@
|
|||||||
<use xlink:href="#yj-icon-copy"></use>
|
<use xlink:href="#yj-icon-copy"></use>
|
||||||
</svg>
|
</svg>
|
||||||
</i>
|
</i>
|
||||||
<button class="convert" style="margin-left: 10px">转 换</button>
|
<!-- <button class="convert" style="margin-left: 10px">转 换</button> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -0,0 +1,463 @@
|
|||||||
|
<template>
|
||||||
|
<Dialog
|
||||||
|
ref="baseDialog"
|
||||||
|
class="RoutePlanning"
|
||||||
|
title="路径规划"
|
||||||
|
left="180px"
|
||||||
|
top="100px"
|
||||||
|
width="527px"
|
||||||
|
:closeCallback="closeCallBack"
|
||||||
|
>
|
||||||
|
<template #content>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col" style="flex: 0 0 66px">
|
||||||
|
<span class="label" style="color: rgba(var(--color-base1), 1)">起点</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">经度</span>
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="startLng"
|
||||||
|
type="number"
|
||||||
|
title=""
|
||||||
|
min="-180"
|
||||||
|
max="180"
|
||||||
|
@model="startLng"
|
||||||
|
v-model="startLng"
|
||||||
|
@change="changeStartLng"
|
||||||
|
@input="inputStartLng"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">纬度</span>
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="startLat"
|
||||||
|
type="number"
|
||||||
|
title=""
|
||||||
|
min="-90"
|
||||||
|
max="90"
|
||||||
|
@model="startLat"
|
||||||
|
v-model="startLat"
|
||||||
|
@change="changeStartLat"
|
||||||
|
@input="inputStartLat"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 95px">
|
||||||
|
<button class="end-pick-btn" @click="pickStartPos" style="margin-left: 10px">拾取</button>
|
||||||
|
<svg-icon
|
||||||
|
name="posiFly"
|
||||||
|
class="icon"
|
||||||
|
:size="18"
|
||||||
|
style="margin: 5px"
|
||||||
|
title="定位"
|
||||||
|
></svg-icon>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 避让区域 -->
|
||||||
|
<div class="row" v-for="i in yieldNum" :key="i">
|
||||||
|
<div class="col" style="flex: 0 0 66px">
|
||||||
|
<span class="label">避让区域</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span style="font-size: 12px; color: rgba(204, 204, 204, 1)">请绘制避让区域范围</span>
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 95px">
|
||||||
|
<button class="end-pick-btn" style="margin-left: 10px">绘制</button>
|
||||||
|
<svg-icon name="posiFly" class="icon" :size="18" style="margin: 5px"></svg-icon>
|
||||||
|
<svg-icon
|
||||||
|
name="close"
|
||||||
|
class="icon"
|
||||||
|
style="margin-right: -12px"
|
||||||
|
:size="12"
|
||||||
|
@click="deleteYieldArea()"
|
||||||
|
></svg-icon>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 途径点 -->
|
||||||
|
<div class="row" v-for="i in crossNum" :key="i">
|
||||||
|
<div class="col" style="flex: 0 0 66px">
|
||||||
|
<svg-icon
|
||||||
|
name="crossPoint"
|
||||||
|
class="icon"
|
||||||
|
style="margin-left: -18px"
|
||||||
|
:size="12"
|
||||||
|
@click="deleteYieldArea()"
|
||||||
|
></svg-icon>
|
||||||
|
<span class="label">{{ '途径点' + i }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">经度</span>
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="endLng"
|
||||||
|
type="number"
|
||||||
|
title=""
|
||||||
|
min="-180"
|
||||||
|
max="180"
|
||||||
|
@model="endLng"
|
||||||
|
v-model="endLng"
|
||||||
|
@change="changeEndLng"
|
||||||
|
@input="inputEndLng"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">纬度</span>
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="endLat"
|
||||||
|
type="number"
|
||||||
|
title=""
|
||||||
|
min="-180"
|
||||||
|
max="180"
|
||||||
|
@model="endLat"
|
||||||
|
v-model="endLat"
|
||||||
|
@change="changeEndLat"
|
||||||
|
@input="inputEndLat"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 95px">
|
||||||
|
<button class="end-pick-btn" @click="pickEndPos" style="margin-left: 10px">拾取</button>
|
||||||
|
<svg-icon name="posiFly" class="icon" :size="18" style="margin: 5px"></svg-icon>
|
||||||
|
<svg-icon
|
||||||
|
name="close"
|
||||||
|
class="icon"
|
||||||
|
style="margin-right: -12px"
|
||||||
|
:size="12"
|
||||||
|
@click="deleteCrossPoint()"
|
||||||
|
></svg-icon>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col" style="flex: 0 0 66px">
|
||||||
|
<span class="label" style="color: rgba(var(--color-base1), 1)">终点</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">经度</span>
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="endLng"
|
||||||
|
type="number"
|
||||||
|
title=""
|
||||||
|
min="-180"
|
||||||
|
max="180"
|
||||||
|
@model="endLng"
|
||||||
|
v-model="endLng"
|
||||||
|
@change="changeEndLng"
|
||||||
|
@input="inputEndLng"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">纬度</span>
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="endLat"
|
||||||
|
type="number"
|
||||||
|
title=""
|
||||||
|
min="-180"
|
||||||
|
max="180"
|
||||||
|
@model="endLat"
|
||||||
|
v-model="endLat"
|
||||||
|
@change="changeEndLat"
|
||||||
|
@input="inputEndLat"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 95px">
|
||||||
|
<button class="end-pick-btn" @click="pickEndPos" style="margin-left: 10px">拾取</button>
|
||||||
|
<svg-icon name="posiFly" class="icon" :size="18" style="margin: 5px"></svg-icon>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="row"
|
||||||
|
style="align-items: flex-start; display: flex; justify-content: space-between"
|
||||||
|
>
|
||||||
|
<div class="col start-col">
|
||||||
|
<button
|
||||||
|
class="crossPoint"
|
||||||
|
@mouseenter="svgHover[0] = true"
|
||||||
|
@mouseleave="svgHover[0] = false"
|
||||||
|
@click="addCrossPoint()"
|
||||||
|
>
|
||||||
|
<svg-icon
|
||||||
|
name="add"
|
||||||
|
:size="12"
|
||||||
|
:color="svgHover[0] ? 'rgba(0, 255, 255, 1)' : 'rgba(255, 255, 255, 1)'"
|
||||||
|
></svg-icon>
|
||||||
|
途径点
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="crossPoint"
|
||||||
|
@mouseenter="svgHover[1] = true"
|
||||||
|
@mouseleave="svgHover[1] = false"
|
||||||
|
@click="addYieldArea()"
|
||||||
|
style="margin-left: 10px"
|
||||||
|
>
|
||||||
|
<svg-icon
|
||||||
|
name="add"
|
||||||
|
:size="12"
|
||||||
|
:color="svgHover[1] ? 'rgba(0, 255, 255, 1)' : 'rgba(255, 255, 255, 1)'"
|
||||||
|
></svg-icon
|
||||||
|
>避让区域
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<button @clik="routeQuery">
|
||||||
|
<svg class="icon-query"><use xlink:href="#yj-icon-query"></use></svg>查询
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<span class="custom-divider"></span>
|
||||||
|
<div class="row" style="margin-top: 20px">
|
||||||
|
<p class="lable-left-line">路径规划</p>
|
||||||
|
</div>
|
||||||
|
<!-- 路线 -->
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">{{ '路线' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">{{ '52分钟' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">{{ '50公里' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">{{ '中间有路段维修' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<button class="end-pick-btn">保存</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<!-- <template #footer>
|
||||||
|
<button id="routeQuery" @clik="routeQuery">
|
||||||
|
<svg class="icon-query"><use xlink:href="#yj-icon-query"></use></svg>查询
|
||||||
|
</button>
|
||||||
|
<button id="clearRoute" @click="clearRoute">
|
||||||
|
<svg class="icon-route"><use xlink:href="#yj-icon-route"></use></svg>清除路线
|
||||||
|
</button>
|
||||||
|
<button @click="close">取消</button>
|
||||||
|
</template> -->
|
||||||
|
</Dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, reactive, onBeforeUnmount } from 'vue'
|
||||||
|
import { inject } from 'vue'
|
||||||
|
import Dialog from '@/components/dialog/baseDialog.vue'
|
||||||
|
import { RouteApi } from '@/api/route/index'
|
||||||
|
import { add } from 'date-fns'
|
||||||
|
|
||||||
|
const baseDialog: any = ref(null)
|
||||||
|
const eventBus: any = inject('bus')
|
||||||
|
|
||||||
|
//避让区域
|
||||||
|
var yieldNum: any = ref(0)
|
||||||
|
const addYieldArea = () => {
|
||||||
|
console.log('addYieldArea')
|
||||||
|
yieldNum.value++
|
||||||
|
}
|
||||||
|
const deleteYieldArea = () => {
|
||||||
|
yieldNum.value > 0 ? yieldNum.value-- : (yieldNum.value = 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
//途径点
|
||||||
|
var crossNum: any = ref(0)
|
||||||
|
const addCrossPoint = () => {
|
||||||
|
crossNum.value++
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteCrossPoint = () => {
|
||||||
|
crossNum.value > 0 ? crossNum.value-- : (crossNum.value = 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
//属性
|
||||||
|
var startLng: any = ref(null)
|
||||||
|
var startLat: any = ref(null)
|
||||||
|
var endLng: any = ref(null)
|
||||||
|
var endLat: any = ref(null)
|
||||||
|
|
||||||
|
var routePlanning: any = reactive([])
|
||||||
|
|
||||||
|
var svgHover: any = reactive([false, false])
|
||||||
|
eventBus.on('routePlanningDialog', () => {
|
||||||
|
baseDialog.value?.open()
|
||||||
|
setTimeout(() => {
|
||||||
|
//加载路网数据
|
||||||
|
|
||||||
|
let host = 'http://192.168.110.25:8848'
|
||||||
|
routePlanning = new YJ.Obj.RoutePlanning(window.earth, {
|
||||||
|
gps: false,
|
||||||
|
host
|
||||||
|
})
|
||||||
|
routePlanning.Dialog.queryCallBack = async (v) => {
|
||||||
|
// await queryRoute(params, (response) => {
|
||||||
|
// if (response) {
|
||||||
|
// routePlanning.createRoute(response.list[0].positions)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
let res = await RouteApi.queryRoute({
|
||||||
|
startLng: startLng.value,
|
||||||
|
startLat: startLat.value,
|
||||||
|
endLng: endLng.value,
|
||||||
|
endLat: endLat.value,
|
||||||
|
waypoints: []
|
||||||
|
})
|
||||||
|
if (res.code === 200) {
|
||||||
|
routePlanning.createRoute(res.data.pathPoints)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 100)
|
||||||
|
})
|
||||||
|
const open = () => {
|
||||||
|
baseDialog.value?.open()
|
||||||
|
setTimeout(() => {
|
||||||
|
//加载路网数据
|
||||||
|
|
||||||
|
let host = 'http://192.168.110.25:8848'
|
||||||
|
routePlanning = new YJ.Obj.RoutePlanning(window.earth, {
|
||||||
|
gps: false,
|
||||||
|
host
|
||||||
|
})
|
||||||
|
routePlanning.Dialog.queryCallBack = async (v) => {
|
||||||
|
// await queryRoute(params, (response) => {
|
||||||
|
// if (response) {
|
||||||
|
// routePlanning.createRoute(response.list[0].positions)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
let res = await RouteApi.queryRoute({
|
||||||
|
startLng: startLng.value,
|
||||||
|
startLat: startLat.value,
|
||||||
|
endLng: endLng.value,
|
||||||
|
endLat: endLat.value,
|
||||||
|
waypoints: []
|
||||||
|
})
|
||||||
|
if (res.code === 200) {
|
||||||
|
routePlanning.createRoute(res.data.pathPoints)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
|
||||||
|
//加载路网数据
|
||||||
|
|
||||||
|
const addRoute = async (fileId) => {
|
||||||
|
let res = await RouteApi.loadRoute({ fileId })
|
||||||
|
}
|
||||||
|
const getList = async () => {
|
||||||
|
let list = await RouteApi.getRouteList()
|
||||||
|
if (list.data.length > 0) {
|
||||||
|
let file = list.data[list.data.length - 1]
|
||||||
|
addRoute(file.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const closeCallBack = (e) => {
|
||||||
|
startLng.value = null
|
||||||
|
startLat.value = null
|
||||||
|
endLng.value = null
|
||||||
|
endLat.value = null
|
||||||
|
}
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
closeCallBack('')
|
||||||
|
})
|
||||||
|
const routeQuery = async (e) => {
|
||||||
|
let res = await RouteApi.queryRoute({
|
||||||
|
startLng: startLng.value,
|
||||||
|
startLat: startLat.value,
|
||||||
|
endLng: endLng.value,
|
||||||
|
endLat: endLat.value,
|
||||||
|
waypoints: []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const clearRoute = (e) => {}
|
||||||
|
const pickStartPos = () => {
|
||||||
|
routePlanning.pickStartPos((position) => {
|
||||||
|
startLng.value = position.lng
|
||||||
|
startLat.value = position.lat
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const pickEndPos = () => {
|
||||||
|
routePlanning.pickEndPos((position) => {
|
||||||
|
endLng.value = position.lng
|
||||||
|
endLat.value = position.lat
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const close = (e) => {
|
||||||
|
baseDialog.value?.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
const changeStartLng = () => {
|
||||||
|
routePlanning.startLng = startLng.value
|
||||||
|
}
|
||||||
|
const inputStartLng = () => {
|
||||||
|
let dom: any = document.getElementById('startLng')
|
||||||
|
if (startLng.value < dom.min * 1) {
|
||||||
|
startLng.value = dom.min * 1
|
||||||
|
} else if (startLng.value > dom.max * 1) {
|
||||||
|
startLng.value = dom.max * 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const changeStartLat = () => {
|
||||||
|
routePlanning.startLat = startLat.value
|
||||||
|
}
|
||||||
|
const inputStartLat = () => {
|
||||||
|
let dom: any = document.getElementById('startLat')
|
||||||
|
if (startLat.value < dom.min * 1) {
|
||||||
|
startLat.value = dom.min * 1
|
||||||
|
} else if (startLat.value > dom.max * 1) {
|
||||||
|
startLat.value = dom.max * 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const changeEndLng = () => {
|
||||||
|
routePlanning.endLng = endLng.value
|
||||||
|
}
|
||||||
|
const inputEndLng = () => {
|
||||||
|
let dom: any = document.getElementById('endLng')
|
||||||
|
if (endLng.value < dom.min * 1) {
|
||||||
|
endLng.value = dom.min * 1
|
||||||
|
} else if (endLng.value > dom.max * 1) {
|
||||||
|
endLng.value = dom.max * 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const changeEndLat = () => {
|
||||||
|
routePlanning.endLat = endLat.value
|
||||||
|
}
|
||||||
|
const inputEndLat = () => {
|
||||||
|
let dom: any = document.getElementById('endLat')
|
||||||
|
if (endLat.value < dom.min * 1) {
|
||||||
|
endLat.value = dom.min * 1
|
||||||
|
} else if (endLat.value > dom.max * 1) {
|
||||||
|
endLat.value = dom.max * 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
open
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
#routeQuery {
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
#clearRoute {
|
||||||
|
position: absolute;
|
||||||
|
left: 95px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.YJ-custom-base-dialog > .content .row > .col {
|
||||||
|
margin: 0 5px !important;
|
||||||
|
}
|
||||||
|
.crossPoint:hover {
|
||||||
|
color: rgba(var(--color-base1), 1);
|
||||||
|
}
|
||||||
|
.icon {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -9,7 +9,7 @@
|
|||||||
:closeCallback="closeCallBack"
|
:closeCallback="closeCallBack"
|
||||||
>
|
>
|
||||||
<template #content>
|
<template #content>
|
||||||
<div class="row" style="align-items: flex-start">
|
<!-- <div class="row" style="align-items: flex-start">
|
||||||
<div class="col start-col">
|
<div class="col start-col">
|
||||||
<button
|
<button
|
||||||
class="crossPoint"
|
class="crossPoint"
|
||||||
@ -37,7 +37,7 @@
|
|||||||
>避让点
|
>避让点
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<p class="lable-left-line">路径规划</p>
|
<p class="lable-left-line">路径规划</p>
|
||||||
</div>
|
</div>
|
||||||
@ -195,6 +195,7 @@ const open = () => {
|
|||||||
// routePlanning.createRoute(response.list[0].positions)
|
// routePlanning.createRoute(response.list[0].positions)
|
||||||
// }
|
// }
|
||||||
// })
|
// })
|
||||||
|
try {
|
||||||
let res = await RouteApi.queryRoute({
|
let res = await RouteApi.queryRoute({
|
||||||
startLng: startLng.value,
|
startLng: startLng.value,
|
||||||
startLat: startLat.value,
|
startLat: startLat.value,
|
||||||
@ -203,7 +204,10 @@ const open = () => {
|
|||||||
waypoints: []
|
waypoints: []
|
||||||
})
|
})
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
routePlanning.createRoute(res.data.pathPoints)
|
routePlanning.createRoute(res.data.routes[0]?.points)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
document.getElementById('clearRoute').click()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 100)
|
}, 100)
|
||||||
|
|||||||
@ -1,171 +0,0 @@
|
|||||||
<template>
|
|
||||||
<Dialog
|
|
||||||
ref="baseDialog"
|
|
||||||
class="RoutePlanning"
|
|
||||||
title="路径规划"
|
|
||||||
left="180px"
|
|
||||||
top="100px"
|
|
||||||
width="527px"
|
|
||||||
:closeCallback="closeCallBack"
|
|
||||||
>
|
|
||||||
<template #content>
|
|
||||||
<div class="row" style="align-items: flex-start">
|
|
||||||
<div class="col start-col">
|
|
||||||
<button
|
|
||||||
class="crossPoint"
|
|
||||||
@mouseenter="svgHover[0] = true"
|
|
||||||
@mouseleave="svgHover[0] = false"
|
|
||||||
>
|
|
||||||
<svg-icon
|
|
||||||
name="add"
|
|
||||||
:size="12"
|
|
||||||
:color="svgHover[0] ? 'rgba(0, 255, 255, 1)' : 'rgba(255, 255, 255, 1)'"
|
|
||||||
></svg-icon>
|
|
||||||
途径点
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
class="crossPoint"
|
|
||||||
@mouseenter="svgHover[1] = true"
|
|
||||||
@mouseleave="svgHover[1] = false"
|
|
||||||
style="margin-left: 10px"
|
|
||||||
>
|
|
||||||
<svg-icon
|
|
||||||
name="add"
|
|
||||||
:size="12"
|
|
||||||
:color="svgHover[1] ? 'rgba(0, 255, 255, 1)' : 'rgba(255, 255, 255, 1)'"
|
|
||||||
></svg-icon
|
|
||||||
>避让点
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<p class="lable-left-line">路径规划</p>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col" style="flex: 0 0 50px">
|
|
||||||
<span class="label">起点</span>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">经度</span>
|
|
||||||
<input class="input" type="number" title="" min="-180" max="180" @model="endLng" />
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">纬度</span>
|
|
||||||
<input class="input" type="number" title="" min="-180" max="180" @model="endLng" />
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 80px">
|
|
||||||
<button class="end-pick-btn" @click="pickEndPos" style="margin-left: 10px">拾取</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- 途径点 -->
|
|
||||||
<div class="row" v-for="(item, index) in positionList.waypoints" :key="index">
|
|
||||||
<div class="col" style="flex: 0 0 50px">
|
|
||||||
<span class="label">途径点</span>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">经度</span>
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="-180"
|
|
||||||
max="180"
|
|
||||||
@model="endLng"
|
|
||||||
v-model="item.lng"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">纬度</span>
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="-180"
|
|
||||||
max="180"
|
|
||||||
@model="endLng"
|
|
||||||
v-model="item.lat"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 80px">
|
|
||||||
<button class="end-pick-btn" @click="pickEndPos" style="margin-left: 10px">拾取</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col" style="flex: 0 0 50px">
|
|
||||||
<span class="label">终点</span>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">经度</span>
|
|
||||||
<input class="input" type="number" title="" min="-180" max="180" @model="endLng" />
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">纬度</span>
|
|
||||||
<input class="input" type="number" title="" min="-180" max="180" @model="endLng" />
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 80px">
|
|
||||||
<button class="end-pick-btn" @click="pickEndPos" style="margin-left: 10px">拾取</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template #footer>
|
|
||||||
<button @click="draw">绘制</button>
|
|
||||||
</template>
|
|
||||||
</Dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { ref, reactive } from 'vue'
|
|
||||||
import { inject } from 'vue'
|
|
||||||
import Dialog from '@/components/dialog/baseDialog.vue'
|
|
||||||
|
|
||||||
const baseDialog: any = ref(null)
|
|
||||||
const eventBus: any = inject('bus')
|
|
||||||
|
|
||||||
var positionList: any = reactive([
|
|
||||||
{
|
|
||||||
startlng: 0,
|
|
||||||
startlat: 0,
|
|
||||||
endlng: 0,
|
|
||||||
endlat: 0,
|
|
||||||
waypoints: [
|
|
||||||
{
|
|
||||||
lat: 0,
|
|
||||||
lng: 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
//属性
|
|
||||||
var startLng: any = ref(null)
|
|
||||||
var startLat: any = ref(null)
|
|
||||||
var endLng: any = ref(null)
|
|
||||||
var endLat: any = ref(null)
|
|
||||||
|
|
||||||
var svgHover: any = reactive([false, false])
|
|
||||||
eventBus.on('routePlanningDialog', () => {
|
|
||||||
baseDialog.value?.open()
|
|
||||||
})
|
|
||||||
const closeCallBack = (e) => {}
|
|
||||||
|
|
||||||
function pickStartPos() {}
|
|
||||||
function pickEndPos() {}
|
|
||||||
|
|
||||||
const draw = (e) => {}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
// ::v-deep .RoutePlanning > .content > div > .row .col {
|
|
||||||
// margin: 0 10px;
|
|
||||||
// }
|
|
||||||
// ::v-deep .RoutePlanning > .content .row .label {
|
|
||||||
// flex: auto;
|
|
||||||
// }
|
|
||||||
.YJ-custom-base-dialog > .content .row > .col {
|
|
||||||
margin: 0 5px !important;
|
|
||||||
}
|
|
||||||
.crossPoint:hover {
|
|
||||||
color: rgba(var(--color-base1), 1);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -42,9 +42,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<!-- <template #footer>
|
||||||
<button @click="close">关闭</button>
|
<button @click="close">关闭</button>
|
||||||
</template>
|
</template> -->
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@ -10,32 +10,36 @@
|
|||||||
<template #content>
|
<template #content>
|
||||||
<el-form label-width="100px" :model="addForm" :rules="peopleRules" ref="peopleFormRef">
|
<el-form label-width="100px" :model="addForm" :rules="peopleRules" ref="peopleFormRef">
|
||||||
<el-form-item label="名称" prop="cameraName">
|
<el-form-item label="名称" prop="cameraName">
|
||||||
<el-input v-model="addForm.cameraName" clearable placeholder="请输入设备名称" />
|
<el-input v-model.trim="addForm.cameraName" clearable placeholder="请输入设备名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备IP" prop="ip">
|
<el-form-item label="设备IP" prop="ip">
|
||||||
<el-input v-model="addForm.ip" clearable placeholder="请输入设备IP地址"></el-input>
|
<el-input v-model.trim="addForm.ip" clearable placeholder="请输入设备IP地址"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备端口" prop="port">
|
<el-form-item label="设备端口" prop="port">
|
||||||
<el-input v-model="addForm.port" clearable placeholder="请输入设备端口"></el-input>
|
<el-input v-model.trim="addForm.port" clearable placeholder="请输入设备端口"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户名" prop="username">
|
<el-form-item label="用户名" prop="username">
|
||||||
<el-input v-model="addForm.username" clearable placeholder="请输入用户名"></el-input>
|
<el-input v-model.trim="addForm.username" clearable placeholder="请输入用户名"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="密码" prop="password">
|
<el-form-item label="密码" prop="password">
|
||||||
<el-input v-model="addForm.password" clearable placeholder="请输入密码"></el-input>
|
<el-input v-model.trim="addForm.password" clearable placeholder="请输入密码"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备类型" prop="type">
|
<el-form-item label="设备类型" prop="type">
|
||||||
<el-select v-model="addForm.type" filterable placeholder="请选择设备类型">
|
<el-select v-model.trim="addForm.type" filterable placeholder="请选择设备类型">
|
||||||
<el-option label="海康" value="海康"> </el-option>
|
<el-option label="海康" value="海康"> </el-option>
|
||||||
<el-option label="大华" value="大华"> </el-option>
|
<el-option label="大华" value="大华"> </el-option>
|
||||||
<!-- <el-option label="手动录入" value="3"> </el-option> -->
|
<!-- <el-option label="手动录入" value="3"> </el-option> -->
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="addForm.type === '3'" label="视频流地址" prop="flvUrl">
|
<el-form-item v-if="addForm.type === '3'" label="视频流地址" prop="flvUrl">
|
||||||
<el-input v-model="addForm.flvUrl" clearable placeholder="请输入视频流地址"></el-input>
|
<el-input
|
||||||
|
v-model.trim="addForm.flvUrl"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入视频流地址"
|
||||||
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="通道号" prop="channel">
|
<el-form-item label="通道号" prop="channel">
|
||||||
<el-input v-model="addForm.channel" clearable placeholder="请输入通道号"></el-input>
|
<el-input v-model.trim="addForm.channel" clearable placeholder="请输入通道号"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
@ -77,9 +81,38 @@ var addForm: any = ref({
|
|||||||
const peopleRules: any = reactive({
|
const peopleRules: any = reactive({
|
||||||
cameraName: [{ required: true, message: '请输入名称', trigger: 'blur' }],
|
cameraName: [{ required: true, message: '请输入名称', trigger: 'blur' }],
|
||||||
ip: [{ required: true, message: '请输入ip', trigger: 'blur' }],
|
ip: [{ required: true, message: '请输入ip', trigger: 'blur' }],
|
||||||
port: [{ required: true, message: '请输入设备端口号', trigger: 'blur' }],
|
port: [
|
||||||
|
{ required: true, message: '请输入设备端口号', trigger: 'blur' },
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (!value) {
|
||||||
|
callback(new Error('请输入设备端口'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const portNum = Number(value)
|
||||||
|
if (isNaN(portNum)) {
|
||||||
|
callback(new Error('端口号必须为数字'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (portNum < 1 || portNum > 65535) {
|
||||||
|
callback(new Error('端口号范围必须在1-65535之间'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Number.isInteger(portNum)) {
|
||||||
|
callback(new Error('端口号必须为整数'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
|
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
|
||||||
password: [{ required: true, message: '请channel', trigger: 'blur' }],
|
password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
|
||||||
type: [{ required: true, message: '请选择设备类型', trigger: 'blur' }],
|
type: [{ required: true, message: '请选择设备类型', trigger: 'blur' }],
|
||||||
channel: [{ required: true, message: '请输入通道号', trigger: 'blur' }]
|
channel: [{ required: true, message: '请输入通道号', trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
ref="peopleFormRef"
|
ref="peopleFormRef"
|
||||||
>
|
>
|
||||||
<el-form-item label="" prop="name">
|
<el-form-item label="" prop="name">
|
||||||
<el-input v-model="addForm.name" placeholder="请输入物资名称" clearable />
|
<el-input v-model.trim="addForm.name" placeholder="请输入物资名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
@ -86,6 +86,7 @@ var submitProtal = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
eventBus.on('openAddMaterial', (params) => {
|
eventBus.on('openAddMaterial', (params) => {
|
||||||
|
console.log(params, 'iuiuuiuiu')
|
||||||
addTitle.value = params.title
|
addTitle.value = params.title
|
||||||
if (addTitle.value != '添加物资') {
|
if (addTitle.value != '添加物资') {
|
||||||
addForm.value.name = params.data.name
|
addForm.value.name = params.data.name
|
||||||
|
|||||||
@ -45,11 +45,11 @@
|
|||||||
<textarea class="input link-edit" type="text" v-model="linkEditActive.url"></textarea>
|
<textarea class="input link-edit" type="text" v-model="linkEditActive.url"></textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="td" v-else>{{ item.url }}</div>
|
<div class="td" v-else>{{ item.url }}</div>
|
||||||
<div class="td" v-if="linkEditActive.index === index">
|
<div class="td operation" v-if="linkEditActive.index === index">
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="linkConfirmEdit(index)">{{ t('general.确认') }}</button>
|
<button style="width: 76px;flex: 0 0 76px" @click="linkConfirmEdit(index)">{{ t('general.确认') }}</button>
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="linkCancelEdit">{{ t('general.取消') }}</button>
|
<button style="width: 76px;flex: 0 0 76px" @click="linkCancelEdit">{{ t('general.取消') }}</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="td" v-else>
|
<div class="td operation" v-else>
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="linkEdit(index, item)">{{ t('general.编辑') }}</button>
|
<button style="width: 76px;flex: 0 0 76px" @click="linkEdit(index, item)">{{ t('general.编辑') }}</button>
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="linkDelete(index)">{{ t('general.删除') }}</button>
|
<button style="width: 76px;flex: 0 0 76px" @click="linkDelete(index)">{{ t('general.删除') }}</button>
|
||||||
</div>
|
</div>
|
||||||
@ -172,13 +172,57 @@
|
|||||||
<textarea class="input link-edit" type="text" v-model="vrEditActive.url"></textarea>
|
<textarea class="input link-edit" type="text" v-model="vrEditActive.url"></textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="td" v-else>{{ item.url }}</div>
|
<div class="td" v-else>{{ item.url }}</div>
|
||||||
<div class="td" v-if="vrEditActive.index === index">
|
<div class="td operation" v-if="vrEditActive.index === index">
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="vrConfirmEdit(index)">{{ t('general.确认') }}</button>
|
<button @click="vrConfirmEdit(index)">{{ t('general.确认') }}</button>
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="vrCancelEdit">{{ t('general.取消') }}</button>
|
<button @click="vrCancelEdit">{{ t('general.取消') }}</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="td" v-else>
|
<div class="td operation" v-else>
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="vrEdit(index, item)">{{ t('general.编辑') }}</button>
|
<button @click="vrEdit(index, item)">{{ t('general.编辑') }}</button>
|
||||||
<button style="width: 76px;flex: 0 0 76px" @click="vrDelete(index)">{{ t('general.删除') }}</button>
|
<button @click="vrDelete(index)">{{ t('general.删除') }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-empty" v-else>
|
||||||
|
<div class="empty-img"></div>
|
||||||
|
<p>{{ t('general.暂无数据') }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row attribute-content attribute-content-rtmp" v-show="attributeType === 'rtmp'">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">{{ t('general.添加链接') }}</span>
|
||||||
|
<div style="flex: 1; position: relative">
|
||||||
|
<input class="input rtmp_add" type="text" v-model="addRtmpInput" />
|
||||||
|
<i class="rtmp_add_btn" @click="_addRtmp"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="attribute-content attribute-content-rtmp" v-show="attributeType === 'rtmp'">
|
||||||
|
<div class="table">
|
||||||
|
<div class="table-head">
|
||||||
|
<div class="tr">
|
||||||
|
<div class="th">{{ t('general.名称') }}</div>
|
||||||
|
<div class="th">{{ t('general.链接') }}</div>
|
||||||
|
<div class="th">{{ t('general.操作') }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-body" v-if="attribute.rtmp && attribute.rtmp.content && attribute.rtmp.content.length > 0">
|
||||||
|
<div class="tr" v-for="(item, index) in attribute.rtmp.content">
|
||||||
|
<div class="td" v-if="rtmpEditActive.index === index">
|
||||||
|
<input class="input" type="text" v-model="rtmpEditActive.name" />
|
||||||
|
</div>
|
||||||
|
<div class="td" v-else>{{ item.name }}</div>
|
||||||
|
<div class="td" v-if="rtmpEditActive.index === index">
|
||||||
|
<textarea class="input link-edit" type="text" v-model="rtmpEditActive.url"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="td" v-else>{{ item.url }}</div>
|
||||||
|
<div class="td operation" v-if="rtmpEditActive.index === index">
|
||||||
|
<button @click="rtmpConfirmEdit(index)">{{ t('general.确认') }}</button>
|
||||||
|
<button @click="rtmpCancelEdit">{{ t('general.取消') }}</button>
|
||||||
|
</div>
|
||||||
|
<div class="td operation" v-else>
|
||||||
|
<button @click="rtmpEdit(index, item)">{{ t('general.编辑') }}</button>
|
||||||
|
<button @click="rtmpDelete(index)">{{ t('general.删除') }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -386,6 +430,11 @@ if (props.entityOptions.type === 'BillboardObject') {
|
|||||||
// value: '传感器',
|
// value: '传感器',
|
||||||
// key: 'sensor'
|
// key: 'sensor'
|
||||||
// },
|
// },
|
||||||
|
// {
|
||||||
|
// name: 'rtmp',
|
||||||
|
// value: 'rtmp',
|
||||||
|
// key: 'rtmp'
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
name: '全景图',
|
name: '全景图',
|
||||||
value: '全景图',
|
value: '全景图',
|
||||||
@ -404,8 +453,10 @@ if (props.entityOptions.type === 'BillboardObject') {
|
|||||||
|
|
||||||
const addlinkInput = ref('')
|
const addlinkInput = ref('')
|
||||||
const addvrInput = ref('')
|
const addvrInput = ref('')
|
||||||
|
const addRtmpInput = ref('')
|
||||||
const linkEditActive: any = ref({})
|
const linkEditActive: any = ref({})
|
||||||
const vrEditActive: any = ref({})
|
const vrEditActive: any = ref({})
|
||||||
|
const rtmpEditActive: any = ref({})
|
||||||
|
|
||||||
const openRichTextEditor = () => {
|
const openRichTextEditor = () => {
|
||||||
eventBus.emit('openRichText', props.entityOptions.name, richTextContent.value, (val: any) => {
|
eventBus.emit('openRichText', props.entityOptions.name, richTextContent.value, (val: any) => {
|
||||||
@ -571,6 +622,38 @@ const vrCancelEdit = () => {
|
|||||||
vrEditActive.value = {}
|
vrEditActive.value = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const _addRtmp = () => {
|
||||||
|
if (addRtmpInput.value) {
|
||||||
|
let link = {
|
||||||
|
name: t('general.rtmp'),
|
||||||
|
url: addRtmpInput.value,
|
||||||
|
id: Date.now()
|
||||||
|
}
|
||||||
|
attribute.value.rtmp.content.push(link)
|
||||||
|
addRtmpInput.value = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const rtmpEdit = (index: any, item: { name: any; url: any; }) => {
|
||||||
|
let active = {
|
||||||
|
index: index,
|
||||||
|
name: item.name,
|
||||||
|
url: item.url,
|
||||||
|
id: item.id,
|
||||||
|
}
|
||||||
|
rtmpEditActive.value = active
|
||||||
|
}
|
||||||
|
const rtmpDelete = (index: any) => {
|
||||||
|
attribute.value.rtmp.content.splice(index, 1)
|
||||||
|
}
|
||||||
|
const rtmpConfirmEdit = (index: string | number) => {
|
||||||
|
attribute.value.rtmp.content[index] = rtmpEditActive.value
|
||||||
|
rtmpEditActive.value = {}
|
||||||
|
}
|
||||||
|
const rtmpCancelEdit = () => {
|
||||||
|
rtmpEditActive.value = {}
|
||||||
|
}
|
||||||
|
|
||||||
const attributeChange = () => { }
|
const attributeChange = () => { }
|
||||||
|
|
||||||
const changeAttributeGoods = (item) => {
|
const changeAttributeGoods = (item) => {
|
||||||
@ -633,7 +716,9 @@ const changeAttributeCamera = (e) => {
|
|||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .th:nth-child(1),
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .th:nth-child(1),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td:nth-child(1),
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td:nth-child(1),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .th:nth-child(1),
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .th:nth-child(1),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td:nth-child(1) {
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td:nth-child(1),
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .tr .th:nth-child(1),
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .tr .td:nth-child(1) {
|
||||||
width: 164px;
|
width: 164px;
|
||||||
flex: 0 0 164px;
|
flex: 0 0 164px;
|
||||||
}
|
}
|
||||||
@ -641,7 +726,9 @@ const changeAttributeCamera = (e) => {
|
|||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .th:nth-child(2),
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .th:nth-child(2),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td:nth-child(2),
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td:nth-child(2),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .th:nth-child(2),
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .th:nth-child(2),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td:nth-child(2) {
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td:nth-child(2),
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .tr .th:nth-child(2),
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .tr .td:nth-child(2) {
|
||||||
width: 226px;
|
width: 226px;
|
||||||
flex: 0 0 226px;
|
flex: 0 0 226px;
|
||||||
}
|
}
|
||||||
@ -649,7 +736,9 @@ const changeAttributeCamera = (e) => {
|
|||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td:nth-child(3) {
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
|
||||||
flex: 0 0 150px;
|
flex: 0 0 150px;
|
||||||
width: 150px;
|
width: 150px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@ -657,14 +746,17 @@ const changeAttributeCamera = (e) => {
|
|||||||
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-link .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-link .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-link .table .tr .td:nth-child(3),
|
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-link .table .tr .td:nth-child(3),
|
||||||
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-vr .table .tr .th:nth-child(3),
|
||||||
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-vr .table .tr .td:nth-child(3) {
|
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-vr .table .tr .td:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
|
||||||
|
.YJ-custom-base-dialog.dialog-en>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
|
||||||
flex: 0 0 190px;
|
flex: 0 0 190px;
|
||||||
width: 190px;
|
width: 190px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td .input-group .input,
|
.YJ-custom-base-dialog>.content .attribute-content-link .table .tr .td .input-group .input,
|
||||||
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td .input-group .input {
|
.YJ-custom-base-dialog>.content .attribute-content-vr .table .tr .td .input-group .input,
|
||||||
|
.YJ-custom-base-dialog>.content .attribute-content-rtmp .table .tr .td .input-group .input {
|
||||||
border-radius: 5px 0 0 5px;
|
border-radius: 5px 0 0 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -86,7 +86,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
<div class="div-item">
|
<div class="div-item">
|
||||||
<!-- <setStyle type="点" :sourceType="sourceType" :entityOptions="entityOptions"></setStyle> -->
|
<setStyle type="点" :sourceType="sourceType" :entityOptions="entityOptions"></setStyle>
|
||||||
<div class="row" style="padding-left: 12px;">
|
<div class="row" style="padding-left: 12px;">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label" style="flex: none">{{ t('dialog.point.icon.show') }}</span>
|
<span class="label" style="flex: none">{{ t('dialog.point.icon.show') }}</span>
|
||||||
@ -339,6 +339,7 @@
|
|||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="custom-divider"></span>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div style="position: absolute; left: 24px; display: flex">
|
<div style="position: absolute; left: 24px; display: flex">
|
||||||
@ -467,47 +468,48 @@ const open = async (id, type) => {
|
|||||||
entityOptions.value.labelColor = 'rgba(255,255,255,1)'
|
entityOptions.value.labelColor = 'rgba(255,255,255,1)'
|
||||||
} //点击清空按钮事件回调
|
} //点击清空按钮事件回调
|
||||||
})
|
})
|
||||||
let iconTextBold = document.getElementsByClassName('bold')[0]
|
|
||||||
let iconTextItalic = document.getElementsByClassName('italic')[0]
|
// let iconTextBold = document.getElementsByClassName('bold')[0]
|
||||||
let iconTextLineBottom = document.getElementsByClassName('line-bottom')[0]
|
// let iconTextItalic = document.getElementsByClassName('italic')[0]
|
||||||
let iconTextLineThrough = document.getElementsByClassName('line-through')[0]
|
// let iconTextLineBottom = document.getElementsByClassName('line-bottom')[0]
|
||||||
let tip: any = document.getElementsByClassName('customized-tip')[0]
|
// let iconTextLineThrough = document.getElementsByClassName('line-through')[0]
|
||||||
iconTextBold.addEventListener('mouseleave', (event:any) => {
|
// let tip: any = document.getElementsByClassName('customized-tip')[0]
|
||||||
tip.style.display = 'none'
|
// iconTextBold.addEventListener('mouseleave', (event:any) => {
|
||||||
})
|
// tip.style.display = 'none'
|
||||||
iconTextBold.addEventListener('mousemove', (event:any) => {
|
// })
|
||||||
tip.innerHTML = t('general.text.bold')
|
// iconTextBold.addEventListener('mousemove', (event:any) => {
|
||||||
tip.style.left = (event.layerX + 8) + 'px'
|
// tip.innerHTML = t('general.text.bold')
|
||||||
tip.style.top = (event.layerY + 18) + 'px'
|
// tip.style.left = (event.layerX + 8) + 'px'
|
||||||
tip.style.display = 'block'
|
// tip.style.top = (event.layerY + 18) + 'px'
|
||||||
})
|
// tip.style.display = 'block'
|
||||||
iconTextItalic.addEventListener('mouseleave', (event:any) => {
|
// })
|
||||||
tip.style.display = 'none'
|
// iconTextItalic.addEventListener('mouseleave', (event:any) => {
|
||||||
})
|
// tip.style.display = 'none'
|
||||||
iconTextItalic.addEventListener('mousemove', (event:any) => {
|
// })
|
||||||
tip.innerHTML = t('general.text.italic')
|
// iconTextItalic.addEventListener('mousemove', (event:any) => {
|
||||||
tip.style.left = (event.layerX + 8) + 'px'
|
// tip.innerHTML = t('general.text.italic')
|
||||||
tip.style.top = (event.layerY + 18) + 'px'
|
// tip.style.left = (event.layerX + 8) + 'px'
|
||||||
tip.style.display = 'block'
|
// tip.style.top = (event.layerY + 18) + 'px'
|
||||||
})
|
// tip.style.display = 'block'
|
||||||
iconTextLineBottom.addEventListener('mouseleave', (event:any) => {
|
// })
|
||||||
tip.style.display = 'none'
|
// iconTextLineBottom.addEventListener('mouseleave', (event:any) => {
|
||||||
})
|
// tip.style.display = 'none'
|
||||||
iconTextLineBottom.addEventListener('mousemove', (event:any) => {
|
// })
|
||||||
tip.innerHTML = t('general.text.underline')
|
// iconTextLineBottom.addEventListener('mousemove', (event:any) => {
|
||||||
tip.style.left = (event.layerX + 8) + 'px'
|
// tip.innerHTML = t('general.text.underline')
|
||||||
tip.style.top = (event.layerY + 18) + 'px'
|
// tip.style.left = (event.layerX + 8) + 'px'
|
||||||
tip.style.display = 'block'
|
// tip.style.top = (event.layerY + 18) + 'px'
|
||||||
})
|
// tip.style.display = 'block'
|
||||||
iconTextLineThrough.addEventListener('mouseleave', (event:any) => {
|
// })
|
||||||
tip.style.display = 'none'
|
// iconTextLineThrough.addEventListener('mouseleave', (event:any) => {
|
||||||
})
|
// tip.style.display = 'none'
|
||||||
iconTextLineThrough.addEventListener('mousemove', (event:any) => {
|
// })
|
||||||
tip.innerHTML = t('general.text.strikethrough')
|
// iconTextLineThrough.addEventListener('mousemove', (event:any) => {
|
||||||
tip.style.left = (event.layerX + 8) + 'px'
|
// tip.innerHTML = t('general.text.strikethrough')
|
||||||
tip.style.top = (event.layerY + 18) + 'px'
|
// tip.style.left = (event.layerX + 8) + 'px'
|
||||||
tip.style.display = 'block'
|
// tip.style.top = (event.layerY + 18) + 'px'
|
||||||
})
|
// tip.style.display = 'block'
|
||||||
|
// })
|
||||||
}
|
}
|
||||||
|
|
||||||
const closeCallback = () => {
|
const closeCallback = () => {
|
||||||
@ -698,6 +700,7 @@ const confirm = () => {
|
|||||||
baseDialog.value?.close()
|
baseDialog.value?.close()
|
||||||
let params = structuredClone(that.options)
|
let params = structuredClone(that.options)
|
||||||
delete params.host
|
delete params.host
|
||||||
|
delete params.attribute.rtmp
|
||||||
let params2 = {
|
let params2 = {
|
||||||
id: params.id,
|
id: params.id,
|
||||||
sourceName: params.name,
|
sourceName: params.name,
|
||||||
@ -812,10 +815,18 @@ defineExpose({
|
|||||||
.attribute-content-link .table .tr .th:nth-child(2),
|
.attribute-content-link .table .tr .th:nth-child(2),
|
||||||
.attribute-content-link .table .tr .td:nth-child(2),
|
.attribute-content-link .table .tr .td:nth-child(2),
|
||||||
.attribute-content-vr .table .tr .th:nth-child(2),
|
.attribute-content-vr .table .tr .th:nth-child(2),
|
||||||
.attribute-content-vr .table .tr .td:nth-child(2) {
|
.attribute-content-vr .table .tr .td:nth-child(2),
|
||||||
|
.attribute-content-rtmp .table .tr .th:nth-child(2),
|
||||||
|
.attribute-content-rtmp .table .tr .td:nth-child(2) {
|
||||||
width: 284px;
|
width: 284px;
|
||||||
flex: 0 0 284px;
|
flex: 0 0 284px;
|
||||||
}
|
}
|
||||||
|
.attribute-content-link .table .tr .td.operation button,
|
||||||
|
.attribute-content-vr .table .tr .td.operation button,
|
||||||
|
.attribute-content-rtmp .table .tr .td.operation button {
|
||||||
|
width: 76px !important;
|
||||||
|
flex: 0 0 76px !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog
|
<Dialog ref="baseDialog" title="曲线标注" left="180px" top="100px" className="polyline" :closeCallback="closeCallback">
|
||||||
ref="baseDialog"
|
|
||||||
title="曲线标注"
|
|
||||||
left="180px"
|
|
||||||
top="100px"
|
|
||||||
className="polyline"
|
|
||||||
:closeCallback="closeCallback"
|
|
||||||
>
|
|
||||||
<template #content>
|
<template #content>
|
||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
<div class="div-item">
|
<div class="div-item">
|
||||||
@ -35,6 +28,84 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="custom-divider"></span>
|
||||||
|
<div class="div-item">
|
||||||
|
<setStyle type="折线" :sourceType="sourceType" :entityOptions="entityOptions"></setStyle>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">线条颜色</span>
|
||||||
|
<div class="color" ref="colorRef"></div>
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 33%">
|
||||||
|
<span class="label">线条宽度</span>
|
||||||
|
<div class="input-number input-number-unit-1" style="width: 80px">
|
||||||
|
<input class="input" type="number" title="" min="1" max="999" @input="$handleInputLimit"
|
||||||
|
v-model="entityOptions.lineWidth" />
|
||||||
|
<span class="unit">px</span>
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col input-select-line-type-box" style="flex: 0 0 37%">
|
||||||
|
<span class="label">线条形式</span>
|
||||||
|
<el-select class="input input-select input-select-line-type" style="margin-left: 20px"
|
||||||
|
v-model="entityOptions.lineType" @change="lineTypechange">
|
||||||
|
<el-option v-for="item in lineTypeData" :key="item.key" :label="item.name" :value="item.key">
|
||||||
|
<i class="yj-custom-icon" :class="item.icon"></i>
|
||||||
|
{{ item.name }}
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">线段缓冲</span>
|
||||||
|
<input class="btn-switch" type="checkbox" v-model="entityOptions.extend" />
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 33%">
|
||||||
|
<span class="label">缓冲宽度</span>
|
||||||
|
<div class="input-number input-number-unit-1" style="width: 80px">
|
||||||
|
<input class="input" type="number" title="" min="0" data-min="0.01" max="999999"
|
||||||
|
@input="$handleInputLimit" v-model="entityOptions.extendWidth" />
|
||||||
|
<span class="unit">m</span>
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 37%">
|
||||||
|
<span class="label">缓冲颜色</span>
|
||||||
|
<div class="extendColor" ref="extendColorRef"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" v-show="entityOptions.lineType > 2 && entityOptions.lineType < 13">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">首尾反向</span>
|
||||||
|
<input class="btn-switch" type="checkbox" v-model="entityOptions.rotate" />
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 33%">
|
||||||
|
<span class="label">流动速率</span>
|
||||||
|
<div class="input-number input-number-unit-1" style="width: 80px">
|
||||||
|
<input class="input" type="number" title="" min="0" max="999999" step="1" @input="$handleInputLimit"
|
||||||
|
v-model="entityOptions.speed" />
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col" style="flex: 0 0 37%">
|
||||||
|
<span class="label lineSpace" v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5">线条间距</span>
|
||||||
|
<div class="input-number input-number-unit-1 lineSpace" style="width: 80px"
|
||||||
|
v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5">
|
||||||
|
<input class="input" type="number" title="" min="0" max="4.5" step="0.1" @input="$handleInputLimit"
|
||||||
|
v-model="entityOptions.space" />
|
||||||
|
<span class="unit">倍</span>
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">首尾相连</span>
|
||||||
|
<input class="btn-switch" type="checkbox" v-model="entityOptions.noseToTail" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="div-item">
|
<div class="div-item">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<el-tabs v-model="activeName">
|
<el-tabs v-model="activeName">
|
||||||
@ -45,46 +116,22 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col height-mode-box">
|
<div class="col height-mode-box">
|
||||||
<span class="label" style="flex: 0 0 56px">高度模式</span>
|
<span class="label" style="flex: 0 0 56px">高度模式</span>
|
||||||
<el-select
|
<el-select class="input input-select height-mode-scelect" style="width: 155px; margin-left: 20px"
|
||||||
class="input input-select height-mode-scelect"
|
v-model="heightMode" @change="heightModeChange" placeholder="请选择">
|
||||||
style="width: 155px; margin-left: 20px"
|
<el-option v-for="item in heightModeData" :key="item.key" :label="item.name" :value="item.key">
|
||||||
v-model="heightMode"
|
|
||||||
@change="heightModeChange"
|
|
||||||
placeholder="请选择"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in heightModeData"
|
|
||||||
:key="item.key"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.key"
|
|
||||||
>
|
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">Z值统一增加</span>
|
<span class="label">Z值统一增加</span>
|
||||||
<div
|
<div class="input-number input-number-unit-1 height-box" :class="{ disabled: heightMode == 2 }">
|
||||||
class="input-number input-number-unit-1 height-box"
|
<input class="input height" type="number" title="" min="-9999999" max="999999999"
|
||||||
:class="{ disabled: heightMode == 2 }"
|
@input="$handleInputLimit" v-model="height" />
|
||||||
>
|
|
||||||
<input
|
|
||||||
class="input height"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="-9999999"
|
|
||||||
max="999999999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="height"
|
|
||||||
/>
|
|
||||||
<span class="unit">m</span>
|
<span class="unit">m</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button class="confirm height-confirm" style="margin-left: 5px" @click="heightConfirm"
|
||||||
class="confirm height-confirm"
|
:disabled="heightMode == 2">
|
||||||
style="margin-left: 5px"
|
|
||||||
@click="heightConfirm"
|
|
||||||
:disabled="heightMode == 2"
|
|
||||||
>
|
|
||||||
应用
|
应用
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -103,42 +150,21 @@
|
|||||||
<div class="tr" v-for="(item, i) in entityOptions.options.positions" :key="i">
|
<div class="tr" v-for="(item, i) in entityOptions.options.positions" :key="i">
|
||||||
<div class="td">{{ i + 1 }}</div>
|
<div class="td">{{ i + 1 }}</div>
|
||||||
<div class="td lng align-center" @dblclick="inputDblclick($event, i, 'lng')">
|
<div class="td lng align-center" @dblclick="inputDblclick($event, i, 'lng')">
|
||||||
<input
|
<input class="input" @blur="inputBlurCallBack($event, i, 'lng', 8)" type="number"
|
||||||
class="input"
|
v-model="item.lng" min="-180" max="180" @input="$handleInputLimit"
|
||||||
@blur="inputBlurCallBack($event, i, 'lng', 8)"
|
v-if="activeTd.index == i && activeTd.name == 'lng'" />
|
||||||
type="number"
|
|
||||||
v-model="item.lng"
|
|
||||||
min="-180"
|
|
||||||
max="180"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-if="activeTd.index == i && activeTd.name == 'lng'"
|
|
||||||
/>
|
|
||||||
<span style="pointer-events: none" v-else>{{ item.lng.toFixed(8) }}</span>
|
<span style="pointer-events: none" v-else>{{ item.lng.toFixed(8) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="td lat align-center" @dblclick="inputDblclick($event, i, 'lat')">
|
<div class="td lat align-center" @dblclick="inputDblclick($event, i, 'lat')">
|
||||||
<input
|
<input class="input" @blur="inputBlurCallBack($event, i, 'lat', 8)" type="number"
|
||||||
class="input"
|
v-model="item.lat" min="-180" max="180" @input="$handleInputLimit"
|
||||||
@blur="inputBlurCallBack($event, i, 'lat', 8)"
|
v-if="activeTd.index == i && activeTd.name == 'lat'" />
|
||||||
type="number"
|
|
||||||
v-model="item.lat"
|
|
||||||
min="-180"
|
|
||||||
max="180"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-if="activeTd.index == i && activeTd.name == 'lat'"
|
|
||||||
/>
|
|
||||||
<span style="pointer-events: none" v-else>{{ item.lat.toFixed(8) }}</span>
|
<span style="pointer-events: none" v-else>{{ item.lat.toFixed(8) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="td alt align-center" @dblclick="inputDblclick($event, i, 'alt')">
|
<div class="td alt align-center" @dblclick="inputDblclick($event, i, 'alt')">
|
||||||
<input
|
<input class="input" @blur="inputBlurCallBack($event, i, 'alt', 2)" type="number"
|
||||||
class="input"
|
v-model="item.alt" min="-9999999" max="999999999" @input="$handleInputLimit"
|
||||||
@blur="inputBlurCallBack($event, i, 'alt', 2)"
|
v-if="activeTd.index == i && activeTd.name == 'alt'" />
|
||||||
type="number"
|
|
||||||
v-model="item.alt"
|
|
||||||
min="-9999999"
|
|
||||||
max="999999999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-if="activeTd.index == i && activeTd.name == 'alt'"
|
|
||||||
/>
|
|
||||||
<span style="pointer-events: none" v-else>{{ item.alt.toFixed(2) }}</span>
|
<span style="pointer-events: none" v-else>{{ item.alt.toFixed(2) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -146,130 +172,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="线条风格" name="3">
|
<el-tab-pane label="标签风格" name="3">
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">线条颜色</span>
|
|
||||||
<div class="color" ref="colorRef"></div>
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 33%">
|
|
||||||
<span class="label">线条宽度</span>
|
|
||||||
<div class="input-number input-number-unit-1" style="width: 80px">
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="1"
|
|
||||||
max="999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.lineWidth"
|
|
||||||
/>
|
|
||||||
<span class="unit">px</span>
|
|
||||||
<span class="arrow"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col input-select-line-type-box" style="flex: 0 0 37%">
|
|
||||||
<span class="label">线条形式</span>
|
|
||||||
<el-select
|
|
||||||
class="input input-select input-select-line-type"
|
|
||||||
style="margin-left: 20px"
|
|
||||||
v-model="entityOptions.lineType"
|
|
||||||
@change="lineTypechange"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in lineTypeData"
|
|
||||||
:key="item.key"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.key"
|
|
||||||
>
|
|
||||||
<i class="yj-custom-icon" :class="item.icon"></i>
|
|
||||||
{{ item.name }}
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">线段缓冲</span>
|
|
||||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.extend" />
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 33%">
|
|
||||||
<span class="label">缓冲宽度</span>
|
|
||||||
<div class="input-number input-number-unit-1" style="width: 80px">
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="0"
|
|
||||||
data-min="0.01"
|
|
||||||
max="999999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.extendWidth"
|
|
||||||
/>
|
|
||||||
<span class="unit">m</span>
|
|
||||||
<span class="arrow"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 37%">
|
|
||||||
<span class="label">缓冲颜色</span>
|
|
||||||
<div class="extendColor" ref="extendColorRef"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row" v-show="entityOptions.lineType > 2 && entityOptions.lineType < 13">
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">首尾反向</span>
|
|
||||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.rotate" />
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 33%">
|
|
||||||
<span class="label">流动速率</span>
|
|
||||||
<div class="input-number input-number-unit-1" style="width: 80px">
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="0"
|
|
||||||
max="999999"
|
|
||||||
step="1"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.speed"
|
|
||||||
/>
|
|
||||||
<span class="arrow"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" style="flex: 0 0 37%">
|
|
||||||
<span
|
|
||||||
class="label lineSpace"
|
|
||||||
v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5"
|
|
||||||
>线条间距</span
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="input-number input-number-unit-1 lineSpace"
|
|
||||||
style="width: 80px"
|
|
||||||
v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="0"
|
|
||||||
max="4.5"
|
|
||||||
step="0.1"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.space"
|
|
||||||
/>
|
|
||||||
<span class="unit">倍</span>
|
|
||||||
<span class="arrow"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">首尾相连</span>
|
|
||||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.noseToTail" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="标签风格" name="4">
|
|
||||||
<labelStyle type="线" :entityOptions="entityOptions"></labelStyle>
|
<labelStyle type="线" :entityOptions="entityOptions"></labelStyle>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
@ -280,7 +183,8 @@
|
|||||||
<div style="position: absolute; left: 24px; display: flex">
|
<div style="position: absolute; left: 24px; display: flex">
|
||||||
<button @click="nodeEdit">
|
<button @click="nodeEdit">
|
||||||
<svg class="icon-edit">
|
<svg class="icon-edit">
|
||||||
<use xlink:href="#yj-icon-edit"></use></svg>二次编辑
|
<use xlink:href="#yj-icon-edit"></use>
|
||||||
|
</svg>二次编辑
|
||||||
</button>
|
</button>
|
||||||
<button style="margin-left: 10px" @click="translate">平移</button>
|
<button style="margin-left: 10px" @click="translate">平移</button>
|
||||||
</div>
|
</div>
|
||||||
@ -300,6 +204,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
|
|||||||
import Dialog from '@/components/dialog/baseDialog.vue'
|
import Dialog from '@/components/dialog/baseDialog.vue'
|
||||||
import { getFontList } from './fontSelect'
|
import { getFontList } from './fontSelect'
|
||||||
import attribute from './attribute.vue'
|
import attribute from './attribute.vue'
|
||||||
|
import setStyle from './defaultStyle/index.vue'
|
||||||
import labelStyle from './labelStyle.vue'
|
import labelStyle from './labelStyle.vue'
|
||||||
import { useTreeNode } from '@/views/components/tree/hooks/treeNode'
|
import { useTreeNode } from '@/views/components/tree/hooks/treeNode'
|
||||||
|
|
||||||
@ -309,6 +214,7 @@ const { cusUpdateNode, getSelectedNodes, cusRemoveNode } = useTreeNode()
|
|||||||
const baseDialog: any = ref(null)
|
const baseDialog: any = ref(null)
|
||||||
const eventBus: any = inject('bus')
|
const eventBus: any = inject('bus')
|
||||||
|
|
||||||
|
const sourceType = ref('')
|
||||||
const length = ref(0)
|
const length = ref(0)
|
||||||
const lengthUnit = ref('m')
|
const lengthUnit = ref('m')
|
||||||
const fontList = ref(getFontList())
|
const fontList = ref(getFontList())
|
||||||
@ -425,8 +331,9 @@ const wordsName = ref(0)
|
|||||||
let originalOptions
|
let originalOptions
|
||||||
let that
|
let that
|
||||||
|
|
||||||
const open = async (id) => {
|
const open = async (id, type) => {
|
||||||
that = window.earth.entityMap.get(id)
|
that = window.earth.entityMap.get(id)
|
||||||
|
sourceType.value = type
|
||||||
originalOptions = structuredClone(that.options)
|
originalOptions = structuredClone(that.options)
|
||||||
entityOptions.value = that
|
entityOptions.value = that
|
||||||
wordsName.value = Number(entityOptions.value.wordsName)
|
wordsName.value = Number(entityOptions.value.wordsName)
|
||||||
|
|||||||
@ -0,0 +1,126 @@
|
|||||||
|
<template>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<span class="lable-left-line">新增{{ props.type }}标签风格设置</span>
|
||||||
|
<div style="display: flex;align-items: center;margin-right: 30px;">
|
||||||
|
<button style="margin-right: 10px;" @click="setInitialStyle">初始风格</button>
|
||||||
|
<el-tooltip effect="customized" :hide-after="0" placement="top">
|
||||||
|
<template #content>初始系统默认的{{ props.type }}标签风格<br />点击“初始风格”按钮,将{{ props.type }}系统初始风格设置为新增{{ props.type
|
||||||
|
}}的标签风格</template>
|
||||||
|
<svg class="icon-prompt">
|
||||||
|
<use xlink:href="#icon-prompt"></use>
|
||||||
|
</svg>
|
||||||
|
</el-tooltip>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div style="display: flex;align-items: center;">
|
||||||
|
<button style="margin-right: 10px;" @click="setCurrentStyle">当前风格</button>
|
||||||
|
<el-tooltip effect="customized" :hide-after="0" placement="top">
|
||||||
|
<template #content>当前面板设置的{{ props.type }}标签风格<br />点击“当前风格”按钮,将{{ props.type }}当前面板风格设置为新增{{ props.type
|
||||||
|
}}的标签风格</template>
|
||||||
|
<svg class="icon-prompt">
|
||||||
|
<use xlink:href="#icon-prompt"></use>
|
||||||
|
</svg>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { getdefaultLabelStyle } from './style'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
sourceType: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
entityOptions: {
|
||||||
|
type: Object,
|
||||||
|
default: {}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const setInitialStyle = () => {
|
||||||
|
let style = getdefaultLabelStyle(props.sourceType)
|
||||||
|
let defaultStyle = JSON.parse(localStorage.getItem('defaultStyle') || '{}')
|
||||||
|
defaultStyle[props.sourceType] = style
|
||||||
|
localStorage.setItem('defaultStyle', JSON.stringify(defaultStyle))
|
||||||
|
ElMessage({
|
||||||
|
message: `新增${props.type}风格设置成功!`,
|
||||||
|
type: "success",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const setCurrentStyle = () => {
|
||||||
|
let options = props.entityOptions.options
|
||||||
|
let defaultStyle = JSON.parse(localStorage.getItem('defaultStyle') || '{}')
|
||||||
|
switch (props.sourceType) {
|
||||||
|
case 'point':
|
||||||
|
defaultStyle[props.sourceType] = {
|
||||||
|
billboard: {
|
||||||
|
show: options.billboard.show,
|
||||||
|
image: options.billboard.image,
|
||||||
|
scale: options.billboard.scale,
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
show: options.label.show,
|
||||||
|
fontSize: options.label.fontSize,
|
||||||
|
color: options.label.color,
|
||||||
|
fontFamily: options.label.fontFamily,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'line':
|
||||||
|
defaultStyle[props.sourceType] = {
|
||||||
|
color: options.color,
|
||||||
|
width: options.width,
|
||||||
|
type: options.type,
|
||||||
|
noseToTail: options.noseToTail,
|
||||||
|
smooth: options.smooth,
|
||||||
|
extend: options.extend,
|
||||||
|
extendWidth: options.extendWidth,
|
||||||
|
extendColor: options.extendColor,
|
||||||
|
rotate: options.rotate,
|
||||||
|
speed: options.speed,
|
||||||
|
space: options.space,
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'curve':
|
||||||
|
defaultStyle[props.sourceType] = {
|
||||||
|
color: options.color,
|
||||||
|
width: options.width,
|
||||||
|
type: options.type,
|
||||||
|
noseToTail: options.noseToTail,
|
||||||
|
extend: options.extend,
|
||||||
|
extendWidth: options.extendWidth,
|
||||||
|
extendColor: options.extendColor,
|
||||||
|
rotate: options.rotate,
|
||||||
|
speed: options.speed,
|
||||||
|
space: options.space,
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
localStorage.setItem('defaultStyle', JSON.stringify(defaultStyle))
|
||||||
|
ElMessage({
|
||||||
|
message: `新增${props.type}风格设置成功!`,
|
||||||
|
type: "success",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.lable-left-line {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-prompt {
|
||||||
|
fill: rgba(241, 108, 85, 1) !important;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
let defaultLabelStyle = {
|
||||||
|
point: {
|
||||||
|
},
|
||||||
|
line: {
|
||||||
|
},
|
||||||
|
curve: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//@ts-ignore
|
||||||
|
export const getdefaultLabelStyle = (type) => {
|
||||||
|
return (type ? defaultLabelStyle[type] : defaultLabelStyle)
|
||||||
|
}
|
||||||
@ -4,9 +4,9 @@
|
|||||||
<span class="lable-left-line">新增{{ props.type }}风格设置</span>
|
<span class="lable-left-line">新增{{ props.type }}风格设置</span>
|
||||||
<div style="display: flex;align-items: center;margin-right: 30px;">
|
<div style="display: flex;align-items: center;margin-right: 30px;">
|
||||||
<button style="margin-right: 10px;" @click="setInitialStyle">初始风格</button>
|
<button style="margin-right: 10px;" @click="setInitialStyle">初始风格</button>
|
||||||
<el-tooltip
|
<el-tooltip effect="customized" :hide-after="0" placement="top">
|
||||||
effect="customized" :hide-after="0" placement="top">
|
<template #content>初始系统默认的{{ props.type }}风格<br />点击“初始风格”按钮,将{{ props.type }}系统初始风格设置为新增{{ props.type
|
||||||
<template #content>初始系统默认的{{props.type}}风格<br />点击“初始风格”按钮,将{{props.type}}系统初始风格设置为新增{{props.type}}风格</template>
|
}}风格</template>
|
||||||
<svg class="icon-prompt">
|
<svg class="icon-prompt">
|
||||||
<use xlink:href="#icon-prompt"></use>
|
<use xlink:href="#icon-prompt"></use>
|
||||||
</svg>
|
</svg>
|
||||||
@ -14,10 +14,10 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex;align-items: center;">
|
<div style="display: flex;align-items: center;">
|
||||||
<button style="margin-right: 10px;">当前风格</button>
|
<button style="margin-right: 10px;" @click="setCurrentStyle">当前风格</button>
|
||||||
<el-tooltip
|
<el-tooltip effect="customized" :hide-after="0" placement="top">
|
||||||
effect="customized" :hide-after="0" placement="top">
|
<template #content>当前面板设置的{{ props.type }}风格<br />点击“当前风格”按钮,将{{ props.type }}当前面板风格设置为新增{{ props.type
|
||||||
<template #content>当前面板设置的{{props.type}}风格<br />点击“当前风格”按钮,将{{props.type}}当前面板风格设置为新增{{props.type}}风格</template>
|
}}风格</template>
|
||||||
<svg class="icon-prompt">
|
<svg class="icon-prompt">
|
||||||
<use xlink:href="#icon-prompt"></use>
|
<use xlink:href="#icon-prompt"></use>
|
||||||
</svg>
|
</svg>
|
||||||
@ -50,6 +50,65 @@ const setInitialStyle = () => {
|
|||||||
let defaultStyle = JSON.parse(localStorage.getItem('defaultStyle') || '{}')
|
let defaultStyle = JSON.parse(localStorage.getItem('defaultStyle') || '{}')
|
||||||
defaultStyle[props.sourceType] = style
|
defaultStyle[props.sourceType] = style
|
||||||
localStorage.setItem('defaultStyle', JSON.stringify(defaultStyle))
|
localStorage.setItem('defaultStyle', JSON.stringify(defaultStyle))
|
||||||
|
ElMessage({
|
||||||
|
message: `新增${props.type}风格设置成功!`,
|
||||||
|
type: "success",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const setCurrentStyle = () => {
|
||||||
|
let options = props.entityOptions.options
|
||||||
|
let defaultStyle = JSON.parse(localStorage.getItem('defaultStyle') || '{}')
|
||||||
|
switch (props.sourceType) {
|
||||||
|
case 'point':
|
||||||
|
defaultStyle[props.sourceType] = {
|
||||||
|
billboard: {
|
||||||
|
show: options.billboard.show,
|
||||||
|
image: options.billboard.image,
|
||||||
|
scale: options.billboard.scale,
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
show: options.label.show,
|
||||||
|
fontSize: options.label.fontSize,
|
||||||
|
color: options.label.color,
|
||||||
|
fontFamily: options.label.fontFamily,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'line':
|
||||||
|
defaultStyle[props.sourceType] = {
|
||||||
|
color: options.color,
|
||||||
|
width: options.width,
|
||||||
|
type: options.type,
|
||||||
|
noseToTail: options.noseToTail,
|
||||||
|
smooth: options.smooth,
|
||||||
|
extend: options.extend,
|
||||||
|
extendWidth: options.extendWidth,
|
||||||
|
extendColor: options.extendColor,
|
||||||
|
rotate: options.rotate,
|
||||||
|
speed: options.speed,
|
||||||
|
space: options.space,
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'curve':
|
||||||
|
defaultStyle[props.sourceType] = {
|
||||||
|
color: options.color,
|
||||||
|
width: options.width,
|
||||||
|
type: options.type,
|
||||||
|
noseToTail: options.noseToTail,
|
||||||
|
extend: options.extend,
|
||||||
|
extendWidth: options.extendWidth,
|
||||||
|
extendColor: options.extendColor,
|
||||||
|
rotate: options.rotate,
|
||||||
|
speed: options.speed,
|
||||||
|
space: options.space,
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
localStorage.setItem('defaultStyle', JSON.stringify(defaultStyle))
|
||||||
|
ElMessage({
|
||||||
|
message: `新增${props.type}风格设置成功!`,
|
||||||
|
type: "success",
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -3,11 +3,9 @@ let availablePort = 55110
|
|||||||
ipcRenderer.invoke('get-available-port').then((port) => {
|
ipcRenderer.invoke('get-available-port').then((port) => {
|
||||||
availablePort = port
|
availablePort = port
|
||||||
})
|
})
|
||||||
//@ts-ignore
|
|
||||||
export const getdefaultStyle = (type) => {
|
let defaultStyle = {
|
||||||
switch (type) {
|
point: {
|
||||||
case 'point':
|
|
||||||
return {
|
|
||||||
billboard: {
|
billboard: {
|
||||||
show: true,
|
show: true,
|
||||||
image: "http://localhost:" +
|
image: "http://localhost:" +
|
||||||
@ -20,18 +18,36 @@ export const getdefaultStyle = (type) => {
|
|||||||
show: true,
|
show: true,
|
||||||
fontSize: 39,
|
fontSize: 39,
|
||||||
color: 'rgba(0, 255, 255, 1)',
|
color: 'rgba(0, 255, 255, 1)',
|
||||||
fontFamily: 'Helvetica',
|
fontFamily: 0,
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
case 'line':
|
line: {
|
||||||
return {
|
color: '#ff0000',
|
||||||
color: 'rgba(241, 108, 85, 1)',
|
width: 3,
|
||||||
fontSize: 12,
|
type: 0,
|
||||||
fontName: '微软雅黑',
|
noseToTail: false,
|
||||||
fontWeight: '400',
|
smooth: false,
|
||||||
fontStyle: 'normal',
|
extend: false,
|
||||||
textDecoration: 'none',
|
extendWidth: 10,
|
||||||
background: 'rgba(0, 0, 0, 0.5)',
|
extendColor: "rgba(255,255,80,0.3)",
|
||||||
|
rotate: true,
|
||||||
|
speed: 10,
|
||||||
|
space: 1
|
||||||
|
},
|
||||||
|
curve: {
|
||||||
|
color: '#ff0000',
|
||||||
|
width: 3,
|
||||||
|
type: 0,
|
||||||
|
noseToTail: false,
|
||||||
|
extend: false,
|
||||||
|
extendWidth: 10,
|
||||||
|
extendColor: "rgba(255,255,80,0.3)",
|
||||||
|
rotate: true,
|
||||||
|
speed: 10,
|
||||||
|
space: 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//@ts-ignore
|
||||||
|
export const getdefaultStyle = (type) => {
|
||||||
|
return (type ? defaultStyle[type] : defaultStyle)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -916,6 +916,32 @@ function attributeElm(that) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row attribute-content attribute-content-rtmp">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">添加链接</span>
|
||||||
|
<div style="flex: 1;position: relative;">
|
||||||
|
<input class="input rtmp_add" type="text">
|
||||||
|
<i class="rtmp_add_btn" @click="_addRtmp"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="attribute-content attribute-content-rtmp">
|
||||||
|
<div class="table">
|
||||||
|
<div class="table-head">
|
||||||
|
<div class="tr">
|
||||||
|
<div class="th">名称</div>
|
||||||
|
<div class="th">链接</div>
|
||||||
|
<div class="th">操作</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-body">
|
||||||
|
</div>
|
||||||
|
<div class="table-empty">
|
||||||
|
<div class="empty-img"></div>
|
||||||
|
<p>暂无数据</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="attribute-content attribute-content-goods">
|
<div class="attribute-content attribute-content-goods">
|
||||||
<div>
|
<div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="row"></div>
|
<div class="row">
|
||||||
|
<setLabelStyle :type="type" :entityOptions="entityOptions" />
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label" style="margin-right: 42px">标签设置</span>
|
<span class="label" style="margin-right: 42px">标签设置</span>
|
||||||
@ -16,15 +18,8 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">最近距离</span>
|
<span class="label">最近距离</span>
|
||||||
<div class="input-number input-number-unit-1">
|
<div class="input-number input-number-unit-1">
|
||||||
<input
|
<input class="input" type="number" title="" min="1" max="99999999" @input="$handleInputLimit"
|
||||||
class="input"
|
v-model="entityOptions.labelNear" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="1"
|
|
||||||
max="99999999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.labelNear"
|
|
||||||
/>
|
|
||||||
<span class="unit">m</span>
|
<span class="unit">m</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -32,15 +27,8 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">最远距离</span>
|
<span class="label">最远距离</span>
|
||||||
<div class="input-number input-number-unit-1">
|
<div class="input-number input-number-unit-1">
|
||||||
<input
|
<input class="input" type="number" title="" min="1" max="99999999" @input="$handleInputLimit"
|
||||||
class="input"
|
v-model="entityOptions.labelFar" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="1"
|
|
||||||
max="99999999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.labelFar"
|
|
||||||
/>
|
|
||||||
<span class="unit">m</span>
|
<span class="unit">m</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -54,22 +42,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col" style="flex: 0 0 114px">
|
<div class="col">
|
||||||
<span class="label">字体颜色</span>
|
<span class="label">字体颜色</span>
|
||||||
<div class="labelColor" ref="labelColorRef"></div>
|
<div class="labelColor" ref="labelColorRef"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">字体大小</span>
|
<span class="label">字体大小</span>
|
||||||
<div class="input-number input-number-unit-2">
|
<div class="input-number input-number-unit-2">
|
||||||
<input
|
<input class="input" type="number" title="" min="1" max="99" @input="$handleInputLimit"
|
||||||
class="input"
|
v-model="entityOptions.labelFontSize" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="1"
|
|
||||||
max="99"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.labelFontSize"
|
|
||||||
/>
|
|
||||||
<span class="unit">px</span>
|
<span class="unit">px</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -82,12 +63,52 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="row">
|
<div class="row">
|
||||||
<div class="col" style="flex: 0 0 114px;">
|
<div class="col">
|
||||||
<span class="label">轮廓颜色</span>
|
<div class="customized-tip"></div>
|
||||||
<div class="outlineColor"></div>
|
<span class="label" style="flex: none;">{{ t('general.text.style') }}</span>
|
||||||
|
<svg class="icon-text bold">
|
||||||
|
<use xlink:href="#icon-text-bold"></use>
|
||||||
|
</svg>
|
||||||
|
<svg class="icon-text italic">
|
||||||
|
<use xlink:href="#icon-text-italic"></use>
|
||||||
|
</svg>
|
||||||
|
<svg class="icon-text line-bottom">
|
||||||
|
<use xlink:href="#icon-text-line-bottom"></use>
|
||||||
|
</svg>
|
||||||
|
<svg class="icon-text line-through">
|
||||||
|
<use xlink:href="#icon-text-line-through"></use>
|
||||||
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
<div class="col">
|
||||||
|
<span class="label" style="flex: none;">{{ t('general.text.letterSpacing') }}</span>
|
||||||
|
<div class="input-number input-number-unit-2">
|
||||||
|
<input class="input" type="number" title="" min="0" max="99" style="min-width: 70px;"
|
||||||
|
@input="$handleInputLimit" />
|
||||||
|
<span class="unit">px</span>
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col"></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<span class="label" style="flex: none;">{{ t('general.outline.color') }}</span>
|
||||||
|
<div class="labelOutlineColorColor" ref="labelOutlineColorRef"></div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label" style="flex: none;">{{ t('general.outline.width') }}</span>
|
||||||
|
<div class="input-number input-number-unit-2">
|
||||||
|
<input class="input" type="number" title="" min="0" max="99" style="min-width: 70px;"
|
||||||
|
@input="$handleInputLimit" />
|
||||||
|
<span class="unit">px</span>
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col"></div>
|
||||||
|
</div>
|
||||||
|
<span class="custom-divider"></span>
|
||||||
|
<div class="row"></div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">标签样式</span>
|
<span class="label">标签样式</span>
|
||||||
@ -115,15 +136,8 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">引线宽度</span>
|
<span class="label">引线宽度</span>
|
||||||
<div class="input-number input-number-unit-2">
|
<div class="input-number input-number-unit-2">
|
||||||
<input
|
<input class="input" type="number" title="" min="1" max="999" @input="$handleInputLimit"
|
||||||
class="input"
|
v-model="entityOptions.labelLineWidth" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="1"
|
|
||||||
max="999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.labelLineWidth"
|
|
||||||
/>
|
|
||||||
<span class="unit">px</span>
|
<span class="unit">px</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -131,15 +145,8 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">引线长度</span>
|
<span class="label">引线长度</span>
|
||||||
<div class="input-number input-number-unit-2">
|
<div class="input-number input-number-unit-2">
|
||||||
<input
|
<input class="input" type="number" title="" min="0" max="999" @input="$handleInputLimit"
|
||||||
class="input"
|
v-model="entityOptions.labelPixelOffset" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="0"
|
|
||||||
max="999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.labelPixelOffset"
|
|
||||||
/>
|
|
||||||
<span class="unit">px</span>
|
<span class="unit">px</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -152,6 +159,9 @@
|
|||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { inject } from 'vue'
|
import { inject } from 'vue'
|
||||||
import { getFontList } from './fontSelect'
|
import { getFontList } from './fontSelect'
|
||||||
|
import setLabelStyle from './defaultLabelStyle/index.vue'
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
|
|||||||
@ -361,7 +361,7 @@ const modelClick = (index, row) => {
|
|||||||
} else if (butActiveIndex.value === 1) {
|
} else if (butActiveIndex.value === 1) {
|
||||||
selectedImg = 'http://localhost:' + availablePort.value + '/' + row.data
|
selectedImg = 'http://localhost:' + availablePort.value + '/' + row.data
|
||||||
} else if (butActiveIndex.value === 2) {
|
} else if (butActiveIndex.value === 2) {
|
||||||
selectedImg = service.value + row.data
|
selectedImg = service.value + row.iconDataUrl
|
||||||
}
|
}
|
||||||
selectCallback(selectedImg)
|
selectCallback(selectedImg)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog
|
<Dialog ref="baseDialog" title="线标注" left="180px" top="100px" className="polyline" :closeCallback="closeCallback">
|
||||||
ref="baseDialog"
|
|
||||||
title="线标注"
|
|
||||||
left="180px"
|
|
||||||
top="100px"
|
|
||||||
className="polyline"
|
|
||||||
:closeCallback="closeCallback"
|
|
||||||
>
|
|
||||||
<template #content>
|
<template #content>
|
||||||
<span class="custom-divider"></span>
|
<span class="custom-divider"></span>
|
||||||
<div class="div-item">
|
<div class="div-item">
|
||||||
@ -35,118 +28,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="custom-divider"></span>
|
||||||
<div class="div-item">
|
<div class="div-item">
|
||||||
<div class="row">
|
<setStyle type="线" :sourceType="sourceType" :entityOptions="entityOptions"></setStyle>
|
||||||
<el-tabs v-model="activeName">
|
|
||||||
<el-tab-pane label="属性信息" name="1">
|
|
||||||
<attribute :entityOptions="entityOptions"></attribute>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="空间信息" name="2">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col height-mode-box">
|
|
||||||
<span class="label" style="flex: 0 0 56px">高度模式</span>
|
|
||||||
<el-select
|
|
||||||
class="input input-select height-mode-scelect"
|
|
||||||
style="width: 155px; margin-left: 20px"
|
|
||||||
v-model="heightMode"
|
|
||||||
@change="heightModeChange"
|
|
||||||
placeholder="请选择"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in heightModeData"
|
|
||||||
:key="item.key"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.key"
|
|
||||||
>
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<span class="label">Z值统一增加</span>
|
|
||||||
<div
|
|
||||||
class="input-number input-number-unit-1 height-box"
|
|
||||||
:class="{ disabled: heightMode == 2 }"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
class="input height"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="-9999999"
|
|
||||||
max="999999999"
|
|
||||||
v-model="height"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
/>
|
|
||||||
<span class="unit">m</span>
|
|
||||||
<span class="arrow"></span>
|
|
||||||
</div>
|
|
||||||
<button
|
|
||||||
class="confirm height-confirm"
|
|
||||||
style="margin-left: 5px"
|
|
||||||
@click="heightConfirm"
|
|
||||||
:disabled="heightMode == 2"
|
|
||||||
>
|
|
||||||
应用
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="table spatial-info-table">
|
|
||||||
<div class="table-head">
|
|
||||||
<div class="tr">
|
|
||||||
<div class="th"></div>
|
|
||||||
<div class="th">经度(X)</div>
|
|
||||||
<div class="th">纬度(Y)</div>
|
|
||||||
<div class="th">高度(Z)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="table-body">
|
|
||||||
<div class="tr" v-for="(item, i) in entityOptions.options.positions" :key="i">
|
|
||||||
<div class="td">{{ i + 1 }}</div>
|
|
||||||
<div class="td lng align-center" @dblclick="inputDblclick($event, i, 'lng')">
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
@blur="inputBlurCallBack($event, i, 'lng', 8)"
|
|
||||||
type="number"
|
|
||||||
v-model="item.lng"
|
|
||||||
min="-180"
|
|
||||||
max="180"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-if="activeTd.index == i && activeTd.name == 'lng'"
|
|
||||||
/>
|
|
||||||
<span style="pointer-events: none" v-else>{{ item.lng.toFixed(8) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="td lat align-center" @dblclick="inputDblclick($event, i, 'lat')">
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
@blur="inputBlurCallBack($event, i, 'lat', 8)"
|
|
||||||
type="number"
|
|
||||||
v-model="item.lat"
|
|
||||||
min="-180"
|
|
||||||
max="180"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-if="activeTd.index == i && activeTd.name == 'lat'"
|
|
||||||
/>
|
|
||||||
<span style="pointer-events: none" v-else>{{ item.lat.toFixed(8) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="td alt align-center" @dblclick="inputDblclick($event, i, 'alt')">
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
@blur="inputBlurCallBack($event, i, 'alt', 2)"
|
|
||||||
type="number"
|
|
||||||
v-model="item.alt"
|
|
||||||
min="-9999999"
|
|
||||||
max="999999999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-if="activeTd.index == i && activeTd.name == 'alt'"
|
|
||||||
/>
|
|
||||||
<span style="pointer-events: none" v-else>{{ item.alt.toFixed(2) }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="线条风格" name="3">
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<span class="label">线条颜色</span>
|
<span class="label">线条颜色</span>
|
||||||
@ -155,33 +39,17 @@
|
|||||||
<div class="col" style="flex: 0 0 33%">
|
<div class="col" style="flex: 0 0 33%">
|
||||||
<span class="label">线条宽度</span>
|
<span class="label">线条宽度</span>
|
||||||
<div class="input-number input-number-unit-1" style="width: 80px">
|
<div class="input-number input-number-unit-1" style="width: 80px">
|
||||||
<input
|
<input class="input" type="number" title="" min="1" max="999" @input="$handleInputLimit"
|
||||||
class="input"
|
v-model="entityOptions.lineWidth" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="1"
|
|
||||||
max="999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.lineWidth"
|
|
||||||
/>
|
|
||||||
<span class="unit">px</span>
|
<span class="unit">px</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col input-select-line-type-box" style="flex: 0 0 37%">
|
<div class="col input-select-line-type-box" style="flex: 0 0 37%">
|
||||||
<span class="label">线条形式</span>
|
<span class="label">线条形式</span>
|
||||||
<el-select
|
<el-select class="input input-select input-select-line-type" style="margin-left: 20px"
|
||||||
class="input input-select input-select-line-type"
|
v-model="entityOptions.lineType" @change="lineTypechange">
|
||||||
style="margin-left: 20px"
|
<el-option v-for="item in lineTypeData" :key="item.key" :label="item.name" :value="item.key">
|
||||||
v-model="entityOptions.lineType"
|
|
||||||
@change="lineTypechange"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in lineTypeData"
|
|
||||||
:key="item.key"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.key"
|
|
||||||
>
|
|
||||||
<i class="yj-custom-icon" :class="item.icon"></i>
|
<i class="yj-custom-icon" :class="item.icon"></i>
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-option>
|
</el-option>
|
||||||
@ -207,16 +75,8 @@
|
|||||||
<div class="col" style="flex: 0 0 33%">
|
<div class="col" style="flex: 0 0 33%">
|
||||||
<span class="label">缓冲宽度</span>
|
<span class="label">缓冲宽度</span>
|
||||||
<div class="input-number input-number-unit-1" style="width: 80px">
|
<div class="input-number input-number-unit-1" style="width: 80px">
|
||||||
<input
|
<input class="input" type="number" title="" min="0" data-min="0.01" max="999999"
|
||||||
class="input"
|
@input="$handleInputLimit" v-model="entityOptions.extendWidth" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="0"
|
|
||||||
data-min="0.01"
|
|
||||||
max="999999"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.extendWidth"
|
|
||||||
/>
|
|
||||||
<span class="unit">m</span>
|
<span class="unit">m</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -234,62 +94,108 @@
|
|||||||
<div class="col" style="flex: 0 0 33%">
|
<div class="col" style="flex: 0 0 33%">
|
||||||
<span class="label">流动速率</span>
|
<span class="label">流动速率</span>
|
||||||
<div class="input-number input-number-unit-1" style="width: 80px">
|
<div class="input-number input-number-unit-1" style="width: 80px">
|
||||||
<input
|
<input class="input" type="number" title="" min="0" max="999999" step="1" @input="$handleInputLimit"
|
||||||
class="input"
|
v-model="entityOptions.speed" />
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="0"
|
|
||||||
max="999999"
|
|
||||||
step="1"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.speed"
|
|
||||||
/>
|
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col" style="flex: 0 0 37%">
|
<div class="col" style="flex: 0 0 37%">
|
||||||
<span
|
<span class="label lineSpace" v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5">线条间距</span>
|
||||||
class="label lineSpace"
|
<div class="input-number input-number-unit-1 lineSpace" style="width: 80px"
|
||||||
v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5"
|
v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5">
|
||||||
>线条间距</span
|
<input class="input" type="number" title="" min="0" max="4.5" step="0.1" @input="$handleInputLimit"
|
||||||
>
|
v-model="entityOptions.space" />
|
||||||
<div
|
|
||||||
class="input-number input-number-unit-1 lineSpace"
|
|
||||||
style="width: 80px"
|
|
||||||
v-show="entityOptions.lineType > 2 && entityOptions.lineType >= 5"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
type="number"
|
|
||||||
title=""
|
|
||||||
min="0"
|
|
||||||
max="4.5"
|
|
||||||
step="0.1"
|
|
||||||
@input="$handleInputLimit"
|
|
||||||
v-model="entityOptions.space"
|
|
||||||
/>
|
|
||||||
<span class="unit">倍</span>
|
<span class="unit">倍</span>
|
||||||
<span class="arrow"></span>
|
<span class="arrow"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="div-item">
|
||||||
|
<div class="row">
|
||||||
|
<el-tabs v-model="activeName">
|
||||||
|
<el-tab-pane label="属性信息" name="1">
|
||||||
|
<attribute :entityOptions="entityOptions"></attribute>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="标签风格" name="4">
|
<el-tab-pane label="空间信息" name="2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col height-mode-box">
|
||||||
|
<span class="label" style="flex: 0 0 56px">高度模式</span>
|
||||||
|
<el-select class="input input-select height-mode-scelect" style="width: 155px; margin-left: 20px"
|
||||||
|
v-model="heightMode" @change="heightModeChange" placeholder="请选择">
|
||||||
|
<el-option v-for="item in heightModeData" :key="item.key" :label="item.name" :value="item.key">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span class="label">Z值统一增加</span>
|
||||||
|
<div class="input-number input-number-unit-1 height-box" :class="{ disabled: heightMode == 2 }">
|
||||||
|
<input class="input height" type="number" title="" min="-9999999" max="999999999" v-model="height"
|
||||||
|
@input="$handleInputLimit" />
|
||||||
|
<span class="unit">m</span>
|
||||||
|
<span class="arrow"></span>
|
||||||
|
</div>
|
||||||
|
<button class="confirm height-confirm" style="margin-left: 5px" @click="heightConfirm"
|
||||||
|
:disabled="heightMode == 2">
|
||||||
|
应用
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="table spatial-info-table">
|
||||||
|
<div class="table-head">
|
||||||
|
<div class="tr">
|
||||||
|
<div class="th"></div>
|
||||||
|
<div class="th">经度(X)</div>
|
||||||
|
<div class="th">纬度(Y)</div>
|
||||||
|
<div class="th">高度(Z)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-body">
|
||||||
|
<div class="tr" v-for="(item, i) in entityOptions.options.positions" :key="i">
|
||||||
|
<div class="td">{{ i + 1 }}</div>
|
||||||
|
<div class="td lng align-center" @dblclick="inputDblclick($event, i, 'lng')">
|
||||||
|
<input class="input" @blur="inputBlurCallBack($event, i, 'lng', 8)" type="number"
|
||||||
|
v-model="item.lng" min="-180" max="180" @input="$handleInputLimit"
|
||||||
|
v-if="activeTd.index == i && activeTd.name == 'lng'" />
|
||||||
|
<span style="pointer-events: none" v-else>{{ item.lng.toFixed(8) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="td lat align-center" @dblclick="inputDblclick($event, i, 'lat')">
|
||||||
|
<input class="input" @blur="inputBlurCallBack($event, i, 'lat', 8)" type="number"
|
||||||
|
v-model="item.lat" min="-180" max="180" @input="$handleInputLimit"
|
||||||
|
v-if="activeTd.index == i && activeTd.name == 'lat'" />
|
||||||
|
<span style="pointer-events: none" v-else>{{ item.lat.toFixed(8) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="td alt align-center" @dblclick="inputDblclick($event, i, 'alt')">
|
||||||
|
<input class="input" @blur="inputBlurCallBack($event, i, 'alt', 2)" type="number"
|
||||||
|
v-model="item.alt" min="-9999999" max="999999999" @input="$handleInputLimit"
|
||||||
|
v-if="activeTd.index == i && activeTd.name == 'alt'" />
|
||||||
|
<span style="pointer-events: none" v-else>{{ item.alt.toFixed(2) }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="标签风格" name="3">
|
||||||
<labelStyle type="线" :entityOptions="entityOptions"></labelStyle>
|
<labelStyle type="线" :entityOptions="entityOptions"></labelStyle>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="custom-divider"></span>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div style="position: absolute; left: 24px; display: flex">
|
<div style="position: absolute; left: 24px; display: flex">
|
||||||
<button @click="nodeEdit">
|
<button @click="nodeEdit">
|
||||||
<svg class="icon-edit">
|
<svg class="icon-edit">
|
||||||
<use xlink:href="#yj-icon-edit"></use></svg>二次编辑
|
<use xlink:href="#yj-icon-edit"></use>
|
||||||
|
</svg>二次编辑
|
||||||
</button>
|
</button>
|
||||||
<button style="margin-left: 10px" @click="translate">
|
<button style="margin-left: 10px" @click="translate">
|
||||||
<svg class="icon-py">
|
<svg class="icon-py">
|
||||||
<use xlink:href="#yj-icon-py"></use></svg>平移
|
<use xlink:href="#yj-icon-py"></use>
|
||||||
|
</svg>平移
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<button @click="remove">删除</button>
|
<button @click="remove">删除</button>
|
||||||
@ -307,6 +213,7 @@ import { TreeApi } from '@/api/tree'
|
|||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
import Dialog from '@/components/dialog/baseDialog.vue'
|
import Dialog from '@/components/dialog/baseDialog.vue'
|
||||||
import attribute from './attribute.vue'
|
import attribute from './attribute.vue'
|
||||||
|
import setStyle from './defaultStyle/index.vue'
|
||||||
import labelStyle from './labelStyle.vue'
|
import labelStyle from './labelStyle.vue'
|
||||||
import { useTreeNode } from '@/views/components/tree/hooks/treeNode'
|
import { useTreeNode } from '@/views/components/tree/hooks/treeNode'
|
||||||
|
|
||||||
@ -316,6 +223,7 @@ const { cusUpdateNode, getSelectedNodes, cusRemoveNode } = useTreeNode()
|
|||||||
const baseDialog: any = ref(null)
|
const baseDialog: any = ref(null)
|
||||||
const eventBus: any = inject('bus')
|
const eventBus: any = inject('bus')
|
||||||
|
|
||||||
|
const sourceType = ref('')
|
||||||
const length = ref(0)
|
const length = ref(0)
|
||||||
const lengthUnit = ref('m')
|
const lengthUnit = ref('m')
|
||||||
const height = ref(10)
|
const height = ref(10)
|
||||||
@ -431,8 +339,9 @@ const wordsName = ref(0)
|
|||||||
let originalOptions: any
|
let originalOptions: any
|
||||||
let that: any
|
let that: any
|
||||||
|
|
||||||
const open = async (id: any) => {
|
const open = async (id: any, type) => {
|
||||||
that = window.earth.entityMap.get(id)
|
that = window.earth.entityMap.get(id)
|
||||||
|
sourceType.value = type
|
||||||
originalOptions = structuredClone(that.options)
|
originalOptions = structuredClone(that.options)
|
||||||
entityOptions.value = that
|
entityOptions.value = that
|
||||||
heightMode.value = entityOptions.value.heightMode
|
heightMode.value = entityOptions.value.heightMode
|
||||||
|
|||||||
@ -52,6 +52,11 @@ function leftClick(options) {
|
|||||||
? options.attribute.vr.content
|
? options.attribute.vr.content
|
||||||
: []
|
: []
|
||||||
: [],
|
: [],
|
||||||
|
rtmp: options.attribute
|
||||||
|
? options.attribute.rtmp
|
||||||
|
? options.attribute.rtmp.content
|
||||||
|
: []
|
||||||
|
: [],
|
||||||
goods: options.attribute
|
goods: options.attribute
|
||||||
? options.attribute.goods
|
? options.attribute.goods
|
||||||
? options.attribute.goods.content
|
? options.attribute.goods.content
|
||||||
@ -79,6 +84,7 @@ function leftClick(options) {
|
|||||||
!options.richTextContent &&
|
!options.richTextContent &&
|
||||||
!info.hrefs.length &&
|
!info.hrefs.length &&
|
||||||
!info.vr.length &&
|
!info.vr.length &&
|
||||||
|
!info.rtmp.length &&
|
||||||
!info.goods.length &&
|
!info.goods.length &&
|
||||||
!info.camera.length
|
!info.camera.length
|
||||||
) {
|
) {
|
||||||
@ -96,7 +102,6 @@ function leftClick(options) {
|
|||||||
) {
|
) {
|
||||||
tankuang(id, node, info);
|
tankuang(id, node, info);
|
||||||
}
|
}
|
||||||
console.log('info.camera', info.camera)
|
|
||||||
if (info.camera && info.camera.length) {
|
if (info.camera && info.camera.length) {
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
ElMessage.success("摄像头打开中请稍后");
|
ElMessage.success("摄像头打开中请稍后");
|
||||||
@ -161,6 +166,50 @@ function leftClick(options) {
|
|||||||
}
|
}
|
||||||
//if (info.type == "vr")
|
//if (info.type == "vr")
|
||||||
}
|
}
|
||||||
|
if (info.rtmp && info.rtmp.length) {
|
||||||
|
let isExistent = false
|
||||||
|
let isNoExistent = false
|
||||||
|
for(let i=0;i<info.rtmp.length;i++) {
|
||||||
|
if(!(window as any)._winMap.has(info.rtmp[i].id)) {
|
||||||
|
isNoExistent = true;
|
||||||
|
(window as any)._winMap.set(info.rtmp[i].id, info.rtmp[i].id);
|
||||||
|
ipcRenderer.send("openFFPlay", {
|
||||||
|
id: info.rtmp[i].id,
|
||||||
|
url: info.rtmp[i].url,
|
||||||
|
name: info.rtmp[i].name,
|
||||||
|
});
|
||||||
|
ipcRenderer.once(
|
||||||
|
"openFFPlayOut_"+info.rtmp[i].id,
|
||||||
|
(e, err, id) => {
|
||||||
|
if (err) {
|
||||||
|
ElMessage({
|
||||||
|
message: "视频流错误,打开失败!",
|
||||||
|
type: "error",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(id) {
|
||||||
|
(window as any)._winMap.delete(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
isExistent = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isNoExistent) {
|
||||||
|
ElMessage({
|
||||||
|
message: "视频流打开中请稍后",
|
||||||
|
type: "success",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(isExistent) {
|
||||||
|
ElMessage({
|
||||||
|
message: "视频已打开",
|
||||||
|
type: "info",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -121,6 +121,19 @@ export const useTreeNode = () => {
|
|||||||
// render: () => {},
|
// render: () => {},
|
||||||
allowChildren: true,
|
allowChildren: true,
|
||||||
},
|
},
|
||||||
|
folder: {
|
||||||
|
rightMenus: [
|
||||||
|
'addDirectory',
|
||||||
|
'addResource',
|
||||||
|
'pictureLocation',
|
||||||
|
'importPanorama',
|
||||||
|
'edit',
|
||||||
|
'del'
|
||||||
|
],
|
||||||
|
// detailFun: get_detail_null,
|
||||||
|
// render: () => {},
|
||||||
|
allowChildren: true,
|
||||||
|
},
|
||||||
tileset: {
|
tileset: {
|
||||||
rightMenus: [
|
rightMenus: [
|
||||||
'edit',
|
'edit',
|
||||||
@ -473,7 +486,7 @@ export const useTreeNode = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// return (type === 'directory' || type === 'FeatureCollection') ? undefined : `http://localhost:${availablePort}/icon/${name}.png`;
|
// return (type === 'directory' || type === 'FeatureCollection') ? undefined : `http://localhost:${availablePort}/icon/${name}.png`;
|
||||||
return (type === 'directory' || type === 'FeatureCollection') ? undefined : `
|
return (type === 'directory' || type === 'FeatureCollection' || type === 'folder') ? undefined : `
|
||||||
<svg class="svg-icon" style="color: rgba(var(--color-base2), 1);margin-top: 1px;width:100%;height:100%;fill: currentColor !important;stroke: currentColor !important;stroke-width: ${strokeWidth} !important;shape-rendering: geometricPrecision;">
|
<svg class="svg-icon" style="color: rgba(var(--color-base2), 1);margin-top: 1px;width:100%;height:100%;fill: currentColor !important;stroke: currentColor !important;stroke-width: ${strokeWidth} !important;shape-rendering: geometricPrecision;">
|
||||||
<use xlink:href="#icon-${name}" />
|
<use xlink:href="#icon-${name}" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
@ -178,12 +178,12 @@ eventBus.on('openDialog', async (sourceType: any, id: any) => {
|
|||||||
case 'line':
|
case 'line':
|
||||||
currentComponent.value = polylineObject
|
currentComponent.value = polylineObject
|
||||||
await nextTick()
|
await nextTick()
|
||||||
dynamicComponentRef.value?.open(id)
|
dynamicComponentRef.value?.open(id, sourceType)
|
||||||
break
|
break
|
||||||
case 'curve':
|
case 'curve':
|
||||||
currentComponent.value = curvelineObject
|
currentComponent.value = curvelineObject
|
||||||
await nextTick()
|
await nextTick()
|
||||||
dynamicComponentRef.value?.open(id)
|
dynamicComponentRef.value?.open(id, sourceType)
|
||||||
break
|
break
|
||||||
case 'panel':
|
case 'panel':
|
||||||
currentComponent.value = polygonObject
|
currentComponent.value = polygonObject
|
||||||
@ -455,30 +455,30 @@ const createEarth = async () => {
|
|||||||
window.earth = await new YJ.YJEarth('earthContainer')
|
window.earth = await new YJ.YJEarth('earthContainer')
|
||||||
let openLeftClick = await new YJ.Global.openLeftClick(window.earth)
|
let openLeftClick = await new YJ.Global.openLeftClick(window.earth)
|
||||||
let openRightClick = await new YJ.Global.openRightClick(window.earth)
|
let openRightClick = await new YJ.Global.openRightClick(window.earth)
|
||||||
YJ.Global.MouseRightMenu(window.earth, true, (text, object) => {
|
// YJ.Global.MouseRightMenu(window.earth, true, (text, object) => {
|
||||||
switch (text) {
|
// switch (text) {
|
||||||
case 'rotateAround':
|
// case 'rotateAround':
|
||||||
YJ.Global.rotateAround(window.earth, object.position)
|
// YJ.Global.rotateAround(window.earth, object.position)
|
||||||
break
|
// break
|
||||||
case 'textBox':
|
// case 'textBox':
|
||||||
let id = new YJ.Tools().randomString()
|
// let id = new YJ.Tools().randomString()
|
||||||
let name = '文本框'
|
// let name = '文本框'
|
||||||
addMapSource({
|
// addMapSource({
|
||||||
type: 'textBox',
|
// type: 'textBox',
|
||||||
id: id,
|
// id: id,
|
||||||
sourceName: name,
|
// sourceName: name,
|
||||||
opt: {
|
// opt: {
|
||||||
id: id,
|
// id: id,
|
||||||
position: object.position
|
// position: object.position
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
break
|
// break
|
||||||
case 'attribute':
|
// case 'attribute':
|
||||||
let node = window.treeObj.getNodeByParam('id', object.id, null)
|
// let node = window.treeObj.getNodeByParam('id', object.id, null)
|
||||||
rightMenus.edit.callback(eventBus, node)
|
// rightMenus.edit.callback(eventBus, node)
|
||||||
break
|
// break
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
|
|
||||||
tree.value.initTreeCallBack()
|
tree.value.initTreeCallBack()
|
||||||
utilsSysChange(eventBus)
|
utilsSysChange(eventBus)
|
||||||
|
|||||||