Jelajahi Sumber

单井报警设置增加按模板增加报警设置

chenwen 1 tahun lalu
induk
melakukan
1c8adda119

+ 9 - 0
src/api/alarmDefine.js

@@ -79,4 +79,13 @@ api.deleteForTmp=(alarmId)=>{
 	});
 }
 
+
+api.transFromTmp=(wellId,tmpId)=>{
+	return request({
+	    url: '/base/alarmdefine/transFromTmp',
+	    method: 'post',
+		data:  {wellId,tmpId}
+	});
+}
+
 export  default api

+ 1 - 0
src/api/alarmTemplate.js

@@ -34,4 +34,5 @@ api.delTemplate = (tmpId) => {
 	    });
 }
 
+
 export  default api

+ 1 - 1
src/components/CondExpress.vue

@@ -68,7 +68,7 @@
 				condition.param=newVal1[0].paramId
 			}
 			if(newVal2){
-				console.log(newVal2)
+				//console.log(newVal2)
 				Object.assign(condition,newVal2)
 			}
 			

+ 40 - 5
src/pages/alarm/AlarmDefine.vue

@@ -3,9 +3,9 @@
 		<div class="page-side">
 			<el-card class="box-card" style="height: 100%;min-width:180px;">
 			    <template #header>
-			      <div class="card-header" :class="{'side-item-active':activeItemIdx==-1}" @click="handleParamSelect(crtWell,-1)">
-			        <span>{{crtWell.wellName}}</span>
-			        
+			      <div class="card-header" :class="{'side-item-active':activeItemIdx==-1}">
+			        <span  @click="handleParamSelect(crtWell,-1)">{{crtWell.wellName}}</span>
+			        <el-icon title="以模板方式设置" @click="showTmpWin"><CopyDocument /></el-icon>
 			      </div>
 			    </template>
 				<el-scrollbar>
@@ -79,18 +79,23 @@
 				</el-form>
 			</div>
 		</div>
+		
+		<el-dialog v-model="dialogCtr.show"  :title="dialogCtr.title" :close-on-click-modal="false"
+		:destroy-on-close="true">
+			<component :is="dialogCtr.subComp" :context="dialogCtr.context" @success="dialogSuccessHandle"/>
+		</el-dialog>
 	</div>
 </template>
 
 <script setup>
-	import {reactive,ref,toRaw,onMounted,watch} from 'vue'
+	import {reactive,ref,toRaw,onMounted,watch,markRaw} from 'vue'
 	import { storeToRefs } from 'pinia'
 	import { useHomeStore } from "../../store/home.js"
 	import alarmDefineAPI from "../../api/alarmDefine.js"
 	import {ElMessageBox,ElMessage} from 'element-plus'
 	import CondExpressGroup from '@/components/CondExpressGroup.vue'
 	
-	
+	import AlarmTempSelector from './AlarmTempSelector.vue'
 	
 	const activeItemIdx=ref(null)
 	
@@ -119,6 +124,33 @@
 	const rules =reactive({
 	})
 	
+	//弹窗动态组件配置
+	const dialogCtr=reactive({
+		subComp:markRaw(AlarmTempSelector),
+		show:false,
+		title:'选择报警设置模板',
+		context:null
+	})
+	
+	const showTmpWin=()=>{
+		if(!crtWell.wellId){
+			ElMessage.error('没未选择井')
+			return false
+		}
+		let {wellId,wellName}=crtWell
+		dialogCtr.context={wellId,wellName}
+		dialogCtr.show=true
+	}
+	
+	const dialogSuccessHandle=()=>{
+		dialogCtr.show=false
+		ElMessageBox.alert('通过模板设置报警成功,但需手动保存一次(同井任意一报警)来生效','报警设置成功',{
+			confirmButtonText: '确认'
+		})
+		loadAlarmDefine(crtAlarmHolderId)
+		
+	}
+	
 	const store=useHomeStore()
 	const  {currentTreeNode} = storeToRefs(store)
 	
@@ -299,6 +331,9 @@
 		 height:18px;
 		 padding:5px 5px;
 		 border-left:4px solid #ffffff;
