feat(ems): 优化报警记录和监测设备管理功能

- 移除监测设备管理中的自增标识校验
- 添加是否为虚拟能耗的校验- 在报警记录中增加步骤上下移动功能
- 优化图片预览和存储逻辑,支持相对路径和完整 URL
boardTest
zch 4 weeks ago
parent 65d40ca12a
commit 7d1a334b02

@ -150,9 +150,9 @@
v-for="image in step.stepImages"
:key="image.objId"
class="image-item"
@click="previewImage(image.imageUrl)"
@click="previewImage(getFullImageUrl(image.imageUrl))"
>
<img :src="image.imageUrl" :alt="image.description" />
<img :src="getFullImageUrl(image.imageUrl)" :alt="image.description" />
<div v-if="image.description" class="image-desc">{{ image.description }}</div>
</div>
</div>
@ -380,6 +380,19 @@ export default {
closeDialog() {
this.alarmOpen = false
this.activeTab = 'alarmList'
},
// URL
getFullImageUrl(relativePath) {
if (!relativePath) return '';
// URL
if (relativePath.startsWith('http')) {
return relativePath;
}
// baseURL
const baseURL = process.env.VUE_APP_BASE_API || '';
return baseURL + relativePath;
}
}
}

@ -341,9 +341,9 @@ export default {
form: {},
//
rules: {
objId: [
{ required: true, message: "自增标识不能为空", trigger: "blur" }
],
// objId: [
// { required: true, message: "", trigger: "blur" }
// ],
monitorCode: [
{ required: true, message: "计量设备编号不能为空", trigger: "blur" }
],
@ -353,6 +353,9 @@ export default {
monitorName: [
{ required: true, message: "计量设备名称不能为空", trigger: "blur" }
],
isAmmeter: [
{ required: true, message: '是否为虚拟能为空', trigger: 'blur' }
],
},
columns: [
// { key: 0, label: ``, visible: false },
@ -401,7 +404,7 @@ export default {
],
triggerValue: [
{ required: true, message: "触发阈值量不能为空", trigger: "blur" }
]
],
},
};
},

@ -226,10 +226,29 @@
v-for="(step, index) in actionStepsList"
:key="step.tempId || step.objId"
class="step-item"
:data-index="index"
>
<div class="step-header">
<span class="step-number">步骤 {{ step.stepSequence }}</span>
<el-button type="danger" size="mini" icon="el-icon-delete" @click="removeActionStep(index)" circle></el-button>
<div class="step-controls">
<el-button
v-if="index > 0"
type="text"
size="mini"
icon="el-icon-top"
@click="moveStepUp(index)"
title="上移"
></el-button>
<el-button
v-if="index < actionStepsList.length - 1"
type="text"
size="mini"
icon="el-icon-bottom"
@click="moveStepDown(index)"
title="下移"
></el-button>
<el-button type="danger" size="mini" icon="el-icon-delete" @click="removeActionStep(index)" circle></el-button>
</div>
</div>
<div class="step-content">
@ -275,8 +294,8 @@
:key="image.tempId || image.objId"
class="image-item"
>
<div class="image-preview" @click="previewImage(image.imageUrl)">
<img :src="image.imageUrl" alt="预览图" />
<div class="image-preview" @click="previewImage(getFullImageUrl(image.imageUrl))">
<img :src="getFullImageUrl(image.imageUrl)" alt="预览图" />
</div>
<div class="image-info">
<el-input
@ -611,9 +630,17 @@ export default {
step.stepImages = [];
}
// URL
let relativePath = res.url;
if (res.url.startsWith('http')) {
// URL
const urlObj = new URL(res.url);
relativePath = urlObj.pathname;
}
const newImage = {
tempId: Date.now() + Math.random(),
imageUrl: res.url,
imageUrl: relativePath, //
imageSequence: step.stepImages.length + 1,
description: ''
};
@ -695,6 +722,41 @@ export default {
previewImage(url) {
this.previewImageUrl = url;
this.imagePreviewVisible = true;
},
moveStepUp(index) {
if (index > 0) {
const temp = this.actionStepsList[index];
this.actionStepsList[index] = this.actionStepsList[index - 1];
this.actionStepsList[index - 1] = temp;
//
this.actionStepsList.forEach((step, idx) => {
step.stepSequence = idx + 1;
});
}
},
moveStepDown(index) {
if (index < this.actionStepsList.length - 1) {
const temp = this.actionStepsList[index];
this.actionStepsList[index] = this.actionStepsList[index + 1];
this.actionStepsList[index + 1] = temp;
//
this.actionStepsList.forEach((step, idx) => {
step.stepSequence = idx + 1;
});
}
},
// URL
getFullImageUrl(relativePath) {
if (!relativePath) return '';
// URL
if (relativePath.startsWith('http')) {
return relativePath;
}
// baseURL
const baseURL = process.env.VUE_APP_BASE_API || '';
return baseURL + relativePath;
}
}
}
@ -746,6 +808,21 @@ export default {
font-weight: bold;
color: #409EFF;
}
.step-controls {
display: flex;
align-items: center;
gap: 5px;
.el-button--text {
color: #606266;
font-size: 16px;
&:hover {
color: #409EFF;
}
}
}
}
.step-content {

Loading…
Cancel
Save