DIAMOND
12 months ago
21 changed files with 2368 additions and 2775 deletions
@ -0,0 +1,70 @@ |
|||||
|
/** |
||||
|
* 克隆 |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
|
||||
|
export function cloneModel(modelObject) { |
||||
|
if (modelObject.czmObject.xbsjType === 'Model') { |
||||
|
const modelConfig = { |
||||
|
ref: '', |
||||
|
name: modelObject.name, |
||||
|
czmObject: { |
||||
|
name: modelObject.czmObject.name, |
||||
|
xbsjType: modelObject.czmObject.xbsjType, |
||||
|
url: modelObject.czmObject.url, |
||||
|
// "color": [0.52, 0.6, 0.58, 1],
|
||||
|
minimumPixelSize: modelObject.czmObject.minimumPixelSize, |
||||
|
// maximumScale: 0.02,
|
||||
|
scale: modelObject.czmObject.scale, |
||||
|
xbsjScale: [...modelObject.czmObject.xbsjScale], |
||||
|
xbsjPosition: [...modelObject.czmObject.xbsjPosition], |
||||
|
xbsjRotation: [...modelObject.czmObject.xbsjRotation], |
||||
|
viewDistance: 150, |
||||
|
distanceDisplayCondition: [1.0, 30000.0], |
||||
|
}, |
||||
|
}; |
||||
|
const index = modelObject.parent.children.push(modelConfig); |
||||
|
return index; |
||||
|
// const model = new window.XE.Obj.Model(window.$earth)
|
||||
|
// model.xbsjFromJSON(modelConfig)
|
||||
|
// const leaf = new window.XE.SceneTree.Leaf(model)
|
||||
|
// window.$earth.sceneTree.root.push(leaf)
|
||||
|
} else { |
||||
|
const objConfig3 = { |
||||
|
ref: '', |
||||
|
name: modelObject.name, |
||||
|
czmObject: { |
||||
|
customProp: modelObject.czmObject.customProp, |
||||
|
name: modelObject.czmObject.name, |
||||
|
xbsjType: modelObject.czmObject.xbsjType, |
||||
|
imageUrl: modelObject.czmObject.imageUrl, |
||||
|
position: [...modelObject.czmObject.position], |
||||
|
scale: modelObject.czmObject.scale, |
||||
|
pinBuilder: { |
||||
|
extText: modelObject.czmObject.pinBuilder.extText, |
||||
|
extTextFont: '30px 楷体', |
||||
|
extTextPixelOffset: [30, -20], |
||||
|
fillColor: [1, 1, 1, 0.9], |
||||
|
outlineColor: [0, 0, 0, 0.9], |
||||
|
}, |
||||
|
far: 1073741824, |
||||
|
}, |
||||
|
}; |
||||
|
const index = modelObject.parent.children.push(objConfig3); |
||||
|
return index; |
||||
|
} |
||||
|
|
||||
|
// return model
|
||||
|
} |
||||
|
|
||||
|
export function cloneShamNode(oldRef, id, title) { |
||||
|
const shamNode = window.$earth.sceneTree.$refs['node_' + oldRef]; |
||||
|
const newShamNode = { |
||||
|
ref: 'node_' + id, |
||||
|
title: title, |
||||
|
expand: false, |
||||
|
children: [], |
||||
|
}; |
||||
|
// that.currentModel = response.result
|
||||
|
shamNode.parent.children.push(newShamNode); |
||||
|
} |
@ -0,0 +1,43 @@ |
|||||
|
/** |
||||
|
* 加载地图实时资源(无人机、车辆、人员、巡逻路线等) |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
import getAllModelInfo from '@/utils/earthMap/getAllModelInfo'; |
||||
|
import getPatrolRouteInfo from '@/utils/earthMap/getPatrolRouteInfo'; |
||||
|
export default async function createRealTimeObj(earthUI = null) { |
||||
|
let models = { |
||||
|
expand: true, |
||||
|
title: '地图实况', |
||||
|
children: [ |
||||
|
{ |
||||
|
expand: false, |
||||
|
title: '巡逻路线', |
||||
|
children: [], |
||||
|
}, |
||||
|
{ |
||||
|
expand: false, |
||||
|
title: '执勤巡逻', |
||||
|
children: [], |
||||
|
}, |
||||
|
{ |
||||
|
expand: false, |
||||
|
title: '预警/报警', |
||||
|
children: [], |
||||
|
}, |
||||
|
{ |
||||
|
expand: false, |
||||
|
title: 'AIS', |
||||
|
children: [], |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
try { |
||||
|
await getAllModelInfo(models); |
||||
|
await getPatrolRouteInfo(models); |
||||
|
//添加对象到场景树
|
||||
|
// window.$earth.sceneTree.root.children.push(models);
|
||||
|
window.$earth.sceneTree.root.children.splice(1, 0, models); |
||||
|
} catch (e) { |
||||
|
console.log(e); |
||||
|
} |
||||
|
} |
@ -0,0 +1,220 @@ |
|||||
|
/** |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
import { defHttp } from '/@/utils/http/axios'; |
||||
|
import { useUserStore } from '/@/store/modules/user'; |
||||
|
import { useEarthMapStore } from '/@/store/modules/earthMap'; |
||||
|
import { earthMapUrl } from '@/api/earth/earthMap' |
||||
|
import earthUtils from '@/utils/earthMap/earth'; |
||||
|
|
||||
|
let userStore = useUserStore(); |
||||
|
let store = useEarthMapStore(); |
||||
|
export default function getAllModelInfo(models) { |
||||
|
return new Promise((resolve, reject) => { |
||||
|
//模型位置
|
||||
|
|
||||
|
defHttp.get({ url: earthMapUrl.queryAllModelInfo }, { isTransformResponse: false }).then(async (res) => { |
||||
|
if (res.success) { |
||||
|
res.result.forEach((data, index) => { |
||||
|
let childrenConfig: any = {}, |
||||
|
objConfig: any = {}, |
||||
|
pathConfig: any = {}, |
||||
|
viewshedConfig: any = {}, |
||||
|
pinConfig: any = {}; |
||||
|
let positions: any = [], |
||||
|
rotations: any = []; |
||||
|
switch (data.modelType) { |
||||
|
case 1: //无人机
|
||||
|
childrenConfig = { |
||||
|
expand: false, |
||||
|
title: '无人机_' + (index + 1) + '号', |
||||
|
children: [], |
||||
|
}; |
||||
|
objConfig = { |
||||
|
ref: data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
name: '无人机', |
||||
|
xbsjType: 'Model', |
||||
|
url: window._CONFIG['staticDomainURL'] + '/uav.gltf', |
||||
|
minimumPixelSize: 1000, |
||||
|
maximumScale: 20, |
||||
|
xbsjPosition: earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height), |
||||
|
distanceDisplayCondition: [10.0, 25000.0], |
||||
|
}, |
||||
|
}; |
||||
|
childrenConfig.children.push(objConfig); |
||||
|
// 加载视域
|
||||
|
viewshedConfig = { |
||||
|
ref: 'viewshed_' + data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
xbsjType: 'Viewshed', |
||||
|
name: '视域', |
||||
|
position: earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height), |
||||
|
rotation: earthUtils.degreeToRadianInLngLatHeight(data.yaw, data.pitch, data.roll), |
||||
|
near: 1.0, |
||||
|
far: 1500, |
||||
|
enabled: false, |
||||
|
show: false, |
||||
|
}, |
||||
|
}; |
||||
|
childrenConfig.children.push(viewshedConfig); |
||||
|
//加载历史轨迹
|
||||
|
data.msModelTrajectoryList.forEach((data, index) => { |
||||
|
positions.push(earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height)); |
||||
|
rotations.push(earthUtils.degreeToRadianInLngLatHeight(data.yaw, data.pitch, data.roll)); |
||||
|
}); |
||||
|
pathConfig = { |
||||
|
ref: 'path_' + data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
xbsjType: 'Path', |
||||
|
name: '轨迹', |
||||
|
positions: positions, |
||||
|
rotations: rotations, |
||||
|
enabled: false, |
||||
|
show: true, |
||||
|
loop: false, |
||||
|
showDirection: false, |
||||
|
playing: true, |
||||
|
loopPlay: true, |
||||
|
alwaysAlongThePath: true, |
||||
|
currentSpeed: 30, |
||||
|
}, |
||||
|
}; |
||||
|
childrenConfig.children.push(pathConfig); |
||||
|
/* // 显示当前坐标 |
||||
|
pinConfig = { |
||||
|
"ref": "pin_" + data.eventSerialNum, |
||||
|
"czmObject": { |
||||
|
"xbsjType": "Pin", |
||||
|
"name": "当前位置", |
||||
|
"position": earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height), |
||||
|
"evalString": "const width = 430;\nconst height = 70;\nfunction createLabelCanvas(p) {\n if (p._labelDiv) {\n p._earth.czm.viewer.container.removeChild(p._labelDiv);\n p._labelDiv = undefined;\n }\n const labelDiv = document.createElement('div');\n labelDiv.style = 'width:'+width+'px;height: '+height+'px;position: absolute; pointer-events: none;'\n\n p._earth.czm.viewer.container.appendChild(labelDiv);\n p._labelDiv = labelDiv;\n\n var dis = XE.MVVM.watch(() => {\n labelDiv.style.display = p.enabled ? 'block' : 'none';\n });\n\n p.disposers.push(() => {\n if (p._labelDiv) {\n p._earth.czm.viewer.container.removeChild(p._labelDiv);\n p._labelDiv = undefined;\n }\n dis();\n });\n\n const labelCanvas = document.createElement('canvas');\n labelCanvas.style = 'width: 100%;height: 100%;';\n\n labelCanvas.width = width;\n labelCanvas.height = height;\n labelDiv.appendChild(labelCanvas);\n return labelCanvas;\n}\n\nfunction createDrawFunc(p) {\n const labelCanvas = createLabelCanvas(p);\n const ctx = labelCanvas.getContext('2d');\n\n function draw(w) {\n ctx.clearRect(0, 0, width, height);\n\n ctx.save();\n ctx.lineWidth = 2;\n ctx.strokeStyle = 'rgb(31, 255,255)';\n ctx.beginPath();\n ctx.moveTo(width, height);\n ctx.lineTo(width-height, 22);\n ctx.lineTo(0, 22);\n ctx.stroke();\n ctx.restore();\n ctx.font = \"15px console\"; \n ctx.fillStyle = 'rgb(255, 255, 0)';\n ctx.fillText('" + |
||||
|
"经度:" + data.lon + "/" + "纬度:" + data.lat + "/" + "高度:" + data.height + "', 0, 20);\n ctx.restore();\n }\n\n p._dDraw = draw;\n}\n\ncreateDrawFunc(p);\n\nlet d = 0;\nlet c = 0;\np._dDraw(c);\nconst preUpdateListener = p._earth.czm.scene.preUpdate.addEventListener(() => {\n if (d !== c) {\n c += (d - c) * 0.1;\n if (Math.abs(c - d) < 0.1) {\n c = d;\n }\n p._dDraw(c);\n }\n});\np.disposers.push(() => preUpdateListener && preUpdateListener());\n\nconst container = p._earth.czm.viewer.container;\nconst unwatch = XE.MVVM.watch(() => [...p.winPos], winPos => {\n if (p._labelDiv) {\n p._labelDiv.style.left = (winPos[0] - p._labelDiv.clientWidth) + 'px';\n p._labelDiv.style.bottom = winPos[3]+'px';\n } \n});\np.disposers.push(() => {\n unwatch && unwatch();\n});", |
||||
|
"isDivImage": true, |
||||
|
"pinBuilder": {}, |
||||
|
"far": 25000 |
||||
|
} |
||||
|
}; |
||||
|
childrenConfig.children.push(pinConfig); */ |
||||
|
//加入树
|
||||
|
models.children[1].children.push(childrenConfig); |
||||
|
break; |
||||
|
case 2: //执勤人员
|
||||
|
childrenConfig = { |
||||
|
expand: false, |
||||
|
title: '执勤人员_' + (index + 1) + '号', |
||||
|
children: [], |
||||
|
}; |
||||
|
objConfig = { |
||||
|
ref: data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
xbsjType: 'GroundImage', |
||||
|
name: '执勤人员', |
||||
|
playing: true, |
||||
|
width: 90, |
||||
|
height: 90, |
||||
|
position: earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, 0), |
||||
|
imageUrls: [window._CONFIG['staticDomainURL'] + '/xunluo_point1.png', window._CONFIG['staticDomainURL'] + '/xunluo_point2.png'], |
||||
|
}, |
||||
|
}; |
||||
|
childrenConfig.children.push(objConfig); |
||||
|
//加载历史轨迹
|
||||
|
data.msModelTrajectoryList.forEach((data, index) => { |
||||
|
positions.push(earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height)); |
||||
|
rotations.push(earthUtils.degreeToRadianInLngLatHeight(data.yaw, data.pitch, data.roll)); |
||||
|
}); |
||||
|
pathConfig = { |
||||
|
ref: 'path_' + data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
xbsjType: 'Path', |
||||
|
name: '轨迹', |
||||
|
positions: positions, |
||||
|
rotations: rotations, |
||||
|
enabled: false, |
||||
|
show: true, |
||||
|
loop: false, |
||||
|
showDirection: false, |
||||
|
playing: true, |
||||
|
loopPlay: true, |
||||
|
alwaysAlongThePath: true, |
||||
|
currentSpeed: 30, |
||||
|
}, |
||||
|
}; |
||||
|
childrenConfig.children.push(pathConfig); |
||||
|
//加入树
|
||||
|
models.children[1].children.push(childrenConfig); |
||||
|
break; |
||||
|
case 3: //可疑人员
|
||||
|
childrenConfig = { |
||||
|
expand: false, |
||||
|
title: '可疑人员_' + (index + 1) + '号', |
||||
|
children: [], |
||||
|
}; |
||||
|
objConfig = { |
||||
|
ref: data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
xbsjType: 'GroundImage', |
||||
|
name: '可疑人员', |
||||
|
playing: true, |
||||
|
width: 90, |
||||
|
height: 90, |
||||
|
position: earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, 0), |
||||
|
imageUrls: [window._CONFIG['staticDomainURL'] + '/keyi_point1.png', window._CONFIG['staticDomainURL'] + '/keyi_point2.png'], |
||||
|
}, |
||||
|
}; |
||||
|
childrenConfig.children.push(objConfig); |
||||
|
//加载历史轨迹
|
||||
|
data.msModelTrajectoryList.forEach((data, index) => { |
||||
|
positions.push(earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height)); |
||||
|
rotations.push(earthUtils.degreeToRadianInLngLatHeight(data.yaw, data.pitch, data.roll)); |
||||
|
}); |
||||
|
pathConfig = { |
||||
|
ref: 'path_' + data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
xbsjType: 'Path', |
||||
|
name: '轨迹', |
||||
|
positions: positions, |
||||
|
rotations: rotations, |
||||
|
enabled: false, |
||||
|
show: true, |
||||
|
loop: false, |
||||
|
showDirection: false, |
||||
|
playing: true, |
||||
|
loopPlay: true, |
||||
|
alwaysAlongThePath: true, |
||||
|
currentSpeed: 30, |
||||
|
}, |
||||
|
}; |
||||
|
childrenConfig.children.push(pathConfig); |
||||
|
//加入树
|
||||
|
models.children[2].children.push(childrenConfig); |
||||
|
break; |
||||
|
case 11: //传感器
|
||||
|
objConfig = { |
||||
|
ref: data.eventSerialNum, |
||||
|
czmObject: { |
||||
|
name: data.eventSerialNum, |
||||
|
xbsjType: 'Model', |
||||
|
url: window._CONFIG['staticDomainURL'] + '/zalan.gltf', |
||||
|
minimumPixelSize: 1000, |
||||
|
maximumScale: 0.01, |
||||
|
// xbsjPosition: [window.Cesium.Math.toRadians(data.lon), window.Cesium.Math.toRadians(data.lat), data.height],
|
||||
|
xbsjPosition: earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height), |
||||
|
xbsjRotation: earthUtils.degreeToRadianInLngLatHeight(data.yaw, data.pitch, data.roll), |
||||
|
distanceDisplayCondition: [10.0, 25000.0], |
||||
|
customProp: data.eventSerialNum, |
||||
|
color: [0.08235294117647059, 1, 0, 1], |
||||
|
luminanceAtZenith: 2, |
||||
|
}, |
||||
|
}; |
||||
|
//加入树
|
||||
|
models.children[0].children[0].children.push(objConfig); |
||||
|
break; |
||||
|
default: |
||||
|
} |
||||
|
}); |
||||
|
resolve(models); |
||||
|
} |
||||
|
}); |
||||
|
}); |
||||
|
} |
@ -0,0 +1,165 @@ |
|||||
|
/** |
||||
|
* 加载雷达和微波 |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
import { defHttp } from '/@/utils/http/axios'; |
||||
|
import { addPin } from '@/utils/earthMap/earthObj'; |
||||
|
import { useUserStore } from '/@/store/modules/user'; |
||||
|
import { useEarthMapStore } from '/@/store/modules/earthMap'; |
||||
|
import { earthMapUrl } from '@/api/earth/earthMap' |
||||
|
import hidePng from '@/assets/earthMap/hide.png'; |
||||
|
import { setLabelStatus } from '@/utils/earthMap/setLabelStatus'; |
||||
|
import { nextTick } from 'vue'; |
||||
|
import $ from 'jquery'; |
||||
|
|
||||
|
let userStore = useUserStore(); |
||||
|
let store = useEarthMapStore(); |
||||
|
export default async function getLabelInfo(models, type) { |
||||
|
console.log("加载雷达和微波"); |
||||
|
return new Promise((resolve, reject) => { |
||||
|
//请求地图标志信息
|
||||
|
defHttp.get({ url: earthMapUrl.queryLabelList }, { isTransformResponse: false }).then(async (res) => { |
||||
|
// console.log("请求地图标志信息",res);
|
||||
|
if (res.success) { |
||||
|
const labelItems = await setLabel(res.result, models, type); |
||||
|
resolve(labelItems); |
||||
|
} |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
async function setLabel(res, models, type) { |
||||
|
const args = { pageNo: 1, pageSize: 999 }; |
||||
|
await defHttp |
||||
|
.get( |
||||
|
{ |
||||
|
url: earthMapUrl.queryDeviceInfoList, |
||||
|
params: args, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then((reponse) => { |
||||
|
if (reponse.success) { |
||||
|
// console.log("queryDeviceInfoList",reponse);
|
||||
|
const hostDeviceList = reponse.result.records; |
||||
|
for (const hostDevice of hostDeviceList) { |
||||
|
store.hostDeviceMapById.set(hostDevice.id, hostDevice); |
||||
|
} |
||||
|
return store.hostDeviceMapById; |
||||
|
} else { |
||||
|
console.error('获取主机信息错误', reponse); |
||||
|
} |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
throw '获取主机信息错误'; |
||||
|
}); |
||||
|
//根据经纬度算出该点地形高度
|
||||
|
let posArr: any = [], |
||||
|
updatedPositions: any = []; |
||||
|
res.forEach((data, index) => { |
||||
|
updatedPositions.push(window.Cesium.Cartographic.fromDegrees(data.mapLabel.labelLon, data.mapLabel.labelLat, data.mapLabel.labelHeight)); |
||||
|
}); |
||||
|
const labelItems: any = []; |
||||
|
//设置标志
|
||||
|
res.forEach((data, index) => { |
||||
|
const item: any = data.mapLabel; |
||||
|
labelItems.push(item.id); |
||||
|
const objConfig3 = { |
||||
|
ref: item.id, |
||||
|
name: item.lineId, |
||||
|
czmObject: { |
||||
|
customProp: '{"labelAttr":' + item.labelAttr + ',"labelCode":"' + item.labelCode + '","deviceId":"' + data.deviceId + '"}', |
||||
|
name: item.labelName, |
||||
|
xbsjType: 'Pin', |
||||
|
imageUrl: window._CONFIG['staticDomainURL'] + '/' + item.labelImgUrl, |
||||
|
position: [updatedPositions[index].longitude, updatedPositions[index].latitude, Number(item.labelHeight)], |
||||
|
scale: item.labelAttr == 4 ? 1 : 0.7, |
||||
|
pinBuilder: { |
||||
|
extText: item.labelName, |
||||
|
extTextFont: '30px 楷体', |
||||
|
extTextPixelOffset: item.labelAttr == 4 ? [30, -20] : [15, -20], |
||||
|
fillColor: [1, 1, 1, 0.9], |
||||
|
outlineColor: [0, 0, 0, 0.9], |
||||
|
}, |
||||
|
far: 25000, |
||||
|
}, |
||||
|
}; |
||||
|
if (item.labelAttr == 4) { |
||||
|
// console.log("雷达",item);
|
||||
|
store.statusByNodeId.set(item.id, 1); |
||||
|
addLabelNodeToTree(item, models, objConfig3, type); |
||||
|
} else { |
||||
|
// console.log("微波",item);
|
||||
|
store.statusByNodeId.set(item.id, -10); |
||||
|
addLabelNodeToTree(item, models, objConfig3, type); |
||||
|
const device = store.hostDeviceMapById.get(data.deviceId); |
||||
|
if (device) { |
||||
|
//参数3 2为查询状态
|
||||
|
setLabelStatus(device, item.labelCode, item.id, 2); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
return labelItems; |
||||
|
} |
||||
|
|
||||
|
function addLabelNodeToTree(item, models, objConfig3, type) { |
||||
|
//微波
|
||||
|
if (item.labelAttr == 10) { |
||||
|
if (type == 2) { |
||||
|
let childs1 = models.children; |
||||
|
for (const child of childs1) { |
||||
|
if ('node_' + item.lineId == child.ref) { |
||||
|
child.children[2].children.push(objConfig3); |
||||
|
} |
||||
|
} |
||||
|
} else { |
||||
|
const parentNode = store.nodeConfigByRef.get('node_' + item.lineId); |
||||
|
if (!parentNode) { |
||||
|
return; |
||||
|
} |
||||
|
let childs2 = parentNode.children; |
||||
|
childs2[2].children.push(objConfig3); |
||||
|
} |
||||
|
} |
||||
|
//雷达
|
||||
|
else if (item.labelAttr == 4) { |
||||
|
if (type == 2) { |
||||
|
let childs1 = models.children; |
||||
|
for (const child of childs1) { |
||||
|
if ('node_' + item.lineId == child.ref) { |
||||
|
child.children[1].children.push(objConfig3); |
||||
|
} |
||||
|
} |
||||
|
} else { |
||||
|
const parentNode = store.nodeConfigByRef.get('node_' + item.lineId); |
||||
|
if (!parentNode) { |
||||
|
return; |
||||
|
} |
||||
|
let childs2 = parentNode.children; |
||||
|
childs2[1].children.push(objConfig3); |
||||
|
} |
||||
|
} |
||||
|
//雷达(已弃用)
|
||||
|
else if (item.labelAttr == 4) { |
||||
|
console.log('leida'); |
||||
|
|
||||
|
if (type == 2) { |
||||
|
let childs3 = models.children; |
||||
|
for (const child of childs3) { |
||||
|
for (const element of child.children[1].children) { |
||||
|
if ('nodeSecondary_' + item.lineId == element.ref) { |
||||
|
element.children.push(objConfig3); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} else { |
||||
|
const parentNode1 = store.nodeConfigByRef.get('nodeSecondary_' + item.lineId); |
||||
|
// console.log("nodeSecondary_",parentNode1);
|
||||
|
if (!parentNode1) { |
||||
|
return; |
||||
|
} |
||||
|
const childs4 = parentNode1.children; |
||||
|
childs4.push(objConfig3); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
/** |
||||
|
* 执勤巡逻路线 |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
import { defHttp } from '/@/utils/http/axios'; |
||||
|
import { useUserStore } from '/@/store/modules/user'; |
||||
|
import { useEarthMapStore } from '/@/store/modules/earthMap'; |
||||
|
import { earthMapUrl } from '@/api/earth/earthMap' |
||||
|
import earthUtils from '@/utils/earthMap/earth'; |
||||
|
|
||||
|
let userStore = useUserStore(); |
||||
|
let store = useEarthMapStore(); |
||||
|
|
||||
|
export default function getPatrolRouteInfo(models) { |
||||
|
return new Promise((resolve, reject) => { |
||||
|
//执勤巡逻路线
|
||||
|
defHttp.get({ url: earthMapUrl.queryPatrolRouteInfo }, { isTransformResponse: false }).then(async (res) => { |
||||
|
if (res.success) { |
||||
|
res.result.forEach((data, index) => { |
||||
|
//将路线上的点拼成坐标数组
|
||||
|
let positions: any = []; |
||||
|
data.msLineConstList.forEach((data, index) => { |
||||
|
positions.push(earthUtils.degreeToRadianInLngLatHeight(data.lon, data.lat, data.height)); |
||||
|
}); |
||||
|
const objConfig = { |
||||
|
ref: data.lineCode, |
||||
|
czmObject: { |
||||
|
name: data.lineName, |
||||
|
xbsjType: 'Polyline', |
||||
|
width: 2, |
||||
|
material: { |
||||
|
type: 'XbsjODLineMaterial', |
||||
|
XbsjODLineMaterial: { |
||||
|
bgColor: [0.5, 0.5, 0.5, 1], |
||||
|
color: [0, 1, 0.11, 1], |
||||
|
totoalFrameCount: 200, |
||||
|
}, |
||||
|
}, |
||||
|
positions: positions, |
||||
|
}, |
||||
|
}; |
||||
|
models.children[0].children.push(objConfig); |
||||
|
}); |
||||
|
resolve(models); |
||||
|
} |
||||
|
}); |
||||
|
}); |
||||
|
} |
@ -0,0 +1,437 @@ |
|||||
|
/** |
||||
|
* 监听鼠标事件 |
||||
|
* 用于EarthComp.vue |
||||
|
* |
||||
|
*/ |
||||
|
import { nextTick } from 'vue'; |
||||
|
import { defHttp } from '/@/utils/http/axios'; |
||||
|
import $ from 'jquery'; |
||||
|
import { useUserStore } from '/@/store/modules/user'; |
||||
|
import { useEarthMapStore } from '/@/store/modules/earthMap'; |
||||
|
import { earthMapUrl } from '@/api/earth/earthMap' |
||||
|
import { useMessage } from '/@/hooks/web/useMessage'; |
||||
|
import { CircleScan } from '@/utils/earthMap/radarEntity'; |
||||
|
import { radianToDegreeInLngLatHeight } from '@/utils/earthMap/earth'; |
||||
|
import $mitt from '@/utils/earthMap/mitt'; |
||||
|
|
||||
|
let userStore = useUserStore(); |
||||
|
let store = useEarthMapStore(); |
||||
|
const { createMessage } = useMessage(); |
||||
|
|
||||
|
export default function listenMouseHandler(that) { |
||||
|
|
||||
|
const handler = new window.Cesium.ScreenSpaceEventHandler(window.$viewer.scene.canvas); |
||||
|
that._handler = handler; |
||||
|
//取消双击旋转事件
|
||||
|
window.$viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(window.Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); |
||||
|
/* MOUSE事件(有性能问题,慎用!) */ |
||||
|
|
||||
|
/* 鼠标左键事件 */ |
||||
|
{ |
||||
|
handler.setInputAction((click: any) => { |
||||
|
if (typeof that._pin !== 'undefined') { |
||||
|
// 销毁指示线
|
||||
|
that._pin.destroy(); |
||||
|
} |
||||
|
|
||||
|
let pickedFeature = window.$viewer.scene.pick(click.position); |
||||
|
console.log('点击:', pickedFeature); |
||||
|
|
||||
|
if (pickedFeature && pickedFeature.id) { |
||||
|
// 三维模型
|
||||
|
if (pickedFeature.id.xbsjType && pickedFeature.id.xbsjType === 'Model') { |
||||
|
//点击电线杆触发弹窗
|
||||
|
store.cameraData.forEach((data) => { |
||||
|
if (!$.isEmptyObject(data.msCameraSiteList)) { |
||||
|
if (!data.msCameraSiteList) { |
||||
|
return; |
||||
|
} |
||||
|
data.msCameraSiteList.forEach((data) => { |
||||
|
if (pickedFeature.id.customProp === data.id) { |
||||
|
if ($('.cameraModal ul').length > 0) { |
||||
|
$('.cameraModal ul').remove(); |
||||
|
} |
||||
|
$('.cameraModal').append('<ul></ul>'); |
||||
|
if (!data.msCameraSettingList) return; |
||||
|
// 将监控相机列表传入弹窗组件中
|
||||
|
that.cameraList = data.msCameraSettingList; |
||||
|
// 将监控点位置传入弹窗组件中
|
||||
|
that.monitorPosition = pickedFeature.id._primitive.xbsjPosition; |
||||
|
data.msCameraSettingList.forEach((data, index) => { |
||||
|
let camera_img = |
||||
|
data.type == '4' |
||||
|
? window._CONFIG['staticDomainURL'] + '/qiuji.png' |
||||
|
: data.type == '3' |
||||
|
? window._CONFIG['staticDomainURL'] + '/qiangji.png' |
||||
|
: window._CONFIG['staticDomainURL'] + '/qiangji.png'; |
||||
|
let cameraStatus = data.status == '1' ? 'successStatus' : data.status == '2' ? 'offlineStatus' : 'errorStatus'; |
||||
|
let rtspUrl = data.cameraCode; |
||||
|
// 'rtsp://' + data.user + ':' + data.password + '@' + data.ip + window._CONFIG['cameraMain']
|
||||
|
$('.cameraModal ul').append( |
||||
|
'<li><a class="openIframe" id="' + |
||||
|
data.id + |
||||
|
'" videoUrl="' + |
||||
|
rtspUrl + |
||||
|
'" cameraIP="' + |
||||
|
data.ip + |
||||
|
'" cameraUser="' + |
||||
|
data.user + |
||||
|
'" cameraPsd="' + |
||||
|
data.password + |
||||
|
'"><img src="' + |
||||
|
camera_img + |
||||
|
'" /><div class="' + |
||||
|
cameraStatus + |
||||
|
'">' + |
||||
|
data.cameraName + |
||||
|
'</div> </a></li>' |
||||
|
); |
||||
|
}); |
||||
|
let cameraModal: any = document.getElementById('cameraModal') |
||||
|
cameraModal.style.left = click.position.x + -45 + 'px'; |
||||
|
cameraModal.style.top = click.position.y + -180 + 'px'; |
||||
|
that.cameraModalShow = true; |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
// 船只模型
|
||||
|
if (pickedFeature.id.xbsjType && pickedFeature.id.name.includes('船') && pickedFeature.id.xbsjType === 'Model') { |
||||
|
that.AISInfoWindowShow = true; |
||||
|
// 赋值船只场景id
|
||||
|
that.ship_guid = pickedFeature.id.guid; |
||||
|
} |
||||
|
//雷达扫描范围
|
||||
|
if ( |
||||
|
pickedFeature.id._xbsjOwner && |
||||
|
pickedFeature.id._xbsjOwner.customProp && |
||||
|
JSON.parse(pickedFeature.id._xbsjOwner.customProp).labelAttr == '4' |
||||
|
) { |
||||
|
let labelCode = JSON.parse(pickedFeature.id._xbsjOwner.customProp).labelCode; |
||||
|
console.log(pickedFeature.id._xbsjOwner); |
||||
|
if (pickedFeature.id._xbsjOwner.addViewShedReturn) { |
||||
|
//显示/不显示雷达扫码效果
|
||||
|
// pickedFeature.id._xbsjOwner.addViewShedReturn.show = !pickedFeature.id._xbsjOwner.addViewShedReturn.show;
|
||||
|
// console.log("pickedFeature.id._xbsjOwner.addViewShedReturn",pickedFeature.id._xbsjOwner.addViewShedReturn);
|
||||
|
|
||||
|
//清空当前雷达,并将该方法指向undefined(清空)
|
||||
|
pickedFeature.id._xbsjOwner.addViewShedReturn.clear(); |
||||
|
pickedFeature.id._xbsjOwner.addViewShedReturn = undefined; |
||||
|
} else { |
||||
|
defHttp.get({ url: earthMapUrl.radarList, params: { radarCode: labelCode } }, { isTransformResponse: false }).then((res) => { |
||||
|
if (res.success) { |
||||
|
if (res.result.records.length > 0) { |
||||
|
let data = res.result.records[0]; |
||||
|
let rgb; |
||||
|
if (data.customProp) { |
||||
|
rgb = JSON.parse(data.customProp).color; |
||||
|
} |
||||
|
let radarRadius = data.workingRadius; |
||||
|
let radarRange = data.elevation; |
||||
|
let radarShifting = data.angularRadian; |
||||
|
let left = Number(radarShifting) - Number(radarRange) / 2; |
||||
|
//参数:经纬度、半径、起始角度(正北方向)、结束角度
|
||||
|
console.log('雷达扫描范围', data); |
||||
|
|
||||
|
//弧度转角度
|
||||
|
let degreePosition = radianToDegreeInLngLatHeight( |
||||
|
pickedFeature.id._xbsjOwner.position[0], |
||||
|
pickedFeature.id._xbsjOwner.position[1], |
||||
|
0.1 |
||||
|
); |
||||
|
//创建雷达扫描 深度
|
||||
|
// window.$viewer.scene.globe.depthTestAgainstTerrain = true;
|
||||
|
let rader = new CircleScan(window.$viewer); |
||||
|
rader.add(degreePosition, null, radarRadius, 10000); |
||||
|
pickedFeature.id._xbsjOwner.addViewShedReturn = rader; |
||||
|
|
||||
|
// 雷达扫描2
|
||||
|
// let rader2 = window.$viewer.entities.add({
|
||||
|
// position: Cesium.Cartesian3.fromDegrees(113.528333, 22.156109),
|
||||
|
// name: '雷达扫描',
|
||||
|
// ellipse: {
|
||||
|
// semiMajorAxis: 5000.0,
|
||||
|
// semiMinorAxis: 5000.0,
|
||||
|
// material: new Cesium.RadarScanMaterialProperty({
|
||||
|
// color: new Cesium.Color(1.0, 1.0, 0.0, 0.7),
|
||||
|
// speed: 20.0,
|
||||
|
// }),
|
||||
|
// height: 20.0,
|
||||
|
// heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
|
||||
|
// outline: true,
|
||||
|
// outlineColor: new Cesium.Color(1.0, 1.0, 0.0, 1.0)
|
||||
|
// }
|
||||
|
// })
|
||||
|
|
||||
|
// pickedFeature.id._xbsjOwner.addViewShedReturn= addViewShedRadar(
|
||||
|
// pickedFeature.id._xbsjOwner.position,
|
||||
|
// radarRadius,
|
||||
|
// left,
|
||||
|
// Number(radarRange) / 2 + Number(radarShifting),
|
||||
|
// [rgb.r / 255, rgb.g / 255, rgb.b / 255, rgb.a]
|
||||
|
// );
|
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} else { |
||||
|
//关闭所有气泡窗
|
||||
|
that.cameraModalShow = false; |
||||
|
that.poiModalShow = false; |
||||
|
} |
||||
|
}, window.Cesium.ScreenSpaceEventType.LEFT_CLICK); |
||||
|
} |
||||
|
/* 鼠标右键事件 */ |
||||
|
{ |
||||
|
handler.setInputAction((click) => { |
||||
|
// 判断点击位置是否有实体
|
||||
|
//返回具有 `primitive` 属性的对象,该属性包含场景中特定窗口坐标处的第一个(顶部)图元,如果该位置没有任何内容,则返回未定义的对象。其他属性可能会根据基元的类型进行设置,并可用于进一步识别拾取的对象。
|
||||
|
let pickedFeature = window.$viewer.scene.pick(click.position); |
||||
|
// console.log("pick",pickedFeature);
|
||||
|
|
||||
|
let entity = pickedFeature && pickedFeature.id; |
||||
|
console.log('pick', pickedFeature); |
||||
|
console.log('entity', entity); |
||||
|
if (entity == undefined) { |
||||
|
return; |
||||
|
} |
||||
|
if (typeof pickedFeature !== 'undefined' && pickedFeature.id.xbsjType == 'Model') { |
||||
|
//点击电线杆触发弹窗
|
||||
|
store.cameraData.forEach((data) => { |
||||
|
if (!$.isEmptyObject(data.msCameraSiteList)) { |
||||
|
if (!data.msCameraSettingList) { |
||||
|
return; |
||||
|
} |
||||
|
data.msCameraSiteList.forEach((data) => { |
||||
|
if (pickedFeature.id.customProp === data.id) { |
||||
|
window.$uia.contextMenu.pop([ |
||||
|
{ |
||||
|
text: '监控视域分析属性', |
||||
|
func: () => { |
||||
|
let testConfig = { |
||||
|
ref: 'testView', |
||||
|
name: '雷达视域分析', |
||||
|
position: [1.514482876761954, 0.8497520519403554, -0.7553906497788317], |
||||
|
rotation: [4.535844766941594, 0.32288591161895097, 0], |
||||
|
near: 1, |
||||
|
far: 400, |
||||
|
fovH: Math.PI / 3, |
||||
|
fovV: Math.PI / 6, |
||||
|
show: false, |
||||
|
}; |
||||
|
let Viewshed = new window.XE.Obj.Viewshed(window.$earth); |
||||
|
Viewshed.xbsjFromJSON(testConfig); |
||||
|
window.$uia.showPropertyWindow(Viewshed); |
||||
|
}, |
||||
|
}, |
||||
|
]); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
//巡检监控视频
|
||||
|
else if (typeof pickedFeature !== 'undefined' && entity._name == '视频图元') { |
||||
|
// console.log(pickedFeature)
|
||||
|
// console.log("entity",entity)
|
||||
|
window.$uia.contextMenu.pop([ |
||||
|
{ |
||||
|
text: '编辑', |
||||
|
func: () => { |
||||
|
$mitt.emit('addRoamPathVideoClose'); |
||||
|
// store.commit('customPrimitive', entity.xbsjGuid);
|
||||
|
store.customPrimitive = entity.xbsjGuid; |
||||
|
// 打开对应的创建巡检视频窗口
|
||||
|
nextTick(() => { |
||||
|
that.addRoamVideoShow = true; |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
text: '删除', |
||||
|
func: () => { |
||||
|
window.$uia.confirm('确认删除?', () => { |
||||
|
defHttp |
||||
|
.delete( |
||||
|
{ |
||||
|
url: '/military/msAreaCustomPrimitive/delete', |
||||
|
params: { id: entity.id }, |
||||
|
}, |
||||
|
{ isTransformResponse: false, joinParamsToUrl: true } |
||||
|
) |
||||
|
.then((response) => { |
||||
|
if (response.code == 200) { |
||||
|
let customPrimitiveList = store.customPrimitiveList; |
||||
|
// console.log("a",customPrimitiveList);
|
||||
|
customPrimitiveList.forEach((element, index) => { |
||||
|
const model = window.$earth.getObject(element); |
||||
|
// console.log("model.id",model.id);
|
||||
|
// console.log("entity.id",entity.id);
|
||||
|
if (model.id == entity.id) { |
||||
|
let customPrimitive = customPrimitiveList.splice(index, 1)[0]; |
||||
|
model.destroy(); |
||||
|
} |
||||
|
}); |
||||
|
// store.dispatch('asyncCustomPrimitive', customPrimitiveList);
|
||||
|
store.customPrimitiveList = customPrimitiveList; |
||||
|
|
||||
|
// notification.close("RoamVideoSet");
|
||||
|
// sessionStorage.setItem("RoamVideoSet", "false");
|
||||
|
} else { |
||||
|
createMessage.error('修改失败', 2); |
||||
|
console.error('删除失败', response); |
||||
|
} |
||||
|
}) |
||||
|
.catch((res) => { |
||||
|
console.error('错误', res); |
||||
|
}); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
]); |
||||
|
} |
||||
|
//绘画图形
|
||||
|
else if (typeof pickedFeature !== 'undefined' && entity.name == '绘画') { |
||||
|
// console.log("entity", entity);
|
||||
|
window.$uia.contextMenu.pop([ |
||||
|
{ |
||||
|
text: '编辑', |
||||
|
func: () => { |
||||
|
window.$uia.showPropertyWindow(entity); |
||||
|
//记录编辑前信息
|
||||
|
let oldEntity = { |
||||
|
depthTest: entity.depthTest, //深度检测
|
||||
|
color: [...entity.color], //颜色
|
||||
|
outline: { |
||||
|
color: [...entity.outline.color], //边框颜色
|
||||
|
show: entity.outline.show, //边框显示
|
||||
|
width: entity.outline.width, //边框宽度
|
||||
|
}, |
||||
|
positions: [...entity.positions], |
||||
|
}; |
||||
|
nextTick(() => { |
||||
|
// 主要ui窗口
|
||||
|
const mainUI = window.$uia._vm.$refs.mainUI; |
||||
|
// 所有打开的ui窗口Ref值
|
||||
|
const windowsAttrList = Object.keys(mainUI.$refs); |
||||
|
// 寻找当前窗体的工具对象
|
||||
|
const modelToolKey = windowsAttrList.filter((f) => f.indexOf(entity.guid) > -1)[0]; |
||||
|
const modelTool = mainUI.$refs[modelToolKey][0]; |
||||
|
// 当前窗体的元素
|
||||
|
const el = modelTool.$el; |
||||
|
// this.cloneEl(el)
|
||||
|
// 样式
|
||||
|
el.style.width = '380px'; //宽度
|
||||
|
el.children[2].style.padding = '0px'; |
||||
|
el.children[2].style.transition = 'none'; |
||||
|
el.children[2].children[0].children[0].style.minWidth = '370px'; |
||||
|
// 关闭名称input
|
||||
|
el.children[2].children[0].children[0].children[0].style.display = 'none'; |
||||
|
// 关闭创建按钮
|
||||
|
el.children[2].children[0].children[0].children[1].children[0].children[1].style.display = 'none'; |
||||
|
// 关闭贴地
|
||||
|
el.children[2].children[0].children[0].children[2].children[0].style.display = 'none'; |
||||
|
// 关闭拉伸
|
||||
|
el.children[2].children[0].children[0].children[3].children[0].style.display = 'none'; |
||||
|
el.children[2].children[0].children[0].children[3].children[1].style.display = 'none'; |
||||
|
el.children[2].children[0].children[0].children[3].children[2].style.display = 'none'; |
||||
|
el.children[2].children[0].children[0].children[3].children[3].style.marginLeft = '8px'; |
||||
|
// 右上角关闭
|
||||
|
const cancelTopRightBtn = el.children[1].children[1]; |
||||
|
// 取消按钮元素
|
||||
|
const cancelBtn = el.children[3].children[0]; |
||||
|
// 确认按钮元素
|
||||
|
const okBtn = el.children[3].children[1]; |
||||
|
// 取消按钮
|
||||
|
cancelTopRightBtn.onclick = cancelBtn.onclick = function () { |
||||
|
//恢复原来设置
|
||||
|
// console.log("oldEntity", oldEntity);
|
||||
|
// console.log("entity", entity);
|
||||
|
// entity.xbsjFromJSON(oldEntity)
|
||||
|
// entity = JSON.parse(oldEntity)
|
||||
|
entity.depthTest = oldEntity.depthTest; |
||||
|
entity.color = oldEntity.color; |
||||
|
entity.outline = oldEntity.outline; |
||||
|
entity.positions = oldEntity.positions; |
||||
|
entity.editing = false; |
||||
|
}; |
||||
|
okBtn.onclick = function () { |
||||
|
let params = { |
||||
|
id: entity.customProp?.id, |
||||
|
drawData: JSON.stringify(entity), |
||||
|
}; |
||||
|
// console.log("submit", entity);
|
||||
|
defHttp |
||||
|
.post( |
||||
|
{ |
||||
|
url: '/military/dtMapDraw/edit', |
||||
|
params: params, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then(() => { |
||||
|
createMessage.success('编辑成功', 2); |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
createMessage.error('编辑失败', 2); |
||||
|
}); |
||||
|
}; |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
text: '删除', |
||||
|
func: () => { |
||||
|
window.$uia.confirm('确认删除?', () => { |
||||
|
defHttp |
||||
|
.delete( |
||||
|
{ |
||||
|
url: '/military/dtMapDraw/delete', |
||||
|
params: { id: entity.customProp?.id }, |
||||
|
}, |
||||
|
{ isTransformResponse: false, joinParamsToUrl: true } |
||||
|
) |
||||
|
.then((response) => { |
||||
|
if (response.code == 200) { |
||||
|
let shapeList = store.shapeList; |
||||
|
shapeList.forEach((element, index) => { |
||||
|
const model = window.$earth.getObject(element); |
||||
|
if (model.id == entity.customProp?.id) { |
||||
|
let shape = shapeList.splice(index, 1)[0]; |
||||
|
model.destroy(); |
||||
|
} |
||||
|
}); |
||||
|
store.shapeList = shapeList; |
||||
|
} else { |
||||
|
createMessage.error('删除失败', 2); |
||||
|
console.error('删除失败', response); |
||||
|
} |
||||
|
}) |
||||
|
.catch((res) => { |
||||
|
console.error('错误', res); |
||||
|
}); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
]); |
||||
|
} |
||||
|
}, window.Cesium.ScreenSpaceEventType.RIGHT_CLICK); //右键事件
|
||||
|
} |
||||
|
/* picked事件 */ |
||||
|
{ |
||||
|
/* let canvasbox = window.$viewer.canvas, pickPosition = {}, cameraModal = this.$refs.cameraModal;//操作cameraModal组件 |
||||
|
canvasbox.onclick = e => { |
||||
|
pickPosition.x = e.offsetX; |
||||
|
pickPosition.y = e.offsetY; |
||||
|
var picked = window.$viewer.scene.pick(pickPosition); |
||||
|
console.log("picked", picked); |
||||
|
if (picked !== undefined && picked.id !== undefined) { |
||||
|
console.log(e) |
||||
|
} else { |
||||
|
that.cameraModalShow = false; |
||||
|
} |
||||
|
} */ |
||||
|
} |
||||
|
} |
@ -0,0 +1,918 @@ |
|||||
|
/** |
||||
|
* 图层管理-模型右键菜单 |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
import { defHttp } from '/@/utils/http/axios'; |
||||
|
import { cloneModel, cloneShamNode } from '@/utils/earthMap/clone'; |
||||
|
import { useUserStore } from '/@/store/modules/user'; |
||||
|
import { useEarthMapStore } from '/@/store/modules/earthMap'; |
||||
|
import { setLabelStatus, setAllLabelStatus } from '@/utils/earthMap/setLabelStatus'; |
||||
|
import { earthMapUrl } from '@/api/earth/earthMap' |
||||
|
import { useMessage } from '/@/hooks/web/useMessage'; |
||||
|
import { handleNodeType } from '@/utils/earthMap/handleNodeType'; |
||||
|
import setIconByRef from '@/utils/earthMap/setIconByRef'; |
||||
|
import { nextTick } from 'vue'; |
||||
|
import _ from 'lodash'; |
||||
|
import $mitt from '@/utils/earthMap/mitt'; |
||||
|
import $ from 'jquery'; |
||||
|
|
||||
|
let userStore = useUserStore(); |
||||
|
let store = useEarthMapStore(); |
||||
|
const { createMessage } = useMessage(); |
||||
|
export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, that) { |
||||
|
let earth = window.$earth; |
||||
|
let XE = window.XE; |
||||
|
let sceneTree = earthUI.tools.sceneTree; |
||||
|
let sceneTreeComp = sceneTree._comp; |
||||
|
// 转换方法
|
||||
|
let transform = window.Cesium.Math; |
||||
|
//右键之后设置当前 node
|
||||
|
item._inner.sn.isSelected = true; |
||||
|
const el = vueObject.$el; |
||||
|
let baseItems: any = [ |
||||
|
{ |
||||
|
text: '克隆', |
||||
|
keys: '', |
||||
|
func: () => { |
||||
|
let sn: any = null; |
||||
|
if (item._inner.sn.ref.startsWith('node_')) { |
||||
|
const objectId = item._inner.sn.ref.split('_')[1]; |
||||
|
sn = earth.sceneTree.$refs[objectId]; |
||||
|
} else { |
||||
|
sn = item._inner.sn; |
||||
|
} |
||||
|
if (sn) { |
||||
|
let newSn: any = null; |
||||
|
let newSnData: any = null; |
||||
|
let index = 0; |
||||
|
if (sn.czmObject.xbsjType !== 'Polyline') { |
||||
|
index = cloneModel(sn); |
||||
|
newSn = sn.parent.children[index - 1]; |
||||
|
newSnData = newSn.czmObject; |
||||
|
if (newSnData.xbsjType === 'Model') { |
||||
|
nextTick(() => { |
||||
|
const divs = $('#earthContainer>div>div>div:nth-child(5)') |
||||
|
.children('div') |
||||
|
.eq(1) |
||||
|
.children() |
||||
|
.eq(0) |
||||
|
.children() |
||||
|
.eq(0) |
||||
|
.children() |
||||
|
.each((index, element) => { |
||||
|
if (index <= 1) { |
||||
|
return; |
||||
|
} |
||||
|
const paddingLeft = $(element).children().eq(0).css('padding-left'); |
||||
|
if (paddingLeft === '10px') { |
||||
|
$(element).css('display', 'none'); |
||||
|
} |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
// 保存数据到数据库中
|
||||
|
handleNodeType(sn) |
||||
|
// 传感器
|
||||
|
.sensor(() => { |
||||
|
// debugger
|
||||
|
// 设置 ref 属性 防止数据库中 eventSerialNum 重复
|
||||
|
newSn.ref += '_copy'; |
||||
|
// 发送请求 保存到数据库中
|
||||
|
let saveSensorModelParameter = { |
||||
|
eventSerialNum: newSn.ref, |
||||
|
lon: transform.toDegrees(newSnData.xbsjPosition[0]).toFixed(5), |
||||
|
lat: transform.toDegrees(newSnData.xbsjPosition[1]).toFixed(5), |
||||
|
height: newSnData.xbsjPosition[2].toFixed(2), |
||||
|
yaw: transform.toDegrees(newSnData.xbsjRotation[0]).toFixed(2), |
||||
|
pitch: transform.toDegrees(newSnData.xbsjRotation[1]).toFixed(2), |
||||
|
roll: transform.toDegrees(newSnData.xbsjRotation[2]).toFixed(2), |
||||
|
isShow: 1, |
||||
|
modelType: '11', |
||||
|
eventType: 1, |
||||
|
}; |
||||
|
defHttp.post( |
||||
|
{ |
||||
|
url: earthMapUrl.SaveSensorModel, |
||||
|
params: saveSensorModelParameter, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
).then((res) => { |
||||
|
if (res.success) { |
||||
|
createMessage.success('克隆成功'); |
||||
|
} else { |
||||
|
newSn.parent.children.splice(index, 1); |
||||
|
createMessage.error('克隆成功:' + res.message); |
||||
|
} |
||||
|
}); |
||||
|
}) |
||||
|
// 标志点 微波雷达回调
|
||||
|
.markerPosition(() => { |
||||
|
newSn.title += '_copy'; |
||||
|
let pinImage = newSnData.imageUrl; |
||||
|
const staticDomainURL = window._CONFIG['staticDomainURL'] + '/'; |
||||
|
// 去除 image 地址中的 staticDomainURL 链接
|
||||
|
let imageUri = pinImage.substring(pinImage.indexOf(staticDomainURL) + staticDomainURL.length, pinImage.length); |
||||
|
const jsonObj = JSON.parse(newSnData.customProp); |
||||
|
const labelAttr = jsonObj.labelAttr; |
||||
|
let savePinModelParameter = { |
||||
|
mapLabel: { |
||||
|
labelName: newSnData.name, |
||||
|
labelLon: transform.toDegrees(newSnData.position[0]).toFixed(5), |
||||
|
labelLat: transform.toDegrees(newSnData.position[1]).toFixed(5), |
||||
|
labelHeight: newSnData.position[2].toFixed(2), |
||||
|
labelImgUrl: imageUri, |
||||
|
// 1 启用, 0 禁用
|
||||
|
labelStatus: 1, |
||||
|
// 标记属性-> 3: 标记位置
|
||||
|
labelAttr: labelAttr, |
||||
|
labelCode: '', |
||||
|
lineId: newSn.name, |
||||
|
}, |
||||
|
deviceId: jsonObj.deviceId, |
||||
|
}; |
||||
|
defHttp.post( |
||||
|
{ |
||||
|
url: earthMapUrl.saveMapLabel, |
||||
|
params: savePinModelParameter, |
||||
|
}, { isTransformResponse: false } |
||||
|
).then((res) => { |
||||
|
if (res.success) { |
||||
|
// 修改 ref 成 数据库返回的 id
|
||||
|
newSn.ref = res.result; |
||||
|
setIconByRef(newSn.ref, newSn.ref); |
||||
|
newSn.czmObject.pinBuilder.extText = newSnData.name; |
||||
|
jsonObj.labelCode = ''; |
||||
|
newSn.czmObject.customProp = JSON.stringify(jsonObj); |
||||
|
// 保存成功
|
||||
|
createMessage.success('克隆成功'); |
||||
|
} else { |
||||
|
newSn.parent.children.splice(index, 1); |
||||
|
createMessage.error('克隆失败' + res.message); |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
newSn.parent.children.splice(index, 1); |
||||
|
createMessage.error('克隆失败'); |
||||
|
}); |
||||
|
}) |
||||
|
//区域回调
|
||||
|
.polylineCallBack(() => { |
||||
|
// debugger
|
||||
|
const currentModel = new window.XE.Obj.Polyline(window.$earth); |
||||
|
const submitData: any = {}; |
||||
|
const poistions = sn.czmObject.positions; |
||||
|
if (poistions.length <= 0) { |
||||
|
return; |
||||
|
} |
||||
|
submitData.name = sn.czmObject.name + '_copy'; |
||||
|
submitData.lineCode = currentModel.guid; |
||||
|
submitData.isLoop = Number(sn.czmObject.loop); |
||||
|
submitData.isDepthCheck = Number(sn.czmObject.depthTest); |
||||
|
submitData.width = sn.czmObject.width; |
||||
|
submitData.interpolation = sn.czmObject.arcType; |
||||
|
submitData.positions = JSON.stringify(poistions); |
||||
|
switch (sn.czmObject.material.type) { |
||||
|
// 实线
|
||||
|
case 'XbsjColorMaterial': |
||||
|
submitData.materialType = 0; |
||||
|
submitData.color = JSON.stringify(sn.czmObject.material.XbsjColorMaterial.color); |
||||
|
submitData.intervalColor = null; |
||||
|
submitData.dashLength = 0; |
||||
|
submitData.dashStyle = 0; |
||||
|
break; |
||||
|
// 虚线
|
||||
|
case 'XbsjPolylineDashMaterial': |
||||
|
submitData.materialType = 1; |
||||
|
submitData.color = JSON.stringify(sn.czmObject.material.XbsjPolylineDashMaterial.color); |
||||
|
submitData.intervalColor = JSON.stringify(sn.czmObject.material.XbsjPolylineDashMaterial.gapColor); |
||||
|
submitData.dashLength = sn.czmObject.material.XbsjPolylineDashMaterial.dashLength; |
||||
|
submitData.dashStyle = sn.czmObject.material.XbsjPolylineDashMaterial.dashPattern; |
||||
|
break; |
||||
|
// 箭头线
|
||||
|
case 'XbsjPolylineArrowMaterial': |
||||
|
submitData.materialType = 2; |
||||
|
submitData.color = JSON.stringify(sn.czmObject.material.XbsjPolylineArrowMaterial.color); |
||||
|
submitData.intervalColor = null; |
||||
|
submitData.dashLength = 0; |
||||
|
submitData.dashStyle = 0; |
||||
|
break; |
||||
|
// 轨迹线
|
||||
|
case 'XbsjODLineMaterial': |
||||
|
submitData.materialType = 3; |
||||
|
submitData.color = JSON.stringify(sn.czmObject.material.XbsjODLineMaterial.color); |
||||
|
submitData.intervalColor = null; |
||||
|
submitData.dashLength = 0; |
||||
|
submitData.dashStyle = 0; |
||||
|
submitData.cycleFrame = sn.czmObject.material.XbsjODLineMaterial.totoalFrameCount; |
||||
|
break; |
||||
|
} |
||||
|
defHttp |
||||
|
.post( |
||||
|
{ |
||||
|
url: earthMapUrl.saveMapLine, |
||||
|
params: submitData, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then((response) => { |
||||
|
if (response.success) { |
||||
|
currentModel.name = submitData.name; |
||||
|
currentModel.loop = submitData.isLoop; |
||||
|
currentModel.depthTest = submitData.isDepthCheck; |
||||
|
currentModel.width = submitData.width; |
||||
|
currentModel.arcType = submitData.interpolation; |
||||
|
currentModel.positions = JSON.parse(submitData.positions); |
||||
|
switch (sn.czmObject.material.type) { |
||||
|
// 实线
|
||||
|
case 'XbsjColorMaterial': |
||||
|
currentModel.material.type = 'XbsjColorMaterial'; |
||||
|
currentModel.material.color = submitData.color; |
||||
|
break; |
||||
|
// 虚线
|
||||
|
case 'XbsjPolylineDashMaterial': |
||||
|
currentModel.material.type = 'XbsjPolylineDashMaterial'; |
||||
|
currentModel.material.color = submitData.color; |
||||
|
currentModel.material.XbsjPolylineDashMaterial.gapColor = submitData.intervalColor; |
||||
|
currentModel.material.XbsjPolylineDashMaterial.dashLength = submitData.dashLength; |
||||
|
currentModel.material.XbsjPolylineDashMaterial.dashPattern = submitData.dashStyle; |
||||
|
break; |
||||
|
// 箭头线
|
||||
|
case 'XbsjPolylineArrowMaterial': |
||||
|
currentModel.material.type = 'XbsjPolylineArrowMaterial'; |
||||
|
currentModel.material.XbsjPolylineArrowMaterial.color = submitData.color; |
||||
|
break; |
||||
|
// 轨迹线
|
||||
|
case 'XbsjODLineMaterial': |
||||
|
currentModel.material.type = 'XbsjODLineMaterial'; |
||||
|
currentModel.material.XbsjODLineMaterial.color = submitData.color; |
||||
|
currentModel.material.XbsjODLineMaterial.totoalFrameCount = submitData.cycleFrame; |
||||
|
break; |
||||
|
} |
||||
|
const leaf = new XE.SceneTree.Leaf(currentModel); |
||||
|
leaf.ref = response.result; |
||||
|
sn.parent.children.push(leaf); |
||||
|
} else { |
||||
|
throw '克隆区域数据出错'; |
||||
|
} |
||||
|
}) |
||||
|
.catch((e) => { |
||||
|
currentModel.destroy(); |
||||
|
createMessage.error('克隆区域数据出错', 3); |
||||
|
}); |
||||
|
}) |
||||
|
//监控点
|
||||
|
.modelCallback(() => { |
||||
|
createMessage.warning('监控点不支持克隆'); |
||||
|
}) |
||||
|
.run(); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
text: '删除', |
||||
|
keys: '', |
||||
|
func: () => { |
||||
|
earthUI.confirm('确认删除图层?', () => { |
||||
|
try { |
||||
|
// debugger
|
||||
|
let sn: any = null; |
||||
|
const ref = item._inner.sn.ref; |
||||
|
// update:-- 判断方式要修改
|
||||
|
if (ref.startsWith('node_')) { |
||||
|
const objectId = item._inner.sn.ref.split('_')[1]; |
||||
|
sn = earth.sceneTree.$refs[objectId]; |
||||
|
} else { |
||||
|
sn = item._inner.sn; |
||||
|
} |
||||
|
let id = sn.ref; |
||||
|
// 删除数据库中的数据
|
||||
|
handleNodeType(sn) |
||||
|
// 传感器
|
||||
|
.sensor(() => { |
||||
|
// 发送请求 删除数据库中的数据
|
||||
|
handlerModelDelete(earthMapUrl.deleteSensor, { eventSerialNum: id }); |
||||
|
}) |
||||
|
// 标志点
|
||||
|
.markerPosition(() => { |
||||
|
if (sn.czmObject.addViewShedReturn) { |
||||
|
window.$earth.czm.viewer.entities.remove(sn.czmObject.addViewShedReturn); |
||||
|
} |
||||
|
if (sn.czmObject.customProp) { |
||||
|
let prop = JSON.parse(sn.czmObject.customProp); |
||||
|
if (prop.labelAttr == 4) { |
||||
|
defHttp.delete( |
||||
|
{ |
||||
|
url: '/military/RadarConfig/deleteByRadarCode', |
||||
|
params: { radarCode: prop.labelCode }, |
||||
|
}, |
||||
|
{ isTransformResponse: false, joinParamsToUrl: true } |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
handlerModelDelete(earthMapUrl.deleteMapLabel, { |
||||
|
id: id, |
||||
|
}); |
||||
|
}) |
||||
|
// 线
|
||||
|
.modelCallback(() => { |
||||
|
handlerModelDelete(earthMapUrl.deleteSite, { id: id }).then(() => { |
||||
|
sn.destroy(); |
||||
|
const node = item._inner.sn; |
||||
|
const childList = node.parent.children; |
||||
|
childList.splice(childList.indexOf(node), 1); |
||||
|
node.destroy(); |
||||
|
}); |
||||
|
}) |
||||
|
.polylineCallBack(() => { |
||||
|
const childList = item._inner.sn.children; |
||||
|
|
||||
|
for (const child of childList) { |
||||
|
if (child.children.length > 0) { |
||||
|
createMessage.warning('存在下级数据无法删除'); |
||||
|
throw '存在下级数据无法删除'; |
||||
|
} |
||||
|
} |
||||
|
handlerModelDelete(earthMapUrl.deleteMapLine, { id: id }).then(() => { |
||||
|
const nodeRef = 'node_' + id; |
||||
|
const node = window.$earth.sceneTree.$refs[nodeRef]; |
||||
|
const childList = node.parent.children; |
||||
|
childList.splice(childList.indexOf(node), 1); |
||||
|
node.destroy(); |
||||
|
}); |
||||
|
}) |
||||
|
.run(); |
||||
|
const index = sn.parent.children.indexOf(sn); |
||||
|
sn.parent.children.splice(index, 1); |
||||
|
} catch (error) { } |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
]; |
||||
|
const bf = { |
||||
|
text: '布防/撤防', |
||||
|
keys: '', |
||||
|
func: () => { |
||||
|
const xbsjObject = item._inner.sn; |
||||
|
if (!xbsjObject || !xbsjObject.czmObject) return; |
||||
|
const jsonObj = JSON.parse(xbsjObject.czmObject.customProp); |
||||
|
const deviceId = jsonObj.deviceId; |
||||
|
if (!deviceId) { |
||||
|
console.error('主机设备为空'); |
||||
|
return; |
||||
|
} |
||||
|
const labelCode = jsonObj.labelCode; |
||||
|
if (!labelCode) { |
||||
|
console.error('设备编码为null'); |
||||
|
return; |
||||
|
} |
||||
|
const device = store.hostDeviceMapById.get(deviceId); |
||||
|
const ref = xbsjObject.ref; |
||||
|
if (device.deviceType_dictText.indexOf('微波探测器') > -1) { |
||||
|
if (ref && ref.length > 0) { |
||||
|
const state = store.statusByNodeId.get(ref); |
||||
|
if (state == 1) { |
||||
|
setLabelStatus(device, labelCode, ref, 0).then((response) => { |
||||
|
setIconByRef(ref, el); |
||||
|
}); |
||||
|
} else if (state == 0) { |
||||
|
setLabelStatus(device, labelCode, ref, 1).then((response) => { |
||||
|
setIconByRef(ref, el); |
||||
|
}); |
||||
|
} else { |
||||
|
createMessage.error('设备不在线'); |
||||
|
} |
||||
|
} |
||||
|
} else if (device.deviceType_dictText.indexOf('雷达') > -1) { |
||||
|
// console.log("leida");
|
||||
|
//处理单个雷达布防撤防
|
||||
|
//参数
|
||||
|
// {
|
||||
|
// "regionIdList": [
|
||||
|
// 2
|
||||
|
// ], // 周界防区区域ID列表(雷达设备列表的ID)
|
||||
|
// "regionStatus": 0, // 布防状态 0 - 未布防 1 - 布防
|
||||
|
// "defenceRule": { // 布防规则
|
||||
|
// "startTime": "yyyy-MM-dd HH:mm:ss", // 布防开始时间 每日循环情况下只包含时分秒,格式:"HH:mm:ss" 非每日循环情况下包含年月日、时分秒,格式:"yyyy-MM-dd HH:mm:ss"
|
||||
|
// "endTime": "yyyy-MM-dd HH:mm:ss", // 布防结束时间 每日循环情况下只包含时分秒,格式:"HH:mm:ss" 非每日循环情况下包含年月日、时分秒,格式:"yyyy-MM-dd HH:mm:ss"
|
||||
|
// "dailyCycle": true // 每日循环布防 true - 是 false - 否
|
||||
|
// }
|
||||
|
// }
|
||||
|
// putAction(this.url.perimeterControl,{})
|
||||
|
} |
||||
|
}, |
||||
|
}; |
||||
|
const selectRef = item._inner.sn.ref; |
||||
|
if (selectRef.startsWith('wbList') || selectRef.startsWith('nodeSecondary_')) { |
||||
|
baseItems = [ |
||||
|
{ |
||||
|
text: '一键布防', |
||||
|
keys: '', |
||||
|
func: () => { |
||||
|
setAllLabelStatus(selectRef, item, true); |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
text: '一键撤防', |
||||
|
keys: '', |
||||
|
func: () => { |
||||
|
setAllLabelStatus(selectRef, item, false); |
||||
|
}, |
||||
|
}, |
||||
|
]; |
||||
|
earthUI.contextMenu.pop(baseItems); |
||||
|
return; |
||||
|
} else if (selectRef.startsWith('monitor') || selectRef.startsWith('ldList')) { |
||||
|
earthUI.contextMenu.pop([]); |
||||
|
return; |
||||
|
} else if (item.level <= 2) { |
||||
|
if (!item._inner.sn.ref.startsWith('node_')) { |
||||
|
earthUI.contextMenu.pop([]); |
||||
|
return; |
||||
|
} else { |
||||
|
baseItems.splice(0, 1); |
||||
|
} |
||||
|
} else { |
||||
|
if (selectRef.startsWith('camera')) { |
||||
|
// baseItems = [bf]
|
||||
|
// earthUI.contextMenu.pop(baseItems)
|
||||
|
return; |
||||
|
} else if (!selectRef.startsWith('node_')) { |
||||
|
//站点
|
||||
|
baseItems.unshift({ |
||||
|
type: 'divider', |
||||
|
}); |
||||
|
baseItems.unshift(bf); |
||||
|
} |
||||
|
} |
||||
|
let num = 2; |
||||
|
//判断定位的位置
|
||||
|
if ( |
||||
|
item.level <= 2 || |
||||
|
selectRef.startsWith('monitor') || |
||||
|
selectRef.startsWith('wbList') || |
||||
|
selectRef.startsWith('ldList') || |
||||
|
//站点
|
||||
|
selectRef.startsWith('node_') |
||||
|
) |
||||
|
num = 0; |
||||
|
baseItems.splice(num, 0, { |
||||
|
text: '定位', |
||||
|
keys: '', |
||||
|
func: () => { |
||||
|
// const czmObject = item._inner.sn.czmObject
|
||||
|
// czmObject.flyTo()
|
||||
|
const ref = item._inner.sn.ref; |
||||
|
let czmObject: any = null; |
||||
|
if (ref.startsWith('node_')) { |
||||
|
const objectId = ref.split('_')[1]; |
||||
|
const sn = earth.sceneTree.$refs[objectId]; |
||||
|
czmObject = sn.czmObject; |
||||
|
} else { |
||||
|
const sn = item._inner.sn; |
||||
|
czmObject = sn.czmObject; |
||||
|
} |
||||
|
|
||||
|
czmObject.flyTo(); |
||||
|
}, |
||||
|
}); |
||||
|
baseItems.push( |
||||
|
...[ |
||||
|
{ |
||||
|
type: 'divider', |
||||
|
}, |
||||
|
{ |
||||
|
text: '属性', |
||||
|
func: () => { |
||||
|
$mitt.emit('windowCancel'); |
||||
|
// 属性面板
|
||||
|
const mainUI = earthUI._vm.$refs.mainUI; |
||||
|
const areaCode = getAreaCode(item); |
||||
|
let sn: any = null; |
||||
|
if (item._inner.sn.ref.startsWith('node_')) { |
||||
|
const objectId = item._inner.sn.ref.split('_')[1]; |
||||
|
sn = earth.sceneTree.$refs[objectId]; |
||||
|
// window.XE.MVVM.watch(() => {
|
||||
|
// item._inner.sn.title = sn.title
|
||||
|
// })
|
||||
|
|
||||
|
sn.czmObject.distanceDisplayCondition = [1.0, 30000.0]; |
||||
|
if (sn.czmObject.xbsjType == 'Model') { |
||||
|
const lineId = item.parent.parent._inner.sn.ref.split('_')[1]; |
||||
|
|
||||
|
that.czmObject = sn.czmObject; |
||||
|
that.node = item; |
||||
|
that.type = 'jkd'; |
||||
|
that.lineId = lineId; |
||||
|
that.areaCode = areaCode; |
||||
|
that.areaByNodeIdModel = store.areaByNodeId; |
||||
|
|
||||
|
nextTick(() => { |
||||
|
that.addModelWinShow = true; |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
return; |
||||
|
} |
||||
|
} else { |
||||
|
sn = item._inner.sn; |
||||
|
if (sn.czmObject.xbsjType == 'Pin') { |
||||
|
const jsonObj = JSON.parse(sn.czmObject.customProp); |
||||
|
|
||||
|
const lineId = jsonObj.labelAttr == 4 ? item.parent._inner.sn.ref.split('_')[1] : item.parent.parent._inner.sn.ref.split('_')[1]; |
||||
|
|
||||
|
that.czmObject = sn.czmObject; |
||||
|
that.node = item; |
||||
|
that.type = jsonObj.labelAttr == 4 ? 'ld' : 'wb'; |
||||
|
that.lineId = lineId; |
||||
|
that.areaCode = areaCode; |
||||
|
that.eidtId = sn.ref; |
||||
|
that.areaByNodeIdModel = store.areaByNodeId; |
||||
|
(that.el = el), |
||||
|
nextTick(() => { |
||||
|
that.addModelWinShow = true; |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
let index = sn.parent.children.indexOf(sn); |
||||
|
let tempData = sn.czmObject.toAllJSON(); |
||||
|
// 设置属性面板的确定按钮方法
|
||||
|
// 显示属性面板
|
||||
|
earthUI.showPropertyWindow(sn.czmObject); |
||||
|
nextTick(() => { |
||||
|
// 模型窗口
|
||||
|
const windowsAttrList = Object.keys(mainUI.$refs); |
||||
|
// 找到该模型设置属性窗口
|
||||
|
const modelToolKey = windowsAttrList.filter((f) => f.indexOf(sn.czmObject.guid || sn.guid) > -1)[0]; |
||||
|
const modelTool = mainUI.$refs[modelToolKey][0]; |
||||
|
// 对应处理方法
|
||||
|
handleNodeType(sn) |
||||
|
// 感应器
|
||||
|
.sensor(() => { |
||||
|
// 禁用模型名称编辑
|
||||
|
modelTool.$el.getElementsByClassName('xbsj-flatten')[0].children[0].children[1].setAttribute('disabled', 'disabled'); |
||||
|
}) |
||||
|
.default(() => { |
||||
|
// 启用模型名称编辑
|
||||
|
modelTool.$el.getElementsByClassName('xbsj-flatten')[0].children[0].children[1].removeAttribute('disabled'); |
||||
|
}) |
||||
|
.run(); |
||||
|
|
||||
|
// modelTool
|
||||
|
modelTool.ok = () => { |
||||
|
// 确定时清除这个事件
|
||||
|
$mitt.off('windowCancel'); |
||||
|
// 保存前端数据
|
||||
|
const modelToolObj = modelTool._czmObj; |
||||
|
if (!modelToolObj) { |
||||
|
return; |
||||
|
} |
||||
|
modelToolObj.positionEditing = false; |
||||
|
if (modelToolObj.isCreating) { |
||||
|
modelToolObj.isCreating = false; |
||||
|
const sceneObject = new XE.SceneTree.Leaf(modelToolObj); |
||||
|
earthUI.addSceneObject(sceneObject); |
||||
|
} |
||||
|
|
||||
|
// 保存到数据库
|
||||
|
propertiesWindowConfirm(modelTool, sn, index); |
||||
|
// 关闭属性面板
|
||||
|
modelTool.close(); |
||||
|
}; |
||||
|
modelTool.cancel = () => { |
||||
|
// 清除这个事件
|
||||
|
$mitt.off('windowCancel'); |
||||
|
// 关闭属性面板
|
||||
|
modelTool.close(); |
||||
|
let t = modelTool._czmObj; |
||||
|
// 如果是创建的话,需要删除
|
||||
|
t && t.positionEditing === false && t.isCreating && t.isCreating === false && t.destroy(); |
||||
|
// 恢复之前的数据
|
||||
|
t && t.xbsjFromJSON(tempData); |
||||
|
}; |
||||
|
$mitt.on('windowCancel', modelTool.cancel); |
||||
|
// 下面的代码,是切换属性面板里选项窗口, 必须
|
||||
|
// 否侧 ok cancel 等方法执行是原本的方法而不是已经修改的方法
|
||||
|
modelTool.tabShow = '3'; |
||||
|
modelTool.tabShow = '1'; |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
] |
||||
|
); |
||||
|
// 右键菜单-重命名
|
||||
|
// 先销毁之前的 on-change-title 事件
|
||||
|
vueObject.$off('on-change-title', handleChangeTitle); |
||||
|
// 重命名时 on-change-title 事件
|
||||
|
vueObject.$on('on-change-title', handleChangeTitle); |
||||
|
|
||||
|
// 弹出右键菜单
|
||||
|
earthUI.contextMenu.pop(baseItems); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 右键菜单删除按钮的删除方法
|
||||
|
export function handlerModelDelete(url, params) { |
||||
|
return defHttp |
||||
|
.delete( |
||||
|
{ |
||||
|
url: url, |
||||
|
params: params, |
||||
|
}, |
||||
|
{ isTransformResponse: false, joinParamsToUrl: true } |
||||
|
) |
||||
|
.then((res) => { |
||||
|
if (res.success) { |
||||
|
createMessage.success('删除成功'); |
||||
|
} else { |
||||
|
createMessage.error('删除失败'); |
||||
|
console.log('asdasdasd'); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
export function getAreaCode(item) { |
||||
|
const currentRef = item._inner.sn.ref; |
||||
|
if (!store.areaByNodeId.has(currentRef)) { |
||||
|
if (item.parent) { |
||||
|
return getAreaCode(item.parent); |
||||
|
} |
||||
|
} else { |
||||
|
return store.areaByNodeId.get(currentRef); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 重命名 on-change-title 事件 使用 lodash.debounce 函数(防抖)
|
||||
|
export const handleChangeTitle = _.debounce(function (options) { |
||||
|
const sn = options.item._inner.sn; |
||||
|
const newTitle = options.title; |
||||
|
|
||||
|
// 修改模型属性后,提交到后台。先判断模型的节点,调用不同的接口
|
||||
|
handleNodeType(sn) |
||||
|
// 感应器
|
||||
|
.sensor(() => { |
||||
|
// 不支持修改名称
|
||||
|
createMessage.warning('不支持修改感应器的名称'); |
||||
|
}) |
||||
|
// 传感器标志线
|
||||
|
.modelCallback(() => { |
||||
|
// 发送请求 保存模型属性
|
||||
|
let editCameraSiteModelParameter = { |
||||
|
id: sn.ref, |
||||
|
sitename: newTitle, |
||||
|
}; |
||||
|
defHttp.put( |
||||
|
{ |
||||
|
url: earthMapUrl.updateSite, |
||||
|
params: editCameraSiteModelParameter, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
).then((res) => { |
||||
|
if (res.success) { |
||||
|
createMessage.success('修改成功'); |
||||
|
} else { |
||||
|
createMessage.error('修改失败'); |
||||
|
} |
||||
|
}) |
||||
|
.catch((error) => { |
||||
|
createMessage.error('修改失败'); |
||||
|
}); |
||||
|
}) |
||||
|
.markerPosition(() => { |
||||
|
// 发送请求 保存模型属性
|
||||
|
let editPinModelParameter = { |
||||
|
id: sn.ref, |
||||
|
labelName: newTitle, |
||||
|
}; |
||||
|
defHttp |
||||
|
.put( |
||||
|
{ |
||||
|
url: earthMapUrl.updateMapLabel, |
||||
|
params: editPinModelParameter, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then((res) => { |
||||
|
if (res.success) { |
||||
|
// 修改扩展文本
|
||||
|
sn.czmObject.pinBuilder.extText = newTitle; |
||||
|
createMessage.success('修改成功'); |
||||
|
} else { |
||||
|
createMessage.error('修改失败'); |
||||
|
} |
||||
|
}) |
||||
|
.catch((error) => { |
||||
|
createMessage.error('修改失败'); |
||||
|
}); |
||||
|
}) |
||||
|
.run(); |
||||
|
}, 150); |
||||
|
|
||||
|
// 属性面板确定按钮方法
|
||||
|
export function propertiesWindowConfirm(propertiesWindow, sn, index) { |
||||
|
// 属性面板 所修改的模型
|
||||
|
let model: any = null; |
||||
|
if (sn.ref && !sn.ref.startsWith('node_')) { |
||||
|
model = sn; |
||||
|
} else { |
||||
|
model = sn.parent.children[index]; |
||||
|
} |
||||
|
|
||||
|
let modelData = model.czmObject; |
||||
|
// 转换方法
|
||||
|
let transform = window.Cesium.Math; |
||||
|
|
||||
|
// 修改模型属性后,提交到后台。先判断模型的节点,调用不同的接口
|
||||
|
handleNodeType(sn) |
||||
|
// 传感器
|
||||
|
.sensor(() => { |
||||
|
// 发送请求 保存模型属性
|
||||
|
let editSensorParams = { |
||||
|
eventSerialNum: model.ref, |
||||
|
lon: transform.toDegrees(modelData.xbsjPosition[0]).toFixed(5), |
||||
|
lat: transform.toDegrees(modelData.xbsjPosition[1]).toFixed(5), |
||||
|
height: modelData.xbsjPosition[2].toFixed(2), |
||||
|
yaw: transform.toDegrees(modelData.xbsjRotation[0]).toFixed(2), |
||||
|
pitch: transform.toDegrees(modelData.xbsjRotation[1]).toFixed(2), |
||||
|
roll: transform.toDegrees(modelData.xbsjRotation[2]).toFixed(2), |
||||
|
isShow: 1, |
||||
|
// 传感器类型
|
||||
|
modelType: '11', |
||||
|
// 事件类型
|
||||
|
eventType: 1, |
||||
|
}; |
||||
|
defHttp |
||||
|
.put( |
||||
|
{ |
||||
|
url: earthMapUrl.updateSensor, |
||||
|
params: editSensorParams, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then((res) => { |
||||
|
if (res.success) { |
||||
|
createMessage.success('修改成功'); |
||||
|
} else { |
||||
|
createMessage.error('修改失败: ' + res.message); |
||||
|
} |
||||
|
}); |
||||
|
}) |
||||
|
// 站点
|
||||
|
.modelCallback(() => { |
||||
|
let startNum = modelData.url.lastIndexOf('/') + 1; |
||||
|
let modelName = ''; |
||||
|
if (startNum > 0) { |
||||
|
modelName = modelData.url.substring(startNum, modelData.url.length); |
||||
|
} |
||||
|
// 发送请求 保存模型属性
|
||||
|
let editCameraSiteModelParameter = { |
||||
|
id: model.ref, |
||||
|
longitude: transform.toDegrees(modelData.xbsjPosition[0]).toFixed(6), |
||||
|
latitude: transform.toDegrees(modelData.xbsjPosition[1]).toFixed(6), |
||||
|
height: modelData.xbsjPosition[2], |
||||
|
yaw: transform.toDegrees(modelData.xbsjRotation[0]).toFixed(6), |
||||
|
pitch: transform.toDegrees(modelData.xbsjRotation[1]).toFixed(6), |
||||
|
roll: transform.toDegrees(modelData.xbsjRotation[2]).toFixed(6), |
||||
|
modelUrl: modelName, |
||||
|
sitename: modelData.name, |
||||
|
}; |
||||
|
defHttp |
||||
|
.put( |
||||
|
{ |
||||
|
url: earthMapUrl.updateSite, |
||||
|
params: editCameraSiteModelParameter, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then((res) => { |
||||
|
if (res.success) { |
||||
|
modelData.pinBuilder.extText = modelData.name; |
||||
|
createMessage.success('修改成功'); |
||||
|
} else { |
||||
|
createMessage.error('修改失败'); |
||||
|
} |
||||
|
}); |
||||
|
}) |
||||
|
// 标志点
|
||||
|
.markerPosition(() => { |
||||
|
let pinImage = modelData.imageUrl; |
||||
|
const staticDomainURL = window._CONFIG['staticDomainURL'] + '/'; |
||||
|
// 去除 image 地址中的 staticDomainURL 链接
|
||||
|
let imageUri = pinImage.substring(pinImage.indexOf(staticDomainURL) + staticDomainURL.length, pinImage.length); |
||||
|
let editPinModelParameter = { |
||||
|
id: model.ref, |
||||
|
labelName: modelData.name, |
||||
|
labelLon: transform.toDegrees(modelData.position[0]).toFixed(5), |
||||
|
labelLat: transform.toDegrees(modelData.position[1]).toFixed(5), |
||||
|
labelHeight: modelData.position[2].toFixed(2), |
||||
|
labelImgUrl: imageUri, |
||||
|
}; |
||||
|
defHttp |
||||
|
.put( |
||||
|
{ |
||||
|
url: earthMapUrl.updateMapLabel, |
||||
|
params: editPinModelParameter, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then((res) => { |
||||
|
if (res.success) { |
||||
|
modelData.pinBuilder.extText = modelData.name; |
||||
|
createMessage.success('修改成功'); |
||||
|
} else { |
||||
|
createMessage.error('修改失败'); |
||||
|
} |
||||
|
}) |
||||
|
.catch((error) => { |
||||
|
createMessage.error('修改失败'); |
||||
|
}); |
||||
|
}) |
||||
|
.polylineCallBack(() => { |
||||
|
const submitData: any = {}; |
||||
|
const poistions = modelData.positions; |
||||
|
if (poistions.length <= 0) { |
||||
|
return; |
||||
|
} |
||||
|
submitData.id = model.ref; |
||||
|
submitData.name = modelData.name; |
||||
|
if (!modelData.customProp) { |
||||
|
submitData.lineCode = modelData.guid; |
||||
|
} |
||||
|
|
||||
|
submitData.isLoop = Number(modelData.loop); |
||||
|
submitData.isDepthCheck = Number(modelData.depthTest); |
||||
|
submitData.width = modelData.width; |
||||
|
submitData.interpolation = modelData.arcType; |
||||
|
submitData.positions = JSON.stringify(poistions); |
||||
|
switch (modelData.material.type) { |
||||
|
// 实线
|
||||
|
case 'XbsjColorMaterial': |
||||
|
submitData.materialType = 0; |
||||
|
// material.XbsjColorMaterial = {}
|
||||
|
submitData.color = JSON.stringify(modelData.material.XbsjColorMaterial.color); |
||||
|
submitData.intervalColor = null; |
||||
|
submitData.dashLength = 0; |
||||
|
submitData.dashStyle = 0; |
||||
|
break; |
||||
|
// 虚线
|
||||
|
case 'XbsjPolylineDashMaterial': |
||||
|
submitData.materialType = 1; |
||||
|
submitData.color = JSON.stringify(modelData.material.XbsjPolylineDashMaterial.color); |
||||
|
submitData.intervalColor = JSON.stringify(modelData.material.XbsjPolylineDashMaterial.gapColor); |
||||
|
submitData.dashLength = modelData.material.XbsjPolylineDashMaterial.dashLength; |
||||
|
submitData.dashStyle = modelData.material.XbsjPolylineDashMaterial.dashPattern; |
||||
|
// material.XbsjPolylineDashMaterial = {}
|
||||
|
// material.XbsjPolylineDashMaterial.dashLength = data.dashLength
|
||||
|
// material.XbsjPolylineDashMaterial.dashPattern = data.dashStyle
|
||||
|
break; |
||||
|
// 箭头线
|
||||
|
case 'XbsjPolylineArrowMaterial': |
||||
|
submitData.materialType = 2; |
||||
|
// material.XbsjPolylineArrowMaterial = {}
|
||||
|
submitData.color = JSON.stringify(modelData.material.XbsjPolylineArrowMaterial.color); |
||||
|
submitData.intervalColor = null; |
||||
|
submitData.dashLength = 0; |
||||
|
submitData.dashStyle = 0; |
||||
|
break; |
||||
|
// 轨迹线
|
||||
|
case 'XbsjODLineMaterial': |
||||
|
submitData.materialType = 3; |
||||
|
submitData.color = JSON.stringify(modelData.material.XbsjODLineMaterial.color); |
||||
|
submitData.intervalColor = null; |
||||
|
submitData.dashLength = 0; |
||||
|
submitData.dashStyle = 0; |
||||
|
submitData.cycleFrame = modelData.material.XbsjODLineMaterial.totoalFrameCount; |
||||
|
|
||||
|
// material.XbsjODLineMaterial = {}
|
||||
|
// material.XbsjODLineMaterial.color = JSON.parse(data.color)
|
||||
|
// material.XbsjODLineMaterial.totoalFrameCount = data.cycleFrame
|
||||
|
break; |
||||
|
} |
||||
|
defHttp |
||||
|
.put( |
||||
|
{ |
||||
|
url: earthMapUrl.updateMapLine, |
||||
|
params: submitData, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
.then((res) => { |
||||
|
if (res.success) { |
||||
|
createMessage.success('修改成功!', 2); |
||||
|
sn.title = submitData.name; |
||||
|
window.$earth.sceneTree.$refs['node_' + sn.ref].title = submitData.name; |
||||
|
} else { |
||||
|
createMessage.error('修改失败', 2); |
||||
|
} |
||||
|
}) |
||||
|
.catch((error) => { |
||||
|
createMessage.error('修改失败', 2); |
||||
|
}); |
||||
|
}) |
||||
|
.run(); |
||||
|
} |
@ -0,0 +1,36 @@ |
|||||
|
/** |
||||
|
* 设置按钮颜色状态 |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
import { defHttp } from '/@/utils/http/axios'; |
||||
|
import { useUserStore } from '/@/store/modules/user'; |
||||
|
import { useEarthMapStore } from '/@/store/modules/earthMap'; |
||||
|
|
||||
|
import circleDot2 from '@/assets/earthMap/circleDot2.png'; |
||||
|
import circleDot1 from '@/assets/earthMap/circleDot1.png'; |
||||
|
import circleDot3 from '@/assets/earthMap/circleDot3.png'; |
||||
|
let userStore = useUserStore(); |
||||
|
let store = useEarthMapStore(); |
||||
|
|
||||
|
export default function setIconByRef(ref, el) { |
||||
|
const status = store.statusByNodeId.get(ref); |
||||
|
if (status != undefined && status != null) { |
||||
|
let img = store.imgByRef.get(ref); |
||||
|
const icon = el.children[0].children[2]; |
||||
|
if (!img) { |
||||
|
img = document.createElement('img'); |
||||
|
store.imgByRef.set(ref, img); |
||||
|
} |
||||
|
if (icon.nodeName == 'I') { |
||||
|
icon.replaceWith(img); |
||||
|
} |
||||
|
if (status == 1) { |
||||
|
img.src = circleDot2; |
||||
|
} else if (status == 0) { |
||||
|
img.src = circleDot1; |
||||
|
} else { |
||||
|
img.src = circleDot3; |
||||
|
} |
||||
|
img.setAttribute('style', 'width:16px;height:16px;margin-top:7px'); |
||||
|
} |
||||
|
} |
@ -0,0 +1,225 @@ |
|||||
|
/** |
||||
|
* 用于EarthComp.vue |
||||
|
*/ |
||||
|
import { defHttp } from '/@/utils/http/axios'; |
||||
|
import { useUserStore } from '/@/store/modules/user'; |
||||
|
import { useEarthMapStore } from '/@/store/modules/earthMap'; |
||||
|
import { earthMapUrl } from '@/api/earth/earthMap' |
||||
|
|
||||
|
let userStore = useUserStore(); |
||||
|
let store = useEarthMapStore(); |
||||
|
|
||||
|
export function setLabelStatus(device, labelCode, id, code) { |
||||
|
const args = { |
||||
|
device: device, |
||||
|
code: code, // 命令码:0-撤防 1-布防 2-状态查询 3-其他预留
|
||||
|
deviceType: 2, // 设备类型:1-探测主机 2-探测器 3-串口设备 4-预留
|
||||
|
deviceSn: labelCode, // 设备条码
|
||||
|
}; |
||||
|
// console.log("device",device);
|
||||
|
|
||||
|
if (device.deviceType_dictText.indexOf('微波探测器') > -1) { |
||||
|
// console.log("微波探测器");
|
||||
|
|
||||
|
return defHttp.post({ url: '/military/netty/microwaveDetector/maintenance', params: args }, { isTransformResponse: false }) |
||||
|
.then((response) => { |
||||
|
if (response.success) { |
||||
|
const status = response; |
||||
|
store.statusByNodeId.set(id, status); |
||||
|
} else { |
||||
|
store.statusByNodeId.set(id, -10); |
||||
|
} |
||||
|
return response; |
||||
|
}) |
||||
|
.catch((error) => { |
||||
|
store.statusByNodeId.set(id, -10); |
||||
|
return error; |
||||
|
}) |
||||
|
|
||||
|
} else if (device.deviceType_dictText.indexOf('雷达') > -1) { |
||||
|
store.statusByNodeId.set(id, 1); |
||||
|
//雷达周界防区列表
|
||||
|
return defHttp |
||||
|
.get({ url: earthMapUrl.perimeterRegionList, params: { regionType: 2 } }, { isTransformResponse: false }) |
||||
|
.then( |
||||
|
(res) => { |
||||
|
// console.log(res);
|
||||
|
if (res.success) { |
||||
|
// (未测试)
|
||||
|
res.result.forEach((element) => { |
||||
|
if (element.id == id) { |
||||
|
// this.statusByNodeId.set(id, element.isOnline)
|
||||
|
} |
||||
|
}); |
||||
|
} else { |
||||
|
store.statusByNodeId.set(id, 1); |
||||
|
} |
||||
|
return res; |
||||
|
}, |
||||
|
(err) => { |
||||
|
store.statusByNodeId.set(id, 1); |
||||
|
return err; |
||||
|
} |
||||
|
) |
||||
|
.catch((err) => { |
||||
|
store.statusByNodeId.set(id, 1); |
||||
|
return err; |
||||
|
}); |
||||
|
} |
||||
|
return Promise.resolve("未知错误"); |
||||
|
} |
||||
|
|
||||
|
export function setAllLabelStatus(selectRef, item, wbUnifiedResponse) { |
||||
|
|
||||
|
//监控点
|
||||
|
if (selectRef.startsWith('monitor')) { |
||||
|
let grandsons: any = []; |
||||
|
const childs = item.children; |
||||
|
for (const child of childs) { |
||||
|
const grandson1 = child.children; |
||||
|
if (grandson1 && grandson1.length > 0) { |
||||
|
grandsons = grandsons.concat(grandson1); |
||||
|
} |
||||
|
} |
||||
|
for (const grandson of grandsons) { |
||||
|
const xbsjObject = grandson._inner.sn; |
||||
|
const ref = xbsjObject.ref; |
||||
|
if (ref.startsWith('camera_')) { |
||||
|
const state = store.statusByNodeId.get(ref); |
||||
|
if (state == 1) { |
||||
|
store.statusByNodeId.set(ref, 0); |
||||
|
const img = store.imgByRef.get(ref); |
||||
|
img.src = require('@/assets/earthMap/circleDot1.png'); |
||||
|
} else if (state == 0) { |
||||
|
store.statusByNodeId.set(ref, 1); |
||||
|
const img = store.imgByRef.get(ref); |
||||
|
img.src = require('@/assets/earthMap/circleDot1.png'); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
//微波
|
||||
|
else if (selectRef.startsWith('wbList')) { |
||||
|
const parentNode = item.parent; |
||||
|
let areaCode = null; |
||||
|
if (parentNode) { |
||||
|
const falseNodeRef = item.parent._inner.sn.ref; |
||||
|
const nodeRef = falseNodeRef.split('_')[1]; |
||||
|
const trueNode = window.$earth.sceneTree.$refs[nodeRef]; |
||||
|
areaCode = trueNode.czmObject.customProp; |
||||
|
} |
||||
|
const childs1 = item.children; |
||||
|
if (!childs1 || childs1.length < 0) { |
||||
|
return; |
||||
|
} |
||||
|
const length = childs1.length; |
||||
|
let index = -1; |
||||
|
for (const child of childs1) { |
||||
|
index++; |
||||
|
let xbsjObject = child._inner.sn; |
||||
|
let jsonObj = JSON.parse(xbsjObject.czmObject.customProp); |
||||
|
let deviceId = jsonObj.deviceId; |
||||
|
let device = store.hostDeviceMapById.get(deviceId); |
||||
|
if (!device) { |
||||
|
console.error('主机设备为null'); |
||||
|
continue; |
||||
|
} |
||||
|
const args = { |
||||
|
device: device, |
||||
|
isDefence: wbUnifiedResponse, |
||||
|
defenceArea: areaCode, |
||||
|
detectorList: null, |
||||
|
}; |
||||
|
defHttp |
||||
|
.post( |
||||
|
{ |
||||
|
url: earthMapUrl.setDefenseArea, |
||||
|
params: args, |
||||
|
}, |
||||
|
{ isTransformResponse: false } |
||||
|
) |
||||
|
// postAction(this.url.setDefenseArea, args)
|
||||
|
.then((response) => { |
||||
|
if (!response.success) { |
||||
|
return; |
||||
|
} else { |
||||
|
for (let i = index; i < length; i++) { |
||||
|
const child1 = childs1[i]; |
||||
|
const xbsjObject1 = child1._inner.sn; |
||||
|
const ref1 = xbsjObject1.ref; |
||||
|
if (ref1 && ref1.length > 0) { |
||||
|
const state1 = store.statusByNodeId.get(ref1); |
||||
|
if (state1 == 0 && wbUnifiedResponse) { |
||||
|
store.statusByNodeId.set(ref1, 1); |
||||
|
const img1 = store.imgByRef.get(ref1); |
||||
|
if (!img1) return; |
||||
|
img1.src = require('@/assets/earthMap/circleDot2.png'); |
||||
|
} else if (state1 == 1 && !wbUnifiedResponse) { |
||||
|
store.statusByNodeId.set(ref1, 0); |
||||
|
const img1 = store.imgByRef.get(ref1); |
||||
|
if (!img1) return; |
||||
|
img1.src = require('@/assets/earthMap/circleDot1.png'); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
console.log(response); |
||||
|
}); |
||||
|
break; |
||||
|
} |
||||
|
} else if (selectRef.startsWith('nodeSecondary')) { |
||||
|
const childs1 = item.children; |
||||
|
if (!childs1 || childs1.length < 0) { |
||||
|
return; |
||||
|
} |
||||
|
for (const child of childs1) { |
||||
|
let xbsjObject = child._inner.sn; |
||||
|
let jsonObj = JSON.parse(xbsjObject.czmObject.customProp); |
||||
|
let deviceId = jsonObj.deviceId; |
||||
|
let device = store.hostDeviceMapById.get(deviceId); |
||||
|
if (!device) { |
||||
|
console.error('主机设备为null'); |
||||
|
continue; |
||||
|
} |
||||
|
let regionIdList: any = []; |
||||
|
if (item.children.length > 0) { |
||||
|
item.children.forEach((element) => { |
||||
|
regionIdList.push(element._inner.sn.ref); |
||||
|
}); |
||||
|
} |
||||
|
const args = { |
||||
|
regionIdList: regionIdList, // 周界防区区域ID列表(雷达设备列表的ID)
|
||||
|
regionStatus: wbUnifiedResponse ? 1 : 0, // 布防状态 0 - 未布防 1 - 布防
|
||||
|
defenceRule: { |
||||
|
// 布防规则
|
||||
|
startTime: 'yyyy-MM-dd HH:mm:ss', // 布防开始时间 每日循环情况下只包含时分秒,格式:"HH:mm:ss" 非每日循环情况下包含年月日、时分秒,格式:"yyyy-MM-dd HH:mm:ss"
|
||||
|
endTime: 'yyyy-MM-dd HH:mm:ss', // 布防结束时间 每日循环情况下只包含时分秒,格式:"HH:mm:ss" 非每日循环情况下包含年月日、时分秒,格式:"yyyy-MM-dd HH:mm:ss"
|
||||
|
dailyCycle: true, // 每日循环布防 true - 是 false - 否
|
||||
|
}, |
||||
|
}; |
||||
|
// putAction(this.url.perimeterControl,{})
|
||||
|
console.log(device, store.statusByNodeId, xbsjObject); |
||||
|
let ref1 = xbsjObject.ref; |
||||
|
let state1 = store.statusByNodeId.get(ref1); |
||||
|
//一键布防撤防测试使用
|
||||
|
if (wbUnifiedResponse) { |
||||
|
state1 = 0; |
||||
|
} else { |
||||
|
state1 = 1; |
||||
|
} |
||||
|
if (state1 == 0 && wbUnifiedResponse) { |
||||
|
store.statusByNodeId.set(ref1, 1); |
||||
|
const img1 = store.imgByRef.get(ref1); |
||||
|
if (!img1) return; |
||||
|
img1.src = require('@/assets/earthMap/circleDot2.png'); |
||||
|
} else if (state1 == 1 && !wbUnifiedResponse) { |
||||
|
store.statusByNodeId.set(ref1, 0); |
||||
|
const img1 = store.imgByRef.get(ref1); |
||||
|
if (!img1) return; |
||||
|
console.log(img1); |
||||
|
img1.src = require('@/assets/earthMap/circleDot1.png'); |
||||
|
} |
||||
|
// break
|
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
Loading…
Reference in new issue