Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

wenhongquan 2 lat temu
rodzic
commit
de8b9b858a

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/data/controller/TblEquipmentMqttController.java

@@ -112,4 +112,9 @@ public class TblEquipmentMqttController extends BaseController {
         return R.ok(iTblEquipmentMqttService.getMqttListByDeviceId(mqttObj));
     }
 
+    @GetMapping("/noListByDeviceId")
+    public R<List<MqttObj>> noListByDeviceId(MqttObj mqttObj) {
+        return R.ok(iTblEquipmentMqttService.selectNoMqttListByDeviceId(mqttObj));
+    }
+
 }

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/data/domain/MqttObj.java

@@ -19,6 +19,9 @@ public class MqttObj extends BaseEntity {
     @TableId(value = "id")
     private Long id;
 
+    @TableId(value = "id")
+    private Long uid;
+
     private Long equipmentId;
     /**
      * 协议名称

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblRule.java

@@ -75,4 +75,6 @@ public class TblRule extends BaseEntity {
      */
     private String expr2;
 
+    private Integer isDelete;
+
 }

+ 6 - 4
ruoyi-system/src/main/java/com/ruoyi/data/domain/bo/TblRuleBo.java

@@ -26,19 +26,19 @@ public class TblRuleBo extends BaseEntity {
     /**
      *
      */
-    @NotNull(message = "不能为空", groups = { EditGroup.class })
+//    @NotNull(message = "不能为空", groups = { EditGroup.class })
     private Long id;
 
     /**
      * 规则编号
      */
-    @NotBlank(message = "规则编号不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "规则编号不能为空", groups = { AddGroup.class, EditGroup.class })
     private String sn;
 
     /**
      * 规则名称
      */
-    @NotBlank(message = "规则名称不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "规则名称不能为空", groups = { AddGroup.class, EditGroup.class })
     private String name;
 
     /**
@@ -68,7 +68,7 @@ public class TblRuleBo extends BaseEntity {
     /**
      * 触发条件值
      */
-    @NotBlank(message = "触发条件值不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "触发条件值不能为空", groups = { AddGroup.class, EditGroup.class })
     private String triggeringCondition;
 
     /**
@@ -119,5 +119,7 @@ public class TblRuleBo extends BaseEntity {
 //    @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
     private String expr2;
 
+    private Integer isDelete;
+
 
 }

+ 5 - 3
ruoyi-system/src/main/java/com/ruoyi/data/domain/vo/TblRuleVo.java

@@ -24,7 +24,7 @@ public class TblRuleVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private Long id;
@@ -84,16 +84,18 @@ public class TblRuleVo implements Serializable {
     private String remark;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr1;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr2;
 
+    private Integer isDelete;
+
 
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/data/mapper/TblEquipmentMqttMapper.java

@@ -16,4 +16,6 @@ import java.util.List;
 public interface TblEquipmentMqttMapper extends BaseMapperPlus<TblEquipmentMqttMapper, TblEquipmentMqtt, TblEquipmentMqttVo> {
 
     List<MqttObj> selectMqttListByDeviceId(MqttObj mqttObj);
+
+    List<MqttObj> selectNoMqttListByDeviceId(MqttObj mqttObj);
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/ITblEquipmentMqttService.java

@@ -49,4 +49,6 @@ public interface ITblEquipmentMqttService {
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     List<MqttObj> getMqttListByDeviceId(MqttObj mqttObj);
+
+    List<MqttObj> selectNoMqttListByDeviceId(MqttObj mqttObj);
 }

+ 6 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/TblEquipmentMqttServiceImpl.java

@@ -112,4 +112,10 @@ public class TblEquipmentMqttServiceImpl implements ITblEquipmentMqttService {
         List<MqttObj> list = baseMapper.selectMqttListByDeviceId(mqttObj);
         return list;
     }
+
+    @Override
+    public List<MqttObj> selectNoMqttListByDeviceId(MqttObj mqttObj){
+        List<MqttObj> list = baseMapper.selectNoMqttListByDeviceId(mqttObj);
+        return list;
+    }
 }

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/TblRuleServiceImpl.java

@@ -71,6 +71,7 @@ public class TblRuleServiceImpl implements ITblRuleService {
         lqw.eq(StringUtils.isNotBlank(bo.getDescription()), TblRule::getDescription, bo.getDescription());
         lqw.eq(StringUtils.isNotBlank(bo.getExpr1()), TblRule::getExpr1, bo.getExpr1());
         lqw.eq(StringUtils.isNotBlank(bo.getExpr2()), TblRule::getExpr2, bo.getExpr2());
+        lqw.eq( TblRule::getIsDelete, 0);
         return lqw;
     }
 

+ 12 - 1
ruoyi-system/src/main/resources/mapper/data/TblEquipmentMqttMapper.xml

@@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <resultMap type="com.ruoyi.data.domain.MqttObj" id="MqttObjResult">
         <result property="id" column="id"/>
+        <result property="uid" column="u_id"/>
         <result property="equipmentId" column="equipment_id"/>
         <result property="protocolName" column="protocol_name"/>
         <result property="protocolDesc" column="protocol_desc"/>
@@ -31,10 +32,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <select id="selectMqttListByDeviceId" parameterType="com.ruoyi.data.domain.MqttObj" resultMap="MqttObjResult">
-          select a.equipment_id as equipmentId,b.* from tbl_equipment_mqtt a left join tbl_mqtt b on a.mqtt_id = b.id
+          select a.id as u_id,a.equipment_id as equipmentId,b.* from tbl_equipment_mqtt a left join tbl_mqtt b on a.mqtt_id = b.id
         <where>
             <if test="equipmentId != null "> and a.equipment_id = #{equipmentId}</if>
         </where>
     </select>
 
+    <select id="selectNoMqttListByDeviceId" parameterType="com.ruoyi.data.domain.MqttObj" resultMap="MqttObjResult">
+        SELECT
+            *
+        FROM
+            tbl_mqtt
+        <where>
+             `status` = 1
+            <if test="equipmentId != null "> and id NOT IN ( SELECT mqtt_id FROM tbl_equipment_mqtt WHERE equipment_id = #{equipmentId} )</if>
+        </where>
+    </select>
 </mapper>

+ 2 - 0
ruoyi-system/src/main/resources/mapper/data/TblRuleMapper.xml

@@ -21,6 +21,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>
         <result property="updateTime" column="update_time"/>
+        <result property="isDelete" column="is_delete"/>
+
     </resultMap>
 
 

+ 62 - 0
ruoyi-ui-vue3/src/api/data/equipmentMqtt.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询【请填写功能名称】列表
+export function listEquipmentMqtt(query) {
+  return request({
+    url: '/data/equipmentMqtt/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询【请填写功能名称】列表
+export function listEquipmentMqttByDeviceId(query) {
+  return request({
+    url: '/data/equipmentMqtt/listByDeviceId',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询【请填写功能名称】详细
+export function getEquipmentMqtt(id) {
+  return request({
+    url: '/data/equipmentMqtt/' + id,
+    method: 'get'
+  })
+}
+
+// 新增【请填写功能名称】
+export function addEquipmentMqtt(data) {
+  return request({
+    url: '/data/equipmentMqtt',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改【请填写功能名称】
+export function updateEquipmentMqtt(data) {
+  return request({
+    url: '/data/equipmentMqtt',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除【请填写功能名称】
+export function delEquipmentMqtt(id) {
+  return request({
+    url: '/data/equipmentMqtt/' + id,
+    method: 'delete'
+  })
+}
+
+// 删除【请填写功能名称】
+export function noListByDeviceId(query) {
+  return request({
+    url: '/data/equipmentMqtt/noListByDeviceId',
+    method: 'get',
+    params: query
+  })
+}

+ 122 - 34
ruoyi-ui-vue3/src/views/device/equipmentdash/add.vue

@@ -3,7 +3,8 @@
     <el-card class="box-card">
       <template #header>
         <div class="card-header">
-          <span>设备台账-新增</span>
+          <span v-show="objId == null">设备台账-新增</span>
+          <span v-show="objId != null">设备台账-修改</span>
           <div>
             <el-button type="warning" @click="">复位</el-button>
             <el-button type="primary" @click="submit()">保存</el-button>
@@ -130,7 +131,7 @@
                 </div>
               </template>
               <div class="content-w" style="min-width: 500px">
-                <el-select v-model="queryParams.tagids" filterable placeholder="Select">
+                <el-select v-model="tagidArry" filterable placeholder="Select" multiple>
                   <el-option v-for="item in tagList" :key="item.id" :label="item.name" :value="item.id" />
                 </el-select>
               </div>
@@ -336,42 +337,79 @@
       </el-row>
     </el-card>
 
-    <el-card class="box-card" style="margin-top: 20px">
+    <el-card class="box-card" style="margin-top: 20px" v-if="objId != null">
       <template #header>
         <div class="card-header">
           <span>Mqtt分发</span>
           <div>
-            <el-button type="primary" plain @click="addMqtt">添加</el-button>
+            <el-button type="primary" plain @click="getnoListByDeviceId">添加</el-button>
           </div>
         </div>
       </template>
       <div>
-        <el-row>
-          <el-col :span="24">
-            <el-table :data="tabledata" border>
-              <el-table-column v-for="item in columns.filter(i => i.visible)" :prop="item.prop"
-                :label="item.label"></el-table-column>
-              <el-table-column label="操作" fixed="right">
-                <template #default="scope">
-                  <el-popconfirm title="解绑该设备?" @confirm="deleterow(scope.row)">
-                    <template #reference>
-                      <el-button link><el-tooltip effect="dark" content="删除"><el-icon>
-                            <Delete />
-                          </el-icon></el-tooltip></el-button>
-                    </template>
-                  </el-popconfirm>
+        <el-table @current-change="handleCurrentChange" highlight-current-row :data="tabledata" ref="tableref" border
+          style="width: 100%">
+          <el-table-column prop="serverAddress" label="连接地址">
+          </el-table-column>
+          <el-table-column prop="account" label="用户名" width="100">
+          </el-table-column>
+          <el-table-column prop="password" label="密码" width="100">
+          </el-table-column>
+
+          <el-table-column prop="uuid" label="客户端ID" width="100">
+          </el-table-column>
+
+          <el-table-column prop="status" label="状态" width="100">
+            <template #default="scope">
+              <span v-if="scope.row.status === 1">
+                <el-tag type="success">启用</el-tag>
+              </span>
+              <span v-else>
+                <el-tag type="danger">禁用</el-tag>
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="remark" label="备注" width="120">
+          </el-table-column>
+          <el-table-column prop="name" label="操作" width="150">
+            <template #default="scope">
+              <el-popconfirm title="确定解绑该设备?" @confirm="dellink(scope.row)">
+                <template #reference>
+                  <el-button link><el-tooltip effect="dark" content="解绑设备"><el-icon>
+                        <Delete />
+                      </el-icon></el-tooltip></el-button>
                 </template>
-              </el-table-column>
-
-            </el-table>
-          </el-col>
-          <!-- <el-col :span="24" style="margin-top: 10px;">
-            <el-pagination style="float: right;" small background layout="prev, pager, next" :total="pagedata.total"
-              :page-size="pagedata.size" :current-page="pagedata.current" @current-change="onchangepage" class="mt-4" />
-          </el-col> -->
-        </el-row>
+              </el-popconfirm>
+            </template>
+          </el-table-column>
+        </el-table>
       </div>
     </el-card>
+
+    <el-dialog v-model="dialogFormVisible" title="Shipping address">
+      <el-table highlight-current-row :data="mqttSelect" @select="selectMqtt" ref="tableref" border style="width: 100%">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="serverAddress" label="连接地址">
+        </el-table-column>
+        <el-table-column prop="account" label="用户名" width="100">
+        </el-table-column>
+        <el-table-column prop="password" label="密码" width="100">
+        </el-table-column>
+
+        <el-table-column prop="uuid" label="客户端ID" width="100">
+        </el-table-column>
+        <el-table-column prop="remark" label="备注" width="120">
+        </el-table-column>
+      </el-table>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogFormVisible = false">取消</el-button>
+          <el-button type="primary" @click="addMqtt">
+            添加
+          </el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -383,6 +421,7 @@ import { listEquipmentTag } from '@/api/data/equipmenttag'
 import { listEquipmentOrganizational } from "@/api/data/equipmentOrganizational"
 import { listEquipment } from "@/api/data/equipment"
 import { addEquipmentSbook, getEquipmentSbook, updateEquipmentSbook } from "@/api/data/equipmentSbook"
+import { listEquipmentMqttByDeviceId, noListByDeviceId, addEquipmentMqtt, delEquipmentMqtt } from "@/api/data/equipmentMqtt"
 
 
 
@@ -416,8 +455,13 @@ const queryParams = ref({
   usefulLife: "",
   changeDate: "",
   supplier: "",
+  dialogFormVisible: true,
 })
 
+const tagidArry = ref([])
+
+const listSelectId = ref([])
+const mqttSelect = ref([])
 
 let objId = route.query.id
 console.log(objId);
@@ -443,12 +487,14 @@ const pagedata = ref({
   current: 1
 });
 
+const dialogFormVisible = ref(false)
 const equipmentList = ref([]);
 const treeList = ref([]);
 const value = ref("1");
 const typeList = ref([]);
 const tagList = ref([]);
 const statusList = ref([])
+const tabledata = ref([])
 const options = ref([
   {
     value: '1',
@@ -488,10 +534,15 @@ const getEquipmentList = () => {
   })
 }
 
+const selectMqtt = (selection, row) => {
+  // listSelect.value = selection;
+  listSelectId.value = selection.map(item => item.id)
+}
+
 const submit = () => {
   queryParams.value.equipmentInfoId = equipmentObj.value.id;
   queryParams.value.equipmentTypeId = equipmentObj.value.equipmentTypeId;
-  console.log(queryParams.value);
+  queryParams.value.tagids = tagidArry.value.join(',');
   if (queryParams.value.id == null) {
     addEquipmentSbook(queryParams.value).then(res => {
       console.log(res);
@@ -507,16 +558,15 @@ const submit = () => {
 
 
 const selectEquipment = (value) => {
-  console.log(value);
+  equipmentObj.value = value
+  // console.log(value);
 }
 
 const getDetail = () => {
   console.log(2);
   getEquipmentSbook(objId).then(res => {
-    console.log(res);
     queryParams.value = res.data
-    console.log(equipmentList.value);
-    console.log(3);
+    tagidArry.value = res.data.tagids.split(',');
     for (var index in equipmentList.value) {
       // console.log(queryParams.value.equipmentInfoId);
       // console.log(queryParams.value.equipmentInfoId);
@@ -527,8 +577,45 @@ const getDetail = () => {
   })
 }
 
-const addMqtt = () =>{
-  
+const addMqtt = () => {
+  console.log(listSelectId.value);
+  for (var index in listSelectId.value) {
+    var obj = {
+      equipmentId: objId,
+      mqttId: listSelectId.value[index]
+    }
+    console.log(obj);
+    addEquipmentMqtt(obj).then(res => {
+      if (res.code == 200) {
+        if (Number(index)+1 == Number(listSelectId.value.length)) {
+          dialogFormVisible.value = false;
+          getlistEquipmentMqttByDeviceId();
+        }
+      }
+    })
+  }
+}
+
+const getlistEquipmentMqttByDeviceId = () => {
+  listEquipmentMqttByDeviceId({ equipmentId: objId }).then(res => {
+    console.log(res);
+    tabledata.value = res.data
+  })
+}
+
+const getnoListByDeviceId = () => {
+  noListByDeviceId({ equipmentId: objId }).then(res => {
+    console.log(res)
+    mqttSelect.value = res.data
+    dialogFormVisible.value = true
+  })
+}
+
+const dellink = (data) => {
+  delEquipmentMqtt(data.uid).then(res => {
+    console.log(res);
+    getlistEquipmentMqttByDeviceId();
+  })
 }
 
 getDictsData("equipment_type", typeList);
@@ -536,6 +623,7 @@ getDictsData("status_type", statusList);
 getlistEquipmentTag();
 getTreedata();
 getEquipmentList();
+getlistEquipmentMqttByDeviceId();
 
 </script>
 

+ 1 - 1
ruoyi-ui-vue3/src/views/device/equipmentdash/index.vue

@@ -78,7 +78,7 @@
 
           <el-row>
             <el-col :span="24" style="padding-left: 10px">
-              <el-table :data="devicetabledata" :border="true">
+              <el-table :data="devicetabledata" :border="true" >
                 <el-table-column type="selection" width="55" />
                 <el-table-column v-for="item in columns.filter(i => i.visible)" :prop="item.prop"
                   :label="item.label"></el-table-column>

+ 248 - 39
ruoyi-ui-vue3/src/views/rules/add.vue

@@ -3,10 +3,11 @@
     <el-card class="box-card">
       <template #header>
         <div class="card-header">
-          <span>规则定义-新增</span>
+          <span v-show="objId == null">规则定义-新增</span>
+          <span v-show="objId != null">规则定义-修改</span>
           <div>
             <el-button type="warning" @click="">复位</el-button>
-            <el-button type="primary" @click="">保存</el-button>
+            <el-button type="primary" @click="saveSensor()">保存</el-button>
             <el-button type="primary" plain @click="router.back();">返回</el-button>
           </div>
         </div>
@@ -24,7 +25,7 @@
 
                 </template>
                 <div class="content-w">
-                  <el-input placeholder="请输入规则编码"/>
+                  <el-input placeholder="请输入规则编码" v-model="ruleParam.sn" />
                 </div>
               </el-descriptions-item>
               <el-descriptions-item>
@@ -34,32 +35,32 @@
                   </div>
                 </template>
                 <div class="content-w">
-                  <el-input placeholder="请输入规则名称"/>
+                  <el-input placeholder="请输入规则名称" v-model="ruleParam.name" />
                 </div>
               </el-descriptions-item>
 
-            <el-descriptions-item>
-              <template #label>
-                <div style="display: inline-block;min-width: 100px;text-align: right">
-                  <span style="color: red">*</span> 触发类型
+              <el-descriptions-item>
+                <template #label>
+                  <div style="display: inline-block;min-width: 100px;text-align: right">
+                    <span style="color: red">*</span> 触发类型
+                  </div>
+                </template>
+                <div class="content-w">
+                  <el-input placeholder="请输入" v-model="ruleParam.type" />
                 </div>
-              </template>
-              <div class="content-w">
-                <el-input placeholder="请输入"/>
-              </div>
-            </el-descriptions-item>
-              <el-descriptions-item >
+              </el-descriptions-item>
+              <el-descriptions-item>
                 <template #label>
                   <div style="display: inline-block;min-width: 100px;text-align: right">
-                    <span style="color: red">*</span> 价值成本单位
+                    <span style="color: red">*</span> 触发条件值
                   </div>
                 </template>
                 <div class="content-w">
-                  <el-input placeholder="请输入"/>
+                  <el-input placeholder="请输入" v-model="ruleParam.triggeringCondition" />
                 </div>
               </el-descriptions-item>
 
-              <el-descriptions-item >
+              <!-- <el-descriptions-item >
 
                 <div class="content-w">
                   <el-input placeholder="请输入"/>
@@ -78,24 +79,73 @@
                     inactive-text="下限"
                   />
                 </div>
+              </el-descriptions-item> -->
+
+              <el-descriptions-item>
+                <template #label>
+                  <div style="display: inline-block;min-width: 100px;text-align: right">
+                    设备
+                  </div>
+                </template>
+                <div class="content-w">
+                  <el-select v-model="ruleParam.equipmentId" value-key="id" filterable placeholder="Select"
+                    @change="selectEquipment">
+                    <el-option v-for="item in deviceList" :key="item.id" :label="item.name" :value="item.id" />
+                  </el-select>
+                </div>
               </el-descriptions-item>
+
+              <el-descriptions-item>
+                <template #label>
+                  <div style="display: inline-block;min-width: 100px;text-align: right">
+                    传感器
+                  </div>
+                </template>
+                <div class="content-w">
+                  <el-select v-model="ruleParam.sensorId" value-key="id" filterable placeholder="Select">
+                    <el-option v-for="item in sensorList" :key="item.id" :label="item.name" :value="item.id" />
+                  </el-select>
+                </div>
+              </el-descriptions-item>
+
             </el-descriptions>
           </el-card>
         </el-col>
         <el-col :span="12" style="padding-right: 5px;margin-top: 10px">
           <el-card>
             <template #header>
-            <div class="card-header">
-              <span>条件</span>
-              <div>
-                <el-button type="primary" plain >添加</el-button>
+              <div class="card-header">
+                <span>条件</span>
+                <div>
+                  <el-button type="primary" plain @click="addFilter()">添加</el-button>
+                </div>
               </div>
-            </div>
             </template>
             <el-table :data="tjdata">
-              <el-table-column label="过滤方式" ></el-table-column>
-              <el-table-column label="过滤算法" ></el-table-column>
-              <el-table-column label="操作" ></el-table-column>
+              <el-table-column label="过滤方式" prop="filterWay"></el-table-column>
+              <el-table-column label="过滤算法" prop="filterAlgorithm"></el-table-column>
+              <el-table-column prop="sn" label="操作">
+                <template #default="scope">
+                  <div>
+                    <el-button link @click="
+                    ">
+                      <el-tooltip effect="dark" content="编辑">
+                        <el-icon @click="goupdate(scope.row)">
+                          <Edit />
+                        </el-icon>
+                      </el-tooltip>
+                    </el-button>
+                    <el-popconfirm title="确定删除该编码?" @confirm="">
+                      <template #reference>
+                        <el-button link><el-tooltip effect="dark" content="删除"><el-icon @click="godelRuleFilter(scope.row)">
+                              <Delete />
+                            </el-icon></el-tooltip></el-button>
+                      </template>
+                    </el-popconfirm>
+                  </div>
+                </template>
+
+              </el-table-column>
             </el-table>
 
           </el-card>
@@ -103,43 +153,202 @@
         <el-col :span="12" style="padding-left: 5px;margin-top: 10px">
           <el-card>
             <template #header>
-            <div class="card-header">
-              <span>执行</span>
-              <div>
-                <el-button type="primary" plain >添加</el-button>
+              <div class="card-header">
+                <span>执行</span>
+                <div>
+                  <el-button type="primary" plain>添加</el-button>
+                </div>
               </div>
-            </div>
             </template>
             <el-table :data="zxdata">
-              <el-table-column label="设备" ></el-table-column>
-              <el-table-column label="执行动作" ></el-table-column>
-              <el-table-column label="操作" ></el-table-column>
+              <el-table-column label="设备"></el-table-column>
+              <el-table-column label="执行动作"></el-table-column>
+              <el-table-column label="操作"></el-table-column>
             </el-table>
 
           </el-card>
         </el-col>
       </el-row>
-
-
-
-
     </el-card>
 
+    <el-dialog v-model="dialogFormVisible" :title="dialogTitle">
+      <el-form :model="ruleFilterParam">
+        <el-form-item label="过滤方式" label-width="140px">
+          <el-input v-model="ruleFilterParam.filterWay" placeholder="请输入过滤方式" />
+        </el-form-item>
+        <el-form-item label="上限" label-width="140px">
+          <el-input v-model="ruleFilterParam.upperLimit" placeholder="请输入上限" />
+        </el-form-item>
+        <el-form-item label="下限" label-width="140px">
+          <el-input v-model="ruleFilterParam.lowerLimit" placeholder="请输入下限" />
+        </el-form-item>
+        <el-form-item label="过滤算法" label-width="140px">
+          <el-input v-model="ruleFilterParam.filterAlgorithm" placeholder="请输入过滤算法" />
+        </el-form-item>
+        <el-form-item label="过滤公式" label-width="140px">
+          <el-input v-model="ruleFilterParam.formula" placeholder="请输入公式" />
+        </el-form-item>
+      </el-form>
 
+
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogFormVisible = false">取消</el-button>
+          <el-button type="primary" @click="saveRuleFilter()">
+            确认
+          </el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup lang="ts" name="Units">
-import {ref} from "vue";
-import {useRoute, useRouter} from "vue-router";
+import { ref } from "vue";
+import { useRoute, useRouter } from "vue-router";
+import { listEquipmentSbook } from "@/api/data/equipmentSbook";
+import { listSensor, addSensor } from "@/api/data/sensor"
+import { addRule, getRule, updateRule } from "@/api/data/rule"
+import { addRuleFilter, getRuleFilter, updateRuleFilter, listRuleFilter,delRuleFilter } from "@/api/data/ruleFilter"
 
 
 const route = useRoute();
 const router = useRouter();
 
+let objId = route.query.id
+
 const tjdata = ref([]);
 const zxdata = ref([]);
+const deviceList = ref([]);
+const sensorList = ref([]);
+const dialogFormVisible = ref(false)
+const dialogTitle = ref("添加条件")
+const ruleFilterParam = ref({
+  id: null,
+  ruleId: null,
+  filterWay: '',
+  upperLimit: '',
+  lowerLimit: '',
+  filterAlgorithm: '',
+  formula: ''
+})
+
+const ruleParam = ref({
+  id: "",
+  sn: "",
+  name: "",
+  type: "",
+  equipmentId: "",
+  sensorId: "",
+  time: "",
+  triggeringCondition: "",
+  description: "",
+  remark: ""
+})
+const getEquipmentSbookList = () => {
+  listEquipmentSbook({ pageSize: 10000 }).then(res => {
+    deviceList.value = res.rows
+    getDetail();
+  })
+}
+
+const selectEquipment = (value) => {
+  console.log(value);
+  var obj = {
+    deviceId: value,
+    pageSize: 10000
+  }
+  listSensor(obj).then(res => {
+    console.log(res);
+    sensorList.value = res.rows
+  })
+}
+
+const saveSensor = () => {
+  if (objId == null) {
+    console.log(ruleParam.value);
+    addRule(ruleParam.value).then(res => {
+      console.log(res);
+      if (res.code == 200) {
+        router.back()
+      }
+    })
+  } else {
+    updateRule(ruleParam.value).then(res => {
+      console.log(res);
+      if (res.code == 200) {
+        router.back()
+      }
+    })
+  }
+}
+
+const getDetail = () => {
+  getRule(objId).then(res => {
+    console.log(res);
+    ruleParam.value = res.data;
+    selectEquipment(res.data.equipmentId);
+  })
+}
+
+const saveRuleFilter = () => {
+  ruleFilterParam.value.ruleId = objId;
+  console.log(ruleFilterParam.value.id);
+  if (ruleFilterParam.value.id != null) {
+    updateRuleFilter(ruleFilterParam.value).then(res => {
+      if (res.code == 200) {
+        getFilterList();
+        dialogFormVisible.value = false;
+      }
+    })
+  } else {
+    addRuleFilter(ruleFilterParam.value).then(res => {
+      if (res.code == 200) {
+        getFilterList();
+        dialogFormVisible.value = false;
+      }
+    })
+  }
+}
+
+const goupdate = (item) => {
+  console.log(item)
+  getRuleFilter(item.id).then(res => {
+    ruleFilterParam.value = res.data
+    dialogFormVisible.value = true;
+  })
+}
+
+
+const addFilter = () => {
+  ruleFilterParam.value = {
+    id: null,
+    ruleId: null,
+    filterWay: '',
+    upperLimit: '',
+    lowerLimit: '',
+    filterAlgorithm: '',
+    formula: ''
+  }
+  dialogFormVisible.value = true
+}
+
+const getFilterList = () => {
+  listRuleFilter({ ruleId: objId, pageSize: 10000 }).then(res => {
+    tjdata.value = res.rows
+  })
+}
+
+const godelRuleFilter = (item) =>{
+  delRuleFilter(item.id).then(res=>{
+       if(res.code == 200){
+        getFilterList();
+       }
+  })
+}
 
+getEquipmentSbookList();
+getFilterList();
 
 </script>
 

+ 66 - 56
ruoyi-ui-vue3/src/views/rules/index.vue

@@ -3,24 +3,19 @@
     <el-card class="box-card">
       <div style="display: flex; flex-direction: row; justify-content: space-between">
         <div>
-          <div
-            style="
+          <div style="
                   display: flex;
                   flex-direction: row;
                   flex-wrap: nowrap;
                   align-items: center;
-                "
-          >
+                ">
             <div style="font-size: 12px; width: 80px">规则名称:</div>
-            <el-input
-              v-model="searchform.rulename"
-              placeholder="规则名称"
-            ></el-input>
+            <el-input v-model="searchform.name" placeholder="规则名称"></el-input>
           </div>
         </div>
         <div>
-          <el-button type="primary" plain>重置</el-button>
-          <el-button type="primary">搜索</el-button>
+          <el-button type="primary" plain @click="requery()">重置</el-button>
+          <el-button type="primary" @click="getalldata()">搜索</el-button>
         </div>
       </div>
     </el-card>
@@ -32,7 +27,7 @@
           <div>
             <el-button type="primary" @click="goadd">添加</el-button>
             <el-button type="danger">批量删除</el-button>
-            <el-button type="primary" plain @click="ziduanshow=true">显示字段</el-button>
+            <el-button type="primary" plain @click="ziduanshow = true">显示字段</el-button>
           </div>
         </div>
       </template>
@@ -41,38 +36,32 @@
           <el-col :span="24">
             <el-table :data="tabledata" border>
               <el-table-column type="selection" width="55" />
-              <el-table-column v-for="item in cloumdata.filter(i=>i.visible)" :prop="item.prop" :label="item.label" ></el-table-column>
+              <el-table-column v-for="item in cloumdata.filter(i => i.visible)" :prop="item.prop"
+                :label="item.label"></el-table-column>
               <el-table-column prop="sn" label="操作">
                 <template #default="scope">
                   <div>
-                    <el-button
-                      link
-                      @click="
-                    "
-                    >
+                    <el-button link @click="
+                    ">
                       <el-tooltip effect="dark" content="编辑">
                         <el-icon>
                           <Memo />
                         </el-icon>
                       </el-tooltip>
                     </el-button>
-                    <el-button
-                      link
-                      @click="
-                    "
-                    >
+                    <el-button link @click="
+                    ">
                       <el-tooltip effect="dark" content="编辑">
-                        <el-icon>
+                        <el-icon @click="goupdate(scope.row)">
                           <Edit />
                         </el-icon>
                       </el-tooltip>
                     </el-button>
                     <el-popconfirm title="确定删除该编码?" @confirm="">
                       <template #reference>
-                        <el-button link
-                        ><el-tooltip effect="dark" content="删除"
-                        ><el-icon><Delete /></el-icon></el-tooltip
-                        ></el-button>
+                        <el-button link><el-tooltip effect="dark" content="删除"><el-icon @click="delUpdateRule(scope.row)">
+                              <Delete />
+                            </el-icon></el-tooltip></el-button>
                       </template>
                     </el-popconfirm>
                   </div>
@@ -82,14 +71,10 @@
 
             </el-table>
           </el-col>
+
           <el-col :span="24" style="margin-top: 10px;">
-            <el-pagination style="float: right;"
-                           small
-                           background
-                           layout="prev, pager, next"
-                           :total="50"
-                           class="mt-4"
-            />
+            <el-pagination style="float: right;" small background layout="prev, pager, next" :total="pagedata.total"
+              :page-size="pagedata.size" :current-page="pagedata.current" @current-change="onchangepage" class="mt-4" />
           </el-col>
 
         </el-row>
@@ -103,12 +88,7 @@
     </el-card>
 
 
-    <el-dialog
-      title="字段显示"
-      v-model="ziduanshow"
-      width="50%"
-      @close="ziduanshow = false"
-    >
+    <el-dialog title="字段显示" v-model="ziduanshow" width="50%" @close="ziduanshow = false">
       <div style="display: flex;flex-wrap: wrap;align-content: center;justify-content: center;align-items: center;">
         <el-checkbox v-for="item in cloumdata" v-model="item.visible" :label="item.label" size="large" />
       </div>
@@ -119,45 +99,75 @@
 </template>
 
 <script setup lang="ts" name="Units">
-import {onMounted, ref} from "vue";
-import {useRoute, useRouter} from "vue-router";
-import { listRule,addRule,updateRule,delRule,getRule } from "@/api/data/rule"
+import { onMounted, ref } from "vue";
+import { useRoute, useRouter } from "vue-router";
+import { listRule, addRule, updateRule, delRule, getRule } from "@/api/data/rule"
 
 import data from "@/views/system/dict/data.vue";
 
 const ziduanshow = ref(false);
 const cloumdata = ref([
-  {label: '规则编号', prop:'sn',visible:true},
-  {label: '规则名称', prop:'name',visible:true},
-  {label: '触发类型', prop:'type',visible:true},
-  {label: '设备', prop:'equipmentId',visible:true},
-  {label: '传感器', prop:'sensorId',visible:true},
-  {label: '触发条件值', prop:'triggeringCondition',visible:true},
-  {label: '描述', prop:'description',visible:true},
+  { label: '规则编号', prop: 'sn', visible: true },
+  { label: '规则名称', prop: 'name', visible: true },
+  { label: '触发类型', prop: 'type', visible: true },
+  { label: '设备', prop: 'equipmentId', visible: true },
+  { label: '传感器', prop: 'sensorId', visible: true },
+  { label: '触发条件值', prop: 'triggeringCondition', visible: true },
+  { label: '描述', prop: 'description', visible: true },
 ]);
 
 const route = useRoute();
 const router = useRouter();
 
-const searchform = ref({rulename:""})
+const searchform = ref({ name: "" })
 const tabledata = ref([])
 
-const goadd = ()=>{
+const goadd = () => {
   router.push("/rules/add")
 }
 
+const goupdate = (item) => {
+  router.push({ path: '/rules/add', query: { id: item.id } })
+}
 
-const getalldata=()=>{
-  listRule({}).then(res=>{
-    tabledata.value=res.rows
+const pagedata = ref({
+  total: 0,
+  size: 10,
+  current: 1
+});
+
+const getalldata = () => {
+  listRule({ ...searchform.value, pageSize: pagedata.value.size, pageNum: pagedata.value.current }).then(res => {
+    tabledata.value = res.rows
   })
 }
 
-onMounted(()=>{
+onMounted(() => {
   getalldata()
 })
 
+const onchangepage = (page) => {
+  pagedata.value.current = page;
+  getalldata();
+}
 
+const requery = () => {
+  searchform.value = { name: "" };
+  getalldata();
+}
+
+const delUpdateRule = (item) => {
+  var obj = {
+    id: item.id,
+    isDelete: 1
+  }
+  updateRule(obj).then(res=>{
+    console.log(res)
+    if(res.code == 200){
+      getalldata();
+    }
+  })
+}
 
 </script>