已重命名5个文件
已删除2个文件
已添加12个文件
已修改28个文件
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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, "å½ååè®®æ éæ§è¡å½ååè®®"); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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/data/ApiCameraData.java ÐÞ¸Ä |
| | |
| | | package com.fzzy.igds.data; |
| | | package com.fzzy.igds.camera.data; |
| | | |
| | | import lombok.Data; |
| | | |
| | |
| | | * IP |
| | | */ |
| | | private String ip; |
| | | |
| | | /** |
| | | * WEBç«¯å£ |
| | | */ |
| | | private Integer webPort; |
| | | /** |
| | | * æ§å¶ç«¯å£ |
| | | */ |
| | | private Integer controlPort; |
| | | private Integer ctrlPort; |
| | | /** |
| | | * ææ¾æ¹å¼ |
| | | */ |
| | |
| | | * æææ¹å¼ |
| | | **/ |
| | | private String snapType; |
| | | |
| | | /** |
| | | * äºå°æ¹å¼ |
| | | **/ |
| | | private String ptzType; |
| | | /** |
| | | * çæ§SN |
| | | */ |
| | |
| | | */ |
| | | 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; |
| | | /** |
| | |
| | | */ |
| | | private String preset; |
| | | /** |
| | | * RTSPå°å |
| | | * åªä½å°å |
| | | */ |
| | | private String mediaAddr; |
| | | /** |
| | |
| | | * å¤ç½ææ¾å°å |
| | | */ |
| | | private String urlOut; |
| | | |
| | | /** |
| | | * è¯·æ±æ¹IPï¼ç¨äºå¤ææ¯å
ç½ææ¾ï¼è¿æ¯å¤ç½ææ¾ |
| | | * æ¯å¦ä½¿ç¨å¤ç½ææ¾å°åé»è®¤å¦ |
| | | */ |
| | | private String requireIp; |
| | | private boolean extNetwork = false; |
| | | } |
| ÎļþÃû´Ó fzzy-igdss-core/src/main/java/com/fzzy/igds/data/ApiCameraResp.java ÐÞ¸Ä |
| | |
| | | package com.fzzy.igds.data; |
| | | package com.fzzy.igds.camera.data; |
| | | |
| | | import lombok.Data; |
| | | |
| | |
| | | private String playUrl; //ææ¾å°å |
| | | private String playType; //ææ¾æ¹å¼ |
| | | private String snapType; //ææ¾æ¹å¼ |
| | | private String ptzType; //äºå°æ¹å¼ |
| | | private String appkey; //å®é²å¹³å°appKey |
| | | private String secret; //å®é²å¹³å°ç§é¥ |
| | | private String ip; //设å¤IP |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | @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"; |
| | |
| | | private String userId; |
| | | |
| | | @Id |
| | | @Column(name = "batch_id", columnDefinition = "varchar(40) COMMENT 'çæ¬¡ç¼å·'") |
| | | @TableField("batch_id") |
| | | private String batchId; |
| | | @Column(name = "conf_id", columnDefinition = "varchar(40) COMMENT 'çæ¬¡ç¼å·'") |
| | | @TableField("conf_id") |
| | | private String confId; |
| | | |
| | | @Column(name = "conf_name", columnDefinition = "varchar(40) COMMENT 'çæ¬¡åç§°'") |
| | | @TableField("conf_name") |
| | | private String confName; |
| | | |
| | | @Column(name = "dept_id", columnDefinition = "varchar(40) COMMENT 'æå±åºåº'") |
| | | @TableField("dept_id") |
| | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @Id |
| | | @Column(name = "batch_id", columnDefinition = "varchar(40) COMMENT 'çæ¬¡ç¼å·'") |
| | | @TableId(value = "batch_id", type = IdType.NONE) |
| | | @TableField("batch_id") |
| | | private String batchId; |
| | | @Column(name = "id", columnDefinition = "varchar(40) COMMENT 'çæ¬¡ç¼å·'") |
| | | @TableId(value = "id", type = IdType.NONE) |
| | | @TableField("id") |
| | | private String id; |
| | | |
| | | @Column(name = "dept_id", columnDefinition = "varchar(40) COMMENT 'æå±åºåº'") |
| | | @TableField("dept_id") |
| | | private String deptId; |
| | | |
| | | @Column(name = "batch_name", columnDefinition = "varchar(40) COMMENT 'çæ¬¡åç§°'") |
| | | @TableField("batch_name") |
| | | private String batchName; |
| | | @Column(name = "name", columnDefinition = "varchar(40) COMMENT 'çæ¬¡åç§°'") |
| | | @TableField("name") |
| | | private String name; |
| | | |
| | | @Column(name = "user_name", columnDefinition = "varchar(40) COMMENT 'å·¡é»äºº'") |
| | | @Column(name = "user_id", columnDefinition = "varchar(200) COMMENT 'å·¡é»äººè´¦å·'") |
| | | @TableField("user_id") |
| | | private String userId; |
| | | |
| | | @Column(name = "user_name", columnDefinition = "varchar(200) COMMENT 'å·¡é»äºº'") |
| | | @TableField("user_name") |
| | | private String userName; |
| | | |
| | |
| | | |
| | | private String userId; |
| | | |
| | | private String batchId; |
| | | private String confId; |
| | | |
| | | public PatrolKey(){ |
| | | super(); |
| | |
| | | */ |
| | | 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; |
| | |
| | | */ |
| | | public QueryWrapper<PatrolConf> getQueryWrapper(PatrolConf param) { |
| | | QueryWrapper<PatrolConf> queryWrapper = new QueryWrapper<>(); |
| | | if (param == null) { |
| | | param = new PatrolConf(); |
| | | } |
| | | |
| | | // 设置å
¬å¸IDå¹¶ä½ä¸ºæ¥è¯¢æ¡ä»¶ |
| | | param.setCompanyId(ContextUtil.getCompanyId()); |
| | | queryWrapper.eq("company_id", param.getCompanyId()); |
| | | |
| | | if (StringUtils.isNotEmpty(param.getDeptId())) { |
| | | queryWrapper.eq("dept_id", param.getDeptId()); |
| | | } |
| | | |
| | | |
| | | // æå建æ¶é´ååºæåº |
| | |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | public int insertData(PatrolConf param) { |
| | | if (StringUtils.isEmpty(param.getBatchId())) { |
| | | param.setBatchId(ContextUtil.generateId()); |
| | | if (StringUtils.isEmpty(param.getId())) { |
| | | param.setId(ContextUtil.generateId()); |
| | | } |
| | | return patrolConfMapper.insert(param); |
| | | } |
| | |
| | | if (StringUtils.isNotBlank(param.getDeptId())) { |
| | | queryWrapper.eq("dept_id", param.getDeptId()); |
| | | } |
| | | |
| | | if (StringUtils.isNotBlank(param.getUserName())) { |
| | | queryWrapper.like("user_name", param.getUserName()); |
| | | } |
| | | if (StringUtils.isNotBlank(param.getConfName())) { |
| | | queryWrapper.like("conf_name", param.getConfName()); |
| | | } |
| | | |
| | | queryWrapper.orderByDesc("create_time"); |
| | | |
| | | return queryWrapper; |
| | |
| | | } |
| | | |
| | | /** |
| | | * äºå°æ¹å¼ |
| | | * ${dorado.getDataProvider("dicPR#triggerPtzType").getResult()} |
| | | * |
| | | * @return |
| | | */ |
| | | @DataProvider |
| | | public List<SysDictData> triggerPtzType() { |
| | | return dicService.triggerPtzType(); |
| | | } |
| | | /** |
| | | * æ£éªç±»å« |
| | | * <p> |
| | | * ${dorado.getDataProvider("dicPR#triggerCheckType").getResult()} |
| | |
| | | <Property name="keyProperty">id</Property> |
| | | <Property name="valueProperty">kqmc</Property> |
| | | </Property> |
| | | <Property name="readOnly">true</Property> |
| | | </PropertyDef> |
| | | <PropertyDef name="name"> |
| | | <Property></Property> |
| | |
| | | </PropertyDef> |
| | | <PropertyDef name="sort"> |
| | | <Property name="label">é
å¥åºå·</Property> |
| | | <Property name="required">true</Property> |
| | | <Property name="mapping"> |
| | | <Property name="mapValues"> |
| | | <Collection> |
| | |
| | | <Property name="label">æææ¹å¼</Property> |
| | | <Property name="mapping"> |
| | | <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerSnapType").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("dicPR#triggerPtzType").getResult()}</Property> |
| | | <Property name="keyProperty">dictValue</Property> |
| | | <Property name="valueProperty">dictLabel</Property> |
| | | </Property> |
| | |
| | | <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/> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text1.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text2.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text3.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text4.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text5.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text6.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text7.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text8.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text9.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text10.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | <Property name="caption">éæ©</Property> |
| | | <Property name="iconClass">fa fa-check</Property> |
| | | <Property name="exClassName">btn1</Property> |
| | | </Button> |
| | | </Container> |
| | | <Container> |
| | |
| | | </Label> |
| | | <Button layoutConstraint="right"> |
| | | <ClientEvent name="onClick">view.get("#mediaAddr").set("text",view.get("#text11.text"));
 |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </ClientEvent> |
| | | view.get("#dialogMeidaSelect").hide();
 |
| | | </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> |
| | |
| | | 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; |
| | |
| | | |
| | | import com.fzzy.igds.domain.PatrolConf; |
| | | import com.fzzy.igds.utils.ContextUtil; |
| | | import com.fzzy.sys.manager.common.CommonManager; |
| | | import com.fzzy.sys.manager.security.PatrolConfManager; |
| | | import com.ruoyi.common.annotation.Log; |
| | | import com.ruoyi.common.core.controller.BaseController; |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.page.TableDataInfo; |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.ruoyi.common.utils.ShiroUtils; |
| | |
| | | @Resource |
| | | private PatrolConfManager patrolConfManager; |
| | | |
| | | @Resource |
| | | private CommonManager commonManager; |
| | | |
| | | /** |
| | | * å·¡æ´é
ç½®é¡µé¢ |
| | | */ |
| | | @GetMapping() |
| | | public String patrolConf() { |
| | | public String patrolConf(ModelMap mmap) { |
| | | return prefix + "/patrolConf"; |
| | | } |
| | | |
| | |
| | | */ |
| | | @GetMapping("/add") |
| | | public String add(ModelMap mmap) { |
| | | //å·¡é»äººå表 |
| | | mmap.put("userList", commonManager.listUserData()); |
| | | return prefix + "/add"; |
| | | } |
| | | |
| | |
| | | } |
| | | param.setCreateBy(getLoginName()); |
| | | param.setCreateTime(new Date()); |
| | | if (StringUtils.isEmpty(param.getBatchId())) { |
| | | param.setBatchId(ContextUtil.generateId()); |
| | | if (StringUtils.isEmpty(param.getId())) { |
| | | param.setId(ContextUtil.generateId()); |
| | | } |
| | | return toAjax(patrolConfManager.insertData(param)); |
| | | } |
| | |
| | | public String edit(@PathVariable("id") String id, ModelMap mmap) { |
| | | PatrolConf record = patrolConfManager.selectById(id); |
| | | mmap.put("patrolConf", record); |
| | | //å·¡é»äººå表 |
| | | mmap.put("userList", commonManager.listUserData()); |
| | | return prefix + "/edit"; |
| | | } |
| | | |
| | |
| | | } |
| | | param.setUpdateBy(getLoginName()); |
| | | param.setUpdateTime(new Date()); |
| | | PatrolConf patrolConf = patrolConfManager.selectById(param.getBatchId()); |
| | | PatrolConf patrolConf = patrolConfManager.selectById(param.getId()); |
| | | if (patrolConf == null) { |
| | | param.setBatchId(ContextUtil.generateId()); |
| | | param.setId(ContextUtil.generateId()); |
| | | return toAjax(patrolConfManager.insertData(param)); |
| | | } |
| | | |
| | |
| | | @PostMapping("/remove") |
| | | @ResponseBody |
| | | public AjaxResult remove(String ids) { |
| | | patrolConfManager.deleteDataById( ids); |
| | | patrolConfManager.deleteDataById(ids); |
| | | return success(); |
| | | } |
| | | } |
| | |
| | | package com.fzzy.sys.controller.security; |
| | | |
| | | import com.fzzy.igds.domain.Patrol; |
| | | import com.fzzy.igds.domain.PatrolConf; |
| | | import com.fzzy.igds.utils.ContextUtil; |
| | | import com.fzzy.sys.manager.common.CommonManager; |
| | | import com.fzzy.sys.manager.security.PatrolConfManager; |
| | | import com.fzzy.sys.manager.security.PatrolManager; |
| | | import com.ruoyi.common.annotation.Log; |
| | | import com.ruoyi.common.core.controller.BaseController; |
| | |
| | | @Resource |
| | | private PatrolManager patrolManager; |
| | | |
| | | @Resource |
| | | private PatrolConfManager patrolConfManager; |
| | | |
| | | |
| | | @Resource |
| | | private CommonManager commonManager; |
| | | /** |
| | | * çµåå·¡æ´é¡µé¢ |
| | | * |
| | |
| | | * @date 2025/12/06 |
| | | */ |
| | | @GetMapping() |
| | | public String patrol() { |
| | | public String patrol(ModelMap mmap) { |
| | | //è·ååºåºåæ¾å表 |
| | | mmap.put("deptList", commonManager.listDeptData()); |
| | | return prefix + "/patrol"; |
| | | } |
| | | |
| | |
| | | @GetMapping("/{patrolId}") |
| | | public String getPatrolRecordById(@PathVariable("patrolId") String patrolId, Model model) { |
| | | IgdsBaseParam param = new IgdsBaseParam(); |
| | | param.setPage(1); |
| | | param.setLimit(6); |
| | | param.setKey(patrolId); |
| | | Page<PatrolRecord> records = patrolRecordManager.pageData(param); |
| | | model.addAttribute("patrolRecordList", records.getRecords()); |
| | | model.addAttribute("currentPage", records.getCurrent()); |
| | | model.addAttribute("totalItems", records.getTotal()); |
| | | model.addAttribute("pageSize", records.getSize()); |
| | | model.addAttribute("patrolId", patrolId); |
| | | return prefix + "/patrolRecord"; |
| | | } |
| | | |
| | | /** |
| | | * è·å轨迹å¾é¡µé¢ |
| | | */ |
| | | @GetMapping("trajectoryMap/{patrolId}") |
| | | public String showTrajectoryMap(@PathVariable("patrolId") String patrolId, Model model) { |
| | | |
| | | IgdsBaseParam param = new IgdsBaseParam(); |
| | | param.setKey(patrolId); |
| | | List<PatrolRecord> trackPoints = patrolRecordManager.listAll(param); |
| | | model.addAttribute("trackPoints", trackPoints); |
| | | |
| | | return prefix + "/trajectoryMap"; |
| | | model.addAttribute("patrolRecordList", trackPoints); |
| | | return prefix + "/patrolRecord"; |
| | | } |
| | | // |
| | | // /** |
| | | // * è·å轨迹å¾é¡µé¢ |
| | | // */ |
| | | // @GetMapping("trajectoryMap/{patrolId}") |
| | | // public String showTrajectoryMap(@PathVariable("patrolId") String patrolId, Model model) { |
| | | // |
| | | // IgdsBaseParam param = new IgdsBaseParam(); |
| | | // param.setKey(patrolId); |
| | | // List<PatrolRecord> trackPoints = patrolRecordManager.listAll(param); |
| | | // model.addAttribute("trackPoints", trackPoints); |
| | | // |
| | | // return prefix + "/trajectoryMap"; |
| | | // } |
| | | |
| | | /** |
| | | * å页è·åæ°æ® |
| | |
| | | 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; |
| | | |
| | | /** |
| | |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | | * é¸ç°å¾é¡µé¢ -- è§é¢ææ¾ï¼éè¿ææ¾åæ°ä¸å跳转ä¸åé¡µé¢ææ¾ |
| | |
| | | |
| | | import com.fzzy.igds.constant.DepotType; |
| | | import com.fzzy.igds.domain.Depot; |
| | | import com.fzzy.igds.domain.Dept; |
| | | import com.fzzy.igds.service.CoreDeptService; |
| | | import com.fzzy.igds.service.DepotService; |
| | | import com.fzzy.igds.service.DicService; |
| | | import com.fzzy.igds.utils.ContextUtil; |
| | | import com.ruoyi.common.core.domain.entity.SysDictData; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | |
| | | @Slf4j |
| | | @Component |
| | | public class CommonManager { |
| | | |
| | | @Resource |
| | | private DepotService depotService; |
| | | @Resource |
| | | private DicService dicService; |
| | | @Resource |
| | | private CoreDeptService coreDeptService; |
| | | |
| | | @Autowired |
| | | private ISysUserService userService; |
| | | |
| | | /** |
| | | * æ ¹æ®åå
¸ç±»åè·ååå
¸å表 |
| | | * |
| | | * @param parentCode |
| | | * @param companyId |
| | | * @return |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åååºå表 |
| | | * |
| | | * @author sgj |
| | | * @date 2025/12/12 |
| | | */ |
| | | public List<Dept> listDeptData() { |
| | | return coreDeptService.getDeptData(); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®ä»åºç¼ç è·åä»åºç±»å |
| | | * |
| | | * @param depotId |
| | | * @return |
| | | */ |
| | |
| | | |
| | | return depotType; |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·å表 |
| | | * |
| | | * @author sgj |
| | | * @date 2025/12/12 |
| | | */ |
| | | public List<SysUser> listUserData() { |
| | | SysUser user = new SysUser() ; |
| | | user.setCompanyId(ContextUtil.getCompanyId()); |
| | | user.setDeptId(Long.valueOf(ContextUtil.subDeptId(null))); |
| | | return userService.selectUserList(user); |
| | | } |
| | | } |
| | |
| | | List<DicArea> list = new ArrayList<>(); |
| | | list.add(area); |
| | | if (Constant.AREA_TYPE_1.equals(area.getType())) { |
| | | List<DicArea> children = dicAreaService.listData(area.getCode(), null, null); |
| | | if (null != children && children.size() > 0) { |
| | | //å¸å·çº§å«ï¼åªæ¥è¯¢ä¼ç |
| | | List<DicArea> children = dicAreaService.listData(null, null, "654000"); |
| | | if (null != children && !children.isEmpty()) { |
| | | for (DicArea child : children) { |
| | | if (Constant.AREA_TYPE_2.equals(child.getType())) { |
| | | //åºå¿ |
| | | List<DicArea> childrenItem = dicAreaService.listData(child.getCode(), null, null); |
| | | if (null != childrenItem && !childrenItem.isEmpty()) { |
| | | list.addAll(childrenItem); |
| | | } |
| | | } |
| | | } |
| | | list.addAll(children); |
| | | } |
| | | } |
| | |
| | | */ |
| | | public List<DicArea> getAreaAndChild(String areaCode) { |
| | | |
| | | List<DicArea> areaList = dicAreaService.listData(null, null, areaCode); |
| | | if (null == areaList || areaList.isEmpty()) { |
| | | DicArea area = dicAreaService.listDicAreaByCode(areaCode); |
| | | if (null == area) { |
| | | return null; |
| | | } |
| | | |
| | | List<DicArea> children; |
| | | for (DicArea dicArea : areaList) { |
| | | if (Constant.AREA_TYPE_1.equals(dicArea.getType())) { |
| | | children = dicAreaService.listData(dicArea.getCode(), null, null); |
| | | if (null != children && children.size() > 0) { |
| | | dicArea.setChildren(children); |
| | | List<DicArea> list = new ArrayList<>(); |
| | | if (Constant.AREA_TYPE_1.equals(area.getType())) { |
| | | //å¸å·çº§å«ï¼åªæ¥è¯¢ä¼ç |
| | | List<DicArea> children = dicAreaService.listData(null, null, "654000"); |
| | | if (null != children && !children.isEmpty()) { |
| | | for (DicArea child : children) { |
| | | if (Constant.AREA_TYPE_2.equals(child.getType())) { |
| | | //åºå¿ |
| | | List<DicArea> childrenItem = dicAreaService.listData(child.getCode(), null, null); |
| | | if (null != childrenItem && !childrenItem.isEmpty()) { |
| | | child.setChildren(childrenItem); |
| | | } |
| | | } |
| | | } |
| | | area.setChildren(children); |
| | | } |
| | | } |
| | | |
| | | return areaList; |
| | | } |
| | | list.add(area); |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return |
| | | */ |
| | | public List<Dept> getAllDept(String companyId) { |
| | | |
| | | return deptService.listDept(null, companyId, null); |
| | | } |
| | | } |
| | |
| | | /** |
| | | * è·åå¸å·ä¸åºåºä¿¡æ¯ |
| | | */ |
| | | function getDeptArea(province, county) { |
| | | function getDeptArea(province, city, county) { |
| | | var list = []; |
| | | if (deptList) { |
| | | //ç |
| | | if (province && province.length > 0) { |
| | | var str1 = province.substring(0, 2); |
| | | for (var i = 0; i < deptList.length; i++){ |
| | |
| | | list.push(deptList[i]); |
| | | } |
| | | } |
| | | |
| | | } |
| | | if (county && county.length > 0) { |
| | | var str2 = county.substring(0, 4); |
| | | //å¸å· |
| | | if (city && city.length > 0) { |
| | | var str2 = city.substring(0, 4); |
| | | for (var i = 0; i < deptList.length; i++) { |
| | | if(deptList[i].xzqhdm.startsWith(str2)){ |
| | | list.push(deptList[i]); |
| | | } |
| | | } |
| | | } |
| | | //åºå¿ |
| | | if (county && county.length > 0) { |
| | | for (var i = 0; i < deptList.length; i++) { |
| | | if(deptList[i].xzqhdm === county){ |
| | | list.push(deptList[i]); |
| | | } |
| | | } |
| | |
| | | /** |
| | | * ç¨æ·ç¹å»å叿è
å¿çº§åºçº§æ¸²æåºåºç¹ä½ |
| | | */ |
| | | function renderAreas(deptId) { |
| | | var d = allAreaMap[deptId]; |
| | | function renderAreas(code) { |
| | | var d = allAreaMap[code]; |
| | | if (d) { |
| | | closeInfoWindow(); |
| | | removeColor(); |
| | | delMarker(); |
| | | //map.setCity(deptId); |
| | | renderColor(deptId); |
| | | renderColor(code); |
| | | var a = []; |
| | | //ç |
| | | if ("1" == d.type) { |
| | | a = getDeptArea(deptId, "") |
| | | a = getDeptArea(code, "", ""); |
| | | } |
| | | //å¸å· |
| | | if ("2" == d.type) { |
| | | a = getDeptArea("", deptId) |
| | | a = getDeptArea("", code, "") |
| | | } |
| | | //åºå¿ |
| | | if ("3" == d.type) { |
| | | a = getDeptArea("", "", code) |
| | | } |
| | | if (a && a.length > 0) { |
| | | for (var i = 0; i < a.length; i++) { |
| | |
| | | } |
| | | } |
| | | //å·æ°æ°æ® |
| | | county = deptId; |
| | | county = code; |
| | | // ajaxFoodNum(); |
| | | } else { |
| | | console.log("没æè·åå°è¯¥è¡æ¿åºå:" + deptId); |
| | | console.log("没æè·åå°è¯¥è¡æ¿åºå:" + code); |
| | | } |
| | | } |
| | | |
| | |
| | | if (areaList) { |
| | | var html = ""; |
| | | var childs = []; |
| | | var childsItem = []; |
| | | var areas = []; |
| | | for (var i = 0; i < areaList.length; i++) { |
| | | html += "<div style=\"width: 305px; overflow: hidden\">" + |
| | |
| | | (areaList[i].name ? areaList[i].name : "") + |
| | | "</a>" + |
| | | "</div>"; |
| | | if (areaList[i].children && areaList[i].children.length > 0) { |
| | | if (areaList[i].children && areaList[i].children.length > 0) { //å¸å· |
| | | childs = areaList[i].children; |
| | | for (var j = 0; j < childs.length; j++) { |
| | | html += "<ul class=\"sup-menu-ul menu-h\">" + |
| | |
| | | (childs[j].name ? childs[j].name : "") + |
| | | "</a>" + |
| | | "</div>"; |
| | | areas = getDeptArea("", childs[j].code); |
| | | if (areas && areas.length > 0) { |
| | | for (var k = 0; k < areas.length; k++) { |
| | | html += "<div class=\"sup-menu-box\">" + |
| | | "<p>" + |
| | | "<span class=\"i-icon32 fl\"><img src=\"/img/web/group/icon-kuqu.png\"/></span>" + |
| | | "<a href=\"#\" onclick=\"showAreaInfo('" + areas[k].id + "')\">" + areas[k].kqmc + "</a>" + |
| | | "</p>" + |
| | | if (childs[j].children && childs[j].children.length > 0) { //å¸å· |
| | | childsItem = childs[j].children; |
| | | for (var j = 0; j < childsItem.length; j++) { |
| | | html += "<ul class=\"sup-menu-ul menu-h\">" + |
| | | "<li>" + |
| | | "<div class=\"sup-menu-h\">" + |
| | | "<i class=\"i-icon fl\"><img src=\"/img/web/group/icon-sj.png\"/></i>" + |
| | | "<a href=\"###\" onclick=\"renderAreas('" + childsItem[j].code + "')\">" + |
| | | "<span class=\"i-icon32 fl\"><img src=\"/img/web/group/c-i2.png\"/></span>" + |
| | | (childsItem[j].name ? childsItem[j].name : "") + |
| | | "</a>" + |
| | | "</div>"; |
| | | areas = getDeptArea("","", childsItem[j].code); |
| | | if (areas && areas.length > 0) { |
| | | for (var k = 0; k < areas.length; k++) { |
| | | html += "<div class=\"sup-menu-box\">" + |
| | | "<p>" + |
| | | "<span class=\"i-icon32 fl\"><img src=\"/img/web/group/icon-kuqu.png\"/></span>" + |
| | | "<a href=\"#\" onclick=\"showAreaInfo('" + areas[k].id + "')\">" + areas[k].kqmc + "</a>" + |
| | | "</p>" + |
| | | "</div>"; |
| | | } |
| | | } |
| | | html += "</li>" + |
| | | "</ul>"; |
| | | } |
| | | } else { |
| | | //没æåèç¹ï¼ç´æ¥å°±æ¯åºåº |
| | | areas = getDeptArea("", "", areaList[i].code); |
| | | if (areas && areas.length > 0) { |
| | | for (var k = 0; k < areas.length; k++) { |
| | | html += "<ul class=\"sup-menu-ul\">" + |
| | | "<li>" + |
| | | "<div class=\"sup-menu-h\">" + |
| | | "<i class=\"i-icon fl\"><img src=\"/img/web/group/icon-sj.png\"/></i>" + |
| | | "<a href=\"###\" onclick=\"renderAreas('" + areas[k].code + "')\">" + |
| | | "<span class=\"i-icon32 fl\"><img src=\"/img/web/group/icon-kuqu.png\"/></span>" + |
| | | (areas[k].name ? areas[k].name : "") + |
| | | "</a>" + |
| | | "</div>"; |
| | | html += "<div class=\"sup-menu-box\">" + |
| | | "</div>"; |
| | | html += "</li>" + |
| | | "</ul>"; |
| | | |
| | | } |
| | | } |
| | | } |
| | | html += "</li>" + |
| | | "</ul>"; |
| | | } |
| | | } else { |
| | | //没æåèç¹ï¼ç´æ¥å°±æ¯åºçº§å« |
| | | areas = getDeptArea("", areaList[i].code); |
| | | //没æåèç¹ï¼ç´æ¥å°±æ¯åºåº |
| | | areas = getDeptArea("", "",areaList[i].code); |
| | | if (areas && areas.length > 0) { |
| | | for (var k = 0; k < areas.length; k++) { |
| | | html += "<ul class=\"sup-menu-ul\">" + |
| | |
| | | var number3 = 2;// å¨é饼å¾åæ¢æ»æ°é |
| | | |
| | | var mapChart = null; |
| | | var geoMap = [{name: 'ä¹é²æ¨é½', value: [87.617733, 43.792818]}]; //é»è®¤ç¹ä½ |
| | | var geoMap = [{name: 'ä¼çåè¨å
èªæ²»å·', value: [81.317946, 43.92186]}]; //é»è®¤ç¹ä½ |
| | | var map = chinaMapOutline; //é»è®¤å è½½å
¨å½å°å¾ |
| | | $(function () { |
| | | // åå§åé¡µé¢ |
| | |
| | | initMap(); |
| | | |
| | | //å è½½æå®å°åºå°å¾ |
| | | renderMapPoints("æ°çç»´å¾å°èªæ²»åº"); |
| | | renderMapPoints("ä¹é²æ¨é½å¸,å
æçä¾å¸,åé²çªå¸,åå¯å¸,æååæèªæ²»å·,åå°å¡æèå¤èªæ²»å·,å·´é³éæ¥èå¤èªæ²»å·,é¿å
èå°åº,å
ååèæ¯å°å
åèªæ²»å·,åä»å°åº,åç°å°åº,ä¼çåè¨å
èªæ²»å·,å¡åå°åº,é¿åæ³°å°åº"); |
| | | // 请æ±åºåºä¿¡æ¯ |
| | | // ajaxDeptArea(); |
| | | // è·åå
¬å¸ä¿¡æ¯ |
| | |
| | | for (var i = 0; i < all.length; i++) { |
| | | if(all[i].properties.name == names[j]){ |
| | | map.features.push(all[i]); |
| | | geoMap.push({ |
| | | name: all[i].properties.centerName, |
| | | value: [all[i].properties.center[0], all[i].properties.center[1], 12] |
| | | }); |
| | | if(all[i].properties.name == "ä¼çåè¨å
èªæ²»å·"){ |
| | | geoMap.push({ |
| | | name: all[i].properties.centerName, |
| | | value: [all[i].properties.center[0], all[i].properties.center[1], 12] |
| | | }); |
| | | } |
| | | renderMap(); |
| | | break; |
| | | } |
| | |
| | | /* å¾çé¢è§å±æ ·å¼ */ |
| | | .img-preview { |
| | | display: none; |
| | | |
| | | #map { |
| | | width: 100vw; |
| | | height: 100vh; |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | background-color: rgba(0, 0, 0, 0.9); |
| | | z-index: 1000; |
| | | justify-content: center; |
| | | align-items: center; |
| | | z-index: 1; |
| | | } |
| | | |
| | | .preview-content { |
| | | max-width: 90%; |
| | | max-height: 90%; |
| | | position: relative; |
| | | } |
| | | |
| | | .preview-img { |
| | | max-width: 100%; |
| | | max-height: 90vh; |
| | | border-radius: 4px; |
| | | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); |
| | | } |
| | | |
| | | .close-preview { |
| | | position: absolute; |
| | | top: -40px; |
| | | right: -10px; |
| | | color: white; |
| | | font-size: 2rem; |
| | | cursor: pointer; |
| | | background: rgba(0, 0, 0, 0.5); |
| | | width: 40px; |
| | | height: 40px; |
| | | border-radius: 50%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .close-preview:hover { |
| | | background: rgba(255, 255, 255, 0.2); |
| | | transform: scale(1.1); |
| | | } |
| | | |
| | | /* å¾çç½æ ¼æ ·å¼ */ |
| | | .gallery-grid { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); |
| | | gap: 20px; |
| | | margin-bottom: 5px; |
| | | } |
| | | |
| | | .gallery-item { |
| | | background: white; |
| | | /* å³ä¾§è½¨è¿¹å¡çæ¬æµ®å± */ |
| | | .track-card-panel { |
| | | position: fixed; |
| | | top: 20px; |
| | | right: 20px; |
| | | bottom: 20px; |
| | | width: 380px; |
| | | background: #fff; |
| | | border-radius: 8px; |
| | | overflow: hidden; |
| | | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .gallery-item:hover { |
| | | transform: translateY(-5px); |
| | | box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12); |
| | | } |
| | | |
| | | .gallery-img { |
| | | width: 100%; |
| | | height: 240px; |
| | | object-fit: cover; |
| | | cursor: pointer; |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .gallery-img:hover { |
| | | opacity: 0.95; |
| | | } |
| | | |
| | | .gallery-info { |
| | | box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); |
| | | z-index: 10; /* å±çº§é«äºå°å¾ */ |
| | | padding: 15px; |
| | | overflow-y: auto; /* çºµåæ»å¨ */ |
| | | overflow-x: hidden; /* éèæ¨ªåæ»å¨ */ |
| | | } |
| | | |
| | | .gallery-header { |
| | | /* å¡ç颿¿æ é¢ */ |
| | | .panel-title { |
| | | font-size: 18px; |
| | | font-weight: 600; |
| | | color: #333; |
| | | padding-bottom: 10px; |
| | | border-bottom: 1px solid #e6e6e6; |
| | | margin-bottom: 15px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .gallery-title { |
| | | font-size: 1.5rem; |
| | | font-weight: 600; |
| | | .panel-title .count { |
| | | font-size: 14px; |
| | | color: #1890ff; |
| | | font-weight: normal; |
| | | } |
| | | /* å个轨迹å¡ç */ |
| | | .track-card { |
| | | padding: 12px; |
| | | border: 1px solid #f0f0f0; |
| | | border-radius: 6px; |
| | | margin-bottom: 10px; |
| | | cursor: pointer; |
| | | transition: all 0.2s ease; |
| | | } |
| | | .track-card:hover { |
| | | border-color: #1890ff; |
| | | background: #f5f8ff; |
| | | transform: translateX(-2px); |
| | | } |
| | | .track-card.active { |
| | | border-color: #1890ff; |
| | | background: #e6f7ff; |
| | | } |
| | | /* å¡çå
ä¿¡æ¯è¡ */ |
| | | .card-row { |
| | | display: flex; |
| | | margin-bottom: 6px; |
| | | font-size: 14px; |
| | | line-height: 1.5; |
| | | } |
| | | .card-row:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | .card-row .label { |
| | | width: 80px; |
| | | color: #666; |
| | | flex-shrink: 0; |
| | | } |
| | | .card-row .value { |
| | | color: #333; |
| | | margin: 0; |
| | | flex: 1; |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .gallery-meta { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 2px; |
| | | /* æ»å¨æ¡ç¾å */ |
| | | .track-card-panel::-webkit-scrollbar { |
| | | width: 6px; |
| | | } |
| | | |
| | | .meta-item { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 1.3rem; |
| | | color: #666; |
| | | .track-card-panel::-webkit-scrollbar-track { |
| | | background: #f5f5f5; |
| | | border-radius: 3px; |
| | | } |
| | | |
| | | .meta-item i { |
| | | width: 16px; |
| | | margin-right: 6px; |
| | | color: #999; |
| | | font-size: 1.25rem; |
| | | .track-card-panel::-webkit-scrollbar-thumb { |
| | | background: #d9d9d9; |
| | | border-radius: 3px; |
| | | } |
| | | |
| | | .gallery-filename i { |
| | | margin-right: 5px; |
| | | font-size: 0.7rem; |
| | | } |
| | | |
| | | /* æ ç¾æ ·å¼ */ |
| | | .gallery-tags { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | margin-left: auto; |
| | | gap: 3px; |
| | | /*margin: 12px 0;*/ |
| | | } |
| | | |
| | | |
| | | /* åé¡µæ ·å¼ */ |
| | | .pagination-container { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | width: 100%; |
| | | /*margin-top: 40px;*/ |
| | | } |
| | | |
| | | /* ç©ºç¶ææ ·å¼ */ |
| | | .empty-state { |
| | | grid-column: 1 / -1; |
| | | text-align: center; |
| | | padding: 60px 20px; |
| | | color: #999; |
| | | } |
| | | |
| | | .empty-state i { |
| | | font-size: 4rem; |
| | | margin-bottom: 20px; |
| | | color: #ddd; |
| | | } |
| | | |
| | | .empty-state h3 { |
| | | font-size: 1.5rem; |
| | | margin-bottom: 10px; |
| | | color: #666; |
| | | } |
| | | |
| | | /* ååºå¼è®¾è®¡ */ |
| | | @media (max-width: 992px) { |
| | | .gallery-grid { |
| | | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); |
| | | gap: 25px; |
| | | } |
| | | } |
| | | |
| | | @media (max-width: 768px) { |
| | | |
| | | |
| | | .main-nav li { |
| | | margin: 0 10px; |
| | | } |
| | | |
| | | .gallery-grid { |
| | | grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); |
| | | gap: 20px; |
| | | } |
| | | |
| | | .gallery-img { |
| | | height: 180px; |
| | | } |
| | | |
| | | } |
| | | |
| | | @media (max-width: 576px) { |
| | | .gallery-grid { |
| | | grid-template-columns: 1fr; |
| | | } |
| | | |
| | | .gallery-img { |
| | | height: 200px; |
| | | } |
| | | |
| | | .track-card-panel::-webkit-scrollbar-thumb:hover { |
| | | background: #1890ff; |
| | | } |
| | |
| | | var layer; |
| | | var laypage; |
| | | |
| | | $(function () { |
| | | // åå§åå页 |
| | | layui.use(['laypage', 'layer'], function () { |
| | | $(document).ready(function () { |
| | | layui.use(['layer'], function () { |
| | | layer = layui.layer; |
| | | laypage = layui.laypage; |
| | | |
| | | // åå§åå页ç»ä»¶ |
| | | initPagination(); |
| | | }); |
| | | |
| | | // åå§åå¾çé¢è§åè½ |
| | | initImagePreview(); |
| | | }); |
| | | |
| | | /** |
| | | * åå§åå页ç»ä»¶ |
| | | */ |
| | | function initPagination() { |
| | | laypage.render({ |
| | | elem: 'pagination', |
| | | count: typeof totalItems !== 'undefined' ? totalItems : 0, |
| | | limit: typeof pageSize !== 'undefined' ? pageSize : 6, |
| | | curr: typeof currentPage !== 'undefined' ? currentPage : 1, |
| | | layout: ['prev', 'page', 'next', 'refresh', 'skip'], |
| | | jump: function (obj, first) { |
| | | if (!first) { |
| | | searchRecord(obj.curr, obj.limit) |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * éæ°åå§åå页ç»ä»¶ |
| | | * @param {number} totalCount - æ»è®°å½æ° |
| | | * @param {number} pageSize - æ¯é¡µå¤§å° |
| | | * @param {number} currentPage - å½å页ç |
| | | */ |
| | | function reinitPagination(totalCount, pageSize, currentPage) { |
| | | laypage.render({ |
| | | elem: 'pagination', |
| | | count: totalCount, |
| | | limit: pageSize, |
| | | curr: currentPage, |
| | | layout: ['prev', 'page', 'next', 'refresh', 'skip'], |
| | | jump: function (obj, first) { |
| | | if (!first) { |
| | | searchRecord(obj.curr, obj.limit) |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * è·åå·¡æ£è®°å½æ°æ® |
| | | * @param {Object} params - æ¥è¯¢åæ°å¯¹è±¡ |
| | | * @param {Function} callback - åè°å½æ° |
| | | */ |
| | | function fetchPatrolRecordData(params, callback) { |
| | | $.ajax({ |
| | | url: '../../patrol/patrolRecord/pageData', |
| | | type: 'POST', |
| | | dataType: "json", |
| | | contentType: "application/json;charset=UTF-8", |
| | | data: JSON.stringify(params), |
| | | success: function (response) { |
| | | if (response.code === '0000') { |
| | | callback(null, response.data); |
| | | } else { |
| | | callback(new Error(response.msg || 'æ°æ®å 载失败'), null); |
| | | } |
| | | }, |
| | | error: function (xhr, status, error) { |
| | | callback(new Error('请æ±å¤±è´¥ï¼è¯·ç¨åéè¯'), null); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * æå»ºæ¥è¯¢åæ° |
| | | * @param {number} page - 页ç |
| | | * @param {number} size - æ¯é¡µå¤§å° |
| | | * @returns {Object} æ¥è¯¢åæ°å¯¹è±¡ |
| | | */ |
| | | function buildQueryParams(page, size) { |
| | | var params = { |
| | | page: page, |
| | | limit: size, |
| | | key: patrolId //主表idæ¥è¯¢ |
| | | }; |
| | | // æ·»å è¡¨åæ¥è¯¢æ¡ä»¶ |
| | | var form = document.getElementById('patrolRecord-form'); |
| | | if (form) { |
| | | var inputs = form.querySelectorAll('input[name], select[name]'); |
| | | inputs.forEach(function(input) { |
| | | if (input.value) { // åªæ·»å éç©ºå¼ |
| | | params[input.name] = input.value; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | return params; |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°å·¡æ£è®°å½ç»å»å
容 |
| | | * @param {Array} records - å·¡æ£è®°å½æ°æ® |
| | | */ |
| | | function updateGallery(records) { |
| | | var container = document.getElementById('gallery-container'); |
| | | if (!container) return; |
| | | |
| | | // æ¸
ç©ºç°æå
容 |
| | | container.innerHTML = ''; |
| | | |
| | | if (!records || records.length === 0) { |
| | | // æ¾ç¤ºç©ºç¶æ |
| | | container.innerHTML = ` |
| | | <div class="empty-state"> |
| | | <i class="fa-solid fa-clipboard-list"></i> |
| | | <h3>ææ å·¡æ£è®°å½</h3> |
| | | <p>å½å没æå¯å±ç¤ºçå·¡æ£è®°å½æ°æ®</p> |
| | | </div> |
| | | `; |
| | | // éèå页 |
| | | $('.pagination-container').hide(); |
| | | function initMap() { |
| | | // å¯å é¤ä»£ç å¼å§ |
| | | // æ£æ¥ç¾åº¦å°å¾APIæ¯å¦å è½½æå |
| | | if (typeof BMapGL === 'undefined') { |
| | | layer.msg("å°å¾å 载失败ï¼è¯·æ£æ¥ç½ç»è¿æ¥ï¼", {icon: 2}); |
| | | return; |
| | | } |
| | | |
| | | // æ¾ç¤ºå页 |
| | | $('.pagination-container').show(); |
| | | // æ£æ¥å®¹å¨æ¯å¦åå¨ |
| | | var mapContainer = document.getElementById("map"); |
| | | if (!mapContainer) { |
| | | layer.msg("å°å¾å®¹å¨æªæ¾å°ï¼", {icon: 2}); |
| | | return; |
| | | } |
| | | |
| | | // çæå·¡æ£è®°å½å¡ç |
| | | var html = ''; |
| | | records.forEach(function(record) { |
| | | html += ` |
| | | <div class="gallery-item"> |
| | | <img src="${record.imgName || '/logo-sm.png'}" alt="${record.id}" |
| | | data-url="${record.imgName || '/logo-sm.png'}" data-id="${record.id}" |
| | | class="gallery-img" onclick="showPatrolRecordPreview(this.getAttribute('data-url'))"> |
| | | <div class="gallery-info"> |
| | | <div class="gallery-header"> |
| | | <h3 class="gallery-title">${record.pointName || record.id}</h3> |
| | | <!-- |
| | | <div class="gallery-tags"> |
| | | <span class="tag-person"> |
| | | <i class="layui-icon layui-icon-user"></i> |
| | | <span>'æªç¥'</span> |
| | | </span> |
| | | </div> |
| | | --> |
| | | </div> |
| | | <div class="gallery-meta"> |
| | | <div style="display: flex; align-items: center; gap: 15px;width: 100%"> |
| | | <div class="meta-item" style="width: 50%"> |
| | | <i class="layui-icon layui-icon-location"></i> |
| | | <span>${record.longitude || ''}</span> |
| | | </div> |
| | | <div class="meta-item"> |
| | | <i class="layui-icon layui-icon-location"></i> |
| | | <span>${record.latitude || ''}</span> |
| | | </div> |
| | | </div> |
| | | <div class="meta-item" style="width: 50%"> |
| | | <i class="layui-icon layui-icon-date"></i> |
| | | <span>${formatDate(record.createTime)}</span> |
| | | </div> |
| | | </div> |
| | | // æ£æ¥æ°æ® |
| | | if (!patrolRecordList || patrolRecordList.length === 0) { |
| | | layer.msg("ææ è½¨è¿¹æ°æ®ï¼", {icon: 2}); |
| | | var defaultPoint = new BMapGL.Point(116.404, 39.915); |
| | | map.centerAndZoom(defaultPoint, 12); |
| | | map.enableScrollWheelZoom(true); |
| | | return; |
| | | } |
| | | //å¯å é¤ä»£ç ç»æ |
| | | |
| | | // ========== ç¾åº¦å°å¾åå§åä¸è½¨è¿¹æ¸²æ ========== |
| | | // 1. åå§åå°å¾ |
| | | var map = new BMapGL.Map("map"); |
| | | // 2. è·åè½¨è¿¹ç¹æ°æ® |
| | | if (patrolRecordList.length === 0) { |
| | | layer.msg("ææ è½¨è¿¹æ°æ®ï¼", {icon: 2}); |
| | | var defaultPoint = new BMapGL.Point(116.404, 39.915); |
| | | map.centerAndZoom(defaultPoint, 14); |
| | | map.enableScrollWheelZoom(true); |
| | | return; |
| | | } |
| | | |
| | | |
| | | // 3. æé è½¨è¿¹ç¹æ°ç»åæ è®°ç¹æ°ç» |
| | | var points = []; // 轨迹æçº¿ç¹ |
| | | var markers = []; // å°å¾æ è®°ç¹ |
| | | var cardElements = document.querySelectorAll('.track-card'); // ææå¡çå
ç´ |
| | | |
| | | |
| | | |
| | | patrolRecordList.forEach(function (record, index) { |
| | | var lng = record.longitude; |
| | | var lat = record.latitude; |
| | | var point = new BMapGL.Point(lng, lat); |
| | | points.push(point); |
| | | |
| | | // å建å°å¾æ è®°ç¹ |
| | | var marker = new BMapGL.Marker(point); |
| | | markers.push(marker); |
| | | |
| | | // æ è®°ç¹å¼¹çªä¿¡æ¯ |
| | | var infoWindow = new BMapGL.InfoWindow(` |
| | | <div style="font-size: 12px; line-height: 1.8;"> |
| | | <p><strong>ç¹ä½åç§°ï¼</strong>${record.pointName}</p> |
| | | <p><strong>å·¡æ£äººï¼</strong>${record.createBy}</p> |
| | | <p><strong>å·¡æ£æ¶é´ï¼</strong>${new Date(record.createTime).toLocaleString()}</p> |
| | | <p><strong>ç»çº¬åº¦ï¼</strong>${lat}, ${lng}</p> |
| | | <p><strong>轨迹ç¹IDï¼</strong>${record.id}</p> |
| | | </div> |
| | | </div> |
| | | `; |
| | | `); |
| | | |
| | | // æ è®°ç¹ç¹å»äºä»¶ï¼é«äº®å¯¹åºå¡ç + æ¾ç¤ºå¼¹çª |
| | | marker.addEventListener("click", function () { |
| | | // ç§»é¤ææå¡ççactiveæ ·å¼ |
| | | cardElements.forEach(el => el.classList.remove('active')); |
| | | // é«äº®å½åå¡ç |
| | | cardElements[index].classList.add('active'); |
| | | // æ»å¨å°å½åå¡ç |
| | | cardElements[index].scrollIntoView({behavior: 'smooth', block: 'center'}); |
| | | // æ¾ç¤ºå¼¹çª |
| | | this.openInfoWindow(infoWindow); |
| | | }); |
| | | |
| | | // å¡çç¹å»äºä»¶ï¼å®ä½å°å¯¹åºæ è®°ç¹ + é«äº®å¡ç |
| | | cardElements[index].addEventListener("click", function () { |
| | | // ç§»é¤ææå¡ççactiveæ ·å¼ |
| | | cardElements.forEach(el => el.classList.remove('active')); |
| | | // é«äº®å½åå¡ç |
| | | this.classList.add('active'); |
| | | // å°å¾ä¸å¿å®ä½å°å½åæ è®°ç¹ |
| | | map.centerAndZoom(point, 15); |
| | | // æ¾ç¤ºæ è®°ç¹å¼¹çª |
| | | marker.openInfoWindow(infoWindow); |
| | | // 轻微å¨ç»ææ |
| | | marker.setAnimation(BMAP_ANIMATION_BOUNCE); |
| | | setTimeout(() => marker.setAnimation(null), 1500); |
| | | }); |
| | | |
| | | map.addOverlay(marker); |
| | | }); |
| | | |
| | | container.innerHTML = html; |
| | | } |
| | | // 寻æ¾pointsä¸é´çç¹ä½ |
| | | var midIndex = Math.floor(points.length / 2); |
| | | const centerPoint = points[midIndex] || new BMapGL.Point(116.404, 39.915); |
| | | map.centerAndZoom(centerPoint, 13); // 14为å°å¾ç¼©æ¾çº§å« |
| | | |
| | | /** |
| | | * æ ¼å¼åæ¥æ |
| | | * @param {string|number} date - æ¥æåç¬¦ä¸²ææ¶é´æ³ |
| | | */ |
| | | function formatDate(date) { |
| | | if (!date) return ''; |
| | | var d = new Date(date); |
| | | return d.getFullYear() + '-' + |
| | | String(d.getMonth() + 1).padStart(2, '0') + '-' + |
| | | String(d.getDate()).padStart(2, '0') + ' ' + |
| | | String(d.getHours()).padStart(2, '0') + ':' + |
| | | String(d.getMinutes()).padStart(2, '0') ; |
| | | } |
| | | |
| | | /** |
| | | * åå§åå¾çé¢è§åè½ |
| | | */ |
| | | function initImagePreview() { |
| | | var preview = document.getElementById('imgPreview'); |
| | | var previewImg = document.getElementById('previewImg'); |
| | | var closeBtn = document.getElementById('closePreview'); |
| | | |
| | | // 妿é¢è§å
ç´ ä¸åå¨ï¼åä¸åå§å |
| | | if (!preview || !previewImg) { |
| | | return; |
| | | } |
| | | |
| | | // å
³éæé®ç¹å»äºä»¶ |
| | | if (closeBtn) { |
| | | closeBtn.addEventListener('click', closePreview); |
| | | } |
| | | |
| | | // ç¹å»é¢è§åºåå¤å
³é |
| | | preview.addEventListener('click', function (e) { |
| | | if (e.target === preview) { |
| | | closePreview(); |
| | | } |
| | | // 4. ç»å¶è½¨è¿¹æçº¿ |
| | | var polyline = new BMapGL.Polyline(points, { |
| | | strokeColor: "#1890ff", // 主è²è°ï¼èè² |
| | | strokeWeight: 6, // æçº¿å®½åº¦ |
| | | strokeOpacity: 0.8, // éæåº¦ |
| | | strokeStyle: 'solid' // å®çº¿ |
| | | }); |
| | | map.addOverlay(polyline); |
| | | |
| | | // é®çäºä»¶çå¬ |
| | | document.addEventListener('keydown', function (e) { |
| | | if (e.key === 'Escape' && preview.style.display === 'flex') { |
| | | closePreview(); |
| | | } |
| | | }); |
| | | // // 5. èµ·ç¹/ç»ç¹ç¹æ®æ è®° |
| | | // // èµ·ç¹æ è®° |
| | | // var startMarker = new BMapGL.Marker(points[0], { |
| | | // icon: new BMapGL.Icon("http://api.map.baidu.com/img/markers.png", new BMapGL.Size(25, 34), { |
| | | // offset: new BMapGL.Size(12, 34), |
| | | // imageOffset: new BMapGL.Size(0, 0) // èµ·ç¹å¾æ |
| | | // }) |
| | | // }); |
| | | // map.addOverlay(startMarker); |
| | | // // startMarker.setLabel(new BMapGL.Label("èµ·ç¹ï¼" + patrolRecordList[0].pointName, { |
| | | // // offset: new BMapGL.Size(30, -15), |
| | | // // styles: {fontSize: '12px', color: '#fff', background: '#52c41a', padding: '0px 14px', borderRadius: '3px'} |
| | | // // })); |
| | | // startMarker.setLabel(new BMapGL.Label("èµ·ç¹ï¼" + patrolRecordList[0].pointName, { |
| | | // offset: new BMapGL.Size(30, -15), |
| | | // styles: { |
| | | // fontSize: '12px', |
| | | // color: '#fff', |
| | | // background: '#52c41a', |
| | | // padding: '8px 8px', // å·¦å³paddingä¿æä¸è´ï¼14pxï¼ï¼ä¿è¯èæ¯ä¸¤ä¾§ç©ºé´å¯¹ç§° |
| | | // borderRadius: '3px', |
| | | // textAlign: 'center' // æ°å¢ï¼å¼ºå¶æåå¨èæ¯å
æ°´å¹³å±
ä¸ |
| | | // } |
| | | // })); |
| | | // |
| | | // // ç»ç¹æ è®° |
| | | // var endMarker = new BMapGL.Marker(points[points.length - 1], { |
| | | // icon: new BMapGL.Icon("http://api.map.baidu.com/img/markers.png", new BMapGL.Size(25, 34), { |
| | | // offset: new BMapGL.Size(12, 34), |
| | | // imageOffset: new BMapGL.Size(-114, 0) // ç»ç¹å¾æ |
| | | // }) |
| | | // }); |
| | | // map.addOverlay(endMarker); |
| | | // endMarker.setLabel(new BMapGL.Label("ç»ç¹ï¼" + patrolRecordList[patrolRecordList.length - 1].pointName, { |
| | | // offset: new BMapGL.Size(30, -15), |
| | | // styles: {fontSize: '12px', color: '#fff', background: '#ff4d4f', padding: '0px 14px', borderRadius: '3px'} |
| | | // })); |
| | | |
| | | // å
³éé¢è§å½æ° |
| | | function closePreview() { |
| | | preview.style.display = 'none'; |
| | | previewImg.src = ''; |
| | | } |
| | | } |
| | | // 6. å°å¾èªéåºææè½¨è¿¹ç¹ |
| | | map.enableScrollWheelZoom(true); // å¼å¯æ»è½®ç¼©æ¾ |
| | | map.setViewport(points); // éé
ææè½¨è¿¹ç¹ |
| | | |
| | | /** |
| | | * æ¾ç¤ºå¾çé¢è§ |
| | | * @param {string} imgUrl å¾çURL |
| | | */ |
| | | function showPatrolRecordPreview(imgUrl) { |
| | | var preview = document.getElementById('imgPreview'); |
| | | var previewImg = document.getElementById('previewImg'); |
| | | |
| | | if (preview && previewImg) { |
| | | previewImg.src = imgUrl; |
| | | preview.style.display = 'flex'; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 读åå·¡æ£è®°å½ |
| | | */ |
| | | function searchRecord(page , size) { |
| | | var pageNumber = 1; |
| | | var sizeNumber = 6; |
| | | if (pageSize && pageSize > 0){ |
| | | size = pageSize; |
| | | } |
| | | |
| | | if (size && size > 0){ |
| | | sizeNumber = size; |
| | | } |
| | | if (page && page > 0){ |
| | | pageNumber = page; |
| | | } |
| | | // æé æ¥è¯¢åæ°ï¼ä»ç¬¬ä¸é¡µå¼å§ |
| | | var queryParams = buildQueryParams(pageNumber, sizeNumber); |
| | | // æ¾ç¤ºloading |
| | | var loadingIndex = layer.load(1, {shade: [0.1, '#fff']}); |
| | | // è°ç¨æ°æ®è¯·æ±æ¹æ³ |
| | | fetchPatrolRecordData(queryParams, function(error, data) { |
| | | // å
³éloading |
| | | layer.close(loadingIndex); |
| | | if (error) { |
| | | layer.msg(error.message); |
| | | return; |
| | | } |
| | | |
| | | // æ´æ°é¡µé¢æ°æ® |
| | | updateGallery(data.records); |
| | | // éæ°åå§åå页ç»ä»¶ |
| | | reinitPagination(data.total, data.size, data.current); |
| | | // 7. åå§æç¤º |
| | | layer.msg("轨迹å è½½å®æï¼ç¹å»å¡çå¯å®ä½å°å¯¹åºç¹ä½", { |
| | | icon: 1, |
| | | time: 3000, |
| | | offset: ['20px', '20px'] |
| | | }); |
| | | } |
| | | |
| | | // 页é¢å è½½å®æååå§åå°å¾ |
| | | window.onload = initMap; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * 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.js ÐÞ¸Ä |
| | |
| | | var layer; |
| | | var splitWin = 1; //å屿°ï¼é»è®¤1åå± |
| | | var windowsNum = 1; //ææ¾çªå£ä¸æ ï¼æå¨éæ©æ¨¡å¼ä¸ä½¿ç¨ |
| | | var timer; |
| | | var table; |
| | | var cameraData; |
| | |
| | | }); |
| | | |
| | | /** |
| | | * ææ¾çªå£éä¸ |
| | | * @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 |
| | | */ |
| | |
| | | |
| | | .sp-boxWrap, |
| | | .sp-box { |
| | | height: 550px; |
| | | height: 830px; |
| | | } |
| | | |
| | | .sp-box { |
| | |
| | | } |
| | | |
| | | .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; |
| | | } |
| | | |
| | |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label">çæ¬¡ç¼å·ï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="batchId" id="batchId" placeholder="请è¾å
¥" class="form-control " type="text" |
| | | <input name="confId" id="confId" placeholder="请è¾å
¥" class="form-control " type="text" |
| | | maxlength="30"> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">å·¡é»äººï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="userName" id="userName" placeholder="请è¾å
¥" class="form-control " type="text" |
| | | <input name="userId" id="userId" placeholder="请è¾å
¥" class="form-control " type="text" |
| | | maxlength="30" required> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="select-list"> |
| | | <ul> |
| | | <li> |
| | | åç§°ï¼<input type="text" name="name"/> |
| | | å·¡é»äººï¼<input type="text" name="userName"/> |
| | | </li> |
| | | <li> |
| | | çæ¬¡åç§°ï¼<input type="text" name="confName"/> |
| | | </li> |
| | | <li> |
| | | <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> æç´¢</a> |
| | |
| | | </div> |
| | | |
| | | <div class="btn-group-sm" id="toolbar" role="group"> |
| | | <a class="btn btn-success" onclick="$.operate.add()" > |
| | | <i class="fa fa-plus"></i> æ°å¢ |
| | | </a> |
| | | <a class="btn btn-primary single disabled" onclick="$.operate.edit()" > |
| | | <i class="fa fa-edit"></i> ä¿®æ¹ |
| | | </a> |
| | | <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" > |
| | | <i class="fa fa-remove"></i> å é¤ |
| | | </a> |
| | | <a class="btn btn-warning" onclick="$.table.exportExcel()" > |
| | | <i class="fa fa-download"></i> å¯¼åº |
| | | </a> |
| | | <!-- <a class="btn btn-success" onclick="$.operate.add()" >--> |
| | | <!-- <i class="fa fa-plus"></i> æ°å¢--> |
| | | <!-- </a>--> |
| | | <!-- <a class="btn btn-primary single disabled" onclick="$.operate.edit()" >--> |
| | | <!-- <i class="fa fa-edit"></i> ä¿®æ¹--> |
| | | <!-- </a>--> |
| | | <!-- <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" >--> |
| | | <!-- <i class="fa fa-remove"></i> å é¤--> |
| | | <!-- </a>--> |
| | | <!-- <a class="btn btn-warning" onclick="$.table.exportExcel()" >--> |
| | | <!-- <i class="fa fa-download"></i> 导åº--> |
| | | <!-- </a>--> |
| | | <a class="btn btn-success" onclick="openPatrolConf()" > |
| | | <i class="fa fa-plus"></i> å·¡æ´é
ç½® |
| | | </a> |
| | |
| | | <th:block th:include="include :: select2-js" /> |
| | | <script th:inline="javascript"> |
| | | var prefix = ctx + "security/patrol"; |
| | | |
| | | var deptList = [[${deptList}]]; |
| | | $(function() { |
| | | |
| | | var options = { |
| | |
| | | sortName: "id", |
| | | sortOrder: "asc", |
| | | modalName: "åæ°", |
| | | showSearch:false, |
| | | showRefresh:false, |
| | | showColumns:false, |
| | | showToggle:false, |
| | | columns: [{ |
| | | checkbox: true |
| | | }, |
| | |
| | | field: 'deptId', |
| | | title: 'æå±åºåº', |
| | | align: 'left', |
| | | // formatter: function(value, row, index) { |
| | | // return $.table.tooltip(value); |
| | | // } |
| | | //æ ¹æ®deptListåæ¾è¯å¥ |
| | | formatter: function(value, row, index) { |
| | | var deptName = ''; |
| | | deptList.forEach(function (item) { |
| | | if (item.id == value) { |
| | | deptName = item.kqmc; |
| | | } |
| | | }) |
| | | return $.table.tooltip(deptName); |
| | | } |
| | | |
| | | }, |
| | | { |
| | | field: 'batchId', |
| | | title: 'çæ¬¡ç¼å·', |
| | | field: 'confName', |
| | | title: 'çæ¬¡åç§°', |
| | | align: 'left', |
| | | // formatter: function(value, row, index) { |
| | | // return $.table.tooltip(value); |
| | |
| | | align: 'center', |
| | | formatter: function(value, row, index) { |
| | | var actions = []; |
| | | actions.push('<a class="btn btn-success btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>ç¼è¾</a> '); |
| | | actions.push('<a class="btn btn-danger btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>å é¤</a>'); |
| | | // actions.push('<a class="btn btn-success btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>ç¼è¾</a> '); |
| | | // actions.push('<a class="btn btn-danger btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>å é¤</a>'); |
| | | actions.push('<a class="btn btn-info btn-xs ' + '" href="javascript:void(0)" onclick="patrolDetail(\'' + row.id + '\')"><i class="fa fa-list-ul"></i>详æ
</a> '); |
| | | return actions.join(''); |
| | | } |
| | |
| | | <body> |
| | | <div class="main-content"> |
| | | <form id="form-patrol-add" class="form-horizontal"> |
| | | <input name="deptId" type="hidden" id="treeId"/> |
| | | <input name="userId" type="hidden" id="userId"/> |
| | | |
| | | <div class="row"> |
| | | <div class="col-sm-6"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">çæ¬¡åç§°ï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="batchName" id="batchName" placeholder="请è¾å
¥" class="form-control " type="text" |
| | | <input name="name" id="name" placeholder="请è¾å
¥" class="form-control " type="text" |
| | | maxlength="30" required> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">å·¡é»äººï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="userName" id="userName" placeholder="请è¾å
¥" class="form-control " type="text" |
| | | maxlength="30" required> |
| | | <select name="userName" id="userName" class="form-control select2" multiple required onchange="changeUser(this)"> |
| | | <option value="">è¯·éæ©å·¡é»äºº</option> |
| | | <option th:each="user : ${userList}" th:value="${user.userName}" th:data-userid="${user.userId}" th:text="${user.userName}"></option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="col-sm-6"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">å¼å§æ¶é´ï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="start" placeholder="è¯·éæ©å¼å§æ¶é´" data-type="datetime" class="form-control time-input" type="text" |
| | | required> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-6"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">ç»ææ¶é´ï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="end" placeholder="è¯·éæ©ç»ææ¶é´" data-type="datetime" class="form-control time-input" type="text" |
| | | required> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | <th:block th:include="include :: footer"/> |
| | | <th:block th:include="include :: select2-js"/> |
| | | <script> |
| | | <script type="text/javascript"> |
| | | var prefix = ctx + "security/patrol/patrolConf"; |
| | | |
| | | $("#form-cabinet-add").validate({ |
| | |
| | | } |
| | | } |
| | | |
| | | function changeUser(selectElement) { |
| | | var selectedOptions = Array.from(selectElement.selectedOptions); |
| | | var userIds = selectedOptions.map(option => option.getAttribute('data-userid')).filter(id => id); |
| | | var userIdStr = userIds.join(','); |
| | | $("#userId").val(userIdStr); |
| | | } |
| | | |
| | | |
| | | </script> |
| | | </body> |
| | |
| | | <body class="white-bg"> |
| | | <div class="wrapper wrapper-content animated fadeInRight ibox-content"> |
| | | <form class="form-horizontal m" id="form-patrol-edit" th:object="${patrolConf}"> |
| | | <input id="id" name="id" th:field="*{batchId}" type="hidden"> |
| | | <input id="id" name="id" th:field="*{id}" type="hidden"> |
| | | <input name="userId" type="hidden" th:field="*{userId}" id="userId"/> |
| | | <div class="row"> |
| | | <div class="col-sm-6"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">çæ¬¡åç§°ï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="batchName" id="batchName" th:field="*{batchName}" placeholder="请è¾å
¥" class="form-control " |
| | | <input name="name" id="name" th:field="*{name}" placeholder="请è¾å
¥" class="form-control " |
| | | type="text" |
| | | maxlength="30" required> |
| | | </div> |
| | |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">å·¡é»äººï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input name="userName" id="userName" th:field="*{userName}" placeholder="请è¾å
¥" class="form-control " |
| | | type="text" |
| | | maxlength="30" required> |
| | | <select name="userName" id="userName" class="form-control select2" multiple required onchange="changeUser(this)"> |
| | | <option value="">è¯·éæ©å·¡é»äºº</option> |
| | | <option th:each="user : ${userList}" |
| | | th:value="${user.userName}" |
| | | th:text="${user.userName}" |
| | | th:data-userid="${user.userId}" |
| | | th:selected="${#strings.contains(patrolConf.userId, user.userId)}"></option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | </div> |
| | | <div class="row"> |
| | | <div class="col-sm-6"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">å¼å§æ¶é´ï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input id="start" name="startTime" th:value="*{#dates.format(start, 'yyyy-MM-dd HH:mm:ss')}" data-type="datetime" placeholder="è¯·éæ©å¼å§æ¶é´" class="form-control time-input" type="text" required> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-6"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label is-required">ç»ææ¶é´ï¼</label> |
| | | <div class="col-sm-8"> |
| | | <input id="end" name="endTime" th:value="*{#dates.format(end, 'yyyy-MM-dd HH:mm:ss')}" data-type="datetime" placeholder="è¯·éæ©ç»ææ¶é´" class="form-control time-input" type="text" required> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <th:block th:include="include :: footer"/> |
| | | <th:block th:include="include :: select2-js"/> |
| | | <script type="text/javascript"> |
| | | |
| | | var prefix = ctx + "security/patrol/patrolConf"; |
| | | |
| | | |
| | |
| | | $.operate.save(prefix + "/edit", $('#form-patrol-edit').serialize()); |
| | | } |
| | | } |
| | | |
| | | function changeUser(selectElement) { |
| | | var selectedOptions = Array.from(selectElement.selectedOptions); |
| | | var userIds = selectedOptions.map(option => option.getAttribute('data-userid')).filter(id => id); |
| | | var userIdStr = userIds.join(','); |
| | | $("#userId").val(userIdStr); |
| | | } |
| | | |
| | | </script> |
| | | </body> |
| | | </html> |
| | |
| | | <body class="gray-bg"> |
| | | <div class="container-div"> |
| | | <div class="row"> |
| | | <div class="col-sm-12 search-collapse"> |
| | | <form id="property-form"> |
| | | <div class="select-list"> |
| | | <ul> |
| | | <li> |
| | | åç§°ï¼<input type="text" name="name"/> |
| | | </li> |
| | | <li> |
| | | <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> æç´¢</a> |
| | | <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i> éç½®</a> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </form> |
| | | </div> |
| | | <!-- <div class="col-sm-12 search-collapse">--> |
| | | <!-- <form id="property-form">--> |
| | | <!-- <div class="select-list">--> |
| | | <!-- <ul>--> |
| | | <!-- <li>--> |
| | | <!-- åç§°ï¼<input type="text" name="name"/>--> |
| | | <!-- </li>--> |
| | | <!-- <li>--> |
| | | <!-- <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> æç´¢</a>--> |
| | | <!-- <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i> éç½®</a>--> |
| | | <!-- </li>--> |
| | | <!-- </ul>--> |
| | | <!-- </div>--> |
| | | <!-- </form>--> |
| | | <!-- </div>--> |
| | | |
| | | <div class="btn-group-sm" id="toolbar" role="group"> |
| | | <a class="btn btn-success" onclick="$.operate.add()" > |
| | |
| | | <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" > |
| | | <i class="fa fa-remove"></i> å é¤ |
| | | </a> |
| | | <a class="btn btn-warning" onclick="$.table.exportExcel()" > |
| | | <i class="fa fa-download"></i> å¯¼åº |
| | | </a> |
| | | <!-- <a class="btn btn-warning" onclick="$.table.exportExcel()" >--> |
| | | <!-- <i class="fa fa-download"></i> 导åº--> |
| | | <!-- </a>--> |
| | | </div> |
| | | <div class="col-sm-12 select-table table-striped"> |
| | | <table id="bootstrap-table"></table> |
| | |
| | | updateUrl: prefix + "/edit/{id}", |
| | | removeUrl: prefix + "/remove", |
| | | exportUrl: prefix + "/export", |
| | | sortName: "batchId", |
| | | sortName: "id", |
| | | sortOrder: "asc", |
| | | modalName: "åæ°", |
| | | showSearch:false, |
| | | showRefresh:false, |
| | | showColumns:false, |
| | | showToggle:false, |
| | | columns: [{ |
| | | checkbox: true |
| | | }, |
| | | { |
| | | field: 'batchId', |
| | | field: 'id', |
| | | title: '主é®', |
| | | visible: false, |
| | | }, |
| | | { |
| | | field: 'batchName', |
| | | field: 'name', |
| | | title: 'çæ¬¡åç§°', |
| | | align: 'left', |
| | | // formatter: function(value, row, index) { |
| | |
| | | align: 'center', |
| | | formatter: function(value, row, index) { |
| | | var actions = []; |
| | | actions.push('<a class="btn btn-success btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.batchId + '\')"><i class="fa fa-edit"></i>ç¼è¾</a> '); |
| | | actions.push('<a class="btn btn-danger btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.batchId + '\')"><i class="fa fa-remove"></i>å é¤</a>'); |
| | | actions.push('<a class="btn btn-success btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>ç¼è¾</a> '); |
| | | actions.push('<a class="btn btn-danger btn-xs ' + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>å é¤</a>'); |
| | | return actions.join(''); |
| | | } |
| | | }] |
| | |
| | | <!DOCTYPE html> |
| | | <html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> |
| | | <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"> |
| | | <meta charset="UTF-8"> |
| | | <title>å·¡æ£è½¨è¿¹å±ç¤º</title> |
| | | <!-- Layui CSSï¼ç¨äºåºç¡æ ·å¼ï¼ --> |
| | | <th:block th:include="include :: header('å·¡æ´è®°å½')"/> |
| | | <link rel="stylesheet" type="text/css" th:href="@{/ajax/libs/layui-ruoyi/css/layui.css}"/> |
| | | <link rel="stylesheet" th:href="@{/security/patrol/patrolRecord-style.css}"> |
| | | <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=R3FfyIEbBAWNckTqRSopHQktdkgp924F"></script> |
| | | </head> |
| | | <body class="gray-bg"> |
| | | <body> |
| | | <div class="container-div"> |
| | | <div class="row"> |
| | | <div class="col-sm-12 search-collapse" |
| | | style="display: flex; justify-content: space-between; align-items: center;"> |
| | | <form id="patrolRecord-form"> |
| | | <div class="select-list"> |
| | | <ul> |
| | | <li> |
| | | å·¡æ´ç¹ï¼<input type="text" name="name"/> |
| | | </li> |
| | | <li> |
| | | <a class="btn btn-primary btn-rounded btn-sm" onclick="searchRecord()"><i |
| | | class="fa fa-search"></i> æç´¢</a> |
| | | <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i |
| | | class="fa fa-refresh"></i> éç½®</a> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </form> |
| | | <div class="btn-group-sm" role="group"> |
| | | <!-- 妿éè¦æ·»å æé®å¯ä»¥æ¾å¨è¿é --> |
| | | <a class="btn btn-success" onclick="openTrajectoryMap()" > |
| | | <i class="fa fa-search"></i> è½¨è¿¹å¾æ¥ç |
| | | </a> |
| | | <!-- ç¾åº¦å°å¾å®¹å¨ --> |
| | | <div id="map"></div> |
| | | <!-- å³ä¾§è½¨è¿¹å¡çæ¬æµ®å± --> |
| | | <div class="track-card-panel"> |
| | | <div class="panel-title"> |
| | | å·¡æ£è½¨è¿¹ç¹ |
| | | <span class="count" th:text="'å
± ' + ${#lists.size(patrolRecordList)} + ' 个ç¹ä½'"></span> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <div class="col-sm-12 " style="padding-top: 10px;"> |
| | | <!-- å·¡æ£è®°å½ç½æ ¼ --> |
| | | <div class="gallery-grid" id="gallery-container"> |
| | | <!-- è®°å½ä¸ºç©ºæ¶æ¾ç¤º --> |
| | | <div th:if="${#lists.isEmpty(patrolRecordList)}" class="empty-state"> |
| | | <i class="fa-solid fa-clipboard-list"></i> |
| | | <h3>ææ å·¡æ£è®°å½</h3> |
| | | <p>å½å没æå¯å±ç¤ºçå·¡æ£è®°å½æ°æ®</p> |
| | | <!-- 轨迹å¡çå表ï¼Thymeleafå¾ªç¯æ¸²æï¼ --> |
| | | <div th:each="record,stat : ${patrolRecordList}" class="track-card" data-index="${stat.index}"> |
| | | <div class="card-row"> |
| | | <span class="label">åºå·ï¼</span> |
| | | <span class="value" th:text="${stat.index + 1}"></span> |
| | | </div> |
| | | <!-- è®°å½å¡ç --> |
| | | <div th:each="patrolRecord : ${patrolRecordList}" class="gallery-item"> |
| | | <img th:src="${patrolRecord.imgName ?: '/logo-sm.png'}" th:alt="${patrolRecord.id}" |
| | | th:data-url="${patrolRecord.imgName ?: '/logo-sm.png'}" th:data-id="${patrolRecord.id}" |
| | | class="gallery-img" onclick="showPatrolRecordPreview(this.getAttribute('data-url'))"> |
| | | <div class="gallery-info"> |
| | | <div class="gallery-header"> |
| | | <h3 class="gallery-title" th:text="${patrolRecord.pointName ?: patrolRecord.id}"></h3> |
| | | <!-- æ ç¾å表 --> |
| | | <!-- <div class="gallery-tags">--> |
| | | <!-- <span class="tag-person">--> |
| | | <!-- <i class="layui-icon layui-icon-user"></i>--> |
| | | <!-- <span th:text="'æªç¥'"></span>--> |
| | | <!-- </span>--> |
| | | <!-- </div>--> |
| | | </div> |
| | | |
| | | <div class="gallery-meta"> |
| | | <div style="display: flex; align-items: center; gap: 15px;width: 100%"> |
| | | <div class="meta-item" style="width: 50%"> |
| | | <i class="layui-icon layui-icon-location"></i> |
| | | <span th:text="${patrolRecord.longitude ?: ''}"></span> |
| | | </div> |
| | | <div class="meta-item" style="width: 50%"> |
| | | <i class="layui-icon layui-icon-location"></i> |
| | | <span th:text="${patrolRecord.latitude ?: ''}"></span> |
| | | </div> |
| | | </div> |
| | | <div class="meta-item" > |
| | | <i class="layui-icon layui-icon-date"></i> |
| | | <span th:text="${#dates.format(patrolRecord.createTime, 'yyyy-MM-dd HH:mm')}"></span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="card-row"> |
| | | <span class="label">ç¹ä½åç§°ï¼</span> |
| | | <span class="value" th:text="${record.pointName}"></span> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- å页æ§ä»¶ --> |
| | | <div class="pagination-container" th:if="${not #lists.isEmpty(patrolRecordList)}"> |
| | | <div id="pagination"></div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <!-- å¾çé¢è§å± --> |
| | | <div class="img-preview" id="imgPreview"> |
| | | <div class="preview-content"> |
| | | <img src="" alt="é¢è§å¾ç" class="preview-img" id="previewImg"> |
| | | <div class="close-preview" id="closePreview"> |
| | | <i class="layui-icon layui-icon-clear"></i> |
| | | <div class="card-row"> |
| | | <span class="label">å·¡æ£äººï¼</span> |
| | | <span class="value" th:text="${record.createBy}"></span> |
| | | </div> |
| | | <div class="card-row"> |
| | | <span class="label">å·¡æ£æ¶é´ï¼</span> |
| | | <span class="value" th:text="${#dates.format(record.createTime, 'yyyy-MM-dd HH:mm:ss')}"></span> |
| | | </div> |
| | | <div class="card-row"> |
| | | <span class="label">ç»çº¬åº¦ï¼</span> |
| | | <span class="value" th:text="${record.latitude} + ', ' + ${record.longitude}"></span> |
| | | </div> |
| | | <div class="card-row"> |
| | | <span class="label">轨迹ç¹IDï¼</span> |
| | | <span class="value" th:text="${record.id}"></span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | |
| | | <!-- å¼å
¥Layui JS --> |
| | | <th:block th:include="include :: footer"/> |
| | | <script th:src="@{/ajax/libs/layui-ruoyi/layui.js}"></script> |
| | | <script th:src="@{/security/patrol/patrolRecord.js}"></script> |
| | | <script th:inline="javascript"> |
| | | var prefix = ctx + "security/patrol/patrolRecord"; |
| | | |
| | | var currentPage = [[${currentPage}]]; |
| | | var totalItems = [[${totalItems}]]; |
| | | var pageSize = [[${pageSize}]]; |
| | | var patrolId = [[${patrolId}]]; |
| | | |
| | | function openTrajectoryMap() { |
| | | var url = prefix + '/trajectoryMap/'+patrolId ; |
| | | var options = { |
| | | title: "轨迹å¾", |
| | | width: 500, |
| | | height: 500, |
| | | url: url, |
| | | btn: 0, |
| | | yes: function (index, layero) { |
| | | $.modal.close(index); |
| | | } |
| | | }; |
| | | $.modal.openOptions(options); |
| | | } |
| | | <script th:inline="javascript"> |
| | | var patrolRecordList = [[${patrolRecordList}]]; |
| | | </script> |
| | | |
| | | </body> |
| | | </html> |
| | | </html> |
| ÎļþÃû´Ó fzzy-igdss-web/src/main/resources/templates/security/video-aerial.html ÐÞ¸Ä |
| | |
| | | <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;"> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!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> |