站点配置功能完成,关联配置功能完成
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 70 KiB |
@ -1,977 +0,0 @@
|
||||
*{
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
ul{
|
||||
list-style: none;
|
||||
}
|
||||
input {
|
||||
/* border: 0; */
|
||||
outline: none;
|
||||
/* background-color: rgba(0, 0, 0, 0); */
|
||||
}
|
||||
a{
|
||||
text-decoration: none;
|
||||
/* color: #333333; */
|
||||
color: #fff;
|
||||
outline: medium none;
|
||||
overflow: hidden;
|
||||
}
|
||||
/* 隐藏 input type="number" 的箭头按钮 */
|
||||
input[type="number"]::-webkit-outer-spin-button,
|
||||
input[type="number"]::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none; /* WebKit 浏览器 */
|
||||
margin: 0; /* Firefox 不显示箭头 */
|
||||
}
|
||||
|
||||
input[type="number"] {
|
||||
-moz-appearance: textfield; /* Firefox */
|
||||
}
|
||||
|
||||
|
||||
@media screen and (min-width: 1280px) {
|
||||
body{
|
||||
overflow-x:hidden;
|
||||
}
|
||||
}
|
||||
header .nav-list{
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
.hide{
|
||||
display:none;
|
||||
}
|
||||
|
||||
.col{
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
vertical-align: baseline;
|
||||
font-weight: inherit;
|
||||
font-style: inherit;
|
||||
font-size: 100%;
|
||||
font-family: inherit;
|
||||
overflow:hidden;
|
||||
}
|
||||
/* select option 样式 */
|
||||
select{
|
||||
box-sizing: border-box;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
|
||||
/* 实时数据表 */
|
||||
|
||||
.col.echarts-chart:after{
|
||||
display:block;
|
||||
content:'';
|
||||
clear:both;
|
||||
}
|
||||
.echarts-btn{
|
||||
position: relative;
|
||||
height:20px;
|
||||
}
|
||||
.echarts-btn>span{
|
||||
/* float:right; */
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.echarts-text span{
|
||||
font-size:14px;
|
||||
color:#92A3A8; /*#333*/
|
||||
margin-right:8px;
|
||||
}
|
||||
|
||||
.realdata{
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
z-index: 10;
|
||||
width: 95vw;
|
||||
}
|
||||
|
||||
.btn{
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
cursor: pointer;
|
||||
border-radius: 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.record-btn{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
background: url(../img/LiveData/record.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
/* border-radius: 50%; */
|
||||
transition: all .5s;
|
||||
}
|
||||
.record-btn.ready{
|
||||
background: url(../img/LiveData/record_ready.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
}
|
||||
.record-btn.live{
|
||||
background: url(../img/LiveData/recording.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
}
|
||||
.record-btn.live{
|
||||
transform: scale(0.9);
|
||||
animation: geetest_wait 2s linear infinite both;
|
||||
}
|
||||
@keyframes geetest_wait{
|
||||
0%{transform: scale(0.9);}
|
||||
50%{transform: scale(0.5);}
|
||||
100%{transform: scale(0.9);}
|
||||
}
|
||||
|
||||
|
||||
.refresh-btn{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.8);
|
||||
background: url(../img/LiveData/total.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.refresh-btn.ready{
|
||||
background: url(../img/LiveData/total_ready.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
|
||||
.btn:active{
|
||||
background:#eee;
|
||||
border-color:1px solid #333;
|
||||
}
|
||||
.associated-noise{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/noise.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.prps{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/prps_cluster.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
pointer-events: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.prps.ready{
|
||||
background: url(../img/LiveData/prps.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.prpd{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/prpd_cluster.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.prpd.ready{
|
||||
background: url(../img/LiveData/prpd.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.start{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/play.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.start.ready{
|
||||
background: url(../img/LiveData/stop.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.show{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/show.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
#menu-right{
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.show.ready{
|
||||
background: url(../img/LiveData/hide.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.big{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/big.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.big.ready{
|
||||
background: url(../img/LiveData/big_ready.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.small{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/small.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.small.ready{
|
||||
background: url(../img/LiveData/small_ready.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.zoom{
|
||||
position: absolute;
|
||||
z-index: 101;
|
||||
bottom: 50px;
|
||||
left: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
#total-time{
|
||||
width:70px
|
||||
}
|
||||
|
||||
.adaptive-noise{
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
transform: scale(0.9);
|
||||
box-sizing: border-box;
|
||||
background: url(../img/LiveData/adaptive-noise_off.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.associated-noise.ready{
|
||||
background: url(../img/LiveData/noise_ready.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.adaptive-noise.ready{
|
||||
background: url(../img/LiveData/adaptive-noise_on.png) 0 0 no-repeat transparent;
|
||||
background-size: cover;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.slide{
|
||||
text-align: left;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.slide-name{
|
||||
position: absolute;
|
||||
display: block;
|
||||
cursor: default;
|
||||
white-space: nowrap;
|
||||
content: attr(data-content);
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
line-height: 1.333;
|
||||
text-shadow: none;
|
||||
padding: 1px 5px;
|
||||
background: #1890ff;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.pm-slide-box .slide-name{
|
||||
left:-65px;
|
||||
top:6px;
|
||||
}
|
||||
.noisy-slide-box .slide-name{
|
||||
left:3px;
|
||||
top:0px;
|
||||
}
|
||||
.cdf-slide-box .slide-name{
|
||||
left:-70px;
|
||||
top:10px;
|
||||
}
|
||||
.pm-slide-box{
|
||||
position:absolute;
|
||||
width:600px;
|
||||
height:30px;
|
||||
left:40%;
|
||||
margin-left:-300px;
|
||||
}
|
||||
.pm-slide{
|
||||
position:absolute;
|
||||
width:100%;
|
||||
top:12px;
|
||||
margin:0 auto;
|
||||
font-size:12px;
|
||||
z-index:100;
|
||||
height:8px;
|
||||
background: url(../img/sprite-skin-nice.png) repeat-x;
|
||||
background-position: 0 0;
|
||||
}
|
||||
#addPointNumDiv{
|
||||
position: absolute;
|
||||
bottom: 25px;
|
||||
left: 20%;
|
||||
}
|
||||
.noisy-slide-box{
|
||||
width:26px;
|
||||
}
|
||||
.noisy-slide{
|
||||
position: absolute;
|
||||
margin:auto;
|
||||
left:-6px;
|
||||
height:350px;
|
||||
margin:25px 0 0 20px;
|
||||
width:8px!important;
|
||||
background: url(../img/sprite-skin-nice-1.png) repeat-y!important;
|
||||
background-position: 0 0;
|
||||
}
|
||||
.cdf-slide-box{
|
||||
width:40vw;
|
||||
height:20px;
|
||||
}
|
||||
.cdf-slide{
|
||||
position:absolute;
|
||||
width:100%;
|
||||
top:15px;
|
||||
margin:0 auto;
|
||||
font-size:12px;
|
||||
z-index:100;
|
||||
height:8px;
|
||||
background: url(../img/sprite-skin-nice.png) repeat-x;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.menu-top{
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
.menu-right{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
.text-bottom{
|
||||
height: 50px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
bottom: 0;
|
||||
right: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.content{
|
||||
position: relative;
|
||||
width:100%;
|
||||
margin-top:80px;
|
||||
user-select: none;
|
||||
}
|
||||
.left-box{
|
||||
position: fixed;
|
||||
width:180px;
|
||||
height:600px;
|
||||
background-color:#fbfbfb;
|
||||
border:1px solid #999;
|
||||
border-top-color:transparent;
|
||||
-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);
|
||||
z-index: 101;
|
||||
}
|
||||
.right-box{
|
||||
position: relative;
|
||||
width:100%;
|
||||
min-width:1000px;
|
||||
top:0;
|
||||
left:180px;
|
||||
}
|
||||
.crumbs{
|
||||
padding-top:40px;
|
||||
padding-bottom:30px;
|
||||
}
|
||||
.selectStyle{
|
||||
border-radius: 2px;
|
||||
height: 22px;
|
||||
width: 80px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #d9d9d9;
|
||||
text-align:center;
|
||||
text-align-last:center
|
||||
}
|
||||
.selectStyle:hover{
|
||||
border-color: #1890ff
|
||||
}
|
||||
.selectStyle option{
|
||||
text-align:center;
|
||||
text-align-last:center;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.site-box{
|
||||
width:98%;
|
||||
min-width:1045px;
|
||||
/* max-width:1600px;
|
||||
margin:auto; */
|
||||
/* height:500px; */
|
||||
margin-top:30px;
|
||||
margin-left:1%;
|
||||
overflow: hidden;
|
||||
}
|
||||
.echarts-box{
|
||||
/* max-width:1600px; */
|
||||
height:auto;
|
||||
padding:5px;
|
||||
border: 1px solid #ddd;
|
||||
background-color: #fff;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
|
||||
min-width:1040px;
|
||||
margin:auto;
|
||||
margin-top:10px;
|
||||
/* margin-bottom:20px; */
|
||||
}
|
||||
.mainer{
|
||||
display:flex;
|
||||
flex-flow:row wrap;
|
||||
}
|
||||
|
||||
/* @media screen and (min-width: 1920px) { */
|
||||
/* body {
|
||||
background-color:#b9e8f898;
|
||||
} */
|
||||
.auto-box{
|
||||
/* width:788px; */
|
||||
width:50%;
|
||||
/* max-width:788px; */
|
||||
border:1px solid #d9edf7;
|
||||
/* padding:10px; */
|
||||
box-sizing: border-box;
|
||||
border-radius:10px;
|
||||
/* margin-right:1%;
|
||||
margin-bottom:10px; */
|
||||
}
|
||||
|
||||
.loading-box{
|
||||
/* width:360px; */
|
||||
width:90%;
|
||||
/* width:45%; */
|
||||
/* height:300px; */
|
||||
min-height:180px;
|
||||
float:left;
|
||||
/*background: @body-background;*/
|
||||
}
|
||||
.loading-box-mini{
|
||||
min-height:106.5px;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
||||
.auto-box canvas{
|
||||
width:100%;
|
||||
height:100%;
|
||||
}
|
||||
.pm-slide-box{
|
||||
left:auto;
|
||||
position:relative;
|
||||
}
|
||||
.pm-slide-box .slide-name {
|
||||
left: auto;
|
||||
right: 104%;
|
||||
}
|
||||
|
||||
.cdf-slide{
|
||||
position:absolute;
|
||||
width:100%;
|
||||
top:15px;
|
||||
margin:0 auto;
|
||||
font-size:12px;
|
||||
z-index:100;
|
||||
height:8px;
|
||||
background: url(../img/sprite-skin-nice.png) repeat-x;
|
||||
background-position: 0 0;
|
||||
}
|
||||
@media screen and (min-width: 1800px) {
|
||||
.noisy-slide-box{
|
||||
margin-right:20px!important;
|
||||
}
|
||||
}
|
||||
@media screen and (min-width: 1600px) {
|
||||
.pm-slide-box{
|
||||
width:40%;
|
||||
right:-60%;
|
||||
margin-left:-32%;
|
||||
}
|
||||
.echarts-text span {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1599px){
|
||||
.pm-slide-box{
|
||||
width:40%;
|
||||
right:-35%;
|
||||
margin-left:-32%;
|
||||
}
|
||||
.pm-slide-box .slide-name {
|
||||
opacity:0;
|
||||
left: -20px;
|
||||
top: 21px;
|
||||
}
|
||||
.echarts-text span {
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
|
||||
}
|
||||
@media screen and (max-width: 1439px) {
|
||||
.site-box {
|
||||
margin-left: 15px;
|
||||
}
|
||||
.pm-slide-box{
|
||||
/* width:30%; */
|
||||
width:38%;
|
||||
/*right:-60%;*/
|
||||
margin-left:-33%;
|
||||
}
|
||||
.sel-opt.sm{
|
||||
width:80px;
|
||||
}
|
||||
.pm-slide-box .slide-name {
|
||||
opacity:0;
|
||||
left: -20px;
|
||||
top: 21px;
|
||||
}
|
||||
.echarts-text span {
|
||||
font-size: 0.6rem;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 750px) {
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width: 590px) {
|
||||
|
||||
}
|
||||
|
||||
.pm-slide{
|
||||
position:absolute;
|
||||
width:100%;
|
||||
top:12px;
|
||||
margin:0 auto;
|
||||
font-size:12px;
|
||||
z-index:100;
|
||||
height:8px;
|
||||
background: url(../img/sprite-skin-nice.png) repeat-x;
|
||||
background-position: 0 0;
|
||||
}
|
||||
.noisy-slide-box{
|
||||
position: relative;
|
||||
}
|
||||
.noisy-slide{
|
||||
position: absolute;
|
||||
margin:auto;
|
||||
left:-6px;
|
||||
height:80%;
|
||||
/* height:250px; */
|
||||
margin:25px 0 0 20px;
|
||||
width:8px!important;
|
||||
background: url(../img/sprite-skin-nice-1.png) repeat-y!important;
|
||||
background-position: 0 0;
|
||||
}
|
||||
.noisy-slide .ui-slider-handle:after {
|
||||
top: -18px;
|
||||
left: -28px;
|
||||
}
|
||||
.ui-slider-handle{
|
||||
width:20px;
|
||||
height:20px;
|
||||
outline:none;
|
||||
}
|
||||
.pm-slide .ui-slider-handle {
|
||||
top: -8px;
|
||||
}
|
||||
.cdf-slide .ui-slider-handle {
|
||||
top: -8px;
|
||||
}
|
||||
.noisy-slide-box{
|
||||
float:right!important;
|
||||
margin-right:10px;
|
||||
margin-top: 45px;
|
||||
}
|
||||
.btn.mr50{
|
||||
margin-right:1%!important;
|
||||
}
|
||||
/* } */
|
||||
/* @media screen and (max-width:1919px){
|
||||
body {
|
||||
background-color:#b9e8f898;
|
||||
}
|
||||
.auto-box{
|
||||
width:1022px;
|
||||
margin:0 auto;
|
||||
border:1px solid #d9edf7;
|
||||
padding:10px;
|
||||
box-sizing: border-box;
|
||||
border-radius:10px;
|
||||
margin-bottom:20px;
|
||||
}
|
||||
|
||||
#box3D1,#box2D1,#box3D2,#box2D2,#box3D3,#box2D3,#box3D4,#box2D4{
|
||||
width:480px;
|
||||
height:380px;
|
||||
float:left;
|
||||
}
|
||||
.noisy-slide .ui-slider-handle:after{
|
||||
top: -18px;
|
||||
left: -20px;
|
||||
opacity: 0;
|
||||
}
|
||||
.noisy-slide-box{
|
||||
float:right!important;
|
||||
}
|
||||
} */
|
||||
|
||||
/* .col{
|
||||
min-width:1000px;
|
||||
} */
|
||||
/************* 数据图表 ************/
|
||||
|
||||
|
||||
#box3D canvas,#box2D canvas{
|
||||
width:100%;
|
||||
height:100%;
|
||||
}
|
||||
.col{
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
|
||||
/*量程*/
|
||||
.radiogroup{
|
||||
margin-top:5px;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.el-radio {
|
||||
color: #fff;
|
||||
font-weight: 300;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.el-radio, .el-radio--medium.is-bordered .el-radio__label {
|
||||
font-size: 14px;
|
||||
}
|
||||
.el-radio, .el-radio__inner, .el-radio__input {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.el-radio__input {
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
line-height: 1;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
||||
.el-radio__input.is-checked .el-radio__inner {
|
||||
border-color: #2DAFB8;
|
||||
background: #2DAFB8;
|
||||
}
|
||||
.el-radio__inner {
|
||||
border: 1px solid #99a4ac;
|
||||
border-radius: 100%;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background-color: #fff;
|
||||
cursor: pointer;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.el-radio__input.is-checked .el-radio__inner::after {
|
||||
-webkit-transform: translate(-50%,-50%) scale(1);
|
||||
transform: translate(-50%,-50%) scale(1);
|
||||
}
|
||||
.el-radio__inner::after {
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
border-radius: 100%;
|
||||
background-color: #fff;
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
-webkit-transform: translate(-50%,-50%) scale(0);
|
||||
transform: translate(-50%,-50%) scale(0);
|
||||
-webkit-transition: -webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);
|
||||
transition: -webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);
|
||||
transition: transform .15s cubic-bezier(.71,-.46,.88,.6);
|
||||
transition: transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);
|
||||
}
|
||||
|
||||
.el-radio__original {
|
||||
opacity: 0;
|
||||
outline: 0;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.el-radio__input.is-checked+.el-radio__label {
|
||||
color: #2DAFB8;
|
||||
}
|
||||
.el-radio__label {
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
/*padding-left: 5px;*/
|
||||
}
|
||||
.el-radio+.el-radio {
|
||||
/*margin-left: 30px;*/
|
||||
}
|
||||
|
||||
/*量程end*/
|
||||
|
||||
/* 弹出修改框 */
|
||||
.alert {
|
||||
z-index: 2;
|
||||
border: 1px solid rgba(0,0,0,.2);
|
||||
width: 598px;
|
||||
height: auto;
|
||||
border-radius: 6px;
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,.5);
|
||||
background: #fff;
|
||||
z-index: 1000;
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 20%;
|
||||
margin-left: -299px;
|
||||
display: none;
|
||||
line-height: 1.428571429;
|
||||
}
|
||||
.model-head {
|
||||
padding: 15px;
|
||||
color: #73879C;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
.close {
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
background: 0 0;
|
||||
border: 0;
|
||||
float: right;
|
||||
font-size: 14px !important;
|
||||
font-weight: 700;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
opacity: 0.4;
|
||||
margin-top: 5px;
|
||||
line-height: 1;
|
||||
color: #000000;
|
||||
}
|
||||
#close:hover {
|
||||
cursor: pointer;
|
||||
color: #000;
|
||||
}
|
||||
#mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background: #000;
|
||||
opacity: 0.3;
|
||||
display: none;
|
||||
z-index: 99;
|
||||
}
|
||||
.model-content {
|
||||
position: relative;
|
||||
padding: 15px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
.model-foot {
|
||||
padding: 15px;
|
||||
text-align: right;
|
||||
}
|
||||
.modal-title {
|
||||
margin: 0;
|
||||
line-height: 1.428571429;
|
||||
font-size: 18px;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-weight: 500;
|
||||
}
|
||||
.foot-btn {
|
||||
/* width: 100%; */
|
||||
/* height: 58px; */
|
||||
border-top: 1px solid #ddd;
|
||||
padding: 10px 10px;
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
.main.page{
|
||||
margin-top:0;
|
||||
border:0;
|
||||
min-width:800px;
|
||||
}
|
||||
.alert .block{
|
||||
margin-top:0;
|
||||
margin-bottom:0;
|
||||
}
|
||||
.text-right input.lg {
|
||||
width: 300px;
|
||||
}
|
||||
#type-imgf{
|
||||
display:none;
|
||||
}
|
||||
#select-type-img{
|
||||
margin-top:4px;
|
||||
margin-left:10px;
|
||||
}
|
||||
#type-describe{
|
||||
margin-top:5px;
|
||||
padding:10px;
|
||||
color:#666;
|
||||
font-size:14px;
|
||||
}
|
||||
#type-describe.err{
|
||||
border:1px solid #f00;
|
||||
}
|
||||
#save-btn{
|
||||
margin-left:-10px;
|
||||
}
|
||||
#cancel-btn{
|
||||
margin-left:100px;
|
||||
}
|
||||
button:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* 左侧专家库树 */
|
||||
.libraryList li span{
|
||||
/* max-width:120px; */
|
||||
/* white-space:normal; */
|
||||
/* word-break:break-all; */
|
||||
/* overflow:hidden; */
|
||||
white-space: nowrap;
|
||||
/* text-overflow: ellipsis; */
|
||||
}
|
||||
.libraryList li span:hover{
|
||||
background:#ddd;
|
||||
}
|
||||
.libraryList li span.select{
|
||||
background:#468847;
|
||||
}
|
||||
.tree{
|
||||
padding-right:0;
|
||||
}
|
||||
.tree ul{
|
||||
margin:0;
|
||||
}
|
||||
|
||||
/* 按钮组样式 */
|
||||
.btn-group button {
|
||||
line-height: 20px;
|
||||
border-radius: 2px;
|
||||
background-color: #FFF; /* Green background */
|
||||
border: 1px solid #d9d9d9; /* Green border */
|
||||
box-sizing: border-box;
|
||||
color: #000000d9; /* White text */
|
||||
padding: 0 7px; /* Some padding */
|
||||
cursor: pointer; /* Pointer/hand icon */
|
||||
float: left; /* Float the buttons side by side */
|
||||
}
|
||||
|
||||
/* Clear floats (clearfix hack) */
|
||||
.btn-group:after {
|
||||
content: "";
|
||||
clear: both;
|
||||
display: table;
|
||||
}
|
||||
|
||||
.btn-group button:not(:last-child) {
|
||||
border-right: none; /* Prevent double borders */
|
||||
}
|
||||
|
||||
/* Add a background color on hover */
|
||||
.btn-group button:hover {
|
||||
background-color: #1890ff;
|
||||
color: #fff;
|
||||
}
|
||||
.btn-group .active {
|
||||
background-color: #1890ff;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.channelNum{
|
||||
display:inline-block;
|
||||
width:100%;
|
||||
}
|
||||
.monitorType{
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
font-size: 20px!important;
|
||||
color:#A1BEC6!important;
|
||||
}
|
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.2 KiB |
@ -1,603 +0,0 @@
|
||||
const createAxisInfo = (size, minSize = 0) => {
|
||||
const textY = minSize ? (360 / (size + (-minSize))) * minSize - 30 : -30;
|
||||
let data = {};
|
||||
let prps = [
|
||||
{
|
||||
type: 'plan',
|
||||
size: 50,
|
||||
color: 0x1890ff,
|
||||
},
|
||||
{
|
||||
type: 'curveLine',
|
||||
line: [
|
||||
[0, minSize ? 0 : size / 2, 0],
|
||||
[0, minSize ? minSize : 0, 90],
|
||||
[0, size, 270],
|
||||
[0, minSize ? 0 : size / 2, 360],
|
||||
],
|
||||
color: 0x1890ff,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, minSize, 0,
|
||||
0, size, 0,
|
||||
0, size, 360,
|
||||
0, minSize, 360,
|
||||
0, minSize, 0,
|
||||
|
||||
0, 0, 0,
|
||||
50, 0, 0,
|
||||
50, 0, 360,
|
||||
0, 0, 360,
|
||||
0, 0, 0,
|
||||
|
||||
// 0, minSize, 0,
|
||||
// 0, size, 0,
|
||||
// 50, size, 0,
|
||||
// 50, minSize, 0,
|
||||
// 0, minSize, 0,
|
||||
],
|
||||
color: 0x1890ff,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, 0, 90,
|
||||
50, 0, 90,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Z',
|
||||
num: 3,
|
||||
margin: 90,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
10, 0, 0,
|
||||
10, 0, 360,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'X',
|
||||
num: 4,
|
||||
margin: 10,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, (minSize ? minSize + (size / 2) : size / 4), 0,
|
||||
0, (minSize ? minSize + (size / 2) : size / 4), 360,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Y',
|
||||
num: 3,
|
||||
margin: minSize ? size / 2 : size / 4,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, minSize, 90,
|
||||
0, size, 90,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Z',
|
||||
num: 3,
|
||||
margin: 90,
|
||||
},
|
||||
// {
|
||||
// type: 'line',
|
||||
// line: [
|
||||
// 10, minSize, 0,
|
||||
// 10, size, 0,
|
||||
// ],
|
||||
// color: 0xcccccc,
|
||||
// position: 'X',
|
||||
// num: 4,
|
||||
// margin: 10,
|
||||
// },
|
||||
// {
|
||||
// type: 'line',
|
||||
// line: [
|
||||
// 0, (minSize ? minSize + (size / 4) : size / 4), 0,
|
||||
// 50, (minSize ? minSize + (size / 4) : size / 4), 0,
|
||||
// ],
|
||||
// color: 0xcccccc,
|
||||
// position: 'Y',
|
||||
// num: 3 + (minSize ? -minSize / (size / 4) : 0),
|
||||
// margin: size / 4,
|
||||
// },
|
||||
{
|
||||
type: 'text',
|
||||
content: ['0'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#FF0000',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [360, -40, 360],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['10'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#FF0000',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [288, -40, 360],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['20'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#FF0000',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [216, -40, 360],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['30'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#FF0000',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [144, -40, 360],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['40'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#FF0000',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [72, -40, 360],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['50'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#FF0000',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, -40, 360],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['0'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#0000cc',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [390, -40, 330],
|
||||
textAlign: 'right',
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['90'],
|
||||
w: 55,
|
||||
h: 25,
|
||||
color: '#0000cc',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [380, -40, 250],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['180'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: '#0000cc',
|
||||
size: 20.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [380, -40, 160],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['270'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: '#0000cc',
|
||||
size: 20.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [380, -40, 70],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['360'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: '#0000cc',
|
||||
size: 20.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [380, -40, -20],
|
||||
},
|
||||
]
|
||||
let prpd = [
|
||||
{
|
||||
type: 'curveLine',
|
||||
line: [
|
||||
[0, minSize ? 0 : size / 2, 0],
|
||||
[0, minSize ? minSize : 0, 90],
|
||||
[0, size, 270],
|
||||
[0, minSize ? 0 : size / 2, 360],
|
||||
],
|
||||
color: 0x1890ff,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, minSize, 0,
|
||||
0, size, 0,
|
||||
0, size, 360,
|
||||
0, minSize, 360,
|
||||
0, minSize, 0,
|
||||
|
||||
],
|
||||
color: 0x1890ff,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, 0, 90,
|
||||
50, 0, 90,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Z',
|
||||
num: 3,
|
||||
margin: 90,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, (minSize ? minSize + (size / 2) : size / 4), 0,
|
||||
0, (minSize ? minSize + (size / 2) : size / 4), 360,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Y',
|
||||
num: 3,
|
||||
margin: minSize ? size / 2 : size / 4,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, minSize, 90,
|
||||
0, size, 90,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Z',
|
||||
num: 3,
|
||||
margin: 90,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['0'],
|
||||
w: 40,
|
||||
h: 25,
|
||||
color: '#0000cc',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [360, textY, 340],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['90'],
|
||||
w: 47,
|
||||
h: 25,
|
||||
color: '#0000cc',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [360, textY, 270],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['180'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: '#0000cc',
|
||||
size: 22.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [360, textY - 2, 180],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['270'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: '#0000cc',
|
||||
size: 22.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [360, textY - 2, 90],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['360'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: '#0000cc',
|
||||
size: 22.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [360, textY - 2, 0],
|
||||
},
|
||||
];
|
||||
let prpd3d = [
|
||||
{
|
||||
type: 'plan',
|
||||
line: [minSize ? size * 2 : size, 360, minSize],
|
||||
color: 0x32494B,
|
||||
},
|
||||
{
|
||||
type: 'curveLine',
|
||||
line: [
|
||||
[minSize ? 0 : size / 2, 0, 0],
|
||||
[size, 0, 90],
|
||||
[minSize, 0, 270],
|
||||
[minSize ? 0 : size / 2, 0, 360],
|
||||
],
|
||||
color: 0xcccccc,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
minSize, 0, 0,
|
||||
size, 0, 0,
|
||||
size, 0, 360,
|
||||
minSize, 0, 360,
|
||||
minSize, 0, 0,
|
||||
|
||||
0, 0, 0,
|
||||
0, 50, 0,
|
||||
0, 50, 360,
|
||||
0, 0, 360,
|
||||
0, 0, 0,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
minSize, 0, 90,
|
||||
size, 0, 90,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Z',
|
||||
num: 3,
|
||||
margin: 90,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
(minSize ? minSize + (size / 2) : size / 4), 0, 0,
|
||||
(minSize ? minSize + (size / 2) : size / 4), 0, 360,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'X',
|
||||
num: 3,
|
||||
margin: (minSize ? size / 2 : size / 4),
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, 0, 90,
|
||||
0, 50, 90,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Z',
|
||||
num: 3,
|
||||
margin: 90,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
line: [
|
||||
0, 10, 0,
|
||||
0, 10, 360,
|
||||
],
|
||||
color: 0xcccccc,
|
||||
position: 'Y',
|
||||
num: 4,
|
||||
margin: 10,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['0'],
|
||||
w: 40,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, 20, 380],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['10'],
|
||||
w: 47,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, 72, 380],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['20'],
|
||||
w: 47,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, 144, 380],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['30'],
|
||||
w: 47,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, 216, 380],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['40'],
|
||||
w: 47,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, 288, 380],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['50'],
|
||||
w: 47,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, 360, 380],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['0'],
|
||||
w: 40,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [minSize ? 200 : 400, -40, 330],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['90'],
|
||||
w: 47,
|
||||
h: 25,
|
||||
color: 0xcccccc,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [minSize ? 200 : 400, -40, 230],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['180'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: 0xcccccc,
|
||||
size: 22.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [minSize ? 200 : 400, -40, 140],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['270'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: 0xcccccc,
|
||||
size: 22.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [minSize ? 200 : 400, -40, 50],
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
content: ['360'],
|
||||
w: 75,
|
||||
h: 25,
|
||||
ch: 9,
|
||||
cw: 5.7,
|
||||
color: 0xcccccc,
|
||||
size: 22.3,
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [minSize ? 200 : 400, -40, -40],
|
||||
},
|
||||
]
|
||||
let set = [7.2, 360 / (size + (-minSize)), 1];
|
||||
let isGIS = size <= 80;
|
||||
let YAxisText = minSize ? [
|
||||
[size, 180],
|
||||
[size / 2, 90],
|
||||
[0, 0],
|
||||
[minSize / 2, -90],
|
||||
[minSize, -180],
|
||||
] : [
|
||||
[isGIS ? size == 80 ? 0 : `-${80 - size}` : size],
|
||||
[isGIS ? `-${80 - (size * 0.75)}` : size * 0.75,],
|
||||
[isGIS ? `-${80 - (size * 0.5)}` : size * 0.5,],
|
||||
[isGIS ? `-${80 - (0.25 * size)}` : size * 0.25,],
|
||||
[isGIS ? `-80` : 0,],
|
||||
];
|
||||
let infoNum = [
|
||||
{
|
||||
w: 40,
|
||||
h: 20,
|
||||
size: 16,
|
||||
}, {
|
||||
w: 55,
|
||||
h: 25,
|
||||
size: 22.3,
|
||||
}, {
|
||||
w: 70,
|
||||
h: 25,
|
||||
size: 22.3,
|
||||
}, {
|
||||
w: 100,
|
||||
h: 30,
|
||||
size: 26.3,
|
||||
}, {
|
||||
w: 115,
|
||||
h: 32,
|
||||
size: 28.3,
|
||||
}
|
||||
]
|
||||
YAxisText.forEach((item, index) => {
|
||||
item[0] = item[0].toString();
|
||||
let length = item[0].length;
|
||||
let info = {
|
||||
type: 'text',
|
||||
content: item,
|
||||
w: infoNum[length - 1].w,
|
||||
h: infoNum[length - 1].h,
|
||||
cw: length >= 3 ? 5.7 : '',
|
||||
ch: length >= 3 ? 9 : '',
|
||||
size: infoNum[length - 1].size,
|
||||
color: '#00ff00',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [index, minSize ? item[1] : 360 - (index * 90), length === 1 ? 410 : 430],
|
||||
textAlign: 'right',
|
||||
};
|
||||
let infoPrpd = {
|
||||
type: 'text',
|
||||
content: item,
|
||||
w: infoNum[length - 1].w,
|
||||
h: infoNum[length - 1].h,
|
||||
cw: length >= 3 ? 5.7 : '',
|
||||
ch: length >= 3 ? 9 : '',
|
||||
size: infoNum[length - 1].size,
|
||||
color: '#00ff00',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [0, minSize ? item[1] : 360 - (index * 90), length === 1 ? 385 : 395],
|
||||
textAlign: 'right',
|
||||
};
|
||||
let info3d = {
|
||||
type: 'text',
|
||||
content: item,
|
||||
w: infoNum[length - 1].w,
|
||||
h: infoNum[length - 1].h,
|
||||
cw: length >= 3 ? 5.7 : '',
|
||||
ch: length >= 3 ? 9 : '',
|
||||
size: infoNum[length - 1].size,
|
||||
color: '#00ff00',
|
||||
font: 'normal 500px Arial,sans-serif',
|
||||
xyz: [minSize ? item[1] - 20 : 360 - (index * 90), -40, 380],
|
||||
textAlign: 'right',
|
||||
};
|
||||
prps.push(info);
|
||||
prpd.push(infoPrpd);
|
||||
prpd3d.push(info3d);
|
||||
})
|
||||
data[size] = { set, prps, prpd, prpd3d }
|
||||
return data;
|
||||
}
|
||||
export { createAxisInfo }
|
@ -1,27 +0,0 @@
|
||||
//全屏
|
||||
const fullScreen = () => {
|
||||
var element = document.documentElement;
|
||||
if (element.requestFullscreen) {
|
||||
element.requestFullscreen();
|
||||
} else if (element.msRequestFullscreen) {
|
||||
element.msRequestFullscreen();
|
||||
} else if (element.mozRequestFullScreen) {
|
||||
element.mozRequestFullScreen();
|
||||
} else if (element.webkitRequestFullscreen) {
|
||||
element.webkitRequestFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
//退出全屏
|
||||
const exitFullscreen = () => {
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.msExitFullscreen) {
|
||||
document.msExitFullscreen();
|
||||
} else if (document.mozCancelFullScreen) {
|
||||
document.mozCancelFullScreen();
|
||||
} else if (document.webkitExitFullscreen) {
|
||||
document.webkitExitFullscreen();
|
||||
}
|
||||
}
|
||||
export { fullScreen, exitFullscreen }
|
@ -1,72 +0,0 @@
|
||||
/**
|
||||
* Created by Dasate on 2017/9/14.
|
||||
* QQ361899429
|
||||
*/
|
||||
var simpleAlert = function (opts) {
|
||||
//设置默认参数
|
||||
var opt = {
|
||||
"closeAll": false,
|
||||
"content": "",
|
||||
"buttons": {}
|
||||
}
|
||||
//合并参数
|
||||
var option = $.extend(opt, opts);
|
||||
//事件
|
||||
var dialog = {}
|
||||
var $simpleAlert = $('<div class="simpleAlert">');
|
||||
var $shelter = $('<div class="simpleAlertShelter">');
|
||||
var $simpleAlertBody = $('<div class="simpleAlertBody">');
|
||||
var $simpleAlertBodyClose = $('<img class="simpleAlertBodyClose" src="img/close.png" height="14" width="14"/>');
|
||||
var $simpleAlertBodyContent = $('<p class="simpleAlertBodyContent">' + option.content + '</p>');
|
||||
dialog.init = function () {
|
||||
$simpleAlertBody.append($simpleAlertBodyClose).append($simpleAlertBodyContent);
|
||||
var num = 0;
|
||||
var only = false;
|
||||
var onlyArr = [];
|
||||
for (var i = 0; i < 2; i++) {
|
||||
for (var key in option.buttons) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
onlyArr.push(key);
|
||||
break;
|
||||
case 1:
|
||||
if (onlyArr.length <= 1) {
|
||||
only = true;
|
||||
} else {
|
||||
only = false;
|
||||
}
|
||||
num++;
|
||||
var $btn = $('<button class="simpleAlertBtn simpleAlertBtn' + num + '">' + key + '</button>')
|
||||
// console.log(key)
|
||||
|
||||
$btn.bind("click", option.buttons[key=='OK'?'确定':key=='Yes'?'是':key=='No'?'否':key=='Cancel'?'取消':key]);
|
||||
if (only) {
|
||||
$btn.addClass("onlyOne")
|
||||
}
|
||||
$simpleAlertBody.append($btn);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
$simpleAlert.append($shelter).append($simpleAlertBody);
|
||||
$("body").append($simpleAlert);
|
||||
$simpleAlertBody.show().animate({"marginTop":"-128px","opacity":"1"},300);
|
||||
}
|
||||
//右上角关闭按键事件
|
||||
$simpleAlertBodyClose.bind("click", function () {
|
||||
option.closeAll=false;
|
||||
dialog.close();
|
||||
})
|
||||
dialog.close = function () {
|
||||
if(option.closeAll){
|
||||
$(".simpleAlert").remove()
|
||||
}else {
|
||||
$simpleAlertBody.animate({"marginTop": "-188px", "opacity": "0"}, 200, function () {
|
||||
$(".simpleAlert").last().remove()
|
||||
});
|
||||
}
|
||||
}
|
||||
dialog.init();
|
||||
return dialog;
|
||||
}
|
@ -1,200 +0,0 @@
|
||||
(function(){
|
||||
class Lut {
|
||||
|
||||
constructor( colormap, count = 32 ) {
|
||||
|
||||
this.isLut = true;
|
||||
|
||||
this.lut = [];
|
||||
this.map = [];
|
||||
this.n = 0;
|
||||
this.minV = 0;
|
||||
this.maxV = 1;
|
||||
|
||||
this.setColorMap( colormap, count );
|
||||
|
||||
}
|
||||
|
||||
set( value ) {
|
||||
|
||||
if ( value.isLut === true ) {
|
||||
|
||||
this.copy( value );
|
||||
|
||||
}
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
setMin( min ) {
|
||||
|
||||
this.minV = min;
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
setMax( max ) {
|
||||
|
||||
this.maxV = max;
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
setColorMap( colormap, count = 32 ) {
|
||||
|
||||
this.map = ColorMapKeywords[ colormap ] || ColorMapKeywords.rainbow;
|
||||
this.n = count;
|
||||
|
||||
const step = 1.0 / this.n;
|
||||
const minColor = new THREE.Color();
|
||||
const maxColor = new THREE.Color();
|
||||
|
||||
this.lut.length = 0;
|
||||
|
||||
// sample at 0
|
||||
|
||||
this.lut.push( new THREE.Color( this.map[ 0 ][ 1 ] ) );
|
||||
|
||||
// sample at 1/n, ..., (n-1)/n
|
||||
|
||||
for ( let i = 1; i < count; i ++ ) {
|
||||
|
||||
const alpha = i * step;
|
||||
|
||||
for ( let j = 0; j < this.map.length - 1; j ++ ) {
|
||||
|
||||
if ( alpha > this.map[ j ][ 0 ] && alpha <= this.map[ j + 1 ][ 0 ] ) {
|
||||
|
||||
const min = this.map[ j ][ 0 ];
|
||||
const max = this.map[ j + 1 ][ 0 ];
|
||||
|
||||
minColor.setHex( this.map[ j ][ 1 ], THREE.LinearSRGBColorSpace );
|
||||
maxColor.setHex( this.map[ j + 1 ][ 1 ], THREE.LinearSRGBColorSpace );
|
||||
|
||||
const color = new THREE.Color().lerpColors( minColor, maxColor, ( alpha - min ) / ( max - min ) );
|
||||
|
||||
this.lut.push( color );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// sample at 1
|
||||
|
||||
this.lut.push( new THREE.Color( this.map[ this.map.length - 1 ][ 1 ] ) );
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
copy( lut ) {
|
||||
|
||||
this.lut = lut.lut;
|
||||
this.map = lut.map;
|
||||
this.n = lut.n;
|
||||
this.minV = lut.minV;
|
||||
this.maxV = lut.maxV;
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
getColor( alpha ) {
|
||||
|
||||
alpha = THREE.MathUtils.clamp( alpha, this.minV, this.maxV );
|
||||
|
||||
alpha = ( alpha - this.minV ) / ( this.maxV - this.minV );
|
||||
|
||||
const colorPosition = Math.round( alpha * this.n );
|
||||
|
||||
return this.lut[ colorPosition ];
|
||||
|
||||
}
|
||||
|
||||
addColorMap( name, arrayOfColors ) {
|
||||
|
||||
ColorMapKeywords[ name ] = arrayOfColors;
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
createCanvas() {
|
||||
|
||||
const canvas = document.createElement( 'canvas' );
|
||||
canvas.width = 1;
|
||||
canvas.height = this.n;
|
||||
|
||||
this.updateCanvas( canvas );
|
||||
|
||||
return canvas;
|
||||
|
||||
}
|
||||
|
||||
updateCanvas( canvas ) {
|
||||
|
||||
const ctx = canvas.getContext( '2d', { alpha: false } );
|
||||
|
||||
const imageData = ctx.getImageData( 0, 0, 1, this.n );
|
||||
|
||||
const data = imageData.data;
|
||||
|
||||
let k = 0;
|
||||
|
||||
const step = 1.0 / this.n;
|
||||
|
||||
const minColor = new THREE.Color();
|
||||
const maxColor = new THREE.Color();
|
||||
const finalColor = new THREE.Color();
|
||||
|
||||
for ( let i = 1; i >= 0; i -= step ) {
|
||||
|
||||
for ( let j = this.map.length - 1; j >= 0; j -- ) {
|
||||
|
||||
if ( i < this.map[ j ][ 0 ] && i >= this.map[ j - 1 ][ 0 ] ) {
|
||||
|
||||
const min = this.map[ j - 1 ][ 0 ];
|
||||
const max = this.map[ j ][ 0 ];
|
||||
|
||||
minColor.setHex( this.map[ j - 1 ][ 1 ], THREE.LinearSRGBColorSpace );
|
||||
maxColor.setHex( this.map[ j ][ 1 ], THREE.LinearSRGBColorSpace );
|
||||
|
||||
finalColor.lerpColors( minColor, maxColor, ( i - min ) / ( max - min ) );
|
||||
|
||||
data[ k * 4 ] = Math.round( finalColor.r * 255 );
|
||||
data[ k * 4 + 1 ] = Math.round( finalColor.g * 255 );
|
||||
data[ k * 4 + 2 ] = Math.round( finalColor.b * 255 );
|
||||
data[ k * 4 + 3 ] = 255;
|
||||
|
||||
k += 1;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ctx.putImageData( imageData, 0, 0 );
|
||||
|
||||
return canvas;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const ColorMapKeywords = {
|
||||
|
||||
'rainbow': [[ 0.0, 0x0000FF ], [ 0.2, 0x00FFFF ], [ 0.5, 0x00FF00 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFF0000 ]],
|
||||
'cooltowarm': [[ 0.0, 0x3C4EC2 ], [ 0.2, 0x9BBCFF ], [ 0.5, 0xDCDCDC ], [ 0.8, 0xF6A385 ], [ 1.0, 0xB40426 ]],
|
||||
'blackbody': [[ 0.0, 0x000000 ], [ 0.2, 0x780000 ], [ 0.5, 0xE63200 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFFFFFF ]],
|
||||
'grayscale': [[ 0.0, 0x000000 ], [ 0.2, 0x404040 ], [ 0.5, 0x7F7F80 ], [ 0.8, 0xBFBFBF ], [ 1.0, 0xFFFFFF ]]
|
||||
|
||||
};
|
||||
THREE.Lut = Lut;
|
||||
})()
|
||||
|
@ -1,167 +0,0 @@
|
||||
var Stats = function () {
|
||||
|
||||
var mode = 0;
|
||||
|
||||
var container = document.createElement( 'div' );
|
||||
container.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';
|
||||
container.addEventListener( 'click', function ( event ) {
|
||||
|
||||
event.preventDefault();
|
||||
showPanel( ++ mode % container.children.length );
|
||||
|
||||
}, false );
|
||||
|
||||
//
|
||||
|
||||
function addPanel( panel ) {
|
||||
|
||||
container.appendChild( panel.dom );
|
||||
return panel;
|
||||
|
||||
}
|
||||
|
||||
function showPanel( id ) {
|
||||
|
||||
for ( var i = 0; i < container.children.length; i ++ ) {
|
||||
|
||||
container.children[ i ].style.display = i === id ? 'block' : 'none';
|
||||
|
||||
}
|
||||
|
||||
mode = id;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
var beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;
|
||||
|
||||
var fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );
|
||||
var msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );
|
||||
|
||||
if ( self.performance && self.performance.memory ) {
|
||||
|
||||
var memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );
|
||||
|
||||
}
|
||||
|
||||
showPanel( 0 );
|
||||
|
||||
return {
|
||||
|
||||
REVISION: 16,
|
||||
|
||||
dom: container,
|
||||
|
||||
addPanel: addPanel,
|
||||
showPanel: showPanel,
|
||||
|
||||
begin: function () {
|
||||
|
||||
beginTime = ( performance || Date ).now();
|
||||
|
||||
},
|
||||
|
||||
end: function () {
|
||||
|
||||
frames ++;
|
||||
|
||||
var time = ( performance || Date ).now();
|
||||
|
||||
msPanel.update( time - beginTime, 200 );
|
||||
|
||||
if ( time >= prevTime + 1000 ) {
|
||||
|
||||
fpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );
|
||||
|
||||
prevTime = time;
|
||||
frames = 0;
|
||||
|
||||
if ( memPanel ) {
|
||||
|
||||
var memory = performance.memory;
|
||||
memPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return time;
|
||||
|
||||
},
|
||||
|
||||
update: function () {
|
||||
|
||||
beginTime = this.end();
|
||||
|
||||
},
|
||||
|
||||
// Backwards Compatibility
|
||||
|
||||
domElement: container,
|
||||
setMode: showPanel
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
Stats.Panel = function ( name, fg, bg ) {
|
||||
|
||||
var min = Infinity, max = 0, round = Math.round;
|
||||
var PR = round( window.devicePixelRatio || 1 );
|
||||
|
||||
var WIDTH = 80 * PR, HEIGHT = 48 * PR,
|
||||
TEXT_X = 3 * PR, TEXT_Y = 2 * PR,
|
||||
GRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,
|
||||
GRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;
|
||||
|
||||
var canvas = document.createElement( 'canvas' );
|
||||
canvas.width = WIDTH;
|
||||
canvas.height = HEIGHT;
|
||||
canvas.style.cssText = 'width:80px;height:48px';
|
||||
|
||||
var context = canvas.getContext( '2d' );
|
||||
context.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';
|
||||
context.textBaseline = 'top';
|
||||
|
||||
context.fillStyle = bg;
|
||||
context.fillRect( 0, 0, WIDTH, HEIGHT );
|
||||
|
||||
context.fillStyle = fg;
|
||||
context.fillText( name, TEXT_X, TEXT_Y );
|
||||
context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );
|
||||
|
||||
context.fillStyle = bg;
|
||||
context.globalAlpha = 0.9;
|
||||
context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );
|
||||
|
||||
return {
|
||||
|
||||
dom: canvas,
|
||||
|
||||
update: function ( value, maxValue ) {
|
||||
|
||||
min = Math.min( min, value );
|
||||
max = Math.max( max, value );
|
||||
|
||||
context.fillStyle = bg;
|
||||
context.globalAlpha = 1;
|
||||
context.fillRect( 0, 0, WIDTH, GRAPH_Y );
|
||||
context.fillStyle = fg;
|
||||
context.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );
|
||||
|
||||
context.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );
|
||||
|
||||
context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );
|
||||
|
||||
context.fillStyle = bg;
|
||||
context.globalAlpha = 0.9;
|
||||
context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
export default Stats;
|
@ -1,91 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
|
||||
<link type="text/css" rel="stylesheet" href="./common/css/common.css">
|
||||
<style>
|
||||
* {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#chartDiv {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- 第一个 -->
|
||||
<div id="realdata" class="realdata">
|
||||
<div id="echarts-btn" class="col echarts-btn menu-top">
|
||||
|
||||
<span class="btn" title="PRPS">
|
||||
<span id="prps" class="prps ready"></span>
|
||||
</span>
|
||||
|
||||
<span class="btn" title="PRPD">
|
||||
<span id="prpd" class="prpd"></span>
|
||||
</span>
|
||||
|
||||
<span class="btn" title="开启">
|
||||
<span id="start" class="start"></span>
|
||||
</span>
|
||||
|
||||
<span class="btn refreshtitle " title="累计">
|
||||
<span class="refresh-btn ready"></span>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="chartDiv" class="col echarts-chart charts">
|
||||
<div id="box3D1" class="loading-box"></div>
|
||||
<div id="box2D1" class="loading-box" style="display: none;"></div>
|
||||
<div class="noisy-slide-box">
|
||||
<span class="slide-name noise" name="noise">底噪</span>
|
||||
<div class="noisy-slide slide GIS" data-price="0"></div>
|
||||
<div class="noisy-slide slide GIL" data-price="0" style="display:none"></div>
|
||||
</div>
|
||||
<div id="addPointNumDiv">
|
||||
<div class="cdf-slide-box">
|
||||
<span class="slide-name phaseOffset" name="phaseOffset">相位偏移</span>
|
||||
<span class="cdf-slide slide" data-price="0"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zoom">
|
||||
<span class="btn" title="放大">
|
||||
<span id="scale" class="scale big ready"></span>
|
||||
</span>
|
||||
<span class="btn" title="缩小">
|
||||
<span id="scale" class="scale small"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="box2D6" class="loading-box-mini"></div>
|
||||
|
||||
<script type="text/javascript" src="./common/js/jquery.min.js"></script>
|
||||
<!-- <script type="text/javascript" src="./common/js/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="./common/js/simpleAlert.js"></script> -->
|
||||
|
||||
<script type="text/javascript" src="./common/js/three/three.min.js"></script>
|
||||
<script type="text/javascript" src="./common/js/three/OrbitControls.js"></script>
|
||||
<script type="text/javascript" src="./common/js/three/Lut.js"></script>
|
||||
|
||||
<!--<script type="text/javascript" src="./common/js/echarts/echarts.js"></script> -->
|
||||
<!-- 使不支持es模块的浏览器支持es -->
|
||||
<!-- <script type="text/javascript" async src="https://unpkg.com/es-module-shims@1.3.6/dist/es-module-shims.js"></script> -->
|
||||
<script type="module" src="./common/js/history.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -1,137 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
|
||||
<link type="text/css" rel="stylesheet" href="./common/css/common.css">
|
||||
<style>
|
||||
* {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#chartDiv {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- 第一个 -->
|
||||
<div id="realdata" class="realdata">
|
||||
<div id="echarts-btn" class="col echarts-btn menu-top">
|
||||
<select id="channelFiltering" class="selectStyle">
|
||||
<option value="0" class="selectFrequency">选择频段</option>
|
||||
<option value="1" class="lowband">低频</option>
|
||||
<option value="2" class="fullband">全频</option>
|
||||
<option value="3" class="narrowband">窄频</option>
|
||||
<option value="4" class="highband">高频</option>
|
||||
</select>
|
||||
|
||||
<span class="btn" title="PRPS">
|
||||
<span id="prps" class="prps ready"></span>
|
||||
</span>
|
||||
|
||||
<span class="btn" title="PRPD">
|
||||
<span id="prpd" class="prpd"></span>
|
||||
</span>
|
||||
|
||||
<span class="btn" title="开启">
|
||||
<span id="start" class="start"></span>
|
||||
</span>
|
||||
<span class="btn LinkANC" title="自适应降噪">
|
||||
<span id="adaptive-noise" class="adaptive-noise"></span>
|
||||
</span>
|
||||
<span id="associated-noise-box" class="btn LinkNC" title="关联噪声传感器降噪">
|
||||
<span id="associated-noise" class="associated-noise"></span>
|
||||
</span>
|
||||
<span class="btn eventList" title="事件列表">
|
||||
<span class="event-btn"></span>
|
||||
</span>
|
||||
|
||||
<span id="record-btn-box" class="btn record-btn-box" title="录波">
|
||||
<span class="record-btn"></span>
|
||||
</span>
|
||||
|
||||
<span id="total" class="btn" style="width: 70px;display:none" >
|
||||
<input id="total-time" type="number" placeholder="累计时间(s)" />
|
||||
</span>
|
||||
|
||||
<span class="btn refreshtitle " title="累计">
|
||||
<span class="refresh-btn ready"></span>
|
||||
</span>
|
||||
|
||||
<span id="menu-right" class="btn" title="展开">
|
||||
<span id="show" class="show"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="chartDiv" class="col echarts-chart charts">
|
||||
<div id="box3D1" class="loading-box"></div>
|
||||
<div id="box3D2" class="loading-box" style="display: none;"></div>
|
||||
<div id="box2D2" class="loading-box" style="display: none;"></div>
|
||||
<div id="box2D5" class="loading-box" style="display: none;width:100%;height: 100%;"></div>
|
||||
<div id="box2D1" class="loading-box" style="display: none;"></div>
|
||||
<div class="noisy-slide-box">
|
||||
<span class="slide-name noise" name="noise">底噪</span>
|
||||
<div class="noisy-slide slide GIS" data-price="0"></div>
|
||||
<div class="noisy-slide slide GIL" data-price="0" style="display:none"></div>
|
||||
</div>
|
||||
<div id="echarts-text" class="echarts-text text-bottom">
|
||||
<span class="maxValue" name="maxValue">
|
||||
<span class="name">脉冲最大值:</span>
|
||||
<span id="maxValue">0</span>
|
||||
<span class="unit">dBm</span>
|
||||
</span>
|
||||
<span class="avgValue" name="averageValue">
|
||||
<span class="name">脉冲平均值:</span>
|
||||
<span id="averageValue">0</span>
|
||||
<span class="unit">dBm</span>
|
||||
</span>
|
||||
<span class="pulseNumber" name="impulseQuantity">
|
||||
<span class="name">脉冲数量:</span>
|
||||
<span id="impulseQuantity">0</span>
|
||||
</span>
|
||||
</div>
|
||||
<div id="addPointNumDiv">
|
||||
<div class="cdf-slide-box">
|
||||
<span class="slide-name phaseOffset" name="phaseOffset">相位偏移</span>
|
||||
<span class="cdf-slide slide" data-price="0"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zoom">
|
||||
<span class="btn" title="放大">
|
||||
<span id="scale" class="scale big ready"></span>
|
||||
</span>
|
||||
<span class="btn" title="缩小">
|
||||
<span id="scale" class="scale small"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="box2D6" class="loading-box-mini"></div>
|
||||
|
||||
<script type="text/javascript" src="./common/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="./common/js/jquery-ui.min.js"></script>
|
||||
<!--<script type="text/javascript" src="./common/js/simpleAlert.js"></script> -->
|
||||
|
||||
<script type="text/javascript" src="./common/js/three/three.min.js"></script>
|
||||
<script type="text/javascript" src="./common/js/three/OrbitControls.js"></script>
|
||||
<script type="text/javascript" src="./common/js/three/Lut.js"></script>
|
||||
|
||||
<script type="text/javascript" src="./common/js/echarts/echarts.js"></script>
|
||||
<!-- 使不支持es模块的浏览器支持es -->
|
||||
<!-- <script type="text/javascript" async src="https://unpkg.com/es-module-shims@1.3.6/dist/es-module-shims.js"></script> -->
|
||||
<script type="module" src="./common/js/index.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -0,0 +1,19 @@
|
||||
import server from '@/utils/request';
|
||||
|
||||
//关联关系配置
|
||||
|
||||
//使用post分页动态查询
|
||||
|
||||
export const getAssociateConfigListPage_api = (data: object) => server.post(`/fault-config/_query`, data);
|
||||
|
||||
// 新增数据 fault-config
|
||||
export const addAssociateConfig_api = (data: object) => server.patch(`/fault-config`, data);
|
||||
|
||||
//修改数据
|
||||
export const updateAssociateConfig_api = (id: object) => server.put(`/fault-config/${id}`);
|
||||
|
||||
//根据ID查询
|
||||
export const getAssociateConfigList_api = (id: object) => server.get(`/fault/config/${id}`);
|
||||
|
||||
//根据ID删除
|
||||
export const delteAssociateConfig_api = (id: string) => server.remove(`/fault/config/${id}`);
|
@ -0,0 +1,29 @@
|
||||
import server from '@/utils/request'
|
||||
|
||||
/**
|
||||
* (POST)一次性获取所有的节点树
|
||||
* @param logicId
|
||||
* @returns
|
||||
*/
|
||||
export const findDefaultTree = (logicId: string) => server.get(`/common-point/findDefaultTree/${logicId}`)
|
||||
|
||||
/**
|
||||
* 保存站点监测点数据
|
||||
* @param data
|
||||
* @returns
|
||||
*/
|
||||
export const addMonitor = (data: any) => server.post(`/common-point`, data)
|
||||
|
||||
/**
|
||||
* 修改站点监测点数据
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export const editMonitor = (data: any) => server.put(`/common/point/${data.id}`, data)
|
||||
|
||||
/**
|
||||
* 删除站点监测点数据
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export const deleteMonitor = (id: any) => server.remove(`/common/point/${id}`)
|
@ -1,17 +0,0 @@
|
||||
import server from '@/utils/request';
|
||||
//编辑标签
|
||||
export const saveTag = (data:any) => server.patch('/calendar/tags',data)
|
||||
//查询标签列表
|
||||
export const queryTags = () => server.get('/calendar/tags')
|
||||
//删除标签
|
||||
export const deleteTags = (ids:any) => server.remove('/calendar/tags',{},{data:ids})
|
||||
//保存标签颜色
|
||||
export const saveTagsColor = (data:any) => server.post('/system/config/calendar-tag-color',data)
|
||||
//查询标签颜色
|
||||
export const getTagsColor = () => server.get('/system/config/calendar-tag-color');
|
||||
//查询指定日期内的日历
|
||||
export const queryEvents = (dateFrom:any,dateTo:any) => server.get(`/calendar/${dateFrom}/${dateTo}`)
|
||||
//批量保存指定日期的日历
|
||||
export const saveEvents = (data:any) => server.patch('/calendar',data)
|
||||
//清空日历
|
||||
export const clearAll = () => server.remove('/calendar/mine/_all')
|
@ -1,92 +0,0 @@
|
||||
<template>
|
||||
<div
|
||||
:style="props.style || { width: '100%', height: '100%' }"
|
||||
:class="props.class"
|
||||
>
|
||||
<el-amap v-if="amapKey" :zooms="[3, 20]" @init="initMap" ref="mapRef">
|
||||
<template v-if="isOpenUi">
|
||||
<template v-if="uiLoading">
|
||||
<slot></slot>
|
||||
</template>
|
||||
</template>
|
||||
<template v-else><slot></slot></template>
|
||||
</el-amap>
|
||||
<JEmpty v-else description="请配置高德地图key" style="padding: 20%" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { CSSProperties, PropType } from 'vue';
|
||||
import AMap, { initAMapApiLoader } from '@vuemap/vue-amap';
|
||||
import '@vuemap/vue-amap/dist/style.css';
|
||||
import { getAMapUiPromise } from './utils';
|
||||
import { useSystem } from '@/store/system';
|
||||
|
||||
const emit = defineEmits(['init']);
|
||||
|
||||
const system = useSystem();
|
||||
interface AMapProps {
|
||||
style?: CSSProperties;
|
||||
class?: string;
|
||||
AMapUI?: string | boolean;
|
||||
}
|
||||
const amapKey = system.$state.configInfo.amap?.apiKey;
|
||||
const secretKey = system.$state.configInfo.amap?.secretKey;
|
||||
|
||||
initAMapApiLoader({
|
||||
key: amapKey,
|
||||
securityJsCode: secretKey,
|
||||
plugins: ['AMap.DistrictSearch', 'AMap.GeoJSON'],
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
style: Object as PropType<AMapProps['style']>,
|
||||
class: String as PropType<AMapProps['class']>,
|
||||
AMapUI: [String, Boolean],
|
||||
center: Array,
|
||||
});
|
||||
|
||||
const mapRef = ref();
|
||||
|
||||
const uiLoading = ref<boolean>(false);
|
||||
|
||||
let mapInstance:any = null;
|
||||
|
||||
const isOpenUi = computed(() => {
|
||||
return 'AMapUI' in props || props.AMapUI;
|
||||
});
|
||||
|
||||
const getAMapUI = () => {
|
||||
const version = typeof props.AMapUI === 'string' ? props.AMapUI : '1.1';
|
||||
getAMapUiPromise(version).then(() => {
|
||||
uiLoading.value = true;
|
||||
});
|
||||
};
|
||||
|
||||
const marker = ref<any[]>([]);
|
||||
|
||||
const initMap = (e: any) => {
|
||||
mapInstance = e;
|
||||
if (isOpenUi.value) {
|
||||
getAMapUI();
|
||||
}
|
||||
emit('init', e);
|
||||
};
|
||||
|
||||
const setBounds = (bounds: any) => {
|
||||
console.log(bounds)
|
||||
if (mapInstance) {
|
||||
mapInstance.setBounds(bounds)
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(()=>{
|
||||
console.log(secretKey,'secretKey')
|
||||
})
|
||||
|
||||
defineExpose({
|
||||
setBounds
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
@ -1,116 +0,0 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useMap } from './useMap'
|
||||
import {pick} from "lodash-es";
|
||||
|
||||
defineOptions({
|
||||
name: 'DistrictSearch'
|
||||
})
|
||||
|
||||
const instance = useMap()
|
||||
|
||||
const props = defineProps({
|
||||
subdistrict: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
extensions: {
|
||||
type: String,
|
||||
default: 'all'
|
||||
},
|
||||
level: {
|
||||
type: String,
|
||||
default: 'district'
|
||||
},
|
||||
view: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
styles: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
adcode: {
|
||||
type: String,
|
||||
default: undefined
|
||||
}
|
||||
})
|
||||
|
||||
let district
|
||||
let polygon
|
||||
|
||||
const remove = () => {
|
||||
if (polygon && instance.$amapComponent) {
|
||||
if (instance.$amapComponent.getLayers().length) {
|
||||
instance.$amapComponent.remove(polygon)
|
||||
}
|
||||
polygon = null
|
||||
}
|
||||
}
|
||||
|
||||
const drawBounds = (paths) => {
|
||||
if (polygon && instance.$amapComponent?.remove) {
|
||||
instance.$amapComponent.remove(polygon)
|
||||
polygon = null
|
||||
}
|
||||
for (var i = 0; i < paths.length; i += 1) {//构造MultiPolygon的path
|
||||
paths[i] = [paths[i]]
|
||||
}
|
||||
|
||||
const _styles = Object.assign({
|
||||
strokeWeight: 1,
|
||||
path: paths,
|
||||
fillOpacity: 0.25,
|
||||
fillColor: '#80d8ff',
|
||||
strokeColor: '#0091ea'
|
||||
},props.styles)
|
||||
|
||||
polygon = new AMap.Polygon(_styles);
|
||||
|
||||
instance.$amapComponent.add(polygon)
|
||||
|
||||
if (props.view) {
|
||||
instance.$amapComponent.setFitView(polygon)
|
||||
}
|
||||
}
|
||||
|
||||
const queryDistrict = (code) => {
|
||||
const opts = {
|
||||
subdistrict: 0, //获取边界不需要返回下级行政区
|
||||
extensions: 'all', //返回行政区边界坐标组等具体信息
|
||||
level: 'district' //查询行政级别为 市
|
||||
}
|
||||
|
||||
const options = Object.assign(opts, pick(props, ['subdistrict', 'extensions', 'level']))
|
||||
|
||||
if (!district) {
|
||||
district = new AMap.DistrictSearch(options)
|
||||
}
|
||||
|
||||
if (!code) return
|
||||
district.search(code, (status, result) => {
|
||||
if (!result || !result.districtList || !result.districtList[0]) {
|
||||
console.warn('请正确填写名称或更新其他名称');
|
||||
return
|
||||
}
|
||||
const bounds = result.districtList[0].boundaries;
|
||||
drawBounds(bounds)
|
||||
})
|
||||
}
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
remove()
|
||||
})
|
||||
|
||||
watch(() => props.adcode, () =>{
|
||||
queryDistrict(props.adcode)
|
||||
}, { immediate: true })
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -1,91 +0,0 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useMap } from './useMap'
|
||||
import { max, min } from 'lodash-es'
|
||||
|
||||
defineOptions({
|
||||
name: 'GeoJson'
|
||||
})
|
||||
|
||||
const props = defineProps({
|
||||
geo: {
|
||||
type: Object,
|
||||
default: undefined
|
||||
},
|
||||
view: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
})
|
||||
|
||||
const instance = useMap()
|
||||
|
||||
let geoJsonLayer
|
||||
|
||||
const remove = () => {
|
||||
if (geoJsonLayer && instance.$amapComponent) {
|
||||
if (instance.$amapComponent.getLayers().length) {
|
||||
instance.$amapComponent.remove(geoJsonLayer)
|
||||
}
|
||||
geoJsonLayer = null
|
||||
}
|
||||
}
|
||||
const drawBounds = () => {
|
||||
remove()
|
||||
|
||||
if (!props.geo) return
|
||||
|
||||
geoJsonLayer = new AMap.GeoJSON({
|
||||
geoJSON: props.geo,
|
||||
getPolygon: (geojson, lnglats) => {
|
||||
return new AMap.Polygon({
|
||||
path: lnglats,
|
||||
fillOpacity: 0.25,// 面积越大透明度越高
|
||||
strokeColor: '#0091ea',
|
||||
fillColor: '#80d8ff'
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
instance.$amapComponent.add(geoJsonLayer)
|
||||
|
||||
if (props.view) {
|
||||
|
||||
const points = props.geo.features.reduce((prev, next) => {
|
||||
const coordinates = next.geometry.coordinates
|
||||
prev.push(...coordinates[0])
|
||||
return prev
|
||||
}, [])
|
||||
|
||||
if (points.length) {
|
||||
const lngArr = points.map(lnglat => lnglat[0])
|
||||
const latArr = points.map(lnglat => lnglat[1])
|
||||
|
||||
const maxLng = max(lngArr)
|
||||
const maxLat = max(latArr)
|
||||
const minLng = min(lngArr)
|
||||
const minLat = min(latArr)
|
||||
const southWest = new AMap.LngLat(maxLng, maxLat)
|
||||
const northEast = new AMap.LngLat(minLng, minLat)
|
||||
const bounds = new AMap.Bounds(southWest, northEast)
|
||||
instance.$amapComponent.setBounds(bounds)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
remove()
|
||||
})
|
||||
|
||||
watch(() => JSON.stringify(props.geo), () =>{
|
||||
drawBounds()
|
||||
}, { immediate: true })
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -1,7 +0,0 @@
|
||||
import AMap from './AMap.vue'
|
||||
|
||||
export * from './useMap'
|
||||
export { default as DistrictSearch } from './DistrictSearch.vue'
|
||||
export { default as GeoJson } from './GeoJson.vue'
|
||||
|
||||
export default AMap
|
@ -1,4 +0,0 @@
|
||||
export const useMap = () => {
|
||||
return inject('parentInstance')
|
||||
}
|
||||
|
@ -1,27 +0,0 @@
|
||||
<template>
|
||||
<img :src="src" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
defineOptions({
|
||||
name: 'LevelIcon'
|
||||
})
|
||||
|
||||
const props = defineProps({
|
||||
level: {
|
||||
type: Number,
|
||||
default: undefined
|
||||
}
|
||||
})
|
||||
|
||||
const src = computed(() => {
|
||||
return `/images/alarm/alarm${props.level}.png`
|
||||
})
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -1,72 +0,0 @@
|
||||
<template>
|
||||
<div class="radio-button" :style="styles">
|
||||
<div v-for="item in options" @click="onClick(item)" class="radio-button-item" :class="{'active': myValue === item.value }">
|
||||
{{ item.label }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineOptions({
|
||||
name: 'RadioButton',
|
||||
})
|
||||
|
||||
const props = defineProps({
|
||||
value: {
|
||||
type: [String, Number],
|
||||
default: undefined
|
||||
},
|
||||
options: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
columns: {
|
||||
type: Number,
|
||||
default: 3
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:value'])
|
||||
|
||||
const myValue = ref(props.value)
|
||||
|
||||
const styles = computed(() => {
|
||||
return {
|
||||
'grid-template-columns': `repeat(${props.columns}, 1fr)`
|
||||
}
|
||||
})
|
||||
|
||||
const onClick = (record) => {
|
||||
if (myValue.value !== record.value) {
|
||||
myValue.value = record.value
|
||||
emit('update:value', record.value)
|
||||
emit('select', record.value)
|
||||
}
|
||||
}
|
||||
|
||||
watch(() => props.value, () => {
|
||||
myValue.value = props.value
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.radio-button {
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
|
||||
.radio-button-item {
|
||||
padding: 6px 12px;
|
||||
text-align: center;
|
||||
height: 100%;
|
||||
border-radius: 2px;
|
||||
background-color: #f5f5f5;
|
||||
cursor: pointer;
|
||||
|
||||
&.active {
|
||||
color: #fff;
|
||||
background-color: @primary-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1,11 +0,0 @@
|
||||
import CardSelect from './CardSelect.vue';
|
||||
import type { App } from 'vue';
|
||||
|
||||
CardSelect.name = 'JCardSelect';
|
||||
|
||||
CardSelect.install = function (app: App) {
|
||||
app.component('JCardSelect', CardSelect);
|
||||
return app;
|
||||
};
|
||||
|
||||
export default CardSelect;
|
@ -1,163 +0,0 @@
|
||||
<template>
|
||||
<div :class="['j-check-button', props.class]" :style="styles">
|
||||
<div
|
||||
v-for="item in _options"
|
||||
:key="item.value"
|
||||
:class="{
|
||||
'j-check-button-item': true,
|
||||
'selected': myValue.includes(item.value),
|
||||
'disabled': item.disabled
|
||||
}"
|
||||
@click="
|
||||
() => {
|
||||
selected(item.value, item.disabled);
|
||||
}
|
||||
"
|
||||
>
|
||||
{{ item.label }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, CSSProperties, PropType, ref, watch } from 'vue';
|
||||
import { isArray } from 'lodash-es';
|
||||
import { Form } from 'ant-design-vue'
|
||||
|
||||
defineOptions({
|
||||
name: 'CheckButton'
|
||||
})
|
||||
|
||||
const props = defineProps({
|
||||
value: {
|
||||
type: [String, Array],
|
||||
default: undefined,
|
||||
},
|
||||
options: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
class: {
|
||||
type: String,
|
||||
default: undefined,
|
||||
},
|
||||
style: {
|
||||
type: Object as PropType<CSSProperties>,
|
||||
default: () => ({}),
|
||||
},
|
||||
columns: {
|
||||
type: Number,
|
||||
default: 3
|
||||
}
|
||||
});
|
||||
const emit = defineEmits(['update:value', 'change', 'select']);
|
||||
|
||||
const formItemContext = Form.useInjectFormItemContext();
|
||||
const myValue = ref();
|
||||
const optionsMap = ref(new Map());
|
||||
|
||||
const styles = computed(() => {
|
||||
return {
|
||||
'grid-template-columns': `repeat(${props.columns}, 1fr)`,
|
||||
...props.style
|
||||
}
|
||||
})
|
||||
|
||||
const _options = computed(() => {
|
||||
props.options.forEach((item: any) => {
|
||||
if (props.disabled) {
|
||||
item.disabled = props.disabled
|
||||
}
|
||||
optionsMap.value.set(item.value, item);
|
||||
});
|
||||
return props.options;
|
||||
});
|
||||
|
||||
const selected = (key: string | number, disabeld: boolean) => {
|
||||
if (disabeld || props.disabled) return;
|
||||
|
||||
const values = new Set(myValue.value);
|
||||
|
||||
if (values.has(key)) {
|
||||
values.delete(key);
|
||||
} else {
|
||||
if (!props.multiple) {
|
||||
values.clear();
|
||||
}
|
||||
values.add(key);
|
||||
}
|
||||
|
||||
myValue.value = [...values.values()];
|
||||
|
||||
const optionsItems = myValue.value.map((_key) => {
|
||||
return optionsMap.value.get(_key);
|
||||
});
|
||||
|
||||
const _value = props.multiple ? myValue.value : myValue.value[0];
|
||||
|
||||
emit('update:value', _value);
|
||||
emit('change', _value, props.multiple ? optionsItems : optionsItems[0]);
|
||||
emit('select', _value, props.multiple ? optionsItems : optionsItems[0]);
|
||||
formItemContext.onFieldChange()
|
||||
};
|
||||
|
||||
watch(
|
||||
() => props.value,
|
||||
() => {
|
||||
if (props.value) {
|
||||
myValue.value = isArray(props.value) ? props.value : [props.value];
|
||||
} else {
|
||||
myValue.value = [];
|
||||
}
|
||||
},
|
||||
{ immediate: true, deep: true },
|
||||
);
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.j-check-button {
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
width: 100%;
|
||||
|
||||
.j-check-button-item {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
padding: 8px;
|
||||
border-radius: @border-radius-base;
|
||||
background-color: #f2f3f5;
|
||||
transition: all 0.3s;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background-color: @primary-color;
|
||||
opacity: 0.85;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
background-color: @primary-color;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
cursor: not-allowed;
|
||||
color: #00000040;
|
||||
background-color: #e6e6e6;
|
||||
opacity: 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
@ -1,3 +0,0 @@
|
||||
import CheckButton from "./CheckButton.vue";
|
||||
|
||||
export default CheckButton
|
@ -1,76 +0,0 @@
|
||||
<template>
|
||||
<!-- <a-tooltip v-if="toolTip" v-bind="toolTip">
|
||||
<span @click="showConfirm" :class="props.className" v-show="show">
|
||||
{{ props.class }}
|
||||
<slot></slot>
|
||||
</span>
|
||||
</a-tooltip> -->
|
||||
<span @click="showConfirm" :class="props.className" v-show="show">
|
||||
{{ props.class }}
|
||||
<slot></slot>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Modal } from 'ant-design-vue';
|
||||
const props = defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
onConfirm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
className: {
|
||||
type: String,
|
||||
},
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
toolTip: {
|
||||
type: Object
|
||||
},
|
||||
});
|
||||
// const confirmLoading = ref(false);
|
||||
// const modalVisible = ref(false);
|
||||
// const modalConfirm = async() => {
|
||||
// if (typeof props.onConfirm === 'function') {
|
||||
// confirmLoading.value = true;
|
||||
// const res = await props.onConfirm()?.finally(()=>{
|
||||
// confirmLoading.value = false;
|
||||
// modalVisible.value = false;
|
||||
// return
|
||||
// });
|
||||
// if(!res?.finally){
|
||||
// confirmLoading.value = false;
|
||||
// modalVisible.value = false;
|
||||
// }
|
||||
// } else {
|
||||
// modalVisible.value = false;
|
||||
// }
|
||||
// };
|
||||
const showConfirm = () => {
|
||||
if (props.disabled) {
|
||||
return;
|
||||
}
|
||||
Modal.confirm({
|
||||
title: props.title,
|
||||
content: props?.content,
|
||||
onOk() {
|
||||
return props?.onConfirm();
|
||||
},
|
||||
onCancel() {},
|
||||
});
|
||||
};
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.modalContent {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
@ -1,326 +0,0 @@
|
||||
<template>
|
||||
<div ref='dialog' :style='styleName' class='dialog'>
|
||||
<Transition name='dialog'>
|
||||
<div class='dialog-sprite' ref='header'>
|
||||
<div class='header' v-if="title !== false">
|
||||
<span>{{ title }}</span>
|
||||
<a-button size='small' type='text' @click.stop='onClose'>
|
||||
<AIcon type='CloseOutlined' />
|
||||
</a-button>
|
||||
</div>
|
||||
<div class='dialog-body' :style="bodyStyle">
|
||||
<slot></slot>
|
||||
</div>
|
||||
<!-- <div class='dialog-footer' v-if='slots?.footer'>-->
|
||||
<!-- <slot name='footer'></slot>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</Transition>
|
||||
<!-- <template v-for='item in rangeList'>-->
|
||||
<!-- <div :class="{'range': true, [item.classname]: true}" @mousedown.stop='rangeMove($event,item.classname)'></div>-->
|
||||
<!-- </template>-->
|
||||
|
||||
<div :class="{'range': true, 'bottom-right': true}" @mousedown.stop='rangeMove($event,"bottom-right")'></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang='ts'>
|
||||
|
||||
defineOptions({
|
||||
name: 'DragModal'
|
||||
})
|
||||
|
||||
const props = defineProps({
|
||||
title: {
|
||||
type: [String, Boolean],
|
||||
default: ''
|
||||
},
|
||||
width: {
|
||||
type: Number,
|
||||
default: 400
|
||||
},
|
||||
height: {
|
||||
type: Number,
|
||||
default: 100
|
||||
},
|
||||
dragRang: {
|
||||
type: [Array , Number],
|
||||
default: [400, 200]
|
||||
},
|
||||
bodyStyle: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emits = defineEmits(['close', 'heightChange'])
|
||||
const slots = useSlots()
|
||||
|
||||
const ele = document.body
|
||||
|
||||
const dialog = ref()
|
||||
const header = ref()
|
||||
const baseWidth = ref(props.width || 400)
|
||||
const baseHeight = ref(props.height || 100)
|
||||
const baseLeft = ref(100)
|
||||
const baseTop = ref(100)
|
||||
|
||||
const rangeList = [
|
||||
// {
|
||||
// classname: 'top-left'
|
||||
// },
|
||||
// {
|
||||
// classname: 'top-right'
|
||||
// },
|
||||
// {
|
||||
// classname: 'bottom-left'
|
||||
// },
|
||||
{
|
||||
classname: 'bottom-right'
|
||||
}
|
||||
]
|
||||
|
||||
const styleName = computed(() => {
|
||||
return {
|
||||
top: getFixed(baseTop.value) + 'px',
|
||||
left: getFixed(baseLeft.value) + 'px',
|
||||
width: getFixed(baseWidth.value) + 'px',
|
||||
height: getFixed(baseHeight.value) + 'px'
|
||||
}
|
||||
})
|
||||
|
||||
const getFixed = (val: number) => {
|
||||
return Number(val.toFixed(2))
|
||||
}
|
||||
|
||||
const onDrag = () => {
|
||||
let active = false
|
||||
let initialX: number
|
||||
let initialY: number
|
||||
let initialWindowX: number
|
||||
let initialWindowY: number
|
||||
|
||||
header.value.addEventListener('mousedown', (e: MouseEvent) => {
|
||||
active = true
|
||||
|
||||
initialX = e.clientX
|
||||
initialY = e.clientY
|
||||
|
||||
initialWindowX = dialog.value.offsetLeft
|
||||
initialWindowY = dialog.value.offsetTop
|
||||
})
|
||||
|
||||
document.addEventListener('mouseup', () => {
|
||||
active = false
|
||||
})
|
||||
|
||||
document.addEventListener('mousemove', (e) => {
|
||||
if (active) {
|
||||
const dx = e.clientX - initialX
|
||||
const dy = e.clientY - initialY
|
||||
|
||||
baseLeft.value = initialWindowX + dx
|
||||
baseTop.value = initialWindowY + dy
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleClear = () => {
|
||||
document.onmouseup = () => {
|
||||
document.onmousemove = null
|
||||
document.onmouseup = null
|
||||
}
|
||||
}
|
||||
|
||||
const rangeMove = (e: MouseEvent, position: string) => {
|
||||
//移动的方向
|
||||
let x: boolean = false
|
||||
let y: boolean = false
|
||||
//移动的位置
|
||||
let xp: boolean = false
|
||||
let yp: boolean = false
|
||||
//移动的正负
|
||||
let xc: boolean = false
|
||||
let yc: boolean = false
|
||||
let disX = e.clientX
|
||||
let disY = e.clientY
|
||||
document.onmousemove = e => {
|
||||
if (position === 'bottom-right') {
|
||||
x = true
|
||||
y = true
|
||||
} else if (position === 'bottom-left') {
|
||||
x = true
|
||||
y = true
|
||||
xp = true
|
||||
xc = true
|
||||
} else if (position === 'top-right') {
|
||||
x = true
|
||||
y = true
|
||||
yp = true
|
||||
yc = true
|
||||
} else if (position === 'top-left') {
|
||||
x = true
|
||||
y = true
|
||||
xp = true
|
||||
xc = true
|
||||
yp = true
|
||||
yc = true
|
||||
}
|
||||
let left = e.clientX - disX
|
||||
let top = e.clientY - disY
|
||||
disX = e.clientX
|
||||
disY = e.clientY
|
||||
if (x) {
|
||||
let calc = left
|
||||
|
||||
if (xc) {
|
||||
calc = -calc
|
||||
}
|
||||
|
||||
if (xp) {
|
||||
baseLeft.value = baseLeft.value - calc
|
||||
}
|
||||
|
||||
const width = baseWidth.value + calc
|
||||
|
||||
baseWidth.value = width <= props.dragRang[0] ? props.dragRang[0] : width
|
||||
}
|
||||
if (y) {
|
||||
let calc = top
|
||||
if (yc) {
|
||||
calc = -calc
|
||||
}
|
||||
|
||||
if (yp) {
|
||||
baseTop.value = baseTop.value - calc
|
||||
}
|
||||
|
||||
const height = baseHeight.value + calc
|
||||
|
||||
baseHeight.value = height <= props.dragRang[1] ? props.dragRang[1] : height
|
||||
|
||||
emits('heightChange', baseHeight.value)
|
||||
}
|
||||
}
|
||||
handleClear()
|
||||
}
|
||||
|
||||
const onClose = () => {
|
||||
console.log('close---1')
|
||||
emits("close")
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
if (dialog.value && header.value) {
|
||||
onDrag()
|
||||
}
|
||||
if (ele) {
|
||||
const data = ele?.getBoundingClientRect()
|
||||
baseLeft.value = (data?.right - baseWidth.value) / 2 || 0
|
||||
baseTop.value = data?.top + 200 || 0
|
||||
}
|
||||
})
|
||||
|
||||
watch(() => props.height, () => {
|
||||
if (props.height > baseHeight.value) {
|
||||
baseHeight.value = props.height
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang='less' scoped>
|
||||
@boxColor: rgb(@primary-color);
|
||||
|
||||
// 弹窗动画
|
||||
.dialog-enter-active,
|
||||
.dialog-leave-active {
|
||||
transition: opacity .5s;
|
||||
}
|
||||
|
||||
.dialog-enter,
|
||||
.dialog-leave-to {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.dialog {
|
||||
position: fixed;
|
||||
z-index: 1000;
|
||||
|
||||
.dialog-sprite {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
z-index: 23456765435;
|
||||
background-color: #ffffff;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #91CAFF;
|
||||
box-shadow: 0 3px 8px 0 rgba(#1677FF, 0.24);
|
||||
|
||||
.header {
|
||||
padding: 5px 15px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #333;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
.dialog-body {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
padding: 24px 20px;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
border-top: 1px solid #f0f0f0;
|
||||
padding: 5px 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.range {
|
||||
position: absolute;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border-radius: 100%;
|
||||
z-index: 23456765436;
|
||||
}
|
||||
|
||||
.bottom-right, .top-left {
|
||||
&:hover {
|
||||
cursor: nwse-resize
|
||||
}
|
||||
}
|
||||
|
||||
.bottom-left, .top-right {
|
||||
&:hover {
|
||||
cursor: nesw-resize
|
||||
}
|
||||
}
|
||||
|
||||
.top-right {
|
||||
top: -6px;
|
||||
right: -6px;
|
||||
}
|
||||
|
||||
.top-left {
|
||||
top: -6px;
|
||||
left: -6px;
|
||||
}
|
||||
|
||||
.bottom-right {
|
||||
bottom: -6px;
|
||||
right: -6px;
|
||||
}
|
||||
|
||||
.bottom-left {
|
||||
bottom: -6px;
|
||||
left: -6px;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1 +0,0 @@
|
||||
export { default as DragModal } from './DragModal.vue'
|
@ -1,13 +0,0 @@
|
||||
import FlvPlugin from 'xgplayer-flv'
|
||||
import HlsPlugin from "xgplayer-hls"
|
||||
export const settingEnum = {
|
||||
mp4: {
|
||||
isLive: false,
|
||||
},
|
||||
flv: {
|
||||
plugins: [FlvPlugin],
|
||||
},
|
||||
m3u8: {
|
||||
plugins: [HlsPlugin],
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
import { useRequest } from './useRequest'
|
||||
import { queryLevel } from '@/api/rule-engine/config';
|
||||
|
||||
type LevelListType = Array<{ label: number, value: string}>
|
||||
export const useAlarmLevel = () => {
|
||||
const levelMap = ref({})
|
||||
const levelList = ref<LevelListType>([])
|
||||
|
||||
useRequest(queryLevel, {
|
||||
onSuccess(res) {
|
||||
if (res.result?.levels?.length) {
|
||||
const arr: LevelListType = []
|
||||
levelMap.value = res.result.levels.reduce((prev: Record<string, string>, next: Record<string, any>) => {
|
||||
prev[next.level] = next.title
|
||||
arr.push({
|
||||
label: next.title,
|
||||
value: next.level
|
||||
})
|
||||
return prev
|
||||
}, {})
|
||||
levelList.value = arr
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return {
|
||||
levelMap,
|
||||
levelList
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import zh from './locale/zh.json'
|
||||
import en from './locale/en.json'
|
||||
|
||||
const messages = {
|
||||
en,
|
||||
zh,
|
||||
}
|
||||
const language = (navigator.language || 'en').toLocaleLowerCase() // 这是获取浏览器的语言
|
||||
const i18n = createI18n({
|
||||
locale: localStorage.getItem('lang') || language.split('-')[0] || 'en', // 首先从缓存里拿,没有的话就用浏览器语言,
|
||||
fallbackLocale: 'en', // 设置备用语言
|
||||
messages,
|
||||
legacy: false
|
||||
})
|
||||
|
||||
export default i18n
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"components.StepCard.926510-0": "暂无权限,请联系管理员"
|
||||
},
|
||||
"en": {
|
||||
"components.StepCard.926510-0": "No permission at the moment, please contact the administrator"
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"DeviceHome.index.926510-0": "物联网引导",
|
||||
"DeviceHome.index.926510-1": "设备接入推荐步骤",
|
||||
"DeviceHome.index.926510-2": "不同的设备因为通信协议的不同,存在接入步骤的差异",
|
||||
"DeviceHome.index.926510-3": "创建产品",
|
||||
"DeviceHome.index.926510-4": "创建设备",
|
||||
"DeviceHome.index.926510-5": "规则引擎",
|
||||
"DeviceHome.index.926510-6": "产品是设备的集合,通常指一组具有相同功能的设备。物联设备必须通过产品进行接入方式配置。",
|
||||
"DeviceHome.index.926510-7": "配置产品接入方式",
|
||||
"DeviceHome.index.926510-8": "通过产品对同一类型的设备进行统一的接入方式配置。请参照设备铭牌说明选择匹配的接入方式。",
|
||||
"DeviceHome.index.926510-9": "添加测试设备",
|
||||
"DeviceHome.index.926510-10": "添加单个设备,用于验证产品模型是否配置正确。",
|
||||
"DeviceHome.index.926510-11": "功能调试",
|
||||
"DeviceHome.index.926510-12": "对添加的测试设备进行功能调试,验证能否连接到平台,设备功能是否配置正确。",
|
||||
"DeviceHome.index.926510-13": "批量添加设备",
|
||||
"DeviceHome.index.926510-14": "批量添加同一产品下的设备"
|
||||
},
|
||||
"en": {
|
||||
"DeviceHome.index.926510-0": "IoT guidance",
|
||||
"DeviceHome.index.926510-1": "Recommended steps for device access",
|
||||
"DeviceHome.index.926510-2": "Different devices may have different access steps due to differences in communication protocols",
|
||||
"DeviceHome.index.926510-3": "Create product",
|
||||
"DeviceHome.index.926510-4": "Create device",
|
||||
"DeviceHome.index.926510-5": "Rule engine",
|
||||
"DeviceHome.index.926510-6": "A product is a collection of devices, usually referring to a group of devices with the same functionality. IoT devices must be configured through product access methods.",
|
||||
"DeviceHome.index.926510-7": "Configure product access methods",
|
||||
"DeviceHome.index.926510-8": "Configure unified access methods for devices of the same type through products. Please refer to the instructions on the device nameplate to select the matching access method.",
|
||||
"DeviceHome.index.926510-9": "Add testing equipment",
|
||||
"DeviceHome.index.926510-10": "Add a single device to verify if the product model is configured correctly.",
|
||||
"DeviceHome.index.926510-11": "Functional debugging",
|
||||
"DeviceHome.index.926510-12": "Perform functional debugging on the added testing equipment to verify if it can connect to the platform and if the device's functions are configured correctly.",
|
||||
"DeviceHome.index.926510-13": "Batch Add Devices",
|
||||
"DeviceHome.index.926510-14": "Batch adding devices under the same product"
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"InitHome.index.926510-0": "请选择首页视图",
|
||||
"InitHome.index.926510-1": "保存修改"
|
||||
},
|
||||
"en": {
|
||||
"InitHome.index.926510-0": "Please select the homepage view",
|
||||
"InitHome.index.926510-1": "Save modifications"
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"components.PlatformPicCard.926510-0": "平台架构图"
|
||||
},
|
||||
"en": {
|
||||
"components.PlatformPicCard.926510-0": "Platform architecture diagram"
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"home.index.926510-0": "基本信息"
|
||||
},
|
||||
"en": {
|
||||
"home.index.926510-0": "essential information"
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"components.DeviceCountCard.926510-0": "设备统计",
|
||||
"components.DeviceCountCard.926510-1": "详情",
|
||||
"components.DeviceCountCard.926510-2": "产品数量",
|
||||
"components.DeviceCountCard.926510-3": "设备数量"
|
||||
},
|
||||
"en": {
|
||||
"components.DeviceCountCard.926510-0": "Equipment statistics",
|
||||
"components.DeviceCountCard.926510-1": "details",
|
||||
"components.DeviceCountCard.926510-2": "Product quantity",
|
||||
"components.DeviceCountCard.926510-3": "Number of devices"
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"dialogs.ProductChooseDialog.926510-0": "选择产品",
|
||||
"dialogs.ProductChooseDialog.926510-1": "产品",
|
||||
"dialogs.ProductChooseDialog.926510-2": "请选择产品"
|
||||
},
|
||||
"en": {
|
||||
"dialogs.ProductChooseDialog.926510-0": "Select product",
|
||||
"dialogs.ProductChooseDialog.926510-1": "product",
|
||||
"dialogs.ProductChooseDialog.926510-2": "Please select a product"
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"DevOpsHome.index.926510-0": "运维引导",
|
||||
"DevOpsHome.index.926510-1": "运维管理推荐步骤",
|
||||
"DevOpsHome.index.926510-2": "请根据业务需要对下述步骤进行选择性操作。",
|
||||
"DevOpsHome.index.926510-3": "设备接入配置",
|
||||
"DevOpsHome.index.926510-4": "日志排查",
|
||||
"DevOpsHome.index.926510-5": "实时监控",
|
||||
"DevOpsHome.index.926510-6": "协议管理",
|
||||
"DevOpsHome.index.926510-7": "根据业务需求自定义开发对应的产品(设备模型)接入协议,并上传到平台。",
|
||||
"DevOpsHome.index.926510-8": "证书管理",
|
||||
"DevOpsHome.index.926510-9": "统一维护平台内的证书,用于数据通信加密。",
|
||||
"DevOpsHome.index.926510-10": "网络组件",
|
||||
"DevOpsHome.index.926510-11": "根据不同的传输类型配置平台底层网络组件相关参数。",
|
||||
"DevOpsHome.index.926510-12": "设备接入网关",
|
||||
"DevOpsHome.index.926510-13": "根据不同的传输类型,关联消息协议,配置设备接入网关相关参数。",
|
||||
"DevOpsHome.index.926510-14": "日志管理",
|
||||
"DevOpsHome.index.926510-15": "监控系统日志,及时处理系统异常。"
|
||||
},
|
||||
"en": {
|
||||
"DevOpsHome.index.926510-0": "Operations guidance",
|
||||
"DevOpsHome.index.926510-1": "Recommended steps for operation and maintenance management",
|
||||
"DevOpsHome.index.926510-2": "Please perform selective operations on the following steps according to business needs.",
|
||||
"DevOpsHome.index.926510-3": "Device access configuration",
|
||||
"DevOpsHome.index.926510-4": "Log troubleshooting",
|
||||
"DevOpsHome.index.926510-5": "Real time monitoring",
|
||||
"DevOpsHome.index.926510-6": "Protocol management",
|
||||
"DevOpsHome.index.926510-7": "Customize and develop corresponding product (device model) access protocols according to business needs, and upload them to the platform.",
|
||||
"DevOpsHome.index.926510-8": "Certificate Management",
|
||||
"DevOpsHome.index.926510-9": "Unified maintenance of certificates within the platform for data communication encryption.",
|
||||
"DevOpsHome.index.926510-10": "Network components",
|
||||
"DevOpsHome.index.926510-11": "Configure platform underlying network component related parameters based on different transmission types.",
|
||||
"DevOpsHome.index.926510-12": "Device access gateway",
|
||||
"DevOpsHome.index.926510-13": "According to different transmission types, associate message protocols, and configure device access gateway related parameters.",
|
||||
"DevOpsHome.index.926510-14": "Log management",
|
||||
"DevOpsHome.index.926510-15": "Monitor system logs and promptly handle system exceptions."
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"dialogs.DeviceChooseDialog.926510-0": "选择设备",
|
||||
"dialogs.DeviceChooseDialog.926510-1": "请选择设备",
|
||||
"dialogs.DeviceChooseDialog.926510-2": "设备ID",
|
||||
"dialogs.DeviceChooseDialog.926510-3": "设备名称",
|
||||
"dialogs.DeviceChooseDialog.926510-4": "产品名称",
|
||||
"dialogs.DeviceChooseDialog.926510-5": "注册时间",
|
||||
"dialogs.DeviceChooseDialog.926510-6": "状态",
|
||||
"dialogs.DeviceChooseDialog.926510-7": "在线",
|
||||
"dialogs.DeviceChooseDialog.926510-8": "离线"
|
||||
},
|
||||
"en": {
|
||||
"dialogs.DeviceChooseDialog.926510-0": "Select device",
|
||||
"dialogs.DeviceChooseDialog.926510-1": "Please select a device",
|
||||
"dialogs.DeviceChooseDialog.926510-2": "Device ID",
|
||||
"dialogs.DeviceChooseDialog.926510-3": "Device Name",
|
||||
"dialogs.DeviceChooseDialog.926510-4": "Product Name",
|
||||
"dialogs.DeviceChooseDialog.926510-5": "Registration time",
|
||||
"dialogs.DeviceChooseDialog.926510-6": "state",
|
||||
"dialogs.DeviceChooseDialog.926510-7": "on-line",
|
||||
"dialogs.DeviceChooseDialog.926510-8": "off-line"
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"components.BootCard.926510-0": "暂无权限,请联系管理员"
|
||||
},
|
||||
"en": {
|
||||
"components.BootCard.926510-0": "No permission at the moment, please contact the administrator"
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"components.BasicCountCard.926510-0": "基础统计",
|
||||
"components.BasicCountCard.926510-1": "详情",
|
||||
"components.BasicCountCard.926510-2": "CPU使用率",
|
||||
"components.BasicCountCard.926510-3": "JVM内存"
|
||||
},
|
||||
"en": {
|
||||
"components.BasicCountCard.926510-0": "Basic statistics",
|
||||
"components.BasicCountCard.926510-1": "details",
|
||||
"components.BasicCountCard.926510-2": "CPU usage rate",
|
||||
"components.BasicCountCard.926510-3": "JVM memory"
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"components.BootCardSmall.926510-0": "暂无权限,请联系管理员"
|
||||
},
|
||||
"en": {
|
||||
"components.BootCardSmall.926510-0": "No permission at the moment, please contact the administrator"
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
{
|
||||
"zh": {
|
||||
"ComprehensiveHome.index.926510-0": "物联网引导",
|
||||
"ComprehensiveHome.index.926510-1": "运维引导",
|
||||
"ComprehensiveHome.index.926510-2": "设备接入推荐步骤",
|
||||
"ComprehensiveHome.index.926510-3": "不同的设备因为通信协议的不同,存在接入步骤的差异",
|
||||
"ComprehensiveHome.index.926510-4": "运维管理推荐步骤",
|
||||
"ComprehensiveHome.index.926510-5": "请根据业务需要对下述步骤进行选择性操作。",
|
||||
"ComprehensiveHome.index.926510-6": "创建产品",
|
||||
"ComprehensiveHome.index.926510-7": "创建设备",
|
||||
"ComprehensiveHome.index.926510-8": "规则引擎",
|
||||
"ComprehensiveHome.index.926510-9": "产品是设备的集合,通常指一组具有相同功能的设备。物联设备必须通过产品进行接入方式配置。",
|
||||
"ComprehensiveHome.index.926510-10": "配置产品接入方式",
|
||||
"ComprehensiveHome.index.926510-11": "通过产品对同一类型的设备进行统一的接入方式配置。请参照设备铭牌说明选择匹配的接入方式。",
|
||||
"ComprehensiveHome.index.926510-12": "添加测试设备",
|
||||
"ComprehensiveHome.index.926510-13": "添加单个设备,用于验证产品模型是否配置正确。",
|
||||
"ComprehensiveHome.index.926510-14": "功能调试",
|
||||
"ComprehensiveHome.index.926510-15": "对添加的测试设备进行功能调试,验证能否连接到平台,设备功能是否配置正确。",
|
||||
"ComprehensiveHome.index.926510-16": "批量添加设备",
|
||||
"ComprehensiveHome.index.926510-17": "批量添加同一产品下的设备",
|
||||
"ComprehensiveHome.index.926510-18": "设备接入配置",
|
||||
"ComprehensiveHome.index.926510-19": "日志排查",
|
||||
"ComprehensiveHome.index.926510-20": "实时监控",
|
||||
"ComprehensiveHome.index.926510-21": "协议管理",
|
||||
"ComprehensiveHome.index.926510-22": "根据业务需求自定义开发对应的产品(设备模型)接入协议,并上传到平台。",
|
||||
"ComprehensiveHome.index.926510-23": "证书管理",
|
||||
"ComprehensiveHome.index.926510-24": "统一维护平台内的证书,用于数据通信加密。",
|
||||
"ComprehensiveHome.index.926510-25": "网络组件",
|
||||
"ComprehensiveHome.index.926510-26": "根据不同的传输类型配置平台底层网络组件相关参数。",
|
||||
"ComprehensiveHome.index.926510-27": "设备接入网关",
|
||||
"ComprehensiveHome.index.926510-28": "根据不同的传输类型,关联消息协议,配置设备接入网关相关参数。",
|
||||
"ComprehensiveHome.index.926510-29": "日志管理",
|
||||
"ComprehensiveHome.index.926510-30": "监控系统日志,及时处理系统异常。"
|
||||
},
|
||||
"en": {
|
||||
"ComprehensiveHome.index.926510-0": "IoT guidance",
|
||||
"ComprehensiveHome.index.926510-1": "Operations guidance",
|
||||
"ComprehensiveHome.index.926510-2": "Recommended steps for device access",
|
||||
"ComprehensiveHome.index.926510-3": "Different devices may have different access steps due to differences in communication protocols",
|
||||
"ComprehensiveHome.index.926510-4": "Recommended steps for operation and maintenance management",
|
||||
"ComprehensiveHome.index.926510-5": "Please perform selective operations on the following steps according to business needs.",
|
||||
"ComprehensiveHome.index.926510-6": "Create product",
|
||||
"ComprehensiveHome.index.926510-7": "Create device",
|
||||
"ComprehensiveHome.index.926510-8": "Rule engine",
|
||||
"ComprehensiveHome.index.926510-9": "A product is a collection of devices, usually referring to a group of devices with the same functionality. IoT devices must be configured through product access methods.",
|
||||
"ComprehensiveHome.index.926510-10": "Configure product access methods",
|
||||
"ComprehensiveHome.index.926510-11": "Configure unified access methods for devices of the same type through products. Please refer to the instructions on the device nameplate to select the matching access method.",
|
||||
"ComprehensiveHome.index.926510-12": "Add testing equipment",
|
||||
"ComprehensiveHome.index.926510-13": "Add a single device to verify if the product model is configured correctly.",
|
||||
"ComprehensiveHome.index.926510-14": "Functional debugging",
|
||||
"ComprehensiveHome.index.926510-15": "Perform functional debugging on the added testing equipment to verify if it can connect to the platform and if the device's functions are configured correctly.",
|
||||
"ComprehensiveHome.index.926510-16": "Batch Add Devices",
|
||||
"ComprehensiveHome.index.926510-17": "Batch adding devices under the same product",
|
||||
"ComprehensiveHome.index.926510-18": "Device access configuration",
|
||||
"ComprehensiveHome.index.926510-19": "Log troubleshooting",
|
||||
"ComprehensiveHome.index.926510-20": "Real time monitoring",
|
||||
"ComprehensiveHome.index.926510-21": "Protocol management",
|
||||
"ComprehensiveHome.index.926510-22": "Customize and develop corresponding product (device model) access protocols according to business needs, and upload them to the platform.",
|
||||
"ComprehensiveHome.index.926510-23": "Certificate Management",
|
||||
"ComprehensiveHome.index.926510-24": "Unified maintenance of certificates within the platform for data communication encryption.",
|
||||
"ComprehensiveHome.index.926510-25": "Network components",
|
||||
"ComprehensiveHome.index.926510-26": "Configure platform underlying network component related parameters based on different transmission types.",
|
||||
"ComprehensiveHome.index.926510-27": "Device access gateway",
|
||||
"ComprehensiveHome.index.926510-28": "According to different transmission types, associate message protocols, and configure device access gateway related parameters.",
|
||||
"ComprehensiveHome.index.926510-29": "Log management",
|
||||
"ComprehensiveHome.index.926510-30": "Monitor system logs and promptly handle system exceptions."
|
||||
}
|
||||
}
|