Merge remote-tracking branch 'origin/master'

master
魔神煜修罗皇 2 years ago
commit e9faa6d8ff
  1. 4219
      psdc-ui/package-lock.json
  2. 6
      psdc-ui/src/api/analyse/nhdb/nhdb.js
  3. 375
      psdc-ui/src/views/analyse/nhdb/index.vue
  4. 65
      psdc-ui/src/views/control/manual/index.vue

File diff suppressed because it is too large Load Diff

@ -0,0 +1,6 @@
import request from '@/utils/request'
/** 获取设备*/
export function getCelueList() {
return request.get('/analyse/nhdb/logs')
}

@ -5,13 +5,37 @@
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<img :src="imgSrc" alt=""> <img :src="imgSrc" alt="">
<span>{{item.sceneName}}</span> <span>{{item.strategyName}}</span>
</div> </div>
</template> </template>
<div class="text item"> <div class="text item">
<el-form :inline="true" :model="item.data" label-width="110px"> <el-form :inline="true" label-width="140px">
<el-form-item v-for="items in item.data" :key="items.key" :label="items.label"> <el-form-item label="开始执行时间:">
<el-input v-model="items.startTime" readonly/> <el-input v-model="item.startTime" readonly/>
</el-form-item>
<el-form-item label="结束执行时间:">
<el-input v-model="item.endTime" readonly/>
</el-form-item>
<el-form-item label="执行前室内温度:">
<el-input v-model="item.inFrontAvgtemp" readonly/>
</el-form-item>
<el-form-item label="执行后室内温度:">
<el-input v-model="item.inAfterAvgtemp" readonly/>
</el-form-item>
<el-form-item label="执行前室外温度:">
<el-input v-model="item.outFrontAvgtemp" readonly/>
</el-form-item>
<el-form-item label="执行后室外温度:">
<el-input v-model="item.outAfterAvgtemp" readonly/>
</el-form-item>
<el-form-item label="执行时长:">
<el-input v-model="item.runHours" readonly/>
</el-form-item>
<el-form-item label="单位时间用电:">
<el-input v-model="item.oneUseEnergy" readonly/>
</el-form-item>
<el-form-item label="总用电量:">
<el-input v-model="item.sceneUseEnergy" readonly/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- <div class="echart"></div>--> <!-- <div class="echart"></div>-->
@ -22,170 +46,190 @@
</template> </template>
<script name="Index" setup> <script name="Index" setup>
import {ref,reactive} from 'vue' import {getCelueList} from '@/api/analyse/nhdb/nhdb'
import {ref,reactive,onMounted} from 'vue'
const imgSrc = ref('../src/assets/images/策略icon.png') const imgSrc = ref('../src/assets/images/策略icon.png')
const data = reactive({ const data = reactive({
celueInfoList:[ celueInfoList:[
{ // {
sceneName:'电磁锅炉供暖策略', // sceneName:'',
data:[ // data:[
{ // {
key: 1, // key: 1,
label:'开始执行时间', // label:'',
startTime:'2023-06-08 15:00:00' // startTime:'2023-06-08 15:00:00'
}, // },
{ // {
key: 2, // key: 2,
label:'结束执行时间', // label:'',
startTime:'2023-06-08 18:00:00' // startTime:'2023-06-08 18:00:00'
}, // },
{ // {
key: 3, // key: 3,
label:'执行前室内温度', // label:'',
startTime:'20℃' // startTime:'20'
}, // },
{ // {
key: 4, // key: 4,
label:'执行前室外温度', // label:'',
startTime:'14℃' // startTime:'14'
}, // },
{ // {
key: 5, // key: 5,
label:'执行后室内温度', // label:'',
startTime:'29℃' // startTime:'29'
}, // },
{ // {
key: 6, // key: 6,
label:'执行后室外温度', // label:'',
startTime:'15℃' // startTime:'15'
}, // },
{ // {
key: 7, // key: 7,
label:'执行时长', // label:'',
startTime:'3h' // startTime:'3h'
}, // },
{}, // {},
{ // {
key: 8, // key: 8,
label:'单位时间用电', // label:'',
startTime:'5kWh' // startTime:'5kWh'
}, // },
{}, // {},
{ // {
key: 9, // key: 9,
label:'总用电量', // label:'',
startTime:'16kWh' // startTime:'16kWh'
} // }
] // ]
}, // },
{ // {
sceneName:'空气源热泵供暖策略', // sceneName:'',
data:[ // data:[
{ // {
key: 1, // key: 1,
label:'开始执行时间', // label:'',
startTime:'2023-06-05 11:00:00' // startTime:'2023-06-05 11:00:00'
}, // },
{ // {
key: 2, // key: 2,
label:'结束执行时间', // label:'',
startTime:'2023-06-05 13:00:00' // startTime:'2023-06-05 13:00:00'
}, // },
{ // {
key: 3, // key: 3,
label:'执行前室内温度', // label:'',
startTime:'22℃' // startTime:'22'
}, // },
{ // {
key: 4, // key: 4,
label:'执行前室外温度', // label:'',
startTime:'15℃' // startTime:'15'
}, // },
{ // {
key: 5, // key: 5,
label:'执行后室内温度', // label:'',
startTime:'30℃' // startTime:'30'
}, // },
{ // {
key: 6, // key: 6,
label:'执行后室外温度', // label:'',
startTime:'15℃' // startTime:'15'
}, // },
{ // {
key: 7, // key: 7,
label:'执行时长', // label:'',
startTime:'2h' // startTime:'2h'
}, // },
{}, // {},
{ // {
key: 8, // key: 8,
label:'单位时间用电', // label:'',
startTime:'6kWh' // startTime:'6kWh'
}, // },
{}, // {},
{ // {
key: 9, // key: 9,
label:'总用电量', // label:'',
startTime:'12kWh' // startTime:'12kWh'
} // }
] // ]
}, // },
{ // {
sceneName:'空气源热泵供暖策略', // sceneName:'',
data:[ // data:[
{ // {
key: 1, // key: 1,
label:'开始执行时间', // label:'',
startTime:'2023-06-05 11:00:00' // startTime:'2023-06-05 11:00:00'
}, // },
{ // {
key: 2, // key: 2,
label:'结束执行时间', // label:'',
startTime:'2023-06-05 13:00:00' // startTime:'2023-06-05 13:00:00'
}, // },
{ // {
key: 3, // key: 3,
label:'执行前室内温度', // label:'',
startTime:'22℃' // startTime:'22'
}, // },
{ // {
key: 4, // key: 4,
label:'执行前室外温度', // label:'',
startTime:'15℃' // startTime:'15'
}, // },
{ // {
key: 5, // key: 5,
label:'执行后室内温度', // label:'',
startTime:'30℃' // startTime:'30'
}, // },
{ // {
key: 6, // key: 6,
label:'执行后室外温度', // label:'',
startTime:'15℃' // startTime:'15'
}, // },
{ // {
key: 7, // key: 7,
label:'执行时长', // label:'',
startTime:'2h' // startTime:'2h'
}, // },
{}, // {},
{ // {
key: 8, // key: 8,
label:'单位时间用电', // label:'',
startTime:'6kWh' // startTime:'6kWh'
}, // },
{}, // {},
{ // {
key: 9, // key: 9,
label:'总用电量', // label:'',
startTime:'12kWh' // startTime:'12kWh'
} // }
] // ]
}, // },
] ]
}) })
onMounted(()=>{
getCelueListFun()
})
function getCelueListFun(){
getCelueList().then((res)=>{
for(let i = 0;i < res.data.length;i++){
res.data[i].inFrontAvgtemp = res.data[i].inFrontAvgtemp + ' ℃'
res.data[i].inAfterAvgtemp = res.data[i].inAfterAvgtemp + ' ℃'
res.data[i].outFrontAvgtemp = res.data[i].outFrontAvgtemp + ' ℃'
res.data[i].outAfterAvgtemp = res.data[i].outAfterAvgtemp + ' ℃'
res.data[i].runHours = res.data[i].runHours + ' h'
res.data[i].oneUseEnergy = res.data[i].oneUseEnergy + ' kWh'
res.data[i].sceneUseEnergy = res.data[i].sceneUseEnergy + ' kWh'
}
data.celueInfoList = res.data
})
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@ -198,11 +242,16 @@ const data = reactive({
overflow-y: auto; overflow-y: auto;
} }
.box-card { .box-card {
width: 720px; width: 830px;
color: #fff; color: #fff;
border: none; border: none;
margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
&:nth-child(odd){
margin-right: 20px;
}
&:nth-child(even){
margin-right: 0px;
}
.card-header{ .card-header{
display: flex; display: flex;
align-items: center; align-items: center;

@ -64,16 +64,16 @@
<el-drawer v-model="drawerIshow"> <el-drawer v-model="drawerIshow">
<template #header><h4>策略导入</h4></template> <template #header><h4>策略导入</h4></template>
<template #default> <template #default>
<el-radio v-for="(item,index) in celueList" :key="index" class="celueBox" v-model="radio" :label="item.sceneName" size="large" @change="selectCeLue(item)"> <el-radio v-for="(item,index) in celueList" :key="index" class="celueBox" v-model="radio" :label="item.strategyName" size="large" @change="selectCeLue(item)">
<span style="font-weight: bold; display: inline-block; margin-bottom: 20px;">{{ item.sceneName }}</span> <span style="font-weight: bold; display: inline-block; margin-bottom: 20px;">{{ item.strategyName }}</span>
<el-timeline> <el-timeline>
<el-timeline-item v-for="(items,index) in item.flow" :key="index" placement="top" <el-timeline-item v-for="(items,index) in item.scenesList" :key="index" placement="top"
:timestamp="items.timestamp" :timestamp="items.title"
:hollow="items.hollow" :hollow="items.hollow"
:icon="items.icon" :icon="items.icon"
:type="items.type" :type="items.type"
> >
{{items.step}} {{items.sceneName}}{{items.sceneRemark}}
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
@ -347,13 +347,15 @@ const celueList = ref([
]) ])
function getStrategyListFun(){ function getStrategyListFun(){
getStrategyList().then((res)=>{ getStrategyList().then((res)=>{
// celueList.value = res.data console.log('```````',res)
celueList.value = res.data
}) })
} }
// //
const SenceControlArr = ref([]) // const SenceControlArr = ref([])
let celueItem; let celueItem;
function selectCeLue(item){ function selectCeLue(item){
console.log(item)
celueItem = item celueItem = item
// // // //
// //1 // //1
@ -388,28 +390,27 @@ function selectCeLue(item){
//icontype //icontype
function clearLastCelue(){ function clearLastCelue(){
celueList.value.forEach((celue) => { celueList.value.forEach((celue) => {
celue.flow.forEach((flow) => { celue.scenesList.forEach((scenesList) => {
flow.icon = '' scenesList.icon = ''
flow.type = '' scenesList.type = ''
}) })
}) })
celueItem.flow.forEach((flow) => { celueItem.scenesList.forEach((scenesList) => {
flow.icon = flow.icon || '' scenesList.icon = scenesList.icon || ''
flow.type = flow.type || '' scenesList.type = scenesList.type || ''
}) })
console.log('qqqqqq',celueItem)
} }
// const getIcon = (item) => { return item.icon || '' } // const getIcon = (item) => { return item.icon || '' }
// const getType = (item) => { return item.type || '' } // const getType = (item) => { return item.type || '' }
// //
function confirmClick() { function confirmClick() {
if(SenceControlArr.value.length != 0){ if(celueItem == undefined){
ElMessage.warning('请先选择策略') ElMessage.warning('请先选择策略')
}else{ }else{
ElMessageBox.confirm(`确定执行 ${radio.value} ?`).then(() => { ElMessageBox.confirm(`确定执行 ${radio.value} ?`).then(() => {
// drawerIshow.value = false; // console.log('',celueItem.commandList)
console.log('执行的策略:',celueItem.flow) // console.log('',celueItem.scenesList)
const loading = ElLoading.service({ const loading = ElLoading.service({
lock: true, lock: true,
@ -418,38 +419,38 @@ function confirmClick() {
}) })
setTimeout(() => { setTimeout(() => {
loading.close() loading.close()
}, celueItem.flow.length * 1000) }, celueItem.scenesList.length * 1000)
getSenceControl(SenceControlArr.value).then((res)=>{ getSenceControl(celueItem.commandList).then((res)=>{
if(res.code == 200){ if(res.code == 200){
clearLastCelue() clearLastCelue()
// //
function setFlowItem(i) { function setFlowItem(i) {
if (i >= celueItem.flow.length) { if (i >= celueItem.scenesList.length) {
return; // return; //
} }
celueItem.flow[i].type = 'success'; celueItem.scenesList[i].type = 'success';
celueItem.flow[i].icon = 'Check'; celueItem.scenesList[i].icon = 'Check';
setTimeout(function() { setTimeout(function() {
setFlowItem(i + 1); // setFlowItem(i + 1); //
}, 1000); // 1 }, 1000);
} }
setFlowItem(0); // setFlowItem(0); //
setTimeout(()=>{ setTimeout(()=>{
ElMessage.success('导入成功') ElMessage.success('导入成功')
},celueItem.flow.length * 1000) },celueItem.scenesList.length * 1000)
getControlLogListFun() getControlLogListFun()
}else{ }else{
for(let i = 0;i < celueItem.flow.length;i++) { for(let i = 0;i < celueItem.scenesList.length;i++) {
setTimeout(() => { setTimeout(() => {
celueItem.flow[i].type = 'warning' celueItem.scenesList[i].type = 'warning'
celueItem.flow[i].icon = 'Close' celueItem.scenesList[i].icon = 'Close'
},celueItem.flow.length * 1000) },celueItem.scenesList.length * 1000)
} }
setTimeout(()=>{ setTimeout(()=>{
ElMessage.warning('导入失败') ElMessage.warning('导入失败')
},celueItem.flow.length * 1000) },celueItem.scenesList.length * 1000)
} }
}) })

Loading…
Cancel
Save