Browse Source

1.modelTool

-增加绑定--推测 非原生面板属性(区域选择器)改变 并不能触发 OK方法
2.getLineInfo 初始化加入sceneId
3.seneIdTreeSelect 改用window.$earth.getObject(props.currentModel.xbsjGuid); 修改场景(区域id)
   -不能与prop双向绑定
4.sceneTreePopContextMenu 右键图层修改功能
5.添加防区 插入世界树
master
DIAMOND 11 months ago
parent
commit
ef0e7848e2
  1. 28
      src/components/earthMap/Toolbar.vue
  2. 18
      src/components/earthMap/components/seneIdTreeSelect.vue
  3. 25
      src/components/earthMap/toolbar/AddModelWin.vue
  4. 2
      src/utils/earthMap/getCameraInfo.ts
  5. 6
      src/utils/earthMap/getLineInfo.ts
  6. 2
      src/utils/earthMap/handleNodeType.ts
  7. 124
      src/utils/earthMap/sceneTreePopContextMenu.ts
  8. 4
      src/views/earthMap/edit/EarthComp.vue
  9. 2
      src/views/military/modules/earthMap/msMapLine/MsMapLineList.vue
  10. 2
      src/views/military/modules/equipment/camera/MsCameraSite.data.ts
  11. 4
      src/views/military/modules/equipment/camera/MsCameraSiteList.vue
  12. 6
      src/views/military/modules/equipment/camera/components/MsCameraSiteForm.vue
  13. 2
      src/views/military/modules/equipmentManage/videoMonitorEquInfo/cameraManage/CameraSet.vue
  14. 2
      src/views/military/modules/equipmentManage/videoMonitorEquInfo/cameraManage/CameraSetDemo.vue

28
src/components/earthMap/Toolbar.vue

