提交 ec70f3f2 作者: “kai”

feat(i18n): 添加多语言支持并优化UI样式

- 为多个组件添加i18n国际化支持
- 移除冗余的width样式定义
- 更新中、英、俄三种语言的翻译文件
- 优化AI识别列表的滚动条样式
- 统一关闭按钮的国际化显示
上级 5cddbaf4
export default {
common: {
截图: "Screenshot",
速度: "Speed",
开始录像: "Start Recording",
变焦: "Zoom",
消息等级: "Message Level",
消息内容: "Message Content",
流畅: "Smooth",
......@@ -217,6 +221,36 @@ export default {
损坏: "Damaged",
保养中: "Under Upkeep",
该机库中没有无人机: "No UAV in this hangar!",
模式切换: "Mode Switch",
AI识别: "AI Recognition",
人脸识别: "Face Recognition",
车辆识别: "Vehicle Recognition",
拍照: "Take Photo",
信息: "Information",
切换源: "Switch Source",
比例: "Ratio",
公网: "Public Network",
专网: "Private Network",
暂无任务: "No task available!",
拍照成功: "Photo taken successfully!",
下载: "Download",
正在识别中: "Recognizing...",
识别成功: "Recognition successful!",
识别完成: "Recognition completed",
偏航角: "Yaw Angle",
云台偏航: "Gimbal Yaw",
云台俯仰: "Gimbal Pitch",
悬停: "Hover",
停止录像: "Stop Recording",
录像中: "Recording",
单点: "Single Point",
: "Min",
: "Sec",
游泳识别: "Swimming Recognition",
异物识别: "Foreign Object Recognition",
漏油识别: "Oil Leak Recognition",
裸土识别: "Bare Soil Recognition",
生成航线至少两个航点: "At least two waypoints are required to generate a route",
该机库没有经纬度: "This hangar has no coordinates",
设备超三个月未进行保养存在安全隐患无法进行正常飞行:
"Equipment has not been maintained for more than three months, there are safety hazards, normal flight is not possible!",
......@@ -546,6 +580,38 @@ export default {
退出接管: "Exit Takeover",
确认退出该用户接管: "Confirm exit takeover for this user?",
操作完成: "Operation Completed",
视频信息: "Video Information",
是否启动瞄准镜: "Enable Crosshair",
摇杆位于中位: "Joystick at Center",
摇杆未在中位: "Joystick Not at Center",
切换源: "Switch Source",
比例: "Scale",
模式切换: "Mode Switch",
截图: "Screenshot",
当前高度创建航点动作可能不安全: "Creating waypoint action at current altitude may be unsafe!",
录像失败NX通信异常: "Recording failed, NX communication error!",
开始: "Start",
结束: "End",
录像失败: "Recording Failed",
拍照失败NX通信异常: "Photo failed, NX communication error!",
拍照完成: "Photo Completed",
截屏成功: "Screenshot Successful",
截屏失败: "Screenshot Failed",
抓拍照片: "Captured Photo",
车牌号: "License Plate Number",
车辆品牌: "Vehicle Brand",
车主: "Vehicle Owner",
联系号码: "Contact Number",
单位编号: "Unit Number",
是否有违法未处理: "Any Unprocessed Violations",
有违法未处理: "Has Unprocessed Violations",
无违法未处理: "No Unprocessed Violations",
车辆种类: "Vehicle Type",
车辆识别代号: "Vehicle Identification Code",
预警地点: "Alert Location",
识别时间: "Recognition Time",
车辆轨迹: "Vehicle Trajectory",
暂无轨迹: "No trajectory available!",
行人识别: "Pedestrian Recognition",
车牌识别: "License Plate Recognition",
口罩识别: "Mask Recognition",
......
export default {
common: {
截图: "Скриншот",
开始录像: "Начать запись",
变焦: "Увеличение",
速度: "Скорость",
原画: "Рисунок",
流畅: "Плавный",
低延迟: "Низкая задержка",
......@@ -215,6 +219,34 @@ export default {
损坏: "Поврежден",
保养中: "На уходе",
该机库中没有无人机: "В этом ангаре нет БПЛА!",
模式切换: "Переключение режима",
AI识别: "ИИ распознавание",
人脸识别: "Распознавание лиц",
车辆识别: "Распознавание транспорта",
拍照: "Сделать фото",
信息: "Информация",
切换源: "Переключить источник",
比例: "Соотношение",
暂无任务: "Нет доступных задач!",
拍照成功: "Фото успешно сделано!",
下载: "Скачать",
正在识别中: "Распознавание...",
识别成功: "Распознавание успешно!",
识别完成: "Распознавание завершено",
偏航角: "Угол рыскания",
云台偏航: "Рыскание подвеса",
云台俯仰: "Тангаж подвеса",
悬停: "Зависание",
停止录像: "Остановить запись",
录像中: "Запись",
单点: "Одна точка",
: "Мин",
: "Сек",
游泳识别: "Распознавание плавания",
异物识别: "Распознавание посторонних объектов",
漏油识别: "Распознавание утечки масла",
裸土识别: "Распознавание голой земли",
生成航线至少两个航点: "Для создания маршрута требуется минимум две точки",
该机库没有经纬度: "У этого ангара нет координат",
设备超三个月未进行保养存在安全隐患无法进行正常飞行:
"Оборудование не обслуживалось более трех месяцев, есть угрозы безопасности, нормальный полет невозможен!",
......@@ -238,8 +270,6 @@ export default {
升起平台: "Поднять платформу",
释放无人机: "Освободить дрон",
无人机RTK定位: "RTK позиционирование",
消息等级: "Уровень сообщ.",
消息内容: "Содерж. сообщ.",
时间: "Время",
紧急: "Срочно",
普通: "Обычный",
......
export default {
common: {
AI识别: "AI识别",
变焦: "变焦",
截图: "截图",
开始录像: "开始录像",
结束录像: "结束录像",
原画: "原画",
流畅: "流畅",
速度: "速度",
低延迟: "低延迟",
无人机视频: "无人机视频",
舱内: "舱内",
......@@ -198,6 +204,35 @@ export default {
损坏: "损坏",
保养中: "保养中",
该机库中没有无人机: "该机库中没有无人机!",
模式切换: "模式切换",
人脸识别: "人脸识别",
车辆识别: "车辆识别",
拍照: "拍照",
信息: "信息",
切换源: "切换源",
比例: "比例",
公网: "公网",
专网: "专网",
暂无任务: "暂无任务!",
拍照成功: "拍照成功!",
下载: "下载",
正在识别中: "正在识别中...",
识别成功: "识别成功!",
识别完成: "识别完成",
偏航角: "偏航角",
云台偏航: "云台偏航",
云台俯仰: "云台俯仰",
悬停: "悬停",
停止录像: "停止录像",
录像中: "录像中",
单点: "单点",
: "分",
: "秒",
游泳识别: "游泳识别",
异物识别: "异物识别",
漏油识别: "漏油识别",
裸土识别: "裸土识别",
生成航线至少两个航点: "生成航线至少两个航点",
该机库没有经纬度: "该机库没有经纬度",
设备超三个月未进行保养存在安全隐患无法进行正常飞行:
"设备超三个月未进行保养,存在安全隐患,无法进行正常飞行!",
......@@ -594,6 +629,38 @@ export default {
退出接管: "退出接管",
确认退出该用户接管: "确认退出该用户接管?",
操作完成: "操作完成",
视频信息: "视频信息",
是否启动瞄准镜: "是否启动瞄准镜",
摇杆位于中位: "摇杆位于中位",
摇杆未在中位: "摇杆未在中位",
切换源: "切换源",
比例: "比例",
模式切换: "模式切换",
截图: "截图",
当前高度创建航点动作可能不安全: "当前高度创建航点动作可能不安全!",
录像失败NX通信异常: "录像失败,NX通信异常!",
开始: "开始",
结束: "结束",
录像失败: "录像失败",
拍照失败NX通信异常: "拍照失败,NX通信异常!",
拍照完成: "拍照完成",
截屏成功: "截屏成功",
截屏失败: "截屏失败",
抓拍照片: "抓拍照片",
车牌号: "车牌号",
车辆品牌: "车辆品牌",
车主: "车主",
联系号码: "联系号码",
单位编号: "单位编号",
是否有违法未处理: "是否有违法未处理",
有违法未处理: "有违法未处理",
无违法未处理: "无违法未处理",
车辆种类: "车辆种类",
车辆识别代号: "车辆识别代号",
预警地点: "预警地点",
识别时间: "识别时间",
车辆轨迹: "车辆轨迹",
暂无轨迹: "暂无轨迹!",
},
logger: {
运行监控日志: "运行监控日志",
......
......@@ -65,7 +65,7 @@
</div>
<div class="rate-form-item">
<div class="rate-form-item__label">
{{ $t('controlMenu.AI识别') }}
{{ $t('common.AI识别') }}
</div>
<div class="rate=form-item__value">
<template v-if="item.labels && item.labels.length">
......
......@@ -3,9 +3,9 @@
<div class="content_head">
<div class="left">
<img src="../../assets/images/mount_head.png" />
<div class="font">车辆识别</div>
<div class="font">{{ $t('common.车辆识别') }}</div>
</div>
<div class="right" @click="() => $emit('closecar')">关闭</div>
<div class="right" @click="() => $emit('closecar')">{{ $t('common.关闭') }}</div>
</div>
<div class="content_box">
<div class="items" v-show="!show">
......@@ -17,16 +17,16 @@
>
<div class="image">
<img :src="baseUrl + item.imageUrl" alt="" />
<div class="tip">{{ item.plateNum || "暂无" }}</div>
<div class="tip">{{ item.plateNum || $t('common.暂无') }}</div>
</div>
<div class="info">
<div class="row">
<div class="title">地点</div>
<div class="props">{{ item.findAddress || "暂无" }}</div>
<div class="title">{{ $t('common.地点') }}</div>
<div class="props">{{ item.findAddress || $t('common.暂无') }}</div>
</div>
<div class="row">
<div class="title">时间</div>
<div class="props">{{ item.findTime || "暂无" }}</div>
<div class="title">{{ $t('common.时间') }}</div>
<div class="props">{{ item.findTime || $t('common.暂无') }}</div>
</div>
</div>
</div>
......@@ -35,82 +35,82 @@
<div class="image">
<canvas id="canvas" ref="canvas"></canvas>
<!-- <img :src="detail.imageUrl" alt="" /> -->
<div class="tip">抓拍照片</div>
<div class="tip">{{ $t('common.抓拍照片') }}</div>
</div>
<div class="info">
<div class="row" v-if="detail.plateNum">
<div style="display: flex" v-if="detail.plateNum">
<div class="title">车牌号</div>
<div class="props">{{ detail.plateNum || "暂无" }}</div>
<div class="title">{{ $t('common.车牌号') }}</div>
<div class="props">{{ detail.plateNum || $t('common.暂无') }}</div>
</div>
</div>
<div class="row" v-if="detail.carBrand">
<div class="col" v-if="detail.carBrand">
<div class="title">车辆品牌</div>
<div class="props">{{ detail.carBrand || "暂无" }}</div>
<div class="title">{{ $t('common.车辆品牌') }}</div>
<div class="props">{{ detail.carBrand || $t('common.暂无') }}</div>
</div>
</div>
<div class="row" v-if="detail.plateName">
<div style="display: flex" v-if="detail.plateName">
<div class="title">车主</div>
<div class="props">{{ detail.plateName || "暂无" }}</div>
<div class="title">{{ $t('common.车主') }}</div>
<div class="props">{{ detail.plateName || $t('common.暂无') }}</div>
</div>
</div>
<div class="row" v-if="detail.telPhone">
<div class="col" v-if="detail.telPhone">
<div class="title">联系号码</div>
<div class="props">{{ detail.telPhone || "暂无" }}</div>
<div class="title">{{ $t('common.联系号码') }}</div>
<div class="props">{{ detail.telPhone || $t('common.暂无') }}</div>
</div>
</div>
<div class="row" v-if="detail.userCode">
<div style="display: flex" v-if="detail.userCode">
<div class="title">身份证/单位编号</div>
<div class="props">{{ detail.userCode || "暂无" }}</div>
<div class="title">{{ $t('common.身份证号') }}/{{ $t('common.单位编号') }}</div>
<div class="props">{{ detail.userCode || $t('common.暂无') }}</div>
</div>
</div>
<div class="row">
<div style="display: flex">
<div class="title">是否有违法未处理</div>
<div class="title">{{ $t('common.是否有违法未处理') }}</div>
<div class="props">
{{
detail.illegalRecord
? "有违法未处理"
: "无违法未处理" || "暂无"
? $t('common.有违法未处理')
: $t('common.无违法未处理') || $t('common.暂无')
}}
</div>
</div>
<div class="col" v-if="detail.carType">
<div class="title">车辆种类</div>
<div class="props">{{ detail.carType || "暂无" }}</div>
<div class="title">{{ $t('common.车辆种类') }}</div>
<div class="props">{{ detail.carType || $t('common.暂无') }}</div>
</div>
</div>
<div class="row" v-if="detail.carCode">
<div style="display: flex">
<div class="title">车辆识别代号</div>
<div class="props">{{ detail.carCode || "暂无" }}</div>
<div class="title">{{ $t('common.车辆识别代号') }}</div>
<div class="props">{{ detail.carCode || $t('common.暂无') }}</div>
</div>
</div>
<div class="row" v-if="detail.findAddress">
<div style="display: flex">
<div class="title">预警地点</div>
<div class="props">{{ detail.findAddress || "暂无" }}</div>
<div class="title">{{ $t('common.预警地点') }}</div>
<div class="props">{{ detail.findAddress || $t('common.暂无') }}</div>
</div>
</div>
<div class="row" v-if="detail.findTime">
<div style="display: flex">
<div class="title">识别时间</div>
<div class="props">{{ detail.findTime || "暂无" }}</div>
<div class="title">{{ $t('common.识别时间') }}</div>
<div class="props">{{ detail.findTime || $t('common.暂无') }}</div>
</div>
</div>
<div class="row">
<div style="display: flex">
<div class="title">车辆轨迹</div>
<div class="props">{{ detail.locus && detail.locus.length || "0" }}</div>
<div class="cf" @click="add_zysb(detail.locus)">预览</div>
<div class="title">{{ $t('common.车辆轨迹') }}</div>
<div class="props">{{ detail.locus && detail.locus.length || "0" }}{{ $t('common.条') }}</div>
<div class="cf" @click="add_zysb(detail.locus)">{{ $t('common.预览') }}</div>
</div>
</div>
</div>
<div class="btn" @click="show = !show">返回</div>
<div class="btn" @click="show = !show">{{ $t('common.返回') }}</div>
</div>
</div>
</div>
......@@ -205,7 +205,7 @@ export default {
},
async get_car_list() {
if (!this.uavId) {
this.$message.error("请选择无人机");
this.$message.error(this.$t('common.请选择无人机'));
return;
}
let data = {
......@@ -216,7 +216,7 @@ export default {
},
add_zysb(res) {
if(!res) return this.$message.error("暂无轨迹!")
if(!res) return this.$message.error(this.$t('common.暂无轨迹'))
let cesium_layer = this.g_cesium_layer();
cesium_layer.fly_to_globe();
let cate_name = "zysb";
......
......@@ -8,7 +8,7 @@
<div class="name" v-clipboard:copy="vUrl.vUrl">{{ uav.name }}</div>
<!-- <div class="type" v-if="networkType">{{ networkType }}</div> -->
<!-- <div class="types">{{ streamName }}</div> -->
<div v-show="!isStatus" class="close" @click.stop="close()">关闭</div>
<div v-show="!isStatus" class="close" @click.stop="close()">{{ $t('common.关闭') }}</div>
</div>
<!-- <videoModelChange
......@@ -139,12 +139,12 @@
<div class="title_box">
<div class="title pl20">
<img src="./assets/images/mount_head.png" />
<div class="font">视频信息</div>
<div class="font">{{ $t('common.视频信息') }}</div>
</div>
<div style="display: flex">
<div class="icon-box"></div>
<div class="cf ml20 mr10 c70d cp" @click.stop="showInfo = false">
关闭
{{ $t('common.关闭') }}
</div>
</div>
</div>
......@@ -315,7 +315,7 @@
<div class="left">
<el-tooltip
v-if="streamSelect.toUpperCase() == 'QINGLIU'"
content="视频信息"
:content="$t('common.视频信息')"
placement="bottom"
:style="isStatus ? 'margin-left:100px' : ''"
>
......@@ -328,7 +328,7 @@
/>
</el-tooltip>
<el-tooltip
content="是否启动瞄准镜"
:content="$t('common.是否启动瞄准镜')"
placement="bottom"
v-if="!isStatus"
>
......@@ -343,8 +343,8 @@
v-if="!isStatus"
:content="
ygisCenterFlag
? `摇杆位于中位 ${(ygValue && ygValue.toFixed(2)) || ''}`
: `摇杆未在中位 ${(ygValue && ygValue.toFixed(2)) || ''}`
? `${$t('common.摇杆位于中位')} ${(ygValue && ygValue.toFixed(2)) || ''}`
: `${$t('common.摇杆未在中位')} ${(ygValue && ygValue.toFixed(2)) || ''}`
"
placement="bottom"
>
......@@ -361,7 +361,7 @@
<el-select
class="video_type mr24"
v-model="streamSelect"
placeholder="切换源"
:placeholder="$t('common.切换源')"
>
<el-option
v-for="(item, i) in streamOptions"
......@@ -373,7 +373,7 @@
<el-select
class="big_type"
v-model="sizeSelect"
placeholder="比例"
:placeholder="$t('common.比例')"
@change="changeBig"
>
<el-option
......@@ -389,7 +389,7 @@
@click.stop="reset"
></div>
<!-- FPV切换 -->
<el-tooltip content="模式切换" placement="bottom">
<el-tooltip :content="$t('common.模式切换')" placement="bottom">
<div
v-if="streamSelect.toUpperCase() !== 'QINGLIU'"
class="iconfont icon-moshiqiehuan modelStyle menu-item"
......@@ -406,27 +406,27 @@
<div class="right-menu">
<template v-if="uav.network === 2">
<el-tooltip content="拍照" placement="bottom">
<el-tooltip :content="$t('common.拍照')" placement="bottom">
<div class="menu-item plate" @click.stop="photojz">
<img src="./assets/images/ai.png" />
</div>
</el-tooltip>
<el-tooltip
v-if="!screenRecordingStatus"
content="开始录像"
:content="$t('common.开始录像')"
placement="bottom"
>
<div class="record menu-item" @click.stop="getRecord">
<img src="./assets/images/record.png" />
</div>
</el-tooltip>
<el-tooltip v-else content="停止录像" placement="bottom">
<el-tooltip v-else :content="$t('common.停止录像')" placement="bottom">
<div class="record menu-item" @click.stop="getRecord">
<img src="./assets/images/stop.png" />
</div>
</el-tooltip>
</template>
<el-tooltip content="截图" placement="bottom">
<el-tooltip :content="$t('common.截图')" placement="bottom">
<div class="photojz menu-item" @click.stop="photo">
<img src="./assets/images/photojz.svg" />
</div>
......@@ -435,7 +435,7 @@
<div
class="menu-item"
@click.stop="startLinePoint"
content="航点动作"
:content="$t('common.航点动作')"
>
<img src="./assets/images/point_small.svg" />
</div>
......@@ -567,7 +567,7 @@ export default {
*/
networkType() {
// console.log('网络判断', this.uav.videos)
let name = "公网";
let name = this.$t('common.公网');
return name;
},
......@@ -793,7 +793,7 @@ export default {
this.showFlywayAction = true;
} else {
// this.$message.warning("当前高度不可创建航点动作!");
this.$message.warning("当前高度创建航点动作可能不安全!");
this.$message.warning(this.$t('controlMenu.当前高度创建航点动作可能不安全'));
this.showFlywayAction = true;
}
},
......@@ -890,7 +890,7 @@ export default {
return;
}
if (this.healthData.NX.code !== "0x2110000") {
return this.$message.error("录像失败,NX通信异常!");
return this.$message.error(this.$t('common.录像失败NX通信异常'));
}
this.screenRecordingStatus = !this.screenRecordingStatus;
this.$store.dispatch("MMCFlightControlCenter/uav/videoTranscribe", {
......@@ -903,11 +903,11 @@ export default {
callback: (isOk) => {
if (isOk) {
this.$message.success(
`${this.screenRecordingStatus ? "开始" : "结束"}录像`
`${this.screenRecordingStatus ? this.$t('common.开始') : this.$t('common.结束')}${this.$t('common.录像')}`
);
} else {
this.$message.error(
`${this.screenRecordingStatus ? "开始" : "结束"}录像失败`
`${this.screenRecordingStatus ? this.$t('common.开始') : this.$t('common.结束')}${this.$t('common.录像失败')}`
);
this.screenRecordingStatus = !this.screenRecordingStatus;
}
......@@ -922,7 +922,7 @@ export default {
return;
}
if (this.healthData.NX.code !== "0x2110000") {
return this.$message.error("拍照失败,NX通信异常!");
return this.$message.error(this.$t('common.拍照失败NX通信异常'));
}
this.$store.dispatch("MMCFlightControlCenter/uav/takePhotos", {
isQingLiu: this.isQingLiu,
......@@ -931,7 +931,7 @@ export default {
name: "z30Pro", // 挂载名称(如果知道挂载名称,将传名称即可,通道号可以不用传)
taskID: "", // 任务ID,可传可不传 */
callback: (isOk) => {
isOk && this.$message.success(`拍照完成`);
isOk && this.$message.success(this.$t('common.拍照完成'));
},
});
},
......@@ -943,7 +943,7 @@ export default {
if (blob) {
console.log(blob, window.URL.createObjectURL(blob));
let formData = new FormData();
formData.append("file", blob, `截图.jpeg`);
formData.append("file", blob, `${this.$t('common.截图')}.jpeg`);
let uploadRes = await ViewLibrary.uploadFile(formData);
if (uploadRes.code === 0) {
......@@ -953,16 +953,16 @@ export default {
deviceId: this.uav.deviceId,
});
if (res.code === 0) {
this.$message.success("截屏成功");
this.$message.success(this.$t('common.截屏成功'));
} else {
this.$message.error(res.msg || "截屏失败");
this.$message.error(res.msg || this.$t('common.截屏失败'));
}
} else {
this.$message.error(uploadRes.msg || "截屏失败");
this.$message.error(uploadRes.msg || this.$t('common.截屏失败'));
}
return;
}
this.$message.warning("截屏失败");
this.$message.warning(this.$t('common.截屏失败'));
},
// 人脸车牌识别
handle(command) {
......@@ -1166,7 +1166,6 @@ export default {
position: absolute;
top: 0;
right: 0;
width: 46px;
height: 26px;
text-align: center;
line-height: 26px;
......
......@@ -243,7 +243,6 @@ export default {
let tmjData = JSON.parse(localStorage.getItem("tmj"));
if (tmjData) {
const userList = this.handleGetMenuList(tmjData.user.menuList);
console.log(userList, "userList");
// 使用一个映射对象来存储权限ID和对应的标志
const permissionMap = {
3108: "IsShowPane", // 控制面板权限
......
......@@ -147,7 +147,7 @@
</div>
</div>
<div class="form-item">
<div class="label-box">AI识别:</div>
<div class="label-box">{{$t('common.AI识别')}}:</div>
<div class="input-box">
<el-radio-group v-model="ai_mode" @change="handle_change_ai_mode">
<el-radio
......
......@@ -323,7 +323,7 @@
</div>
<div class="form-item">
<div class="label-box">AI识别:</div>
<div class="label-box">{{ $t('common.AI识别')}}:</div>
<div class="input-box">
<el-radio-group @change="handle_change_ai_mode" v-model="ai_mode">
<el-radio
......
......@@ -58,7 +58,7 @@
<div class="props">{{ item.addr || item.address || '暂无' }}</div>
</div>
<div class="row">
<div class="title">AI识别</div>
<div class="title">{{$t('common.AI识别')}} </div>
<div class="props border">{{ item.labels[0] || '暂无' }}</div>
</div>
</div>
......
......@@ -581,7 +581,6 @@ export default {
}
.close {
flex-shrink: 0;
width: 46px;
height: 26px;
text-align: center;
line-height: 26px;
......
......@@ -2,7 +2,7 @@
<div>
<div class="right-box mt10">
<div class="before-point" :class="{ disabled: action.curr_index <= 0 }" @click="handle_before_point">
上一航点
{{ $t('上一航点') }}
</div>
<div class="no">
<span class="current">{{ action.curr_index }}</span>
......@@ -13,26 +13,26 @@
<div class="after-point" :class="{
disabled: action.curr_index >= airline.points.length,
}" @click="handle_after_point">
下一航点
{{ $t('下一航点') }}
</div>
</div>
<div class="ctx-box">
<div class="form-box">
<el-form ref="form" :model="form" :rules="rules" label-width="96px">
<el-form-item label="航线名称">
<el-form-item :label="$t('航线名称')">
<el-input :disabled="true" v-model="airline.filename" />
</el-form-item>
<el-form-item label="航线速度">
<el-form-item :label="$t('航线速度')">
<div class="item-group">
<el-input oninput="value=value.replace(/[^0-9.]/g,'')" v-model="airline.line.baseSpeed" />
<span class="unit">( m/s )</span>
</div>
</el-form-item>
<el-form-item label="目标位置" prop="destination">
<el-form-item :label="$t('目标位置')" prop="destination">
<div class="item-group" :title="form.destination">
<el-autocomplete :popper-append-to-body='false' v-model="destination.name" :fetch-suggestions="handle_query_address_async"
placeholder="请输入目标位置" :trigger-on-focus="false" @select="handle_select_address" clearable>
:placeholder="$t('请输入目标位置')" :trigger-on-focus="false" @select="handle_select_address" clearable>
<template slot-scope="{ item }">
<div>
<span style="font-size: 14px; color: #333">{{
......@@ -46,52 +46,52 @@
</div>
</el-form-item>
<!-- <div class="divider"></div> -->
<el-form-item label="选择鹰巢" v-if="flag" prop="nestId">
<el-form-item :label="$t('选择鹰巢')" v-if="flag" prop="nestId">
<el-select v-model="form.nestId" :popper-append-to-body="false">
<el-option v-for="item in getNestListForLineList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="场景" prop="scene">
<el-form-item :label="$t('场景')" prop="scene">
<el-select v-model="scene" :popper-append-to-body="false" @change="handle_change">
<el-option v-for="item in scene_list" :key="item.id" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
<el-form-item label="纬度" prop="lat">
<el-form-item :label="$t('纬度')" prop="lat">
<el-input v-model="form.lat" oninput="value=value.replace(/[^0-9.]/g,'')" />
</el-form-item>
<el-form-item label="经度" prop="lon">
<el-form-item :label="$t('经度')" prop="lon">
<el-input v-model="form.lon" oninput="value=value.replace(/[^0-9.]/g,'')" />
</el-form-item>
<el-form-item label="高度" prop="alt">
<el-form-item :label="$t('高度')" prop="alt">
<div class="item-group">
<el-input @change="(val) => handle_change_field('alt', val)" v-model.number="form.alt"
oninput="value=value.replace(/[^0-9.]/g,'')" />
<span class="unit">( m )</span>
</div>
</el-form-item>
<el-form-item label="偏航角">
<el-form-item :label="$t('偏航角')">
<div class="item-group">
<el-input-number @change="(val) => handle_change_field('pitch', val)" v-model="form.pitch" :min="-90"
:max="90" label="描述文字" oninput="value=value.replace(/[^0-9.]/g,'')"></el-input-number>
<span class="unit">( ° )</span>
</div>
</el-form-item>
<el-form-item label="俯仰角">
<el-form-item :label="$t('俯仰角')">
<div class="item-group">
<el-input-number @change="(val) => handle_change_field('gimbalPitch', val)" v-model="form.gimbalPitch"
:min="-90" :max="90" label="描述文字" oninput.native="value=value.replace(/[^0-9.]/g,'')"></el-input-number>
<span class="unit">( ° )</span>
</div>
</el-form-item>
<el-form-item label="航线标签" prop="lat">
<el-select v-model="labvalue" multiple placeholder="请选择航线标签">
<el-form-item :label="$t('航线标签')" prop="lat">
<el-select v-model="labvalue" multiple :placeholder="$t('请选择航线标签')">
<el-option v-for="item in LablistL" :key="item.id" :label="item.labelName" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="航点动作" prop="actions">
<el-link @click="handle_show_action" style="color: #409eff">{{ form.actions.length }}个动作<i
<el-form-item :label="$t('航点动作')" prop="actions">
<el-link @click="handle_show_action" style="color: #409eff">{{ form.actions.length }}{{ $t('个动作') }}<i
class="el-icon-d-arrow-right"></i>
</el-link>
</el-form-item>
......@@ -101,8 +101,8 @@
<div class="bottom-box">
<!-- <div class="iconfont icon-zengjia" title="添加"></div> -->
<div @click="handle_save_line" class="iconfont icon-baocun" title="保存航线"></div>
<div @click="handle_remove_point" class="iconfont icon-shanchu" title="删除航点"></div>
<div @click="handle_save_line" class="iconfont icon-baocun" :title="$t('保存航线')"></div>
<div @click="handle_remove_point" class="iconfont icon-shanchu" :title="$t('删除航点')"></div>
</div>
<!-- <el-dialog
......@@ -120,22 +120,22 @@
> -->
<div class="w500 action-list" v-if="action.visible">
<div class="header">
<div class="hd-box">新增航点动作</div>
<div class="hd-box">{{ $t('新增航点动作') }}</div>
<div class="hd-box cp mr20" @click="
action.visible = false;
action.list = [];
">
关闭
{{ $t('关闭') }}
</div>
</div>
<div class="actions-box">
<div class="title-box">
<div class="title">航点动作</div>
<div class="title">{{ $t('航点动作') }}</div>
<el-dropdown trigger="click">
<el-button size="small" type="primary" icon="el-icon-plus">增加</el-button>
<el-button size="small" type="primary" icon="el-icon-plus">{{ $t('增加') }}</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item, index) in action.types" :key="index">
<div @click="handle_add_action(item)">{{ item.label }}</div>
<div @click="handle_add_action(item)">{{ $t(item.label) }}</div>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
......@@ -146,7 +146,7 @@
<div v-if="item.input" class="item-input">
<component :is="item.input" :min="item.min" :max="item.max" v-model="item.actionParam" />
</div>
<div @click="handle_delete_action(index, item)" class="iconfont icon-shanchu" title="删除"></div>
<div @click="handle_delete_action(index, item)" class="iconfont icon-shanchu" :title="$t('删除')"></div>
</div>
</div>
</div>
......@@ -154,8 +154,8 @@
<el-button size="small" @click="
action.visible = false;
action.list = [];
">取 消</el-button>
<el-button size="small" type="primary" @click="handle_save_action">确 定</el-button>
">{{ $t('取 消') }}</el-button>
<el-button size="small" type="primary" @click="handle_save_action">{{ $t('确 定') }}</el-button>
</span>
</div>
<!-- </el-dialog> -->
......@@ -190,7 +190,7 @@
// /^[\-\+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/;
console.log("value", value);
if (value < -180 || value > 180) {
callback(new Error("请输入正确经度值(-180.0-180.0)"));
callback(new Error(this.$t('请输入正确经度值(-180.0-180.0)')));
} else {
callback();
}
......@@ -199,21 +199,21 @@
// let reg = /^[\-\+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/;
console.log("value", value);
if (value < -90 || value > 90) {
callback(new Error("请输入正确纬度值(-90.0-90.0)"));
callback(new Error(this.$t('请输入正确纬度值(-90.0-90.0)')));
} else {
callback();
}
};
let validateAlt = (rule, value, callback) => {
if (value > 150) {
callback(new Error("航点高度不可超过150m"));
callback(new Error(this.$t('航点高度不可超过150m')));
} else {
callback();
}
};
let validateNestId = (rule, value, callback) => {
if (!value) {
callback(new Error("请选择鹰巢"));
callback(new Error(this.$t('请选择鹰巢')));
} else {
callback();
}
......
......@@ -7,9 +7,9 @@
<div class="name" v-clipboard:copy="vUrl.vUrl">{{ data.orgName }}-{{ data.deviceName }}</div>
<div class="type" v-if="networkType">{{ networkType }}</div>
<div class="types">{{ streamName }}</div>
<div v-show="!isStatus" class="close" @click="close(data)">关闭</div>
<div v-show="!isStatus" class="close" @click="close(data)">{{ $t('common.关闭') }}</div>
</div>
<el-tooltip content="模式切换" placement="bottom" v-if="streamSelect !== 'QingLiu'">
<el-tooltip :content="$t('common.模式切换')" placement="bottom" v-if="streamSelect !== 'QingLiu'">
<div class="cp pa iconfont icon-moshiqiehuan cf modelStyle" @click="change"></div>
</el-tooltip>
<components
......@@ -94,7 +94,7 @@
</div> -->
</div>
<div class="play">
<el-tooltip v-if="streamSelect == 'QingLiu'" class="left ml24" content="信息" placement="bottom">
<el-tooltip v-if="streamSelect == 'QingLiu'" class="left ml24" :content="$t('common.信息')" placement="bottom">
<div @click="getInfo">
<img src="~./assets/info.png" alt="">
</div>
......@@ -102,7 +102,7 @@
<div v-else class="left ml24"></div>
<div class="right mr14">
<div class="search mr22">
<el-select class="video_type mr24" v-model="streamSelect" placeholder="切换源">
<el-select class="video_type mr24" v-model="streamSelect" :placeholder="$t('common.切换源')">
<el-option
v-for="item in streamOptions"
:key="item.value"
......@@ -110,7 +110,7 @@
:value="item.value"
></el-option>
</el-select>
<el-select class="big_type" v-model="sizeSelect" placeholder="比例" @change="changeBig">
<el-select class="big_type" v-model="sizeSelect" :placeholder="$t('common.比例')" @change="changeBig">
<el-option
v-for="item in sizeOptions2"
:key="item.value"
......@@ -123,24 +123,24 @@
<div class="pointer iconfont icon-quanping cf f16" @click="screen"></div>
</div>
</div>
<el-tooltip class="cp pa right10 cf ai" content="AI识别" placement="bottom">
<el-tooltip class="cp pa right10 cf ai" :content="$t('common.AI识别')" placement="bottom">
<div @click="aiVisible = !aiVisible">
<img src="~./assets/car.png" />
</div>
</el-tooltip>
<div class="faceAndcar cp pa right70 cf" v-if="aiVisible">
<el-tooltip content="人脸识别" placement="bottom">
<el-tooltip :content="$t('common.人脸识别')" placement="bottom">
<div class="plan" @click="handle('a')">
<img src="~./assets/faceAI2.png" />
</div>
</el-tooltip>
<el-tooltip content="车辆识别" placement="bottom">
<el-tooltip :content="$t('common.车辆识别')" placement="bottom">
<div class="plan" @click="handle('b')">
<img src="~./assets/carAI2.png" />
</div>
</el-tooltip>
</div>
<el-tooltip content="拍照" placement="bottom">
<el-tooltip :content="$t('common.拍照')" placement="bottom">
<div class="cp pa right10 cf plate" @click="photo">
<img src="~./assets/ai.png" />
</div>
......@@ -263,21 +263,21 @@ export default {
let name = "";
try {
if (this.data.videos.checkOnLine == 1) {
name = "公网";
name = this.$t('common.公网');
} else {
if (this.uavData?.link) {
if (this.uavData?.link[0]?.priority == 2) {
if (this.uavData?.link[0]?.using) {
name = "专网";
name = this.$t('common.专网');
} else {
name = "公网";
name = this.$t('common.公网');
}
}
if (this.uavData?.link[0]?.priority == 3) {
if (this.uavData?.link[0]?.using) {
name = "公网";
name = this.$t('common.公网');
} else {
name = "专网";
name = this.$t('common.专网');
}
}
}
......@@ -294,7 +294,7 @@ export default {
streams() {
let networkKey1 = "";
let networkKey2 = "";
if (this.networkType === "专网") {
if (this.networkType === this.$t('common.专网')) {
networkKey1 = "private";
networkKey2 = "public";
} else {
......@@ -478,17 +478,17 @@ export default {
},
async photo() {
if (!this.taskId) {
this.$message.error("暂无任务!");
this.$message.error(this.$t('common.暂无任务'));
return;
}
let blob = this.screenShot();
let fd = new FormData();
fd.append("uploadFile", blob, `拍照.png`);
fd.append("uploadFile", blob, `${this.$t('common.拍照')}.png`);
fd.append("taskId", this.taskId);
fd.append("deviceHardId", this.device.deviceHardId);
/* let res = await API.FCKERNEL.Upload(fd);
console.log(res); */
this.$message.success("拍照成功!")
this.$message.success(this.$t('common.拍照成功'));
let imgshowurl = process.env.VUE_APP_IMG_URL + '/uploads' +res.fileKey
this.$emit("imgUrl",imgshowurl)
......@@ -500,7 +500,7 @@ export default {
async getcanvas(command) {
let blob = this.screenShot();
let fd = new FormData();
fd.append("uploadFiles", blob, `下载.jpeg`);
fd.append("uploadFiles", blob, `${this.$t('common.下载')}.jpeg`);
/* let res = await API.MAPMANAGE.fileUpload(fd);
if (command == "a") {
this.aiuse(res[0].storage);
......@@ -513,10 +513,10 @@ export default {
imageUrl: url,
deviceHardId: this.device.deviceHardId,
};
this.$el_message("正在识别中...", () => {}, "info", 0);
this.$el_message(this.$t('common.正在识别中'), () => {}, "info", 0);
/* let res = await API.AIUSE.aiphoto(data);
if (res.code == 200) {
this.$el_message("识别成功!", () => {}, "success");
this.$el_message(this.$t('common.识别成功'), () => {}, "success");
this.faceAiShow = true;
} else {
this.$el_message(res.message, () => {}, "error");
......@@ -527,10 +527,10 @@ export default {
imgUrl: url,
deviceHardId: this.device.deviceHardId,
};
this.$el_message("正在识别中...", () => {}, "info", 0);
this.$el_message(this.$t('common.正在识别中'), () => {}, "info", 0);
/* let res = await API.AIUSE.palteId(data);
if (res.code == 200) {
this.$el_message("识别完成", () => {}, "success");
this.$el_message(this.$t('common.识别完成'), () => {}, "success");
this.carList = res.data;
this.carAiShow = true;
} else {
......@@ -673,7 +673,6 @@ export default {
position: absolute;
top: 0;
right: 0;
width: 46px;
height: 26px;
text-align: center;
line-height: 26px;
......
......@@ -403,7 +403,6 @@ export default {
position: absolute;
top: 0;
right: 0;
width: 46px;
height: 26px;
text-align: center;
line-height: 26px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论