This commit is contained in:
高云鹏 2024-11-20 09:00:23 +08:00
commit 8a64b055e9
2 changed files with 427 additions and 70 deletions

View File

@ -66,3 +66,73 @@ export function powerCurveQuery(madeinfactory: any, model: any) {
method: 'GET', method: 'GET',
}) })
} }
export const importfdrData = (data: FormData, v: string) => {
const token = encrypt_aes(adminInfo.token, v)
return createAxios(
{
url: '/api/fdr/import',
method: 'POST',
data: data,
headers: {
'Content-Type': 'multipart/form-data',
v,
token,
},
},
{ customEncrypt: true }
)
}
// 导出
export function exportfdrData(params: object = {}) {
return createAxios({
url: '/api/fdr/export ',
method: 'POST',
data: params,
responseType: 'blob',
})
}
export const importplcData = (data: FormData, v: string) => {
const token = encrypt_aes(adminInfo.token, v)
return createAxios(
{
url: '/api/plc/import',
method: 'POST',
data: data,
headers: {
'Content-Type': 'multipart/form-data',
v,
token,
},
},
{ customEncrypt: true }
)
}
// 导出
export function exportplcData(params: object = {}) {
return createAxios({
url: '/api/plc/export ',
method: 'POST',
data: params,
responseType: 'blob',
})
}
export function queryFdrDesc(params: object = {}) {
return createAxios({
url: '/api/fdr/queryFdrDesc',
method: 'POST',
data: params,
})
}
export function queryplcDesc(params: object = {}) {
return createAxios({
url: '/api/plc/queryPlcDesc',
method: 'POST',
data: params,
})
}

View File

