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

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

@ -150,9 +150,9 @@
v-for="image in step.stepImages" v-for="image in step.stepImages"
:key="image.objId" :key="image.objId"
class="image-item" 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 v-if="image.description" class="image-desc">{{ image.description }}</div>
</div> </div>
</div> </div>
@ -380,6 +380,19 @@ export default {
closeDialog() { closeDialog() {
this.alarmOpen = false this.alarmOpen = false
this.activeTab = 'alarmList' 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: {}, form: {},
// //
rules: { rules: {
objId: [ // objId: [
{ required: true, message: "自增标识不能为空", trigger: "blur" } // { required: true, message: "", trigger: "blur" }
], // ],
monitorCode: [ monitorCode: [
{ required: true, message: "计量设备编号不能为空", trigger: "blur" } { required: true, message: "计量设备编号不能为空", trigger: "blur" }
], ],
@ -353,6 +353,9 @@ export default {
monitorName: [ monitorName: [
{ required: true, message: "计量设备名称不能为空", trigger: "blur" } { required: true, message: "计量设备名称不能为空", trigger: "blur" }
], ],
isAmmeter: [
{ required: true, message: '是否为虚拟能为空', trigger: 'blur' }
],
}, },
columns: [ columns: [
// { key: 0, label: ``, visible: false }, // { key: 0, label: ``, visible: false },
@ -401,7 +404,7 @@ export default {
], ],
triggerValue: [ triggerValue: [
{ required: true, message: "触发阈值量不能为空", trigger: "blur" } { required: true, message: "触发阈值量不能为空", trigger: "blur" }
] ],
}, },
}; };
}, },

@ -226,10 +226,29 @@
v-for="(step, index) in actionStepsList" v-for="(step, index) in actionStepsList"
:key="step.tempId || step.objId" :key="step.tempId || step.objId"
class="step-item" class="step-item"
:data-index="index"
> >
<div class="step-header"> <div class="step-header">
<span class="step-number">步骤 {{ step.stepSequence }}</span> <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>
<div class="step-content"> <div class="step-content">
@ -275,8 +294,8 @@
:key="image.tempId || image.objId" :key="image.tempId || image.objId"
class="image-item" class="image-item"
> >
<div class="image-preview" @click="previewImage(image.imageUrl)"> <div class="image-preview" @click="previewImage(getFullImageUrl(image.imageUrl))">
<img :src="image.imageUrl" alt="预览图" /> <img :src="getFullImageUrl(image.imageUrl)" alt="预览图" />
</div> </div>
<div class="image-info"> <div class="image-info">
<el-input <el-input
@ -611,9 +630,17 @@ export default {
step.stepImages = []; step.stepImages = [];
} }
// URL
let relativePath = res.url;
if (res.url.startsWith('http')) {
// URL
const urlObj = new URL(res.url);
relativePath = urlObj.pathname;
}
const newImage = { const newImage = {
tempId: Date.now() + Math.random(), tempId: Date.now() + Math.random(),
imageUrl: res.url, imageUrl: relativePath, //
imageSequence: step.stepImages.length + 1, imageSequence: step.stepImages.length + 1,
description: '' description: ''
}; };
@ -695,6 +722,41 @@ export default {
previewImage(url) { previewImage(url) {
this.previewImageUrl = url; this.previewImageUrl = url;
this.imagePreviewVisible = true; 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; font-weight: bold;
color: #409EFF; color: #409EFF;
} }
.step-controls {
display: flex;
align-items: center;
gap: 5px;
.el-button--text {
color: #606266;
font-size: 16px;
&:hover {
color: #409EFF;
}
}
}
} }
.step-content { .step-content {

Loading…
Cancel
Save