Browse Source

feat:报警编码修改暂存

huang, kai (Contractor) 3 days ago
parent
commit
32d7ba2b9a

+ 23 - 2
admin.ui.plus-master/src/api/admin/reportManagement/alarm/alarmApi.ts

@@ -1,6 +1,7 @@
 import { AxiosResponse } from 'axios'
 import {ContentType, HttpClient, RequestParams} from "/@/api/admin/http-client";
-import {PageInputAlarmFilterModel,alarmFilterModel} from "/@/api/admin/reportManagement/alarm/alarmDto";
+import {PageInputAlarmFilterModel,alarmFilterModel,PushRulesQuery} from "/@/api/admin/reportManagement/alarm/alarmDto";
+import request from '/@/utils/request';
 
 export class AlarmApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType>{
   timer = 500
@@ -26,7 +27,27 @@ export class AlarmApi<SecurityDataType = unknown> extends HttpClient<SecurityDat
     })
 }
 
-
+export class PushRulesApi {
+  /**
+   * 获取推送规则列表
+   * @param params 请求参数
+   * @returns 接口响应数据
+   */
+  getPushRulesList(params: PushRulesQuery) {
+    // 处理时间参数(转为字符串数组)
+    const timeParams = params.time?.map(time => time.toString());
+    
+    return request({
+      url: '/api/app/Association/get-push-rules-list',
+      method: 'GET', 
+      params: {
+        ...params,
+        time: timeParams ? timeParams.join(',') : undefined, // 转换为逗号分隔的字符串
+        fuelIds: params.fuelIds || '' // 确保非空
+      }
+    });
+  }
+}
 
 
 

+ 9 - 0
admin.ui.plus-master/src/api/admin/reportManagement/alarm/alarmDto.ts

@@ -121,3 +121,12 @@ filter?: alarmFilterModel_SearchFilter
   
   
 
+// /src/api/admin/Association/pushRulesDto.ts
+export interface PushRulesQuery {
+  /** 时间范围(格式:YYYY-MM-DD HH:mm:ss,传空则不筛选) */
+  time?: [string, string];
+  /** 油机 ID(字符串,逗号分隔) */
+  fuelIds?: string;
+  /** 其他可选参数(根据接口文档补充) */
+  // otherParams?: string;
+}

+ 35 - 5
admin.ui.plus-master/src/views/admin/statement/alarmManagement/index.vue

@@ -56,8 +56,15 @@
             <el-row>
               <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
               <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
-            <el-button v-auth="'api:admin:file:upload-file'" type="primary" icon="ele-Upload"> 执行推送规则
-            </el-button>
+               <!-- 在现有模板中修改按钮的点击事件 -->
+               <el-button 
+                 v-auth="'api:admin:file:upload-file'" 
+                 type="primary" 
+                 icon="ele-Upload" 
+                 @click="handlePushRules"
+               >
+                 执行推送规则
+               </el-button>              
           </el-row>
         </el-row>
 
@@ -106,12 +113,13 @@
 
 <script setup lang="ts" name="authorize/fuelingsdk">
 import { onMounted, reactive, watch } from "vue";
-import { ElTable } from 'element-plus'
-import { alarmFilterModel_SearchFilter, alarmFilterModel, PageInputAlarmFilterModel } from "/@/api/admin/reportManagement/alarm/alarmDto";
-import { AlarmApi } from "/@/api/admin/reportManagement/alarm/alarmApi";
+import { ElMessage, ElTable } from 'element-plus'
+import { alarmFilterModel_SearchFilter, alarmFilterModel, PageInputAlarmFilterModel, PushRulesQuery } from "/@/api/admin/reportManagement/alarm/alarmDto";
+import { AlarmApi,PushRulesApi } from "/@/api/admin/reportManagement/alarm/alarmApi";
 import { useDynamicPageSize } from "/@/composables/useDynamicPageSize";
 import router from "/@/router";
 
+const pushRulesApi = new PushRulesApi();
 
 // 使用组合式函数获取分页状态
 const pageState = useDynamicPageSize(10, 15);
@@ -256,6 +264,28 @@ const toList = () =>{
   router.push({ path:`/authorize/statement/alarmQuery`})
 }
 