@ -1,27 +1,21 @@
<template> <template>
<div class="theoreticalpowerCurve"> <div class="theoreticalpowerCurve">
<el-container class="mainContainer"> <el-container class="mainContainer">
<el-header class="mainHeader"> <el-card class="box-card1">
<el-button type="primary" @click="addItem">新增</el-button> <div class="mainHeader">
</el-header> <el-text class="mx-1 title">风机规格型号列表</el-text>
<el-main class="mainMain"> <el-button :icon="CirclePlusFilled" type="primary" @click="addItem">新增</el-button>
</div>
<div class="tabsPart"> <div class="tabsPart">
<el-table :data="theoreticalTableData" class="tablePart" @current-change="handleCurrentChange"> <el-table :data="theoreticalTableData" class="tablePart" @current-change="handleCurrentChange" :row-class-name="rowClassName">
<el-table-column prop="index" :label="theoreticalEnums['index']" align="center"> </el-table-column> <el-table-column prop="index" :label="theoreticalEnums['index']" align="center"> </el-table-column>
<el-table-column prop="madeinfactory" :label="theoreticalEnums['madeinfactory']" align="center"> </el-table-column> <el-table-column prop="madeinfactory" :label="theoreticalEnums['madeinfactory']" align="center"> </el-table-column>
<el-table-column prop="model" :label="theoreticalEnums['model']" align="center"> </el-table-column> <el-table-column prop="model" :label="theoreticalEnums['model']" align="center"> </el-table-column>
<el-table-column prop="nominalCapacity" :label="theoreticalEnums['nominalCapacity']" align="center"> </el-table-column> <el-table-column prop="nominalCapacity" :label="theoreticalEnums['nominalCapacity']" align="center"> </el-table-column>
<el-table-column label="操作" width="400" align="center"> <el-table-column label="操作" width="400" align="center">
<template #default="scope"> <template #default="scope">
<div class="tableOperate"> <div class="tableOperate">
<a @click="viewDetails(scope.row)">查看 </a> <a @click="viewDetails(scope.row)">查看 </a>
<el-upload :show-file-list="false" :http-request="update">
<template #trigger>
<a>更新 </a>
</template>
</el-upload>
<a @click="download(scope.row)">下载</a>
<a @click="deleteDetails(scope.row)">删除</a> <a @click="deleteDetails(scope.row)">删除</a>
</div> </div>
</template> </template>
@ -36,12 +30,95 @@
:page-sizes="paginationOptions.pageSizes" :page-sizes="paginationOptions.pageSizes"
background background
:pager-count="7" :pager-count="7"
layout="prev, pager, next, jumper,sizes,total" layout="prev, pager, next"
@change="getcurrentPage" @change="getcurrentPage"
></el-pagination> ></el-pagination>
</div> </div>
</el-card>
<el-card class="box-card2">
<div class="mainHeader">
<el-text class="mx-1 title">理论功率曲线</el-text>
<div class="right">
<el-upload :show-file-list="false" :http-request="update">
<template #trigger>
<el-button :icon="Refresh" type="primary">更新</el-button>
</template>
</el-upload>
<el-button :icon="Download" type="primary" @click="download">下载</el-button>
</div>
</div>
<div ref="chartContainer" class="chartContainer"></div> <div ref="chartContainer" class="chartContainer"></div>
</el-main> </el-card>
<div class="bottom">
<el-card class="box-card3 bottom-left">
<div>
<div class="mainHeader">
<el-text class="mx-1 title">故障录波变量描述</el-text>
<div class="right">
<el-upload :show-file-list="false" :http-request="update1">
<template #trigger>
<el-button :icon="Refresh" type="primary">更新</el-button>
</template>
</el-upload>
<el-button :icon="Download" type="primary" @click="download1">下载</el-button>
</div>
</div>
<div class="tabsPart">
<el-table :data="faultRecordingpageData" class="tablePart">
<el-table-column prop="variable" label="列路" align="center"> </el-table-column>
<el-table-column prop="description" label="中文" align="center"> </el-table-column>
</el-table>
</div>
<div class="mainFooter">
<el-pagination
v-model:current-page="paginationOptions1.current"
v-model:page-size="paginationOptions1.pageSize"
:total="paginationOptions1.total"
:page-sizes="paginationOptions1.pageSizes"
background
:pager-count="7"
layout="prev, pager, next"
@size-change="handleSizeChange1"
@current-change="handleCurrentChange1"
></el-pagination>
</div>
</div>
</el-card>
<el-card class="box-card3">
<div>
<div class="mainHeader">
<el-text class="mx-1 title">运行日志变量描述</el-text>
<div class="right">
<el-upload :show-file-list="false" :http-request="update2">
<template #trigger>
<el-button :icon="Refresh" type="primary">更新</el-button>
</template>
</el-upload>
<el-button :icon="Download" type="primary" @click="download2">下载</el-button>
</div>
</div>
<div class="tabsPart">
<el-table :data="runLogpageData" class="tablePart">
<el-table-column prop="variable" label="列路" align="center"> </el-table-column>
<el-table-column prop="description" label="中文" align="center"> </el-table-column>
</el-table>
</div>
<div class="mainFooter">
<el-pagination
v-model:current-page="paginationOptions2.current"
v-model:page-size="paginationOptions2.pageSize"
:total="paginationOptions2.total"
:page-sizes="paginationOptions2.pageSizes"
background
:pager-count="7"
layout="prev, pager, next"
@size-change="handleSizeChange2"
@current-change="handleCurrentChange2"
></el-pagination>
</div>
</div>
</el-card>
</div>
</el-container> </el-container>
<el-dialog v-model="dialogOpen" :title="dialogTitle" width="720"> <el-dialog v-model="dialogOpen" :title="dialogTitle" width="720">
<el-form <el-form
@ -84,6 +161,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, onMounted, markRaw } from 'vue' import { reactive, ref, onMounted, markRaw } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { Refresh, CirclePlusFilled, Download } from '@element-plus/icons-vue'
import { encrypt_aes, generateRandomNumber } from '/@/utils/crypto' import { encrypt_aes, generateRandomNumber } from '/@/utils/crypto'
import { theoreticalEnums } from './type' import { theoreticalEnums } from './type'
import { import {
@ -94,6 +172,12 @@ import {
importData, importData,
exportData, exportData,
powerCurveQuery, powerCurveQuery,
importfdrData,
exportfdrData,
importplcData,
exportplcData,
queryFdrDesc,
queryplcDesc,
} from '/@/api/backend/theoreticalpowerCurve/request' } from '/@/api/backend/theoreticalpowerCurve/request'
import * as echarts from 'echarts' import * as echarts from 'echarts'
// //
@ -108,6 +192,8 @@ const update = (file: any) => {
if (res.success) { if (res.success) {
ElMessage.success('更新成功') ElMessage.success('更新成功')
getpowerCurve() getpowerCurve()
getFaultRecording()
getRunLog()
} else { } else {
ElMessage.error(res.msg) ElMessage.error(res.msg)
} }
@ -118,8 +204,9 @@ const update = (file: any) => {
} }
// //
const download = (val: any) => { const download = () => {
exportData({ id: val.id }).then((res: any) => { console.log(currentRow)
exportData({ id: currentRow.value.id }).then((res: any) => {
const downloadUrl = window.URL.createObjectURL(res) const downloadUrl = window.URL.createObjectURL(res)
const a = document.createElement('a') const a = document.createElement('a')
a.href = downloadUrl a.href = downloadUrl
@ -131,6 +218,85 @@ const download = (val: any) => {
}) })
} }
//
const update1 = (file: any) => {
const formData = new FormData()
formData.append('file', file.file)
const v = generateRandomNumber(16)
const id = encrypt_aes(currentRow.value.id, v)
formData.append('id', id)
return importfdrData(formData, v)
.then((res: any) => {
if (res.success) {
ElMessage.success('更新成功')
getFaultRecording()
} else {
ElMessage.error(res.msg)
}
})
.catch((err) => {
ElMessage.error(err?.response?.data?.msg ?? '更新失败')
})
}
//
const download1 = () => {
console.log(currentRow)
exportfdrData({ id: currentRow.value.id }).then((res: any) => {
const downloadUrl = window.URL.createObjectURL(res)
const a = document.createElement('a')
a.href = downloadUrl
a.download = '故障录波变量' + new Date().getTime()
document.body.appendChild(a)
a.click()
window.URL.revokeObjectURL(downloadUrl)
document.body.removeChild(a)
})
}
//
const update2 = (file: any) => {
const formData = new FormData()
formData.append('file', file.file)
const v = generateRandomNumber(16)
const id = encrypt_aes(currentRow.value.id, v)
formData.append('id', id)
return importplcData(formData, v)
.then((res: any) => {
if (res.success) {
ElMessage.success('更新成功')
getRunLog()
} else {
ElMessage.error(res.msg)
}
})
.catch((err) => {
ElMessage.error(err?.response?.data?.msg ?? '更新失败')
})
}
//
const download2 = () => {
console.log(currentRow)
exportplcData({ id: currentRow.value.id }).then((res: any) => {
const downloadUrl = window.URL.createObjectURL(res)
const a = document.createElement('a')
a.href = downloadUrl
a.download = '运行日志变量' + new Date().getTime()
document.body.appendChild(a)
a.click()
window.URL.revokeObjectURL(downloadUrl)
document.body.removeChild(a)
})
}
const rowClassName = ({ row, rowIndex }: any) => {
if (currentRow.value === row) {
return 'current-row'
} else {
return ''
}
}
const option: any = reactive({ const option: any = reactive({
tooltip: { tooltip: {
formatter: function (params: any) { formatter: function (params: any) {
@ -285,7 +451,36 @@ const deleteDetails = (val: any) => {
} }
const theoreticalTableData: any = ref([]) const theoreticalTableData: any = ref([])
const faultRecordingData: any = ref([])
const faultRecordingpageData: any = ref([])
const runLogData: any = ref([])
const runLogpageData: any = ref([])
const handleSizeChange1 = (val: any) => {
paginationOptions1.pageSize = val
paginationOptions1.current = 1
faultRecordingpageData.value = faultRecordingData.value.slice(0, paginationOptions1.pageSize)
}
//
const handleCurrentChange1 = (val: any) => {
paginationOptions1.current = val
const start = (paginationOptions1.current - 1) * paginationOptions1.pageSize
const end = start + paginationOptions1.pageSize
faultRecordingpageData.value = faultRecordingData.value.slice(start, end)
}
const handleSizeChange2 = (val: any) => {
paginationOptions2.pageSize = val
paginationOptions2.current = 1
runLogpageData.value = runLogData.value.slice(0, paginationOptions1.pageSize)
}
//
const handleCurrentChange2 = (val: any) => {
paginationOptions2.current = val
const start = (paginationOptions2.current - 1) * paginationOptions2.pageSize
const end = start + paginationOptions2.pageSize
runLogpageData.value = runLogData.value.slice(start, end)
}
const getList = () => { const getList = () => {
const transparams = searchParams() const transparams = searchParams()
theoreticalpowerCurveList(transparams) theoreticalpowerCurveList(transparams)
@ -299,6 +494,8 @@ const getList = () => {
} }
}) })
getpowerCurve() getpowerCurve()
getFaultRecording()
getRunLog()
} else { } else {
ElMessage.error(res.msg ?? '查询失败') ElMessage.error(res.msg ?? '查询失败')
} }
@ -319,7 +516,11 @@ const currentRow = ref()
const handleCurrentChange = (val: any) => { const handleCurrentChange = (val: any) => {
currentRow.value = val currentRow.value = val
chart.value.clear() chart.value.clear()
paginationOptions1.current = 1
paginationOptions2.current = 1
getpowerCurve() getpowerCurve()
getFaultRecording()
getRunLog()
} }
const getpowerCurve = () => { const getpowerCurve = () => {
currentRow.value = currentRow.value ?? theoreticalTableData.value[0] currentRow.value = currentRow.value ?? theoreticalTableData.value[0]
@ -346,11 +547,48 @@ const getpowerCurve = () => {
}) })
} }
const getFaultRecording = () => {
currentRow.value = currentRow.value ?? theoreticalTableData.value[0]
queryFdrDesc({ madeinfactory: currentRow.value.madeinfactory, model: currentRow.value.model }).then((res) => {
if (res.code == 200) {
faultRecordingData.value = [...res.data]
paginationOptions1.total = faultRecordingData.value.length
faultRecordingpageData.value = faultRecordingData.value.slice(0, paginationOptions1.pageSize)
} else {
ElMessage.warning('查询失败')
}
})
}
const getRunLog = () => {
currentRow.value = currentRow.value ?? theoreticalTableData.value[0]
queryplcDesc({ madeinfactory: currentRow.value.madeinfactory, model: currentRow.value.model }).then((res) => {
if (res.code == 200) {
runLogData.value = [...res.data]
paginationOptions2.total = runLogData.value.length
runLogpageData.value = runLogData.value.slice(0, paginationOptions2.pageSize)
} else {
ElMessage.warning('查询失败')
}
})
}
const paginationOptions = reactive({ const paginationOptions = reactive({
current: 1, current: 1,
pageSize: 20, pageSize: 5,
total: 0, total: 0,
pageSizes: [20, 50, 100], pageSizes: [5],
})
const paginationOptions1 = reactive({
current: 1,
pageSize: 5,
total: 0,
pageSizes: [5, 50, 100],
})
const paginationOptions2 = reactive({
current: 1,
pageSize: 5,
total: 0,
pageSizes: [5, 50, 100],
}) })
const getcurrentPage = () => { const getcurrentPage = () => {
getList() getList()
@ -370,79 +608,128 @@ onMounted(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
$headerHeight: 60px; $headerHeight: 60px;
$defaultBackgroundColor: #fff; // $defaultBackgroundColor: #fff;
$defaultAsideWidth: 260px; $defaultAsideWidth: 260px;
$paginationHeight: 32px; $paginationHeight: 32px;
.theoreticalpowerCurve { .theoreticalpowerCurve {
position: relative; position: relative;
width: 100%; width: 100%;
height: 100%; height: 100%;
background: transparent;
.mainContainer { .mainContainer {
display: flex;
flex-direction: column;
width: 100%; width: 100%;
height: 100%;
.mainHeader { .mainHeader {
display: flex; display: flex;
justify-content: flex-end; justify-content: space-between;
align-items: center; align-items: center;
height: $headerHeight; height: $headerHeight;
padding: 0 20px; padding: 0 20px;
border-bottom: 1px solid #eaebed; .title {
} border-left: 4px solid rgb(77, 147, 196);
.mainMain { border-bottom: 4px solid transparent;
height: calc(100% - $headerHeight); border-right: 4px solid transparent;
.tabsPart { border-top: 4px solid transparent;
height: calc(100% - $paginationHeight - 290px); padding: 4px;
padding-bottom: 5px;
:deep(.el-tabs__content) {
height: calc(100% - 55px);
.el-tab-pane {
height: 100%;
}
}
.tablePart {
height: 100%;
.alarm {
border: 1px solid rgb(228, 161, 18);
width: fit-content;
margin: 0 auto;
padding: 5px;
border-radius: 6px;
color: rgb(228, 161, 18);
}
.fault {
border: 1px solid #a03b1d;
width: fit-content;
margin: 0 auto;
padding: 5px;
border-radius: 6px;
color: #a03b1d;
}
}
.tableOperate {
display: flex;
justify-content: center;
align-items: center;
a {
margin: 5px;
color: #0064aa;
font-weight: 600;
&:hover {
cursor: pointer;
}
}
}
} }
.mainFooter { .right {
display: flex; display: flex;
justify-content: right; flex-direction: row;
background-color: #fff; :deep(div) {
margin-right: 2px;
}
} }
}
.mainFooter {
display: flex;
justify-content: right;
background-color: #fff;
}
.tabsPart {
height: 300px;
padding-bottom: 5px;
:deep(.el-tabs__content) {
height: 100%;
.el-tab-pane {
height: 100%;
}
}
}
.box-card1 {
width: 100%;
margin-bottom: 20px;
.tablePart {
.alarm {
border: 1px solid rgb(228, 161, 18);
width: fit-content;
margin: 0 auto;
padding: 5px;
border-radius: 6px;
color: rgb(228, 161, 18);
}
.fault {
border: 1px solid #a03b1d;
width: fit-content;
margin: 0 auto;
padding: 5px;
border-radius: 6px;
color: #a03b1d;
}
}
.tableOperate {
display: flex;
justify-content: center;
align-items: center;
a {
margin: 5px;
color: #0064aa;
font-weight: 600;
&:hover {
cursor: pointer;
}
}
}
.chartContainer { .chartContainer {
width: 100%; width: 100%;
height: 280px; height: 240px;
border: 1px solid rgb(217, 217, 217); border: 1px solid rgb(217, 217, 217);
margin-top: 10px; margin-top: 10px;
} }
.current-row {
background-color: #f0f9eb !important;
}
}
.box-card2 {
width: 100%;
margin-bottom: 20px;
.chartContainer {
width: 100%;
height: 200px;
border: 1px solid rgb(217, 217, 217);
margin-top: 10px;
}
}
.bottom {
display: flex;
flex-direction: row;
margin-bottom: 20px;
.bottom-left {
margin-right: 20px;
}
.box-card3 {
width: 50%;
.tabsPart {
height: 240px;
padding-bottom: 5px;
:deep(el-table .cel) {
white-space: nowrap;
}
}
}
} }
} }
.modelOperate { .modelOperate {