提交添加战术计算、添加头部设置
This commit is contained in:
@ -615,10 +615,16 @@ export default {
|
||||
},
|
||||
// 多边形统计
|
||||
{
|
||||
fun: this.goodsSearchPolgon,
|
||||
name: "goodsSearchPolgon",
|
||||
svg: "goodsSearchPolgon",
|
||||
fun: this.goodsSearchPolygon,
|
||||
name: "goodsSearchPolygon",
|
||||
svg: "goodsSearchPolygon",
|
||||
},
|
||||
// 战术计算
|
||||
// {
|
||||
// fun: this.tacticalCalculation,
|
||||
// name: "tacticalCalculation",
|
||||
// svg: "tacticalCalculation",
|
||||
// },
|
||||
// 分屏
|
||||
],
|
||||
key: "tool",
|
||||
|
||||
@ -76,7 +76,7 @@ const secondMenuFun = {
|
||||
methods: {
|
||||
// 海东1021
|
||||
// 物资搜索
|
||||
goodsSearchPolgon() {
|
||||
goodsSearchPolygon() {
|
||||
if (window.checkAuthIsValid) {
|
||||
let draw = new YJ.Draw.DrawPolygon(window.Earth1);
|
||||
draw.start((err, params) => {
|
||||
@ -94,6 +94,9 @@ const secondMenuFun = {
|
||||
});
|
||||
}
|
||||
},
|
||||
tacticalCalculation() {
|
||||
this.$changeComponentShow(".tacticalBox", true);
|
||||
},
|
||||
renderCanvas(nodes) {
|
||||
console.log("nodes", nodes);
|
||||
|
||||
@ -1840,6 +1843,9 @@ const secondMenuFun = {
|
||||
// console.log('layer2',layer2)
|
||||
let Draw = new YJ.Draw.DrawPolygon(window.Earth1);
|
||||
Draw.start((err, positions) => {
|
||||
if(!positions || positions.length < 3) {
|
||||
return
|
||||
}
|
||||
let source_id = this.$md5(new Date().getTime() + "飞线");
|
||||
let option = {
|
||||
id: source_id,
|
||||
|
||||
@ -80,7 +80,7 @@ const secondMenuFun = {
|
||||
methods: {
|
||||
// 海东1021
|
||||
// 物资搜索
|
||||
goodsSearchPolgon() {
|
||||
goodsSearchPolygon() {
|
||||
if (window.checkAuthIsValid) {
|
||||
let draw = new YJ.Draw.DrawPolygon(window.Earth1);
|
||||
draw.start((err, params) => {
|
||||
|
||||
@ -763,9 +763,9 @@ export default {
|
||||
},
|
||||
// 多边形统计
|
||||
{
|
||||
fun: this.goodsSearchPolgon,
|
||||
name: "goodsSearchPolgon",
|
||||
svg: "goodsSearchPolgon",
|
||||
fun: this.goodsSearchPolygon,
|
||||
name: "goodsSearchPolygon",
|
||||
svg: "goodsSearchPolygon",
|
||||
// 是否移入
|
||||
isMoveIn: false,
|
||||
|
||||
|
||||
@ -7,13 +7,13 @@
|
||||
<el-input v-model="addForm.cameraName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设备IP" prop="ip">
|
||||
<el-input v-model="addForm.ip"></el-input>
|
||||
<el-input v-model="addForm.ip" placeholder="192.168.110.29"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="设备端口" prop="port">
|
||||
<el-input v-model="addForm.port"></el-input>
|
||||
<el-input v-model="addForm.port" placeholder="554"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户名" prop="userName">
|
||||
<el-input v-model="addForm.userName"></el-input>
|
||||
<el-input v-model="addForm.userName" placeholder="admin"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="passWord">
|
||||
<el-input v-model="addForm.passWord"></el-input>
|
||||
@ -203,9 +203,9 @@ export default {
|
||||
pEditDialogVisible: false,
|
||||
editForm: {},
|
||||
addForm: {
|
||||
ip: "192.168.110.29",
|
||||
port: "554",
|
||||
userName: "admin",
|
||||
ip: "",
|
||||
port: "",
|
||||
userName: "",
|
||||
channel: "1",
|
||||
},
|
||||
peopleDataList: [],
|
||||
@ -271,6 +271,9 @@ export default {
|
||||
type: "success",
|
||||
message: "删除成功!",
|
||||
});
|
||||
if(this.peopleDataList.length==1 && this.page.page>1) {
|
||||
this.page.page--
|
||||
}
|
||||
this.getList();
|
||||
}
|
||||
})
|
||||
@ -377,9 +380,9 @@ export default {
|
||||
show() {
|
||||
// this.getAreaList();
|
||||
this.addForm = {
|
||||
ip: "192.168.110.29",
|
||||
port: "554",
|
||||
userName: "admin",
|
||||
ip: "",
|
||||
port: "",
|
||||
userName: "",
|
||||
channel: "1",
|
||||
};
|
||||
this.pDialogVisible = true;
|
||||
|
||||
@ -172,7 +172,7 @@ export default {
|
||||
pEditDialogVisible: false,
|
||||
editForm: {},
|
||||
addForm: {
|
||||
ip: "192.168.110.29",
|
||||
ip: "",
|
||||
port: "554",
|
||||
userName: "admin",
|
||||
channel: "1",
|
||||
@ -342,7 +342,7 @@ export default {
|
||||
show() {
|
||||
// this.getAreaList();
|
||||
this.addForm = {
|
||||
ip: "192.168.110.29",
|
||||
ip: "",
|
||||
port: "554",
|
||||
userName: "admin",
|
||||
channel: "1",
|
||||
|
||||
@ -419,6 +419,7 @@ const rightMenuOption = {
|
||||
let p_id = getKeyOfSelectedNode(this.$parent.treeObj, "source_id");
|
||||
|
||||
paths.forEach((item) => {
|
||||
item = item.replace(/\\/g, "/");
|
||||
let name = getNamefromPath(item);
|
||||
let source_type = "layer";
|
||||
|
||||
@ -759,7 +760,7 @@ const rightMenuOption = {
|
||||
$root_home_index.$refs.modelg.open("rightMenuChange");
|
||||
$recvChanel("selectModelChangeg", (data) => {
|
||||
editNode.changeModelUrl(data.model_url);
|
||||
$offChanel("selectModelChange");
|
||||
$offChanel("selectModelChangeg");
|
||||
});
|
||||
};
|
||||
}
|
||||
@ -1015,7 +1016,7 @@ const rightMenuOption = {
|
||||
resetView() {
|
||||
this.updateView(false);
|
||||
},
|
||||
updateView(flag) {
|
||||
async updateView(flag) {
|
||||
let doUpdateInfo = true;
|
||||
let node = getSelectedNode(this.$parent.treeObj);
|
||||
let detail = JSON.parse(JSON.stringify(node.detail));
|
||||
@ -1024,8 +1025,8 @@ const rightMenuOption = {
|
||||
detail = JSON.parse(detail);
|
||||
}
|
||||
if (flag) {
|
||||
_entityMap.get(node.source_id).setCustomView();
|
||||
detail.customView = _entityMap.get(node.source_id).options.customView;
|
||||
await _entityMap.get(node.source_id).setCustomView();
|
||||
detail.customView = await _entityMap.get(node.source_id).options.customView;
|
||||
} else {
|
||||
if (
|
||||
detail.hasOwnProperty("customView") &&
|
||||
|
||||
@ -98,10 +98,10 @@ function leftClick(nodes) {
|
||||
console.log("info", info);
|
||||
if (
|
||||
!node.detail.richTextContent &&
|
||||
!info.hrefs.length &&
|
||||
!info.vr.length &&
|
||||
!info.goods.length &&
|
||||
!info.camera.length
|
||||
(!info.hrefs || !info.hrefs.length) &&
|
||||
(!info.vr || !info.vr.length) &&
|
||||
(!info.goods || !info.goods.length) &&
|
||||
(!info.camera || !info.camera.length)
|
||||
) {
|
||||
// $root_home.$message.info("该标注标绘无属性信息");
|
||||
$root_home.$message({
|
||||
|
||||
@ -150,6 +150,7 @@ export default {
|
||||
// }
|
||||
// });
|
||||
filePaths.forEach((item) => {
|
||||
item = item.replace(/\\/g, "/");
|
||||
// 使用正则表达式进行不区分大小写的匹配
|
||||
if (/\.(png|jpg|jpeg)$/i.test(item)) {
|
||||
this.picturePaths.push(item);
|
||||
@ -304,7 +305,7 @@ export default {
|
||||
let p_id = getKeyOfSelectedNode(this.$parent.treeObj, "source_id");
|
||||
filePaths.forEach((item) => {
|
||||
console.log('item', item);
|
||||
let name = this.getLastPathComponent(item, ['clt', 'json', 'pak', 'kml', 'kmz', 'shp', 'geojson', 'geoJson', 'czml', 'jct', 'mif', 'tab', 'csv']);
|
||||
let name = this.getLastPathComponent(item, ['clt', 'json', 'pak', 'kml', 'kmz', 'shp', 'geojson', 'geoJson', 'czml', 'jct', 'mif', 'tab', 'csv', 'mbtiles']);
|
||||
console.log("name", name);
|
||||
let source_type = "layer";
|
||||
if (item.endsWith(".clt") || item.endsWith(".json")) {
|
||||
@ -720,7 +721,7 @@ export default {
|
||||
window.newFuzzySearch(
|
||||
`treeDemo`,
|
||||
"#keyword",
|
||||
["bim", "sonShp", "gdbShp"],
|
||||
["sonShp", "gdbShp"],
|
||||
true,
|
||||
"#queryButton"
|
||||
); /**/
|
||||
|
||||
@ -242,6 +242,19 @@ function renderGDSLImagery(node) {
|
||||
});
|
||||
window._entityMap.set(node.source_id, GDSLImagery);
|
||||
}
|
||||
function renderGDWXImagery(node) {
|
||||
let alpha = 1;
|
||||
if (node.detail) {
|
||||
alpha = node.detail.alpha;
|
||||
}
|
||||
let GDWXImagery = new YJ.Obj.GDWXImagery(window.Earth1, {
|
||||
id: node.source_id,
|
||||
show: node.is_show == 1 ? true : false,
|
||||
name: node.source_name,
|
||||
alpha: alpha,
|
||||
});
|
||||
window._entityMap.set(node.source_id, GDWXImagery);
|
||||
}
|
||||
|
||||
function renderTileset(node) {
|
||||
let Terrain = new YJ.Terrain.Arcgis({
|
||||
@ -255,7 +268,7 @@ function renderShp(node, ifFly = true) {
|
||||
// if (node.detail != "") node.detail.field = node.detail.fieldName || "id";
|
||||
let head_tables;
|
||||
if (node.head_tables) {
|
||||
head_tables == "" ? node.head_tables : JSON.parse(node.head_tables);
|
||||
head_tables = JSON.parse(node.head_tables);
|
||||
}
|
||||
let vectorParams = {
|
||||
id: node.source_id,
|
||||
@ -1321,6 +1334,7 @@ export {
|
||||
renderCzml,
|
||||
renderTerrain,
|
||||
renderGDSLImagery,
|
||||
renderGDWXImagery,
|
||||
renderGDLWImagery,
|
||||
renderArcgisBLUEImagery,
|
||||
renderArcgisWXImagery,
|
||||
|
||||
@ -12,6 +12,7 @@ import {
|
||||
renderGlb,
|
||||
renderTerrain,
|
||||
renderGDSLImagery,
|
||||
renderGDWXImagery,
|
||||
renderKml,
|
||||
renderGDLWImagery,
|
||||
renderArcgisBLUEImagery,
|
||||
@ -897,6 +898,18 @@ const nodeType = {
|
||||
],
|
||||
detailFun: get_detail_null,
|
||||
},
|
||||
GDWXImagery: {
|
||||
render: renderGDWXImagery,
|
||||
rightMenus: [
|
||||
"edit",
|
||||
"del",
|
||||
"layerRaise",
|
||||
"layerLower",
|
||||
"layerToTop",
|
||||
"layerToBottom",
|
||||
],
|
||||
detailFun: get_detail_null,
|
||||
},
|
||||
Terrain: {
|
||||
render: renderTileset,
|
||||
rightMenus: ["edit", "del"],
|
||||
@ -979,7 +992,10 @@ const nodeType = {
|
||||
allowChildren: false,
|
||||
},
|
||||
Feature: {
|
||||
rightMenus: ["setView", "resetView", "showAttr"],
|
||||
rightMenus: [
|
||||
// "setView", "resetView",
|
||||
"showAttr"
|
||||
],
|
||||
render: renderShp,
|
||||
detailFun: get_detail_shp,
|
||||
allowChildren: false,
|
||||
@ -1151,6 +1167,7 @@ let cusNodeIcon = (node) => {
|
||||
"GDLWImagery",
|
||||
"ArcgisBLUEImagery",
|
||||
"ArcgisWXImagery",
|
||||
"GDWXImagery",
|
||||
].includes(type)
|
||||
? "layer"
|
||||
: type;
|
||||
|
||||
@ -178,6 +178,7 @@ const tree = {
|
||||
console.log("treeNode", treeNode);
|
||||
console.log(menus);
|
||||
if (menus.length == 0) {
|
||||
this.$changeComponentShow(".rightMenu", false);
|
||||
return;
|
||||
}
|
||||
// this.$changeComponentShow(".rightMenu", true);
|
||||
@ -733,6 +734,41 @@ const tree = {
|
||||
});
|
||||
}
|
||||
// YJ.Global.splitScreen.setActiveId([]);
|
||||
|
||||
let parentNode = treeNode.getParentNode();
|
||||
// 如果当前节点有父节点,检查所有子节点状态
|
||||
if (parentNode) {
|
||||
checkChildNodes(parentNode);
|
||||
}
|
||||
|
||||
// 检查子节点状态,更新父节点
|
||||
function checkChildNodes(parentNode) {
|
||||
let children = parentNode.children;
|
||||
if (!children || children.length === 0) return;
|
||||
|
||||
// 检查是否所有子节点都未被选中
|
||||
let allUnchecked = true;
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
let childNode = children[i];
|
||||
// 如果有任何一个子节点被选中,则父节点不应被取消
|
||||
if (childNode.is_show) {
|
||||
allUnchecked = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果所有子节点都未被选中,且父节点当前是选中状态,则取消父节点选择
|
||||
if (allUnchecked && parentNode.is_show) {
|
||||
window.treeObj.checkNode(parentNode, false, true);
|
||||
|
||||
// 递归检查上一级父节点
|
||||
let grandParent = parentNode.getParentNode();
|
||||
if (grandParent) {
|
||||
checkChildNodes(grandParent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@ -211,8 +211,8 @@ export default {
|
||||
source_id,
|
||||
source_name: option.source_name,
|
||||
source_type: option.source_type,
|
||||
// p_id: findParentId(this.treeObj),
|
||||
p_id:biaohui_id,
|
||||
p_id: findParentId(this.treeObj),
|
||||
// p_id:biaohui_id,
|
||||
};
|
||||
let draw
|
||||
if (option.source_type == "curve") {
|
||||
@ -262,7 +262,7 @@ export default {
|
||||
if ([0, 200].includes(res.code)) {
|
||||
cusRenderNode(DbOption);
|
||||
// DbOption.p_id
|
||||
cusAddNodes(this.treeObj,biaohui_id, [node]);
|
||||
cusAddNodes(this.treeObj, DbOption.p_id, [node]);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -284,7 +284,7 @@ export default {
|
||||
},
|
||||
// 贴地文字
|
||||
groundText() {
|
||||
let biaohui_id = "标绘图层";
|
||||
// let biaohui_id = "标绘图层";
|
||||
let that = this;
|
||||
this.$sendChanel("textTetlie", "贴地文字");
|
||||
this.$changeComponentShow(".textModelBox", true);
|
||||
@ -307,7 +307,7 @@ export default {
|
||||
source_id,
|
||||
source_name: data.text,
|
||||
source_type: "groundText",
|
||||
p_id: biaohui_id,
|
||||
p_id: findParentId(that.treeObj),
|
||||
};
|
||||
|
||||
let detailOption = JSON.parse(JSON.stringify(option));
|
||||
@ -321,7 +321,7 @@ export default {
|
||||
addSource(node).then((res) => {
|
||||
if ([0, 200].includes(res.code)) {
|
||||
// cusRenderNode(DbOption)
|
||||
cusAddNodes(that.treeObj,biaohui_id, [node]);
|
||||
cusAddNodes(that.treeObj,DbOption.p_id, [node]);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -331,7 +331,7 @@ export default {
|
||||
},
|
||||
// 立体文字
|
||||
standText() {
|
||||
let biaohui_id = "标绘图层";
|
||||
// let biaohui_id = "标绘图层";
|
||||
let that = this;
|
||||
this.$sendChanel("textTetlie", "立体文字");
|
||||
this.$changeComponentShow(".textModelBox", true);
|
||||
@ -353,7 +353,7 @@ export default {
|
||||
source_id,
|
||||
source_name: data.text,
|
||||
source_type: "standText",
|
||||
p_id: biaohui_id,
|
||||
p_id: findParentId(that.treeObj),
|
||||
};
|
||||
let detailOption = JSON.parse(JSON.stringify(option));
|
||||
let node = getNodeData(DbOption, detailOption);
|
||||
@ -361,7 +361,7 @@ export default {
|
||||
addSource(node).then((res) => {
|
||||
if ([0, 200].includes(res.code)) {
|
||||
// cusRenderNode(DbOption)
|
||||
cusAddNodes(that.treeObj, biaohui_id, [node]);
|
||||
cusAddNodes(that.treeObj, DbOption.p_id, [node]);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -381,7 +381,7 @@ export default {
|
||||
source_id,
|
||||
source_name: "扇形",
|
||||
source_type: "sector",
|
||||
p_id: biaohui_id,
|
||||
p_id: findParentId(this.treeObj),
|
||||
};
|
||||
console.log("params", params);
|
||||
|
||||
@ -399,7 +399,7 @@ export default {
|
||||
addSource(node).then((res) => {
|
||||
if ([0, 200].includes(res.code)) {
|
||||
cusRenderNode(DbOption)
|
||||
cusAddNodes(this.treeObj, biaohui_id, [node]);
|
||||
cusAddNodes(this.treeObj, DbOption.p_id, [node]);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -417,7 +417,7 @@ export default {
|
||||
source_id,
|
||||
source_name: "椭圆",
|
||||
source_type: "ellipse",
|
||||
p_id: biaohui_id,
|
||||
p_id: findParentId(this.treeObj),
|
||||
};
|
||||
let option = {
|
||||
id: source_id,
|
||||
@ -432,7 +432,7 @@ export default {
|
||||
addSource(node).then((res) => {
|
||||
if ([0, 200].includes(res.code)) {
|
||||
cusRenderNode(DbOption)
|
||||
cusAddNodes(this.treeObj, biaohui_id, [node]);
|
||||
cusAddNodes(this.treeObj, DbOption.p_id, [node]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
668
src/renderer/components/dialog/tactical.vue
Normal file
668
src/renderer/components/dialog/tactical.vue
Normal file
@ -0,0 +1,668 @@
|
||||
<template>
|
||||
<div class="tactical">
|
||||
<div class="box YJ-custom-base-dialog" v-draggable>
|
||||
<div class="boxHeader nav">
|
||||
<!-- <span></span> -->
|
||||
<span class="label">战术计算</span>
|
||||
<div class="close-box" @click="close">
|
||||
<span class="close"></span>
|
||||
<i>x</i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="boxBody content">
|
||||
<el-tabs v-model="activeName" class="demo-tabs">
|
||||
<el-tab-pane label="堵击计算" name="0">
|
||||
<el-form label-width="100px" class="demo-form-inline">
|
||||
<el-form-item label="我方距堵击点">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入我方距堵击点" min="0" max="99999999"
|
||||
v-model="blockade.weDistance" />
|
||||
<span class="unit">km</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="敌方距堵击点">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入敌方距堵击点" min="0" max="99999999"
|
||||
v-model="blockade.enemyDistance" />
|
||||
<span class="unit">km</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="敌方平均速度">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入敌方平均速度" min="0" max="99999999"
|
||||
v-model="blockade.enemySpeed" />
|
||||
<span class="unit">km/h</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item style="display: flex;justify-content: flex-end;margin: 5px 0 10px 0;">
|
||||
<el-button @click="blockadeCalculate">计算</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="bottom">
|
||||
<div>
|
||||
<span>追击速度</span>
|
||||
<span v-show="!blockade.speed">_</span>
|
||||
<span v-show="blockade.speed">≥ <span class="data">{{ blockade.speed }}</span>km/h</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>所需追击时间</span>
|
||||
<span v-show="blockade.time === null">_</span>
|
||||
<span v-show="blockade.time !== null">≤
|
||||
<span v-show="blockade.formatTime.integerPart >= 1"><span class="data">{{blockade.formatTime.integerPart }}</span>h</span>
|
||||
<span v-show="blockade.formatTime.fractionalPart > 0 ||(blockade.formatTime.integerPart === 0 && blockade.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(blockade.formatTime.fractionalPart * 60)}}</span>min</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="追击计算" name="1">
|
||||
<el-form label-width="100px" class="demo-form-inline">
|
||||
<el-form-item label="与敌人的距离">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入与敌人距离" min="0" max="99999999"
|
||||
v-model="pursuit.distance" />
|
||||
<span class="unit">km</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="敌运动速度">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入敌运动速度" min="0" max="99999999"
|
||||
v-model="pursuit.enemySpeed" />
|
||||
<span class="unit">km/h</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="追击速度">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入追击速度" min="0" max="99999999"
|
||||
v-model="pursuit.speed" />
|
||||
<span class="unit">km/h</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item style="display: flex;justify-content: flex-end;margin: 5px 0 10px 0;">
|
||||
<el-button @click="pursuitCalculate">计算</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="bottom">
|
||||
<div>
|
||||
<span>追上敌方的时间</span>
|
||||
<span v-show="pursuit.time == null">_</span>
|
||||
<span v-show="pursuit.time !== null">=
|
||||
<span v-show="pursuit.formatTime.integerPart >= 1"><span class="data">{{pursuit.formatTime.integerPart }}</span>h</span>
|
||||
<span v-show="pursuit.formatTime.fractionalPart > 0 ||(pursuit.formatTime.integerPart === 0 && pursuit.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(pursuit.formatTime.fractionalPart * 60)}}</span>min</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="遭遇计算" name="2">
|
||||
<el-form label-width="90px" class="demo-form-inline">
|
||||
<el-form-item label="敌我间距离">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入敌我间距离" min="0" max="99999999"
|
||||
v-model="encounter.distance" />
|
||||
<span class="unit">km</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="我运动时速">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入我运动时速" min="0" max="99999999"
|
||||
v-model="encounter.weSpeed" />
|
||||
<span class="unit">km/h</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="敌运动速度">
|
||||
<div class="input-number input-number-unit-3">
|
||||
<input class="input" type="number" title="" placeholder="请输入敌运动速度" min="0" max="99999999"
|
||||
v-model="encounter.enemySpeed" />
|
||||
<span class="unit">km/h</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item style="display: flex;justify-content: flex-end;margin: 5px 0 10px 0;">
|
||||
<el-button @click="encounterCalculate">计算</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="bottom">
|
||||
<div>
|
||||
<span>与敌遭遇的时间</span>
|
||||
<span v-show="encounter.time === null">_</span>
|
||||
<span v-show="encounter.time !== null">=
|
||||
<span v-show="encounter.formatTime.integerPart >= 1"><span class="data">{{encounter.formatTime.integerPart }}</span>h</span>
|
||||
<span v-show="encounter.formatTime.fractionalPart > 0 ||(encounter.formatTime.integerPart === 0 && encounter.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(encounter.formatTime.fractionalPart * 60)}}</span>min</span>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>与敌遭遇的距离</span>
|
||||
<span v-show="!encounter.meetingDistance && encounter.meetingDistance !== 0">_</span>
|
||||
<span v-show="encounter.meetingDistance || encounter.meetingDistance === 0">= <span class="data">{{
|
||||
encounter.meetingDistance }}</span>km</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="潜渡计算" name="3">
|
||||
<el-form label-width="140px" class="demo-form-inline">
|
||||
<el-form-item label="河宽或潜渡路线长度">
|
||||
<div class="input-number input-number-unit-1" style="width: 190px;">
|
||||
<input class="input" type="number" title="" placeholder="请输入河宽或潜渡路线长度" min="0" max="99999999"
|
||||
v-model="dive.distance" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="潜渡中坦克间距">
|
||||
<div class="input-number input-number-unit-3" style="width: 190px;">
|
||||
<input class="input" type="number" title="" placeholder="请输入潜渡中坦克间距" min="0" max="99999999"
|
||||
v-model="dive.spacing" />
|
||||
<span class="unit">m</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="潜渡坦克数量">
|
||||
<div class="input-number input-number-unit-3" style="width: 190px;">
|
||||
<input class="input" type="number" title="" placeholder="请输入潜渡坦克数量" min="0" max="99999999"
|
||||
v-model="dive.tank" />
|
||||
<span class="unit">辆</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="潜渡路线数量">
|
||||
<div class="input-number input-number-unit-3" style="width: 190px;">
|
||||
<input class="input" type="number" title="" placeholder="请输入潜渡路线数量" min="0" max="99999999"
|
||||
v-model="dive.route" />
|
||||
<span class="unit">条</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="潜渡速度">
|
||||
<div class="input-number input-number-unit-3" style="width: 190px;">
|
||||
<input class="input" type="number" title="" placeholder="请输入潜渡速度" min="0" max="99999999"
|
||||
v-model="dive.speed" />
|
||||
<span class="unit">m/min</span>
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item style="display: flex;justify-content: flex-end;margin: 5px 0 10px 0;">
|
||||
<el-button @click="diveCalculate">计算</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span class="custom-divider"></span>
|
||||
<div class="bottom">
|
||||
<div>
|
||||
<span>潜渡时间</span>
|
||||
<span v-show="dive.time === null">_</span>
|
||||
<span v-show="dive.time !== null">=
|
||||
<span v-show="dive.formatTime.integerPart >= 1"><span class="data">{{dive.formatTime.integerPart }}</span>h</span>
|
||||
<span v-show="dive.formatTime.fractionalPart > 0 ||(dive.formatTime.integerPart === 0 && dive.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(dive.formatTime.fractionalPart * 60)}}</span>min</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "tactical",
|
||||
data() {
|
||||
return {
|
||||
labelPosition: "top",
|
||||
activeName: '0',
|
||||
form: {
|
||||
text: "",
|
||||
},
|
||||
title: "",
|
||||
blockade: {
|
||||
time: null,
|
||||
speed: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
},
|
||||
pursuit: {
|
||||
time: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
},
|
||||
encounter: {
|
||||
time: null,
|
||||
meetingDistance: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
},
|
||||
dive: {
|
||||
time: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
close() {
|
||||
this.$changeComponentShow(".tactical", false);
|
||||
this.activeName = '0'
|
||||
this.blockade = {
|
||||
time: null,
|
||||
speed: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
}
|
||||
this.pursuit = {
|
||||
time: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
}
|
||||
this.encounter = {
|
||||
time: null,
|
||||
meetingDistance: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
}
|
||||
this.dive = {
|
||||
time: null,
|
||||
formatTime: {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
},
|
||||
}
|
||||
},
|
||||
cancel() {
|
||||
this.$changeComponentShow(".tactical", false);
|
||||
this.$sendChanel("tacticalContent", null);
|
||||
this.form = {
|
||||
text: "",
|
||||
};
|
||||
},
|
||||
isOnlyWhitespace(str) {
|
||||
// 使用正则表达式匹配一个或多个空白字符
|
||||
const regex = /^\s+$/;
|
||||
return regex.test(str);
|
||||
},
|
||||
textareaInput() {
|
||||
let textArray = this.form.text.split('\n')
|
||||
for (let i = 0; i < textArray.length; i++) {
|
||||
if (textArray[i].length > 80) {
|
||||
textArray[i] = textArray[i].slice(0, 80 - textArray[i].length)
|
||||
this.$message.warning("行超过80个字符,请按回车(Enter)后,继续输入")
|
||||
}
|
||||
}
|
||||
if (textArray.length > 70) {
|
||||
textArray.splice(70 - textArray.length)
|
||||
this.$message.warning("超过最大输入字符")
|
||||
}
|
||||
this.form.text = textArray.join('\n')
|
||||
},
|
||||
confirm() {
|
||||
//this.form.text去除空格
|
||||
// this.form.text = this.form.text.replace(/\s+/g, "");
|
||||
let bool = this.isOnlyWhitespace(this.form.text)
|
||||
if (this.form.text.length == 0 || bool) {
|
||||
this.$message.warning("请输入内容");
|
||||
return;
|
||||
}
|
||||
this.$sendChanel("tacticalContent", this.form);
|
||||
this.$changeComponentShow(".tactical", false);
|
||||
this.form = {
|
||||
text: "",
|
||||
};
|
||||
},
|
||||
|
||||
blockadeCalculate() {
|
||||
let num = Number(this.blockade.weDistance)
|
||||
let num2 = Number(this.blockade.enemyDistance)
|
||||
let num3 = Number(this.blockade.enemySpeed)
|
||||
if (!num || !num2 || !num3) {
|
||||
// this.$message.warning("请输入完整信息");
|
||||
this.blockade.time = null
|
||||
this.blockade.speed = null
|
||||
this.blockade.formatTime = {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
}
|
||||
return;
|
||||
}
|
||||
let num4 = num2 / num3
|
||||
this.blockade.time = Math.round((num4) * 100) / 100; // 四舍五入保留两位小数
|
||||
this.blockade.speed = Math.round((num / this.blockade.time) * 100) / 100
|
||||
this.blockade.formatTime = this.splitNumber(this.blockade.time)
|
||||
},
|
||||
|
||||
pursuitCalculate() {
|
||||
let num = Number(this.pursuit.distance)
|
||||
let num2 = Number(this.pursuit.enemySpeed)
|
||||
let num3 = Number(this.pursuit.speed)
|
||||
if (!num || !num2 || !num3) {
|
||||
this.pursuit.time = null
|
||||
this.pursuit.formatTime = {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果初始距离为0,已经追上
|
||||
if (num === 0) {
|
||||
this.pursuit.time = 0
|
||||
}
|
||||
else {
|
||||
const relativeSpeed = num3 - num2;
|
||||
// 如果相对速度小于等于0,无法追上
|
||||
if (relativeSpeed <= 0) {
|
||||
this.pursuit.time = null
|
||||
this.pursuit.formatTime = {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
}
|
||||
this.$message.warning("追击速度小于等于敌运动速度,无法追上敌人");
|
||||
}
|
||||
else {
|
||||
this.pursuit.time = Math.round((num / relativeSpeed) * 100) / 100
|
||||
this.pursuit.formatTime = this.splitNumber(this.pursuit.time)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
encounterCalculate() {
|
||||
let num = Number(this.encounter.distance)
|
||||
let num2 = Number(this.encounter.weSpeed)
|
||||
let num3 = Number(this.encounter.enemySpeed)
|
||||
if (!num || !num2 || !num3) {
|
||||
this.encounter.time = null
|
||||
this.encounter.meetingDistance = null
|
||||
this.encounter.formatTime = {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
}
|
||||
return;
|
||||
}
|
||||
const relativeSpeed = num2 + num3;
|
||||
this.encounter.time = Math.round((num / relativeSpeed) * 100) / 100;
|
||||
this.encounter.meetingDistance = Math.round((num2 * this.encounter.time) * 100) / 100
|
||||
this.encounter.formatTime = this.splitNumber(this.encounter.time)
|
||||
},
|
||||
|
||||
diveCalculate() {
|
||||
let distance = Number(this.dive.distance)
|
||||
let spacing = Number(this.dive.spacing)
|
||||
let tank = Number(this.dive.tank)
|
||||
let route = Number(this.dive.route)
|
||||
let speed = Number(this.dive.speed)
|
||||
if (!distance || this.dive.spacing === null || !tank || !route || !speed) {
|
||||
this.dive.time = null
|
||||
this.dive.formatTime = {
|
||||
integerPart: null,
|
||||
fractionalPart: null,
|
||||
}
|
||||
return;
|
||||
}
|
||||
// let time = ((distance + ((tank / route) * spacing)) / speed)
|
||||
let num = Math.ceil(tank / route) //路径上坦克最多数量
|
||||
let actualDistance = distance
|
||||
if(num > 1) {
|
||||
actualDistance = distance + ((num - 1) * spacing)
|
||||
}
|
||||
let time = actualDistance / speed
|
||||
|
||||
this.dive.time = Math.round(time * 100) / 100
|
||||
this.dive.time = this.dive.time / 60
|
||||
this.dive.formatTime = this.splitNumber(this.dive.time)
|
||||
},
|
||||
|
||||
splitNumber(num) {
|
||||
let data = {}
|
||||
// 处理非数字情况
|
||||
if (typeof num !== 'number' || isNaN(num)) {
|
||||
return {};
|
||||
}
|
||||
|
||||
// 处理整数情况
|
||||
if (Number.isInteger(num)) {
|
||||
data = {
|
||||
integerPart: num,
|
||||
fractionalPart: 0
|
||||
};
|
||||
}
|
||||
else {
|
||||
// 将数字转换为字符串处理
|
||||
const numStr = num.toString();
|
||||
const parts = numStr.split('.');
|
||||
|
||||
// 整数部分
|
||||
const integerPart = parseFloat(parts[0]);
|
||||
// 小数部分(保留原始精度)
|
||||
const fractionalPart = parseFloat('0.' + parts[1]);
|
||||
|
||||
data = { integerPart, fractionalPart };
|
||||
}
|
||||
return data
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.tactical {
|
||||
user-select: none;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
|
||||
.box {
|
||||
width: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 45%;
|
||||
transform: translate(-50%, -150px);
|
||||
color: var(--color-sdk-auxiliary-public);
|
||||
font-size: 14px;
|
||||
// z-index: 999999;
|
||||
background: linear-gradient(0deg, var(--color-sdk-bg-gradual)),
|
||||
rgba(0, 0, 0, 0.6);
|
||||
border: 1.5px solid;
|
||||
border-image: linear-gradient(to bottom, var(--color-sdk-gradual)) 1;
|
||||
text-align: left;
|
||||
font-family: "sy-boldface";
|
||||
|
||||
.boxHeader {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 18px;
|
||||
line-height: 46px;
|
||||
padding: 5px 16px 5px 16px;
|
||||
height: 46px;
|
||||
|
||||
.label {
|
||||
font-family: "Ali-mother-counts-bold";
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
text-shadow: 0px 0px 9px rgb(20 118 255);
|
||||
}
|
||||
|
||||
.close-box {
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
right: 0;
|
||||
height: 30px;
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
border-radius: 0 0 0 90%;
|
||||
overflow: hidden;
|
||||
|
||||
.close {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(var(--color-sdk-base-rgb), 1);
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
i {
|
||||
font-style: normal;
|
||||
font-size: 18px;
|
||||
font-weight: 900;
|
||||
position: absolute;
|
||||
top: -13px;
|
||||
left: 11px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.boxBody {
|
||||
flex: auto;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
padding: 0 20px 20px 20px;
|
||||
width: 432px;
|
||||
|
||||
.el-tabs {
|
||||
width: 100%;
|
||||
|
||||
.el-tabs__header {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.el-tabs__item {
|
||||
padding: 0 8px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-tabs__item:nth-child(2) {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.el-tabs__item.is-active,
|
||||
.el-tabs__item:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-tabs__nav-wrap:after {
|
||||
height: 1PX;
|
||||
background-color: rgba(204, 204, 204, 0.2);
|
||||
}
|
||||
|
||||
.el-tabs__nav-wrap {
|
||||
.el-tabs__nav-scroll {
|
||||
.el-tabs__active-bar {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.is-active {
|
||||
border-bottom: 1px solid rgb(0, 255, 255);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.el-form-item__label {
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.input-number {
|
||||
width: 180px;
|
||||
|
||||
input::placeholder {
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 24px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.unit {
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.arrow {
|
||||
top: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.el-form--label-top .el-form-item__label {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.el-form-item__label {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-textarea__inner {
|
||||
max-height: 500px;
|
||||
// overflow: hidden; /* 禁用滚动条 */
|
||||
resize: none;
|
||||
/* 禁止用户手动调整文本框的尺寸 */
|
||||
background-color: transparent;
|
||||
color: #fff;
|
||||
border-color: rgba(var(--color-sdk-base-rgb), 0.5) !important;
|
||||
}
|
||||
|
||||
.el-textarea__inner::scrollbar-width {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.el-button {
|
||||
background: rgba(var(--color-sdk-base-rgb), 0.2);
|
||||
border-color: rgba(var(--color-sdk-base-rgb), 0.5) !important;
|
||||
color: #ffffff;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
|
||||
.el-button:hover {
|
||||
border-color: rgba(var(--color-sdk-base-rgb), 1) !important;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 15px;
|
||||
|
||||
.data {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<div class="header_top">
|
||||
<!-- <svg-icon icon-class="Head" :class-name="['headItem']"></svg-icon> -->
|
||||
<img style="width:100%;" :src="require('@/assets/images/shijingjun/' + skinInfo + '/head.png')" alt="" />
|
||||
<img v-if="!headImage" class="header_img" alt="" />
|
||||
<img v-else-if="headImage === 'default'" class="header_img" :src="require('@/assets/images/jianchuang/' + skinInfo + '/head.png')" alt="" />
|
||||
<img v-else class="header_img" :src="headImage" alt="" />
|
||||
<div class="dateTime">
|
||||
<span>{{ date.ymd }}</span>
|
||||
<span>{{ $t("headerTitles.week")[date.week] }}</span>
|
||||
@ -42,11 +44,13 @@ export default {
|
||||
ymd: "2023/11/20",
|
||||
week: "1",
|
||||
},
|
||||
flag: false,
|
||||
showSystem: false, //设置框
|
||||
head: "",
|
||||
head: null,
|
||||
skinInfo: JSON.parse(localStorage.getItem("systemSetting")).skinInfo,
|
||||
appVersion: localStorage.getItem("appVersion"),
|
||||
batteryInfo: "",
|
||||
headImage: ''
|
||||
};
|
||||
},
|
||||
beforeMount() {
|
||||
@ -55,6 +59,10 @@ export default {
|
||||
//
|
||||
// this.head = res;
|
||||
// });
|
||||
let header = localStorage.getItem("header")
|
||||
if (header) {
|
||||
this.head = JSON.parse(header)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// this.setTime()
|
||||
@ -68,8 +76,45 @@ export default {
|
||||
if (e.key == "systemSetting") {
|
||||
let obj = JSON.parse(e.newValue);
|
||||
that.skinInfo = obj.skinInfo;
|
||||
if(this.head) {
|
||||
switch (that.skinInfo) {
|
||||
case 'yingguangse':
|
||||
that.headImage = that.head.header1
|
||||
break;
|
||||
case 'gonganlan':
|
||||
that.headImage = that.head.header2
|
||||
break;
|
||||
case 'hong':
|
||||
that.headImage = that.head.header3
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
that.headImage = 'default'
|
||||
}
|
||||
}
|
||||
});
|
||||
this.$recvChanel("header", () => {
|
||||
let header = localStorage.getItem("header")
|
||||
that.head = JSON.parse(header)
|
||||
if (that.head) {
|
||||
switch (that.skinInfo) {
|
||||
case 'yingguangse':
|
||||
that.headImage = that.head.header1
|
||||
break;
|
||||
case 'gonganlan':
|
||||
that.headImage = that.head.header2
|
||||
break;
|
||||
case 'hong':
|
||||
that.headImage = that.head.header3
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
that.headImage = 'default'
|
||||
}
|
||||
|
||||
})
|
||||
this.$recvChanel("batteryInfo", (data) => {
|
||||
if (data.isShow) {
|
||||
this.batteryInfo = data.title;
|
||||
@ -126,6 +171,13 @@ export default {
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 19;
|
||||
.header_img {
|
||||
width:100%;
|
||||
height: 100%;
|
||||
}
|
||||
.header_img:not([src]){
|
||||
opacity:0;
|
||||
}
|
||||
|
||||
.dateTime {
|
||||
position: absolute;
|
||||
|
||||
@ -13,14 +13,14 @@
|
||||
<div>
|
||||
<span>{{ $t("headerTitles.auths.authCode") }}</span>
|
||||
<span @click="copy" style="cursor: pointer;" title="点击可复制">{{
|
||||
authInfo.license_code
|
||||
}}</span>
|
||||
authInfo.license_code
|
||||
}}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{ $t("headerTitles.auths.authTime") }}</span>
|
||||
<span v-if="authInfo.message === '永久授权' ||
|
||||
authInfo.message === '临时授权'
|
||||
">
|
||||
authInfo.message === '临时授权'
|
||||
">
|
||||
<template v-if="authInfo.start_at != '无'">
|
||||
{{ authInfo.start_at }}-
|
||||
</template>
|
||||
@ -30,15 +30,15 @@
|
||||
<div>
|
||||
<span>{{ $t("headerTitles.auths.authType") }}</span>
|
||||
<span>{{
|
||||
authInfo.auth_type == "" ? "暂无授权" : authInfo.auth_type
|
||||
}}</span>
|
||||
authInfo.auth_type == "" ? "暂无授权" : authInfo.auth_type
|
||||
}}</span>
|
||||
</div>
|
||||
|
||||
<el-upload class="upload-demo" :headers="headers" :action="uploadUrl()" :show-file-list="false"
|
||||
accept=".lic" :on-success="onSuccess">
|
||||
<el-button size="small" type="primary">{{
|
||||
$t("headerTitles.auths.upload")
|
||||
}}</el-button>
|
||||
$t("headerTitles.auths.upload")
|
||||
}}</el-button>
|
||||
</el-upload>
|
||||
<!--<button class="btn" @click="onFileSubmit">{{ $t('headerTitles.confirm') }}</button>-->
|
||||
</div>
|
||||
@ -67,8 +67,8 @@
|
||||
<div>
|
||||
<div class="detailSkin ">
|
||||
<span>{{
|
||||
$t("headerTitles.systemSetting.setLanguage")
|
||||
}}:</span>
|
||||
$t("headerTitles.systemSetting.setLanguage")
|
||||
}}:</span>
|
||||
<el-select v-model="systemSetting.language" @change="sysChange" placeholder="请选择">
|
||||
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
|
||||
</el-option>
|
||||
@ -83,7 +83,7 @@
|
||||
<div class="">-->
|
||||
<el-select v-model="systemSetting.skinInfo" @change="sysChange" placeholder="请选择">
|
||||
<el-option v-for="item in skinList" :key="item.id" :label="$t('headerTitles.systemSetting.skinList.' + item.id)
|
||||
" :value="item.id">
|
||||
" :value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
@ -95,7 +95,7 @@
|
||||
<span>{{ $t("headerTitles.searchWay.title") }}:</span>
|
||||
<el-select v-model="searchWay" @change="searchWayChange" placeholder="请选择">
|
||||
<el-option v-for="(item, index) in wayList" :key="index" :label="$t('headerTitles.searchWay.searchWayList.' + item.value)
|
||||
" :value="item.value">
|
||||
" :value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
@ -211,6 +211,79 @@
|
||||
</button>-->
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<!-- 头部设置 -->
|
||||
<el-tab-pane :label="$t('headerTitles.Header.title')" class="headerTab">
|
||||
<el-dialog :visible.sync="headerAddDialogVisible" :modal="false" :title="$t('headerTitles.Header.add')"
|
||||
width="100%" style="width: 680px; height: 420px;" center :before-close="headerAddClose">
|
||||
<div style="display: flex;align-items: center;margin: 10px 0;">
|
||||
<span style="width: 50px;">名称</span>
|
||||
<el-input style="width: calc(100% - 78px);" v-model="headerParams.name" placeholder="请输入名称"></el-input>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<p>{{ $t('headerTitles.systemSetting.skinList.' + skinList[0].id) }}</p>
|
||||
<el-upload class="header-uploader" action="" accept =".png, .jpeg, .jpg" :show-file-list="false" :http-request="headerUploadRequest"
|
||||
:data="{ index: 1 }">
|
||||
<img style="object-fit: contain;" v-if="headerParams.url1" :src="headerParams.url1" class="header">
|
||||
<i v-else class="el-icon-plus header-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<p>{{ $t('headerTitles.systemSetting.skinList.' + skinList[1].id) }}</p>
|
||||
<el-upload class="header-uploader" action="" accept =".png, .jpeg, .jpg" :show-file-list="false" :http-request="headerUploadRequest"
|
||||
:data="{ index: 2 }">
|
||||
<img style="object-fit: contain;" v-if="headerParams.url2" :src="headerParams.url2" class="header">
|
||||
<i v-else class="el-icon-plus header-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<p>{{ $t('headerTitles.systemSetting.skinList.' + skinList[2].id) }}</p>
|
||||
<el-upload class="header-uploader" action="" accept =".png, .jpeg, .jpg" :show-file-list="false" :http-request="headerUploadRequest"
|
||||
:data="{ index: 3 }">
|
||||
<img style="object-fit: contain;" v-if="headerParams.url3" :src="headerParams.url3" class="header">
|
||||
<i v-else class="el-icon-plus header-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="text-align: right; margin-top: 20px;">
|
||||
<el-button type="primary" size="small" @click="headerAddConfirm">
|
||||
{{ $t("headerTitles.Header.confirm") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<div>
|
||||
<div style="margin-bottom: 10px;">
|
||||
<el-button type="primary" size="small" @click="headerAddDialogVisible = true">
|
||||
{{ $t("headerTitles.Header.add") }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table :data="headerDataList" style="width: 100%" max-height="250">
|
||||
<el-table-column
|
||||
label=""
|
||||
align="center"
|
||||
width="50">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox v-model="scope.row.selected" @change="headerSelectChange(scope.row)"></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="图片名称" width="250" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="缩略图">
|
||||
<template slot-scope="scope">
|
||||
<img :src="scope.row.header1" alt="" style="width: 100%;height: 50px;object-fit: contain;">
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="100" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" danger @click="deleteHeaderImg(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination style="display: flex;justify-content: center" @size-change="handleSizeChangeHeader"
|
||||
@current-change="hadleCurrentChangeHeader" :current-page="paginationHeader.page" :page-sizes="[5, 10, 20, 30, 40]"
|
||||
:page-size="paginationHeader.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="paginationHeader.total" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<!-- 卫星状态 -->
|
||||
<!-- <el-tab-pane :label="$t('headerTitles.Satellite')">
|
||||
<div class="auth_info custom_scroll_bar content_h">
|
||||
@ -254,7 +327,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<el-button @click="importpoi" size="mini" type="primary" class="btn_public">{{
|
||||
$t("headerTitles.Engineerings.importPOI") }}
|
||||
$t("headerTitles.Engineerings.importPOI") }}
|
||||
</el-button>
|
||||
</div>
|
||||
<div>
|
||||
@ -284,14 +357,14 @@
|
||||
<Air />
|
||||
</el-tab-pane>
|
||||
<!-- 模型管理 -->
|
||||
<el-tab-pane :label="$t('headerTitles.model.title')">
|
||||
<el-tab-pane :label="$t('headerTitles.model.title')">
|
||||
<!-- <model></model> -->
|
||||
<div class="modelBtn custom_scroll_bar" v-if="isStandAlone">
|
||||
<el-button @click="createLib('model')" type="warning" size="small">{{
|
||||
$t("headerTitles.model.createModelLibrary") }}
|
||||
$t("headerTitles.model.createModelLibrary") }}
|
||||
</el-button>
|
||||
<el-button @click="selectLib('model')" type="primary" size="small">{{
|
||||
$t("headerTitles.model.selectModelLibrary") }}
|
||||
$t("headerTitles.model.selectModelLibrary") }}
|
||||
</el-button>
|
||||
<el-button @click="addModelType" :disabled="importModelEnable()" type="success" size="small">
|
||||
{{ $t("headerTitles.model.addModelType") }}
|
||||
@ -303,10 +376,10 @@
|
||||
{{ $t("headerTitles.model.importModel") }}
|
||||
</el-button>
|
||||
<el-button style="margin-left: 10px" @click="editModelTypes()" type="warning" size="small">{{
|
||||
$t("headerTitles.model.editModel") }}
|
||||
$t("headerTitles.model.editModel") }}
|
||||
</el-button>
|
||||
<el-button @click="delModelTypes()" type="warning" size="small">{{
|
||||
$t("headerTitles.model.deleteModel") }}
|
||||
$t("headerTitles.model.deleteModel") }}
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="modelList">
|
||||
@ -331,11 +404,11 @@
|
||||
<template v-if="modelTypeList.length > 0">
|
||||
<template v-for="item in modelTypeList">
|
||||
<div :class="[
|
||||
selectedModelType == item.type_id
|
||||
? 'selectedModelTypeCss'
|
||||
: '',
|
||||
'typeItem',
|
||||
]" @click="selectModel(item)">
|
||||
selectedModelType == item.type_id
|
||||
? 'selectedModelTypeCss'
|
||||
: '',
|
||||
'typeItem',
|
||||
]" @click="selectModel(item)">
|
||||
<div class="label" :title="item.type_name">
|
||||
{{ item.type_name }}
|
||||
</div>
|
||||
@ -386,13 +459,13 @@
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<!-- 三维军标 -->
|
||||
<el-tab-pane v-if="false" label="三维军标">
|
||||
<el-tab-pane v-if="false" label="三维军标">
|
||||
<div class="modelBtn custom_scroll_bar" v-if="isStandAlone">
|
||||
<el-button @click="createLib('model')" type="warning" size="small">{{
|
||||
$t("headerTitles.model.createModelLibrary") }}
|
||||
$t("headerTitles.model.createModelLibrary") }}
|
||||
</el-button>
|
||||
<el-button @click="selectLib('model')" type="primary" size="small">{{
|
||||
$t("headerTitles.model.selectModelLibrary") }}
|
||||
$t("headerTitles.model.selectModelLibrary") }}
|
||||
</el-button>
|
||||
<el-button @click="addModelType" :disabled="importModelEnable()" type="success" size="small">
|
||||
{{ $t("headerTitles.model.addModelType") }}
|
||||
@ -404,10 +477,10 @@
|
||||
{{ $t("headerTitles.model.importModel") }}
|
||||
</el-button>
|
||||
<el-button style="margin-left: 10px" @click="editModelTypes()" type="warning" size="small">{{
|
||||
$t("headerTitles.model.editModel") }}
|
||||
$t("headerTitles.model.editModel") }}
|
||||
</el-button>
|
||||
<el-button @click="delModelTypes()" type="warning" size="small">{{
|
||||
$t("headerTitles.model.deleteModel") }}
|
||||
$t("headerTitles.model.deleteModel") }}
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="modelList">
|
||||
@ -432,11 +505,11 @@
|
||||
<template v-if="modelTypeList.length > 0">
|
||||
<template v-for="item in modelTypeList">
|
||||
<div :class="[
|
||||
selectedModelType == item.type_id
|
||||
? 'selectedModelTypeCss'
|
||||
: '',
|
||||
'typeItem',
|
||||
]" @click="selectModel(item)">
|
||||
selectedModelType == item.type_id
|
||||
? 'selectedModelTypeCss'
|
||||
: '',
|
||||
'typeItem',
|
||||
]" @click="selectModel(item)">
|
||||
<div class="label" :title="item.type_name">
|
||||
{{ item.type_name }}
|
||||
</div>
|
||||
@ -492,10 +565,10 @@
|
||||
<el-tab-pane :label="$t('headerTitles.graphLabel.title')">
|
||||
<div class="modelBtn custom_scroll_bar" v-if="isStandAlone">
|
||||
<el-button @click="createLib('graphLabel')" type="warning" size="small">{{
|
||||
$t("headerTitles.graphLabel.createGraphLabelLibrary") }}
|
||||
$t("headerTitles.graphLabel.createGraphLabelLibrary") }}
|
||||
</el-button>
|
||||
<el-button @click="selectLib('junbiao')" type="primary" size="small">{{
|
||||
$t("headerTitles.graphLabel.selectGraphLabelLibrary") }}
|
||||
$t("headerTitles.graphLabel.selectGraphLabelLibrary") }}
|
||||
</el-button>
|
||||
<el-button @click="addGraphLabelType" :disabled="importGraphLabelEnable()" type="success" size="small">
|
||||
{{ $t("headerTitles.graphLabel.addGraphLabelType") }}
|
||||
@ -507,7 +580,7 @@
|
||||
{{ $t("headerTitles.graphLabel.importGraphLabel") }}
|
||||
</el-button>
|
||||
<el-button style="margin-left: 10px" @click="editGraphLabelTypes" type="warning" size="small">{{
|
||||
$t("headerTitles.graphLabel.edit") }}
|
||||
$t("headerTitles.graphLabel.edit") }}
|
||||
</el-button>
|
||||
<el-button @click="delGraphLabelTypes" type="warning" size="small">{{ $t("headerTitles.graphLabel.delete")
|
||||
}}
|
||||
@ -580,7 +653,7 @@
|
||||
<el-table-column prop="type" label="操作" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="primary" size="mini" @click="editGraphLabel(scope.row)">{{
|
||||
$t("headerTitles.graphLabel.edit") }}</el-button>
|
||||
$t("headerTitles.graphLabel.edit") }}</el-button>
|
||||
<el-button @click="delGraphLabel(scope.row.jun_biao_id)" type="danger" size="mini">
|
||||
{{ $t("headerTitles.graphLabel.delete") }}
|
||||
</el-button>
|
||||
@ -707,6 +780,8 @@ import { calcWidth } from "@/utils";
|
||||
import { validateCommonText } from "@/utils/validate";
|
||||
import equipment from "../../PLTraffic/components/manager/equipment/equipment";
|
||||
import Air from "./components/air/index.vue"
|
||||
import { Header } from "element-ui";
|
||||
import { getHeaderList, addHeader, selectHeader, deleteHeader } from "@/api/gisAPI";
|
||||
// import model from "./components/modelType/index.vue"
|
||||
// import {baseURL} from "../../../utils/request";
|
||||
|
||||
@ -888,9 +963,26 @@ export default {
|
||||
},
|
||||
],
|
||||
searchWay: "poi",
|
||||
paginationHeader: {
|
||||
page: 1,
|
||||
pageSize: 5,
|
||||
total: 0,
|
||||
},
|
||||
headerDataList: [],
|
||||
headerAddDialogVisible: false,
|
||||
headerParams: {
|
||||
name: "",
|
||||
header1: "",
|
||||
header2: "",
|
||||
header3: "",
|
||||
url1: "",
|
||||
url2: "",
|
||||
url3: "",
|
||||
}
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getHeaderList();
|
||||
this.searchWay = localStorage.getItem("searchWay") || "poi";
|
||||
//用户修改角色后,重新请求用户列表
|
||||
this.$recvChanel("getUserList", (props) => {
|
||||
@ -959,6 +1051,142 @@ export default {
|
||||
}
|
||||
return "";
|
||||
},
|
||||
getHeaderList() {
|
||||
getHeaderList({
|
||||
page: this.paginationHeader.page,
|
||||
page_size: this.paginationHeader.pageSize,
|
||||
}).then(res => {
|
||||
if (res.code == 0 || res.code == 200) {
|
||||
this.headerDataList = res.data.list
|
||||
this.paginationHeader.total = res.data.total
|
||||
}
|
||||
})
|
||||
},
|
||||
headerSelectChange(row) {
|
||||
for (let i = 0; i < this.headerDataList.length; i++) {
|
||||
if (this.headerDataList[i].selected) {
|
||||
this.headerDataList[i].selected = false
|
||||
}
|
||||
}
|
||||
row.selected = true
|
||||
selectHeader({
|
||||
id: row.id
|
||||
}).then(res => {
|
||||
if (res.code == 0 || res.code == 200) {
|
||||
this.$message.success("设置成功");
|
||||
localStorage.setItem("header", JSON.stringify(row))
|
||||
this.$sendChanel("header")
|
||||
}
|
||||
})
|
||||
},
|
||||
deleteHeaderImg(row) {
|
||||
this.$confirm("确定删除吗, 是否继续?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(async () => {
|
||||
deleteHeader({
|
||||
id: row.id
|
||||
}).then(async res => {
|
||||
if (res.code == 0 || res.code == 200) {
|
||||
let header = JSON.parse(localStorage.getItem("header"))
|
||||
this.$message.success("删除成功");
|
||||
if(this.headerDataList.length==1 && this.paginationHeader.page>1) {
|
||||
this.paginationHeader.page--
|
||||
}
|
||||
if (row.id == header.id) {
|
||||
localStorage.removeItem("header")
|
||||
// 显示第一个
|
||||
await getHeaderList({
|
||||
page: 1,
|
||||
page_size: 1,
|
||||
}).then(res => {
|
||||
if (res.code == 0 || res.code == 200) {
|
||||
if(res.data.list && res.data.list[0]) {
|
||||
this.headerSelectChange(res.data.list[0])
|
||||
setTimeout(() => {
|
||||
this.getHeaderList();
|
||||
}, 500);
|
||||
}
|
||||
else {
|
||||
this.getHeaderList();
|
||||
localStorage.removeItem("header")
|
||||
this.$sendChanel("header")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
else {
|
||||
this.getHeaderList();
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message({
|
||||
type: "info",
|
||||
message: "已取消删除",
|
||||
});
|
||||
});
|
||||
},
|
||||
handleSizeChangeHeader(value) {
|
||||
this.paginationHeader.pageSize = value;
|
||||
this.getHeaderList();
|
||||
},
|
||||
hadleCurrentChangeHeader(value) {
|
||||
this.paginationHeader.page = value;
|
||||
this.getHeaderList();
|
||||
},
|
||||
headerUploadRequest(data) {
|
||||
let fileObj = data.file
|
||||
this.headerParams[`header${data.data.index}`] = fileObj;
|
||||
this.headerParams[`url${data.data.index}`] = URL.createObjectURL(fileObj);
|
||||
// console.log(this.headerParams.url1)
|
||||
},
|
||||
headerAddClose() {
|
||||
this.headerAddDialogVisible = false;
|
||||
this.headerParams = {
|
||||
name: "",
|
||||
header1: "",
|
||||
header2: "",
|
||||
header3: "",
|
||||
url1: "",
|
||||
url2: "",
|
||||
url3: "",
|
||||
}
|
||||
},
|
||||
headerAddConfirm() {
|
||||
if (!this.headerParams.name) {
|
||||
this.$message.warning("请输入名称");
|
||||
return;
|
||||
}
|
||||
if (!this.headerParams.header1 || !this.headerParams.header2 || !this.headerParams.header3) {
|
||||
this.$message.warning("请上传对应图片");
|
||||
return;
|
||||
}
|
||||
let formData = new FormData()
|
||||
formData.append('name', this.headerParams.name)
|
||||
formData.append('header1', this.headerParams.header1)
|
||||
formData.append('header2', this.headerParams.header2)
|
||||
formData.append('header3', this.headerParams.header3)
|
||||
addHeader(formData).then(res => {
|
||||
if (res.code == 0 || res.code == 200) {
|
||||
this.$message.success("添加成功");
|
||||
this.headerAddDialogVisible = false;
|
||||
this.headerParams = {
|
||||
name: "",
|
||||
header1: "",
|
||||
header2: "",
|
||||
header3: "",
|
||||
url1: "",
|
||||
url2: "",
|
||||
url3: "",
|
||||
}
|
||||
this.getHeaderList();
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@ -1453,6 +1681,38 @@ export default {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.headerTab {
|
||||
.el-checkbox__inner {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
.el-checkbox__inner::after {
|
||||
height: 10px;
|
||||
left: 6px;
|
||||
}
|
||||
.el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
.header,
|
||||
.header-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 178px;
|
||||
height: 178px;
|
||||
line-height: 178px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.el-upload:hover {
|
||||
border-color: #409eff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.modelList,
|
||||
|
||||
@ -155,6 +155,7 @@ export default {
|
||||
this.flag = key
|
||||
},
|
||||
init(obj, selected, hasGEMarker1 = true,isUrl) {
|
||||
console.log('============================================',obj)
|
||||
let selectedd
|
||||
if (isUrl) {
|
||||
this.getList(new URL(selected))
|
||||
|
||||
Reference in New Issue
Block a user