Merge branch 'zyl' of http://xny.yj-3d.com:3000/zhouyulong/electron-4 into zyl
1
src/renderer/components.d.ts
vendored
@ -23,6 +23,7 @@ declare module 'vue' {
|
||||
ElIcon: typeof import('element-plus/es')['ElIcon']
|
||||
ElImage: typeof import('element-plus/es')['ElImage']
|
||||
ElInput: typeof import('element-plus/es')['ElInput']
|
||||
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
|
||||
ElOption: typeof import('element-plus/es')['ElOption']
|
||||
ElPagination: typeof import('element-plus/es')['ElPagination']
|
||||
ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
|
||||
|
||||
@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=favicon.ico><title>后台管理</title><script src=./reconnecting-websocket.js></script><link href=static/css/app.46ef1c6b.css rel=preload as=style><link href=static/css/chunk-elementUI.68c70ad5.css rel=preload as=style><link href=static/css/chunk-libs.3dfb7769.css rel=preload as=style><link href=static/js/app.7782b1e9.js rel=preload as=script><link href=static/js/chunk-elementUI.a9f82b5b.js rel=preload as=script><link href=static/js/chunk-libs.8de98ba2.js rel=preload as=script><link href=static/css/chunk-elementUI.68c70ad5.css rel=stylesheet><link href=static/css/chunk-libs.3dfb7769.css rel=stylesheet><link href=static/css/app.46ef1c6b.css rel=stylesheet></head><body><noscript><strong>We're sorry but doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>(function(e){function t(t){for(var r,o,a=t[0],i=t[1],d=t[2],l=0,f=[];l<a.length;l++)o=a[l],Object.prototype.hasOwnProperty.call(c,o)&&c[o]&&f.push(c[o][0]),c[o]=0;for(r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r]);s&&s(t);while(f.length)f.shift()();return u.push.apply(u,d||[]),n()}function n(){for(var e,t=0;t<u.length;t++){for(var n=u[t],r=!0,o=1;o<n.length;o++){var a=n[o];0!==c[a]&&(r=!1)}r&&(u.splice(t--,1),e=i(i.s=n[0]))}return e}var r={},o={runtime:0},c={runtime:0},u=[];function a(e){return i.p+"static/js/"+({}[e]||e)+"."+{"chunk-0e163d56":"264fd37b","chunk-6337fcfc":"ce706d4d","chunk-213dd466":"f0e897b9","chunk-626cc720":"42d599ab","chunk-69ab8e14":"e2ed086d","chunk-94d3c3c4":"d08f8612"}[e]+".js"}function i(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.e=function(e){var t=[],n={"chunk-0e163d56":1,"chunk-213dd466":1,"chunk-626cc720":1,"chunk-69ab8e14":1,"chunk-94d3c3c4":1};o[e]?t.push(o[e]):0!==o[e]&&n[e]&&t.push(o[e]=new Promise((function(t,n){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-0e163d56":"f278854e","chunk-6337fcfc":"31d6cfe0","chunk-213dd466":"ee4aa5be","chunk-626cc720":"61ca7dbd","chunk-69ab8e14":"e18a06cd","chunk-94d3c3c4":"3c7f5ad9"}[e]+".css",c=i.p+r,u=document.getElementsByTagName("link"),a=0;a<u.length;a++){var d=u[a],l=d.getAttribute("data-href")||d.getAttribute("href");if("stylesheet"===d.rel&&(l===r||l===c))return t()}var f=document.getElementsByTagName("style");for(a=0;a<f.length;a++){d=f[a],l=d.getAttribute("data-href");if(l===r||l===c)return t()}var s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.onload=t,s.onerror=function(t){var r=t&&t.target&&t.target.src||c,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete o[e],s.parentNode.removeChild(s),n(u)},s.href=c;var h=document.getElementsByTagName("head")[0];h.appendChild(s)})).then((function(){o[e]=0})));var r=c[e];if(0!==r)if(r)t.push(r[2]);else{var u=new Promise((function(t,n){r=c[e]=[t,n]}));t.push(r[2]=u);var d,l=document.createElement("script");l.charset="utf-8",l.timeout=120,i.nc&&l.setAttribute("nonce",i.nc),l.src=a(e);var f=new Error;d=function(t){l.onerror=l.onload=null,clearTimeout(s);var n=c[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",f.name="ChunkLoadError",f.type=r,f.request=o,n[1](f)}c[e]=void 0}};var s=setTimeout((function(){d({type:"timeout",target:l})}),12e4);l.onerror=l.onload=d,document.head.appendChild(l)}return Promise.all(t)},i.m=e,i.c=r,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var d=window["webpackJsonp"]=window["webpackJsonp"]||[],l=d.push.bind(d);d.push=t,d=d.slice();for(var f=0;f<d.length;f++)t(d[f]);var s=l;n()})([]);</script><script src=static/js/chunk-elementUI.a9f82b5b.js></script><script src=static/js/chunk-libs.8de98ba2.js></script><script src=static/js/app.7782b1e9.js></script></body><script src=./echarts.min.js></script></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=favicon.ico><title>后台管理</title><script src=./reconnecting-websocket.js></script><link href=static/css/app.425905c8.css rel=preload as=style><link href=static/css/chunk-elementUI.68c70ad5.css rel=preload as=style><link href=static/css/chunk-libs.3dfb7769.css rel=preload as=style><link href=static/js/app.a42dddd9.js rel=preload as=script><link href=static/js/chunk-elementUI.a9f82b5b.js rel=preload as=script><link href=static/js/chunk-libs.8de98ba2.js rel=preload as=script><link href=static/css/chunk-elementUI.68c70ad5.css rel=stylesheet><link href=static/css/chunk-libs.3dfb7769.css rel=stylesheet><link href=static/css/app.425905c8.css rel=stylesheet></head><body><noscript><strong>We're sorry but doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>(function(e){function t(t){for(var r,c,a=t[0],f=t[1],i=t[2],l=0,d=[];l<a.length;l++)c=a[l],Object.prototype.hasOwnProperty.call(o,c)&&o[c]&&d.push(o[c][0]),o[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);s&&s(t);while(d.length)d.shift()();return u.push.apply(u,i||[]),n()}function n(){for(var e,t=0;t<u.length;t++){for(var n=u[t],r=!0,c=1;c<n.length;c++){var a=n[c];0!==o[a]&&(r=!1)}r&&(u.splice(t--,1),e=f(f.s=n[0]))}return e}var r={},c={runtime:0},o={runtime:0},u=[];function a(e){return f.p+"static/js/"+({}[e]||e)+"."+{"chunk-4f9321d9":"807bff37","chunk-6337fcfc":"ce706d4d","chunk-0efffb9c":"d572da12","chunk-4b70cc7c":"232e9b3d","chunk-69ab8e14":"e2ed086d","chunk-94d3c3c4":"d08f8612"}[e]+".js"}function f(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,f),n.l=!0,n.exports}f.e=function(e){var t=[],n={"chunk-4f9321d9":1,"chunk-0efffb9c":1,"chunk-4b70cc7c":1,"chunk-69ab8e14":1,"chunk-94d3c3c4":1};c[e]?t.push(c[e]):0!==c[e]&&n[e]&&t.push(c[e]=new Promise((function(t,n){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-4f9321d9":"f84b7bf2","chunk-6337fcfc":"31d6cfe0","chunk-0efffb9c":"83e65de7","chunk-4b70cc7c":"55335688","chunk-69ab8e14":"e18a06cd","chunk-94d3c3c4":"3c7f5ad9"}[e]+".css",o=f.p+r,u=document.getElementsByTagName("link"),a=0;a<u.length;a++){var i=u[a],l=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(l===r||l===o))return t()}var d=document.getElementsByTagName("style");for(a=0;a<d.length;a++){i=d[a],l=i.getAttribute("data-href");if(l===r||l===o)return t()}var s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.onload=t,s.onerror=function(t){var r=t&&t.target&&t.target.src||o,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete c[e],s.parentNode.removeChild(s),n(u)},s.href=o;var h=document.getElementsByTagName("head")[0];h.appendChild(s)})).then((function(){c[e]=0})));var r=o[e];if(0!==r)if(r)t.push(r[2]);else{var u=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=u);var i,l=document.createElement("script");l.charset="utf-8",l.timeout=120,f.nc&&l.setAttribute("nonce",f.nc),l.src=a(e);var d=new Error;i=function(t){l.onerror=l.onload=null,clearTimeout(s);var n=o[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,n[1](d)}o[e]=void 0}};var s=setTimeout((function(){i({type:"timeout",target:l})}),12e4);l.onerror=l.onload=i,document.head.appendChild(l)}return Promise.all(t)},f.m=e,f.c=r,f.d=function(e,t,n){f.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,t){if(1&t&&(e=f(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(f.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)f.d(n,r,function(t){return e[t]}.bind(null,r));return n},f.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(t,"a",t),t},f.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f.p="",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var d=0;d<i.length;d++)t(i[d]);var s=l;n()})([]);</script><script src=static/js/chunk-elementUI.a9f82b5b.js></script><script src=static/js/chunk-libs.8de98ba2.js></script><script src=static/js/app.a42dddd9.js></script></body><script src=./echarts.min.js></script></html>
|
||||
@ -0,0 +1 @@
|
||||
.el-row[data-v-5b88bfa4]{margin-bottom:20px}.el-row[data-v-5b88bfa4]:last-child{margin-bottom:0}.el-col[data-v-5b88bfa4]{border-radius:4px}.grid-content[data-v-5b88bfa4]{background:#fff;border:1px solid #f3f4f6;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05),0 0 0 transparent,0 0 0 transparent;box-shadow:0 1px 2px rgba(0,0,0,.05),0 0 0 transparent,0 0 0 transparent;border-radius:8px}.userNum[data-v-5b88bfa4]{height:10vh;line-height:10vh;min-height:60px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.userNum .img[data-v-5b88bfa4]{width:48px;height:48px;margin-left:15px;line-height:100%}.userNum .img .svg-icon[data-v-5b88bfa4]{width:100%;height:100%;vertical-align:baseline!important}.userNum .numCon[data-v-5b88bfa4]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:1}.userNum .numCon div[data-v-5b88bfa4]:first-child{width:100px;height:20px;line-height:20px;font-size:14px;font-weight:400;color:#6b7280;text-align:left;margin-top:2vh}.userNum .numCon div[data-v-5b88bfa4]:last-child{width:100px;height:32px;font-size:24px;font-weight:400;color:#1d2129;margin-top:5px}.search[data-v-5b88bfa4]{height:8vh;min-height:45px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.search .el-input[data-v-5b88bfa4]{width:15vw;margin-left:20px;min-width:170px}.search .el-select[data-v-5b88bfa4]{width:16vw;min-width:160px}.search .addUser[data-v-5b88bfa4]{position:absolute;right:160px}.search .delUser[data-v-5b88bfa4]{position:absolute;right:30px}.table[data-v-5b88bfa4]{height:65vh}.table .title[data-v-5b88bfa4]{width:100%;height:50px;padding:0 20px;line-height:50px;color:#1d2129;font-size:16px;font-weight:400;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid #f3f4f6}.table .title .totalNum[data-v-5b88bfa4]{color:#6b7280;font-size:14px;font-weight:400}.table .tabCon[data-v-5b88bfa4]{width:100%;padding:20px 20px 0 20px;height:100%}.table .tabCon .state[data-v-5b88bfa4]{width:40px;height:24px;display:inline-block;opacity:1;border-radius:12px;background:rgba(0,180,42,.1);color:#00b42a;font-size:12px;font-weight:400}.table .tabCon .puase[data-v-5b88bfa4]{background:rgba(245,63,63,.1);color:#f53f3f}.table .tabCon .el-table[data-v-5b88bfa4]{height:calc(100% - 100px)!important}.el-table thead tr[data-v-5b88bfa4],[data-v-5b88bfa4] .el-table thead th{background-color:#f9fafb!important}[data-v-5b88bfa4] .el-table--border td,[data-v-5b88bfa4] .el-table--border th,[data-v-5b88bfa4] .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:unset!important}.el-table--border[data-v-5b88bfa4],.el-table--group[data-v-5b88bfa4]{border:unset!important}.el-table[data-v-5b88bfa4]:before,[data-v-5b88bfa4] .el-table--border:after,[data-v-5b88bfa4] .el-table--group:after{background-color:unset!important}[data-v-5b88bfa4] .el-table .el-table__body-wrapper td,[data-v-5b88bfa4] .el-table .el-table__body-wrapper th.is-leaf{border-bottom:unset!important}.el-pagination[data-v-5b88bfa4]{position:absolute;right:30px;margin-top:10px}[data-v-5b88bfa4] .el-pager li{border:1px solid #d1d5db;border-radius:4px}[data-v-5b88bfa4] .el-pager li.active{background:#165dff!important;color:#fff!important;border:unset!important}[data-v-5b88bfa4] .el-dialog__title{padding:2px 10px;border-left:3px solid #165dff;font-size:16px;font-weight:400;color:#1d2129}[data-v-5b88bfa4] .avatar-uploader .el-upload{border:1px dashed #dcdfe6;border-radius:6px;cursor:pointer;position:relative;overflow:hidden;width:100px;height:100px}[data-v-5b88bfa4] .avatar-uploader .el-upload:hover{border-color:#409eff}[data-v-5b88bfa4] .avatar-uploader-icon{font-size:28px;color:#8c939d;width:100px;height:100px;line-height:100px;text-align:center}[data-v-5b88bfa4] .avatar{width:100px;height:100px;display:block}[data-v-5b88bfa4] .el-dialog__body{padding:10px 20px 0 20px}[data-v-5b88bfa4] .el-upload__tip{height:25px;line-height:25px}.show-pwd[data-v-5b88bfa4]{position:absolute;right:10px;font-size:16px;color:#889aa4;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-v-5b88bfa4] .no-status-icon .el-input__icon:after,[data-v-5b88bfa4] .no-status-icon .el-input__icon:before{display:none!important}[data-v-5b88bfa4] .el-table__body-wrapper{max-height:calc(100% - 45px)!important;overflow-y:auto!important}[data-v-5b88bfa4] .userImg{width:32px;height:32px;border-radius:16px}
|
||||
|
After Width: | Height: | Size: 1.5 MiB |
1
src/renderer/public/backManage/static/js/app.a42dddd9.js
Normal file
1
src/renderer/public/backManage/static/js/app.af31a9f8.js
Normal file
1
src/renderer/public/backManage/static/js/app.dbb4a339.js
Normal file
@ -49,6 +49,10 @@
|
||||
--color-text-shadow: rgba(20, 118, 255, 1);
|
||||
}
|
||||
|
||||
/* .cesium-viewer.\32 d{
|
||||
opacity: 0;
|
||||
} */
|
||||
|
||||
.cesium-viewer-cesiumWidgetContainer {
|
||||
position: relative;
|
||||
}
|
||||
@ -171,8 +175,12 @@
|
||||
|
||||
.YJ-custom-base-dialog button:not(button[disabled]):hover {
|
||||
border-color: rgba(var(--color-base1), 1) !important;
|
||||
color: rgba(var(--color-base1), 1) !important;
|
||||
cursor: pointer;
|
||||
}
|
||||
.YJ-custom-base-dialog button:not(button[disabled]):hover svg {
|
||||
fill: rgba(var(--color-base1), 1) !important;
|
||||
}
|
||||
|
||||
.YJ-custom-base-dialog button:focus-visible {
|
||||
outline: none;
|
||||
@ -279,6 +287,10 @@
|
||||
padding: 0px 24px;
|
||||
}
|
||||
|
||||
.YJ-custom-base-dialog>.content .el-tabs .el-tabs__header {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.YJ-custom-base-dialog>.content .div-item {
|
||||
/* border-top: 1px solid rgba(204, 204, 204, 0.2); */
|
||||
padding: 12px 0;
|
||||
@ -473,6 +485,9 @@
|
||||
.YJ-custom-base-dialog>.content .table .table-body .tr:first-child {
|
||||
border-top: none;
|
||||
}
|
||||
.YJ-custom-base-dialog>.content .table .table-body .tr:last-child {
|
||||
border-bottom: 1px solid rgba(var(--color-base1), 0.5);
|
||||
}
|
||||
|
||||
.YJ-custom-base-dialog>.content .table .table-empty {
|
||||
display: flex;
|
||||
@ -1772,7 +1787,7 @@
|
||||
|
||||
/* 轨迹运动 */
|
||||
.YJ-custom-base-dialog.trajectory-motion>.content {
|
||||
width: 550px;
|
||||
width: 562px;
|
||||
}
|
||||
|
||||
.YJ-custom-base-dialog.trajectory-motion>.content .div-item>.row>.col {
|
||||
@ -1801,6 +1816,10 @@
|
||||
|
||||
.YJ-custom-base-dialog.trajectory-motion>.content .btn.is-active {
|
||||
border-color: rgba(var(--color-base1));
|
||||
color: rgba(var(--color-base1));
|
||||
}
|
||||
.YJ-custom-base-dialog.trajectory-motion>.content .btn.is-active svg {
|
||||
fill: rgba(var(--color-base1));
|
||||
}
|
||||
|
||||
.YJ-custom-base-dialog.trajectory-motion>.content .btn-group .btn.is-active>span {
|
||||
@ -1826,7 +1845,6 @@
|
||||
.YJ-custom-base-dialog.trajectory-motion>.content .icon-rubric {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.YJ-custom-base-dialog.trajectory-motion>.content .custom__popper__arrow::after {
|
||||
|
||||
@ -1492,7 +1492,6 @@
|
||||
html.push('</a>')
|
||||
},
|
||||
makeDOMNodeNameBefore: function (html, setting, node) {
|
||||
console.log('=================', setting, node)
|
||||
var title = data.nodeTitle(setting, node),
|
||||
url = view.makeNodeUrl(setting, node),
|
||||
fontcss = view.makeNodeFontCss(setting, node),
|
||||
|
||||
@ -21,7 +21,7 @@ export default {
|
||||
pictureLocation: '带定位照片',
|
||||
importPanorama: '带定位全景',
|
||||
addBIM: '添加BIM',
|
||||
edit: '编辑节点',
|
||||
edit: '图层属性',
|
||||
del: '删除节点',
|
||||
setView: '设置视角',
|
||||
resetView: '重置视角',
|
||||
@ -249,6 +249,7 @@ export default {
|
||||
视野缩放: '视野缩放',
|
||||
最近距离: '最近距离',
|
||||
最远距离: '最远距离',
|
||||
基础信息: '基础信息',
|
||||
属性信息: '属性信息',
|
||||
空间信息: '空间信息',
|
||||
标注风格: '标注风格',
|
||||
|
||||
@ -20,7 +20,7 @@ export default {
|
||||
pictureLocation: 'add photo data',
|
||||
importPanorama: 'add panoramic data',
|
||||
addBIM: 'add BIM',
|
||||
edit: 'edit Node',
|
||||
edit: 'Properties',
|
||||
del: 'delete Node',
|
||||
setView: 'set View',
|
||||
resetView: 'reset View',
|
||||
@ -248,6 +248,7 @@ export default {
|
||||
视野缩放: 'Field of view zoom',
|
||||
最近距离: 'Shortest distance',
|
||||
最远距离: 'Farthest distance',
|
||||
基础信息: 'Basic info',
|
||||
属性信息: 'Attribute',
|
||||
空间信息: 'Spatial info',
|
||||
标注风格: 'Mark style',
|
||||
|
||||
@ -20,7 +20,7 @@ export default {
|
||||
pictureLocation: '帶定位照片',
|
||||
importPanorama: '帶定位全景',
|
||||
addBIM: '添加BIM',
|
||||
edit: '編輯節點',
|
||||
edit: '圖層屬性',
|
||||
del: '刪除節點',
|
||||
setView: '設置視角',
|
||||
resetView: '重置視角',
|
||||
@ -247,6 +247,7 @@ export default {
|
||||
视野缩放: '視野縮放',
|
||||
最近距离: '最近距離',
|
||||
最远距离: '最遠距離',
|
||||
基础信息: '基礎信息',
|
||||
属性信息: '屬性信息',
|
||||
空间信息: '空間信息',
|
||||
标注风格: '標注風格',
|
||||
|
||||
@ -426,7 +426,6 @@ img {
|
||||
.ztree li span.button.switch {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
#app {
|
||||
.ztree * {
|
||||
font-size: 14px;
|
||||
@ -438,6 +437,9 @@ img {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.ztree .checkbox_false_full + a,.ztree .checkbox_false_full_focus + a {
|
||||
color: #d7d7d7;
|
||||
}
|
||||
.ztree li a.curSelectedNode {
|
||||
background-color: #ffffff00;
|
||||
border: none;
|
||||
@ -683,6 +685,18 @@ img {
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1640px) {
|
||||
#app .left .menus .menus_itemBox .item_text {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1450px) {
|
||||
#app .left .menus .menus_itemBox .item_text {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 提示 */
|
||||
/* .el-message--info {
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
import { leftClick, rightClick } from '../../src/views/components/tree/entityClick'
|
||||
import { renderVector } from '../views/components/tree/components/hooks/renderVector'
|
||||
import { TreeApi } from '@/api/tree'
|
||||
import { useTreeNode } from '@/views/components/tree/hooks/treeNode'
|
||||
const { cusUpdateNode } = useTreeNode()
|
||||
|
||||
export const initMapData = async (type, data, cd) => {
|
||||
let entityObject
|
||||
@ -115,6 +118,18 @@ export const initMapData = async (type, data, cd) => {
|
||||
})
|
||||
break
|
||||
case 'path':
|
||||
data.customView = {
|
||||
"orientation": {
|
||||
"heading": 0.7281022757737154,
|
||||
"pitch": -40.42354263534561,
|
||||
"roll": 0.00021604950860490326
|
||||
},
|
||||
"relativePosition": {
|
||||
"lng": 0.0002095400000001746,
|
||||
"lat": -0.000447990000001397,
|
||||
"alt": 45.65
|
||||
}
|
||||
}
|
||||
entityObject = new YJ.Obj.TrajectoryMotion(window.earth, data)
|
||||
break
|
||||
case 'wallStereoscopic':
|
||||
@ -196,7 +211,7 @@ export const initMapData = async (type, data, cd) => {
|
||||
console.log('--------------------onClick')
|
||||
//鼠标左键点击事件
|
||||
entityObject.onClick = () => {
|
||||
// console.log('onClick')
|
||||
console.log('onClick')
|
||||
leftClick(getOptions());
|
||||
};
|
||||
//鼠标右键点击事件
|
||||
@ -204,6 +219,24 @@ export const initMapData = async (type, data, cd) => {
|
||||
rightClick(getOptions());
|
||||
};
|
||||
|
||||
// 文本框回调
|
||||
if(type === 'textBox') {
|
||||
entityObject.callback = (options) => {
|
||||
let params = structuredClone(options)
|
||||
let sourceName = '文本框'
|
||||
delete params.name
|
||||
delete params.host
|
||||
let params2 = {
|
||||
id: params.id,
|
||||
sourceName:sourceName,
|
||||
params: params,
|
||||
isShow: params.show ? 1 : 0
|
||||
}
|
||||
TreeApi.updateDirectoryInfo(params2)
|
||||
cusUpdateNode({ id: params.id, sourceName: sourceName, params: JSON.stringify(params) })
|
||||
}
|
||||
}
|
||||
|
||||
if (entityObject.options.id) {
|
||||
(window as any)._entityMap.set(entityObject.options.id, entityObject)
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 1.9 KiB |
1
src/renderer/src/icons/svg/direction.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8.77035 10.6C9.90075 10.6 10.8204 11.512 10.8204 12.64L10.8204 13.96C10.8204 15.088 9.90075 16 8.77035 16L7.41035 16C6.27995 16 5.36035 15.088 5.36035 13.96L5.36035 12.64C5.36035 11.512 6.27995 10.6 7.41035 10.6L8.77035 10.6ZM8.77035 0C9.90075 0 10.8204 0.911954 10.8204 2.04L10.8204 3.4C10.8204 4.52805 9.90075 5.45 8.77035 5.45L7.41035 5.45C6.27995 5.45 5.36035 4.52805 5.36035 3.4L5.36035 2.04C5.36035 0.911954 6.27995 0 7.41035 0L8.77035 0Z" fill="#00FFFF" ></path><path d="M3.99 12.74C4.1482 12.4836 4.07175 12.143 3.82 11.98L3.81 11.97C2.2704 11.0239 1.56065 9.71384 1.64 8.23C1.69917 7.1236 2.20671 5.97564 3.04 4.99L3.04 6.81C3.04 7.11113 3.2799 7.36 3.58 7.36L3.59 7.36C3.89177 7.36 4.14 7.11947 4.14 6.82L4.14 6.81L4.14 3.78C4.14 3.47885 3.9001 3.23 3.6 3.23L3.59 3.23L0.55 3.23C0.243841 3.23 0 3.47448 0 3.78C0 4.08113 0.239902 4.34 0.54 4.34L0.55 4.34L2.14 4.34C1.18673 5.4895 0.601475 6.83373 0.53 8.17C0.428738 10.0636 1.34897 11.7641 3.23 12.92C3.49069 13.0802 3.82946 13.0001 3.99 12.74Z" fill="#00FFFF" ></path><path d="M12.01 3.48754C11.8518 3.74391 11.9282 4.08456 12.18 4.24754L12.19 4.25754C13.7296 5.20361 14.4394 6.5137 14.36 7.99754C14.3008 9.10394 13.7933 10.2519 12.96 11.2375L12.96 9.41754C12.96 9.11641 12.7201 8.86754 12.42 8.86754L12.41 8.86754C12.1082 8.86754 11.86 9.10807 11.86 9.40754L11.86 9.41754L11.86 12.4475C11.86 12.7487 12.0999 12.9975 12.4 12.9975L12.41 12.9975L15.45 12.9975C15.7562 12.9975 16 12.7531 16 12.4475C16 12.1464 15.7601 11.8875 15.46 11.8875L15.45 11.8875L13.86 11.8875C14.8133 10.738 15.3985 9.39381 15.47 8.05754C15.5713 6.16393 14.651 4.46342 12.77 3.30754C12.5093 3.14735 12.1705 3.2274 12.01 3.48754Z" fill="#00FFFF" ></path></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@ -1,4 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.5" height="10.5" viewBox="0 0 10.5 10.5" fill="none">
|
||||
<path d="M8.25 5.39063L7.4625 4.59844C7.3875 4.52344 7.27031 4.52344 7.19531 4.59844L6.92812 4.86563C6.85312 4.94063 6.85312 5.05782 6.92812 5.13282L8.47031 6.675C8.55937 6.74532 8.68125 6.74532 8.77031 6.675L10.3125 5.13282C10.3875 5.0625 10.3922 4.94063 10.3172 4.86563L10.05 4.59844C9.975 4.52344 9.85781 4.52344 9.78281 4.59844L9 5.39063L9 1.6875C9 1.58438 8.91562 1.5 8.8125 1.5L3.75 1.5L3.75 0.1875C3.75 0.0843751 3.66562 0 3.5625 0L0.1875 0C0.084375 0 0 0.0843751 0 0.1875L0 3.5625C0 3.66563 0.084375 3.75 0.1875 3.75L3.5625 3.75C3.66562 3.75 3.75 3.66563 3.75 3.5625L3.75 2.25L8.25 2.25L8.25 5.39063ZM3 3L0.75 3L0.75 0.75L3 0.75L3 3ZM10.3125 6.75L6.9375 6.75C6.83437 6.75 6.75 6.83438 6.75 6.9375L6.75 10.3125C6.75 10.4156 6.83437 10.5 6.9375 10.5L10.3125 10.5C10.4156 10.5 10.5 10.4156 10.5 10.3125L10.5 6.9375C10.5 6.83438 10.4156 6.75 10.3125 6.75ZM9.75 9.75001L7.5 9.75001L7.5 7.5L9.75 7.5L9.75 9.75001Z" fill="#FFFFFF" >
|
||||
</path>
|
||||
</svg>
|
||||
<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" fill="none"><g clip-path="url(#clip-path-2256_333)"><path d="M3.74078 6.58137C3.73295 6.59133 3.72512 6.60176 3.72163 6.61434L3.11787 8.8213C3.0826 8.94978 3.11874 9.08822 3.21408 9.18586C3.28548 9.2553 3.3795 9.29351 3.47962 9.29351C3.5127 9.29351 3.54579 9.2896 3.57843 9.2809L5.77629 8.68328C5.77979 8.68328 5.78154 8.68631 5.78414 8.68631C5.80937 8.68631 5.83421 8.6772 5.85294 8.65807L11.73 2.79937C11.9046 2.62513 12.0004 2.38772 12.0004 2.12947C12.0004 1.83674 11.8759 1.54422 11.6578 1.32742L11.1027 0.773191C10.8851 0.555745 10.5913 0.431396 10.2979 0.431396C10.0389 0.431396 9.80075 0.526895 9.62573 0.700699L3.74948 6.56097C3.74341 6.56659 3.74515 6.57485 3.74078 6.58137ZM11.155 2.22562L10.5712 2.8072L9.62485 1.84869L10.2004 1.27491C10.2913 1.18379 10.4676 1.19703 10.5721 1.3016L11.1275 1.85585C11.1855 1.91358 11.2185 1.99038 11.2185 2.06633C11.2181 2.12862 11.1959 2.18505 11.155 2.22562ZM4.78596 6.67338L9.02674 2.44501L9.97356 3.40418L5.74061 7.62428L4.78596 6.67338ZM4.01329 8.38773L4.31975 7.26623L5.13725 8.08132L4.01329 8.38773Z" fill="#FFFFFF" ></path><path d="M11.5268 4.54734C11.3043 4.54734 11.1219 4.72766 11.1211 4.95248L11.1211 10.4147C11.1211 10.7012 10.8878 10.9338 10.6 10.9338L1.33227 10.9338C1.04496 10.9338 0.810751 10.7012 0.810751 10.4147L0.810751 1.49926C0.810751 1.21257 1.04496 0.979735 1.33227 0.979735L7.30122 0.979735C7.52496 0.979735 7.70653 0.798549 7.70653 0.575451C7.70653 0.352806 7.52496 0.171387 7.30122 0.171387L1.27046 0.171387C0.570049 0.171387 0 0.739297 0 1.43806L0 10.4764C0 11.1751 0.570049 11.7428 1.27046 11.7428L10.6614 11.7428C11.3623 11.7428 11.9321 11.1751 11.9321 10.4764L11.9321 4.94988C11.9312 4.72766 11.7492 4.54734 11.5268 4.54734Z" fill="#FFFFFF" ></path></g><defs><clipPath id="clip-path-2256_333"><path d="M0 12L12 12L12 0L0 0L0 12Z" fill="white"/></clipPath></defs></svg>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.9 KiB |
1
src/renderer/src/icons/svg/gdb.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M17.9272 15.5452C17.5565 15.5452 17.2107 15.6426 16.91 15.8124L15.3662 14.4856L15.3662 8.65075L10.6148 6.12617L10.6148 4.67709C11.5054 4.40086 12.1542 3.5699 12.1542 2.58724C12.1542 1.38042 11.1754 0.400024 9.97061 0.400024C8.76582 0.400024 7.78707 1.38042 7.78707 2.58724C7.78707 3.54273 8.4019 4.35784 9.25633 4.65445L9.25633 6.16014L4.57278 8.65075L4.57278 14.4901L3.19168 15.8735C2.86844 15.6652 2.48418 15.5452 2.07278 15.5452C0.929024 15.5452 0 16.4781 0 17.6215C0 18.7649 0.931284 19.6978 2.07278 19.6978C3.21655 19.6978 4.14557 18.7649 4.14557 17.6215C4.14557 17.386 4.10714 17.1596 4.03481 16.949L5.82052 15.1603L9.96835 17.3679L14.0868 15.1784L16.0104 16.8313C15.9087 17.0758 15.8544 17.343 15.8544 17.6238C15.8544 18.7694 16.7857 19.7 17.9272 19.7C19.0687 19.7 20 18.7672 20 17.6238C20 16.4803 19.071 15.5452 17.9272 15.5452ZM9.85986 10.7746L6.92586 9.19416L9.97061 7.57526L12.8323 9.0968L9.85986 10.7746ZM10.6148 11.9067L13.7816 10.118L13.7816 13.5437L10.6148 15.2282L10.6148 11.9067ZM9.97288 1.75854C10.4295 1.75854 10.8002 2.12987 10.8002 2.58724C10.8002 3.0446 10.4295 3.41593 9.97288 3.41593C9.51627 3.41593 9.14557 3.0446 9.14557 2.58724C9.14557 2.13213 9.51627 1.75854 9.97288 1.75854ZM2.07278 18.3415C1.67722 18.3415 1.35624 18.02 1.35624 17.6238C1.35624 17.2275 1.67722 16.906 2.07278 16.906C2.46835 16.906 2.78933 17.2275 2.78933 17.6238C2.78933 18.02 2.46835 18.3415 2.07278 18.3415ZM6.15506 10.324L9.25859 11.9927L9.25859 15.1943L6.15506 13.5459L6.15506 10.324ZM17.9272 18.3415C17.5316 18.3415 17.2107 18.02 17.2107 17.6238C17.2107 17.2275 17.5316 16.906 17.9272 16.906C18.3228 16.906 18.6438 17.2275 18.6438 17.6238C18.6438 18.02 18.3228 18.3415 17.9272 18.3415Z" fill="#00FFFF" ></path></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@ -1,4 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="12" height="9.857177734375" viewBox="0 0 12 9.857177734375" fill="none">
|
||||
<path d="M8.28042 1.6024L11.585 1.6024C11.8114 1.6024 12 1.41411 12 1.18816C12 0.962208 11.8114 0.773909 11.585 0.773909L8.28042 0.773909C8.05408 0.773909 7.86545 0.962208 7.86545 1.18816C7.86545 1.42164 8.04652 1.6024 8.28042 1.6024ZM8.28042 4.9013L11.585 4.9013C11.8114 4.9013 12 4.713 12 4.48705C12 4.26111 11.8114 4.07281 11.585 4.07281L8.28042 4.07281C8.05408 4.07281 7.86545 4.26111 7.86545 4.48705C7.86545 4.72054 8.04652 4.9013 8.28042 4.9013ZM8.28042 8.20019L11.585 8.20019C11.8114 8.20019 12 8.0119 12 7.78595C12 7.55999 11.8114 7.37171 11.585 7.37171L8.28042 7.37171C8.05408 7.37171 7.86545 7.55999 7.86545 7.78595C7.86545 8.01943 8.04652 8.20019 8.28042 8.20019ZM7.23168 3.25185L3.97987 0.118647C3.81389 -0.0395079 3.54227 -0.0395079 3.37629 0.118647L0.124492 3.25185C-0.0414896 3.41002 -0.0414896 3.67363 0.124492 3.83179C0.207422 3.91464 0.320646 3.9523 0.42627 3.9523C0.531894 3.9523 0.64507 3.91464 0.728061 3.83179L3.24803 1.39905L3.24803 9.44293C3.24803 9.66888 3.43665 9.85718 3.67054 9.85718C3.90442 9.85718 4.10059 9.67642 4.10059 9.44293L4.10059 1.39905L6.62056 3.83179C6.78654 3.98996 7.05816 3.98996 7.22414 3.83179C7.39768 3.67363 7.39768 3.41002 7.23168 3.25185Z" fill="#FFFFFF" >
|
||||
</path>
|
||||
</svg>
|
||||
<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" fill="none"><path d="M3.71958 2.71666L0.414964 2.71666C0.188621 2.71666 0 2.52837 0 2.30241C0 2.07646 0.188621 1.88816 0.414964 1.88816L3.71958 1.88816C3.94592 1.88816 4.13455 2.07646 4.13455 2.30241C4.13455 2.5359 3.95348 2.71666 3.71958 2.71666ZM3.71958 6.01556L0.414964 6.01556C0.188621 6.01556 0 5.82726 0 5.60131C0 5.37536 0.188621 5.18706 0.414964 5.18706L3.71958 5.18706C3.94592 5.18706 4.13455 5.37536 4.13455 5.60131C4.13455 5.8348 3.95348 6.01556 3.71958 6.01556ZM3.71958 9.31445L0.414964 9.31445C0.188621 9.31445 0 9.12616 0 8.90021C0 8.67425 0.188621 8.48596 0.414964 8.48596L3.71958 8.48596C3.94592 8.48596 4.13455 8.67425 4.13455 8.90021C4.13455 9.13369 3.95348 9.31445 3.71958 9.31445ZM4.76832 4.36611L8.02013 1.2329C8.18611 1.07475 8.45773 1.07475 8.62371 1.2329L11.8755 4.36611C12.0415 4.52428 12.0415 4.78788 11.8755 4.94605C11.7926 5.0289 11.6794 5.06656 11.5737 5.06656C11.4681 5.06656 11.3549 5.0289 11.2719 4.94605L8.75197 2.51331L8.75197 10.5572C8.75197 10.7831 8.56335 10.9714 8.32946 10.9714C8.09558 10.9714 7.89941 10.7907 7.89941 10.5572L7.89941 2.51331L5.37944 4.94605C5.21346 5.10422 4.94184 5.10422 4.77586 4.94605C4.60232 4.78788 4.60232 4.52428 4.76832 4.36611Z" fill="#FFFFFF" ></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
1
src/renderer/src/icons/svg/preview.svg
Normal file
@ -0,0 +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" fill="none"><path d="M6 7.49998C5.175 7.49998 4.5 6.82499 4.5 5.99999C4.5 5.175 5.175 4.5 6 4.5C6.825 4.5 7.5 5.175 7.5 5.99999C7.5 6.82499 6.825 7.49998 6 7.49998ZM6 6.37499C6.22499 6.37499 6.375 6.22499 6.375 5.99999C6.375 5.775 6.22499 5.625 6 5.625C5.775 5.625 5.625 5.775 5.625 5.99999C5.625 6.22499 5.775 6.37499 6 6.37499Z" fill="#00FFFF" ></path><path d="M5.96252 9.75C2.1 9.75 0 6 0 6C0 6 2.13751 2.25 6.00002 2.25C9.90004 2.25 12 6 12 6C12 6 9.86254 9.7125 5.96252 9.75C6.00002 9.75 5.96252 9.75 5.96252 9.75ZM6.00002 8.625C8.32504 8.625 9.93753 6.9 10.65 6C9.97504 5.1 8.36253 3.375 6.00002 3.375C3.67501 3.375 2.06251 5.1 1.35001 6C2.02501 6.9 3.63752 8.625 6.00002 8.625Z" fill="#00FFFF" ></path></svg>
|
||||
|
After Width: | Height: | Size: 845 B |
1
src/renderer/src/icons/svg/third-party.svg
Normal file
@ -0,0 +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" fill="none"><path d="M9.39102 4.01717C9.54555 4.27468 9.44253 4.58369 9.23649 4.7382L6.5064 6.43778L6.5064 9.52791C6.5064 9.83691 6.30035 10.0429 5.99129 10.0429C5.68222 10.0429 5.47618 9.83691 5.47618 9.52791L5.47618 6.48928L2.64307 4.7897C2.38552 4.6352 2.334 4.32618 2.48854 4.06868C2.64307 3.81116 2.95213 3.75967 3.20969 3.86267L6.0428 5.51074L8.72138 3.81116C8.92742 3.70816 9.23649 3.81116 9.39102 4.01717Z" fill="#FFFFFF" ></path><path d="M10.885 2.62661L6.55806 0.154507C6.24899 -0.0515022 5.83689 -0.0515022 5.52783 0.154507L1.2009 2.62661C0.891835 2.83262 0.685791 3.14164 0.685791 3.50214L0.685791 8.49786C0.685791 8.85838 0.891835 9.21888 1.2009 9.37339L5.52783 11.8455C5.83689 12.0515 6.24899 12.0515 6.55806 11.8455L10.885 9.37339C11.1941 9.16739 11.4001 8.85838 11.4001 8.49786L11.4001 3.55365C11.4001 3.14164 11.1941 2.83262 10.885 2.62661ZM10.3699 8.49786L6.04294 11.0215L1.71601 8.54936L1.71601 3.55365L6.04294 1.03004L10.3699 3.50214L10.3699 8.49786Z" fill="#FFFFFF" ></path></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@ -67,7 +67,7 @@ export function getNamefromPath(path) {
|
||||
}
|
||||
|
||||
export function handleInputLimit(e) {
|
||||
if (e.data === '-') {
|
||||
if (e.data === '-' || e.data === '.') {
|
||||
}
|
||||
else {
|
||||
e.target.value = e.target.value || 0
|
||||
|
||||
@ -97,10 +97,12 @@
|
||||
:header-cell-style="{ 'text-align': 'center' }"
|
||||
border
|
||||
style="width: 100%"
|
||||
ref="tableRef"
|
||||
@header-dragend="handleHeaderDragend"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column prop="militaryName" label="名称" />
|
||||
<el-table-column prop="militaryDataUrl" label="缩略图" width="100">
|
||||
<el-table-column prop="militaryName" label="名称" width="139" />
|
||||
<el-table-column prop="militaryDataUrl" label="缩略图" width="140">
|
||||
<template #default="{ row }">
|
||||
<!-- <el-image
|
||||
style="width: 80px; height: 60px"
|
||||
@ -109,7 +111,7 @@
|
||||
<el-image style="width: 80px; height: 60px" :src="service + row.militaryDataUrl" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<el-table-column label="操作" width="210">
|
||||
<template #default="{ row }">
|
||||
<el-button size="small">编辑军标</el-button>
|
||||
<el-button size="small" @click="handleDelete(row)">删除</el-button>
|
||||
@ -145,9 +147,9 @@
|
||||
>
|
||||
<el-input v-model="modelType" style="width: calc(100% - 60px)" placeholder="请输入数据" />
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<span class="dialog-footer" style="display: block; text-align: center">
|
||||
<el-button type="primary" @click="addType"> 确定 </el-button>
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@ -211,6 +213,23 @@ const treeRef = ref()
|
||||
// @ts-ignore
|
||||
var sortableInstance: any = reactive(null)
|
||||
|
||||
const tableRef = ref()
|
||||
|
||||
const handleHeaderDragend = (newWidth, oldWidth, column, event) => {
|
||||
const columns = tableRef.value?.$refs.tableHeaderRef.columnRows[0]
|
||||
let widthDiff = newWidth - oldWidth
|
||||
let otherColumn = columns.filter((item) => {
|
||||
return item.property != column.property || item.label != column.label
|
||||
})
|
||||
let sum = 0
|
||||
otherColumn.forEach((item) => {
|
||||
sum += item.width
|
||||
})
|
||||
otherColumn.forEach((item) => {
|
||||
item.width = item.width - (item.width / sum) * widthDiff
|
||||
})
|
||||
}
|
||||
|
||||
//搜索
|
||||
var photoName = ref('')
|
||||
|
||||
@ -488,10 +507,15 @@ const showImage = (row: any) => {
|
||||
const handleContextMenu = (event: MouseEvent, row: TypeNode) => {
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
|
||||
if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
let rect = document.getElementsByClassName('settingPop')[0].getBoundingClientRect()
|
||||
contextMenu.x = event.clientX - rect.left
|
||||
contextMenu.y = event.clientY - rect.top
|
||||
} else {
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
}
|
||||
contextMenu.currentRow = row
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
|
||||
if (row.parentId) {
|
||||
// 二级分类菜单
|
||||
@ -512,6 +536,14 @@ const handleContextMenu = (event: MouseEvent, row: TypeNode) => {
|
||||
clickTreeNode = row
|
||||
|
||||
contextMenu.visible = true
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
document.getElementsByClassName('settingPop')[0].addEventListener('mousedown', func)
|
||||
}
|
||||
let func = () => {
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
setTimeout(() => {
|
||||
contextMenu.visible = false
|
||||
}, 200)
|
||||
}
|
||||
const toggleExpand = (row: any) => {
|
||||
if (row.childNodes.length != 0) {
|
||||
@ -547,12 +579,20 @@ const getModelListByType = (id) => {
|
||||
}
|
||||
const divContextMenu = (event: MouseEvent) => {
|
||||
event.preventDefault()
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
let rect = document.getElementsByClassName('settingPop')[0].getBoundingClientRect()
|
||||
contextMenu.x = event.clientX - rect.left
|
||||
contextMenu.y = event.clientY - rect.top
|
||||
} else {
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
}
|
||||
clickTreeNode = null
|
||||
contextMenu.items = [{ command: 'addType', label: '添加军标类型', icon: 'add' }]
|
||||
|
||||
contextMenu.visible = true
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
document.getElementsByClassName('settingPop')[0].addEventListener('mousedown', func)
|
||||
}
|
||||
|
||||
const handleMenuCommand = (command: string) => {
|
||||
@ -1012,8 +1052,11 @@ onMounted(() => {
|
||||
.el-message-box {
|
||||
--el-messagebox-title-color: #fff !important;
|
||||
--el-messagebox-content-color: #fff !important;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(var(--color-base1), 0) 0%, rgba(var(--color-base1), 0.2) 100%),
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(var(--color-base1), 0) 0%,
|
||||
rgba(var(--color-base1), 0.2) 100%
|
||||
),
|
||||
rgba(0, 0, 0, 0.6) !important;
|
||||
.el-message-box__btns {
|
||||
.el-button {
|
||||
|
||||
@ -93,14 +93,16 @@
|
||||
<el-col :span="18">
|
||||
<el-card shadow="hover">
|
||||
<el-table
|
||||
ref="tableRef"
|
||||
:data="modelList"
|
||||
:header-cell-style="{ 'text-align': 'center' }"
|
||||
border
|
||||
style="width: 100%"
|
||||
@header-dragend="handleHeaderDragend"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column prop="modelName" label="模型名称" />
|
||||
<el-table-column prop="thumbnail" label="缩略图" min-width="100">
|
||||
<el-table-column prop="modelName" label="模型名称" width="139" />
|
||||
<el-table-column prop="thumbnail" label="缩略图" width="140">
|
||||
<template #default="{ row }">
|
||||
<el-image
|
||||
style="width: 80px; height: 60px"
|
||||
@ -109,7 +111,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="205">
|
||||
<el-table-column label="操作" width="210">
|
||||
<template #default="{ row }">
|
||||
<!-- <el-button size="small" @click="handleEdit(row)">编辑</el-button> -->
|
||||
<el-button size="small" @click="showImage(row)">预览</el-button>
|
||||
@ -147,13 +149,13 @@
|
||||
>
|
||||
<el-input
|
||||
v-model.trim="modelType"
|
||||
style="width(100% - 60px)"
|
||||
style="width: calc(100% - 60px)"
|
||||
placeholder="请输入模型类型名称"
|
||||
/>
|
||||
<template #footer>
|
||||
<span class="dialog-footer" style="text-align: center">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<span class="dialog-footer" style="display: block; text-align: center">
|
||||
<el-button type="primary" @click="addType"> 确定 </el-button>
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@ -220,6 +222,24 @@ const contextMenu = reactive({
|
||||
})
|
||||
|
||||
const treeRef = ref()
|
||||
//表头拖拽
|
||||
const tableRef = ref(null)
|
||||
|
||||
const handleHeaderDragend = (newWidth, oldWidth, column, event) => {
|
||||
const columns = tableRef.value.$refs.tableHeaderRef.columnRows[0]
|
||||
let widthDiff = newWidth - oldWidth
|
||||
let otherColumn = columns.filter((item) => {
|
||||
return item.property != column.property || item.label != column.label
|
||||
})
|
||||
let sum = 0
|
||||
otherColumn.forEach((item) => {
|
||||
sum += item.width
|
||||
})
|
||||
otherColumn.forEach((item) => {
|
||||
item.width = item.width - (item.width / sum) * widthDiff
|
||||
})
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
var sortableInstance: any = reactive(null)
|
||||
|
||||
@ -563,36 +583,16 @@ const handleContextMenu = (event: MouseEvent, row: TypeNode) => {
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
contextMenu.currentRow = row
|
||||
console.log(event, 'eventevent')
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
|
||||
// 计算相对于文档的坐标
|
||||
// if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
// document.getElementsByClassName('modelTreeRowCon')[0].style.position = 'relative'
|
||||
// document.getElementsByClassName('context-menu')[0].style.position = 'absolute'
|
||||
// contextMenu.x = event.offsetX + 28
|
||||
// contextMenu.y =
|
||||
// event.offsetX < 0 || event.offsetX == 0 ? event.offsetY + 145 : event.offsetY + 110
|
||||
// // let rect = document.getElementsByClassName('modelTreeRowCon')[0].getBoundingClientRect()
|
||||
// // contextMenu.x = event.clientX - rect.top
|
||||
// // contextMenu.y = event.clientY - rect.left
|
||||
// // console.log('x', event.clientX, rect.left, 'y', event.clientY, rect.top)
|
||||
// } else {
|
||||
// document.getElementsByClassName('modelTreeRowCon')[0].style.position = 'unset'
|
||||
// document.getElementsByClassName('context-menu')[0].style.position = 'fixed'
|
||||
// contextMenu.x = event.clientX
|
||||
// contextMenu.y = event.clientY
|
||||
// }
|
||||
// console.log(contextMenu.x, contextMenu.y, 'kklklkkl')
|
||||
// if (row.parentId) {
|
||||
// // 二级分类菜单
|
||||
// contextMenu.items = [
|
||||
// { command: 'import', label: '导入模型', icon: 'importModel' },
|
||||
// { command: 'rename', label: '重命名', icon: 'rename' },
|
||||
// { command: 'delete', label: '删除', icon: 'delModel' }
|
||||
// ]
|
||||
// } else {
|
||||
if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
let rect = document.getElementsByClassName('settingPop')[0].getBoundingClientRect()
|
||||
contextMenu.x = event.clientX - rect.left
|
||||
contextMenu.y = event.clientY - rect.top
|
||||
} else {
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
}
|
||||
|
||||
// 一级分类菜单
|
||||
contextMenu.items = [
|
||||
{ command: 'add-child', label: '添加子类型', icon: 'add' },
|
||||
@ -604,14 +604,14 @@ const handleContextMenu = (event: MouseEvent, row: TypeNode) => {
|
||||
clickTreeNode = row
|
||||
|
||||
contextMenu.visible = true
|
||||
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
document.getElementsByClassName('settingPop')[0].addEventListener('mousedown', func)
|
||||
}
|
||||
let func = () => {
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
setTimeout(() => {
|
||||
contextMenu.visible = false
|
||||
}, 100)
|
||||
}, 200)
|
||||
}
|
||||
const toggleExpand = (row: any) => {
|
||||
if (row.childNodes.length != 0) {
|
||||
@ -649,26 +649,21 @@ const getModelListByType = (id) => {
|
||||
}
|
||||
const divContextMenu = (event: MouseEvent) => {
|
||||
event.preventDefault()
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
|
||||
// if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
// document.getElementsByClassName('modelTreeRowCon')[0].style.position = 'relative'
|
||||
// document.getElementsByClassName('context-menu')[0].style.position = 'absolute'
|
||||
// contextMenu.x = event.offsetX + 28
|
||||
// contextMenu.y =
|
||||
// event.offsetX < 0 || event.offsetX == 0 ? event.offsetY + 145 : event.offsetY + 110
|
||||
// } else {
|
||||
// document.getElementsByClassName('modelTreeRowCon')[0].style.position = 'unset'
|
||||
// document.getElementsByClassName('context-menu')[0].style.position = 'fixed'
|
||||
// contextMenu.x = event.clientX
|
||||
// contextMenu.y = event.clientY
|
||||
// }
|
||||
if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
let rect = document.getElementsByClassName('settingPop')[0].getBoundingClientRect()
|
||||
contextMenu.x = event.clientX - rect.left
|
||||
contextMenu.y = event.clientY - rect.top
|
||||
} else {
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
}
|
||||
|
||||
clickTreeNode = null
|
||||
contextMenu.items = [{ command: 'addType', label: '添加模型类型', icon: 'add' }]
|
||||
|
||||
contextMenu.visible = true
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
document.getElementsByClassName('settingPop')[0].addEventListener('mousedown', func)
|
||||
}
|
||||
|
||||
const handleMenuCommand = (command: string) => {
|
||||
|
||||
@ -105,10 +105,12 @@
|
||||
:header-cell-style="{ 'text-align': 'center' }"
|
||||
border
|
||||
style="width: 100%"
|
||||
ref="tableRef"
|
||||
@header-dragend="handleHeaderDragend"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column prop="iconName" label="名称" />
|
||||
<el-table-column prop="iconDataUrl" label="缩略图" width="100">
|
||||
<el-table-column prop="iconName" label="名称" width="139" />
|
||||
<el-table-column prop="iconDataUrl" label="缩略图" width="140">
|
||||
<template #default="{ row, $index }" v-if="activeIndex === 2">
|
||||
<el-image
|
||||
ref="imageRef"
|
||||
@ -136,7 +138,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<el-table-column label="操作" width="210">
|
||||
<template #default="{ row, $index }">
|
||||
<el-button size="small" @click="reviewPhoto($index)">预览</el-button>
|
||||
<el-button size="small" v-if="activeIndex === 2" @click="editPhotoName(row)"
|
||||
@ -177,9 +179,9 @@
|
||||
>
|
||||
<el-input v-model="modelType" style="width: calc(100% - 60px)" placeholder="请输入名称" />
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<span class="dialog-footer" style="display: block; text-align: center">
|
||||
<el-button type="primary" @click="addType"> 确定 </el-button>
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@ -254,6 +256,24 @@ const typeClick = (index) => {
|
||||
getModelList()
|
||||
}
|
||||
|
||||
//表头拖拽
|
||||
const tableRef = ref()
|
||||
|
||||
const handleHeaderDragend = (newWidth, oldWidth, column, event) => {
|
||||
const columns = tableRef.value.$refs.tableHeaderRef.columnRows[0]
|
||||
let widthDiff = newWidth - oldWidth
|
||||
let otherColumn = columns.filter((item) => {
|
||||
return item.property != column.property || item.label != column.label
|
||||
})
|
||||
let sum = 0
|
||||
otherColumn.forEach((item) => {
|
||||
sum += item.width
|
||||
})
|
||||
otherColumn.forEach((item) => {
|
||||
item.width = item.width - (item.width / sum) * widthDiff
|
||||
})
|
||||
}
|
||||
|
||||
var expandedKeys: any = ref([])
|
||||
// 获取当前所有展开节点的key
|
||||
const getExpandedKeys = () => {
|
||||
@ -571,16 +591,11 @@ const handleContextMenu = (event: MouseEvent, row: TypeNode) => {
|
||||
}
|
||||
|
||||
contextMenu.currentRow = row
|
||||
// contextMenu.x = event.clientX
|
||||
// contextMenu.y = event.clientY
|
||||
if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
document.getElementsByClassName('photoTreeRowCon')[0].style.position = 'relative'
|
||||
document.getElementsByClassName('context-menu')[0].style.position = 'absolute'
|
||||
contextMenu.x = event.offsetX
|
||||
contextMenu.y = event.offsetY + 150
|
||||
let rect = document.getElementsByClassName('settingPop')[0].getBoundingClientRect()
|
||||
contextMenu.x = event.clientX - rect.left
|
||||
contextMenu.y = event.clientY - rect.top
|
||||
} else {
|
||||
document.getElementsByClassName('photoTreeRowCon')[0].style.position = 'unset'
|
||||
document.getElementsByClassName('context-menu')[0].style.position = 'fixed'
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
}
|
||||
@ -604,6 +619,14 @@ const handleContextMenu = (event: MouseEvent, row: TypeNode) => {
|
||||
clickTreeNode = row
|
||||
|
||||
contextMenu.visible = true
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
document.getElementsByClassName('settingPop')[0].addEventListener('mousedown', func)
|
||||
}
|
||||
let func = () => {
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
setTimeout(() => {
|
||||
contextMenu.visible = false
|
||||
}, 200)
|
||||
}
|
||||
const toggleExpand = (row: any) => {
|
||||
if (row.childNodes.length != 0) {
|
||||
@ -648,16 +671,11 @@ const divContextMenu = (event: MouseEvent) => {
|
||||
return
|
||||
}
|
||||
event.preventDefault()
|
||||
// contextMenu.x = event.clientX
|
||||
// contextMenu.y = event.clientY
|
||||
if (document.getElementsByClassName('settingPop')[0]?.style.transform.length) {
|
||||
document.getElementsByClassName('photoTreeRowCon')[0].style.position = 'relative'
|
||||
document.getElementsByClassName('context-menu')[0].style.position = 'absolute'
|
||||
contextMenu.x = event.offsetX
|
||||
contextMenu.y = event.offsetY + 150
|
||||
let rect = document.getElementsByClassName('settingPop')[0].getBoundingClientRect()
|
||||
contextMenu.x = event.clientX - rect.left
|
||||
contextMenu.y = event.clientY - rect.top
|
||||
} else {
|
||||
document.getElementsByClassName('photoTreeRowCon')[0].style.position = 'unset'
|
||||
document.getElementsByClassName('context-menu')[0].style.position = 'fixed'
|
||||
contextMenu.x = event.clientX
|
||||
contextMenu.y = event.clientY
|
||||
}
|
||||
@ -665,6 +683,8 @@ const divContextMenu = (event: MouseEvent) => {
|
||||
contextMenu.items = [{ command: 'addType', label: '添加图标类型', icon: 'add' }]
|
||||
|
||||
contextMenu.visible = true
|
||||
document.getElementsByClassName('settingPop')[0].removeEventListener('mousedown', func)
|
||||
document.getElementsByClassName('settingPop')[0].addEventListener('mousedown', func)
|
||||
}
|
||||
|
||||
const handleMenuCommand = (command: string) => {
|
||||
@ -1125,10 +1145,7 @@ onMounted(() => {
|
||||
width: 90px;
|
||||
height: 32px;
|
||||
opacity: 1;
|
||||
border-radius:
|
||||
0px 4px,
|
||||
4px,
|
||||
0px;
|
||||
border-radius: 0px 4px, 4px, 0px;
|
||||
background: rgba(var(--color-base1), 0.2);
|
||||
border: 1px solid rgba(var(--color-base1), 0.1);
|
||||
display: flex;
|
||||
|
||||
@ -683,7 +683,7 @@ const intoBack = async () => {
|
||||
devTools: true
|
||||
}
|
||||
},
|
||||
`http://localhost:${availablePort}/backManage/index.html`,
|
||||
`http://localhost:${availablePort}/backManage/index.html#/login`,
|
||||
{},
|
||||
id
|
||||
)
|
||||
|
||||
@ -177,11 +177,14 @@ defineExpose({
|
||||
height: 50vh;
|
||||
|
||||
:deep(.el-dialog) {
|
||||
background:
|
||||
linear-gradient(180deg, rgba(var(--color-base1), 0.2) 0%, rgba(var(--color-base1), 0) 100%),
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(var(--color-base1), 0.2) 0%,
|
||||
rgba(var(--color-base1), 0) 100%
|
||||
),
|
||||
rgba(0, 0, 0, 0.6);
|
||||
border: 1px solid var(--color-border1);
|
||||
padding-left: 0 !important;
|
||||
// padding-left: 0 !important;
|
||||
}
|
||||
|
||||
:deep(.el-dialog__body) {
|
||||
@ -246,22 +249,22 @@ defineExpose({
|
||||
|
||||
// height: 50vh;
|
||||
:deep(
|
||||
.el-tabs--left .el-tabs__active-bar.is-left,
|
||||
.el-tabs--left .el-tabs__active-bar.is-right,
|
||||
.el-tabs--right .el-tabs__active-bar.is-left,
|
||||
.el-tabs--right .el-tabs__active-bar.is-right
|
||||
) {
|
||||
.el-tabs--left .el-tabs__active-bar.is-left,
|
||||
.el-tabs--left .el-tabs__active-bar.is-right,
|
||||
.el-tabs--right .el-tabs__active-bar.is-left,
|
||||
.el-tabs--right .el-tabs__active-bar.is-right
|
||||
) {
|
||||
width: 3px;
|
||||
background: rgba(var(--color-base1), 1);
|
||||
height: 40px !important;
|
||||
}
|
||||
|
||||
:deep(
|
||||
.el-tabs--left .el-tabs__nav-wrap.is-left::after,
|
||||
.el-tabs--left .el-tabs__nav-wrap.is-right::after,
|
||||
.el-tabs--right .el-tabs__nav-wrap.is-left::after,
|
||||
.el-tabs--right .el-tabs__nav-wrap.is-right::after
|
||||
) {
|
||||
.el-tabs--left .el-tabs__nav-wrap.is-left::after,
|
||||
.el-tabs--left .el-tabs__nav-wrap.is-right::after,
|
||||
.el-tabs--right .el-tabs__nav-wrap.is-left::after,
|
||||
.el-tabs--right .el-tabs__nav-wrap.is-right::after
|
||||
) {
|
||||
width: 3px;
|
||||
}
|
||||
|
||||
|
||||
@ -13,18 +13,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<el-tooltip
|
||||
v-for="(item, i) of setList"
|
||||
:key="item.id"
|
||||
:content="t('iconTitle.' + item.name)"
|
||||
effect="customized"
|
||||
:hide-after="0"
|
||||
>
|
||||
<div
|
||||
class="set_item"
|
||||
:class="{ 'last-item': i === setList.length - 1 }"
|
||||
@click="item.callback"
|
||||
>
|
||||
<el-tooltip v-for="(item, i) of setList" :key="item.id" :content="t('iconTitle.' + item.name)" effect="customized"
|
||||
:hide-after="0">
|
||||
<div class="set_item" :class="{ 'last-item': i === setList.length - 1, 'first-item': i === 0 }"
|
||||
@click="item.callback">
|
||||
<svg-icon :name="item.icon" :size="20"></svg-icon>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
@ -52,20 +44,29 @@ eventBus.on('settingPop', (data) => {
|
||||
data ? setPupRef.value.open('current') : setPupRef.value.close()
|
||||
})
|
||||
const logout = async (e) => {
|
||||
let res = await LoginApi.logout()
|
||||
if (window.earth) {
|
||||
window.earth.destroy()
|
||||
window.earth = null
|
||||
}
|
||||
if (res.code === 200) {
|
||||
router.push({
|
||||
path: '/',
|
||||
query: {
|
||||
type: 'logout'
|
||||
ElMessageBox.confirm('您确定要退出当前账号?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async () => {
|
||||
let res = await LoginApi.logout()
|
||||
if (window.earth) {
|
||||
window.earth.destroy()
|
||||
window.earth = null
|
||||
}
|
||||
if (res.code === 200) {
|
||||
router.push({
|
||||
path: '/',
|
||||
query: {
|
||||
type: 'logout'
|
||||
}
|
||||
})
|
||||
// localStorage.clear()
|
||||
}
|
||||
})
|
||||
// localStorage.clear()
|
||||
}
|
||||
.catch(() => {
|
||||
})
|
||||
}
|
||||
|
||||
const fullScreen = (item) => {
|
||||
@ -78,25 +79,24 @@ const resetShow = (item) => {
|
||||
|
||||
const setList = ref([
|
||||
// 标准版本
|
||||
// {id: 4, index: 2, icon: 'layerTitleBg', className: 'header_public', callback: this.setShow},
|
||||
{
|
||||
id: 0,
|
||||
index: 0,
|
||||
icon: 'beidou',
|
||||
name: 'locate',
|
||||
icon: 'out_login',
|
||||
name: 'logout',
|
||||
className: 'header_public',
|
||||
dbcallback: (e) => {},
|
||||
callback: (e) => {}
|
||||
// dbcallback: this.flyTo,
|
||||
// callback: this.locate,
|
||||
dbcallback: null,
|
||||
callback: logout
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
index: 1,
|
||||
icon: 'sys_reset',
|
||||
icon: 'sys_set',
|
||||
name: 'set',
|
||||
className: 'header_public',
|
||||
name: 'reset',
|
||||
dbcallback: null,
|
||||
callback: resetShow
|
||||
callback: setShow
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
@ -109,30 +109,33 @@ const setList = ref([
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
index: 3,
|
||||
icon: 'sys_set',
|
||||
name: 'set',
|
||||
index: 4,
|
||||
icon: 'sys_reset',
|
||||
className: 'header_public',
|
||||
name: 'reset',
|
||||
dbcallback: null,
|
||||
callback: setShow
|
||||
callback: resetShow
|
||||
},
|
||||
// {id: 4, index: 2, icon: 'layerTitleBg', className: 'header_public', callback: this.setShow},
|
||||
{
|
||||
id: 4,
|
||||
index: 4,
|
||||
icon: 'out_login',
|
||||
name: 'logout',
|
||||
icon: 'beidou',
|
||||
name: 'locate',
|
||||
className: 'header_public',
|
||||
dbcallback: null,
|
||||
callback: logout
|
||||
}
|
||||
dbcallback: (e) => { },
|
||||
callback: (e) => { }
|
||||
// dbcallback: this.flyTo,
|
||||
// callback: this.locate,
|
||||
},
|
||||
])
|
||||
|
||||
ipcRenderer.invoke('getIsFullScreen').then((res) => {
|
||||
setList.value[2].icon = res ? 'full_screen_exit' : 'full_screen'
|
||||
setList.value[2].name = res ? 'shrink' : 'fullScreen'
|
||||
})
|
||||
ipcRenderer.on('fullscreen-status-changed', (event, isFullscreen) => {
|
||||
setList.value[2].icon = isFullscreen ? 'full_screen_exit' : 'full_screen'
|
||||
setList.value[2].name = isFullscreen ? 'shrink' : 'fullScreen'
|
||||
})
|
||||
</script>
|
||||
|
||||
@ -147,6 +150,7 @@ ipcRenderer.on('fullscreen-status-changed', (event, isFullscreen) => {
|
||||
// background: var(--svg-headColorbg);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: row-reverse;
|
||||
// justify-content: space-between;
|
||||
// border: 1px solid var(--svg-headColor3);
|
||||
padding: 10px 0;
|
||||
@ -167,15 +171,13 @@ ipcRenderer.on('fullscreen-status-changed', (event, isFullscreen) => {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 1px;
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(var(--color-base1), 0),
|
||||
rgba(var(--color-base1), 1),
|
||||
rgba(204, 204, 204, 0)
|
||||
);
|
||||
background: linear-gradient(180deg,
|
||||
rgba(var(--color-base1), 0),
|
||||
rgba(var(--color-base1), 1),
|
||||
rgba(204, 204, 204, 0));
|
||||
}
|
||||
|
||||
.set_item.last-item::after {
|
||||
.set_item.first-item::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
@ -61,7 +61,7 @@ eventBus.on('tufuInput', (data) => {
|
||||
// align-items: center;
|
||||
// justify-content: center;
|
||||
position: absolute;
|
||||
top: 14%;
|
||||
top: 130px;
|
||||
right: 15px;
|
||||
}
|
||||
.el-range-editor.is-active .el-range-editor.is-active:hover,
|
||||
|
||||
@ -255,16 +255,19 @@ onMounted(() => {
|
||||
if (window.sunshine) {
|
||||
let data = JSON.parse(localStorage.getItem('shineSetting'))
|
||||
// weatherData.currWeather = data.currWeather
|
||||
//是否是实时光照
|
||||
if (!data?.currWeather) {
|
||||
weatherData.time = data.time
|
||||
if (data) {
|
||||
//判断是否有数据
|
||||
//是否是实时光照
|
||||
if (!data?.currWeather) {
|
||||
weatherData.time = data.time
|
||||
}
|
||||
weatherData.softShadow = data.softShadow
|
||||
weatherData.darkness = data.darkness
|
||||
weatherData.speed = data.speed
|
||||
data?.wearther.forEach((item, index) => {
|
||||
list[index].status = item.status
|
||||
})
|
||||
}
|
||||
weatherData.softShadow = data.softShadow
|
||||
weatherData.darkness = data.darkness
|
||||
weatherData.speed = data.speed
|
||||
data?.wearther.forEach((item, index) => {
|
||||
list[index].status = item.status
|
||||
})
|
||||
// list = data.wearther
|
||||
switchStatus.value = true
|
||||
sunshine = window.sunshine
|
||||
@ -278,7 +281,7 @@ onMounted(() => {
|
||||
// sunshine = new YJ.Global.efflect.Sunshine(window.earth, { id: 123 })
|
||||
timeline.moveComplay((item) => {
|
||||
weatherData.currWeather = false
|
||||
sunshine.timeBar = item
|
||||
sunshine && (sunshine.timeBar = item)
|
||||
})
|
||||
|
||||
// timeline.setTime(myData)
|
||||
@ -561,8 +564,11 @@ var shadowChange = () => {
|
||||
width: 250px;
|
||||
height: auto;
|
||||
z-index: 30;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(var(--color-base1), 0) 0%, rgba(var(--color-base1), 0.2) 100%),
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(var(--color-base1), 0) 0%,
|
||||
rgba(var(--color-base1), 0.2) 100%
|
||||
),
|
||||
rgba(0, 0, 0, 0.6);
|
||||
padding: 10px;
|
||||
border: 1.5px solid rgba(var(--color-base1), 1);
|
||||
|
||||
@ -46,14 +46,14 @@ export default class TimeLine {
|
||||
that.timeline.addEventListener('mousedown', (e) => {
|
||||
|
||||
if (e.srcElement.className === 'handle') {
|
||||
if (!that.sunShine) {
|
||||
ElMessage({
|
||||
message: '请开启光照功能',
|
||||
type: 'warning'
|
||||
})
|
||||
} else {
|
||||
that.isDragging = true;
|
||||
}
|
||||
// if (!that.sunShine) {
|
||||
// ElMessage({
|
||||
// message: '请开启光照功能',
|
||||
// type: 'warning'
|
||||
// })
|
||||
// } else {
|
||||
that.isDragging = true;
|
||||
// }
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
@ -88,7 +88,7 @@ export default class TimeLine {
|
||||
that.sdk.viewer && (that.sdk.viewer.clock.shouldAnimate = false)
|
||||
|
||||
//判断当没有开启光照时,点击停止播放时关闭实时光照按钮
|
||||
if (document.getElementById('weatherSwitch').style.color == 'rgb(255, 255, 255)') {
|
||||
if (document.getElementById('weatherSwitch').style.color == 'rgba(var(--color-base1), 1)') {
|
||||
callback(false)
|
||||
}
|
||||
} else {//播放
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
</div>
|
||||
<div class="col" style="flex: 0 0 60%;">
|
||||
<div class="row">
|
||||
<div class="col input-select-unit-box">
|
||||
<div class="col">
|
||||
<span class="label" style="margin-right: 0px;">投影面积:</span>
|
||||
<input class="input input-text" readonly type="text" v-model="area">
|
||||
<el-select v-model="areaUnit">
|
||||
|
||||
@ -325,6 +325,7 @@ const draw = (data) => {
|
||||
}
|
||||
|
||||
const startVideo = () => {
|
||||
//@ts-ignore
|
||||
document.getElementById('earthContainer').style.zIndex = 100
|
||||
$sendElectronChanel('startRecoder')
|
||||
ElMessage({
|
||||
@ -336,6 +337,7 @@ const startVideo = () => {
|
||||
if (e.key === 'Escape') {
|
||||
$sendElectronChanel('endRecoder')
|
||||
window.removeEventListener('keydown', handleKeyDown)
|
||||
//@ts-ignore
|
||||
document.getElementById('earthContainer').style.zIndex = ''
|
||||
}
|
||||
}
|
||||
|
||||
@ -214,8 +214,7 @@ const open = () => {
|
||||
routePlanning.createRoute(res.data.routes[0]?.points)
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
document.getElementById('clearRoute').click()
|
||||
document.getElementById('clearRoute')?.click()
|
||||
}
|
||||
}
|
||||
}, 100)
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
</div>
|
||||
<div class="col" style="flex: 0 0 60%;">
|
||||
<div class="row">
|
||||
<div class="col input-select-unit-box">
|
||||
<div class="col">
|
||||
<span class="label" style="margin-right: 0px;">投影面积:</span>
|
||||
<input class="input input-text" readonly type="text" v-model="area">
|
||||
<el-select v-model="areaUnit">
|
||||
@ -277,6 +277,7 @@ const open = async (id: any, type: any) => {
|
||||
|
||||
const heightModeChange = (val) => {
|
||||
that.heightMode = heightMode.value
|
||||
entityOptions.value.spreadState = false
|
||||
}
|
||||
|
||||
const heightConfirm = () => {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="attribute">
|
||||
<div class="div-item attribute">
|
||||
<div class="row">
|
||||
<div class="col attribute-select-box">
|
||||
<span class="label" style="line-height: 32px">{{ t('general.内容类型') }}</span>
|
||||
@ -244,8 +244,8 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.编辑内容') }}</span>
|
||||
<input class="input goods-select-input" type="text" style="width: 180px;margin-right: 10px;"
|
||||
v-model="goodsKeywords">
|
||||
<input class="input goods-select-input" type="text" placeholder="请输入关键字" style="width: 180px;margin-right: 10px;"
|
||||
v-model="goodsKeywords">
|
||||
<button class="select btn" @click="goodsFilter">{{ t('general.搜索') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -327,7 +327,6 @@ const goodsFilter = () => {
|
||||
for (let m = 0; m < goodsList.value.length; m++) {
|
||||
if ('id' in goodsList.value[m]) {
|
||||
if (goodsList.value[m].id === props.entityOptions.attributeGoods[i].id) {
|
||||
goodsList.value[m].name = props.entityOptions.attributeGoods[i].name
|
||||
goodsList.value[m].cnt = props.entityOptions.attributeGoods[i].cnt
|
||||
break
|
||||
}
|
||||
@ -640,7 +639,7 @@ const _addRtmp = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const rtmpEdit = (index: any, item: { name: any; url: any; id: any }) => {
|
||||
const rtmpEdit = (index: any, item: { name: any; url: any; id: any; }) => {
|
||||
let active = {
|
||||
index: index,
|
||||
name: item.name,
|
||||
|
||||
@ -3,144 +3,147 @@
|
||||
:closeCallback="closeCallback">
|
||||
<template #content>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: unset">{{ t('general.名称') }}</span>
|
||||
<input class="input" type="text" v-model="entityOptions.labelText" @change="changeName" />
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="title1">
|
||||
<div class="row">
|
||||
<p class="lable-left-line">{{ t('dialog.point.WGS84') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="title2">
|
||||
<div class="row coordinate-select-box">
|
||||
<div class="lable-left-line">
|
||||
{{ t('dialog.point.转换坐标选择') }}
|
||||
<el-select class="input input-select coordinate-select" style="width: 155px; margin-left: 20px"
|
||||
v-model="coordinate" @change="coordinateChange" placeholder="请选择">
|
||||
<el-option v-for="item in epsg_map" :key="item.epsg" :label="item.name" :value="item.epsg">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane :label="t('general.基础信息')" name="1">
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: unset">{{ t('general.名称') }}</span>
|
||||
<input class="input" type="text" v-model="entityOptions.labelText" @change="changeName" />
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div style="width: 46%;">
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.经度') }}</span>
|
||||
<input class="input" type="number" title="" min="-180" max="180" v-model="entityOptions.lng"
|
||||
@change="changLng" @input="$handleInputLimit" />
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="title1">
|
||||
<div class="row">
|
||||
<p class="lable-left-line">{{ t('dialog.point.WGS84') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="title2">
|
||||
<div class="row coordinate-select-box">
|
||||
<div class="lable-left-line">
|
||||
{{ t('dialog.point.转换坐标选择') }}
|
||||
<el-select class="input input-select coordinate-select" style="width: 155px; margin-left: 20px"
|
||||
v-model="coordinate" @change="coordinateChange" placeholder="请选择">
|
||||
<el-option v-for="item in epsg_map" :key="item.epsg" :label="item.name" :value="item.epsg">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.纬度') }}</span>
|
||||
<input class="input" type="number" title="" min="-90" max="90" v-model="entityOptions.lat"
|
||||
@change="changLat" @input="$handleInputLimit" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.海拔高度') }}</span>
|
||||
<div class="input-number input-number-unit-1 alt-box"
|
||||
:class="{ disabled: heightMode == 2 || heightMode === 3 }">
|
||||
<input class="input" type="number" title="" min="-9999999" max="999999999" v-model="entityOptions.alt"
|
||||
@change="changAlt" @input="$handleInputLimit" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div style="width: 46%;">
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.经度') }}</span>
|
||||
<input class="input" type="number" title="" min="-180" max="180" v-model="entityOptions.lng"
|
||||
@change="changLng" @input="$handleInputLimit" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.纬度') }}</span>
|
||||
<input class="input" type="number" title="" min="-90" max="90" v-model="entityOptions.lat"
|
||||
@change="changLat" @input="$handleInputLimit" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.海拔高度') }}</span>
|
||||
<div class="input-number input-number-unit-1 alt-box"
|
||||
:class="{ disabled: heightMode == 2 || heightMode === 3 }">
|
||||
<input class="input" type="number" title="" min="-9999999" max="999999999"
|
||||
v-model="entityOptions.alt" @change="changAlt" @input="$handleInputLimit" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width: 50%;">
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('dialog.point.XAxis') }}:</span>
|
||||
<input style="border: none; background: none" class="input convert-x" readonly v-model="x" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('dialog.point.YAxis') }}:</span>
|
||||
<input style="border: none; background: none" class="input convert-y" readonly v-model="y" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('dialog.point.ZAxis') }}:</span>
|
||||
<input style="border: none; background: none" class="input convert-z" readonly v-model="z" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width: 50%;">
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('dialog.point.XAxis') }}:</span>
|
||||
<input style="border: none; background: none" class="input convert-x" readonly v-model="x" />
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<setStyle type="点" :sourceType="sourceType" :entityOptions="entityOptions"></setStyle>
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none">{{ t('dialog.point.icon.show') }}</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.billboardShow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-bottom: 5px">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('dialog.point.YAxis') }}:</span>
|
||||
<input style="border: none; background: none" class="input convert-y" readonly v-model="y" />
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none">{{ t('dialog.point.icon.current') }}</span>
|
||||
<div class="image-box" @click="clickChangeImage">
|
||||
<img class="image" :src="entityOptions.billboardImage" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none">{{ t('dialog.point.icon.multiple') }}</span>
|
||||
<div class="input-number input-number-unit-2">
|
||||
<input class="input" type="number" title="" min="0.1" max="99" v-model="entityOptions.billboardScale"
|
||||
@input="$handleInputLimit" />
|
||||
<span class="unit">{{ t('general.times') }}</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label">{{ t('dialog.point.ZAxis') }}:</span>
|
||||
<input style="border: none; background: none" class="input convert-z" readonly v-model="z" />
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div class="col" style="flex: 0 0 80px;">
|
||||
<span class="label" style="flex: none;">{{ t('dialog.point.text.show') }}</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.labelShow" />
|
||||
</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" style="padding-left: 12px;">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none">{{ t('dialog.point.icon.show') }}</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.billboardShow" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none">{{ t('dialog.point.icon.current') }}</span>
|
||||
<div class="image-box" @click="clickChangeImage">
|
||||
<img class="image" :src="entityOptions.billboardImage" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none">{{ t('dialog.point.icon.multiple') }}</span>
|
||||
<div class="input-number input-number-unit-2">
|
||||
<input class="input" type="number" title="" min="0.1" max="99" v-model="entityOptions.billboardScale"
|
||||
@input="$handleInputLimit" />
|
||||
<span class="unit">{{ t('general.times') }}</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div class="col" style="flex: 0 0 80px;">
|
||||
<span class="label" style="flex: none;">{{ t('dialog.point.text.show') }}</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.labelShow" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none;">{{ t('general.text.color') }}</span>
|
||||
<div class="labelColor" ref="labelColorRef"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none;">{{ t('general.text.size') }}</span>
|
||||
<div class="input-number input-number-unit-2">
|
||||
<input class="input" type="number" title="" min="1" max="99" v-model="entityOptions.labelFontSize"
|
||||
style="min-width: 70px;" @input="$handleInputLimit" />
|
||||
<span class="unit">px</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col font-select-box">
|
||||
<span class="label" style="flex: none;">{{ t('general.text.font') }}</span>
|
||||
<el-select class="input input-select font-select" style="width: 100px"
|
||||
v-model="entityOptions.labelFontFamily">
|
||||
<el-option v-for="item in fontList" :key="item.key" :label="t('general.' + item.name)" :value="item.key">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="row" style="padding-left: 12px;">
|
||||
<div class="row" style="padding-left: 12px;">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none;">{{ t('general.text.color') }}</span>
|
||||
<div class="labelColor" ref="labelColorRef"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label" style="flex: none;">{{ t('general.text.size') }}</span>
|
||||
<div class="input-number input-number-unit-2">
|
||||
<input class="input" type="number" title="" min="1" max="99" v-model="entityOptions.labelFontSize"
|
||||
style="min-width: 70px;" @input="$handleInputLimit" />
|
||||
<span class="unit">px</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col font-select-box">
|
||||
<span class="label" style="flex: none;">{{ t('general.text.font') }}</span>
|
||||
<el-select class="input input-select font-select" style="width: 100px"
|
||||
v-model="entityOptions.labelFontFamily">
|
||||
<el-option v-for="item in fontList" :key="item.key" :label="t('general.' + item.name)"
|
||||
:value="item.key">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="row" style="padding-left: 12px;">
|
||||
<div class="col">
|
||||
<div class="customized-tip"></div>
|
||||
<span class="label" style="flex: none;">{{ t('general.text.style') }}</span>
|
||||
@ -184,161 +187,158 @@
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div> -->
|
||||
</div>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="col" style="flex: 0 0 120px">
|
||||
<span class="label">{{ t('general.视野缩放') }}</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.scaleByDistance" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.最近距离') }}</span>
|
||||
<div class="input-number input-number-unit-1">
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.near"
|
||||
@input="$handleInputLimit" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.最远距离') }}</span>
|
||||
<div class="input-number input-number-unit-1">
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.far"
|
||||
@input="$handleInputLimit" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane :label="t('general.属性信息')" name="1">
|
||||
<attribute :entityOptions="entityOptions"></attribute>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="t('general.空间信息')" name="2">
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="col height-mode-box">
|
||||
<span class="label" style="flex: 0 0 56px">{{ t('general.高度模式') }}</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="t('general.' + item.name)"
|
||||
:value="item.key">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<div class="col" style="flex: 0 0 120px">
|
||||
<span class="label">{{ t('general.视野缩放') }}</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.scaleByDistance" />
|
||||
</div>
|
||||
<div class="col height-box" v-show="heightMode == 0 || heightMode == 1">
|
||||
<span class="label" style="flex: 0 0 56px">{{ t('general.高度') }}</span>
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.最近距离') }}</span>
|
||||
<div class="input-number input-number-unit-1">
|
||||
<input class="input height" type="number" title="" min="-9999999" max="999999999" v-model="height"
|
||||
@change="changHeight" @input="$handleInputLimit" />
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.near"
|
||||
@input="$handleInputLimit" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label">{{ t('general.最远距离') }}</span>
|
||||
<div class="input-number input-number-unit-1">
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.far"
|
||||
@input="$handleInputLimit" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="t('general.属性信息')" name="2">
|
||||
<attribute :entityOptions="entityOptions"></attribute>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="t('general.空间信息')" name="3">
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="YJ-custom-checkbox-box" style="display: flex; align-items: center; cursor: pointer"
|
||||
@click="formatChange(1)">
|
||||
<input type="checkbox" class="YJ-custom-checkbox" v-model="format1" />
|
||||
<span style="margin-left: 10px; margin-bottom: 1px; user-select: none">{{ t('general.小数格式')
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="YJ-custom-checkbox-box" style="display: flex; align-items: center; cursor: pointer"
|
||||
@click="formatChange(2)">
|
||||
<input type="checkbox" class="YJ-custom-checkbox" v-model="format2" />
|
||||
<span style="margin-left: 10px; margin-bottom: 1px; user-select: none">{{ t('general.度分格式')
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="YJ-custom-checkbox-box" style="display: flex; align-items: center; cursor: pointer"
|
||||
@click="formatChange(3)">
|
||||
<input type="checkbox" class="YJ-custom-checkbox" v-model="format3" />
|
||||
<span style="margin-left: 10px; margin-bottom: 1px; user-select: none;white-space: nowrap;">{{
|
||||
t('general.度分秒格式') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
<div class="col height-mode-box">
|
||||
<span class="label" style="flex: 0 0 56px">{{ t('general.高度模式') }}</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="t('general.' + item.name)"
|
||||
:value="item.key">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div style="flex: 1">
|
||||
<div class="proj-input-box" v-show="format1">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="col height-box" v-show="heightMode == 0 || heightMode == 1">
|
||||
<span class="label" style="flex: 0 0 56px">{{ t('general.高度') }}</span>
|
||||
<div class="input-number input-number-unit-1">
|
||||
<input class="input height" type="number" title="" min="-9999999" max="999999999" v-model="height"
|
||||
@change="changHeight" @input="$handleInputLimit" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="YJ-custom-checkbox-box" style="display: flex; align-items: center; cursor: pointer"
|
||||
@click="formatChange(1)">
|
||||
<input type="checkbox" class="YJ-custom-checkbox" v-model="format1" />
|
||||
<span style="margin-left: 10px; margin-bottom: 1px; user-select: none">{{ t('general.小数格式')
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="YJ-custom-checkbox-box" style="display: flex; align-items: center; cursor: pointer"
|
||||
@click="formatChange(2)">
|
||||
<input type="checkbox" class="YJ-custom-checkbox" v-model="format2" />
|
||||
<span style="margin-left: 10px; margin-bottom: 1px; user-select: none">{{ t('general.度分格式')
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="YJ-custom-checkbox-box" style="display: flex; align-items: center; cursor: pointer"
|
||||
@click="formatChange(3)">
|
||||
<input type="checkbox" class="YJ-custom-checkbox" v-model="format3" />
|
||||
<span style="margin-left: 10px; margin-bottom: 1px; user-select: none;white-space: nowrap;">{{
|
||||
t('general.度分秒格式') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div style="flex: 1">
|
||||
<div class="proj-input-box" v-show="format1">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span style="flex: 0 0 40px">{{ t('general.经度') }}</span>
|
||||
<input class="input lng" readonly :value="entityOptions.lng" />
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span style="flex: 0 0 40px">{{ t('general.纬度') }}</span>
|
||||
<input class="input lat" readonly :value="entityOptions.lat" />
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="proj-input-box" style="width: 56%" v-show="format2">
|
||||
<div class="row">
|
||||
<div class="col" style="flex-direction: column">
|
||||
<div class="row" style="margin-bottom: 15px">
|
||||
<span style="flex: 0 0 40px">{{ t('general.经度') }}</span>
|
||||
<input class="input lng" readonly :value="entityOptions.lng" />
|
||||
<input class="input lng-dm-d" style="flex: 1" readonly :value="lngDmD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lng-dm-m" style="flex: 1" readonly :value="lngDmM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<span class="top-line"></span>
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<span style="flex: 0 0 40px">{{ t('general.纬度') }}</span>
|
||||
<input class="input lat" readonly :value="entityOptions.lat" />
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="proj-input-box" style="width: 56%" v-show="format2">
|
||||
<div class="row">
|
||||
<div class="col" style="flex-direction: column">
|
||||
<div class="row" style="margin-bottom: 15px">
|
||||
<span style="flex: 0 0 40px">{{ t('general.经度') }}</span>
|
||||
<input class="input lng-dm-d" style="flex: 1" readonly :value="lngDmD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lng-dm-m" style="flex: 1" readonly :value="lngDmM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<span class="top-line"></span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<span style="flex: 0 0 40px">{{ t('general.纬度') }}</span>
|
||||
<input class="input lat-dm-d" style="flex: 1" readonly :value="latDmD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lat-dm-m" style="flex: 1" readonly :value="latDmM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<span class="bottom-line"></span>
|
||||
</div>
|
||||
<input class="input lat-dm-d" style="flex: 1" readonly :value="latDmD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lat-dm-m" style="flex: 1" readonly :value="latDmM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<span class="bottom-line"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="proj-input-box" style="width: 70%" v-show="format3">
|
||||
<div class="row">
|
||||
<div class="col" style="flex-direction: column">
|
||||
<div class="row" style="margin-bottom: 15px">
|
||||
<span style="flex: 0 0 40px">{{ t('general.经度') }}</span>
|
||||
<input class="input lng-dms-d" style="flex: 1" readonly :value="lngDmsD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lng-dms-m" style="flex: 1" readonly :value="lngDmsM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<input class="input lng-dms-s" style="flex: 1" readonly :value="lngDmsS" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.秒') }}</span>
|
||||
<span class="top-line"></span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<span style="flex: 0 0 40px">{{ t('general.纬度') }}</span>
|
||||
<input class="input lat-dms-d" style="flex: 1" readonly :value="latDmsD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lat-dms-m" style="flex: 1" readonly :value="latDmsM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<input class="input lat-dms-s" style="flex: 1" readonly :value="latDmsS" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.秒') }}</span>
|
||||
<span class="bottom-line"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="proj-input-box" style="width: 70%" v-show="format3">
|
||||
<div class="row">
|
||||
<div class="col" style="flex-direction: column">
|
||||
<div class="row" style="margin-bottom: 15px">
|
||||
<span style="flex: 0 0 40px">{{ t('general.经度') }}</span>
|
||||
<input class="input lng-dms-d" style="flex: 1" readonly :value="lngDmsD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lng-dms-m" style="flex: 1" readonly :value="lngDmsM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<input class="input lng-dms-s" style="flex: 1" readonly :value="lngDmsS" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.秒') }}</span>
|
||||
<span class="top-line"></span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<span style="flex: 0 0 40px">{{ t('general.纬度') }}</span>
|
||||
<input class="input lat-dms-d" style="flex: 1" readonly :value="latDmsD" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.度') }}</span>
|
||||
<input class="input lat-dms-m" style="flex: 1" readonly :value="latDmsM" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.分') }}</span>
|
||||
<input class="input lat-dms-s" style="flex: 1" readonly :value="latDmsS" />
|
||||
<span class="label" style="flex: 0 0 14px; margin: 0 10px">{{ t('general.秒') }}</span>
|
||||
<span class="bottom-line"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<span class="custom-divider"></span>
|
||||
</template>
|
||||
<template #footer>
|
||||
@ -468,7 +468,7 @@ const open = async (id, type) => {
|
||||
entityOptions.value.labelColor = 'rgba(255,255,255,1)'
|
||||
} //点击清空按钮事件回调
|
||||
})
|
||||
|
||||
|
||||
// let iconTextBold = document.getElementsByClassName('bold')[0]
|
||||
// let iconTextItalic = document.getElementsByClassName('italic')[0]
|
||||
// let iconTextLineBottom = document.getElementsByClassName('line-bottom')[0]
|
||||
@ -821,6 +821,7 @@ defineExpose({
|
||||
width: 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 {
|
||||
|
||||
@ -59,7 +59,7 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label">线段缓冲</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.extend" />
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.extend" @change="lineExtendchange"/>
|
||||
</div>
|
||||
<div class="col" style="flex: 0 0 33%">
|
||||
<span class="label">缓冲宽度</span>
|
||||
@ -382,6 +382,10 @@ const open = async (id, type) => {
|
||||
}
|
||||
const heightModeChange = (val) => {
|
||||
that.heightMode = heightMode.value
|
||||
// @ts-ignore
|
||||
if(heightMode.value === 0 || heightMode.value === '0' || heightMode.value === 1 || heightMode.value === '1') {
|
||||
entityOptions.value.extend = false
|
||||
}
|
||||
}
|
||||
const heightConfirm = () => {
|
||||
that.positionEditing = false
|
||||
@ -421,11 +425,16 @@ const changeWordsName = (val) => {
|
||||
|
||||
|
||||
const lineTypechange = () => { }
|
||||
const lineExtendchange = (e)=>{
|
||||
if(e.target.checked) {
|
||||
heightMode.value = 2
|
||||
}
|
||||
}
|
||||
const nodeEdit = () => {
|
||||
entityOptions.value.positionEditing = false
|
||||
entityOptions.value.noseToTail = false
|
||||
heightMode.value = 0
|
||||
that.heightMode = 0
|
||||
// heightMode.value = 0
|
||||
// that.heightMode = 0
|
||||
that.nodeEdit((positions, lenByMeter) => {
|
||||
entityOptions.value.options.positions = structuredClone(positions)
|
||||
if (lengthUnit.value == 'km') {
|
||||
|
||||
@ -87,7 +87,7 @@
|
||||
placeholder="请输入模型类型进行搜索"
|
||||
:suffix-icon="Search"
|
||||
/>
|
||||
<button @click="setting" class="btn">
|
||||
<button @click="setting" class="btn" v-if="addType !== 'trajectoryMotion'">
|
||||
<svg-icon
|
||||
name="sys_set"
|
||||
class="setIcon"
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
</div>
|
||||
<div class="col" style="flex: 0 0 60%;">
|
||||
<div class="row">
|
||||
<div class="col input-select-unit-box">
|
||||
<div class="col">
|
||||
<span class="label" style="margin-right: 0px;">投影面积:</span>
|
||||
<input class="input input-text" readonly type="text" v-model="area">
|
||||
<el-select v-model="areaUnit">
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
</div>
|
||||
<div class="col" style="flex: 0 0 60%;">
|
||||
<div class="row">
|
||||
<div class="col input-select-unit-box">
|
||||
<div class="col">
|
||||
<span class="label" style="margin-right: 0px;">投影面积:</span>
|
||||
<input class="input input-text" readonly type="text" v-model="area">
|
||||
<el-select v-model="areaUnit">
|
||||
|
||||
@ -70,7 +70,7 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label">线段缓冲</span>
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.extend" />
|
||||
<input class="btn-switch" type="checkbox" v-model="entityOptions.extend" @change="lineExtendchange" />
|
||||
</div>
|
||||
<div class="col" style="flex: 0 0 33%">
|
||||
<span class="label">缓冲宽度</span>
|
||||
@ -390,6 +390,10 @@ const open = async (id: any, type) => {
|
||||
}
|
||||
const heightModeChange = (val) => {
|
||||
that.heightMode = heightMode.value
|
||||
// @ts-ignore
|
||||
if(heightMode.value === 0 || heightMode.value === '0' || heightMode.value === 1 || heightMode.value === '1') {
|
||||
entityOptions.value.extend = false
|
||||
}
|
||||
}
|
||||
const heightConfirm = () => {
|
||||
that.positionEditing = false
|
||||
@ -429,11 +433,16 @@ const changeWordsName = (val) => {
|
||||
}
|
||||
|
||||
const lineTypechange = () => { }
|
||||
const lineExtendchange = (e)=>{
|
||||
if(e.target.checked) {
|
||||
heightMode.value = 2
|
||||
}
|
||||
}
|
||||
const nodeEdit = () => {
|
||||
entityOptions.value.positionEditing = false
|
||||
entityOptions.value.noseToTail = false
|
||||
heightMode.value = 0
|
||||
that.heightMode = 0
|
||||
// heightMode.value = 0
|
||||
// that.heightMode = 0
|
||||
that.nodeEdit((positions, lenByMeter) => {
|
||||
entityOptions.value.options.positions = structuredClone(positions)
|
||||
if (lengthUnit.value == 'km') {
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<template>
|
||||
<Dialog ref="baseDialog" title="轨迹运动属性" left="180px"
|
||||
top="100px" className="trajectory-motion"
|
||||
<Dialog ref="baseDialog" title="轨迹运动属性" left="180px" top="100px" className="trajectory-motion"
|
||||
:closeCallback="closeCallback">
|
||||
<template #content>
|
||||
<span class="custom-divider"></span>
|
||||
@ -8,7 +7,7 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: 0 0 70px;">名称</span>
|
||||
<input class="input" maxlength="40" type="text" v-model="entityOptions.name">
|
||||
<input class="input" style="width: 180px;" maxlength="40" type="text" v-model="entityOptions.name">
|
||||
</div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
@ -18,16 +17,18 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: 0 0 70px;">起始点高度</span>
|
||||
<div class="input-number input-number-unit-1 height-box">
|
||||
<input class="input" type="number" title="" min="-9999999" max="999999999" v-model="entityOptions.height" @input="$handleInputLimit">
|
||||
<div class="input-number input-number-unit-1 height-box" style="width: 180px;">
|
||||
<input class="input" type="number" title="" min="-9999999" max="999999999" v-model="entityOptions.height"
|
||||
@input="$handleInputLimit">
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="col" style="justify-content: flex-end;">
|
||||
<span class="label">模型倍数</span>
|
||||
<div class="input-number input-number-unit-2">
|
||||
<input class="input" type="number" title="" min="0" max="99999" step="1" v-model="entityOptions.scale" @input="$handleInputLimit">
|
||||
<div class="input-number input-number-unit-2" style="width: 119px;">
|
||||
<input class="input" type="number" title="" min="0" max="99999" step="1" v-model="entityOptions.scale"
|
||||
@input="$handleInputLimit">
|
||||
<span class="unit">倍</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
@ -36,17 +37,19 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: 0 0 70px;">运行速度</span>
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" min="0" max="99999999" step="1" v-model="entityOptions.speed" @input="$handleInputLimit">
|
||||
<div class="input-number input-number-unit-3" style="width: 180px;">
|
||||
<input class="input" type="number" title="" min="0" max="99999999" step="1" v-model="entityOptions.speed"
|
||||
@input="$handleInputLimit">
|
||||
<span class="unit">m/s</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="col" style="justify-content: flex-end;">
|
||||
<span class="label">延迟运动</span>
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" min="0" max="9999999" v-model="entityOptions.delay" @input="$handleInputLimit">
|
||||
<span class="unit">ms</span>
|
||||
<div class="input-number input-number-unit-3" style="width: 119px;">
|
||||
<input class="input" type="number" title="" min="0" max="9999999" v-model="entityOptions.delay"
|
||||
@input="$handleInputLimit">
|
||||
<span class="unit">s</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
@ -56,30 +59,52 @@
|
||||
<span class="label" style="flex: 0 0 70px;">更换模型</span>
|
||||
<button class="btn" @click="clickChangeModel">选择</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label">模型方向</span>
|
||||
<button class="btn model-rotate-btn" @click="modelRotate">开始调整</button>
|
||||
<svg class="icon-rubric" @mouseover="handleMouseOver" @mouseout="handleMouseOut">
|
||||
<use xlink:href="#yj-icon-rubric"></use>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="btn-group">
|
||||
<button class="btn" :class="{ 'is-active': entityOptions.firstPersonView }"
|
||||
style="border-radius: 5px 0 0 5px;" name="firstPerson" data-state="true"
|
||||
@click="changeFirstPersonView(true)"><span>第一视角</span></button>
|
||||
<button class="btn" :class="{ 'is-active': !entityOptions.firstPersonView }"
|
||||
style="border-radius: 0 5px 5px 0;" name="firstPerson" data-state="false"
|
||||
@click="changeFirstPersonView(false)"><span>第三视角</span></button>
|
||||
<div class="col" style="justify-content: flex-end;">
|
||||
<span class="label">动画方向</span>
|
||||
<div style="width: 119px;">
|
||||
<button class="btn movement-rotate-btn" style="padding: 0 10px;" @click="movementRotate">
|
||||
<svg class="icon-direction" style="margin-right: 0px;">
|
||||
<use xlink:href="#icon-direction"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="label" style="flex: 0 0 70px;">视角切换</span>
|
||||
<button class="btn" :class="{ 'is-active': entityOptions.firstPersonView }" name="firstPerson"
|
||||
data-state="true" @click="changeFirstPersonView(true)" style="margin-right: 5px;">
|
||||
<svg class="icon-preview" style="margin-right: 8px;">
|
||||
<use xlink:href="#icon-preview"></use>
|
||||
</svg>
|
||||
<span>第一视角</span>
|
||||
</button>
|
||||
<button class="btn" :class="{ 'is-active': !entityOptions.firstPersonView }" name="firstPerson"
|
||||
data-state="false" @click="changeFirstPersonView(false)">
|
||||
<svg class="icon-third-party" style="margin-right: 8px;">
|
||||
<use xlink:href="#icon-third-party"></use>
|
||||
</svg>
|
||||
<span>第三视角</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<span class="label">模型方向</span>
|
||||
<button class="btn model-rotate-btn" style="margin-right: 12px;" @click="modelRotate">开始调整</button>
|
||||
<el-tooltip content="场景正东方向为轨迹前进正方向" effect="customized" placement="top"
|
||||
:hide-after="0">
|
||||
<svg class="icon-rubric">
|
||||
<use xlink:href="#yj-icon-rubric"></use>
|
||||
</svg>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础设置" name="1"></el-tab-pane>
|
||||
<el-tab-pane label="动画设置" name="2"></el-tab-pane>
|
||||
</el-tabs> -->
|
||||
<span class="custom-divider"></span>
|
||||
<div class="div-item div-item-switch">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
@ -171,7 +196,8 @@
|
||||
<div class="col">
|
||||
<span class="label">字体大小</span>
|
||||
<div class="input-number input-number-unit-2" style="width: 82px;">
|
||||
<input class="input" type="number" title="" min="1" max="99" v-model="entityOptions.labelFontSize" @input="$handleInputLimit">
|
||||
<input class="input" type="number" title="" min="1" max="99" v-model="entityOptions.labelFontSize"
|
||||
@input="$handleInputLimit">
|
||||
<span class="unit">px</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
@ -185,7 +211,8 @@
|
||||
<div class="col">
|
||||
<span class="label">最近距离</span>
|
||||
<div class="input-number input-number-unit-1" style="width: 82px;">
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.labelNear" @input="$handleInputLimit">
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.labelNear"
|
||||
@input="$handleInputLimit">
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
@ -193,7 +220,8 @@
|
||||
<div class="col">
|
||||
<span class="label">最远距离</span>
|
||||
<div class="input-number input-number-unit-1" style="width: 82px;">
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.labelFar" @input="$handleInputLimit">
|
||||
<input class="input" type="number" title="" min="1" max="99999999" v-model="entityOptions.labelFar"
|
||||
@input="$handleInputLimit">
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
@ -201,10 +229,6 @@
|
||||
</div>
|
||||
</div>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="custom-rubric-box" v-show="tip"
|
||||
style="transform-origin: center bottom; position: absolute; top: 180px; right: 3px; padding: 5px 10px; background-color: rgb(62, 66, 73); border-radius: 5px; font-size: 12px; color: rgb(255, 87, 51);pointer-events: none;">
|
||||
场景正东方向为轨迹前进正方向<div x-arrow="" class="custom__popper__arrow" style="left: 59px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<button @click="remove">删除</button>
|
||||
@ -230,9 +254,9 @@ const { cusUpdateNode, getSelectedNodes, cusRemoveNode } = useTreeNode()
|
||||
const baseDialog: any = ref(null)
|
||||
const eventBus: any = inject('bus')
|
||||
const text = ref('')
|
||||
const activeName = ref('1')
|
||||
const fontList = ref(getFontList())
|
||||
const labelColorRef = ref(null)
|
||||
const tip = ref(false)
|
||||
eventBus.on('openStandTextAdd', () => {
|
||||
baseDialog.value?.open()
|
||||
})
|
||||
@ -290,31 +314,31 @@ const close = () => {
|
||||
const remove = () => {
|
||||
close()
|
||||
ElMessageBox.confirm('此操作将永久删除节点及所有子节点, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async () => {
|
||||
let node = window.treeObj.getNodeByParam('id', that.options.id, null)
|
||||
let source_ids = cusRemoveNode(window.treeObj, [node])
|
||||
const res = await TreeApi.removeDirectory({ ids: source_ids })
|
||||
if (res.code == 0 || res.code == 200) {
|
||||
ElMessage({
|
||||
message: '删除成功',
|
||||
type: 'success'
|
||||
})
|
||||
that.remove()
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async () => {
|
||||
let node = window.treeObj.getNodeByParam('id', that.options.id, null)
|
||||
let source_ids = cusRemoveNode(window.treeObj, [node])
|
||||
const res = await TreeApi.removeDirectory({ ids: source_ids })
|
||||
if (res.code == 0 || res.code == 200) {
|
||||
ElMessage({
|
||||
message: '删除成功',
|
||||
type: 'success'
|
||||
})
|
||||
that.remove()
|
||||
(window as any)._entityMap.delete(source_ids[0])
|
||||
} else {
|
||||
ElMessage({
|
||||
message: res.msg || '删除失败',
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
// 用户点击取消,不执行任何操作
|
||||
})
|
||||
} else {
|
||||
ElMessage({
|
||||
message: res.msg || '删除失败',
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
// 用户点击取消,不执行任何操作
|
||||
})
|
||||
}
|
||||
const clickChangeModel = () => {
|
||||
eventBus.emit('openModel', true, (url) => {
|
||||
@ -324,15 +348,13 @@ const clickChangeModel = () => {
|
||||
const modelRotate = () => {
|
||||
that.modelRotate()
|
||||
}
|
||||
const movementRotate = () => {
|
||||
that.reverse = !that.reverse
|
||||
}
|
||||
const changeFirstPersonView = (state) => {
|
||||
entityOptions.value.firstPersonView = state
|
||||
}
|
||||
const handleMouseOver = () => {
|
||||
tip.value = true
|
||||
}
|
||||
const handleMouseOut = () => {
|
||||
tip.value = false
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
close
|
||||
|
||||
@ -21,8 +21,9 @@ export const useRightOperate = () => {
|
||||
const addResource = () => {
|
||||
const { ipcRenderer } = require('electron')
|
||||
const options = {
|
||||
properties: ['openFile'], // 允许选择多个文件
|
||||
properties: ['openFile', 'multiSelections'], // 允许选择多个文件
|
||||
filters: [
|
||||
{ name: '全部', extensions: ['clt', 'json', 'jct', 'mbtiles', 'pak', 'kmz', 'kml', 'shp', 'tab', 'mif', 'geojson'] },
|
||||
{ name: '模型、影像、地形', extensions: ['clt', 'json', 'jct', 'mbtiles', 'pak'] },
|
||||
{ name: '矢量数据', extensions: ['kmz', 'kml', 'shp', 'tab', 'mif', 'geojson'] },
|
||||
]
|
||||
@ -42,134 +43,134 @@ export const useRightOperate = () => {
|
||||
//@ts-ignore
|
||||
ipcRenderer.once('selectedItem', async (event, filePaths) => {
|
||||
if (filePaths.length > 0) {
|
||||
let id = new YJ.Tools().randomString()
|
||||
|
||||
|
||||
// 检查文件名是否有效
|
||||
if (typeof filePaths[0] !== 'string' || filePaths[0].trim() === '') {
|
||||
return false;
|
||||
}
|
||||
let item = filePaths[0]
|
||||
|
||||
//@ts-ignore
|
||||
let name = getLastPathComponent(item, ['clt', 'json', 'pak', 'kml', 'kmz', 'shp', 'geojson', 'geoJson', 'czml', 'jct', 'mif', 'tab', 'csv']);
|
||||
let sourceType = "layer";
|
||||
if (item.endsWith(".clt") || item.endsWith(".json")) {
|
||||
sourceType = "tileset";
|
||||
} else if (item.endsWith(".pak")) {
|
||||
sourceType = "Terrain";
|
||||
} else if (item.endsWith(".kml") || item.endsWith(".kmz")) {
|
||||
sourceType = "kml";
|
||||
} else if (item.endsWith(".shp")) {
|
||||
sourceType = "shp";
|
||||
} else if (item.endsWith(".geojson") || item.endsWith(".geoJson")) {
|
||||
sourceType = "geojson";
|
||||
} else if (item.endsWith(".czml")) {
|
||||
sourceType = "czml";
|
||||
} else if (item.endsWith(".jct")) {
|
||||
sourceType = "bim";
|
||||
} else if (item.endsWith(".mif")) {
|
||||
sourceType = "shp";
|
||||
} else if (item.endsWith(".tab")) {
|
||||
sourceType = "shp";
|
||||
} else if (item.endsWith(".csv")) {
|
||||
sourceType = "csv";
|
||||
}
|
||||
if (["shp", "tab", "mif", "kml", "kmz"].includes(sourceType)) {
|
||||
let params: any = {
|
||||
id: id,
|
||||
parentId: parentId,
|
||||
sourceName: name,
|
||||
sourceType: 'vector',
|
||||
// sourcePath: filePaths[0],
|
||||
params: {
|
||||
id: id,
|
||||
path: filePaths[0],
|
||||
field: 'id',
|
||||
name: name,
|
||||
headTables: [],
|
||||
opacity: 1,
|
||||
color: 'rgba(0,255,184,0.5)',
|
||||
show: true
|
||||
},
|
||||
for (let i = 0; i < filePaths.length; i++) {
|
||||
let id = new YJ.Tools().randomString()
|
||||
// 检查文件名是否有效
|
||||
if (typeof filePaths[i] !== 'string' || filePaths[i].trim() === '') {
|
||||
continue;
|
||||
}
|
||||
TreeApi.addOtherSource(params)
|
||||
params.isShow = true
|
||||
params.params = JSON.stringify(params.params)
|
||||
cusAddNodes(window.treeObj, params.parentId, [params])
|
||||
let entityObject = renderVector(params, true);
|
||||
(window as any)._entityMap.set(id, entityObject)
|
||||
} else if (["geojson"].includes(sourceType)) {
|
||||
let baseURL = localStorage.getItem('ip')
|
||||
await addMapSource({
|
||||
type: 'geojson',
|
||||
id: id,
|
||||
sourceName: name,
|
||||
opt: {
|
||||
host: baseURL,
|
||||
let item = filePaths[i]
|
||||
|
||||
//@ts-ignore
|
||||
let name = getLastPathComponent(item, ['clt', 'json', 'pak', 'kml', 'kmz', 'shp', 'geojson', 'geoJson', 'czml', 'jct', 'mif', 'tab', 'csv']);
|
||||
let sourceType = "layer";
|
||||
if (item.endsWith(".clt") || item.endsWith(".json")) {
|
||||
sourceType = "tileset";
|
||||
} else if (item.endsWith(".pak")) {
|
||||
sourceType = "Terrain";
|
||||
} else if (item.endsWith(".kml") || item.endsWith(".kmz")) {
|
||||
sourceType = "kml";
|
||||
} else if (item.endsWith(".shp")) {
|
||||
sourceType = "shp";
|
||||
} else if (item.endsWith(".geojson") || item.endsWith(".geoJson")) {
|
||||
sourceType = "geojson";
|
||||
} else if (item.endsWith(".czml")) {
|
||||
sourceType = "czml";
|
||||
} else if (item.endsWith(".jct")) {
|
||||
sourceType = "bim";
|
||||
} else if (item.endsWith(".mif")) {
|
||||
sourceType = "shp";
|
||||
} else if (item.endsWith(".tab")) {
|
||||
sourceType = "shp";
|
||||
} else if (item.endsWith(".csv")) {
|
||||
sourceType = "csv";
|
||||
}
|
||||
if (["shp", "tab", "mif", "kml", "kmz"].includes(sourceType)) {
|
||||
let params: any = {
|
||||
id: id,
|
||||
parentId: parentId,
|
||||
sourceName: name,
|
||||
sourceType: 'vector',
|
||||
// sourcePath: filePaths[0],
|
||||
params: {
|
||||
id: id,
|
||||
path: filePaths[i],
|
||||
field: 'id',
|
||||
name: name,
|
||||
headTables: [],
|
||||
opacity: 1,
|
||||
color: 'rgba(0,255,184,0.5)',
|
||||
show: true
|
||||
},
|
||||
}
|
||||
TreeApi.addOtherSource(params)
|
||||
params.isShow = true
|
||||
params.params = JSON.stringify(params.params)
|
||||
cusAddNodes(window.treeObj, params.parentId, [params])
|
||||
let entityObject = renderVector(params, true);
|
||||
(window as any)._entityMap.set(id, entityObject)
|
||||
} else if (["geojson"].includes(sourceType)) {
|
||||
let baseURL = localStorage.getItem('ip')
|
||||
await addMapSource({
|
||||
type: 'geojson',
|
||||
id: id,
|
||||
sourceName: name,
|
||||
opt: {
|
||||
host: baseURL,
|
||||
id: id,
|
||||
url: filePaths[i],
|
||||
show: true,
|
||||
width: 1,
|
||||
color: "rgb(239, 6, 6, 1)",
|
||||
}
|
||||
})
|
||||
} else {
|
||||
// 获取最后一个点的位置
|
||||
const lastDotIndex = filePaths[i].lastIndexOf('.');
|
||||
|
||||
// 如果没有点或者点是最后一个字符,则不是有效的文件后缀
|
||||
if (lastDotIndex === -1 || lastDotIndex === filePaths[i].length - 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let params2: any = {
|
||||
id: id,
|
||||
url: filePaths[0],
|
||||
show: true,
|
||||
width: 1,
|
||||
color: "rgb(239, 6, 6, 1)",
|
||||
}
|
||||
})
|
||||
} else {
|
||||
// 获取最后一个点的位置
|
||||
const lastDotIndex = filePaths[0].lastIndexOf('.');
|
||||
|
||||
// 如果没有点或者点是最后一个字符,则不是有效的文件后缀
|
||||
if (lastDotIndex === -1 || lastDotIndex === filePaths[0].length - 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let params2: any = {
|
||||
id: id,
|
||||
show: true,
|
||||
}
|
||||
if (item.endsWith(".mbtiles")) {
|
||||
params2.alpha = 1
|
||||
params2.brightness = 1
|
||||
params2.layerIndex = 99999
|
||||
}
|
||||
if (item.endsWith(".apk")) {
|
||||
// params2.exaggeration = 1
|
||||
}
|
||||
|
||||
|
||||
let params: any = {
|
||||
id: id,
|
||||
sourcePath: filePaths[0],
|
||||
parentId: parentId,
|
||||
params: params2,
|
||||
}
|
||||
// filePaths[0].split('\\').pop()
|
||||
let res = await TreeApi.addModelSource(params)
|
||||
console.log('res', res)
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
ElMessage({
|
||||
message: '添加成功',
|
||||
type: 'success'
|
||||
})
|
||||
res.data.params = JSON.parse(res.data.params)
|
||||
if (!res.data.params.name) {
|
||||
res.data.params.name = res.data.sourceName
|
||||
if (item.endsWith(".mbtiles")) {
|
||||
params2.alpha = 1
|
||||
params2.brightness = 1
|
||||
params2.layerIndex = 99999
|
||||
}
|
||||
if (!res.data.params.id) {
|
||||
res.data.params.id = res.data.id
|
||||
}
|
||||
let detail = JSON.parse(res.data.detail)
|
||||
let mapParams = { ...detail, ...res.data.params }
|
||||
|
||||
await initMapData(res.data.sourceType, mapParams, (entity) => {
|
||||
entity.flyTo()
|
||||
})
|
||||
if (res.data.sourceType) {
|
||||
if (item.endsWith(".apk")) {
|
||||
// params2.exaggeration = 1
|
||||
}
|
||||
|
||||
res.data.params = JSON.stringify(res.data.params)
|
||||
res.data.detail = JSON.stringify(res.data.detail)
|
||||
cusAddNodes(window.treeObj, params.parentId, [res.data])
|
||||
|
||||
let params: any = {
|
||||
id: id,
|
||||
sourcePath: filePaths[i],
|
||||
parentId: parentId,
|
||||
params: params2,
|
||||
}
|
||||
// filePaths[i].split('\\').pop()
|
||||
let res = await TreeApi.addModelSource(params)
|
||||
console.log('res', res)
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
ElMessage({
|
||||
message: '添加成功',
|
||||
type: 'success'
|
||||
})
|
||||
res.data.params = JSON.parse(res.data.params)
|
||||
if (!res.data.params.name) {
|
||||
res.data.params.name = res.data.sourceName
|
||||
}
|
||||
if (!res.data.params.id) {
|
||||
res.data.params.id = res.data.id
|
||||
}
|
||||
let detail = JSON.parse(res.data.detail)
|
||||
let mapParams = { ...detail, ...res.data.params }
|
||||
|
||||
await initMapData(res.data.sourceType, mapParams, (entity) => {
|
||||
entity.flyTo()
|
||||
})
|
||||
if (res.data.sourceType) {
|
||||
}
|
||||
|
||||
res.data.params = JSON.stringify(res.data.params)
|
||||
res.data.detail = JSON.stringify(res.data.detail)
|
||||
cusAddNodes(window.treeObj, params.parentId, [res.data])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -395,7 +396,7 @@ export const useRightOperate = () => {
|
||||
}
|
||||
|
||||
//设置视图
|
||||
const setView = () => {
|
||||
const setView = async () => {
|
||||
let selectNodes = getSelectedNodes(window.treeObj);
|
||||
if (selectNodes && selectNodes[selectNodes.length - 1]) {
|
||||
let node = selectNodes[selectNodes.length - 1]
|
||||
@ -408,8 +409,8 @@ export const useRightOperate = () => {
|
||||
}
|
||||
}
|
||||
let entityObject = (window as any)._entityMap.get(params.id)
|
||||
entityObject.setCustomView()
|
||||
params.customView = entityObject.customView
|
||||
await entityObject.setCustomView()
|
||||
params.customView = await entityObject.customView
|
||||
let params2 = {
|
||||
"id": node.id,
|
||||
"sourceName": params.name,
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
@mouseup="$changeComponentShow('#rMenu', false)"
|
||||
>
|
||||
<div class="itemIcon">
|
||||
<svg-icon :name="item.key" :size="14"></svg-icon>
|
||||
<svg-icon :name="item.key" :size="12"></svg-icon>
|
||||
</div>
|
||||
<div class="itemText">
|
||||
{{ t(`rightMenu.${item.key}`) }}
|
||||
@ -70,9 +70,10 @@ const { t } = useI18n()
|
||||
<style lang="scss" scoped>
|
||||
.rightMenu {
|
||||
user-select: none;
|
||||
width: 8.5vw;
|
||||
height: 23vh;
|
||||
// width: 8.5vw;
|
||||
// height: 23vh;
|
||||
visibility: hidden;
|
||||
padding: 8px 0;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
border: 1.5px solid;
|
||||
box-sizing: border-box;
|
||||
@ -99,9 +100,10 @@ const { t } = useI18n()
|
||||
width: 100%;
|
||||
cursor: pointer;
|
||||
font-size: 1rem;
|
||||
padding: 5px 0;
|
||||
padding: 2px 22px 2px 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 2px 0;
|
||||
/* 默认文字颜色 */
|
||||
color: #fff;
|
||||
// transition: all 0.2s ease; /* 添加过渡动画使效果更平滑 */
|
||||
@ -116,16 +118,18 @@ const { t } = useI18n()
|
||||
|
||||
.itemText {
|
||||
text-align: left;
|
||||
font-size: 14px;
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.itemIcon {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
margin-right: 8px;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
/* 关键:通过currentColor继承父元素的文字颜色 */
|
||||
|
||||
@ -65,7 +65,7 @@ export const useTree = () => {
|
||||
const menus = showRightMenu(event, treeObj.value)
|
||||
console.log('menus', menus)
|
||||
if (menus.length == 0) {
|
||||
// $changeComponentShow('.rightMenu', false)
|
||||
$changeComponentShow('.rightMenu', false)
|
||||
return
|
||||
}
|
||||
nextTick(() => {
|
||||
|
||||
@ -107,6 +107,9 @@ export const useTreeNode = () => {
|
||||
// detailFun: get_detail_waterl,
|
||||
// allowChildren: false,
|
||||
},
|
||||
textBox: {
|
||||
rightMenus: ['del', 'setView', 'resetView']
|
||||
},
|
||||
|
||||
directory: {
|
||||
rightMenus: [
|
||||
@ -251,7 +254,7 @@ export const useTreeNode = () => {
|
||||
// allowChildren: false,
|
||||
},
|
||||
path: {
|
||||
rightMenus: ['edit', 'del' /* "setView", "resetView"*/]
|
||||
rightMenus: ['edit', 'del', "setView", "resetView"]
|
||||
// detailFun: get_detail_path,
|
||||
// render: renderPath,
|
||||
},
|
||||
|
||||
@ -188,7 +188,6 @@
|
||||
type="text"
|
||||
:placeholder="select == 'poi' ? t('btn.treePlaceholder') : t('btn.treeLayerholder')"
|
||||
@input="clearResult"
|
||||
@change="searchPlace"
|
||||
/>
|
||||
<el-button
|
||||
type="primary"
|
||||
@ -285,7 +284,11 @@ const isShowTree = debounce(() => {
|
||||
arrow.style.left = 'unset'
|
||||
arrow.style.right = '1em'
|
||||
}, 100)
|
||||
setTimeout(() => {
|
||||
box1.style.display = 'none'
|
||||
}, 500)
|
||||
} else {
|
||||
box1.style.display = 'flex'
|
||||
TreeIndex.style.pointerEvents = 'unset'
|
||||
// 显示box1
|
||||
arrow.style.transform = 'rotate(180deg)'
|
||||
@ -611,6 +614,7 @@ defineExpose({
|
||||
transform: translateY(-50%);
|
||||
width: 17vw;
|
||||
height: calc(100% - 420px);
|
||||
// overflow-x: hidden;
|
||||
|
||||
.box1 {
|
||||
width: 90%;
|
||||
|
||||
@ -187,11 +187,26 @@
|
||||
<div class="item port">
|
||||
<template v-if="servVal == '单机'">
|
||||
<span class="itemLabel">端口</span>
|
||||
<el-input v-model="localport"></el-input>
|
||||
<el-form-item prop="localport" :rules="[
|
||||
{
|
||||
validator: validateLocalportRange,
|
||||
trigger: 'blur'
|
||||
}
|
||||
]">
|
||||
<el-input-number v-model="localport" :controls="false" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="servVal == '网络'">
|
||||
<span class="itemLabel">端口</span>
|
||||
<el-input v-model="port"></el-input>
|
||||
<el-form-item prop="port" :rules="[
|
||||
{
|
||||
validator: validatePortRange,
|
||||
message: '端口号必须在 1024–65535 之间',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]">
|
||||
<el-input-number v-model="port" :controls="false" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
@ -342,6 +357,29 @@ const handleSelect = (tab) => {
|
||||
onMounted(() => {
|
||||
loginInit()
|
||||
initialize()
|
||||
|
||||
let isSeverInit = ipcRenderer.sendSync('judgment-isSeverInit');
|
||||
// 如果服务端未初始化,等待初始化完成
|
||||
if (isSeverInit) {
|
||||
if (!router.currentRoute.value.query.type) {
|
||||
setTimeout(() => {
|
||||
getAuthCode()
|
||||
getAuthInfo()
|
||||
}, 0);
|
||||
} else {
|
||||
isAuth.value = false
|
||||
}
|
||||
}
|
||||
else {
|
||||
ipcRenderer.once('program-init', () => {
|
||||
if (!router.currentRoute.value.query.type) {
|
||||
getAuthCode()
|
||||
getAuthInfo()
|
||||
} else {
|
||||
isAuth.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
//授权判断
|
||||
@ -470,16 +508,6 @@ onUnmounted(() => {
|
||||
|
||||
const { toClipboard } = useClipboard()
|
||||
|
||||
const getAuthInfo2 = async () => {
|
||||
const res = await AuthApi.showAuth()
|
||||
if (typeof res.data === 'object') {
|
||||
authInfo.value.generateTime = res.data.generateTime
|
||||
authInfo.value.expireTime = res.data.expireTime
|
||||
console.log(authInfo.value.expireTime, '授权时间')
|
||||
getStatus2()
|
||||
}
|
||||
}
|
||||
|
||||
const getStatus2 = () => {
|
||||
const timestamp = new Date(authInfo.value.expireTime).getTime()
|
||||
|
||||
@ -510,25 +538,29 @@ const copy = async (text) => {
|
||||
}
|
||||
}
|
||||
|
||||
let isSeverInit = ipcRenderer.sendSync('judgment-isSeverInit')
|
||||
// 如果服务端未初始化,等待初始化完成
|
||||
if (isSeverInit) {
|
||||
if (!router.currentRoute.value.query.type) {
|
||||
getAuthCode()
|
||||
getAuthInfo()
|
||||
} else {
|
||||
isAuth.value = false
|
||||
const validateLocalportRange = (rule, value, callback) => {
|
||||
if (!localport.value) {
|
||||
callback(new Error('请输入端口号')); // 校验失败
|
||||
return
|
||||
}
|
||||
} else {
|
||||
ipcRenderer.once('program-init', () => {
|
||||
if (!router.currentRoute.value.query.type) {
|
||||
getAuthCode()
|
||||
getAuthInfo()
|
||||
} else {
|
||||
isAuth.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
if (localport.value < 1024 || localport.value > 65535) {
|
||||
callback(new Error('端口号范围在 1024–65535 之间')); // 校验失败
|
||||
} else {
|
||||
callback(); // 校验通过
|
||||
}
|
||||
};
|
||||
const validatePortRange = (rule, value, callback) => {
|
||||
if (!port.value) {
|
||||
callback(new Error('请输入端口号')); // 校验失败
|
||||
return
|
||||
}
|
||||
if (port.value < 1024 || port.value > 65535) {
|
||||
callback(new Error('端口号范围在 1024–65535 之间')); // 校验失败
|
||||
} else {
|
||||
callback(); // 校验通过
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<style lang="scss">
|
||||
// 添加过渡样式
|
||||
@ -905,7 +937,21 @@ if (isSeverInit) {
|
||||
align-items: center;
|
||||
margin: 15px 0;
|
||||
|
||||
.select {
|
||||
::v-deep .el-input__wrapper {
|
||||
padding: 1px 12px;
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 0px;
|
||||
flex: 1;
|
||||
|
||||
.el-input-number {
|
||||
width: 100%;
|
||||
|
||||
::v-deep .el-input__inner {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,16 +74,24 @@ export const useLogin = () => {
|
||||
console.log(res);
|
||||
|
||||
if ([0, 200].includes(res.code)) {
|
||||
checkboxVModel.value = true
|
||||
|
||||
if(isRememberPassword.value) {
|
||||
checkboxVModel.value = true
|
||||
localStorage.setItem(
|
||||
'userInfo',
|
||||
JSON.stringify({
|
||||
// ...res.data.userInfo,
|
||||
...loginForm.value,
|
||||
checkboxVModel: checkboxVModel.value
|
||||
})
|
||||
)
|
||||
}
|
||||
else {
|
||||
checkboxVModel.value = false
|
||||
localStorage.removeItem('userInfo')
|
||||
}
|
||||
localStorage.setItem(res.data.header, res.data.token)
|
||||
localStorage.setItem(
|
||||
'userInfo',
|
||||
JSON.stringify({
|
||||
// ...res.data.userInfo,
|
||||
...loginForm.value,
|
||||
checkboxVModel: checkboxVModel.value
|
||||
})
|
||||
)
|
||||
|
||||
ElMessage.success('登录成功')
|
||||
router.push({ path: '/home' })
|
||||
getAuthInfo()
|
||||
@ -161,6 +169,7 @@ export const useLogin = () => {
|
||||
loginForm.value.username = JSON.parse(userInfo).username
|
||||
loginForm.value.password = JSON.parse(userInfo).password
|
||||
checkboxVModel.value = JSON.parse(userInfo).checkboxVModel
|
||||
isRememberPassword.value = checkboxVModel.value
|
||||
}
|
||||
}
|
||||
const userStore = useUserStore()
|
||||
|
||||
@ -8,9 +8,9 @@ export const useSetUp = () => {
|
||||
const servVal = ref('单机') // 服务类型选择值
|
||||
const prototype = ref('http') // 协议选择值
|
||||
const ip = ref('192.168.1.1')
|
||||
const port = ref('8890')
|
||||
const port = ref(8890)
|
||||
const localip = ref('127.0.0.1')
|
||||
const localport = ref('8848')
|
||||
const localport = ref(8848)
|
||||
const gpsVal = ref('') // 服务类型选择值
|
||||
const gpsOptions: any = ref([])
|
||||
const servOptions: any = ref([{ name: '单机' }, { name: '网络' }])
|
||||
@ -32,12 +32,12 @@ export const useSetUp = () => {
|
||||
if (serverMode === 'false') {
|
||||
servVal.value = '网络'
|
||||
ip.value = ipPort[0]
|
||||
port.value = ipPort[1]
|
||||
port.value = Number(ipPort[1])
|
||||
prototype.value = parsedUrl.protocol.slice(0, -1)
|
||||
}
|
||||
else {
|
||||
localip.value = ipPort[0]
|
||||
localport.value = ipPort[1]
|
||||
localport.value = Number(ipPort[1])
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,6 +45,19 @@ export const useSetUp = () => {
|
||||
switch (selectedService.value) {
|
||||
case '接口服务':
|
||||
// this.submitIP();
|
||||
if (serverMode === 'false') {
|
||||
if(Number(port.value) < 1024 || Number(port.value) > 65535) {
|
||||
// ElMessage.error('端口号范围为1024-65535')
|
||||
return
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(Number(localport.value) < 1024 || Number(localport.value) > 65535) {
|
||||
// ElMessage.error('端口号范围为1024-65535')
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
submitIP()
|
||||
break
|
||||
case '北斗串口':
|
||||
|
||||