Merge branch 'main' into dev_20260130_RemoveRedis
# Conflicts: # backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/service/impl/SarImageServiceImpl.java
This commit is contained in:
commit
c9c37dc219
@ -45,7 +45,7 @@ public class ImageUtil {
|
|||||||
int lightRate = rotateDTO.getLightRate();
|
int lightRate = rotateDTO.getLightRate();
|
||||||
if (lightRate != 0) {
|
if (lightRate != 0) {
|
||||||
//OpenCVUtil.multiply(image, lightRate);
|
//OpenCVUtil.multiply(image, lightRate);
|
||||||
OpenCVUtil.enhanceContrast(image, lightRate, 0);
|
// OpenCVUtil.enhanceContrast(image, lightRate, 0);
|
||||||
}
|
}
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,18 +78,18 @@ public class SarImageServiceImpl implements ISarImageService {
|
|||||||
}
|
}
|
||||||
// 情况2:如果最后一张还能拼图,则直接返回继续拼
|
// 情况2:如果最后一张还能拼图,则直接返回继续拼
|
||||||
JmImage last = imageList.get(imageList.size() - 1);
|
JmImage last = imageList.get(imageList.size() - 1);
|
||||||
Integer startFrameNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_START_FRAME_NO, Integer.class);
|
// Integer startFrameNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_START_FRAME_NO, Integer.class);
|
||||||
int currWidth = startFrameNo == null ? 0 : singleWidth * (frameNo - startFrameNo + 1);
|
// int currWidth = startFrameNo == null ? 0 : singleWidth * (frameNo - startFrameNo + 1);
|
||||||
int surplusNum = (IMG_MAX_WITH - currWidth) / singleWidth; // 还可以拼图片数
|
// int surplusNum = (IMG_MAX_WITH - currWidth) / singleWidth; // 还可以拼图片数
|
||||||
Integer baseNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_CURR_FRAME_NO, Integer.class);
|
// Integer baseNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_CURR_FRAME_NO, Integer.class);
|
||||||
|
//
|
||||||
if (startFrameNo == null || currWidth < IMG_MAX_WITH ||
|
// if (startFrameNo == null || currWidth < IMG_MAX_WITH ||
|
||||||
baseNo == null || (frameNo - baseNo + 1 <= surplusNum)) {
|
// baseNo == null || (frameNo - baseNo + 1 <= surplusNum)) {
|
||||||
log.info("当前宽度:{} < {} 可以继续拼接", currWidth, IMG_MAX_WITH);
|
// log.info("当前宽度:{} < {} 可以继续拼接", currWidth, IMG_MAX_WITH);
|
||||||
return last;
|
// return last;
|
||||||
}
|
// }
|
||||||
// 情况3:已经拼接到最大数量,或者当前图+填充数量超过允许拼接数量,创建新图像文件
|
// 情况3:已经拼接到最大数量,或者当前图+填充数量超过允许拼接数量,创建新图像文件
|
||||||
log.info("当前宽度:{} > {} 重新拼接,当前帧号{}作为首帧", currWidth, IMG_MAX_WITH, frameNo);
|
// log.info("当前宽度:{} > {} 重新拼接,当前帧号{}作为首帧", currWidth, IMG_MAX_WITH, frameNo);
|
||||||
base = new JmImage();
|
base = new JmImage();
|
||||||
imageCache.put(cachePrefix + ":" + CACHE_FIELD_START_FRAME_NO, frameNo);
|
imageCache.put(cachePrefix + ":" + CACHE_FIELD_START_FRAME_NO, frameNo);
|
||||||
base.setImageNo(last.getImageNo() + 1);
|
base.setImageNo(last.getImageNo() + 1);
|
||||||
@ -105,9 +105,6 @@ public class SarImageServiceImpl implements ISarImageService {
|
|||||||
currAirline.setBeforeRight(before);
|
currAirline.setBeforeRight(before);
|
||||||
}
|
}
|
||||||
// 使用前一张图的右侧坐标作为后一张图的左侧,前提是没丢图
|
// 使用前一张图的右侧坐标作为后一张图的左侧,前提是没丢图
|
||||||
if (!isFirst && !lostImage) {
|
|
||||||
// 注释部分保持原样
|
|
||||||
}
|
|
||||||
before[0] = imageFrame.getLon5();
|
before[0] = imageFrame.getLon5();
|
||||||
before[1] = imageFrame.getLat5();
|
before[1] = imageFrame.getLat5();
|
||||||
before[2] = imageFrame.getLon8();
|
before[2] = imageFrame.getLon8();
|
||||||
|
|||||||
@ -175,6 +175,8 @@ export default {
|
|||||||
left: 'Left',
|
left: 'Left',
|
||||||
right: 'Right',
|
right: 'Right',
|
||||||
},
|
},
|
||||||
|
uavline: "Airline",
|
||||||
|
createAirline: 'Create Airline',
|
||||||
rules: {
|
rules: {
|
||||||
inputTaskName: 'Please enter task name',
|
inputTaskName: 'Please enter task name',
|
||||||
startAltitude: 'Please enter start altitude',
|
startAltitude: 'Please enter start altitude',
|
||||||
|
|||||||
@ -170,6 +170,12 @@ export default {
|
|||||||
stopTaskConfirm: '确定要结束该任务吗?',
|
stopTaskConfirm: '确定要结束该任务吗?',
|
||||||
stopTaskSuccess: '任务已结束!',
|
stopTaskSuccess: '任务已结束!',
|
||||||
planArea: '规划区域',
|
planArea: '规划区域',
|
||||||
|
direction: {
|
||||||
|
left: '左侧视',
|
||||||
|
right: '右侧视',
|
||||||
|
},
|
||||||
|
uavline: "航线",
|
||||||
|
createAirline: '创建航线',
|
||||||
rules: {
|
rules: {
|
||||||
inputTaskName: '请输入任务名称',
|
inputTaskName: '请输入任务名称',
|
||||||
startAltitude: '请输入起飞点高度',
|
startAltitude: '请输入起飞点高度',
|
||||||
@ -219,10 +225,6 @@ export default {
|
|||||||
tip: '提示',
|
tip: '提示',
|
||||||
radarEndSuccess: '雷达关机成功',
|
radarEndSuccess: '雷达关机成功',
|
||||||
deleteConfirm: '确定要删除该?',
|
deleteConfirm: '确定要删除该?',
|
||||||
direction: {
|
|
||||||
left: '左侧视',
|
|
||||||
right: '右侧视',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
picture: {
|
picture: {
|
||||||
list: '影像列表',
|
list: '影像列表',
|
||||||
|
|||||||
@ -8,7 +8,6 @@
|
|||||||
}"
|
}"
|
||||||
icon="ri-list-unordered"
|
icon="ri-list-unordered"
|
||||||
:title="this.$t('task.taskList')"
|
:title="this.$t('task.taskList')"
|
||||||
|
|
||||||
:visible.sync="taskList.visible"
|
:visible.sync="taskList.visible"
|
||||||
:scroll="false"
|
:scroll="false"
|
||||||
:showClose="false"
|
:showClose="false"
|
||||||
@ -94,9 +93,15 @@
|
|||||||
<i class="ri-more-fill"></i>
|
<i class="ri-more-fill"></i>
|
||||||
</span>
|
</span>
|
||||||
<el-dropdown-menu slot="dropdown">
|
<el-dropdown-menu slot="dropdown">
|
||||||
<el-dropdown-item command="edit">{{ $t('task.editName') }}</el-dropdown-item>
|
<el-dropdown-item command="edit">{{
|
||||||
<el-dropdown-item command="copy">{{ $t('task.copy') }}</el-dropdown-item>
|
$t('task.editName')
|
||||||
<el-dropdown-item command="remove">{{ $t('task.delete') }}</el-dropdown-item>
|
}}</el-dropdown-item>
|
||||||
|
<el-dropdown-item command="copy">{{
|
||||||
|
$t('task.copy')
|
||||||
|
}}</el-dropdown-item>
|
||||||
|
<el-dropdown-item command="remove">{{
|
||||||
|
$t('task.delete')
|
||||||
|
}}</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
</div>
|
</div>
|
||||||
@ -233,9 +238,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="$t('task.airline')" v-if="form.mode === '3'">
|
<el-form-item :label="$t('task.uavline')" v-if="form.mode === '3'">
|
||||||
<div class="airline-wrap">
|
<div class="airline-wrap">
|
||||||
<div class="airline-create" @click="createAirline">{{ $t('task.createAirline') }}</div>
|
<div class="airline-create" @click="createAirline">
|
||||||
|
{{ $t('task.createAirline') }}
|
||||||
|
</div>
|
||||||
<div class="airline-list">
|
<div class="airline-list">
|
||||||
<div
|
<div
|
||||||
class="airline-item"
|
class="airline-item"
|
||||||
@ -405,7 +412,10 @@
|
|||||||
<el-option label="16bit" :value="1"></el-option>
|
<el-option label="16bit" :value="1"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('task.sideViewDirection')" v-if="form.mode !== '3'">
|
<el-form-item
|
||||||
|
:label="$t('task.sideViewDirection')"
|
||||||
|
v-if="form.mode !== '3'"
|
||||||
|
>
|
||||||
<el-select
|
<el-select
|
||||||
popper-class="form-light"
|
popper-class="form-light"
|
||||||
size="small"
|
size="small"
|
||||||
@ -455,7 +465,10 @@
|
|||||||
size="mini"
|
size="mini"
|
||||||
></el-slider>
|
></el-slider>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="form.mode !== '2'" :label="$t('task.waveAngle')">
|
<el-form-item
|
||||||
|
v-if="form.mode !== '2'"
|
||||||
|
:label="$t('task.waveAngle')"
|
||||||
|
>
|
||||||
<el-slider
|
<el-slider
|
||||||
v-model="form.waveAngle"
|
v-model="form.waveAngle"
|
||||||
:step="0.1"
|
:step="0.1"
|
||||||
@ -492,7 +505,9 @@
|
|||||||
@click="previewLine"
|
@click="previewLine"
|
||||||
>{{ $t('common.preview') }}</el-button
|
>{{ $t('common.preview') }}</el-button
|
||||||
>
|
>
|
||||||
<el-button size="mini" type="primary" @click="submit">{{ $t('common.save') }}</el-button>
|
<el-button size="mini" type="primary" @click="submit">{{
|
||||||
|
$t('common.save')
|
||||||
|
}}</el-button>
|
||||||
</div>
|
</div>
|
||||||
</dt-card>
|
</dt-card>
|
||||||
</left-slide>
|
</left-slide>
|
||||||
@ -540,15 +555,25 @@
|
|||||||
<div class="task-line-detail">
|
<div class="task-line-detail">
|
||||||
<el-table :data="taskLineDetail.data" height="100%" style="width: 100%">
|
<el-table :data="taskLineDetail.data" height="100%" style="width: 100%">
|
||||||
<el-table-column type="index" width="50"> </el-table-column>
|
<el-table-column type="index" width="50"> </el-table-column>
|
||||||
<el-table-column prop="startLon" :label="$t('task.airline.startLon')"> </el-table-column>
|
<el-table-column prop="startLon" :label="$t('task.airline.startLon')">
|
||||||
<el-table-column prop="startLat" :label="$t('task.airline.startLat')"> </el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="startHeight" :label="$t('task.airline.startHeight')">
|
<el-table-column prop="startLat" :label="$t('task.airline.startLat')">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="startHeight"
|
||||||
|
:label="$t('task.airline.startHeight')"
|
||||||
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="startAlt" :label="$t('task.airline.startAlt')">
|
<el-table-column prop="startAlt" :label="$t('task.airline.startAlt')">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="endLon" :label="$t('task.airline.endLon')"> </el-table-column>
|
<el-table-column prop="endLon" :label="$t('task.airline.endLon')">
|
||||||
<el-table-column prop="endLat" :label="$t('task.airline.endLat')"> </el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="endHeight" :label="$t('task.airline.endHeight')">
|
<el-table-column prop="endLat" :label="$t('task.airline.endLat')">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="endHeight"
|
||||||
|
:label="$t('task.airline.endHeight')"
|
||||||
|
>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="endAlt" :label="$t('task.airline.endAlt')">
|
<el-table-column prop="endAlt" :label="$t('task.airline.endAlt')">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export default class OrthoImageryManager {
|
|||||||
/**
|
/**
|
||||||
* 添加或更新新推送的图片
|
* 添加或更新新推送的图片
|
||||||
*/
|
*/
|
||||||
add(data) {
|
add(data, brightness) {
|
||||||
const key = `${data.jobId}-${data.uavId}~${data.fileId}`;
|
const key = `${data.jobId}-${data.uavId}~${data.fileId}`;
|
||||||
|
|
||||||
// 已存在则跳过
|
// 已存在则跳过
|
||||||
@ -39,7 +39,7 @@ export default class OrthoImageryManager {
|
|||||||
const layer = this.viewer.cesiumViewer.imageryLayers.addImageryProvider(provider);
|
const layer = this.viewer.cesiumViewer.imageryLayers.addImageryProvider(provider);
|
||||||
|
|
||||||
// ✅ 使用全局亮度和透明度,保证新图生效
|
// ✅ 使用全局亮度和透明度,保证新图生效
|
||||||
layer.brightness = this.globalBrightness;
|
layer.brightness = brightness ? brightness : this.globalBrightness;
|
||||||
layer.alpha = this.globalAlpha;
|
layer.alpha = this.globalAlpha;
|
||||||
|
|
||||||
this.layerMap.set(key, layer);
|
this.layerMap.set(key, layer);
|
||||||
@ -52,7 +52,7 @@ export default class OrthoImageryManager {
|
|||||||
* 设置全局亮度,影响所有已有图片和未来新推送的图片
|
* 设置全局亮度,影响所有已有图片和未来新推送的图片
|
||||||
*/
|
*/
|
||||||
setBrightness(value) {
|
setBrightness(value) {
|
||||||
this.globalBrightness = value;
|
// this.globalBrightness = value;
|
||||||
this.layerMap.forEach(layer => {
|
this.layerMap.forEach(layer => {
|
||||||
layer.brightness = value;
|
layer.brightness = value;
|
||||||
});
|
});
|
||||||
|
|||||||
@ -375,7 +375,7 @@ export default {
|
|||||||
lightPercent: 0,
|
lightPercent: 0,
|
||||||
contrastPercent: 10,
|
contrastPercent: 10,
|
||||||
imageInfos: {
|
imageInfos: {
|
||||||
brightness: 10
|
brightness: 5
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -487,7 +487,7 @@ export default {
|
|||||||
// )
|
// )
|
||||||
orthoManager = new OrthoImageryManager(viewer, DT.Cesium, {
|
orthoManager = new OrthoImageryManager(viewer, DT.Cesium, {
|
||||||
maxLayers: 400,
|
maxLayers: 400,
|
||||||
brightness: 1.2, // 默认亮度
|
brightness: 1, // 默认亮度
|
||||||
alpha: 1.0 // 默认透明度
|
alpha: 1.0 // 默认透明度
|
||||||
})
|
})
|
||||||
// this.startTest()
|
// this.startTest()
|
||||||
@ -580,11 +580,11 @@ export default {
|
|||||||
// 亮度设置变化
|
// 亮度设置变化
|
||||||
onLightChange: debounce(function (val) {
|
onLightChange: debounce(function (val) {
|
||||||
const imageInfos = { ...this.imageInfos }
|
const imageInfos = { ...this.imageInfos }
|
||||||
orthoManager.setBrightness(val / 10)
|
orthoManager.setBrightness(val)
|
||||||
execBrightnessexport(imageInfos).then(res => {
|
// execBrightnessexport(imageInfos).then(res => {
|
||||||
console.log('亮度调整成功');
|
// console.log('亮度调整成功');
|
||||||
// this.$message.success('亮度调整成功')
|
// // this.$message.success('亮度调整成功')
|
||||||
})
|
// })
|
||||||
}, 500),
|
}, 500),
|
||||||
// startTest() {
|
// startTest() {
|
||||||
// let testHeight = 1000
|
// let testHeight = 1000
|
||||||
@ -2818,10 +2818,10 @@ export default {
|
|||||||
handleWebsocketImage(info) {
|
handleWebsocketImage(info) {
|
||||||
// console.log('SAR图像', info.body)
|
// console.log('SAR图像', info.body)
|
||||||
let data = JSON.parse(info.body)
|
let data = JSON.parse(info.body)
|
||||||
this.imageInfos = Object.assign({}, this.imageInfos, data)
|
// this.imageInfos = Object.assign({}, this.imageInfos, data)
|
||||||
this.imageInfos.brightness = data.brightness
|
// this.imageInfos.brightness = data.brightness
|
||||||
console.log('SAR图像2', data)
|
console.log('SAR图像2', data)
|
||||||
orthoManager.add(data)
|
orthoManager.add(data, this.imageInfos.brightness)
|
||||||
// this.addMarkPicture2(data)
|
// this.addMarkPicture2(data)
|
||||||
// console.log('灭有匹配到吗taskUavCollection', taskUavCollection, taskUavCollection[data.jobId])
|
// console.log('灭有匹配到吗taskUavCollection', taskUavCollection, taskUavCollection[data.jobId])
|
||||||
// if (taskUavCollection[data.jobId]) {
|
// if (taskUavCollection[data.jobId]) {
|
||||||
@ -3040,6 +3040,10 @@ export default {
|
|||||||
viewer.entities.remove(item)
|
viewer.entities.remove(item)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
if (orthoManager) {
|
||||||
|
orthoManager.clearAll()
|
||||||
|
orthoManager = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (data.jobStatus === 1 && this.detailUav.id === data.jobId) {
|
if (data.jobStatus === 1 && this.detailUav.id === data.jobId) {
|
||||||
this.updateUavInfo(data.sarStatus)
|
this.updateUavInfo(data.sarStatus)
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<span class="remote-header">
|
<span class="remote-header">
|
||||||
<i class="ri-task-fill"></i>
|
<i class="ri-task-fill"></i>
|
||||||
{{ $t('task.executingTasks') }}
|
{{ $t('task.executingTasks') }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<div class="task-list__content">
|
<div class="task-list__content">
|
||||||
@ -91,9 +91,9 @@
|
|||||||
<el-slider
|
<el-slider
|
||||||
v-model="imageInfos.brightness"
|
v-model="imageInfos.brightness"
|
||||||
show-input
|
show-input
|
||||||
:min="1"
|
:min="0.1"
|
||||||
:max="30"
|
:max="20"
|
||||||
:step="1"
|
:step="0.1"
|
||||||
input-size="mini"
|
input-size="mini"
|
||||||
:show-input-controls="false"
|
:show-input-controls="false"
|
||||||
@change="onLightChange"
|
@change="onLightChange"
|
||||||
@ -137,19 +137,24 @@
|
|||||||
<div class="weather-info__content2">
|
<div class="weather-info__content2">
|
||||||
<div class="base-info">
|
<div class="base-info">
|
||||||
<div>
|
<div>
|
||||||
<span>{{ $t('task.temperature') }}:</span><span>{{ weatherInfo2.wendu }}</span>
|
<span>{{ $t('task.temperature') }}:</span
|
||||||
|
><span>{{ weatherInfo2.wendu }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>{{ $t('task.humidity') }}:</span><span>{{ weatherInfo2.shidu }}</span>
|
<span>{{ $t('task.humidity') }}:</span
|
||||||
|
><span>{{ weatherInfo2.shidu }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>{{ $t('task.airQuality') }}:</span><span>{{ weatherInfo2.quality }}</span>
|
<span>{{ $t('task.airQuality') }}:</span
|
||||||
|
><span>{{ weatherInfo2.quality }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>{{ $t('task.pm25') }}:</span><span>{{ weatherInfo2.pm25 }}</span>
|
<span>{{ $t('task.pm25') }}:</span
|
||||||
|
><span>{{ weatherInfo2.pm25 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>{{ $t('task.pm10') }}:</span><span>{{ weatherInfo2.pm10 }}</span>
|
<span>{{ $t('task.pm10') }}:</span
|
||||||
|
><span>{{ weatherInfo2.pm10 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="week-info">
|
<div class="week-info">
|
||||||
@ -340,14 +345,18 @@
|
|||||||
<div class="task-line-detail">
|
<div class="task-line-detail">
|
||||||
<el-table :data="taskLineDetail.data" height="100%" style="width: 100%">
|
<el-table :data="taskLineDetail.data" height="100%" style="width: 100%">
|
||||||
<el-table-column type="index" width="50"> </el-table-column>
|
<el-table-column type="index" width="50"> </el-table-column>
|
||||||
<el-table-column prop="startLon" :label="$t('task.startLon')"> </el-table-column>
|
<el-table-column prop="startLon" :label="$t('task.startLon')">
|
||||||
<el-table-column prop="startLat" :label="$t('task.startLat')"> </el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column prop="startLat" :label="$t('task.startLat')">
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="startHeight" :label="$t('task.startHeight')">
|
<el-table-column prop="startHeight" :label="$t('task.startHeight')">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="startAlt" :label="$t('task.startAlt')">
|
<el-table-column prop="startAlt" :label="$t('task.startAlt')">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="endLon" :label="$t('task.endLon')"> </el-table-column>
|
<el-table-column prop="endLon" :label="$t('task.endLon')">
|
||||||
<el-table-column prop="endLat" :label="$t('task.endLat')"> </el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column prop="endLat" :label="$t('task.endLat')">
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="endHeight" :label="$t('task.endHeight')">
|
<el-table-column prop="endHeight" :label="$t('task.endHeight')">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="endAlt" :label="$t('task.endAlt')">
|
<el-table-column prop="endAlt" :label="$t('task.endAlt')">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user