+const handlePushRules = async () => {
+  try {
+    // 构造请求参数
+    const params: PushRulesQuery = {
+      // 从表单获取油机 ID(示例:假设从 Data.Filter.fuelld 获取,多个用逗号分隔)
+      fuelIds: Data.Filter.fuelld, 
+      // 时间参数(可选,从日期选择器获取)
+      time: Data.time?.map((date: { toString: () => any; }) => date.toString()) // 自动转换为字符串数组
+    };
+
+    // 调用接口
+    const res = await pushRulesApi.getPushRulesList(params);
+    
+    // 处理响应数据
+    console.log('推送规则列表:', res.data);
+    ElMessage.success('规则列表获取成功');
+  } catch (error) {
+    console.error('获取推送规则失败:', error);
+    ElMessage.error('获取失败,请检查参数');
+  }
+};
+
 </script>
 
 <style scoped lang="scss">

+ 69 - 39
admin.ui.plus-master/src/views/admin/yujing/alarmRules/components/add-alarmRules.vue

@@ -16,7 +16,7 @@
           </el-form-item>
         </el-form>
       </div>
-      <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+      <!-- <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
         <el-form :inline="true" @submit.stop.prevent>
           <el-form-item label="标签:" style="width: 100%;" prop="labelId">
             <el-select v-model="Data.Filter.labelId" placeholder="请选择标签">
@@ -24,7 +24,7 @@
             </el-select>
           </el-form-item>
         </el-form>
-      </div>
+      </div> -->
       <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
         <el-form :inline="true" @submit.stop.prevent>
           <el-form-item label="推送用户:" style="width: 100%;" prop="pushUserid">
@@ -67,12 +67,12 @@
         <el-form :inline="true" @submit.stop.prevent>
           <el-form-item label="模&#8195;&#8195;板:" style="width: 50%;" prop="mode1">
             <el-select v-model="Data.mode1" class="m-2" placeholder="微信模板" v-if="Data.radioValue1" @change="modeChange">
-              <el-option v-for="item in templateData.wxList" :key="item.id" :label="item.templateName" :value="item.id" />
+              <el-option v-for="item in templateData.wxList" :key="item.id" :label="item.templateName" :value="item.templateName" />
             </el-select>
           </el-form-item>
           <el-form-item label="&#8195;&#8195;&#8195;&#8195;" style="width: 100%;" prop="mode2">
             <el-select v-model="Data.mode2" class="m-2" placeholder="邮箱模板" v-if="Data.radioValue2" @change="modeChange">
-              <el-option v-for="item in templateData.emailList" :key="item.id" :label="item.name" :value="item.id" />
+              <el-option v-for="item in templateData.emailList" :key="item.id" :label="item.name" :value="item.templateName" />
             </el-select>
           </el-form-item>
         </el-form>
@@ -127,11 +127,11 @@
               <el-row :gutter="20" style="width: 100%;">
                 <!-- 报警设备 -->
                 <el-col :span="8">
-                  <div>
+                  <div style="flex:1;">
                      <!-- style="display: flex; align-items: center;" -->
                     <span style="margin-right: 13px;">报警设备:</span>
-                    <el-form-item prop="equipment">
-                      <el-select v-model="condition.equipment" placeholder="请选择" style="flex: 1;">
+                    <el-form-item prop="equipment" style="display:flex">
+                      <el-select v-model="condition.equipment" placeholder="请选择" >
                         <el-option 
                           v-for="item in Data.alarmEquipment" 
                           :key="item" 
@@ -139,17 +139,16 @@
                           :value="item"
                         />
                       </el-select>
-                      <span>&#8195;&#8195;&#8195;&</span>
                     </el-form-item>
                   </div>
                 </el-col>
                 
                 <!-- 报警类型 -->
                 <el-col :span="8">
-                  <div>
+                  <div style="flex:1;">
                     <span style="margin-right: 13px;">报警类型:</span>
-                    <el-form-item prop="type">
-                      <el-select v-model="condition.type" placeholder="请选择" style="flex: 1;">
+                    <el-form-item prop="type"  style="display:flex">
+                      <el-select v-model="condition.type" placeholder="请选择" >
                         <el-option 
                           v-for="item in Data.alarmType" 
                           :key="item" 
@@ -157,17 +156,16 @@
                           :value="item"
                         />
                       </el-select>
