liwei19941102 2 роки тому
батько
коміт
6b45501e22

+ 4 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblVideo.java

@@ -68,12 +68,14 @@ public class TblVideo extends BaseEntity {
      */
     private String remark;
     /**
-     * 
+     *
      */
     private String expr1;
     /**
-     * 
+     *
      */
     private String expr2;
 
+    private Integer isDelete;
+
 }

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblVideoDetail.java

@@ -23,7 +23,7 @@ public class TblVideoDetail extends BaseEntity {
     private static final long serialVersionUID=1L;
 
     /**
-     * 
+     *
      */
     @TableId(value = "id")
     private Long id;

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

@@ -125,5 +125,7 @@ public class TblVideoBo extends BaseEntity {
 //    @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
     private String expr2;
 
+    private Integer isDelete;
+
 
 }

+ 4 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/vo/TblVideoVo.java

@@ -88,16 +88,18 @@ public class TblVideoVo implements Serializable {
     private String remark;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr1;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr2;
 
+    private Integer isDelete;
+
 
 }

+ 39 - 21
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/MqttServiceImpl.java

@@ -29,6 +29,10 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -81,6 +85,9 @@ public class MqttServiceImpl implements MqttService {
 
         //数据分发到websocket 前端调用
         websocketService.sendMessageAll(mqttStr);
+        MqttSensorDataBo dataBo = JSONUtil.toBean(mqttStr, MqttSensorDataBo.class);
+        TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
+        filterData(dataBo);
         //数据保存到数据库
         if(saveAndForward) {
             // 解析数据 异步线程执行
@@ -238,26 +245,37 @@ public class MqttServiceImpl implements MqttService {
         tblRuleFilterBo.setRuleId(Long.toString(ruleId));
         List<TblRuleFilterVo> tblRuleFilterVoList = iTblRuleFilterService.queryList(tblRuleFilterBo);
         tblRuleFilterVoList.forEach(i->{
-
-        });
-    }
-
-
-    public void updateNowRecord(TblSensorRecordBo bo){
-           TblSensorRecordBo tblSensorRecordBo = new TblSensorRecordBo();
-           tblSensorRecordBo.setSensorId(bo.getSensorId());
-           LambdaQueryWrapper<TblSensorRecord> lqw = buildSensorRecordWrapper(bo);
-           List<TblSensorRecordVo> tblSensorRecordVoList = tblSensorRecordMapper.selectVoList(lqw);
-            if(tblSensorRecordVoList.size() > 0 ){
-                bo.setId(tblSensorRecordVoList.get(0).getId());
-                TblSensorRecord update = BeanUtil.toBean(bo, TblSensorRecord.class);
-                validEntityBeforeSave(update);
-                tblSensorRecordMapper.updateById(update);
-            }else{
-                TblSensorRecord add = BeanUtil.toBean(bo, TblSensorRecord.class);
-                validEntityBeforeSave(add);
-                tblSensorRecordMapper.insert(add);
-            }
+            String value = bo.getValue();
+              if(StringUtils.isNotBlank(i.getFormula())){
+                  try {
+                      ScriptEngineManager manager = new ScriptEngineManager();
+                      ScriptEngine se = manager.getEngineByName("javascript");
+                      String script = "function format(data) { return "+i.getFormula()+" ; }";
+                      se.eval(script);
+                      Invocable inv = (Invocable) se;
+                      value = (String) inv.invokeFunction("format", value );
+                      System.out.println(value);
+                  } catch (Exception e) {
+                      System.out.println("表达式runtime错误:" + e.getMessage());
+                  }
+              }
+              Boolean isFilter = false;
+              if(StringUtils.isNotBlank(i.getFilterAlgorithm())){
+                      ScriptEngineManager manager = new ScriptEngineManager();
+                      ScriptEngine se = manager.getEngineByName("javascript");
+                      String script = "function isFilter(data,up,down) { return "+i.getFilterAlgorithm()+" ; }";
+                      try {
+                          se.eval(script);
+                          Invocable inv = (Invocable) se;
+                          isFilter = (Boolean) inv.invokeFunction("isFilter", value,i.getUpperLimit(),i.getLowerLimit() );
+                          System.out.println(isFilter);
+                      } catch (ScriptException e) {
+                          System.out.println("表达式runtime错误:" + e.getMessage());
+                      } catch (NoSuchMethodException e) {
+                          System.out.println("表达式runtime错误:" + e.getMessage());
+                      }
+              }
+                });
     }
 
     private void validEntityBeforeSave(TblSensorRecord entity){
@@ -305,7 +323,7 @@ public class MqttServiceImpl implements MqttService {
         lqw.eq(StringUtils.isNotBlank(bo.getAccount()), TblMqtt::getAccount, bo.getAccount());
         lqw.eq(StringUtils.isNotBlank(bo.getPassword()), TblMqtt::getPassword, bo.getPassword());
         lqw.eq(StringUtils.isNotBlank(bo.getUuid()), TblMqtt::getUuid, bo.getUuid());
-//        lqw.eq(bo.getStatus() != null, TblMqtt::getStatus, bo.getStatus());
+        lqw.eq(bo.getStatus() != null, TblMqtt::getStatus, bo.getStatus());
         return lqw;
     }
 

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

@@ -72,6 +72,7 @@ public class TblVideoServiceImpl implements ITblVideoService {
         lqw.eq(StringUtils.isNotBlank(bo.getSerialNumber()), TblVideo::getSerialNumber, bo.getSerialNumber());
         lqw.eq(StringUtils.isNotBlank(bo.getExpr1()), TblVideo::getExpr1, bo.getExpr1());
         lqw.eq(StringUtils.isNotBlank(bo.getExpr2()), TblVideo::getExpr2, bo.getExpr2());
+        lqw.eq(bo.getIsDelete() != null, TblVideo::getIsDelete, 0);
         return lqw;
     }
 

+ 1 - 0
ruoyi-system/src/main/resources/mapper/data/TblVideoMapper.xml

@@ -22,6 +22,7 @@ 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>
 
 

+ 13 - 0
ruoyi-ui-vue3/src/router/index.js

@@ -85,6 +85,19 @@ export const constantRoutes = [
     ],
   },
   {
+    path: "/device/camera/add",
+    hidden: true,
+    component: Layout,
+    children: [
+      {
+        path: "",
+        component: () => import("@/views/device/camera/add"),
+        name: "CameraAdd",
+        meta: { title: "摄像头新增", activeMenu: "/device/camera" },
+      },
+    ],
+  },
+  {
     path: "/device/camera/detail",
     hidden: true,
     component: Layout,

+ 340 - 0
ruoyi-ui-vue3/src/views/device/camera/add.vue

@@ -0,0 +1,340 @@
+<template>
+    <div style="padding: 10px 15px">
+        <el-card class="box-card">
+            <template #header>
+                <div class="card-header">
+                    <span>主设备信息-新增</span>
+                </div>
+            </template>
+            <el-row>
+                <el-col :span="24">
+                    <el-descriptions :column="4">
+                        <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 v-model="vidoeParams.name" placeholder="请输入设备名称" />
+                            </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> 平台编码
+                                </div>
+
+                            </template>
+                            <div class="content-w">
+                                <el-input v-model="vidoeParams.sn" placeholder="请输入平台编码" />
+                            </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> 主设备类型
+                                </div>
+
+                            </template>
+                            <div class="content-w">
+                                <el-input v-model="vidoeParams.type" placeholder="请输入主设备类型" />
+                            </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> 主设备协议类型
+                                </div>
+
+                            </template>
+                            <div class="content-w">
+                                <el-input v-model="vidoeParams.protocolType" placeholder="请输入主设备协议类型" />
+                            </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-input v-model="vidoeParams.connectCode" placeholder="请输入设备互联网编码" />
+                            </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-input v-model="vidoeParams.model" placeholder="请输入设备型号" />
+                            </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-input v-model="vidoeParams.videoFormat" placeholder="请输入设备制式" />
+                            </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-input v-model="vidoeParams.vendorType" placeholder="请输入设备提供商类型" />
+                            </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-input v-model="vidoeParams.serialNumber" placeholder="请输入序列号" />
+                            </div>
+                        </el-descriptions-item>
+                    </el-descriptions>
+                </el-col>
+            </el-row>
+
+        </el-card>
+        <el-card class="box-card" style="margin-top: 10px">
+            <template #header>
+                <div class="card-header">
+                    <span>视频设备</span>
+                    <div>
+                        <el-button type="primary" plain @click="openAddVideoDetail">添加</el-button>
+                    </div>
+                </div>
+            </template>
+            <el-row>
+                <el-col :span="24">
+                    <el-table :data="tableData" border>
+                        <el-table-column width="180" prop="videoChannel" label="视频输入通道号"></el-table-column>
+                        <el-table-column width="180" prop="cameraCode" label="摄像机编码"></el-table-column>
+                        <el-table-column prop="cameraName" label="摄像机名称"></el-table-column>
+                        <el-table-column prop="cameraType" label="摄像机类型"></el-table-column>
+                        <el-table-column prop="longitude" label="纬度"></el-table-column>
+                        <el-table-column prop="latitude" label="经度"></el-table-column>
+                        <el-table-column prop="height" label="摄像机安装高度"></el-table-column>
+                        <el-table-column prop="voiceOutCode" label="摄像机绑定音频通道"></el-table-column>
+                        <el-table-column prop="isSupportBoardcast" label="是否支持组播"></el-table-column>
+                        <el-table-column label="操作">
+                            <template #default="scope">
+                                <div>
+                                    <el-button link @click="openUpdateVideoDetail(scope.row)">
+                                        <el-tooltip effect="dark" content="修改">
+                                            <el-icon>
+                                                <Memo />
+                                            </el-icon>
+                                        </el-tooltip>
+                                    </el-button>
+                                    <el-popconfirm title="确定删除该标签?">
+                                        <template #reference>
+                                            <el-button link><el-tooltip effect="dark" content="删除"><el-icon>
+                                                        <Delete />
+                                                    </el-icon></el-tooltip></el-button>
+                                        </template>
+                                    </el-popconfirm>
+                                </div>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </el-col>
+            </el-row>
+
+        </el-card>
+
+        <el-dialog v-model="dialogFormVisible" :title="dialogTitle">
+            <el-form :model="vidoeDeTailParams">
+                <el-form-item label="视频输入通道号" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.videoChannel" placeholder="请输入视频输入通道号" />
+                </el-form-item>
+                <el-form-item label="摄像机编码" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.cameraCode" placeholder="请输入摄像机编码" />
+                </el-form-item>
+                <el-form-item label="摄像机名称" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.cameraName" placeholder="请输入摄像机名称" />
+                </el-form-item>
+                <el-form-item label="摄像机类型" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.cameraType" placeholder="请输入摄像机类型" />
+                </el-form-item>
+                <el-form-item label="摄像机名称" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.cameraLocationDesc" placeholder="请输入摄像机名称" />
+                </el-form-item>
+                <el-form-item label="纬度" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.longitude" placeholder="请输入纬度" />
+                </el-form-item>
+                <el-form-item label="经度" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.latitude" placeholder="请输入经度" />
+                </el-form-item>
+                <el-form-item label="摄像机安装高度" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.height" placeholder="请输入摄像机安装高度" />
+                </el-form-item>
+                <el-form-item label="是否支持组播" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.isSupportBoardcast" placeholder="请输入是否支持组播" />
+                </el-form-item>
+                <el-form-item label="摄像机绑定音频通道" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.voiceOutCode" placeholder="摄像机绑定音频通道" />
+                </el-form-item>
+                <el-form-item label="备注" label-width="140px">
+                    <el-input v-model="vidoeDeTailParams.remark" placeholder="请输入备注" />
+                </el-form-item>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="dialogFormVisible = false">取消</el-button>
+                    <el-button type="primary" @click="saveVideoDetail()">
+                        确认
+                    </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 { listVideo, getVideo, delVideo, addVideo, updateVideo } from "@/api/data/video";
+import { listVideoDetail, getVideoDetail, delVideoDetail, addVideoDetail, updateVideoDetail } from "@/api/data/videoDetail";
+
+const route = useRoute();
+const router = useRouter();
+
+const { proxy } = getCurrentInstance();
+
+const tableData = ref([]);
+
+const dialogTitle = ref("新增");
+
+const dialogFormVisible = ref(false);
+
+const vidoeParams = ref({
+    id: null,
+    name: "",
+    sn: "",
+    type: "",
+    protocolType: '',
+    connectCode: "",
+    model: "",
+    videoFormat: "",
+    vendorType: '',
+    serialNumber: ''
+})
+
+const vidoeDeTailParams = ref({
+    id: null,
+    videoChannel: "",
+    cameraCode: "",
+    cameraName: "",
+    cameraType: '',
+    connectCode: "",
+    cameraLocationDesc: "",
+    longitude: "",
+    latitude: '',
+    height: '',
+    voiceOutCode: '',
+    isSupportBoardcast: "",
+    remark: '',
+    videoId: ''
+})
+
+let objId = route.query.id
+
+const getVideoData = () => {
+    getVideo(objId).then(res => {
+        if (res.code == 200) {
+            vidoeParams.value = res.data
+        }
+    })
+}
+
+if (objId != null) {
+    getVideoData();
+}
+
+const getVideoDetailList = () => {
+    listVideoDetail({ videoId: objId }).then(res => {
+        console.log(res);
+        if (res.code == 200) {
+            tableData.value = res.rows
+        }
+    })
+}
+
+const openAddVideoDetail = () => {
+    dialogFormVisible.value = true
+}
+
+const openUpdateVideoDetail = () => {
+    getVideoDetail().then(res => {
+        
+    })
+    dialogFormVisible.value = true
+}
+
+const saveVideoDetail = () => {
+    if (vidoeDeTailParams.value.id != null) {
+        
+    } else {
+        vidoeDeTailParams.value.videoId = objId;
+        addVideoDetail(vidoeDeTailParams.value).then(res => {
+            if (res.code == 200) {
+                dialogFormVisible.value = false
+            }
+        })
+    }
+}
+
+const goUpdate = (item) =>{
+
+}
+
+if (objId != null) {
+    getVideoDetailList();
+}
+
+</script>
+  
+<style lang="scss" scoped>
+.card-header {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+}
+
+:deep(.mylabel) {
+    font-size: 15px;
+    color: #000;
+    font-weight: 800 !important;
+}
+
+.content-w {
+    display: inline-flex;
+    max-width: 160px;
+}
+</style>
+  

+ 82 - 68
ruoyi-ui-vue3/src/views/device/camera/index.vue

@@ -6,16 +6,11 @@
           <template #header>
             <div class="card-header">
               <span>视频设备</span>
-            </div></template
-          >
+            </div>
+          </template>
           <div class="tree">
-            <LayTree
-              :data="data"
-              :tail-node-icon="false"
-              :onlyIconControl="true"
-              v-model:selectedKey="selectedKey"
-              @node-click="handleClick"
-            >
+            <LayTree :data="data" :tail-node-icon="false" :onlyIconControl="true" v-model:selectedKey="selectedKey"
+              @node-click="handleClick">
             </LayTree>
           </div>
         </el-card>
@@ -24,78 +19,72 @@
         <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.devicename"
-                  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" @click="getVideoList">搜索</el-button>
             </div>
           </div>
         </el-card>
 
         <el-card class="box-card" style="margin-top: 10px;">
-             <template #header>
+          <template #header>
             <div class="card-header">
               <span>主要设备</span>
-              <el-button type="warning">同步</el-button>
-            </div></template>
-
-            <el-row>
-        <el-col :span="24" style="padding-left: 10px">
-          <el-table :data="devicetabledata" :border="true">
-            <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="操作">
-              <template #default="scope">
-                <div>
-                  <el-button link @click="godetail">
-                    <el-tooltip effect="dark" content="详情">
-                      <el-icon>
-                        <Memo />
-                      </el-icon>
-                    </el-tooltip>
-                  </el-button>
-                  <el-popconfirm title="确定删除该标签?">
-                    <template #reference>
-                      <el-button link
-                        ><el-tooltip effect="dark" content="删除"
-                          ><el-icon><Delete /></el-icon></el-tooltip
-                      ></el-button>
-                    </template>
-                  </el-popconfirm>
-                </div>
-              </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="50"
-            class="mt-4"
-          />
-        </el-col>
-      </el-row>
+              <div>
+                <el-button type="primary" @click="goAdd()">添加</el-button>
+                <el-button type="warning">同步</el-button>
+              </div>
+            </div>
+          </template>
+
+          <el-row>
+            <el-col :span="24" style="padding-left: 10px">
+              <el-table :data="devicetabledata" :border="true">
+                <el-table-column label="设备名称" prop="name"></el-table-column>
+                <el-table-column label="平台编码" prop="sn"></el-table-column>
+                <el-table-column label="设备类型" prop="type"></el-table-column>
+                <el-table-column label="主要设备协议类型" prop="protocolType"></el-table-column>
+                <el-table-column label="设备互联编码" prop="connectCode"></el-table-column>
+                <el-table-column label="设备型号" prop="model"></el-table-column>
+                <el-table-column label="操作">
+                  <template #default="scope">
+                    <div>
+                      <el-button link @click="goUpdate(scope.row)">
+                        <el-tooltip effect="dark" content="修改">
+                          <el-icon>
+                            <Memo />
+                          </el-icon>
+                        </el-tooltip>
+                      </el-button>
+                      <el-popconfirm title="确定删除该标签?">
+                        <template #reference>
+                          <el-button link><el-tooltip effect="dark" content="删除"><el-icon>
+                                <Delete />
+                              </el-icon></el-tooltip></el-button>
+                        </template>
+                      </el-popconfirm>
+                    </div>
+                  </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-card>
       </el-col>
     </el-row>
@@ -104,9 +93,10 @@
 
 <script setup lang="ts" name="Units">
 import { ref } from "vue";
-import { useRoute,useRouter } from "vue-router";
+import { useRoute, useRouter } from "vue-router";
 import { LayTree } from "@layui/layui-vue";
 import "@layui/layui-vue/lib/index.css";
+import { listVideo, getVideo, delVideo, addVideo, updateVideo } from "@/api/data/video";
 
 
 const route = useRoute();
@@ -152,15 +142,23 @@ const data = ref([
   },
 ]);
 
-
+const pagedata = ref({
+  total: 0,
+  size: 10,
+  current: 1
+});
 
 
 const devicetabledata = ref([1]);
 
 const searchform = ref({
-  devicename: "",
+  name: "",
 });
 
+const onchangepage = (page) => {
+  pagedata.value.current = page;
+  getVideoList();
+}
 
 const godetail = () => {
 
@@ -169,7 +167,21 @@ const godetail = () => {
 
 }
 
+const getVideoList = () => {
+  listVideo({ ...searchform.value, pageSize: pagedata.value.size, pageNum: pagedata.value.current }).then(res => {
+    devicetabledata.value = res.rows
+  })
+}
+
+const goAdd = () =>{
+  router.push("/device/camera/add")
+}
 
+const goUpdate = (item) =>{
+  router.push({ path: '/device/camera/add', query: { id: item.id } })
+}
+
+getVideoList();
 </script>
 
 <style></style>
@@ -180,7 +192,9 @@ const godetail = () => {
   flex-direction: row;
   justify-content: space-between;
 }
+
 .tree {
+
   *,
   *:before,
   *:after {

+ 3 - 1
ruoyi-ui-vue3/src/views/rules/add.vue

@@ -316,7 +316,9 @@ const ruleParam = ref({
 const getEquipmentSbookList = () => {
   listEquipmentSbook({ pageSize: 10000 }).then(res => {
     deviceList.value = res.rows
-    getDetail();
+    if(objId != null){
+      getDetail();
+    }
   })
 }