czt
昨天 51faf3e9c3c613e7fb12db6c88356946f2429e0c
调整安防视频页面及逻辑
已重命名5个文件
已删除2个文件
已添加11个文件
已修改7个文件
1444 ■■■■ 文件已修改
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/AbstractApiCameraService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraManager.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/ApiCameraService.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraData.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraResp.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiSnapReq.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPlayServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultPtzServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/impl/DefaultSnapServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraPtzType.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/CameraSnapType.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/SnapType.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Camera.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/inout/InoutApiController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SecurityController.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/security/video-aerial-dept.js 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/security/video-control.js 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/security/video-list-dept.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/security/video-list.css 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/security/video-aerial-dept.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/security/video-list-dept.html 355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/security/video-list.html 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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, "当前协议无需执行当前协议");
    }
}
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));
        }
    }
    /**
     *  æ ¹æ®ç±»åž‹æ ‡ç­¾å°è£…不同的接口实现,
     *
     * @param type å¯ä»¥æ˜¯playType,可以是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;
    }
}
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 è§†é¢‘流媒体调用接口,通过系统配置的播放方式调用不同的流媒体实现。
 * @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);
    /**
     * æ’­æ”¾è¿žæŽ¥ä¿æŒåœ¨çº¿ï¼Œé’ˆå¯¹éœ€è¦å½“前接口的流媒体生效
     *
     * @param apiCameraDto
     * @return
     */
    ApiCameraResp keepAlive(ApiCameraData apiCameraDto);
    /**
     * é€šè¿‡æµåª’体接口调用流媒体配置的摄像头信息
     *
     * @param apiCameraDto
     * @return
     */
    List<Camera> searchCamera(ApiCameraData apiCameraDto);
    /**
     * æŠ“拍接口,需要根据抓拍方式调整
     *
     * @param apiCameraDto
     * @return
     */
    ApiCameraResp snapImg(ApiSnapReq apiCameraDto);
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraData.java
ÎļþÃû´Ó fzzy-igdss-core/src/main/java/com/fzzy/igds/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;
    /**
     * è¯·æ±‚æ–¹IP,用于判断是内网播放,还是外网播放
     * æ˜¯å¦ä½¿ç”¨å¤–网播放地址默认否
     */
    private String requireIp;
    private boolean extNetwork = false;
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/camera/data/ApiCameraResp.java
ÎļþÃû´Ó fzzy-igdss-core/src/main/java/com/fzzy/igds/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
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;
    //系统内部摄像头主键或者配置ID
    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;
}
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();
    }
}
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();
    }
}
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();
    }
}
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;
    }
}
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;
    }
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/SnapType.java
ÎļþÒÑɾ³ý
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";
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;
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()}
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>
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;
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;
    }
    /**
     * é¸Ÿçž°å›¾é¡µé¢ -- è§†é¢‘播放,通过播放参数不同跳转不同页面播放
fzzy-igdss-web/src/main/resources/static/security/video-aerial-dept.js
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=删除
 * æ•°æ®å°†curCamera对象封装为APi å¯¹è±¡å‘送给云平台
 */
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'});
            }
        }
    })
}
fzzy-igdss-web/src/main/resources/static/security/video-list-dept.js
ÎļþÃû´Ó fzzy-igdss-web/src/main/resources/static/security/video-list.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
 */
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;
}
fzzy-igdss-web/src/main/resources/templates/security/video-aerial-dept.html
ÎļþÃû´Ó fzzy-igdss-web/src/main/resources/templates/security/video-aerial.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;">
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>
fzzy-igdss-web/src/main/resources/templates/security/video-list.html
ÎļþÒÑɾ³ý