This commit is contained in:
jiask 2025-10-31 09:09:24 +08:00
parent 2d61c70638
commit 3f2c4938f8
3 changed files with 251 additions and 94 deletions

View File

@ -34,7 +34,7 @@ export function updateSubstationApi(data) {
},
data: data
})
}editProdectionApi
}
// 变电站管理-删除信息
export function deleteSubstationApi(data) {
@ -60,8 +60,8 @@ export function getProtectionOrderListPageApi(data) {
})
}
// 保护定值单管理-新增/修改信息
export function editProdectionApi(data) {
// 保护定值单管理-新增/修改信息
export function editProdectionApi(data) {
return request({
url: '/protection/protection_manage/protectionOrder/edit',
method: 'post',
@ -95,6 +95,39 @@ export function editProdectionApi(data) {
})
}
export function getProtectionCheckOrderListPageApi(data) {
return request({
url: '/protection/protection_manage/protectionCheckOrder/list',
method: 'get',
headers: {
//"merchant-id":"378915229716713472",
},
params:data
})
}
export function getProdectionCheckByIdApi(data) {
return request({
url: '/protection/protection_manage/protectionCheckOrder/detail',
method: 'get',
headers: {
//"merchant-id":"378915229716713472",
},
params:data
})
}
// 保护定值单管理-屏幕识别
export function prodectionCheckApi(data) {
return request({
url: '/protection/protection_manage/protectionAnalysis/check',
method: 'post',
headers: {
//"merchant-id":"378915229716713472",
},
data: data
})
}
export function getProtectionAnalysisListPageApi(data) {
return request({

View File

@ -1,10 +1,10 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="" prop="keyWord">
<el-form-item label="关键字" prop="keyWord">
<el-input
v-model="queryParams.keyWord"
placeholder="请输入"
placeholder="请输入定值单单号、定值单名称"
clearable maxlength="20"
style="width: 300px"
@keyup.enter.native="handleQuery"
@ -27,35 +27,47 @@
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
<!-- <el-button
type="danger"
plain
size="mini"
@click="handleDelete"
>删除</el-button>
>删除</el-button> -->
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="tableListData" @selection-change="handleSelectionChange" height="800">
<el-table-column type="selection" align="center" width="55" />
<el-table-column align="center" prop="protectionCode" :show-overflow-tooltip="true" width="120" label="定值单编号" />
<el-table-column align="center" prop="protectionName" :show-overflow-tooltip="true" width="120" label="定值单名称" />
<el-table-column align="center" prop="protectionDate" :show-overflow-tooltip="true" width="120" label="定值单日期" />
<el-table-column align="center" prop="deviceName" :show-overflow-tooltip="true" width="120" label="设备所属" />
<el-table-column align="center" prop="oneDevice" :show-overflow-tooltip="true" width="150" label="一次设备名称" />
<el-table-column align="center" prop="protectionDevice" :show-overflow-tooltip="true" width="120" label="保护装置名称" />
<el-table-column align="center" prop="protectionDeviceModel" :show-overflow-tooltip="true" width="120" label="保护装置型号" />
<el-table-column align="center" prop="protectionDeviceVersion" :show-overflow-tooltip="true" width="120" label="装置版本" />
<el-table-column align="center" prop="remark" :show-overflow-tooltip="true" width="120" label="备注" />
<el-table-column align="center" prop="description" :show-overflow-tooltip="true" width="120" label="说明" />
<el-table-column align="center" prop="analysisDate" :show-overflow-tooltip="true" width="120" label="识别日期" />
<el-table-column align="center" prop="protectionCode" :show-overflow-tooltip="true" label="定值单编号" />
<el-table-column align="center" prop="protectionName" :show-overflow-tooltip="true" label="定值单名称" />
<el-table-column align="center" prop="protectionDate" :show-overflow-tooltip="true" label="定值单日期" />
<el-table-column align="center" prop="deviceName" :show-overflow-tooltip="true" label="设备所属" />
<el-table-column align="center" prop="oneDevice" :show-overflow-tooltip="true" label="一次设备名称" />
<el-table-column align="center" prop="protectionDevice" :show-overflow-tooltip="true" label="保护装置名称" />
<el-table-column align="center" prop="protectionDeviceModel" :show-overflow-tooltip="true" label="保护装置型号" />
<el-table-column align="center" prop="protectionDeviceVersion" :show-overflow-tooltip="true" label="装置版本" />
<el-table-column align="center" prop="remark" :show-overflow-tooltip="true" label="备注" />
<el-table-column align="center" prop="description" :show-overflow-tooltip="true" label="说明" />
<el-table-column align="center" prop="analysisDate" :show-overflow-tooltip="true" label="识别时间" />
<el-table-column label="操作" align="center" width="250" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="handleView(scope.row)"
>识别结果查看</el-button>
<el-button
size="mini"
type="text"
@click="handleUpdate(scope.row)"
>解析结果查看</el-button>
>重新识别</el-button>
<!-- <el-button
size="mini"
type="text"
style="color: red;"
@click="handleDelete(scope.row)"
>删除</el-button> -->
</template>
</el-table-column>
</el-table>
@ -69,39 +81,111 @@
/>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title+''" :visible.sync="open" width="700px" append-to-body>
<el-form ref="baseForm" :model="baseForm" :rules="baseFormRules" label-width="150px">
<el-row>
<el-col :span="24">
<el-form-item label="保护定值单图片" prop="imgUrl">
<el-upload
:http-request="
(obj) => imgUpLoad(obj, 'fileUrl')
"
action="#"
:limit="1"
:file-list="fileList"
:show-file-list="true"
list-type="picture-card"
accept=".png, .jpg, .jpeg"
:on-success="handleAvatarSuccess"
:before-upload="handleBeforeUpload"
:class="{ disabled:uploadDisabled }"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
>
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-dialog title="上传定值单" :visible.sync="open" width="450px" append-to-body>
<div style="width: 100%;display: flex;align-items: center;">
<el-upload
:http-request="(obj) => imgUpLoad(obj, 'fileUrl')"
action="#"
style="width: 100%;"
:limit="6"
:file-list="fileList"
:show-file-list="true"
accept=".png, .jpg, .jpeg"
:on-success="handleAvatarSuccess"
:before-upload="handleBeforeUpload"
:class="{ disabled:uploadDisabled }"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text"
>将文件拖到此处<em>点击上传</em></div
>
<div class="el-upload__tip text-center" slot="tip">
<div>仅允许导入pngjpgjpeg图片格式文件</div>
<div>单个文件大小不超过10M</div>
</div>
</el-upload>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 识别解析结果 -->
<el-dialog :title="titleView+''" :visible.sync="openView" width="800px" append-to-body>
<table style="width: 100%;" v-if="headList.length>0">
<tr v-if="headList[0].attributeKey=='通知书名称'">
<th colspan="5" style="height: 40px;">{{ headList[0].attributeValue }}</th>
</tr>
<tr>
<td colspan="2">{{headList[1].attributeKey}}: {{ headList[1].attributeValue }}</td>
<td>{{headList[2].attributeKey}}: {{ headList[2].attributeValue }}</td>
<td colspan="2">{{headList[3].attributeKey}}: {{ headList[3].attributeValue }}</td>
</tr>
<tr>
<td>{{headList[4].attributeKey}}</td>
<td>{{headList[5].attributeKey}}</td>
<td>{{headList[6].attributeKey}}</td>
<td>{{headList[7].attributeKey}}</td>
<td>{{headList[8].attributeKey}}</td>
</tr>
<tr>
<td>{{headList[4].attributeValue}}</td>
<td>{{headList[5].attributeValue}}</td>
<td>{{headList[6].attributeValue}}</td>
<td>{{headList[7].attributeValue}}</td>
<td>{{headList[8].attributeValue}}</td>
</tr>
</table>
<table style="width: 100%;" v-if="bhdzNoCheckList.length>0">
<tr>
<th colspan="5" style="height: 40px;color:red;">识别未匹配保护定值</th>
</tr>
<tr v-for="(item,index) in bhdzNoCheckList" :key="index">
<td v-for="(subText,subIndex) in item.split('@')" :key="subIndex">{{subText}}</td>
</tr>
</table>
<table style="width: 100%;" v-if="bhdzList.length>0">
<tr>
<th colspan="5" style="height: 40px;">保护定值</th>
</tr>
<tr v-for="(item,index) in bhdzList" :key="index">
<td v-for="(subText,subIndex) in item.split('@')"
:style="{ color: (subIndex==item.split('@').length-1&&item.split('@').length>4&&subText==0) ? 'red' : 'black' }"
:key="subIndex">{{(subIndex==item.split('@').length-1&&item.split('@').length>4&&index!=0) ? (subText==0?'不一致':'一致') : subText}}
</td>
</tr>
</table>
<table style="width: 100%;" v-if="kzzNoCheckList.length>0">
<tr>
<th colspan="5" style="height: 40px;color:red;">识别未匹配控制字</th>
</tr>
<tr v-for="(item,index) in kzzNoCheckList" :key="index">
<td v-for="(subText,subIndex) in item.split('@')" :key="subIndex">{{subText}}</td>
</tr>
</table>
<table style="width: 100%;" v-if="kzzList.length>0">
<tr>
<th colspan="5" style="height: 40px;">控制字</th>
</tr>
<tr v-for="(item,index) in kzzList" :key="index">
<td v-for="(subText,subIndex) in item.split('@')"
:style="{ color: (subIndex==item.split('@').length-1&&item.split('@').length>4&&subText==0) ? 'red' : 'black' }"
:key="subIndex">{{(subIndex==item.split('@').length-1&&item.split('@').length>4&&index!=0) ? (subText==0?'不一致':'一致') : subText}}
</td>
</tr>
</table>
<table style="width: 100%;" v-if="sbcsList.length>0">
<tr>
<th colspan="5" style="height: 40px;">设备参数</th>
</tr>
<!-- <tr v-for="(item,index) in sbcsList" :key="index">
<td v-for="(subText,subIndex) in item.split('@')" :key="subIndex">{{subText}}</td>
</tr> -->
</table>
</el-dialog>
</div>
</template>
@ -114,7 +198,7 @@
updateDept,
listDeptExcludeChild,
} from '@/api/system/dept'
import { getProtectionAnalysisListPageApi,editProdectionApi } from "@/api/protection/index";
import { getProtectionCheckOrderListPageApi,deleteProtectionApi,getProdectionByIdApi,prodectionCheckApi,getProdectionCheckByIdApi } from "@/api/protection/index";
import base64 from 'base-64';
import { getToken } from '@/utils/auth'
import { imgUpLoadTwo } from '@/api/system/upload'
@ -141,32 +225,34 @@
title: "",
//
open: false,
openView:false,
titleView: "",
checked: false,
userNameFlage:false,
substationIds:[],
protectionIds:[],
//
queryParams: {
pageNum: 1,
pageSize: 10,
keyWord:null,
},
activeName:"baseSetting",
deviceData:{},
//
baseForm: {
protectionId:""
},
//
baseFormRules: {
substationName: [
{ required: true, message: "变电站名称不能为空", trigger: "blur" }
]
},
fileList: [],//
checkUrlList: [],//
checkUrlNameList: [],//
dialogVisible:false,//
dialogImageUrl:"",//
//
headList:[],
bhdzList:[],
kzzList:[],
sbcsList:[],
kzzNoCheckList:[],
bhdzNoCheckList:[],
};
},
mounted(){
@ -200,7 +286,7 @@
console.log("param",param)
// let str = base64.encode(JSON.stringify(param))
// console.log({"content":str})
getProtectionAnalysisListPageApi(param).then(response => {
getProtectionCheckOrderListPageApi(param).then(response => {
this.tableListData = response.rows;
this.total = Number(response.total);
this.loading = false;
@ -214,61 +300,88 @@
//
reset() {
this.baseForm = {
substationName:"",
runTime:""
protectionId:"",
};
this.resetForm("baseForm");
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "新增";
console.log("this.baseForm",this.baseForm);
this.fileList=[]
this.checkUrlList=[]
this.checkUrlNameList=[]
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.open = true;
this.baseForm = Object.assign({}, row)
this.fileList=[{url:this.baseForm.imgUrl}]
// this.$set(this,"metadata",row.deviceMetadata)
this.title = "修改";
this.fileList=[]
this.checkUrlList=[]
this.checkUrlNameList=[]
// this.fileList=[{url:this.baseForm.imgUrl}]
// this.checkUrlList=[this.baseForm.imgUrl]
// this.checkUrlNameList=[this.baseForm.imgName]
},
handleTabClick(tab, event) {
console.log(tab, event);
//
handleView(row) {
this.reset();
this.openView = true;
const obj = Object.assign({}, row)
this.titleView = "查看";
getProdectionCheckByIdApi({protectionId:obj.protectionId,analysisId:obj.analysisId}).then(response => {
console.log("getProdectionByIdApi",response);
this.headList = response.head||[];
this.bhdzList = response.bhdz||[];
this.kzzList = response.kzz||[];
this.sbcsList = response.sbcs||[];
this.bhdzNoCheckList = response.nobhdz||[];
this.kzzNoCheckList = response.nokzz||[];
});
},
/** 提交按钮 */
/** 提交识别按钮 */
submitForm: function() {
console.log("this.fileList",this.fileList);
console.log("this.checkUrlList",this.checkUrlList);
console.log("this.checkUrlNameList",this.checkUrlNameList);
console.log("this.baseForm",this.baseForm);
editProdectionApi({checkUrlList:this.checkUrlList,checkUrlNameList:this.checkUrlNameList,protectionId:this.baseForm.protectionId,type:'0'}).then(response => {
let params = {
checkUrlList:this.checkUrlList,
checkUrlNameList:this.checkUrlNameList,
protectionId:this.baseForm.protectionId,
analysisId:this.baseForm.analysisId,
}
prodectionCheckApi(params).then(response => {
console.log("editProdectionApi",response);
this.getList();
this.open = false;
this.$modal.msgSuccess("操作成功");
return;
if(response.code==200){
this.getList();
this.open = false;
this.$modal.msgSuccess("操作成功");
return;
}else{
this.$modal.msgError(response.msg);
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
var substationIdRow="";
if(row!=undefined &&row.substationId!=null&&row.substationId!=undefined){
substationIdRow=row.substationId.split(" ");
var protectionIdRow="";
if(row!=undefined &&row.protectionId!=null&&row.protectionId!=undefined){
protectionIdRow=row.protectionId.split(" ");
}
const substationIds = substationIdRow || this.substationIds;
console.log("substationIds",substationIds);
const protectionIds = protectionIdRow || this.protectionIds;
console.log("protectionIds",protectionIds);
this.$modal.confirm('是否确认删除数据项?').then(() => {
deleteSubstationApi({substationIds:substationIds}).then(response => {
console.log("deleteSubstationApi",response);
deleteProtectionApi({protectionIds:protectionIds}).then(response => {
console.log("deleteProtectionApi",response);
this.getList();
this.$modal.msgSuccess("删除成功");
return;
});
}).catch(() => {});
},
//
formatDate(date) {
// YYYY-MM-DD
const year = date.getFullYear();
@ -276,10 +389,9 @@
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
//
handleSelectionChange(selection) {
this.substationIds = selection.map(item => item.substationId)
this.protectionIds = selection.map(item => item.protectionId)
},
//
imgUpLoad(param, name, index) {
@ -289,19 +401,19 @@
if (res.code == 200) {
this.checkUrlList.push(res.data.url)
this.checkUrlNameList.push(res.data.name)
this.$set(this.baseForm,"imageUrl",res.data.url)
// this.$set(this.baseForm,"imageUrl",res.data.url)
} else {
this.fileList=[]
this.checkUrlList=[]
this.checkUrlNameList=[]
this.$set(this.baseForm,"imgUrl",'')
// this.$set(this.baseForm,"imgUrl",'')
this.$modal.msgError(res.msg)
}
this.btnLoading=false;
}).catch((error) => {
this.fileList=[]
this.checkUrlList=[]
this.checkUrlNameList=[]
// this.fileList=[]
// this.checkUrlList=[]
// this.checkUrlNameList=[]
this.btnLoading=false;
this.$modal.msgError(error)
})
@ -311,9 +423,9 @@
},
//
handleBeforeUpload(file) {
const isLt = file.size / 1024 / 1024 < 5
const isLt = file.size / 1024 / 1024 < 20
if (!isLt) {
this.$modal.msgError(`图片大小不能超过 5 MB`)
this.$modal.msgError(`图片大小不能超过 20 MB`)
return false
}
},
@ -332,8 +444,7 @@
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
},
}
}
};
</script>
@ -352,4 +463,17 @@
width: 100%;
font-size: 14px !important;
}
table {
border-collapse: collapse; /* 合并表格边框 */
border: 1px solid black; /* 设置边框颜色和宽度 */
}
table tr td{
text-align: center; vertical-align: middle;
border-collapse: collapse; /* 合并表格边框 */
border: 1px solid black; /* 设置边框颜色和宽度 */
padding: 4px;
}
</style>

View File

@ -158,9 +158,9 @@
<tr>
<th colspan="5" style="height: 40px;">设备参数</th>
</tr>
<!-- <tr v-for="(item,index) in sbcsList" :key="index">
<tr v-for="(item,index) in sbcsList" :key="index">
<td v-for="(subText,subIndex) in item.split('@')" :key="subIndex">{{subText}}</td>
</tr> -->
</tr>
</table>
</el-dialog>
</div>