| | |
| | | </div> |
| | | |
| | | <!-- 左下角倍率信息 --> |
| | | <div class="zoom-info"> |
| | | <el-tag type="success">倍率: {{ zoomRatio.toFixed(1) }}X</el-tag> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <div class="zoom-info"> |
| | | <!-- <el-tag type="success">倍率: {{ zoomRatio.toFixed(1) }}X</el-tag><br> |
| | | <el-tag type="success">距离: {{ betweenDistance.toFixed(1) }}米</el-tag><br> |
| | | <el-tag type="success">P: {{ cameraP }} T: {{ cameraT }} </el-tag> --> |
| | | <el-button type="primary" plain @click="doAction(chooseItem, '悬停')">悬停</el-button></br> |
| | | <el-button type="success" plain @click="doAction(chooseItem, '拍照')">拍照</el-button></br> |
| | | <el-button type="info" plain @click="doAction(chooseItem, '开始录像')">开始录像</el-button></br> |
| | | <el-button type="info" plain @click="doAction(chooseItem, '结束录像')">结束录像</el-button> |
| | | </div> |
| | | |
| | | |
| | | <!-- botton --> |
| | | <div class="cesiumBotton"> |
| | | <div class="cesiumContent"> |
| | | <div class="flyAction"> |
| | | <div class="actionName">{{currentAction ?currentAction.type :'' }}</div> |
| | | <i class="el-icon-delete" /> |
| | | </div> |
| | | <div class="flayDataAll"> |
| | | <div class="flyData"> |
| | | <div v-if="currentAction && (currentAction.type == '悬停')"> |
| | | <div>暂停时间</div> |
| | | <div class="stopContent"> |
| | | <!-- 减按钮 --> |
| | | <el-button size="mini" @click="changeTime(-100)" type="info">-100</el-button> |
| | | <el-button size="mini" @click="changeTime(-10)" type="info">-10</el-button> |
| | | <el-button size="mini" @click="changeTime(-1)" type="info">-1</el-button> |
| | | <!-- 可编辑数字 --> |
| | | <div class="stopNumber"> |
| | | <el-input-number |
| | | v-model="time" |
| | | :min="0" |
| | | :controls="false" |
| | | style="margin: 0 15px; width: 60px;" |
| | | @change="onChange" |
| | | class="custom-input" |
| | | > |
| | | </el-input-number> |
| | | <span style="margin-left: -10px;">s</span> |
| | | </div> |
| | | <!-- 加按钮 --> |
| | | <el-button size="mini" @click="changeTime(1)" type="info">+1</el-button> |
| | | <el-button size="mini" @click="changeTime(10)" type="info">+10</el-button> |
| | | <el-button size="mini" @click="changeTime(100)" type="info">+100</el-button> |
| | | </div> |
| | | </div> |
| | | <div v-if="currentAction && (currentAction.type == '拍照')"> |
| | | <div v-if="!isEditingPhoto" class="editable-text"> |
| | | {{ takePhoto }} |
| | | <i class="el-icon-edit" @click.stop="startEditing"/> |
| | | </div> |
| | | <div v-else > |
| | | <div class="editable-container"> |
| | | <input |
| | | v-model="newTakePhoto" |
| | | type="text" |
| | | class="editable-input" |
| | | autofocus |
| | | /> |
| | | </div> |
| | | <button @click.stop="validateInput" class="validate-btn">✔</button> |
| | | <button @click.stop="cancelEditing" class="cancel-btn">✖</button> |
| | | </div> |
| | | </div> |
| | | <div v-if="currentAction && (currentAction.type == '开始录像')"> |
| | | <div v-if="!isEditingVideo" class="editable-text"> |
| | | {{ takeVideo }} |
| | | <i class="el-icon-edit" @click.stop="startEditingVideo"/> |
| | | </div> |
| | | <div v-else > |
| | | <div class="editable-container"> |
| | | <input |
| | | v-model="newTakeVideo" |
| | | type="text" |
| | | class="editable-input" |
| | | autofocus |
| | | /> |
| | | </div> |
| | | <button @click.stop="validateVideoInput" class="validate-btn">✔</button> |
| | | <button @click.stop="cancelVideoEditing" class="cancel-btn">✖</button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="cesiumButtonGroup"> |
| | | <el-button id="groundPoi" @click="addGroundPoi()" type="primary">地面点</el-button> |
| | | <el-input v-model="mergeNumber" placeholder="请输入合并范围" type="number" style="width: 150px;"></el-input> |
| | |
| | | deviceData: { |
| | | type: Object, |
| | | }, |
| | | chooseItem:{ |
| | | type: Object |
| | | } |
| | | }, |
| | | data(){ |
| | | return{ |
| | |
| | | 14: '14X', |
| | | 28: '28X', |
| | | 56: '56X' |
| | | } |
| | | }, |
| | | betweenDistance:0, |
| | | cameraP:0.0, |
| | | cameraT:0.0, |
| | | pointGround: { lon: 0, lat: 0, height: 0 }, |
| | | pointFly: { lon: 0, lat: 0, height: 0 }, |
| | | rowData:null, |
| | | time: 10, |
| | | takePhoto: '111', // 初始数据 |
| | | newTakePhoto: '', // 编辑时的新数据 |
| | | isEditingPhoto: false, // 控制是否处于编辑状态 |
| | | takeVideo: '111', // 初始数据 |
| | | newTakeVideo: '', // 编辑时的新数据 |
| | | isEditingVideo: false, // 控制是否处于编辑状态 |
| | | actionCounter:0, |
| | | currentAction:null |
| | | } |
| | | }, |
| | | mounted(){ |
| | |
| | | creatPin(id, position, font, color, viewer) { |
| | | let pinBuilder = new Cesium.PinBuilder(); |
| | | let addPin = viewer.entities.getById(id); |
| | | console.log(addPin) |
| | | if (addPin == undefined) { |
| | | viewer.entities.add({ |
| | | id: id, |
| | |
| | | //更新键盘事件 |
| | | _this.updateCameraMovement(); |
| | | //当前选择的id |
| | | chooseId = crypto.randomUUID() |
| | | // chooseId = crypto.randomUUID() |
| | | chooseId = _this.genId() |
| | | //创建视锥体 |
| | | let data = { |
| | | "altitude": Cesium.Cartographic.fromCartesian(tagert).height, |
| | | "id": chooseId, |
| | | 'name':`空中点${counter}`, |
| | | "latitude": Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).latitude), |
| | | "longitude": Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).longitude), |
| | | } |
| | | const lookPoint = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | const watchPoint = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).longitude), Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).latitude)) |
| | | const betweenDistanceWatch = Cesium.Cartesian3.distance(lookPoint, watchPoint) |
| | | _this.betweenDistance = betweenDistanceWatch |
| | | console.log(lookPoint) |
| | | console.log(watchPoint) |
| | | // const guanPoint1 = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | console.log(viewerM.entities.getById('groundPoiId0')) |
| | | //塔的距离和观测点的距离 |
| | | console.log(_this.deviceData) |
| | | const point1 = Cesium.Cartesian3.fromDegrees(0, 0, _this.deviceData?.modelHeight || 45); |
| | | _this.pointGround = { |
| | | lon:longitude, |
| | | lat:latitude, |
| | | height:height |
| | | } |
| | | // const point1 = Cesium.Cartesian3.fromDegrees(0, 0, 45); |
| | | const point2 = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).longitude), Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).latitude), Cesium.Cartographic.fromCartesian(tagert).height); |
| | | |
| | | _this.pointFly = { |
| | | lon:Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).longitude), |
| | | lat:Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).latitude), |
| | | height:Cesium.Cartographic.fromCartesian(tagert).height |
| | | } |
| | | _this.createDashedLine() |
| | | _this.createBillboard() |
| | | // 计算距离(单位:米) |
| | | const distanceCalculate = Cesium.Cartesian3.distance(point1, point2) |
| | | data.distance = distanceCalculate |
| | |
| | | setTimeout(() => { |
| | | viewerC.camera.changed.addEventListener(_this.onCameraChange) |
| | | }, 100); |
| | | |
| | | |
| | | //左侧树结构联动 |
| | | _this.dealTree() |
| | | //结束右键监听 |
| | | createPinHandler.destroy(); |
| | | //结束主图联动鹰眼监听 |
| | |
| | | } |
| | | console.log('右键点击监听已停止'); |
| | | }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); // 监听右键点击 |
| | | }, |
| | | createDashedLine() { |
| | | this.lineEntity = viewerM.entities.add({ |
| | | polyline: { |
| | | positions: new Cesium.CallbackProperty(() => { |
| | | return Cesium.Cartesian3.fromDegreesArrayHeights([ |
| | | this.pointGround.lon, this.pointGround.lat, this.pointGround.height, |
| | | this.pointFly.lon, this.pointFly.lat, this.pointFly.height, |
| | | ]); |
| | | }, false), |
| | | width: 3, |
| | | material: new Cesium.PolylineDashMaterialProperty({ |
| | | color: Cesium.Color.RED, |
| | | }), |
| | | }, |
| | | }); |
| | | }, |
| | | createBillboard() { |
| | | // Billboard 中点计算 |
| | | viewerM.entities.add({ |
| | | position: new Cesium.CallbackProperty(() => { |
| | | const midLon = (this.pointGround.lon + this.pointFly.lon) / 2; |
| | | const midLat = (this.pointGround.lat + this.pointFly.lat) / 2; |
| | | const midHeight = (this.pointGround.height + this.pointFly.height) / 2; |
| | | return Cesium.Cartesian3.fromDegrees(midLon, midLat, midHeight); |
| | | }, false), |
| | | label: { |
| | | text: new Cesium.CallbackProperty(() => { |
| | | return `距离: ${this.betweenDistance.toFixed(1)} m\nP: ${this.cameraP}\nT:${this.cameraT}`; |
| | | }, false), |
| | | font: "16px sans-serif", |
| | | fillColor: Cesium.Color.BLACK, |
| | | outlineColor: Cesium.Color.WHITE, |
| | | outlineWidth: 2, |
| | | style: Cesium.LabelStyle.FILL_AND_OUTLINE, |
| | | verticalOrigin: Cesium.VerticalOrigin.BOTTOM, |
| | | horizontalOrigin: Cesium.HorizontalOrigin.CENTER, |
| | | pixelOffset: new Cesium.Cartesian2(0, -20), // 向上偏移 |
| | | showBackground: true, |
| | | backgroundColor: new Cesium.Color(1, 1, 1, 0.7), |
| | | }, |
| | | }); |
| | | }, |
| | | azimuthtwopoi(x1, y1, x2, y2) { |
| | | let result; |
| | |
| | | window.addEventListener("keydown", this.onKeyDown); |
| | | window.addEventListener("keyup", this.onKeyUp); |
| | | }, |
| | | removeKeyboardEvents() { |
| | | removeKeyboaardEvents() { |
| | | window.removeEventListener("keydown", this.onKeyDown); |
| | | window.removeEventListener("keyup", this.onKeyUp); |
| | | }, |
| | |
| | | } |
| | | }, |
| | | onKeyUp(event) { |
| | | console.log() |
| | | //键盘抬起进行更新左侧空中点pin |
| | | //获取右侧相机 |
| | | if(rightKeyMove){ |
| | |
| | | } else { |
| | | groupEntity.position = position; |
| | | } |
| | | //计算两个点距离 |
| | | console.log(viewerM.entities) |
| | | const groupEntityGround = viewerM.entities.getById("groundPoiId"+(counter-1)); |
| | | const groupPosition = groupEntityGround.position.getValue(Cesium.JulianDate.now()); |
| | | if (groupPosition) { |
| | | const cartographic = Cesium.Cartographic.fromCartesian(groupPosition); |
| | | const longitude = Cesium.Math.toDegrees(cartographic.longitude); |
| | | const latitude = Cesium.Math.toDegrees(cartographic.latitude); |
| | | const point1 = Cesium.Cartesian3.fromDegrees(lon, lat); |
| | | const point2 = Cesium.Cartesian3.fromDegrees(longitude, latitude); |
| | | const gure = Cesium.Cartesian3.distance(point1, point2) |
| | | this.betweenDistance = gure |
| | | } |
| | | if(this.rowData) { |
| | | this.pointGround = { |
| | | lon:this.rowData.longitude, |
| | | lat:this.rowData.latitude, |
| | | height:this.rowData.height |
| | | } |
| | | } |
| | | this.pointFly = { |
| | | lon: lon, |
| | | lat: lat, |
| | | height: height |
| | | } |
| | | this.dealTree() |
| | | } |
| | | const key = event.key; |
| | | const lower = key.toLowerCase(); |
| | |
| | | // Fly back to the initial view (home) in 1 second |
| | | viewerC.camera.flyHome(1.0); |
| | | }, |
| | | dealTree(){ |
| | | let allEntities = viewerM.entities.values; // 所有实体对象组成的数组 |
| | | const grouped = {}; |
| | | //所有实体对象组成的数组转换成左侧树需要的格式 |
| | | allEntities.forEach(item => { |
| | | const match = item.id.match(/(groundPoiId|aerialPoiId)(\d+)/); |
| | | if (match) { |
| | | const type = match[1]; // groundPoiId or aerialPoiId |
| | | const index = match[2]; |
| | | if (!grouped[index]) grouped[index] = {}; |
| | | grouped[index][type] = item.position; |
| | | } |
| | | }) |
| | | const result = Object.keys(grouped).map((key, idx) => { |
| | | const group = grouped[key]; |
| | | const positionGround = group.groundPoiId.getValue(Cesium.JulianDate.now()) |
| | | const positionAerialPo = group.aerialPoiId.getValue(Cesium.JulianDate.now()) |
| | | const groundPos = Cesium.Cartographic.fromCartesian(positionGround); |
| | | const aerialPos = Cesium.Cartographic.fromCartesian(positionAerialPo); |
| | | return { |
| | | id: this.genId(), |
| | | label: `地面点${idx}`, |
| | | longitude: Cesium.Math.toDegrees(groundPos.longitude), |
| | | latitude: Cesium.Math.toDegrees(groundPos.latitude), |
| | | height: groundPos.height, |
| | | children: [ |
| | | { |
| | | id: this.genId(), |
| | | label: `空中点${idx}`, |
| | | longitude: Cesium.Math.toDegrees(aerialPos.longitude), |
| | | latitude: Cesium.Math.toDegrees(aerialPos.latitude), |
| | | height: aerialPos.height, |
| | | heading:Cesium.Math.toDegrees(viewerC.camera.heading), |
| | | pitch:Cesium.Math.toDegrees(viewerC.camera.pitch) |
| | | } |
| | | ] |
| | | }; |
| | | }); |
| | | this.$emit('dealTreeData',result) |
| | | }, |
| | | mergePoint(){ |
| | | let allEntities = viewerM.entities.values; // 所有实体对象组成的数组 |
| | | const grouped = {}; |
| | |
| | | // viewer.scene.primitives.add(cameraVideo); |
| | | let pmObj = {}; |
| | | pmObj.id = data.id; |
| | | pmObj.name = data.name; |
| | | pmObj.primitive = cameraVideo; |
| | | viewerM.scene.primitives.add(cameraVideo); |
| | | preVideoScopePrimitiveArrTie.push(pmObj); |
| | |
| | | ',' + |
| | | roll.toFixed(1) + |
| | | '\u00B0'; |
| | | console.log(heading) |
| | | this.cameraP = heading.toFixed(2) |
| | | this.cameraT = pitch.toFixed(2) |
| | | document.getElementById('cammoveResultCon').innerHTML = camResult; |
| | | // 计算距离(单位:米) |
| | | const distanceBetween = Cesium.Cartesian3.distance(point1, point2) |
| | | console.log(preVideoScopePrimitiveArrTie) |
| | | preVideoScopePrimitiveArrTie.map((item)=>{ |
| | | if(item.id == chooseId){ |
| | | let obj = this.updateSZScope(Cesium.Math.toDegrees(position.longitude),Cesium.Math.toDegrees(position.latitude),position.height,heading,pitch,roll,this.zoomRatio,distanceBetween) |
| | |
| | | }, |
| | | onSliderInput(val) { |
| | | this.zoomRatio = val; |
| | | } |
| | | }, |
| | | // 计算 heading(偏航角) |
| | | computeHeading(fromCartesian, toCartesian) { |
| | | const transform = Cesium.Transforms.eastNorthUpToFixedFrame(fromCartesian); |
| | | const direction = Cesium.Cartesian3.subtract( |
| | | toCartesian, |
| | | fromCartesian, |
| | | new Cesium.Cartesian3() |
| | | ); |
| | | const directionLocal = Cesium.Matrix4.multiplyByPointAsVector( |
| | | Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4()), |
| | | direction, |
| | | new Cesium.Cartesian3() |
| | | ); |
| | | Cesium.Cartesian3.normalize(directionLocal, directionLocal); |
| | | return Math.atan2(directionLocal.x, directionLocal.y); |
| | | }, |
| | | |
| | | // 计算 pitch(俯仰角) |
| | | computePitch(fromCartesian, toCartesian) { |
| | | const transform = Cesium.Transforms.eastNorthUpToFixedFrame(fromCartesian); |
| | | const direction = Cesium.Cartesian3.subtract( |
| | | toCartesian, |
| | | fromCartesian, |
| | | new Cesium.Cartesian3() |
| | | ); |
| | | const directionLocal = Cesium.Matrix4.multiplyByPointAsVector( |
| | | Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4()), |
| | | direction, |
| | | new Cesium.Cartesian3() |
| | | ); |
| | | Cesium.Cartesian3.normalize(directionLocal, directionLocal); |
| | | return Math.asin(directionLocal.z); // z轴向上 |
| | | }, |
| | | DealVisualCone(data,node){ |
| | | this.rowData = data |
| | | console.log(data) |
| | | this.pointGround = { |
| | | lon:data.children[0].longitude, |
| | | lat:data.children[0].latitude, |
| | | height:data.children[0].height |
| | | } |
| | | this.pointFly = { |
| | | lon:data.longitude, |
| | | lat:data.latitude, |
| | | height:data.height |
| | | } |
| | | if(data.children && data.children?.length > 0) { |
| | | preVideoScopePrimitiveArrTie.map((item)=>{ |
| | | if(item.name != data.children[0].label){ |
| | | item.primitive.show = false |
| | | }else{ |
| | | item.primitive.show = true |
| | | } |
| | | }) |
| | | }else { |
| | | preVideoScopePrimitiveArrTie.map((item)=>{ |
| | | if(item.name != data.label){ |
| | | item.primitive.show = false |
| | | }else { |
| | | item.primitive.show = true |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | editAction(action){ |
| | | // 点击左侧小图标,右侧切换到该 action |
| | | this.currentAction = action; |
| | | console.log(this.currentAction) |
| | | if(action.type == '悬停') { |
| | | this.time = action.extra.value |
| | | } else if(action.type == '拍照'){ |
| | | this.newTakePhoto = action.extra.value |
| | | }else if(action.type == '开始录像'){ |
| | | this.newTakeVideo = action.extra.value |
| | | }else if(action.type == '结束录像'){ |
| | | } |
| | | }, |
| | | changeTime(val) { |
| | | this.time += val; |
| | | if (this.time < 0) this.time = 0; // 最小值限制 |
| | | this.currentAction.extra.value = this.time |
| | | console.log(this.currentAction) |
| | | }, |
| | | onChange(value) { |
| | | if (value < 0) this.time = 0; |
| | | }, |
| | | startEditing() { |
| | | this.newTakePhoto = this.takePhoto; // 进入编辑时,保存当前的值 |
| | | this.isEditingPhoto = true; |
| | | window.removeEventListener("keydown", this.onKeyDown); |
| | | window.removeEventListener("keyup", this.onKeyUp); |
| | | }, |
| | | validateInput() { |
| | | console.log(this.newTakePhoto) |
| | | this.takePhoto = this.newTakePhoto; // 点击对号时,更新数据 |
| | | this.isEditingPhoto = false; // 结束编辑 |
| | | this.currentAction.extra.value = this.takePhoto |
| | | }, |
| | | cancelEditing() { |
| | | this.newTakePhoto = this.takePhoto; // 点击取消时,恢复原数据 |
| | | this.isEditingPhoto = false; // 结束编辑 |
| | | }, |
| | | startEditingVideo() { |
| | | this.newTakeVideo = this.takeVideo; // 进入编辑时,保存当前的值 |
| | | this.isEditingVideo = true; |
| | | }, |
| | | validateVideoInput() { |
| | | this.takeVideo = this.newTakeVideo; // 点击对号时,更新数据 |
| | | this.isEditingVideo = false; // 结束编辑 |
| | | this.currentAction.extra.value = this.takeVideo |
| | | }, |
| | | cancelVideoEditing() { |
| | | this.newTakeVideo = this.takeVideo; // 点击取消时,恢复原数据 |
| | | this.isEditingVideo = false; // 结束编辑 |
| | | }, |
| | | doAction(point, type){ |
| | | this.actionCounter++; |
| | | let action = { |
| | | id: this.actionCounter, |
| | | type, |
| | | extra: {} |
| | | }; |
| | | if(type == '悬停') { |
| | | action.extra.value = this.time |
| | | } else if(type == '拍照'){ |
| | | action.extra.value = this.newTakePhoto |
| | | }else if(type == '开始录像'){ |
| | | action.extra.value = this.newTakeVideo |
| | | }else if(type == '结束录像'){ |
| | | action.extra.value = 'stopVideo' |
| | | } |
| | | console.log(action) |
| | | point.actions.push(action); |
| | | console.log(point) |
| | | this.$emit('dealAction',point) |
| | | this.time = 10 |
| | | this.newTakePhoto = '111' |
| | | this.newTakeVideo = '111' |
| | | this.takeVideo = '111' |
| | | this.takePhoto = '111' |
| | | // 切换到右侧 |
| | | this.currentAction = action; |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | |
| | | bottom: 30px; |
| | | margin: 0; |
| | | } |
| | | .cesiumContent { |
| | | position: absolute; |
| | | width: 100%; |
| | | height: calc(50% + 5px); |
| | | top:-5px; |
| | | |
| | | } |
| | | .stopContent { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .stopContent .el-button--mini { |
| | | padding: 4px 9px; |
| | | } |
| | | .stopNumber { |
| | | flex: 1; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin: 0 4px; |
| | | display: flex |
| | | } |
| | | .stopNumber .el-input .el-input--medium .el-input--medium .el-input__inner { |
| | | height: 28px!important; |
| | | line-height: 28px!important; |
| | | |
| | | } |
| | | .flyAction{ |
| | | height: 55px; |
| | | line-height: 55px; |
| | | background-color: #232323; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | border-bottom: 1px solid #ddd; |
| | | } |
| | | .actionName { |
| | | margin-left: 20px; |
| | | font-size: 14px; |
| | | color: white; |
| | | } |
| | | .flyAction i { |
| | | font-size: 18px; |
| | | line-height: 55px; |
| | | margin-right: 20px; |
| | | } |
| | | .flayDataAll { |
| | | background-color:#232323; |
| | | height: calc(100% - 55px); |
| | | width: 100%; |
| | | } |
| | | .flyData{ |
| | | width: calc(100% - 32px); |
| | | height: calc(100% - 55px); |
| | | margin: auto; |
| | | color: white; |
| | | } |
| | | .cesiumButtonGroup{ |
| | | position: absolute; |
| | | bottom: 0; |
| | |
| | | } |
| | | .moveResult{position:absolute;z-index:2;background-color:rgba(47,53,60,1);padding:0 5px;right:50%;bottom:30px; |
| | | border:1px solid rgba(255,255,255,.1);box-sizing:content-box;width:220px;height:30px;font-size:14px;text-align:center} |
| | | .cammoveResult{position:absolute;z-index:2;background-color:rgba(47,53,60,1);padding:0 5px;right:calc(50% - 40px);bottom:30px; |
| | | .cammoveResult{position:absolute;z-index:2;background-color:rgba(47,53,60,1);padding:0 5px;right:calc(50% - 140px);bottom:35px; |
| | | border:1px solid rgba(255,255,255,.1);box-sizing:content-box;width:400px;height:30px;font-size:14px;text-align:center} |
| | | .moveResultCon{margin-top:4px} |
| | | .cammoveResultCon{margin-top:4px;color: white;} |
| | |
| | | font-family: sans-serif; |
| | | margin-top: 55px; |
| | | } |
| | | |
| | | .el-icon-delete { |
| | | cursor: pointer; /* 添加鼠标悬停时的小手效果 */ |
| | | } |
| | | .arrow-row{ |
| | | display: flex; |
| | | justify-content: center; |
| | |
| | | /* 左下角倍率标签 */ |
| | | .zoom-info { |
| | | position: absolute; |
| | | bottom: 20px; |
| | | left: 20px; |
| | | bottom: 35px; |
| | | left: 340px; |
| | | } |
| | | |
| | | </style> |
| | |
| | | .el-slider.is-vertical .el-slider__marks-text{ |
| | | width: 30px!important; |
| | | } |
| | | </style> |
| | | <style> |
| | | .custom-input .el-input__inner { |
| | | height: 28px; |
| | | line-height:28px; |
| | | } |
| | | </style> |
| | | <style scoped> |
| | | .editable-text { |
| | | display: flex; |
| | | align-items: center; |
| | | cursor: pointer; |
| | | font-size: 16px; |
| | | color: #fff; |
| | | background-color: #333; |
| | | padding: 8px; |
| | | border-radius: 5px; |
| | | } |
| | | .editable-text .el-icon-edit { |
| | | position: absolute; |
| | | right: 30px; |
| | | } |
| | | .edit-icon { |
| | | margin-left: 10px; |
| | | font-size: 20px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .editable-container { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .editable-input { |
| | | font-size: 16px; |
| | | padding: 5px; |
| | | border: 1px solid #ccc; |
| | | margin-right: 5px; |
| | | border-radius: 5px; |
| | | } |
| | | |
| | | .validate-btn, .cancel-btn { |
| | | background-color: transparent; |
| | | border: none; |
| | | color: #fff; |
| | | font-size: 20px; |
| | | cursor: pointer; |
| | | margin-left: 5px; |
| | | } |
| | | |
| | | .validate-btn { |
| | | color: green; |
| | | } |
| | | |
| | | .cancel-btn { |
| | | color: red; |
| | | } |
| | | </style> |