+		 display: flex;
+		 justify-content: space-between;
+		 align-items: center;
 	 }
 	 .page-side .card-header:hover{
 		 

+ 115 - 0
src/pages/alarm/AlarmTempSelector.vue

@@ -0,0 +1,115 @@
+<template>
+	<div class="qpage">
+		<el-form :inline="true" :model="queryForm" class="query-form-inline"  label-width="auto">
+			<el-form-item label="当前井">
+				 {{$attrs['context']['wellName']}}
+			</el-form-item>
+			<el-form-item label="报警模板">
+				<el-select v-model="queryForm.tmpId" @change="queryHandle">
+					<el-option v-for="(tmp,index) in tmpList" :key="index" :label="tmp.tmpName" :value="tmp.tmpId"></el-option>
+				</el-select>
+			</el-form-item>
+			  
+			<el-form-item>
+				<el-button type="primary"  @click="usAlarmTmp">应用模板</el-button>
+			</el-form-item>
+		</el-form>
+		
+		<div class="qpage-body" style="height:calc(100vh - 360px);">
+			<CrudTable 
+			ref="crudTable"
+			page-info-opts="total, prev, pager, next,sizes"
+			url="/base/alarmdefine/queryByTmpId"
+			:pageSize="20"
+			:autoLoad="false"
+			>
+			 
+			  <template #tabColumns={indexGenerate}>
+				  <el-table-column type="index" :index="indexGenerate" label="序号" width="60" align="center"/>
+				  <el-table-column prop="alarmSource" label="报警源" width="120" />
+				  <el-table-column prop="expressDesc" label="报警条件" width="220" />
+				  <el-table-column prop="alarmModeName" label="报警方式" width="100" />
+				  <el-table-column prop="alarmGradeName" label="报警等级" width="90" />
+				  <el-table-column prop="usingIf" label="状态" width="80">
+				  	<template #default="scope">
+				  		<div>{{scope.row.usingIf?'启用':'禁用'}}</div>
+				  	</template>
+				  </el-table-column>
+				  
+			  </template>
+				
+			</CrudTable>
+		</div>
+	</div>
+</template>
+
+<script setup>
+	import {reactive,ref,onMounted,useAttrs} from 'vue'
+	import CrudTable from "../../components/crudtable/CrudTable.vue"
+	import {ElMessageBox,ElMessage} from 'element-plus'
+	import api from "../../api/alarmTemplate.js"
+	import alarmDefineAPI from "../../api/alarmDefine.js"
+	
+	const emit=defineEmits(['success'])
+	
+	const crudTable=ref(null)
+	
+	let attrs = useAttrs()
+	
+	const isQuerying=ref(false)
+	
+	
+	const queryForm = reactive({
+	  tmpId:null
+	})
+	
+	const tmpList=ref([])
+	
+	const queryHandle=()=>{
+		isQuerying.value=true
+		crudTable.value.query(queryForm).then(resp=>{
+			isQuerying.value=false
+		})
+		
+	}
+	
+	const usAlarmTmp=()=>{
+		let tmpId=queryForm.tmpId,wellId=attrs['context']['wellId']
+		if(tmpId==null || wellId==null){
+			ElMessage.error('缺少井号或模板号')
+			return
+		}
+		alarmDefineAPI.transFromTmp(wellId,tmpId).then(resp=>{
+			if(resp.code!=0){
+				ElMessage.error(resp.msg || '操作失败')
+				return
+			}
+			emit('success')
+		}).catch(err=>{
+			console.log(err)
+			ElMessage.error('操作出现错误')
+		})
+		return
+	}
+	
+	onMounted(()=>{
+		loadTmp()
+	})
+	
+	const loadTmp=()=>{
+		api.loadAllTemplate().then(resp=>{
+			if(resp.code!=0){
+				return
+			}
+			tmpList.value=resp.data
+			queryForm.tmpId=resp.data[0].tmpId
+			queryHandle()
+		}).catch(err=>{
+			console.log(err)
+		})
+	}
+</script>
+
+<style scoped>
+	@import url('../../assets/css/qpage.css');
+</style>