暂降治理评估

This commit is contained in:
2024-04-19 14:35:12 +08:00
parent 997e8a9252
commit 444d06ee1a
29 changed files with 2594 additions and 722 deletions

View File

@@ -0,0 +1,142 @@
<!--上传负荷谐波电流数据-->
<template>
<el-dialog
draggable
class='cn-operate-dialog'
v-model='eventDataUploadVisible'
:title='title'
style='width: 415px; height: 380px'
top='25vh'
>
<el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' ref='formRef' :rules='rules'>
<el-form-item label='数据名称' prop='dataName'>
<el-input v-model='form.dataName' />
</el-form-item>
<el-form-item label='负荷谐波电流'>
<el-upload
v-model:file-list='fileList'
ref='uploadEventData'
action=''
:limit='1'
:on-exceed='handleExceed'
:auto-upload='false'
:on-change='choose'
>
<template #trigger>
<el-button type='primary'>选择数据文件</el-button>
</template>
</el-upload>
</el-form-item>
</el-form>
</el-scrollbar>
<template #footer>
<span class='dialog-footer'>
<el-button @click='eventDataUploadVisible = false'>取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang='ts'>
import { ref, inject, reactive } from 'vue'
import TableStore from '@/utils/tableStore'
import { ElMessage } from 'element-plus'
import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'
import { genFileId } from 'element-plus'
import { importEventData } from '@/api/advance-boot/sgGroven/sgEvent'
const fileList = ref<UploadUserFile[]>([])
const formRef = ref()
const tableStore = inject('tableStore') as TableStore
const eventDataUploadVisible = ref(false)
const title = ref('')
const uploadEventData = ref<UploadInstance>()
const rules = {
dataName: [
{ required: true, message: '数据名不能为空', trigger: 'blur' },
],
}
// 注意不要和表单ref的命名冲突
const form = reactive({
dataName: '',
file: null
})
//弹出界面,默认选择用户的第一个生产线的第一条进线进行数据导入
const open = async (text: string) => {
title.value = text
resetForm()
form.file = null
fileList.value = []
// 在此处恢复默认表单
for (let key in form) {
form[key] = ''
}
eventDataUploadVisible.value = true
}
//重置表单内容
const resetForm = () => {
if (formRef.value) {
formRef.value.resetFields()
}
}
/**
* 选择待上传文件
*/
const choose = (e: any) => {
form.dataName = e.name.substring(0,e.name.lastIndexOf('.'))
form.file = e.raw
}
const handleExceed: UploadProps['onExceed'] = files => {
uploadEventData.value!.clearFiles()
const file = files[0] as UploadRawFile
file.uid = genFileId()
uploadEventData.value!.handleStart(file)
fileList.value = [{ name: file.name, url: '' }]
}
/**
* 提交用户表单数据
*/
const submit = async () => {
if (form.file) {
formRef.value.validate(async (valid: any) => {
if (valid) {
let data = new FormData()
data.append('file', form.file)
data.append('name', form.dataName)
await importEventData(data).then((res: any) => {
if (res.code == 'A0000') {
ElMessage.success('导入成功')
tableStore.index()
eventDataUploadVisible.value = false
} else {
ElMessage.error('导入失败,请检查表格文件')
}
})
}
})
} else {
ElMessage.error('请选择数据文件')
}
}
defineExpose({ open })
</script>
<style scoped>
.el-form-item__content div {
width: 100% !important;
}
</style>

View File