-                      <span>&#8195;&#8195;&#8195;&</span>
                     </el-form-item>
                   </div>
                 </el-col>
                 
                 <!-- 报警来源 -->
                 <el-col :span="8">
-                  <div>
+                  <div style="flex:1;">
                     <span style="margin-right: 13px;">报警来源:</span>
-                    <el-form-item prop="source">
-                      <el-select v-model="condition.source" placeholder="请选择" style="flex: 1;">
+                    <el-form-item prop="source" style="display:flex">
+                      <el-select v-model="condition.source" placeholder="请选择">
                         <el-option 
                           v-for="item in Data.alarmSource" 
                           :key="item" 
@@ -224,10 +222,10 @@
             <el-form-item :label="index === 0 ? '条&#8195;&#8195;件:' : '附加条件:'" style="width: 130%;">
               <el-row :gutter="20" style="width: 100%;">
                 <el-col :span="8">
-                  <div>
+                  <div style="flex:1;">
                     <span style="margin-right: 13px;width: 90px;">维修类型:</span>
                     <el-form-item prop="proType">
-                      <el-select v-model="condition2.proType" placeholder="请选择" style="flex: 1;">
+                      <el-select v-model="condition2.proType" placeholder="请选择" style="display:flex">
                         <el-option 
                           v-for="item in Data.alarmproType" 
                           :key="item" 
@@ -235,16 +233,15 @@
                           :value="item"
                         />
                       </el-select>
-                  <span>&#8195;&#8195;&#8195;&</span>
                     </el-form-item>
                   </div>
                 </el-col>
                 
                 <el-col :span="8">
-                  <div>
+                  <div style="flex:1;">
                     <span style="margin-right: 13px;">维修状态:</span>
                     <el-form-item prop="proStatus">
-                      <el-select v-model="condition2.proStatus" placeholder="请选择" style="flex: 1;">
+                      <el-select v-model="condition2.proStatus" placeholder="请选择" style="display:flex">
                         <el-option 
                           v-for="item in Data.alarmproStatus" 
                           :key="item" 
