提交添加战术计算、添加头部设置

This commit is contained in:
zh
2025-10-21 16:20:22 +08:00
parent d447f23376
commit ce3c39031d
215 changed files with 11960 additions and 24090 deletions

View File

@ -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",

View File

@ -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,

View File

@ -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) => {

View File

@ -763,9 +763,9 @@ export default {
},
// 多边形统计
{
fun: this.goodsSearchPolgon,
name: "goodsSearchPolgon",
svg: "goodsSearchPolgon",
fun: this.goodsSearchPolygon,
name: "goodsSearchPolygon",
svg: "goodsSearchPolygon",
// 是否移入
isMoveIn: false,

View File

@ -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;

View File

@ -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",

View File

@ -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") &&

View File

@ -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({

View File

@ -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"
); /**/

View File

@ -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,

View File

@ -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;

View File

@ -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);
}
}
}
},
},
};

View File

@ -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]);
}
});
}

View 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>

View File

@ -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;

View File

@ -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,

View File

@ -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))