@ -74,7 +74,7 @@
<div id="addPopModal" class="popModal" style="top: 355px">
<ul>
<p @click="openCreateModel('addModelWin')">添加模型</p>
<p @click="addArea()">添加区</p>
<p @click="addArea()">添加</p>
<p @click="addRadar()">添加雷达</p>
<p @click="addMonitorPoint()">添加监控点</p>
<p @click="addWave()">添加微波探测</p>
@ -264,12 +264,12 @@
drawShapeShow.value = res.show;
drawShapePackage.value = res;
});
/// addArea
/// addArea
$mitt.on('msMapLineHandler', function (res: any) {
// console.log("msMapLineHandlerres",res);
addArea(res)
});
/// addMonitorPoint
/// addMonitorPoint
$mitt.on('msCameraSiteHandle', function (res: any) {
// console.log("msMapLineHandlerres",res);
addMonitorPoint(res)
@ -1103,11 +1103,11 @@
function addRadar() {
addRadarComShow.value = true;
}
// , msMapLineHandler
// , msMapLineHandler
function addArea(msMapLineHandler = null) {
// console.log("",msMapLineHandler);
// console.log("",msMapLineHandler);
$mitt.emit('drawShapeShow', { show: true, title: '区创建工具', from: 'addArea' });
$mitt.emit('drawShapeShow', { show: true, title: '区创建工具', from: 'addArea' });
$mitt.on('addAreaFinished', (t: any) => {
// console.log('addAreaFinished', t);
//t drawShape
@ -1151,7 +1151,7 @@
}
/**
* @params 需要调用 addArea 方法进行绘图获取坐标点position
* @params msMapLineHandler标识 后台区管理调用
* @params msMapLineHandler标识 后台区管理调用
*/
function addPolyline(positions: any = null, msMapLineHandler:any =null) {
// console.log('positions', positions);
@ -1159,7 +1159,7 @@
//
// cancel();
//
//
const currentModel = new window.XE.Obj.Polyline(window.$earth);
//
const objConfig: any = {
@ -1167,7 +1167,7 @@
};
/**
* 后台区管理调用
* 后台区管理调用
* */
// if (typeof msMapLineHandler === 'object' && Object.keys(msMapLineHandler).length != 0) {
// console.log("");
@ -1187,12 +1187,12 @@
// ui
const earthUI = window.$uia;
// console.log("msMapLineHandler",msMapLineHandler);
//return
//return
if(msMapLineHandler){
$mitt.emit('toMsMapLineForm',currentModel)
return
}
// ui
// ui
earthUI.showPropertyWindow(currentModel);
nextTick(() => {
// ui
@ -1291,7 +1291,7 @@
submitData.cycleFrame = currentModel.material.XbsjODLineMaterial.totoalFrameCount;
break;
}
//
//
defHttp
.post({ url: '/military/msMapLine/add', params: submitData }, { isTransformResponse: false })
.then((response) => {
@ -1352,11 +1352,11 @@
//
window.$earth.sceneTree.$refs.areas.children.push(node);
} else {
throw '新增区数据出错';
throw '新增区数据出错';
}
})
.catch((e) => {
createMessage.error('新增区数据出错', 2);
createMessage.error('新增区数据出错', 2);
});
};
//

18
src/components/earthMap/components/seneIdTreeSelect.vue

@ -2,10 +2,13 @@
seneIdTreeSelect.vue
场景ID树选择组件
电子地图专用
功能概述原生的折现属性面板 添加一个场景选择器功能用于决定防区添加到哪个区域下
功能概述原生的折现属性面板 添加一个场景选择器功能用于决定防区添加到哪个区域场景
-->
<template>
<ApiTreeSelect :api="sceneIdTree" v-model:value="currentModel.sceneId" placeholder="请选择所属区域" :disabled="disabled">
<ApiTreeSelect :api="sceneIdTree" v-model:value="sceneId" placeholder="请选择所属区域"
:disabled="disabled"
@change="(value: any) => handleChange(value)"
>
</ApiTreeSelect>
</template>
@ -34,12 +37,19 @@ const props = defineProps({
default: {},
}
})
let sceneId = ref<string>();
onMounted(()=>{
console.log("currentModelaaaaaa",props.currentModel);
// console.log("currentModelaaaaaa",props.currentModel);
// console.log("currentModelaaaaaa",props);
// console.log("proxy",proxy);
sceneId.value = props.currentModel.sceneId? props.currentModel.sceneId: "";
})
function handleChange(params:type) {
// console.log("params",params);
let model = window.$earth.getObject(props.currentModel.xbsjGuid);
model.sceneId = params;
}
//
const sceneIdTree = () => defHttp.get<Recordable[]>

25
src/components/earthMap/toolbar/AddModelWin.vue

@ -744,7 +744,7 @@
t.creating = true;
// t
window.XE.MVVM.watch(t, 'creating', (n: any) => {
console.log('creating', n);
// console.log('creating', n);
if (n == false) {
//
let positions: any = [];
@ -820,13 +820,15 @@
// let fatherNode = el.children[2].children[0].children[0]
// let insertBeforeWhich = el.children[2].children[0].children[0].children[1];
// fatherNode.insertBefore(divCustom,insertBeforeWhich);
//
//
let divCustom = document.createElement("div");
divCustom.setAttribute("data-v-74b863e5", "");
divCustom.setAttribute("style", "position: relative;");
divCustom.setAttribute("class", "flatten");
divCustom.setAttribute("style", "display: flex; margin-bottom: 20px;");
// divCustom.setAttribute("style", "position: relative;");
divCustom.innerHTML =
`
<label data-v-74b863e5="">所属场景</label>
<label data-v-74b863e5="">所属区域</label>
`
let instance: ReturnType<typeof createVNode> | null = null;
// ,
@ -859,6 +861,8 @@
}
//
submitData.name = currentModel.name;
//
submitData.sceneId = currentModel.sceneId;
// 线
submitData.lineCode = currentModel.guid;
//
@ -935,6 +939,10 @@
.then((response) => {
//
if (response.success) {
// id
currentModel.id = response.result;
//
const parent = window.$earth.sceneTree.$refs[currentModel.sceneId];
//
const leaf = new window.XE.SceneTree.Leaf(currentModel);
//
@ -964,7 +972,7 @@
// ref node_ref ref
const node = {
ref: 'node_' + response.result,
title: currentModel.name,
title: '<防区>'+ currentModel.name,
expand: false,
children: [
{
@ -988,7 +996,10 @@
],
};
//
window.$earth.sceneTree.$refs.areas.children.push(node);
// window.$earth.sceneTree.$refs.areas.children.push(node);
parent.children.push(node);
//
createMessage.success('添加成功!', 2);
} else {
throw '新增区域数据出错';
}
@ -1103,7 +1114,7 @@
yaw: rotation.value[0], // x
pitch: rotation.value[1], // y
roll: rotation.value[2], // z
lineId: selectArea.value.id ? selectArea.value.id : null, // id
lineId: selectArea.value.id ? selectArea.value.id : null, // id
state: 1, //
modelUrl: modelName, // url
scale: currentModel.value.scale ? currentModel.value.scale : 1, // 1

2
src/utils/earthMap/getCameraInfo.ts

@ -1,5 +1,5 @@
/**
*
*
* EarthComp.vue
*/
import { defHttp } from '/@/utils/http/axios';

6
src/utils/earthMap/getLineInfo.ts

@ -14,7 +14,7 @@ import $ from 'jquery';
let userStore = useUserStore();
let store = useEarthMapStore();
export default function getLineInfo(models, type) {
console.log("加载区域");
// console.log("加载防区");
return new Promise((resolve, reject) => {
//请求线路信息
@ -66,6 +66,8 @@ export default function getLineInfo(models, type) {
lineOptions.loop = Boolean(data.isLoop);
lineOptions.depthTest = Boolean(data.isDepthCheck);
lineOptions.arcType = data.interpolation;
lineOptions.sceneId = data.sceneId;
lineOptions.id = data.id;
let material: any = {};
switch (data.materialType) {
// 实线
@ -129,6 +131,8 @@ export default function getLineInfo(models, type) {
lineOptions.loop = Boolean(element.isLoop);
lineOptions.depthTest = Boolean(element.isDepthCheck);
lineOptions.arcType = element.interpolation;
lineOptions.sceneId = element.sceneId;
lineOptions.id = element.id;
let material: any = {};
switch (element.materialType) {
// 实线

2
src/utils/earthMap/handleNodeType.ts

@ -30,7 +30,7 @@ export default class HandleNodeType {
return this;
}
// 区回调
// 区回调
polylineCallBack(callback) {
this.#polylineCallBack = callback;
return this;

124
src/utils/earthMap/sceneTreePopContextMenu.ts

@ -11,7 +11,8 @@ 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 { createVNode, nextTick, render } from 'vue';
import seneIdTreeSelect from '/@/components/earthMap/components/seneIdTreeSelect.vue';
import _ from 'lodash';
import $mitt from '@/utils/earthMap/mitt';
import $ from 'jquery';
@ -156,7 +157,7 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
createMessage.error('克隆失败');
});
})
//区回调
//区回调
.polylineCallBack(() => {
// debugger
const currentModel = new window.XE.Obj.Polyline(window.$earth);
@ -172,6 +173,8 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
submitData.width = sn.czmObject.width;
submitData.interpolation = sn.czmObject.arcType;
submitData.positions = JSON.stringify(poistions);
submitData.sceneId = sn.czmObject.sceneId;
submitData.material = JSON.stringify(sn.czmObject.material);
switch (sn.czmObject.material.type) {
// 实线
case 'XbsjColorMaterial':
@ -223,6 +226,8 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
currentModel.width = submitData.width;
currentModel.arcType = submitData.interpolation;
currentModel.positions = JSON.parse(submitData.positions);
currentModel.sceneId = submitData.sceneId
currentModel.material = JSON.stringify(submitData.material);
switch (sn.czmObject.material.type) {
// 实线
case 'XbsjColorMaterial':
@ -253,12 +258,12 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
leaf.ref = response.result;
sn.parent.children.push(leaf);
} else {
throw '克隆区数据出错';
throw '克隆区数据出错';
}
})
.catch((e) => {
currentModel.destroy();
createMessage.error('克隆区数据出错', 3);
createMessage.error('克隆区数据出错', 3);
});
})
//监控点
@ -390,7 +395,7 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
// {
// "regionIdList": [
// 2
// ], // 周界防区区ID列表(雷达设备列表的ID)
// ], // 周界防区区ID列表(雷达设备列表的ID)
// "regionStatus": 0, // 布防状态 0 - 未布防 1 - 布防
// "defenceRule": { // 布防规则
// "startTime": "yyyy-MM-dd HH:mm:ss", // 布防开始时间 每日循环情况下只包含时分秒,格式:"HH:mm:ss" 非每日循环情况下包含年月日、时分秒,格式:"yyyy-MM-dd HH:mm:ss"
@ -499,7 +504,7 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
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';
@ -541,6 +546,8 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
let tempData = sn.czmObject.toAllJSON();
// 设置属性面板的确定按钮方法
// 显示属性面板
console.log("sn", sn);
earthUI.showPropertyWindow(sn.czmObject);
nextTick(() => {
// 模型窗口
@ -548,6 +555,8 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
// 找到该模型设置属性窗口
const modelToolKey = windowsAttrList.filter((f) => f.indexOf(sn.czmObject.guid || sn.guid) > -1)[0];
const modelTool = mainUI.$refs[modelToolKey][0];
console.log("modelTool",modelTool);
// 对应处理方法
handleNodeType(sn)
// 感应器
@ -558,11 +567,41 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
.default(() => {
// 启用模型名称编辑
modelTool.$el.getElementsByClassName('xbsj-flatten')[0].children[0].children[1].removeAttribute('disabled');
})
.polylineCallBack(() => {
// 防区编辑
// 加入区域场景选择器
// console.log("区域编辑", modelTool.$el);
let divCustom = document.createElement("div");
divCustom.setAttribute("data-v-74b863e5", "");
divCustom.setAttribute("class", "flatten");
divCustom.setAttribute("style", "display: flex; margin-bottom: 20px;");
// divCustom.setAttribute("style", "position: relative;");
divCustom.innerHTML =
`
<label data-v-74b863e5=""></label>
`
let instance: ReturnType<typeof createVNode> | null = null;
// 创建虚拟节点,传入模型的数据
// let currentModel = window.$earth.getObject(sn.czmObject.xbsjGuid);
console.log("currentModel",sn.czmObject);
instance = createVNode(seneIdTreeSelect, { currentModel: sn.czmObject});
// 渲染
render(instance, divCustom);
// 父节点
let fatherNode = modelTool.$el.children[2].children[0].children[0]
// 插入位置
let insertBeforeWhich = modelTool.$el.children[2].children[0].children[0].children[1];
fatherNode.insertBefore(divCustom, insertBeforeWhich);
})
.run();
// modelTool
modelTool.ok = () => {
// 增加绑定--推测 非原生面板属性(区域选择器)改变 并不能触发 OK方法
modelTool.$el.children[3].children[1].onclick = modelTool.ok = () => {
// console.log("modelTool.ok");
// 确定时清除这个事件
$mitt.off('windowCancel');
// 保存前端数据
@ -576,7 +615,7 @@ export default function sceneTreePopContextMenu({ item, vueObject }, earthUI, th
const sceneObject = new XE.SceneTree.Leaf(modelToolObj);
earthUI.addSceneObject(sceneObject);
}
// 保存到数据库
propertiesWindowConfirm(modelTool, sn, index);
// 关闭属性面板
@ -667,18 +706,18 @@ export const handleChangeTitle = _.debounce(function (options) {
sitename: newTitle,
};
defHttp.put(
{
url: earthMapUrl.updateSite,
params: editCameraSiteModelParameter,
},
{ isTransformResponse: false }
).then((res) => {
if (res.success) {
createMessage.success('修改成功');
} else {
createMessage.error('修改失败');
}
})
{
url: earthMapUrl.updateSite,
params: editCameraSiteModelParameter,
},
{ isTransformResponse: false }
).then((res) => {
if (res.success) {
createMessage.success('修改成功');
} else {
createMessage.error('修改失败');
}
})
.catch((error) => {
createMessage.error('修改失败');
});
@ -849,6 +888,8 @@ export function propertiesWindowConfirm(propertiesWindow, sn, index) {
submitData.width = modelData.width;
submitData.interpolation = modelData.arcType;
submitData.positions = JSON.stringify(poistions);
submitData.material = JSON.stringify(modelData.material);
submitData.sceneId = modelData.sceneId;
switch (modelData.material.type) {
// 实线
case 'XbsjColorMaterial':
@ -893,26 +934,29 @@ export function propertiesWindowConfirm(propertiesWindow, sn, index) {
// 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);
});
console.log("submitData",submitData);
console.log("modelData",modelData);
// 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();
}

4
src/views/earthMap/edit/EarthComp.vue

@ -885,8 +885,8 @@ import { nextTick } from 'vue';
// console.log('models',models);
//
// console.log("");
//
// console.log("");
if (this.PropsGetLineInfoShow) await getLineInfo(models, type);
//

2
src/views/military/modules/earthMap/msMapLine/MsMapLineList.vue

@ -2,7 +2,7 @@
地图线路管理
目录位置三维地图管理 -> 地图线路管理防区管理
功能概述管理所在场景下的区如雷达防区测试区
功能概述管理所在区域场景下的如雷达防区测试
-->
<template>
<div>

2
src/views/military/modules/equipment/camera/MsCameraSite.data.ts

@ -6,7 +6,7 @@ import { render } from '/@/utils/common/renderUtils';
export const columns: BasicColumn[] = [
{
title: '区',
title: '区',
align: "center",
// dataIndex: 'lineId_dictText',
dataIndex: 'lineName',

4
src/views/military/modules/equipment/camera/MsCameraSiteList.vue

@ -11,9 +11,9 @@
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :lg="8">
<a-form-item label="区名称" name="lineId">
<a-form-item label="区名称" name="lineId">
<!-- <JInput placeholder="请输入序号" v-model:value="queryParam.sitecode"></JInput> -->
<a-select v-model:value="queryParam.lineId" style="width: 300px" placeholder="请选择区域名称" @select="searchQuery" allowClear>
<a-select v-model:value="queryParam.lineId" style="width: 300px" placeholder="请选防区名称" @select="searchQuery" allowClear>
<a-select-option v-for="(item, index) in lineSelect" :value="item.id" :key="item.id">
{{ item.name }}
</a-select-option>

6
src/views/military/modules/equipment/camera/components/MsCameraSiteForm.vue

@ -3,14 +3,14 @@
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-col :span="24">
<a-form-item label="区" v-bind="validateInfos.lineId">
<a-form-item label="区" v-bind="validateInfos.lineId">
<!-- <j-dict-select-tag v-model:value="formData.lineId" dictCode="" placeholder="" :disabled="disabled"/> -->
<a-select
v-model:value="formData.lineId"
style="width: 300px"
@change="changeLineValue"
:disabled="disabled"
placeholder="请选择所属区"
placeholder="请选择所属区"
>
<a-select-option v-for="(item, index) in lineSelect" :value="item.id" :key="item.id">
{{ item.name }}
@ -130,7 +130,7 @@
sitename: [{ required: true, message: '请输入站点名称!' }],
longitude: [{ required: true, message: '请输入经度!' }],
latitude: [{ required: true, message: '请输入纬度!' }],
lineId: [{ required: true, message: '请选择所属区!' }],
lineId: [{ required: true, message: '请选择所属区!' }],
};
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true });

2
src/views/military/modules/equipmentManage/videoMonitorEquInfo/cameraManage/CameraSet.vue

@ -2,7 +2,7 @@
相机管理
目录位置设备管理 -> 视频监控设备信息 -> 相机管理
功能概述管理所有区下的相机rtsp地址安装位置等
功能概述管理所有区下的相机rtsp地址安装位置等
-->
<template>
<div style="background: #fff">

2
src/views/military/modules/equipmentManage/videoMonitorEquInfo/cameraManage/CameraSetDemo.vue

@ -2,7 +2,7 @@
相机管理
目录位置设备管理 -> 视频监控设备信息 -> 相机管理
功能概述管理所有区下的相机rtsp地址安装位置等
功能概述管理所有区下的相机rtsp地址安装位置等
-->
<template>
<div style="background: #fff">

Loading…
Cancel
Save