@@ -328,7 +325,7 @@ const Data = reactive({
     userId:"",
     condition2:"",
     condition:"",
-    mode1:""
+    mode1:''
   } as unknown as alarmRluesFilterModel,
   /** 角色列表 */
   roleList: [] as any,
@@ -470,12 +467,16 @@ const funSelect = async () => {
 
 // 获取模板元素id
 const modeChange = (() => {
+  const wxItem = templateData.wxList.filter(item => item.templateName === Data.mode1)
+  const emailItem = templateData.emailList.filter(item => item.templateName === Data.mode1)
+  
+  console.log(Data.mode1,wxItem,emailItem,templateData.wxList,templateData.emailList)
   Data.Filter.pushTemplateMappingID = []
-  if (Data.Filter.pushTemplateMappingID.includes(Number(Data.mode1)) == false && Data.mode1 != '') {
-    Data.Filter.pushTemplateMappingID?.push(Number(Data.mode1))
+  if (!Data.Filter.pushTemplateMappingID.includes(Number(wxItem[0].id))) {
+    Data.Filter.pushTemplateMappingID?.push(Number(wxItem[0].id))
   }
-  if (Data.Filter.pushTemplateMappingID.includes(Number(Data.mode2)) == false && Data.mode2 != '') {
-    Data.Filter.pushTemplateMappingID?.push(Number(Data.mode2))
+  if (!Data.Filter.pushTemplateMappingID.includes(Number(emailItem[0].id))) {
+    Data.Filter.pushTemplateMappingID?.push(Number(emailItem[0].id))
   }
 })
 
@@ -563,10 +564,10 @@ const submitForm = async () => {
     ElMessage.warning('请输入规则名称')
     return
   }
-  if (!Data.Filter.labelId) {
-    ElMessage.warning('请选择标签')
-    return
-  }
+  // if (!Data.Filter.labelId) {
+  //   ElMessage.warning('请选择标签')
+  //   return
+  // }
   if (!Data.Filter.pushUserid || Data.Filter.pushUserid.length === 0) {
     ElMessage.warning('请选择推送用户')
     return
@@ -657,7 +658,7 @@ const openDialog = (row: alarmRluesFilterModel) => {
   console.log(row)
   if(row){
     console.log(Data.Filter)
-    const { triggerMethod, maintenanceTriggerMethod, ruleName, roleMappingId, labelId,pushUserid,condition,condition2, ...rest } = Data.Filter;
+    const { triggerMethod, maintenanceTriggerMethod, ruleName, roleMappingId, labelId,pushUserid,condition,condition2,isExclusive,isExclusiveMaintenance, ...rest } = Data.Filter;
     Data.Filter = { ...rest, ...row };
     Data.Filter.triggerMethod = triggerMethod || Data.Filter.triggerMethod;
     Data.Filter.maintenanceTriggerMethod = maintenanceTriggerMethod || Data.Filter.maintenanceTriggerMethod;
@@ -668,17 +669,31 @@ const openDialog = (row: alarmRluesFilterModel) => {
     Data.Filter.ruleName = ruleName || Data.Filter.ruleName;
     Data.Filter.pushUserid = pushUserid || Data.Filter.pushUserid;
 
-    if (Data.Filter.isExclusive == '是') {
-      Data.Filter.isExclusive = true;
-    } else {
-      Data.Filter.isExclusive = false;
-    }
 
-    if (Data.Filter.isExclusiveMaintenance == '是') {
-      Data.Filter.isExclusiveMaintenance = true;
-    } else {
-      Data.Filter.isExclusiveMaintenance = false;
+    Data.Filter.isExclusive = Boolean(row.isExclusive);
+    Data.Filter.isExclusiveMaintenance = Boolean(row.isExclusiveMaintenance);
+
+
+
+    Data.Filter.pushUserid = Array.isArray(row.pushUserid) 
+      ? row.pushUserid 
+      : [row.pushUserid || 0]; // 处理可能的非数组情况
+
+    if(row.pushTemplateMappingID != undefined && row.pushTemplateMappingID.length > 0) {
+      const id = row.pushTemplateMappingID[0]
+      const wxItem = templateData.wxList.filter(item => item.id === id);
+      const emailItem = templateData.emailList.filter(item => item.id === id);
+     
+      if(wxItem != undefined) {
+        Data.mode1 = wxItem[0].templateName
+      } else {
+        Data.mode1 = emailItem[0].templateName
+      }
+     
     }
+ 
+    
+
 
     const temp = <string[]>Data.Filter.pushMethod?.split(',');
     for (var i = 0; i < temp.length; i++) {
@@ -715,6 +730,8 @@ const openDialog = (row: alarmRluesFilterModel) => {
         console.error('解析维修条件JSON失败:', e);
       }
     }
+
+    console.log(Data.Filter,Data.mode1)
   } else {
     Data.Filter = {
       ruleName: '',
@@ -733,6 +750,19 @@ const openDialog = (row: alarmRluesFilterModel) => {
       maintenanceTriggerMethod:null,
       pushUserid: []
     } as unknown as alarmRluesFilterModel;
+    Data.mode1 = "",
+    Data.condition = [{
+    equipment: '',
+    type: '',
+    source: ''
+  }]
+    Data.showAlarmConditions = false
+    Data.condition2 = [{
+    equipment: '',
+    type: '',
+    source: ''
+  }]
+    Data.showRepairConditions = false
   }
 
   Data.isShowDialog = true;

+ 2 - 2
admin.ui.plus-master/src/views/admin/yujing/alarmRules/index.vue

@@ -160,8 +160,8 @@ const init = async () => {
   Data.loading = true
   const res: any = await new alarmRulesApi().getData({ ...Data.pageInput, filter: Data.Filter })
   console.log(res)
-  Data.tableModel = res?.data ?? []
-  Data.total = res?.data?.length ?? 0   // 接口中没有总的数据量
+  Data.tableModel = res?.data.list ?? []
+  Data.total = res?.data?.list.length ?? 0   // 接口中没有总的数据量
   Data.loading = false
   pushMethodChange()
 }

+ 6 - 0
admin.ui.plus-master/vite.config.ts

@@ -42,6 +42,12 @@ const viteConfig = defineConfig(({ mode, command }: ConfigEnv) => {
           changeOrigin: true,
           rewrite: (path) => path.replace(/^\/gitee/, ''),
         },
+        '/app': {
+          target: 'http://dev.hsfuel.com:8000',
+          ws: true,
+          changeOrigin: true,
+          rewrite: (path) => path
+        },
       },
     },
     build: {