From 51faf3e9c3c613e7fb12db6c88356946f2429e0c Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期五, 12 十二月 2025 17:35:30 +0800
Subject: [PATCH] 调整安防视频页面及逻辑

---
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java                                |   10 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml                        |  144 +++--
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultSnapServiceImpl.java   |   19 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraPtzType.java               |   33 +
 fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SecurityController.java |   75 ++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiSnapReq.java               |   97 ++++
 fzzy-igdss-web/src/main/resources/templates/security/video-list-dept.html             |  355 ++++++++++++++
 fzzy-igdss-web/src/main/resources/static/security/video-list-dept.js                  |   61 ++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraData.java            |   25 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/AbstractApiCameraService.java      |   47 +
 fzzy-igdss-web/src/main/resources/static/security/video-control.js                    |   77 +++
 fzzy-igdss-web/src/main/resources/static/security/video-list.css                      |    6 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPtzServiceImpl.java    |   19 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPlayServiceImpl.java   |   19 
 /dev/null                                                                             |  236 ---------
 fzzy-igdss-web/src/main/resources/static/security/video-aerial-dept.js                |    0 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java                   |   10 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraResp.java            |    3 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Camera.java                        |    4 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraService.java              |   74 +++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraManager.java              |   47 +
 fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraSnapType.java              |   41 +
 fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/inout/InoutApiController.java    |    1 
 fzzy-igdss-web/src/main/resources/templates/security/video-aerial-dept.html           |    2 
 24 files changed, 1,083 insertions(+), 322 deletions(-)

diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/AbstractApiCameraService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/AbstractApiCameraService.java
new file mode 100644
index 0000000..caf491e
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/AbstractApiCameraService.java
@@ -0,0 +1,47 @@
+package com.fzzy.igds.camera;
+
+import com.fzzy.igds.camera.data.ApiCameraData;
+import com.fzzy.igds.camera.data.ApiCameraResp;
+import com.fzzy.igds.camera.data.ApiSnapReq;
+import com.fzzy.igds.domain.Camera;
+import lombok.extern.slf4j.Slf4j;
+import java.util.List;
+
+/**
+ * @Description 鎺ュ彛鎶借薄瀹炵幇绫伙紝鎶借薄瀹炵幇绫伙紝鎻愪緵榛樿瀹炵幇锛屽叿浣撲笟鍔″疄鐜扮户鎵胯鎶借薄绫伙紝骞跺疄鐜版娊璞℃柟娉�
+ * @Author CZT
+ * @Date 2025/12/11 10:10
+ */
+@Slf4j
+public abstract class AbstractApiCameraService implements ApiCameraService {
+
+    @Override
+    public ApiCameraResp getPlayAddr(ApiCameraData apiCameraDto) {
+        return new ApiCameraResp(ApiCameraResp.CODE_SUCCESS, "褰撳墠鍗忚鏃犻渶鎵ц褰撳墠鍗忚");
+    }
+
+    @Override
+    public ApiCameraResp ptzMedia(ApiCameraData apiCameraDto) {
+        return new ApiCameraResp(ApiCameraResp.CODE_SUCCESS, "褰撳墠鍗忚鏃犻渶鎵ц褰撳墠鍗忚");
+    }
+
+    @Override
+    public ApiCameraResp ptzPreset(ApiCameraData apiCameraDto) {
+        return new ApiCameraResp(ApiCameraResp.CODE_SUCCESS, "褰撳墠鍗忚鏃犻渶鎵ц褰撳墠鍗忚");
+    }
+
+    @Override
+    public ApiCameraResp keepAlive(ApiCameraData apiCameraDto) {
+        return new ApiCameraResp(ApiCameraResp.CODE_SUCCESS, "褰撳墠鍗忚鏃犻渶鎵ц褰撳墠鍗忚");
+    }
+
+    @Override
+    public List<Camera> searchCamera(ApiCameraData apiCameraDto) {
+        return null;
+    }
+
+    @Override
+    public ApiCameraResp snapImg(ApiSnapReq apiCameraDto) {
+        return new ApiCameraResp(ApiCameraResp.CODE_SUCCESS, "褰撳墠鍗忚鏃犻渶鎵ц褰撳墠鍗忚");
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraManager.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraManager.java
new file mode 100644
index 0000000..dfbf545
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraManager.java
@@ -0,0 +1,47 @@
+package com.fzzy.igds.camera;
+
+import com.fzzy.igds.constant.CameraPlayType;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 瑙嗛鎺ュ彛绠$悊锛岀敤浜庣鐞嗕笉鍚屾挱鏀炬柟寮忕殑鍗忚鎺ュ彛锛屼笟鍔¢�氳繃褰撳墠绠$悊璋冪敤涓嶅悓鐨勫疄鐜�
+ */
+@Component(ApiCameraManager.BEAN_ID)
+public class ApiCameraManager implements ApplicationContextAware {
+
+    public static final String BEAN_ID = "core.apiCameraManager";
+
+
+    public static Map<String, ApiCameraService> remoteMap = new HashMap<>();
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+
+        Map<String, ApiCameraService> grainMap = applicationContext.getBeansOfType(ApiCameraService.class);
+
+        for (String key : grainMap.keySet()) {
+            remoteMap.put(grainMap.get(key).getType(), grainMap.get(key));
+        }
+    }
+
+
+    /**
+     *  鏍规嵁绫诲瀷鏍囩灏佽涓嶅悓鐨勬帴鍙e疄鐜帮紝
+     *
+     * @param type 鍙互鏄痯layType锛屽彲浠ユ槸snapType锛屽彲浠ユ槸ptzType
+     * @return 鎺ュ彛瀹炵幇
+     */
+    public ApiCameraService getApiCameraService(String type) {
+        ApiCameraService apiCameraService = remoteMap.get(type);
+        if (null == apiCameraService) {
+            apiCameraService = remoteMap.get(CameraPlayType.PLAY_TYPE_DEFAULT.getCode());
+        }
+        return apiCameraService;
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraService.java
new file mode 100644
index 0000000..043059b
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraService.java
@@ -0,0 +1,74 @@
+package com.fzzy.igds.camera;
+
+import com.fzzy.igds.camera.data.ApiCameraData;
+import com.fzzy.igds.camera.data.ApiCameraResp;
+import com.fzzy.igds.camera.data.ApiSnapReq;
+import com.fzzy.igds.domain.Camera;
+import java.util.List;
+
+/**
+ * @Description 瑙嗛娴佸獟浣撹皟鐢ㄦ帴鍙o紝閫氳繃绯荤粺閰嶇疆鐨勬挱鏀炬柟寮忚皟鐢ㄤ笉鍚岀殑娴佸獟浣撳疄鐜般��
+ * @Author CZT
+ * @Date 2025/12/11 10:10
+ */
+public interface ApiCameraService {
+
+    /**
+     * @return 閰嶇疆鐨勭被鍨嬫爣绛�
+     */
+    String getType();
+
+    /**
+     * 鏍规嵁鍙傛暟鑾峰彇鎾斁鍦板潃
+     *
+     * @param apiCameraDto
+     * @return
+     */
+    ApiCameraResp getPlayAddr(ApiCameraData apiCameraDto);
+
+
+    /**
+     * 璁惧浜戝彴鎿嶄綔
+     *
+     * @param apiCameraDto
+     * @return
+     */
+    ApiCameraResp ptzMedia(ApiCameraData apiCameraDto);
+
+
+    /**
+     * 棰勭疆浣嶈缃�
+     *
+     * @param apiCameraDto
+     * @return
+     */
+    ApiCameraResp ptzPreset(ApiCameraData apiCameraDto);
+
+
+    /**
+     * 鎾斁杩炴帴淇濇寔鍦ㄧ嚎锛岄拡瀵归渶瑕佸綋鍓嶆帴鍙g殑娴佸獟浣撶敓鏁�
+     *
+     * @param apiCameraDto
+     * @return
+     */
+    ApiCameraResp keepAlive(ApiCameraData apiCameraDto);
+
+
+    /**
+     * 閫氳繃娴佸獟浣撴帴鍙h皟鐢ㄦ祦濯掍綋閰嶇疆鐨勬憚鍍忓ご淇℃伅
+     *
+     * @param apiCameraDto
+     * @return
+     */
+    List<Camera> searchCamera(ApiCameraData apiCameraDto);
+
+
+    /**
+     * 鎶撴媿鎺ュ彛锛岄渶瑕佹牴鎹姄鎷嶆柟寮忚皟鏁�
+     *
+     * @param apiCameraDto
+     * @return
+     */
+    ApiCameraResp snapImg(ApiSnapReq apiCameraDto);
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/ApiCameraData.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraData.java
similarity index 73%
rename from fzzy-igdss-core/src/main/java/com/fzzy/igds/data/ApiCameraData.java
rename to fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraData.java
index 7ce863f..fbf7303 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/ApiCameraData.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraData.java
@@ -1,4 +1,4 @@
-package com.fzzy.igds.data;
+package com.fzzy.igds.camera.data;
 
 import lombok.Data;
 
@@ -36,10 +36,15 @@
      * IP
      */
     private String ip;
+
+    /**
+     * WEB绔彛
+     */
+    private Integer webPort;
     /**
      * 鎺у埗绔彛
      */
-    private Integer controlPort;
+    private Integer ctrlPort;
     /**
      * 鎾斁鏂瑰紡
      */
@@ -48,6 +53,11 @@
      * 鎶撴媿鏂瑰紡
      **/
     private String snapType;
+
+    /**
+     * 浜戝彴鏂瑰紡
+     **/
+    private String ptzType;
     /**
      * 鐩戞帶SN
      */
@@ -69,8 +79,8 @@
      */
     private int speed = 129;//閫熷害锛�0-255 榛樿129锛�
     /**
-     * 浜戝彴鎺у埗鍛戒护 1=涓婏紝2=涓嬶紝3=宸︼紝4=鍙筹紝5=宸︿笂锛�6=宸︿笅锛�7=鍙充笂锛�8=鍙充笅锛�0=鍋滄锛�9=鍙樺�嶅皬锛�10 = 鍙樺�嶅姞
-     * 棰勭疆浣嶅懡浠� 1=璁剧疆锛�2=鎵ц锛�3=鍒犻櫎
+     *浜戝彴鎺у埗鍛戒护 1=涓婏紝2=涓嬶紝3=宸︼紝4=鍙筹紝5=宸︿笂锛�6=宸︿笅锛�7=鍙充笂锛�8=鍙充笅锛�0=鍋滄锛�9=鍙樺�嶅皬锛�10 = 鍙樺�嶅姞锛�11 = 鍙樼劍鍋�
+     *棰勭疆浣嶅懡浠� 1=璁剧疆锛�2=鎵ц锛�3=鍒犻櫎
      */
     private String command;
     /**
@@ -78,7 +88,7 @@
      */
     private String preset;
     /**
-     * RTSP鍦板潃
+     * 濯掍綋鍦板潃
      */
     private String mediaAddr;
     /**
@@ -89,8 +99,9 @@
      * 澶栫綉鎾斁鍦板潃
      */
     private String urlOut;
+
     /**
-     * 璇锋眰鏂笽P锛岀敤浜庡垽鏂槸鍐呯綉鎾斁锛岃繕鏄缃戞挱鏀�
+     * 鏄惁浣跨敤澶栫綉鎾斁鍦板潃榛樿鍚�
      */
-    private String requireIp;
+    private boolean extNetwork = false;
 }
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/ApiCameraResp.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraResp.java
similarity index 94%
rename from fzzy-igdss-core/src/main/java/com/fzzy/igds/data/ApiCameraResp.java
rename to fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraResp.java
index c89e186..a55a4ef 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/ApiCameraResp.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraResp.java
@@ -1,4 +1,4 @@
-package com.fzzy.igds.data;
+package com.fzzy.igds.camera.data;
 
 import lombok.Data;
 
@@ -26,6 +26,7 @@
     private String playUrl;  //鎾斁鍦板潃
     private String playType; //鎾斁鏂瑰紡
     private String snapType; //鎾斁鏂瑰紡
+    private String ptzType; //浜戝彴鏂瑰紡
     private String appkey; //瀹夐槻骞冲彴appKey
     private String secret; //瀹夐槻骞冲彴绉橀挜
     private String ip;     //璁惧IP
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiSnapReq.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiSnapReq.java
new file mode 100644
index 0000000..68ebc8e
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiSnapReq.java
@@ -0,0 +1,97 @@
+package com.fzzy.igds.camera.data;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * @Description 鎽勫儚澶存姄鎷嶅弬鏁�
+ * @Author CZT
+ * @Date 2024/12/11 10:10
+ */
+@Data
+public class ApiSnapReq implements Serializable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1L;
+
+    private String orderId;
+
+    //绯荤粺鍐呴儴鎽勫儚澶翠富閿垨鑰呴厤缃甀D
+    private String bizId;
+
+    private String companyId;//缁勭粐缂栫爜
+
+    private String deptId;//鍒嗗簱缂栫爜
+
+    /**
+     * 鎾斁鏂瑰紡
+     */
+    private String playType;
+
+    /**
+     * 鎶撴媿鏂瑰紡
+     **/
+    private String snapType;
+
+    private String ptzType;
+
+    /**
+     * 閰嶅搴忓彿
+     **/
+    private String sort;
+
+    /**
+     * 璁惧鍞竴ID锛屼富瑕佷笌娴佸獟浣撳尮閰嶄娇鐢�
+     */
+    private String sn;
+
+    /**
+     * 鐩戞帶璐﹀彿
+     */
+    private String ip;
+
+    /**
+     * 鐩戞帶瀵嗙爜
+     */
+    private Integer port;
+
+    /**
+     * 鐩戞帶璐﹀彿
+     */
+    private String loginId;
+
+    /**
+     * 鐩戞帶瀵嗙爜
+     */
+    private String password;
+    /**
+     * 閫氶亾鍙�
+     */
+    private Integer chanNum;
+
+    /**
+     * RTSP鍦板潃
+     */
+    private String mediaAddr;
+
+    /**
+     * 鎶撴媿缁堢搴忓垪鍙�,闈炲繀濉瓧娈点��
+     */
+    private String serSn;
+
+
+    /**
+     * 鍥剧墖淇濆瓨鍦板潃
+     */
+    private String filePath;
+
+    /**
+     * 鍥剧墖鍚嶇О
+     */
+    private String fileName;
+
+    private String cameraName;
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPlayServiceImpl.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPlayServiceImpl.java
new file mode 100644
index 0000000..a925f8f
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPlayServiceImpl.java
@@ -0,0 +1,19 @@
+package com.fzzy.igds.camera.impl;
+
+import com.fzzy.igds.camera.AbstractApiCameraService;
+import com.fzzy.igds.constant.CameraPlayType;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description 绯荤粺榛樿涓嶅仛浠讳綍鎺ュ彛瀹炵幇鍜屽鐞�
+ * @Author CZT
+ * @Date 2025/12/11 10:10
+ */
+@Component
+public class DefaultPlayServiceImpl extends AbstractApiCameraService {
+
+    @Override
+    public String getType() {
+        return CameraPlayType.PLAY_TYPE_DEFAULT.getCode();
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPtzServiceImpl.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPtzServiceImpl.java
new file mode 100644
index 0000000..e407ac3
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPtzServiceImpl.java
@@ -0,0 +1,19 @@
+package com.fzzy.igds.camera.impl;
+
+import com.fzzy.igds.camera.AbstractApiCameraService;
+import com.fzzy.igds.constant.CameraPtzType;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description 绯荤粺榛樿涓嶅仛浠讳綍鎺ュ彛瀹炵幇鍜屽鐞�
+ * @Author CZT
+ * @Date 2025/12/11 10:10
+ */
+@Component
+public class DefaultPtzServiceImpl extends AbstractApiCameraService {
+
+    @Override
+    public String getType() {
+        return CameraPtzType.PTZ_TYPE_NONE.getCode();
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultSnapServiceImpl.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultSnapServiceImpl.java
new file mode 100644
index 0000000..e4bb7c2
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultSnapServiceImpl.java
@@ -0,0 +1,19 @@
+package com.fzzy.igds.camera.impl;
+
+import com.fzzy.igds.camera.AbstractApiCameraService;
+import com.fzzy.igds.constant.CameraSnapType;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description 绯荤粺榛樿涓嶅仛浠讳綍鎺ュ彛瀹炵幇鍜屽鐞�
+ * @Author CZT
+ * @Date 2025/12/11 10:10
+ */
+@Component
+public class DefaultSnapServiceImpl extends AbstractApiCameraService {
+
+    @Override
+    public String getType() {
+        return CameraSnapType.SNAP_TYPE_NONE.getCode();
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraPtzType.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraPtzType.java
new file mode 100644
index 0000000..7fd8cdd
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraPtzType.java
@@ -0,0 +1,33 @@
+package com.fzzy.igds.constant;
+
+import lombok.Getter;
+
+/**
+ * @Description 浜戝彴鎺у埗鏂瑰紡
+ * @Author CZT
+ * @Date 2024/12/10 16:38
+ */
+@Getter
+public enum CameraPtzType {
+
+    PTZ_TYPE_NONE("NONE", "涓嶆帶鍒�"),
+    PTZ_TYPE_HIK_ISAPI("HIK-ISAPI", "娴峰悍IS-API浜戝彴"),
+    PTZ_TYPE_DAHUA_API("DAHUA-HTTP-API", "澶у崕HTTP-API浜戝彴"),
+    PTZ_TYPE_FZZY_ONVIF("FZZY-ONVIF", "椋庢鑷磋繙Onvif鍐呯綉浜戝彴");
+
+    private String code;
+    private String msg;
+
+    private CameraPtzType(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+    public static String getMsg(String code) {
+        if (null == code) return null;
+        if (CameraPtzType.PTZ_TYPE_NONE.getCode().equals(code)) return CameraPtzType.PTZ_TYPE_NONE.getMsg();
+        if (CameraPtzType.PTZ_TYPE_HIK_ISAPI.getCode().equals(code)) return CameraPtzType.PTZ_TYPE_HIK_ISAPI.getMsg();
+        if (CameraPtzType.PTZ_TYPE_DAHUA_API.getCode().equals(code)) return CameraPtzType.PTZ_TYPE_DAHUA_API.getMsg();
+        if (CameraPtzType.PTZ_TYPE_FZZY_ONVIF.getCode().equals(code)) return CameraPtzType.PTZ_TYPE_FZZY_ONVIF.getMsg();
+        return code;
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraSnapType.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraSnapType.java
new file mode 100644
index 0000000..43eabf4
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraSnapType.java
@@ -0,0 +1,41 @@
+package com.fzzy.igds.constant;
+
+/**
+ * @Description 鎶撴媿鏂瑰紡
+ * @Author CZT
+ * @Date 2025/11/25 15:28
+ */
+public enum CameraSnapType {
+
+    SNAP_TYPE_NONE("NONE", "涓嶆姄鎷�"),
+    SNAP_TYPE_FZZY_PLUGIN("FZZY-PLUGIN", "FZZY_RSTP鎻掍欢鎶撴媿"),
+    SNAP_TYPE_FZZY_PLUGIN_V2("FZZY-PLUGIN_V2", "FZZY_API鎻掍欢鎶撴媿"),
+    SNAP_TYPE_HIK_ISAPI("HIK-ISAPI", "娴峰悍ISAPI鎶撴媿"),
+    SNAP_TYPE_DAHUA_HTTP_API("DAHUA-HTTP-API", "澶у崕HTTP_API鎶撴媿");
+
+    private String code;
+    private String msg;
+
+    private CameraSnapType(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public static String getMsg(String code) {
+        if (null == code) return null;
+        if (CameraSnapType.SNAP_TYPE_NONE.getCode().equals(code)) return CameraSnapType.SNAP_TYPE_NONE.getMsg();
+        if (CameraSnapType.SNAP_TYPE_FZZY_PLUGIN.getCode().equals(code)) return CameraSnapType.SNAP_TYPE_FZZY_PLUGIN.getMsg();
+        if (CameraSnapType.SNAP_TYPE_FZZY_PLUGIN_V2.getCode().equals(code)) return CameraSnapType.SNAP_TYPE_FZZY_PLUGIN_V2.getMsg();
+        if (CameraSnapType.SNAP_TYPE_HIK_ISAPI.getCode().equals(code)) return CameraSnapType.SNAP_TYPE_HIK_ISAPI.getMsg();
+        if (CameraSnapType.SNAP_TYPE_DAHUA_HTTP_API.getCode().equals(code)) return CameraSnapType.SNAP_TYPE_DAHUA_HTTP_API.getMsg();
+        return code;
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/SnapType.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/SnapType.java
deleted file mode 100644
index 15049d4..0000000
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/SnapType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.fzzy.igds.constant;
-
-/**
- * @Description 鎶撴媿鏂瑰紡
- * @Author CZT
- * @Date 2025/11/25 15:28
- */
-public enum SnapType {
-
-    SNAP_TYPE_FZZY_PLUGIN("FZZY-PLUGIN", "FZZY_RSTP鎻掍欢鎶撴媿"),
-    SNAP_TYPE_FZZY_PLUGIN_V2("FZZY-PLUGIN_V2", "FZZY_API鎻掍欢鎶撴媿"),
-    SNAP_TYPE_HIK_ISAPI("HIK-ISAPI", "娴峰悍ISAPI鎶撴媿"),
-    SNAP_TYPE_DAHUA_HTTP_API("DAHUA-HTTP-API", "澶у崕HTTP_API鎶撴媿");
-
-    private String code;
-    private String msg;
-
-    private SnapType(String code, String msg) {
-        this.code = code;
-        this.msg = msg;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public static String getMsg(String code) {
-        if (null == code) return null;
-        if (SnapType.SNAP_TYPE_FZZY_PLUGIN.getCode().equals(code)) return SnapType.SNAP_TYPE_FZZY_PLUGIN.getMsg();
-        if (SnapType.SNAP_TYPE_FZZY_PLUGIN_V2.getCode().equals(code)) return SnapType.SNAP_TYPE_FZZY_PLUGIN_V2.getMsg();
-        if (SnapType.SNAP_TYPE_HIK_ISAPI.getCode().equals(code)) return SnapType.SNAP_TYPE_HIK_ISAPI.getMsg();
-        if (SnapType.SNAP_TYPE_DAHUA_HTTP_API.getCode().equals(code)) return SnapType.SNAP_TYPE_DAHUA_HTTP_API.getMsg();
-        return code;
-    }
-}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Camera.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Camera.java
index 6822cc6..796f619 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Camera.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Camera.java
@@ -96,6 +96,10 @@
     @TableField("snap_type")
     private String snapType;
 
+    @Column(name = "ptz_type", columnDefinition = "varchar(40) COMMENT '浜戝彴鏂瑰紡'")
+    @TableField("ptz_type")
+    private String ptzType;
+
     @Column(name = "sort", columnDefinition = "varchar(2) COMMENT '閰嶅搴忓彿'")
     @TableField("sort")
     private String sort = "1";
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java
index c682d83..ccc74f9 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java
@@ -189,7 +189,15 @@
      */
     public List<SysDictData> triggerSnapType() {
         List<SysDictData> list = new ArrayList<SysDictData>();
-        for (SnapType w : SnapType.values()) {
+        for (CameraSnapType w : CameraSnapType.values()) {
+            list.add(new SysDictData(w.getMsg(), w.getCode()));
+        }
+        return list;
+    }
+
+    public List<SysDictData> triggerPtzType() {
+        List<SysDictData> list = new ArrayList<SysDictData>();
+        for (CameraPtzType w : CameraPtzType.values()) {
             list.add(new SysDictData(w.getMsg(), w.getCode()));
         }
         return list;
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java
index 1d693b4..b733cb6 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java
@@ -132,6 +132,16 @@
     }
 
     /**
+     * 浜戝彴鏂瑰紡
+     * ${dorado.getDataProvider("dicPR#triggerPtzType").getResult()}
+     *
+     * @return
+     */
+    @DataProvider
+    public List<SysDictData> triggerPtzType() {
+        return dicService.triggerPtzType();
+    }
+    /**
      * 妫�楠岀被鍒�
      * <p>
      * ${dorado.getDataProvider("dicPR#triggerCheckType").getResult()}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml
index 3e8a2e8..6dec86e 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml
@@ -137,7 +137,6 @@
           <Property name="keyProperty">id</Property>
           <Property name="valueProperty">kqmc</Property>
         </Property>
-        <Property name="readOnly">true</Property>
       </PropertyDef>
       <PropertyDef name="name">
         <Property></Property>
@@ -188,7 +187,6 @@
       </PropertyDef>
       <PropertyDef name="sort">
         <Property name="label">閰嶅搴忓彿</Property>
-        <Property name="required">true</Property>
         <Property name="mapping">
           <Property name="mapValues">
             <Collection>
@@ -260,6 +258,16 @@
         <Property name="label">鎶撴媿鏂瑰紡</Property>
         <Property name="mapping">
           <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerSnapType&quot;).getResult()}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="ptzType">
+        <Property></Property>
+        <Property name="label">浜戝彴鏂瑰紡</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerPtzType&quot;).getResult()}</Property>
           <Property name="keyProperty">dictValue</Property>
           <Property name="valueProperty">dictLabel</Property>
         </Property>
@@ -786,6 +794,21 @@
                 <Editor/>
               </AutoFormElement>
               <AutoFormElement>
+                <Property name="name">type</Property>
+                <Property name="property">type</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">brand</Property>
+                <Property name="property">brand</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">ip</Property>
+                <Property name="property">ip</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
                 <Property name="name">chanNum</Property>
                 <Property name="property">chanNum</Property>
                 <Editor/>
@@ -796,8 +819,8 @@
                 <Editor/>
               </AutoFormElement>
               <AutoFormElement>
-                <Property name="name">ip</Property>
-                <Property name="property">ip</Property>
+                <Property name="name">spdwlx</Property>
+                <Property name="property">spdwlx</Property>
                 <Editor/>
               </AutoFormElement>
               <AutoFormElement>
@@ -808,16 +831,6 @@
               <AutoFormElement>
                 <Property name="name">webPort</Property>
                 <Property name="property">webPort</Property>
-                <Editor/>
-              </AutoFormElement>
-              <AutoFormElement>
-                <Property name="name">spdwlx</Property>
-                <Property name="property">spdwlx</Property>
-                <Editor/>
-              </AutoFormElement>
-              <AutoFormElement>
-                <Property name="name">sort</Property>
-                <Property name="property">sort</Property>
                 <Editor/>
               </AutoFormElement>
               <AutoFormElement>
@@ -886,13 +899,9 @@
                 <Editor/>
               </AutoFormElement>
               <AutoFormElement layoutConstraint="colSpan:2">
-                <Property name="name">sn</Property>
-                <Property name="property">sn</Property>
-                <Editor>
-                  <TextEditor id="sn">
-                    <Property name="blankText"> -- 娴佸獟浣撳钩鍙颁腑璁惧SN --</Property>
-                  </TextEditor>
-                </Editor>
+                <Property name="name">ptzType</Property>
+                <Property name="property">ptzType</Property>
+                <Editor/>
               </AutoFormElement>
               <AutoFormElement layoutConstraint="colSpan:3">
                 <Property name="name">mediaAddr</Property>
@@ -901,6 +910,15 @@
                 <Editor>
                   <TextEditor id="mediaAddr">
                     <Property name="blankText"> -- 鐐瑰嚮鍙充晶閫夋嫨锛屾垨鑰呮墜鍔ㄥ~鍐� --</Property>
+                  </TextEditor>
+                </Editor>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:5">
+                <Property name="name">sn</Property>
+                <Property name="property">sn</Property>
+                <Editor>
+                  <TextEditor id="sn">
+                    <Property name="blankText"> -- 娴佸獟浣撳钩鍙颁腑璁惧SN --</Property>
                   </TextEditor>
                 </Editor>
               </AutoFormElement>
@@ -938,23 +956,8 @@
                 <Editor/>
               </AutoFormElement>
               <AutoFormElement>
-                <Property name="name">createBy</Property>
-                <Property name="property">createBy</Property>
-                <Editor/>
-              </AutoFormElement>
-              <AutoFormElement>
-                <Property name="name">createTime</Property>
-                <Property name="property">createTime</Property>
-                <Editor/>
-              </AutoFormElement>
-              <AutoFormElement>
                 <Property name="name">updateBy</Property>
                 <Property name="property">updateBy</Property>
-                <Editor/>
-              </AutoFormElement>
-              <AutoFormElement>
-                <Property name="name">updateTime</Property>
-                <Property name="property">updateTime</Property>
                 <Editor/>
               </AutoFormElement>
             </AutoForm>
@@ -994,7 +997,8 @@
 </ClientEvent>
     </Trigger>
     <Dialog id="dialogMeidaSelect" layout="vbox padding:10">
-      <Property name="width">650</Property>
+      <Property name="width">800</Property>
+      <Property name="height">80%</Property>
       <Property name="caption">娴佸獟浣撳湴鍧�閫夋嫨</Property>
       <Buttons/>
       <Children>
@@ -1010,10 +1014,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text1.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1028,10 +1033,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text2.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1046,10 +1052,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text3.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1064,10 +1071,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text4.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1082,10 +1090,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text5.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1100,10 +1109,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text6.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1118,10 +1128,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text7.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1136,10 +1147,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text8.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1154,10 +1166,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text9.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1172,10 +1185,11 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text10.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
         <Container>
@@ -1190,12 +1204,24 @@
           </Label>
           <Button layoutConstraint="right">
             <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text11.text&quot;));&#xD;
-view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
-</ClientEvent>
+              view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+            </ClientEvent>
             <Property name="caption">閫夋嫨</Property>
             <Property name="iconClass">fa fa-check</Property>
+            <Property name="exClassName">btn1</Property>
           </Button>
         </Container>
+        <Container>
+          <Label>
+            <Property name="text">淇℃伅璇存槑</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label>
+            <Property name="text">{0}=鐢ㄦ埛鍚嶏紱{1}=瀵嗙爜锛泏2}=IP锛泏3}=绔彛锛泏4}=閫氶亾鍙凤紱{5}=搴忓垪鍙凤紱</Property>
+          </Label>
+        </Container>
       </Children>
       <Tools/>
     </Dialog>
diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/inout/InoutApiController.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/inout/InoutApiController.java
index 40667b2..79b29fb 100644
--- a/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/inout/InoutApiController.java
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/inout/InoutApiController.java
@@ -1,5 +1,6 @@
 package com.fzzy.sys.controller.inout;
 
+import com.fzzy.igds.camera.data.ApiCameraResp;
 import com.fzzy.igds.constant.RespCodeEnum;
 import com.fzzy.igds.data.*;
 import com.fzzy.igds.utils.SystemUtil;
diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SecurityController.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SecurityController.java
index baa81b5..037aa65 100644
--- a/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SecurityController.java
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SecurityController.java
@@ -17,9 +17,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
-
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -40,39 +38,88 @@
     private CoreDeptService deptService;
 
     /**
-     * 鐩戞帶姒傝
-     *
+     * 搴撳尯瀹夐槻椤甸潰
      * @param type 1.琛ㄧず2.5D楦熺灠鍥鹃〉闈㈤瑙堬紱2.琛ㄧず鍒楄〃棰勮椤甸潰
+     * @param view
      * @return
      */
-    @RequestMapping("/aerial-video")
-    public String aerialVideo(
-            @RequestParam(value = "type", required = false) String type,
-            ModelMap view) {
+    @RequestMapping("/video-dept")
+    public String videoDept(@RequestParam(value = "type", required = false) String type,
+                              ModelMap view) {
+
+        if (StringUtils.isBlank(type)) {
+            type = "2";
+        }
 
         SysUser user = ContextUtil.getLoginUser();
         view.put(Constant.MODEL_KEY_LOGIN_USER, user);
 
         String deptId = ContextUtil.subDeptId(user);
-        List<Camera> listCamera = secManager.listCamera(deptId, user.getCompanyId());
-
         view.put("deptId", deptId);
+
+        List<Camera> listCamera = secManager.listCamera(deptId, user.getCompanyId());
         view.put("listCamera", listCamera);
 
         //榛樿鐩戞帶鍒楄〃椤甸潰
-        String viewUrl = prefix + "/video-list";
+        String viewUrl = prefix + "/video-list-dept";
 
-        if (StringUtils.isNotBlank( type) && "1".equals(type)) {
+        if("1".equals(type)){
+            viewUrl = prefix + "/video-aerial-dept";
+
+            //楦熺灠鍥�
             Dept dept = deptService.getDeptById(deptId);
             if (dept != null && StringUtils.isNotEmpty(dept.getImgPath())) {
                 view.put("backgroundImg", dept.getImgPath());
-                viewUrl = prefix + "/video-aerial";
             }
-
         }
+        if("2".equals(type)){
+            viewUrl = prefix + "/video-list-dept";
+        }
+
         return viewUrl;
     }
 
+    /**
+     * 鐩戠瀹夐槻椤甸潰
+     * @param type 1.琛ㄧず2.5D楦熺灠鍥鹃〉闈㈤瑙堬紱2.琛ㄧず鍒楄〃棰勮椤甸潰
+     * @param view
+     * @return
+     */
+    @RequestMapping("/video-super")
+    public String videoSuper(@RequestParam(value = "type", required = false) String type,
+                             ModelMap view) {
+
+        if (StringUtils.isBlank(type)) {
+            type = "2";
+        }
+
+        SysUser user = ContextUtil.getLoginUser();
+        view.put(Constant.MODEL_KEY_LOGIN_USER, user);
+
+        String deptId = ContextUtil.subDeptId(user);
+        view.put("deptId", deptId);
+
+        List<Camera> listCamera = secManager.listCamera(deptId, user.getCompanyId());
+        view.put("listCamera", listCamera);
+
+        //榛樿鐩戞帶鍒楄〃椤甸潰
+        String viewUrl = prefix + "/video-list-dept";
+
+        if("1".equals(type)){
+            viewUrl = prefix + "/video-aerial-dept";
+
+            //楦熺灠鍥�
+            Dept dept = deptService.getDeptById(deptId);
+            if (dept != null && StringUtils.isNotEmpty(dept.getImgPath())) {
+                view.put("backgroundImg", dept.getImgPath());
+            }
+        }
+        if("2".equals(type)){
+            viewUrl = prefix + "/video-list-dept";
+        }
+
+        return viewUrl;
+    }
 
     /**
      * 楦熺灠鍥鹃〉闈� -- 瑙嗛鎾斁锛岄�氳繃鎾斁鍙傛暟涓嶅悓璺宠浆涓嶅悓椤甸潰鎾斁
diff --git a/fzzy-igdss-web/src/main/resources/static/security/video-aerial.js b/fzzy-igdss-web/src/main/resources/static/security/video-aerial-dept.js
similarity index 100%
rename from fzzy-igdss-web/src/main/resources/static/security/video-aerial.js
rename to fzzy-igdss-web/src/main/resources/static/security/video-aerial-dept.js
diff --git a/fzzy-igdss-web/src/main/resources/static/security/video-control.js b/fzzy-igdss-web/src/main/resources/static/security/video-control.js
new file mode 100644
index 0000000..849b9ba
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/static/security/video-control.js
@@ -0,0 +1,77 @@
+/**
+ * PTZ 鍏叡鏂规硶锛屽紩鐢ㄤ箣鍓嶉渶瑕佸厛瀹氫箟curCamera瀵硅薄
+ * 鎵ц鍛戒护缂栫爜
+ * 浜戝彴鎺у埗鍛戒护 1=涓婏紝2=涓嬶紝3=宸︼紝4=鍙筹紝5=宸︿笂锛�6=宸︿笅锛�7=鍙充笂锛�8=鍙充笅锛�0=鍋滄锛�9=鍙樺�嶅皬锛�10 = 鍙樺�嶅姞锛�11 = 鍙樼劍鍋�
+ * 棰勭疆浣嶅懡浠� 1=璁剧疆锛�2=鎵ц锛�3=鍒犻櫎
+ * 鏁版嵁灏哻urCamera瀵硅薄灏佽涓篈Pi 瀵硅薄鍙戦�佺粰浜戝钩鍙�
+ */
+
+function getParam(command, preset) {
+    return {
+        playType: curCamera.playType,
+        ptzType: curCamera.ptzType,
+        snapType: curCamera.snapType,
+        cameraId: curCamera.id,
+        cameraName: curCamera.name,
+        ip: curCamera.ip,
+        sn: curCamera.sn,
+        webPort: curCamera.webPort,
+        ctrlPort: curCamera.controlPort,
+        channel: curCamera.chanNum,
+        loginId: curCamera.loginId,
+        pwd: curCamera.pwd,
+        mediaAddr: curCamera.mediaAddr,
+        urlIn: curCamera.urlIn,
+        urlOut: curCamera.urlOut,
+        command: command,
+        preset: preset
+    }
+}
+
+//浜戝彴鎺у埗
+function ptzControl(command) {
+   // layer.msg('寮�濮嬭皟鐢ㄤ簯鍙扳�︹��', {icon: 1, time: 1200,offset:'rb'});
+    const param = getParam(command, null);
+    const url = "../../basic/security/ptz-media";
+    sendControlCommand(url, param);
+}
+
+//棰勭疆浣嶆帶鍒�
+function presetControl(command) {
+    //layer.msg('寮�濮嬫墽琛屸�︹��', {icon: 1, time: 1200,offset:'rb'});
+    const preset = $("#preset").val();
+    const param = getParam(command, preset);
+    const url = "../../basic/security/ptz-media";
+    sendControlCommand(url, param);
+}
+
+//鍋滄绉诲姩
+function moveStop() {
+    //layer.msg('寮�濮嬭皟鐢ㄤ簯鍙扳�︹��', {icon: 1, time: 1200,offset:'rb'});
+    const param = getParam(0, null);
+    const url = "../../basic/security/ptz-media";
+    sendControlCommand(url, param);
+}
+
+//鍙樼劍鍋�
+function zoomStop() {
+    //doNothing
+}
+
+//鍙戦�佹帶鍒跺懡浠�
+function sendControlCommand(url, param) {
+    $.ajax({
+        type: "POST",
+        url: url,
+        dataType: 'JSON',
+        contentType: "application/json;charset=UTF-8",
+        data: JSON.stringify(param),
+        success: function (data) {
+            if (data.code === "ERROR") {
+                layer.msg('鎵ц澶辫触', {icon: 2, time: 1500,offset:'rb'});
+            } else {
+                layer.msg('鎵ц鎴愬姛', {icon: 1, time: 1200,offset:'rb'});
+            }
+        }
+    })
+}
\ No newline at end of file
diff --git a/fzzy-igdss-web/src/main/resources/static/security/video-list.js b/fzzy-igdss-web/src/main/resources/static/security/video-list-dept.js
similarity index 75%
rename from fzzy-igdss-web/src/main/resources/static/security/video-list.js
rename to fzzy-igdss-web/src/main/resources/static/security/video-list-dept.js
index 814971d..3c0f2ae 100644
--- a/fzzy-igdss-web/src/main/resources/static/security/video-list.js
+++ b/fzzy-igdss-web/src/main/resources/static/security/video-list-dept.js
@@ -1,4 +1,6 @@
 var layer;
+var splitWin = 1;  //鍒嗗睆鏁帮紝榛樿1鍒嗗睆
+var windowsNum = 1; //鎾斁绐楀彛涓嬫爣锛屾墜鍔ㄩ�夋嫨妯″紡涓嬩娇鐢�
 var timer;
 var table;
 var cameraData;
@@ -23,6 +25,65 @@
 });
 
 /**
+ * 鎾斁绐楀彛閫変腑
+ * @param win1 鍒嗗睆鏁�
+ * @param win2 閫変腑绐楀彛鏁�
+ */
+function selectWin(win1,win2) {
+    removeSelectCss();
+    splitWin = win1;
+    windowsNum = win2;
+    addSelectCss();
+}
+
+/**
+ * 鍘婚櫎閫変腑CSS
+ */
+function removeSelectCss() {
+    $("#f" + splitWin + "_d" + windowsNum).removeClass("selectWin");
+}
+
+/**
+ * 澧炲姞閫変腑CSS
+ */
+function addSelectCss() {
+    $("#f" + splitWin + "_d" + windowsNum).addClass("selectWin");
+}
+
+/**
+ * 鍒嗗睆鍒囨崲
+ * @param tagNum  鍒嗗睆鏁�
+ */
+function fenping(tagNum) {
+
+    //鍒囨崲鍒嗗睆鍥炬爣鍙婇〉闈�
+    if (tagNum == 1) {
+        $("#f_1").attr("src", "/img/web/group/fp_1_active.png");
+        $("#f_4").attr("src", "/img/web/group/fp_4.png");
+        $("#f_9").attr("src", "/img/web/group/fp_9.png");
+        $("#video_1").css('display', 'block');
+        $("#video_4").css('display', 'none');
+        $("#video_9").css('display', 'none');
+    }
+    if (tagNum == 4) {
+        $("#f_1").attr("src", "/img/web/group/fp_1.png");
+        $("#f_4").attr("src", "/img/web/group/fp_4_active.png");
+        $("#f_9").attr("src", "/img/web/group/fp_9.png");
+        $("#video_1").css('display', 'none');
+        $("#video_4").css('display', 'block');
+        $("#video_9").css('display', 'none');
+    }
+    if (tagNum == 9) {
+        $("#f_1").attr("src", "/img/web/group/fp_1.png");
+        $("#f_4").attr("src", "/img/web/group/fp_4.png");
+        $("#f_9").attr("src", "/img/web/group/fp_9_active.png");
+        $("#video_1").css('display', 'none');
+        $("#video_4").css('display', 'none');
+        $("#video_9").css('display', 'block');
+    }
+}
+
+/**
  * 鐐瑰嚮鎾斁
  * @param cameraId
  */
diff --git a/fzzy-igdss-web/src/main/resources/static/security/video-list.css b/fzzy-igdss-web/src/main/resources/static/security/video-list.css
index 2b22ffa..3bef15c 100644
--- a/fzzy-igdss-web/src/main/resources/static/security/video-list.css
+++ b/fzzy-igdss-web/src/main/resources/static/security/video-list.css
@@ -43,7 +43,7 @@
 
 .sp-boxWrap,
 .sp-box {
-    height: 550px;
+    height: 830px;
 }
 
 .sp-box {
@@ -321,13 +321,13 @@
 }
 
 .sp-bianbei{
-    width: 47%;
+    width: 60%;
     height: 40px;
     background: #4c5863;
     -webkit-border-radius: 30px;
     border-radius: 30px;
     overflow: hidden;
-    margin: 10px 0;
+    margin: 10px 0 0 60px;
     text-align: center;
 }
 
diff --git a/fzzy-igdss-web/src/main/resources/templates/security/video-aerial.html b/fzzy-igdss-web/src/main/resources/templates/security/video-aerial-dept.html
similarity index 97%
rename from fzzy-igdss-web/src/main/resources/templates/security/video-aerial.html
rename to fzzy-igdss-web/src/main/resources/templates/security/video-aerial-dept.html
index 5bb5eb9..e44c85b 100644
--- a/fzzy-igdss-web/src/main/resources/templates/security/video-aerial.html
+++ b/fzzy-igdss-web/src/main/resources/templates/security/video-aerial-dept.html
@@ -67,7 +67,7 @@
 <script th:src="@{/common/constant.js}"></script>
 <script th:src="@{/common/igds-common.js}"></script>
 <script th:src="@{/js/plugins/drag/drag-drop.js}"></script>
-<script th:src="@{/security/video-aerial.js}"></script>
+<script th:src="@{/security/video-aerial-dept.js}"></script>
 
 <!-- 寮瑰嚭鎿嶄綔妗� -->
 <div class="layui-tab-content" id="aerialDialog" style="display: none;">
diff --git a/fzzy-igdss-web/src/main/resources/templates/security/video-list-dept.html b/fzzy-igdss-web/src/main/resources/templates/security/video-list-dept.html
new file mode 100644
index 0000000..b16c4bb
--- /dev/null
+++ b/fzzy-igdss-web/src/main/resources/templates/security/video-list-dept.html
@@ -0,0 +1,355 @@
+<!DOCTYPE html>
+<html lang="zh-cn" xmlns:th=http://www.thymeleaf.org>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="renderer" content="webkit">
+    <title>鏅烘収绮簱绠$悊骞冲彴-鐩戞帶鍒楄〃</title>
+
+    <link rel="stylesheet" th:href="@{/ajax/libs/layui/css/layui.css}"/>
+    <link rel="stylesheet" th:href="@{/security/video-list.css}">
+
+    <style>
+        html, body, .full {
+            width: 100%;
+            height: 100%;
+            overflow-y: hidden;
+        }
+
+        .layui-fluid {
+            position: relative;
+            margin: 0 auto;
+            padding: unset;
+        }
+
+        .layui-col-space20 {
+            margin: unset;
+        }
+
+        .layui-col-space20 > * {
+            padding: 10px 5px;
+        }
+
+        .sp-showItem2 {
+            height: 690px;
+        }
+
+        .sp-box {
+            height: 820px;
+        }
+
+        .sp-rl > span {
+            line-height: 50px;
+            color: #bbc3cd;
+            font-size: 20px;
+        }
+
+        .sp-table {
+            height: 355px;
+        }
+
+        .pdgxq-table1 {
+            background-color: transparent;
+            margin: 0;
+        }
+
+        .pdgxq-table1 thead tr th {
+            color: #ef344a;
+            font-size: 18px;
+        }
+
+        .pdgxq-table1 thead tr {
+            background: #141C25 !important;
+            border-bottom: 1px solid #ef344a;
+        }
+
+        .layui-table td, .layui-table th {
+            padding: 9px 5px;
+        }
+
+        .pdgxq-table1 th, .pdgxq-table1 td {
+            text-align: center;
+            min-height: 32px;
+            line-height: 32px;
+            font-size: 14px;
+        }
+
+        .pdgxq-table1 tbody tr:nth-child(odd) {
+            background-color: #262d33;
+        }
+
+        .pdgxq-table1 td em {
+            color: #ef344a;
+        }
+
+        .layui-table td, .layui-table th {
+            padding: 9px 5px;
+        }
+
+        .pdgxq-table1 td {
+            color: #fff;
+            cursor: pointer;
+        }
+
+        .fenping_icon {
+            position: absolute;
+            right: 30px;
+            top: 16px;
+        }
+
+        .div_v1 {
+            width: 99.8%;
+            height: 760px;
+            float: left;
+            background-color: #333;
+
+            text-align: center;
+            color: #FFF;
+            font-size: 20px;
+        }
+
+        .div_v4 {
+            width: 49.88%;
+            height: 379.5px;
+            float: left;
+            background-color: #333;
+
+            text-align: center;
+            color: #FFF;
+            font-size: 20px;
+        }
+
+        .div_v9 {
+            width: 33.22%;
+            height: 252.6px;
+            float: left;
+            background-color: #333;
+
+            text-align: center;
+            color: #FFF;
+            font-size: 20px;
+        }
+        .bor_t_l {
+            border-top: 1px solid #777;
+            border-left: 1px solid #777;
+        }
+
+        .bor_b {
+            border-bottom: 1px solid #777;
+        }
+
+        .bor_r {
+            border-right: 1px solid #777;
+        }
+        .selectWin {
+            border: 1px solid #a52222;
+        }
+        .video {
+            width: 100%;
+            height: 100%;
+        }
+    </style>
+</head>
+
+<body class="pdgxq-body">
+<div class="i-container">
+    <div class="jmkt-main">
+        <div class="layui-fluid">
+            <div class="sp-boxWrap layui-row layui-col-space20">
+                <div class="layui-col-lg9 layui-col-md9">
+                    <div class="pdgxq-m1-left sp-box">
+
+                        <div class="pdgxq-H">
+                            <h3>
+                                <i></i>瑙嗛瀹炴椂棰勮
+                            </h3>
+                            <div class="fenping_icon">
+                                <img onclick="fenping(1)" id="f_1" style="width: 30px" th:src="@{/img/web/group/fp_1_active.png}"/>
+                                <img onclick="fenping(4)" id="f_4" style="width: 30px" th:src="@{/img/web/group/fp_4.png}"/>
+                                <img onclick="fenping(9)" id="f_9" style="width: 30px" th:src="@{/img/web/group/fp_9.png}"/>
+                            </div>
+                        </div>
+
+                        <div class="sp-tab-db" style="padding: 5px 10px 15px 10px;">
+                            <!--涓�鍒嗗睆 榛樿鏄剧ず-->
+                            <div id="video_1" class="right-videoWrap">
+                                <div id="f1_d1" onclick="selectWin(1,1)" class="div_v1 bor_t_l bor_b bor_r">
+                                    <video class="video" id="video1_1" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                            </div>
+
+                            <!--鍥涘垎灞� 榛樿鏄剧ず-->
+                            <div id="video_4" class="right-videoWrap" style="display: none;">
+                                <div id="f4_d1" onclick="selectWin(4,1)" class="div_v4 bor_t_l">
+                                    <video class="video" id="video4_1" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f4_d2" onclick="selectWin(4,2)" class="div_v4 bor_t_l bor_r">
+                                    <video class="video" id="video4_2" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f4_d3" onclick="selectWin(4,3)" class="div_v4 bor_t_l bor_b">
+                                    <video class="video" id="video4_3" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f4_d4" onclick="selectWin(4,4)" class="div_v4 bor_t_l bor_b bor_r">
+                                    <video class="video" id="video4_4" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                            </div>
+
+                            <!--涔濆垎灞� 榛樿闅愯棌-->
+                            <div id="video_9" class="right-videoWrap" style="display: none;">
+                                <div id="f9_d1" onclick="selectWin(9,1)" class="div_v9 bor_t_l">
+                                    <video class="video" id="video9_1" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d2" onclick="selectWin(9,2)" class="div_v9 bor_t_l">
+                                    <video class="video" id="video9_2" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d3" onclick="selectWin(9,3)" class="div_v9 bor_t_l bor_r">
+                                    <video class="video" id="video9_3" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d4" onclick="selectWin(9,4)" class="div_v9 bor_t_l">
+                                    <video class="video" id="video9_4" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d5" onclick="selectWin(9,5)" class="div_v9 bor_t_l">
+                                    <video class="video" id="video9_5" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d6" onclick="selectWin(9,6)" class="div_v9 bor_t_l bor_r">
+                                    <video class="video" id="video9_6" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d7" onclick="selectWin(9,7)" class="div_v9 bor_t_l bor_b">
+                                    <video class="video" id="video9_7" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d8" onclick="selectWin(9,8)" class="div_v9 bor_t_l bor_b">
+                                    <video class="video" id="video9_8" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                                <div id="f9_d9" onclick="selectWin(9,9)" class="div_v9 bor_t_l bor_b bor_r">
+                                    <video class="video" id="video9_9" autoplay="" muted="" playsinline=""></video>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <!--pdgxq-m1-left end-->
+                <div class="layui-col-lg3 layui-col-md3">
+                    <div class="pdgxq-m1-right sp-box" style="height: 400px">
+                        <div class="pdgxq-H">
+                            <h3>
+                                <i></i>浜戝彴鎺у埗
+                            </h3>
+                        </div>
+                        <div class="sp-cz-wrap">
+                            <div class="sp-cz-box">
+                                <ul>
+                                    <li class="sp-cz-l1">
+                                        <a href="javascript:;" onmousedown="ptzControl(5)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a>
+                                    </li>
+                                    <li class="sp-cz-l2">
+                                        <a href="javascript:;" onmousedown="ptzControl(1)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a>
+                                    </li>
+                                    <li class="sp-cz-l3">
+                                        <a href="javascript:;" onmousedown="ptzControl(7)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a>
+                                    </li>
+                                    <li class="sp-cz-l4">
+                                        <a href="javascript:;" onmousedown="ptzControl(3)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a>
+                                    </li>
+                                    <li class="sp-cz-l5">
+                                        <a href="javascript:;">
+                                        </a>
+                                    </li>
+                                    <li class="sp-cz-l6">
+                                        <a href="javascript:;" onmousedown="ptzControl(4)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a>
+                                    </li>
+                                    <li class="sp-cz-l7">
+                                        <a href="javascript:;" onmousedown="ptzControl(6)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a>
+                                    </li>
+                                    <li class="sp-cz-l8">
+                                        <a href="javascript:;" onmousedown="ptzControl(2)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a></li>
+                                    <li class="sp-cz-l9">
+                                        <a href="javascript:;" onmousedown="ptzControl(8)"
+                                           onmouseup="moveStop()">
+                                            <img th:src="@{/img/web/security/sp-arrow.png}"/>
+                                        </a></li>
+                                </ul>
+                            </div>
+                            <div class="sp-bianbei fl">
+                                <button type="button" class="sp-sxBtn sp-czBtn" onmousedown="ptzControl(9)" onmouseup="zoomStop()">
+                                    <i>锛�</i>
+                                </button>
+                                <span>鍙樼劍</span>
+                                <button type="button" class="sp-fdBtn sp-czBtn" onmousedown="ptzControl(10)" onmouseup="zoomStop()">
+                                    <i>锛�</i>
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="pdgxq-m1-right sp-box" style="height: 410px;margin-top: 10px">
+                        <div class="pdgxq-H">
+                            <h3>
+                                <i></i>璁惧鍒楄〃
+                            </h3>
+                        </div>
+                        <div class="sp-table-box">
+                            <div class="sp-table">
+
+                                <table class="layui-table pdgxq-table1" lay-skin="nob">
+                                    <colgroup>
+                                        <col width="70%">
+                                        <col width="15%">
+                                        <col width="15%">
+                                    </colgroup>
+                                    <thead>
+                                    <tr>
+                                        <th>鍚嶇О</th>
+                                        <th>绫诲瀷</th>
+                                        <th>鐘舵��</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody id="cameraList">
+
+                                    </tbody>
+                                </table>
+
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <!--pdgxq-m1-left end-->
+            </div>
+            <!--sp-boxWrap end-->
+        </div>
+    </div>
+    <!--jmkt-main end-->
+</div>
+<!--i-container end-->
+
+
+<script th:inline="javascript">
+    var listCamera = [[${listCamera}]];
+</script>
+<script th:src="@{/js/jquery.min.js}"></script>
+<script th:src="@{/ajax/libs/layui/layui.js}"></script>
+<script th:src="@{/common/constant.js}"></script>
+<script th:src="@{/security/video-list-dept.js}"></script>
+<script th:src="@{/security/video-control.js}"></script>
+</body>
+</html>
diff --git a/fzzy-igdss-web/src/main/resources/templates/security/video-list.html b/fzzy-igdss-web/src/main/resources/templates/security/video-list.html
deleted file mode 100644
index e18f386..0000000
--- a/fzzy-igdss-web/src/main/resources/templates/security/video-list.html
+++ /dev/null
@@ -1,236 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-cn" xmlns:th=http://www.thymeleaf.org>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
-	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-	<meta name="renderer" content="webkit">
-	<title>鏅烘収绮簱绠$悊骞冲彴-鐩戞帶鍒楄〃</title>
-
-	<link rel="stylesheet" th:href="@{/ajax/libs/layui/css/layui.css}"/>
-	<link rel="stylesheet" th:href="@{/security/video-list.css}">
-
-	<style>
-		html, body, .full {
-			width: 100%;
-			height: 100%;
-			overflow-y: hidden;
-		}
-
-		.layui-fluid {
-			position: relative;
-			margin: 0 auto;
-			padding: unset;
-		}
-
-		.layui-col-space20 {
-			margin: unset;
-		}
-
-		.layui-col-space20>* {
-			padding: 10px 5px;
-		}
-
-		.sp-showItem2 {
-			height: 690px;
-		}
-
-		.sp-box {
-			height: 760px;
-		}
-
-		.sp-rl>span {
-			line-height: 50px;
-			color: #bbc3cd;
-			font-size: 20px;
-		}
-
-		.sp-table {
-			height: 732px;
-			width: 425px;
-		}
-
-		.pdgxq-table1 {
-			background-color: transparent;
-			margin: 0;
-		}
-
-		.pdgxq-table1 thead tr th {
-			color: #ef344a;
-		}
-
-		.pdgxq-table1 thead tr {
-			background: #141C25 !important;
-			border-bottom: 1px solid #ef344a;
-		}
-
-		.layui-table td, .layui-table th {
-			padding: 9px 5px;
-		}
-
-		.pdgxq-table1 th, .pdgxq-table1 td {
-			text-align: center;
-			min-height: 32px;
-			line-height: 32px;
-			font-size: 14px;
-		}
-
-		.pdgxq-table1 tbody tr:nth-child(odd) {
-			background-color: #262d33;
-		}
-
-		.pdgxq-table1 td em {
-			color: #ef344a;
-		}
-
-		.layui-table td, .layui-table th {
-			padding: 9px 5px;
-		}
-
-		.pdgxq-table1 td {
-			color: #fff;
-			cursor: pointer;
-		}
-		.video {
-			width: 100%;
-			height: 100%;
-		}
-	</style>
-</head>
-
-<body class="pdgxq-body">
-<div class="i-container">
-	<div class="jmkt-main">
-		<div class="layui-fluid">
-			<div class="sp-boxWrap layui-row layui-col-space20">
-				<div class="layui-col-lg9 layui-col-md9">
-					<div class="pdgxq-m1-left sp-box">
-
-						<div class="pdgxq-H">
-							<h3>
-								<i></i>瑙嗛瀹炴椂棰勮
-							</h3>
-						</div>
-
-						<div class="sp-tab-bd" style="padding: 5px 10px 15px 10px;">
-							<div class="sp-showBox layui-row show">
-								<div class="layui-col-lg12 layui-col-md12">
-									<div class="sp-showItem2" onmouseover="showPtz()"
-										 onmouseout="disPtz()">
-										<!-- 浣跨敤鏈湴VLC鎻掍欢鎾斁 -->
-										<div id="vlcPlayer" style="display: none; width: 100%; height: 100%"></div>
-
-<!--										&lt;!&ndash; 浣跨敤鎾斁鍣ㄦ挱鏀� &ndash;&gt;-->
-<!--										<easy-player id="easyPlayer" style="display: none;" live="true" show-custom-button="true" auto-play="true" muted="true"></easy-player>-->
-
-<!--										&lt;!&ndash; 浣跨敤IFrame鎾斁 &ndash;&gt;-->
-<!--										<iframe id="iframePlayer" src="" style="display: none;" width="100%" height="100%" allowfullscreen></iframe>-->
-
-										<!-- 浣跨敤WebRtc鎾斁 -->
-										<video class="video" id="video" autoplay="" muted="" playsinline="">
-
-										<!-- 浜戝彴鎺у埗 -->
-										<div class="ptz-block" id="ptz-block" style="opacity: 0;">
-											<div class="ptzBlock">
-												<div class="ptz-block-box">
-													<div title="涓�" onmousedown="mouseDownPTZControl(1);"
-														 onmouseup="mouseUpPTZControl();"
-														 class="ptz-cell direction ptz-up">
-														<i class="layui-icon layui-icon-up"></i>
-													</div>
-													<div title="宸�" onmousedown="mouseDownPTZControl(3);"
-														 onmouseup="mouseUpPTZControl();"
-														 class="ptz-cell direction ptz-left">
-														<i class="layui-icon layui-icon-left"></i>
-													</div>
-													<div title="浜戝彴鎺у埗"
-														 class="ptz-center layui-icon layui-icon-voice"></div>
-													<div title="鍙�" onmousedown="mouseDownPTZControl(4);"
-														 onmouseup="mouseUpPTZControl();"
-														 class="ptz-cell direction ptz-right">
-														<i class="layui-icon layui-icon-right"></i>
-													</div>
-													<div title="涓�" onmousedown="mouseDownPTZControl(2);"
-														 onmouseup="mouseUpPTZControl();"
-														 class="ptz-cell direction ptz-down">
-														<i class="layui-icon layui-icon-down"></i>
-													</div>
-												</div>
-												<div title="浜戝彴閫熷害">
-													<div class="ptz-input el-input el-input--mini">
-														<input type="number" autocomplete="off" value='120'
-															   min="0" max="255" class="el-input__inner">
-													</div>
-												</div>
-												<div title="鏀惧ぇ" onmousedown="PTZZoomIn()"
-													 onmouseup="PTZZoomStop()"
-													 class="ptz-cell ptz-btn ptz-plus">
-													<i class="layui-icon layui-icon-addition"></i>
-												</div>
-												<div title="缂╁皬" onmousedown="PTZZoomout()"
-													 onmouseup="PTZZoomStop()"
-													 class="ptz-cell ptz-btn ptz-minus">
-													<i class="layui-icon layui-icon-subtraction"></i>
-												</div>
-											</div>
-										</div>
-										<!-- 浜戝彴鎺у埗 END -->
-
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-				<!--pdgxq-m1-left end-->
-				<div class="layui-col-lg3 layui-col-md3">
-					<div class="pdgxq-m1-right sp-box" style="height: 760px;">
-						<div class="pdgxq-H">
-							<h3>
-								<i></i>璁惧鍒楄〃
-							</h3>
-						</div>
-						<div class="sp-table-box">
-							<div class="sp-table">
-
-								<table class="layui-table pdgxq-table1" lay-skin="nob">
-									<colgroup>
-										<col width="70%">
-										<col width="15%">
-										<col width="15%">
-									</colgroup>
-									<thead>
-									<tr>
-										<th>鍚嶇О</th>
-										<th>绫诲瀷</th>
-										<th>鐘舵��</th>
-									</tr>
-									</thead>
-									<tbody id="cameraList">
-
-									</tbody>
-								</table>
-
-							</div>
-						</div>
-					</div>
-				</div>
-				<!--pdgxq-m1-left end-->
-			</div>
-			<!--sp-boxWrap end-->
-		</div>
-	</div>
-	<!--jmkt-main end-->
-</div>
-<!--i-container end-->
-
-
-<script th:inline="javascript">
-	var listCamera = [[${listCamera}]];
-</script>
-<script th:src="@{/js/jquery.min.js}"></script>
-<script th:src="@{/ajax/libs/layui/layui.js}"></script>
-<script th:src="@{/common/constant.js}"></script>
-<script th:src="@{/security/video-list.js}"></script>
-</body>
-</html>

--
Gitblit v1.9.3