@@ -0,0 +1,412 @@
<!--谐波治理参数准备页面-->
<template>
<el-form :inline='false' :model='form' label-width='135px' :rules='rules' ref='formRef'>
<!--基础数据-->
<div class='singleParamContent'>
<el-divider content-position='left' class='divider'>
<span class='dividerFontStyle'>负荷工况</span>
</el-divider>
<el-row>
<el-col :span='7'>
<el-form-item label='有功' prop='yggl'>
<el-input
v-model='form.yggl'
clearable
>
<template #append>kW</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
<el-form-item label='无功' prop='wggl'>
<el-input
v-model='form.wggl'
clearable
>
<template #append>kvar</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='8'>
<el-button style='height: 45px;width:250px;position: absolute;right: 0;' type='primary'
@click='calcSag'>开始评估
</el-button>
</el-col>
<el-col :span='7'>
<el-form-item label='负载电压' prop='fzdy'>
<el-input
v-model='form.fzdy'
:min='0.4'
:max='500'
clearable
>
<template #append>kV</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
<el-form-item label='负载接线方式' prop='ptType'>
<el-select v-model='form.ptType' filterable>
<el-option
v-for='item in ptTypeList'
:key='item.id'
:label='item.name'
:value='item.id'
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span='6' :offset='1'>
<el-form-item label='负荷谐波电流' prop='ptType'>
<el-select v-model='form.ptType' filterable>
<el-option
v-for='item in ptTypeList'
:key='item.id'
:label='item.name'
:value='item.id'
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span='1'>
<el-button @click='importData' style='margin-left: 5px' type='primary' :icon='Plus' />
</el-col>
</el-row>
</div>
<!--UPS参数-->
<div class='singleParamContent'>
<el-divider content-position='left' class='divider'>
<span class='dividerFontStyle'>变压器参数</span>
</el-divider>
<el-row>
<el-col :span='7'>
<el-form-item label='负载损耗' prop='fhsh'>
<el-input
v-model='form.fhsh'
clearable
>
<template #append>kW</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
<el-form-item label='短路阻抗百分比' prop='dlzk'>
<el-input
v-model='form.dlzk'
clearable
>
<template #append>%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
<el-form-item label='额定容量' prop='edrl'>
<el-input
v-model='form.edrl'
clearable
>
<template #append>MVA</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7'>
<el-form-item label='一次侧电压' prop='ycdy'>
<el-input
v-model='form.ycdy'
clearable
>
<template #append>kV</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
<el-form-item label='二次测电压' prop='ecdy'>
<el-input
v-model='form.ecdy'
clearable
>
<template #append>kV</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
<el-form-item label='空载电流百分比' prop='kzdl'>
<el-input
v-model='form.kzdl'
clearable
>
<template #append>%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7'>
<el-form-item label='空载损耗' prop='kzsh'>
<el-input
v-model='form.kzsh'
clearable
>
<template #append>kW</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
<!--滤波器参数-->
<div class='singleParamContent'>
<el-divider content-position='left' class='divider'>
<span class='dividerFontStyle'>滤波器参数</span>
</el-divider>
<el-row>
<el-col :span='7'>
<el-form-item label='目标功率因数' prop='glys'>
<el-input
v-model='form.glys'
clearable
>
</el-input>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
<el-form-item label='分配方式' prop='calcflag'>
<el-select v-model='form.calcflag' filterable>
<el-option
v-for='item in calcList'
:key='item.id'
:label='item.name'
:value='item.id'
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span='7' :offset='1'>
</el-col>
<el-col :span='7'>
</el-col>
<el-col :span='7' :offset='1'>
</el-col>
</el-row>
</div>
</el-form>
<data-upload-popup ref='dataUploadPopup' />
</template>
<script setup lang='ts'>
import { Plus } from '@element-plus/icons-vue'
import { ref, reactive, onMounted } from 'vue'
import emitter from '@/utils/emitter'
import { numberRegex, numberRegexSag } from '@/utils/regexPattern'
import { ElMessage } from 'element-plus'
import { calc } from '@/api/advance-boot/sgGroven/sgScheme'
import DataUploadPopup from '@/views/pqs/harmonicMonitoring/harmonicGovern/dataUploadPopup.vue'
defineOptions({
name: 'calcParamPrepare'
})
const dataUploadPopup = ref()
const formRef = ref()
const ptTypeList: any = ref(
[
{ 'id': 1, 'name': '星型' },
{ 'id': 2, 'name': '三角型' }
]
)
const calcList: any = ref(
[
{ 'id': 1, 'name': '按谐波电流大小分配' },
{ 'id': 2, 'name': '无功均分' }
]
)
const incomingLineListData: any = ref([])
// 注意不要和表单ref的命名冲突
let form = reactive({
yggl: '155.83',
wggl: '96.57',
fzdy: '0.4',
ptType: 1,
fhsh: '',
dlzk: '',
edrl: '',
ycdy: '',
ecdy: '',
kzdl: '',
kzsh: '',
glys: '',
pzys: '',
jzcs: '',
calcflag: ''
})
//form表单校验规则
const rules = {
yggl: [
{ required: true, message: '有功功率必填', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
wggl: [
{ required: true, message: '无功必填', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
fzdy: [
{ required: true, message: '负载电压必填', trigger: 'blur' },
{ pattern: numberRegexSag, message: '请确保电压范围0.4kV~500kV', trigger: 'blur' }
],
productLineId: [{ required: true, message: '生产线必选', trigger: 'change' }],
payBackPeriod: [{ required: true, message: '期望回收周期必填', trigger: 'change' }],
ups: {
price: [
{ required: true, message: '购置价格不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
compensation: [
{ required: true, message: '补偿能力不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
maintainFee: [
{ required: true, message: '年维护费不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
responseTime: [
{ required: true, message: '响应时间不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
backupTime: [
{ required: true, message: '后备时间不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
]
},
avc: {
price: [
{ required: true, message: '购置价格不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
compensation: [
{ required: true, message: '补偿能力不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
maintainFee: [
{ required: true, message: '年维护费不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
responseTime: [
{ required: true, message: '响应时间不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
backupTime: [
{ required: true, message: '后备时间不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
]
},
quick: {
governMachinePower: [
{ required: true, message: '设备容量不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
price: [
{ required: true, message: '购置价格不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
buildFee: [
{ required: true, message: '构建成本不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
quickMaintainFee: [
{ required: true, message: '年维护费不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
actionTime: [
{ required: true, message: '动作时间不能为空', trigger: 'blur' },
{ pattern: numberRegex, message: '请输入有效的数值', trigger: 'blur' }
],
incomingLineId: [{ required: true, message: '备用进线必选', trigger: 'change' }]
}
}
//新增负荷谐波电流
const importData = () => {
// 弹出框,联级选择生产线--进线,上传文件
dataUploadPopup.value.open('导入谐波电流数据')
}
/**
* 挂载时初始化数据内容
*/
onMounted(() => {
//todo...动态加载数据文件
})
/**
* 计算暂降治理
*/
function calcSag() {
formRef.value.validate(async (valid: any, errorMsg: any) => {
if (valid) {
//将所有参数传递到后端进行数据计算
await calc(form).then(res => {
//先通知父组件打开历史页面
emitter.emit('schemeRadio', '评估计算结果')
emitter.emit('calcResult', false)
//再将历史数据传递到历史页面
emitter.emit('send-scheme-result', res.data)
})
} else {
for (const item in errorMsg) {
ElMessage.error(errorMsg[item][0].message)
}
}
})
}
</script>
<style scoped>
.divider {
font-family: AlimamaDongFangDaKai;
}
@keyframes colorChange {
0% {
color: #205CE8;
}
100% {
color: #32B9FC;
}
}
.dividerFontStyle {
font-size: 25px !important;
animation: colorChange 3s infinite;
}
.singleParamContent {
padding: 5px 30px;
}
.el-col {
margin-top: 15px !important;
}
</style>