策略运行

This commit is contained in:
白菜
2025-07-13 00:29:19 +08:00
parent 3308887e4c
commit be1fb382ff
6 changed files with 150 additions and 64 deletions

View File

@ -183,16 +183,16 @@ export function strategyRunningList(siteId) {
})
}
//停止策略
export function stopStrategyRunning(siteId) {
export function stopStrategyRunning(id) {
return request({
url: `/system/strategyRunning/stop?siteId=${siteId}`,
url: `/system/strategyRunning/stop?id=${id}`,
method: 'get'
})
}
// 获取所有主策略
export function getMainStrategyList(siteId) {
export function getMainStrategyList() {
return request({
url: `/system/strategyRunning/getMainStrategyList?siteId=${siteId}`,
url: `/system/strategyRunning/getMainStrategyList`,
method: 'get'
})
}
@ -211,3 +211,4 @@ export function configStrategy(data) {
data
})
}

View File

@ -167,6 +167,8 @@ export const dzjk=[
{
path: 'xftg',
component: () => import('@/views/ems/dzjk/clpz/xftg/index.vue'),
hidden:true,
breadcrumb: false,
name: 'DzjkClpzXftg',
meta: { title: '削峰填谷',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkClpz'},
}

View File

@ -1,32 +1,41 @@
<template>
<el-container class="clyx-container">
<el-header class="clyx-header">
<div class="clyx-title">策略状态<span class="clyx-status save">已运行</span></div>
<div class="clyx-title">策略状态<span class="clyx-status save">{{strategyStatusOptions[info.status]}}</span></div>
<div class="clyx-btns">
<el-button v-if="!hideSettingBtn" size="small" @click="$refs.setting.dialogFormVisible = true">配置</el-button>
<el-button type="warning" class="alarm-btn" size="small" @click='close'>停止策略</el-button>
<el-button v-if="!hideSettingBtn" size="small" @click="$emit('showSetting')">配置</el-button>
<el-button v-if="info.status === '1'" type="warning" class="alarm-btn" size="small" @click='close'>停止策略</el-button>
</div>
</el-header>
<el-main class="clyx-main">
<slot name="default"></slot>
<setting ref="setting"/>
</el-main>
</el-container>
</template>
<script>
import Setting from './Setting.vue'
import {mapState} from "vuex";
import {stopStrategyRunning} from '@/api/ems/dzjk'
export default {
name:'DzjkClpzClContainer',
components:{Setting},
props:{
hideSettingBtn:{
type:Boolean,
default:false
},
info:{
type:Object,
default:()=>{return {}},
}
},
computed:{
...mapState({
strategyStatusOptions: state => state.ems.strategyStatusOptions,
})
},
data() {
return {
loading:true
}
},
methods:{
@ -40,13 +49,13 @@ export default {
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
instance.confirmButtonLoading = true;
setTimeout(() => {
// todo 调用接口如果关机成功 调用done方法 否则不关闭弹窗
done();
// setTimeout(() => {
this.loading = true
stopStrategyRunning(this.info.id).then(response => {
response.code === 200 && done();
}).finally(() => {
this.loading = false
instance.confirmButtonLoading = false;
// }, 300);
}, 3000);
})
} else {
done();
}
@ -57,6 +66,7 @@ export default {
type: 'success',
message: '停止策略成功!'
});
this.$emit('update')
}).catch(() => {
//取消复位
});

View File

@ -4,58 +4,99 @@
custom-class="ems-dialog"
:visible.sync="dialogFormVisible"
width="420px"
destroy-on-close
lock-scroll
append-to-body
:close-on-click-modal="false"
:close-on-press-escape="false"
@close="cancel"
>
<el-form :model="form" label-width="100px">
<el-form-item label="主策略">
<el-select v-model="form.main" placeholder="请选择">
<el-option label="主策略一" value="1"></el-option>
<el-option label="主策略二" value="2"></el-option>
<el-form ref="form" :model="form" :rules='rule' label-width="100px" v-loading="loading > 0">
<el-form-item label="主策略" prop="mainStrategyId">
<el-select v-model="form.mainStrategyId" placeholder="请选择">
<el-option :label="item.strategyName" :value="item.id" v-for="(item,index) in mainStrategyList" :key="index+'mainStrategyList'"></el-option>
</el-select>
</el-form-item>
<el-form-item label="辅助策略">
<el-select v-model="form.assis" placeholder="请选择">
<el-option label="辅助策略一" value="1"></el-option>
<el-option label="辅助策略二" value="2"></el-option>
<el-form-item label="辅助策略" prop="auxStrategyId">
<el-select v-model="form.auxStrategyId" placeholder="请选择" clearable>
<el-option :label="item.strategyName" :value="item.id" v-for="(item,index) in auxStrategyList" :key="index+'auxStrategyList'"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible=false"> </el-button>
<el-button type="primary" :loading="loading" @click="sure"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button type="primary" :loading="loading > 0" @click="sure"> </el-button>
</div>
</el-dialog>
</template>
<script>
import {getMainStrategyList, getAuxStrategyList, configStrategy} from '@/api/ems/dzjk'
export default {
inject:['$home'],
data(){
return {
loading:false,
info:{},
loading:0,
dialogFormVisible:false,
mainStrategyList:[],
auxStrategyList:[],
form:{
main:'',
assis:''
mainStrategyId:'',
auxStrategyId:''
},
rule:{
mainStrategyId:[
{ required: true, message: '请选择主策略', trigger: ['blur','change'] },
]
}
}
},
methods:{
showSettingDialog(item){
console.log('打开弹窗',item)
this.dialogFormVisible = true
this.info = item || {}
const {auxStrategyId = '',mainStrategyId = ''} = item
this.form.auxStrategyId=auxStrategyId
this.form.mainStrategyId=mainStrategyId
this.init()
},
init(){
this.loading+=2
this.mainStrategyList=[]
this.auxStrategyList=[]
getMainStrategyList().then(response => {
this.mainStrategyList=response?.data || []
}).finally(()=>{this.loading-=1})
getAuxStrategyList().then(response => {
this.auxStrategyList=response?.data || []
}).finally(()=>{this.loading-=1})
},
cancel(){
this.form.main='';
this.form.assis='';
this.$refs.form.resetFields()
this.form={
mainStrategyId:'',
auxStrategyId:''
}
this.dialogFormVisible = false;
},
sure(){
if(this.form.main===''||this.form.assis===''){
return this.$alert('请选择正确的策略');
}
this.loading = true
setTimeout(()=>{
this.loading = false
//如果接口调用成功 关闭弹窗
this.dialogFormVisible = false;
},3000)
this.$refs['form'].validate(valid => {
if (!valid) return
console.log('this.$home',this.$home)
this.loading +=1
const {mainStrategyId='', auxStrategyId=''} = this.form
configStrategy({mainStrategyId,auxiliaryStrategyId:auxStrategyId,siteId:this.$home.siteId,id:this.info?.id || ''}).then(response => {
if(response?.code === 200){
this.$home.init()
this.cancel()
}
}).finally(()=>{
this.loading -=1
})
})
}
}
}

View File

@ -1,49 +1,81 @@
<template>
<cl-container>
<template v-slot:default>
<div class="cl-items cl-items-main">
<div class="cl-header">主策略</div>
<div class="cl-content">
<div class="cl-name">削峰填谷</div>
</div>
<div v-loading="loading">
<el-button type="primary" plain @click="settingStrategy" style="margin-bottom: 20px;">新增策略</el-button>
<cl-container v-for="(item,index) in list" :key="index+'clContainer'" :info="item" class="contain" @update="init" @showSetting="settingStrategy(item)">
<template v-slot:default>
<div class="cl-items cl-items-main" @click="toDetail(item.mainStrategyId)">
<div class="cl-header">主策略</div>
<div class="cl-content" >
<div class="cl-name">{{item.mainStrategyName}}</div>
</div>
</div>
<div class="cl-items" v-show="item.auxStrategyName" @click="toDetail(item.auxStrategyId)">
<div class="cl-header">辅助策略</div>
<div class="cl-content">
<div class="cl-name">{{item.auxStrategyName}}</div>
</div>
</div>
</template>
</cl-container>
<div v-if="list.length === 0">
<el-empty :image-size="200" ></el-empty>
</div>
<div class="cl-items">
<div class="cl-header">辅助策略</div>
<div class="cl-content">
<div class="cl-name">需量控制</div>
</div>
</div>
</template>
</cl-container>
<setting ref="setting"/>
</div>
</template>
<script>
import Setting from './../Setting.vue'
import ClContainer from './../ClContainer.vue'
import getQuerySiteId from '@/mixins/ems/getQuerySiteId'
import {strategyRunningList} from '@/api/ems/dzjk'
export default {
name:'DzjkClpzClyx',
components:{ClContainer},
components:{ClContainer,Setting},
mixins: [getQuerySiteId],
data() {
return {
loading:false,
list:[],
}
},
methods:{
init(){}
provide(){
return {$home:this}
},
methods:{
settingStrategy(item=''){
this.$refs.setting.showSettingDialog(item)
},
init(){
this.loading = true
this.list = []
strategyRunningList(this.siteId).then(response => {
this.list =JSON.parse(JSON.stringify(response?.data || {}))
}).finally(() => {this.loading=false})
},
toDetail(id){
id && this.$router.push({
path:'/dzjk/clpz/xftg',
query:{
...this.$route.query,
id
}
})
}
},
mounted(){
}
}
</script>
<style scoped lang="scss">
.contain{
margin-bottom: 20px;
}
.clyx-main{
padding:0 12px 0 12px;
.cl-items{
cursor: pointer;
width: 228px;
height: 156px;
display: inline-block;

View File

@ -25,7 +25,7 @@
<script>
import { dzjk } from '@/router/ems'
const childrenRoute = dzjk[0].children[0].children.find(item=> item.name==='DzjkClpz').children//获取到统计报表下面的字路由
const childrenRoute = dzjk[0].children[0].children.find(item=> item.name==='DzjkClpz').children.filter(item=>!item?.hidden)//获取到统计报表下面的字路由
console.log('设备监控子路由',childrenRoute)
export default {
name:'DzjkClpz',