场景模型测试工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

707 lines
21 KiB

1 year ago
<template>
1 year ago
<div class="bod">
<div class="inp">
1 year ago
<div class="til">占比</div>
<el-form :model="addForm" ref="ruleForm1" :rules="rules" label-width="88px">
<el-row>
<el-col :span="4.5" >
<el-form-item label="效率占比" prop="devPower" label-width="210px">
<el-input v-model="addForm.devPower" placeholder="效率占比,默认值为0.8"/>
</el-form-item>
</el-col>
<el-col :span="4.5" >
<el-form-item label="成本占比" prop="devPrice" label-width="280px">
<el-input v-model="addForm.devPrice" placeholder="成本占比,默认值为0.2"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
1 year ago
<div class="til">配电信息</div>
1 year ago
<el-form :model="addForm" ref="ruleForm2" :rules="rules" label-width="88px">
1 year ago
<el-row>
1 year ago
<!-- <el-col :span="5">-->
<!-- <el-form-item label="电源形式:" prop="sceneName" label-width="140px">-->
<!-- <el-select v-model="test1">-->
<!-- <el-option v-for="item in options3"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.label">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <el-form-item label="变压器合同总容量(kVA):" prop="sceneName" label-width="190px">-->
<!-- <el-input v-model="test2"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
1 year ago
<el-col :span="6">
1 year ago
<el-form-item label="变压器运行总容量(kVA):" prop="runCapacity" label-width="230px">
1 year ago
<el-input v-model="addForm.runCapacity"/>
</el-form-item>
</el-col>
<el-col :span="7">
1 year ago
<el-form-item label="上年最大需量(kW):" prop="lastYearNeed" label-width="290px">
1 year ago
<el-input v-model="addForm.lastYearNeed"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
1 year ago
<div class="til">替代前项目信息</div>
1 year ago
<el-form :model="addForm" ref="ruleForm3" :rules="rules" label-width="88px">
1 year ago
<el-row>
1 year ago
<!-- <el-col :span="5">-->
<!-- <el-form-item label="建筑类型:" prop="sceneName" label-width="140px">-->
<!-- <el-select v-model="test3">-->
<!-- <el-option v-for="item in options4"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.label">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
1 year ago
<el-col :span="6">
1 year ago
<el-form-item label="建筑面积(平方米):" prop="heatingArea" label-width="190px">
1 year ago
<el-input v-model="addForm.heatingArea" >
</el-input>
</el-form-item>
</el-col>
1 year ago
<el-col :span="7">
<el-form-item label="年采暖时间(天):" prop="days" label-width="270px">
1 year ago
<el-input v-model="addForm.days">
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
1 year ago
<el-form-item label="上年运行费用(元):" prop="lastYearFee" label-width="190px">
1 year ago
<el-input v-model="addForm.lastYearFee"/>
</el-form-item>
</el-col>
1 year ago
<el-divider></el-divider>
<el-col :span="8">
<el-form-item label="密钥:" prop="key" label-width="110px">
1 year ago
<el-input v-model="addForm.key"/>
</el-form-item>
</el-col>
1 year ago
</el-row>
</el-form>
<div class="bot">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
1 year ago
</div>
1 year ago
</div>
<div class="result" v-if="show1">
<div class="til">方案评分</div>
<div class="point">
1 year ago
<el-form ref="userRef" label-width="300px">
1 year ago
<el-row>
1 year ago
<el-col :span="8" v-for="(item,index) in result.matchedDeviceList" :key="index" >
<el-form-item :label="item.planName">
1 year ago
<el-rate
1 year ago
v-model="item.rat"
1 year ago
disabled
show-score
1 year ago
:score-template="item.rating"
1 year ago
text-color="#ffffff"
class="rate"
/>
1 year ago
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
1 year ago
</div>
<div class="result" v-if="show1">
<div class="til">
1 year ago
最佳方案{{result.planName}}
1 year ago
</div>
1 year ago
<div class="info">
<div class="card">
整体情况
</div>
<div class="card">
1 year ago
<el-form :model="result" label-width="140px">
1 year ago
<el-row>
1 year ago
<el-col :span="4" style="margin-left: 70px">
1 year ago
<el-form-item label="初次投资费用(元):" prop="sceneName">
1 year ago
<el-input v-model="result.startCost" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
<el-col :span="4">
1 year ago
<el-form-item label="年运行费用(元):" prop="sceneName">
1 year ago
<el-input v-model="result.yearRunCost" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
<el-col :span="4">
1 year ago
<el-form-item label="年总费用(元):" prop="sceneName">
1 year ago
<el-input v-model="result.yearCost" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="年减碳量(吨):" prop="sceneName">
1 year ago
<el-input v-model="result.calculate" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="替代电量(千瓦时):" prop="sceneName">
1 year ago
<el-input v-model="result.electric" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="card">
1 year ago
方案优势
1 year ago
</div>
<div class="card">
1 year ago
<el-form :model="result" label-width="140px">
1 year ago
<el-row>
1 year ago
<el-col :span="5">
<el-form-item label="安全性:" prop="sceneName">
<el-input v-model="result.safety" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
1 year ago
<el-col :span="5">
<el-form-item label="环保性:" prop="sceneName">
<el-input v-model="result.environment" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
1 year ago
<el-col :span="8">
<el-form-item label="经济性:" prop="sceneName">
<el-input v-model="result.economy" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
1 year ago
<el-col :span="6">
1 year ago
<el-form-item label="智能性:" prop="sceneName">
<el-input v-model="result.intelligence" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="card">
1 year ago
需配置设备情况
1 year ago
</div>
<div class="card">
1 year ago
<el-form :model="result" label-width="140px">
1 year ago
<el-row v-for="(item,index) in result.deviceList" :key="index">
1 year ago
<el-col :span="6">
1 year ago
<el-form-item label="设备细类:" prop="sceneName">
<el-input v-model="item.devSubType" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
1 year ago
<el-col :span="6">
<el-form-item label="技术类型:" prop="sceneName">
<el-input v-model="item.devTechType" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
1 year ago
<el-col :span="6">
<el-form-item label="数量(台/套):" prop="sceneName">
<el-input v-model="item.devCount" placeholder=""/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备单价(元):" prop="sceneName">
<el-input v-model="item.devPrice" placeholder=""/>
1 year ago
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
1 year ago
<div class="card">
Json
</div>
<div>
<json-viewer :value="textarea"></json-viewer>
</div>
1 year ago
</div>
1 year ago
1 year ago
</div>
1 year ago
1 year ago
<div class="inp">
<div class="til">产品库</div>
<el-form :model="addForm" ref="ruleForm1" :rules="rules" label-width="88px">
<el-row>
<el-col :span="4.5" v-for="(item,index) in options" :key="index">
<el-form-item :label="item.devTechType" prop="" label-width="300px">
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
1 year ago
</div>
</template>
<script setup>
1 year ago
import {ElMessage, ElMessageBox} from 'element-plus'
import {ref, reactive, watch, onMounted} from "vue";
1 year ago
import {modelTest,getDevList} from '../../../api/emonitor/api'
1 year ago
const textarea = ref('')
1 year ago
const open = ref(true)
1 year ago
const arr = ref([1])
1 year ago
const point = ref(3.7)
const point1 = ref('78')
1 year ago
const show1 = ref(false)
1 year ago
const test1 = ref(null)
const test2= ref(null)
const test3 = ref(null)
const test4 = ref(null)
const test5 = ref(null)
const test6 = ref(null)
const test7 = ref(null)
const test8 = ref(null)
const test9 = ref(null)
const test10 = ref(null)
const test11 = ref(null)
const test12 = ref(null)
const test13 = ref(null)
1 year ago
const role1 = ref(false)
const role2 = ref(false)
const role3 = ref(false)
1 year ago
onMounted(()=>{
getDevList('0101').then((res)=>{
1 year ago
options.value=res.data
})
})
const devSpecList = ref([
{
"devType": '',
"heatEfficiency":'',
"devTechType": '',
"devSubstituteLaborCost":'',
"devReferenceArea":'',
"devPower":'' ,
"devSubType": '',
"devPrice":'' ,
"devServiceLife":'',
"laborCost":'' ,
"id": "1"
}
])
function addDev (){
devSpecList.value.push({
"devType": '',
"heatEfficiency":'',
"devTechType": '',
"devSubstituteLaborCost":'',
"devReferenceArea":'',
"devPower":'' ,
"devSubType": '',
"devPrice":'' ,
"devServiceLife":'',
"laborCost":'' ,
"id": "1"
})
}
function delDev (){
devSpecList.value.pop()
}
1 year ago
const options = ref([{
label: '电锅炉', value: 1
}, {label: '热泵', value: 2}])
const options3 = ref([{
1 year ago
label: '专变', value: 1
1 year ago
}, {label: '公变', value: 2}])
const options4 = ref([{
label: '机关', value: 1},
{label: '医院', value: 2},
{label: '学校', value: 3},
{label: '商业办公楼', value: 4},
{label: '酒店', value: 5},
{label: '其他', value: 6},
])
const options5 = ref([{
label: '风机盘管', value: 1},
{label: '地暖', value: 2},
{label: '暖气片', value: 3},
{label: '无末端', value: 4},
])
const options6 = ref([{
label: '是', value: 1
}, {label: '否', value: 2}])
const options7 = ref([{
label: '供暖', value: 1
}, {label: '供冷', value: 2},{label: '热水s', value: 3}])
const options8 = ref([{
label: '煤', value: 1},
{label: '油', value: 2},
{label: '气', value: 3},
{label: '汽', value: 4},
])
const options1 = ref([{
label: '供冷电锅炉', value: 1
},
{label: '供暖电锅炉', value: 2},
{label: '工业供热电锅炉', value: 3},
{label: '供暖', value: 4},
{label: '供冷', value: 5},
])
const options2 = ref([
{label: '直热式电锅炉(电阻类)', value: 1},
{label: '直热式电锅炉(电极类)', value: 2},
{label: '直热式电锅炉(电磁涡流类)', value: 3},
{label: '蓄热式电锅炉(固体蓄热)', value: 4},
{label: '蓄热式电锅炉(相变蓄热)', value: 5},
{label: '蓄热式电锅炉(水蓄)', value: 6},
{label: '水源热泵', value: 7},
{label: '土壤源热泵', value: 8},
{label: '空气源热泵', value: 9},
{label: '低品位余热源(如电厂低温循环水)热泵', value: 10},
{label: '高温蒸汽热泵', value: 11},
])
const ruleForm1 = ref({
1 year ago
key: '',
1 year ago
devType: '',
devSubType: '',
devTechType: '',
devPower: '',
devPrice: '',
devSubstituteLaborCost: '',
laborCost: '',
devReferenceArea: '',
devServiceLife: '',
devAnnualOperationTime: '',
heatEfficiency: '',
remarkInfo: '',
1 year ago
})
const ruleForm2 = ref({
1 year ago
runCapacity: '',
lastYearNeed: '',
})
const ruleForm3 = ref({
heatingArea: '',
days: '',
lastYearFee: '',
hotMedium: '',
type: '',
1 year ago
})
const rules = reactive({
1 year ago
devType: [
1 year ago
{ required: true, message: '请选择产品库', trigger: 'change' },
1 year ago
],
1 year ago
devSubType: [
{ required: true, message: '请选择设备细类', trigger: 'change' },
1 year ago
],
1 year ago
devTechType: [
{ required: true, message: '请选择技术类型', trigger: 'change' },
1 year ago
],
1 year ago
devPower: [
1 year ago
{ required: true, message: '请输入效率占比', trigger: 'blur' },
1 year ago
],
1 year ago
devPrice: [
1 year ago
{ required: true, message: '请输入成本占比', trigger: 'blur' },
1 year ago
],
1 year ago
devSubstituteLaborCost: [
{ required: true, message: '请输入电替代设备年人工费用', trigger: 'blur' },
1 year ago
],
1 year ago
laborCost: [
{ required: true, message: '请输入原设备的人工费用', trigger: 'blur' },
1 year ago
],
1 year ago
devReferenceArea: [
{ required: true, message: '请输入单台电设备参考的可供暖面积', trigger: 'blur' },
1 year ago
],
1 year ago
devServiceLife: [
{ required: true, message: '请输入设备使用年限', trigger: 'blur' },
1 year ago
],
1 year ago
devAnnualOperationTime: [
{ required: true, message: '请输入设备年运行时长', trigger: 'blur' },
1 year ago
],
1 year ago
heatEfficiency: [
{ required: true, message: '请输入热效率', trigger: 'blur' },
1 year ago
],
1 year ago
remarkInfo: [
{ required: true, message: '请输入备注', trigger: 'blur' },
1 year ago
],
1 year ago
runCapacity: [
{ required: true, message: '请输入变压器运行总容量', trigger: 'blur' },
1 year ago
],
1 year ago
lastYearNeed: [
{ required: true, message: '请输入上年最大需量', trigger: 'blur' },
1 year ago
],
1 year ago
heatingArea: [
{ required: true, message: '请输入建筑面积', trigger: 'blur' },
1 year ago
],
1 year ago
days: [
{ required: true, message: '请输入年采暖时间', trigger: 'blur' },
1 year ago
],
1 year ago
lastYearFee: [
{ required: true, message: '请输入上年运行费用', trigger: 'blur' },
1 year ago
],
1 year ago
hotMedium: [
{ required: true, message: '请输入模型编码', trigger: 'blur' },
1 year ago
],
1 year ago
type: [
{ required: true, message: '请输入场景编码', trigger: 'blur' },
1 year ago
],
1 year ago
key: [
{ required: true, message: '请输入密钥', trigger: 'blur' },
1 year ago
],
1 year ago
})
const addForm = reactive({
1 year ago
id: null,
key:"BEjYotMIsJnTb29NZPfk973npvgw8AXPGAoe1c4RQSL2MAlo0SVUiAL5SE5tEeWLVpzWpaQTY4iqakUY4CsKuVdVc/jeJNjHCoSCtXikiR8jdTDgwMP0AUIZBhFjfg3+80XK48inw2WYvDkH4NCsU2DbeEWGCrHFHl+usA6c/MTl2xbm9tt/4vETVcaUy4r5LuDIJ777lu6AIv9Lq7I392Dkx8+oEuzODBHYq2BNIN70+e/lgeYIm4lpEzzyRU47",
1 year ago
devType: null,//电锅炉or热泵
devSubType: null,
devTechType: null,
heatEfficiency: null,
1 year ago
devPower: 0.8,
devPrice: 0.2,
1 year ago
devSubstituteLaborCost: null,
laborCost: null,
devReferenceArea: null,
devServiceLife: null,
devAnnualOperationTime: null,
remarkInfo: null,
lastYearFee: null,
heatingArea: null,
days: null,
hotMedium: null,
type: "0101",
1 year ago
lastYearNeed: null,
runCapacity: null,
})
1 year ago
const result = ref({
calculate:'',
devCost:'',
devCount:'',
devPrice:'',
devSubType:'',
devTechType:'',
economy:'',
electric:'',
environment:'',
intelligence:'',
matchedDeviceList:[],
planInfos:'',
startCost:'',
yearCost:'',
yearRunCost:'',
1 year ago
safety:'',
1 year ago
deviceList:[],
1 year ago
})
1 year ago
watch(() => addForm.devType, (newVale, oldValue) => {
if (addForm.devType === 1) {
options1.value = [
{label: '供冷电锅炉', value: 1},
{label: '供暖电锅炉', value: 2},
{label: '工业供热电锅炉', value: 3},
]
options2.value = [
{label: '直热式电锅炉(电阻类)', value: 1},
{label: '直热式电锅炉(电极类)', value: 2},
{label: '直热式电锅炉(电磁涡流类)', value: 3},
{label: '蓄热式电锅炉(固体蓄热)', value: 4},
{label: '蓄热式电锅炉(相变蓄热)', value: 5},
{label: '蓄热式电锅炉(水蓄)', value: 6},
]
} else if (addForm.devType === 2) {
options1.value = [
{label: '供暖', value: 4},
{label: '供冷', value: 5},
]
options2.value = [
{label: '水源热泵', value: 7},
{label: '土壤源热泵', value: 8},
{label: '空气源热泵', value: 9},
{label: '低品位余热源(如电厂低温循环水)热泵', value: 10},
{label: '高温蒸汽热泵', value: 11},
]
}
1 year ago
})
1 year ago
const submitForm = () => {
ruleForm1.value.validate((valid) => {
if (valid) {
// 表单验证通过,执行计算逻辑
role1.value=true
// 你可以在这里调用计算函数或者进行其他操作
} else {
// 表单验证失败
role1.value=false
return false;
}
});
ruleForm2.value.validate((valid) => {
if (valid) {
// 表单验证通过,执行计算逻辑
role2.value=true
// 你可以在这里调用计算函数或者进行其他操作
} else {
// 表单验证失败
role2.value=false
return false;
}
});
ruleForm3.value.validate((valid) => {
if (valid) {
// 表单验证通过,执行计算逻辑
role3.value=true
// 你可以在这里调用计算函数或者进行其他操作
} else {
// 表单验证失败
role3.value=false
return false;
}
});
setTimeout(()=>{
1 year ago
addForm.devPower= +addForm.devPower
addForm.devPrice= +addForm.devPrice
console.log(addForm.devPower,addForm.devPrice,addForm.devPower+addForm.devPrice)
if(addForm.devPower+addForm.devPrice==1){
if (role1.value&&role2.value&&role3.value){
console.log('表单验证通过')
modelTest(
{
"param": {
"electricityPrice": "20.26",
"hotDevicePower": "20.26",
"buildInfo": {
"lastYearFee":addForm.lastYearFee,
"heatingArea":addForm.heatingArea,
"days":addForm.days
},
"type": "0101",
"costRatio":addForm.devPrice,
"effRatio":addForm.devPower,
"distInfo": {
"lastYearNeed": addForm.lastYearNeed,
"runCapacity": addForm.runCapacity
},
"exportTemperature": 28
1 year ago
},
1 year ago
"key": addForm.key
}
).then((res)=>{
console.log(res)
if(res.report.message){
ElMessage({
message: res.report.message,
type: 'error',
})
}else{
if(res.report===null || res.report==={}){
ElMessage({
message: '计算失败,请检查密钥是否准确',
type: 'error',
})
}else{
for(let i in res.report.matchedDeviceList)
{
res.report.matchedDeviceList[i].rat = res.report.matchedDeviceList[i].rating/20
}
let num = res.report.matchedDeviceList.reduce((prev, curr) => {
return curr.rat > prev.rat ? curr : prev;
});
res.report.planName = num.planName
res.report.environment = "本次改造方案减排"+res.report.calculate+"吨"
result.value=res.report
textarea.value=res.report
show1.value = true
}
1 year ago
}
1 year ago
})
}else{
console.log('表表单验证失败')
}
1 year ago
}else{
1 year ago
ElMessage({
message: '效率占比和成本占比相加必须为1',
type: 'error',
})
1 year ago
}
},1000)
1 year ago
};
1 year ago
1 year ago
function cancel() {
1 year ago
ruleForm1.value.resetFields();
ruleForm2.value.resetFields();
ruleForm3.value.resetFields();
1 year ago
show1.value = false
addForm.devType = null
addForm.heatEfficiency = null
addForm.devTechType = null
addForm.devSubstituteLaborCost = null
addForm.devReferenceArea = null
1 year ago
addForm.devPower = 0.8
1 year ago
addForm.devSubType = null
1 year ago
addForm.devPrice = 0.2
1 year ago
addForm.devServiceLife = null
addForm.laborCost = null
addForm.lastYearFee = null
addForm.heatingArea = null
addForm.days = null
addForm.hotMedium = null
addForm.type = null
addForm.lastYearNeed = null
addForm.runCapacity = null
addForm.key = null
1 year ago
devSpecList.value=[
{
"devType": '',
"heatEfficiency":'',
"devTechType": '',
"devSubstituteLaborCost":'',
"devReferenceArea":'',
"devPower":'' ,
"devSubType": '',
"devPrice":'' ,
"devServiceLife":'',
"laborCost":'' ,
"id": "1"
}
]
1 year ago
};
</script>
<style scoped lang="scss">
1 year ago
.rate {
--el-rate-text-color: #ff9900;
1 year ago
}
1 year ago
.bod {
padding: 20px;
height: 91vh;
overflow-y: auto;
.inp {
border: 1px solid white;
padding: 20px;
.til {
font-size: 16px;
color: #ff9900;
margin-bottom: 20px;
}
.bot{
text-align: right;
}
}
1 year ago
1 year ago
.result {
margin-top: 20px;
border: 1px solid white;
padding: 20px;
.point {
}
.til {
font-size: 16px;
color: #ff9900;
margin-bottom: 20px;
}
.info {
.card {
margin-top: 20px;
}
}
}
}
1 year ago
</style>