a0f4d01559785001e7b16b21025cc6a42e65d167..5b9d5e7c3b714b2ccb3e9e355a376e4c85bb9f8d
7 天以前 sgj
添加第一版,电子巡更页面
5b9d5e 对比 | 目录
7 天以前 sgj
智能抓拍路径修改
dd295b 对比 | 目录
7 天以前 sgj
图片回显修改
b3de26 对比 | 目录
已重命名5个文件
已修改4个文件
已添加15个文件
1091 ■■■■■ 文件已修改
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/BizBaseEntity.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/PatrolConf.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/PatrolConfMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/PatrolMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/PatrolRecordMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PatrolConfService.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PatrolService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/patrol/PatrolConfController.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/patrol/PatrolController.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/snap/SnapRecordController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/patrol/PatrolConfManager.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/patrol/PatrolManager.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/snap/SnapRecordManager.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/eventInfo/eventInfo.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/snap/snapRecord-style.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/snap/snapRecord.js 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/eventInfo/eventInfo.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/patrol/add.html 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/patrol/edit.html 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/patrol/patrol.html 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/patrol/patrolConf/add.html 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/patrol/patrolConf/edit.html 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/patrol/patrolConf/patrolConf.html 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/snap/snapRecord/snapRecord.html 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/BizBaseEntity.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import javax.persistence.*;
@@ -22,11 +23,13 @@
    private String companyId;
    /** åˆ›å»ºäºº */
    @Excel(name = "创建者",sort = 25)
    @Column(name = "create_by", columnDefinition = "VARCHAR(100) COMMENT '创建人'", nullable = false)
    @TableField("create_by")
    private String createBy;
    /** åˆ›å»ºæ—¶é—´ */
    @Excel(name = "创建时间",sort = 26, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "create_time", columnDefinition = "DATETIME COMMENT '创建时间'", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
@@ -34,11 +37,13 @@
    private Date createTime;
    /** æ›´æ–°äºº */
    @Excel(name = "更新者",sort = 27)
    @Column(name = "update_by", columnDefinition = "VARCHAR(100) COMMENT '更新人'")
    @TableField("update_by")
    private String updateBy;
    /** æ›´æ–°æ—¶é—´ */
    @Excel(name = "更新时间",sort = 28, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "update_time", columnDefinition = "DATETIME COMMENT '更新时间'")
    @Temporal(TemporalType.TIMESTAMP)
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/PatrolConf.java
@@ -1,6 +1,8 @@
package com.fzzy.igds.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -25,6 +27,7 @@
    @Id
    @Column(name = "batch_id", columnDefinition = "varchar(40) COMMENT '班次编号'")
    @TableId(value = "batch_id", type = IdType.NONE)
    @TableField("batch_id")
    private String batchId;
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/PatrolConfMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.fzzy.igds.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fzzy.igds.domain.PatrolConf;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PatrolConfMapper extends BaseMapper<PatrolConf> {
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/PatrolMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.fzzy.igds.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fzzy.igds.domain.Patrol;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PatrolMapper extends BaseMapper<Patrol> {
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/PatrolRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.fzzy.igds.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fzzy.igds.domain.PatrolRecord;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PatrolRecordMapper extends BaseMapper<PatrolRecord> {
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PatrolConfService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
package com.fzzy.igds.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fzzy.igds.domain.PatrolConf;
import com.fzzy.igds.mapper.PatrolConfMapper;
import com.fzzy.igds.utils.ContextUtil;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Service
public class PatrolConfService {
    @Resource
    private PatrolConfMapper patrolConfMapper;
    /**
     * æŸ¥è¯¢åˆ—表数据
     *
     * @param param æŸ¥è¯¢å‚æ•°
     * @return æ•°æ®åˆ—表
     */
    public List<PatrolConf> selectList(PatrolConf param) {
        QueryWrapper<PatrolConf> queryWrapper = getQueryWrapper(param);
        return patrolConfMapper.selectList(queryWrapper);
    }
    /**
     * å°è£…查询条件
     *
     * @param param æŸ¥è¯¢å‚æ•°
     * @return æŸ¥è¯¢æž„造器
     */
    public QueryWrapper<PatrolConf> getQueryWrapper(PatrolConf param) {
        QueryWrapper<PatrolConf> queryWrapper = new QueryWrapper<>();
        // è®¾ç½®å…¬å¸ID并作为查询条件
        param.setCompanyId(ContextUtil.getCompanyId());
        queryWrapper.eq("company_id", param.getCompanyId());
        // æŒ‰åˆ›å»ºæ—¶é—´å€’序排序
        queryWrapper.orderByDesc("create_time");
        return queryWrapper;
    }
    /**
     * æ ¹æ®ID查询详情
     *
     * @param id ä¸»é”®ID
     * @return å®žä½“对象
     */
    public PatrolConf selectById(String id) {
        return patrolConfMapper.selectById(id);
    }
    /**
     * æ’入新数据
     *
     * @param param æ•°æ®å®žä½“
     * @return å½±å“è¡Œæ•°
     */
    public int insertData(PatrolConf param) {
        if (StringUtils.isEmpty(param.getBatchId())) {
            param.setBatchId(ContextUtil.generateId());
        }
        return patrolConfMapper.insert(param);
    }
    /**
     * æ›´æ–°å·²æœ‰æ•°æ®
     *
     * @param param æ•°æ®å®žä½“
     * @return å½±å“è¡Œæ•°
     */
    public int updateData(PatrolConf param) {
        return patrolConfMapper.updateById(param);
    }
    /**
     * åˆ é™¤æŒ‡å®šID的数据
     *
     * @param ids       è¦åˆ é™¤çš„记录ID集合(逗号分隔)
     */
    public void deleteDataById( String ids) {
        String[] recordIds = Convert.toStrArray(ids);
        for (String recordId : recordIds) {
            patrolConfMapper.deleteById(recordId);
        }
    }
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PatrolService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.fzzy.igds.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fzzy.igds.domain.Patrol;
import com.fzzy.igds.mapper.PatrolMapper;
import com.fzzy.igds.utils.ContextUtil;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Service
public class PatrolService {
    @Resource
    private PatrolMapper patrolMapper;
    public List<Patrol> selectList(Patrol param) {
        QueryWrapper<Patrol> queryWrapper = getQueryWrapper(param);
        return patrolMapper.selectList(queryWrapper);
    }
    /**
     * å°è£…查询条件
     *
     * @param param
     */
    public QueryWrapper<Patrol> getQueryWrapper(Patrol param) {
        QueryWrapper<Patrol> queryWrapper = new QueryWrapper<>();
        param.setCompanyId(ContextUtil.getCompanyId());
        queryWrapper.eq("company_id", param.getCompanyId());
        if (StringUtils.isNotBlank(param.getDeptId())) {
            queryWrapper.eq("dept_id", param.getDeptId());
        }
        queryWrapper.orderByDesc("create_time");
        return queryWrapper;
    }
    public Patrol selectById(String id) {
        return patrolMapper.selectById(id);
    }
    public int insertData(Patrol param) {
        if (StringUtils.isEmpty(param.getId())) {
            param.setId(ContextUtil.generateId());
        }
        return patrolMapper.insert(param);
    }
    public int updateData(Patrol param) {
        return patrolMapper.updateById(param);
    }
    public void deleteDataById( String ids) {
        String[] recordIds = Convert.toStrArray(ids);
        for (String recordId : recordIds) {
            patrolMapper.deleteById(recordId);
        }
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/patrol/PatrolConfController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
package com.fzzy.sys.controller.patrol;
import com.fzzy.igds.domain.PatrolConf;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.sys.manager.patrol.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.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("/patrol/patrolConf")
public class PatrolConfController extends BaseController {
    private static final String prefix = "patrol/patrolConf";
    @Resource
    private PatrolConfManager patrolConfManager;
    /**
     * å·¡æ›´é…ç½®é¡µé¢
     */
    @RequiresPermissions("web:patrol:patrolConf:view")
    @GetMapping()
    public String patrolConf() {
        return prefix + "/patrolConf";
    }
    /**
     * æŸ¥è¯¢å·¡æ›´é…ç½®åˆ—表
     */
    @RequiresPermissions("web:patrol:patrolConf:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(PatrolConf param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        startPage();
        List<PatrolConf> list = patrolConfManager.selectList(param);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºå·¡æ›´é…ç½®åˆ—表
     */
    @Log(title = "巡更配置管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("web:patrol:patrolConf:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(PatrolConf param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        List<PatrolConf> list = patrolConfManager.selectList(param);
        ExcelUtil<PatrolConf> util = new ExcelUtil<>(PatrolConf.class);
        return util.exportExcel(list, "巡更配置数据");
    }
    /**
     * æ–°å¢žå·¡æ›´é…ç½®é¡µé¢
     */
    @GetMapping("/add")
    public String add(ModelMap mmap) {
        return prefix + "/add";
    }
    /**
     * æ–°å¢žå·¡æ›´é…ç½®æ•°æ®
     */
    @RequiresPermissions("web:patrol:patrolConf:add")
    @Log(title = "巡更配置管理", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated PatrolConf param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        param.setCreateBy(getLoginName());
        param.setCreateTime(new Date());
        if (StringUtils.isEmpty(param.getBatchId())) {
            param.setBatchId(ContextUtil.generateId());
        }
        return toAjax(patrolConfManager.insertData(param));
    }
    /**
     * ä¿®æ”¹å·¡æ›´é…ç½®é¡µé¢
     */
    @RequiresPermissions("web:patrol:patrolConf:edit")
    @GetMapping("/edit/{id}")
    public String edit(@PathVariable("id") String id, ModelMap mmap) {
        PatrolConf record = patrolConfManager.selectById(id);
        mmap.put("patrolConf", record);
        return prefix + "/edit";
    }
    /**
     * ä¿®æ”¹å·¡æ›´é…ç½®æ•°æ®
     */
    @RequiresPermissions("web:patrol:patrolConf:edit")
    @Log(title = "巡更配置管理", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated PatrolConf param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        param.setUpdateBy(getLoginName());
        param.setUpdateTime(new Date());
        PatrolConf patrolConf = patrolConfManager.selectById(param.getBatchId());
        if (patrolConf == null) {
            param.setBatchId(ContextUtil.generateId());
            return toAjax(patrolConfManager.insertData(param));
        }
        return toAjax(patrolConfManager.updateData(param));
    }
    /**
     * åˆ é™¤å·¡æ›´é…ç½®æ•°æ®
     */
    @RequiresPermissions("web:patrol:patrolConf:remove")
    @Log(title = "巡更配置管理", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids) {
        patrolConfManager.deleteDataById( ids);
        return success();
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/patrol/PatrolController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,148 @@
package com.fzzy.sys.controller.patrol;
import com.fzzy.igds.domain.Patrol;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.sys.manager.patrol.PatrolManager;
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.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("/patrol")
public class PatrolController extends BaseController {
    private static final String prefix = "patrol";
    @Resource
    private PatrolManager patrolManager;
    /**
     * ç”µå­å·¡æ›´é¡µé¢
     *
     * @author sgj
     * @date 2025/12/06
     */
    @RequiresPermissions("web:patrol:view")
    @GetMapping()
    public String patrol() {
        return prefix + "/patrol";
    }
    /**
     * æŸ¥è¯¢ç”µå­å·¡æ›´åˆ—表
     */
    @RequiresPermissions("web:patrol:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(Patrol param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        startPage();
        List<Patrol> list = patrolManager.selectList(param);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºç”µå­å·¡æ›´åˆ—表
     */
    @Log(title = "电子巡更管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("web:patrol:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(Patrol param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        List<Patrol> list = patrolManager.selectList(param);
        ExcelUtil<Patrol> util = new ExcelUtil<>(Patrol.class);
        return util.exportExcel(list, "电子巡更数据");
    }
    /**
     * æ–°å¢žç”µå­å·¡æ›´é¡µé¢
     */
    @GetMapping("/add")
    public String add(ModelMap mmap) {
        return prefix + "/add";
    }
    /**
     * æ–°å¢žç”µå­å·¡æ›´æ•°æ®
     */
    @RequiresPermissions("web:patrol:add")
    @Log(title = "电子巡更管理", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated Patrol param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        param.setCreateBy(getLoginName());
        param.setCreateTime(new Date());
        if (StringUtils.isEmpty(param.getId())) {
            param.setId(ContextUtil.generateId());
        }
        return toAjax(patrolManager.insertData(param));
    }
    /**
     * ä¿®æ”¹ç”µå­å·¡æ›´é¡µé¢
     */
    @RequiresPermissions("web:patrol:edit")
    @GetMapping("/edit/{id}")
    public String edit(@PathVariable("id") String id, ModelMap mmap) {
        String companyId = ShiroUtils.getLoginUserCompanyId();
        Patrol record = patrolManager.selectById(id);
        mmap.put("patrol", record);
        return prefix + "/edit";
    }
    /**
     * ä¿®æ”¹ç”µå­å·¡æ›´æ•°æ®
     */
    @RequiresPermissions("web:patrol:edit")
    @Log(title = "电子巡更管理", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated Patrol param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ShiroUtils.getLoginUserCompanyId());
        }
        param.setUpdateBy(getLoginName());
        param.setUpdateTime(new Date());
        Patrol patrol = patrolManager.selectById(param.getId());
        if (patrol == null) {
            param.setId(ContextUtil.generateId());
            return toAjax(patrolManager.insertData(param));
        }
        return toAjax(patrolManager.updateData(param));
    }
    /**
     * åˆ é™¤ç”µå­å·¡æ›´æ•°æ®
     */
    @RequiresPermissions("web:patrol:remove")
    @Log(title = "电子巡更管理", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids) {
        patrolManager.deleteDataById(ids);
        return success();
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/snap/SnapRecordController.java
ÎļþÃû´Ó fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/snapRecord/SnapRecordController.java ÐÞ¸Ä
@@ -1,11 +1,11 @@
package com.fzzy.sys.controller.snapRecord;
package com.fzzy.sys.controller.snap;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.igds.constant.RespCodeEnum;
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.data.PageResponse;
import com.fzzy.igds.domain.SnapRecord;
import com.fzzy.sys.manager.snapRecord.SnapRecordManager;
import com.fzzy.sys.manager.snap.SnapRecordManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@@ -19,10 +19,10 @@
@Slf4j
@Controller
@RequestMapping("/snapRecord")
@RequestMapping("/snap/snapRecord")
public class SnapRecordController {
    private static final String prefix = "snapRecord";
    private static final String prefix = "snap/snapRecord";
    @Resource
    private SnapRecordManager snapRecordManager;
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/patrol/PatrolConfManager.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.fzzy.sys.manager.patrol;
import com.fzzy.igds.domain.PatrolConf;
import com.fzzy.igds.service.PatrolConfService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Component
public class PatrolConfManager {
    @Resource
    private PatrolConfService patrolConfService;
    public List<PatrolConf> selectList(PatrolConf param) {
        return patrolConfService.selectList(param);
    }
    public PatrolConf selectById(String id) {
        return patrolConfService.selectById(id);
    }
    public int insertData(PatrolConf param) {
        return patrolConfService.insertData(param);
    }
    public int updateData(PatrolConf param) {
        return patrolConfService.updateData(param);
    }
    public void deleteDataById( String ids) {
        patrolConfService.deleteDataById( ids);
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/patrol/PatrolManager.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.fzzy.sys.manager.patrol;
import com.fzzy.igds.domain.Patrol;
import com.fzzy.igds.service.PatrolService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Component
public class PatrolManager {
    @Resource
    private PatrolService patrolService;
    public List<Patrol> selectList(Patrol param) {
        return patrolService.selectList(param);
    }
    public Patrol selectById( String id) {
        return patrolService.selectById( id);
    }
    public int insertData(Patrol param) {
        return patrolService.insertData(param);
    }
    public int updateData(Patrol param) {
        return patrolService.updateData(param);
    }
    public void deleteDataById( String ids) {
         patrolService.deleteDataById(ids);
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/snap/SnapRecordManager.java
ÎļþÃû´Ó fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/snapRecord/SnapRecordManager.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.fzzy.sys.manager.snapRecord;
package com.fzzy.sys.manager.snap;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.igds.data.IgdsBaseParam;
fzzy-igdss-web/src/main/resources/static/eventInfo/eventInfo.js
@@ -138,8 +138,8 @@
    records.forEach(function(record) {
        html += `
            <div class="gallery-item">
                <img src="/logo-sm.png" alt="${record.id}"
                     data-url="/logo-sm.png" data-id="${record.id}"
                <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="showEventInfoPreview(this.getAttribute('data-url'))">
                <div class="gallery-info">
                    <div class="gallery-header">
fzzy-igdss-web/src/main/resources/static/snap/snapRecord-style.css
ÎļþÃû´Ó fzzy-igdss-web/src/main/resources/static/snapRecord/snapRecord-style.css ÐÞ¸Ä
@@ -52,7 +52,7 @@
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
    gap: 20px;
    margin-bottom: 15px;
    margin-bottom: 5px;
}
.gallery-item {
fzzy-igdss-web/src/main/resources/static/snap/snapRecord.js
ÎļþÃû´Ó fzzy-igdss-web/src/main/resources/static/snapRecord/snapRecord.js ÐÞ¸Ä
@@ -61,7 +61,7 @@
 */
function fetchSnapRecordData(params, callback) {
    $.ajax({
        url: '../../snapRecord/pageData',
        url: '../../snap/snapRecord/pageData',
        type: 'POST',
        dataType: "json",
        contentType: "application/json;charset=UTF-8",
@@ -138,8 +138,8 @@
    records.forEach(function(record) {
        html += `
            <div class="gallery-item">
                <img src="/logo-sm.png" alt="${record.id}"
                     data-url="/logo-sm.png" data-id="${record.id}"
                <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="showSnapRecordPreview(this.getAttribute('data-url'))">
                <div class="gallery-info">
                    <div class="gallery-header">
@@ -276,3 +276,7 @@
        reinitPagination(data.total, data.size, data.current);
    });
}
function openConf() {
    var url = ctx + "com.fzzy.igds.SnapConf.d";
    $.modal.openTab("抓拍配置", url);
}
fzzy-igdss-web/src/main/resources/templates/eventInfo/eventInfo.html
@@ -39,8 +39,8 @@
                </div>
                <!-- äº‹ä»¶å¡ç‰‡ -->
                <div th:each="eventInfo : ${eventInfoList}" class="gallery-item">
                    <img th:src="@{/logo-sm.png}" th:alt="${eventInfo.id}"
                         th:data-url="@{/logo-sm.png}" th:data-id="${eventInfo.id}"
                    <img th:src="${eventInfo.imgName ?: '/logo-sm.png'}" th:alt="${eventInfo.id}"
                         th:data-url="${eventInfo.imgName ?: '/logo-sm.png'}" th:data-id="${eventInfo.id}"
                         class="gallery-img" onclick="showEventInfoPreview(this.getAttribute('data-url'))">
                    <div class="gallery-info">
                        <div class="gallery-header">
fzzy-igdss-web/src/main/resources/templates/patrol/add.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <th:block th:include="include :: header('新增电子巡更信息')"/>
    <th:block th:include="include :: select2-css"/>
</head>
<body>
<div class="main-content">
    <form id="form-patrol-add" class="form-horizontal">
        <input name="deptId" type="hidden" id="treeId"/>
        <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="deptId" placeholder="请输入名称" class="form-control " type="text" maxlength="100"
                               required>
                    </div>
                </div>
            </div>
            <div class="col-sm-6">
                <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"
                               maxlength="30">
                    </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="userName" id="userName" placeholder="请输入" class="form-control " type="text"
                               maxlength="30" required>
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>
<th:block th:include="include :: footer"/>
<th:block th:include="include :: select2-js"/>
<script>
    var prefix = ctx + "patrol";
    $("#form-cabinet-add").validate({
        onkeyup: false,
        rules: {},
        messages: {},
        focusCleanup: true
    });
    // ç¡®å®šæŒ‰é’® æäº¤æ•°æ®
    function submitHandler() {
        if ($.validate.form()) {
            $.operate.save(prefix + "/add", $('#form-patrol-add').serialize());
        }
    }
</script>
</body>
</html>
fzzy-igdss-web/src/main/resources/templates/patrol/edit.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <th:block th:include="include :: header('修改电子巡更信息')"/>
    <th:block th:include="include :: select2-css"/>
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
    <form class="form-horizontal m" id="form-patrol-edit" th:object="${patrol}">
        <input id="id" name="id" th:field="*{id}" type="hidden">
        <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="deptId" placeholder="请输入名称" th:field="*{deptId}" class="form-control " type="text"
                               maxlength="100"
                               required>
                    </div>
                </div>
            </div>
            <div class="col-sm-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label">班次编号:</label>
                    <div class="col-sm-8">
                        <input name="batchId" id="batchId" th:field="*{batchId}" placeholder="请输入" class="form-control "
                               type="text" maxlength="30">
                    </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="userName" id="userName" th:field="*{userName}" placeholder="请输入" class="form-control "
                               type="text"
                               maxlength="30" required>
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>
<th:block th:include="include :: footer"/>
<th:block th:include="include :: select2-js"/>
<script type="text/javascript">
    var prefix = ctx + "patrol";
    $("#form-cabinet-edit").validate({
        onkeyup: false,
        rules: {},
        messages: {},
        focusCleanup: true
    });
    function submitHandler() {
        if ($.validate.form()) {
            $.operate.save(prefix + "/edit", $('#form-patrol-edit').serialize());
        }
    }
</script>
</body>
</html>
fzzy-igdss-web/src/main/resources/templates/patrol/patrol.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
    <th:block th:include="include :: header('参数列表')" />
    <th:block th:include="include :: select2-css" />
</head>
<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>&nbsp;搜索</a>
                            <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                        </li>
                    </ul>
                </div>
            </form>
        </div>
        <div class="btn-group-sm" id="toolbar" role="group">
            <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="web:patrol:add">
                <i class="fa fa-plus"></i> æ–°å¢ž
            </a>
            <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="web:patrol:edit">
                <i class="fa fa-edit"></i> ä¿®æ”¹
            </a>
            <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="web:patrol:remove">
                <i class="fa fa-remove"></i> åˆ é™¤
            </a>
            <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="web:patrol:export">
                <i class="fa fa-download"></i> å¯¼å‡º
            </a>
            <a class="btn btn-success" onclick="openPatrolConf()" shiro:hasPermission="web:patrol:patrolConf:edit">
                <i class="fa fa-plus"></i> å·¡æ›´é…ç½®
            </a>
        </div>
        <div class="col-sm-12 select-table table-striped">
            <table id="bootstrap-table"></table>
        </div>
    </div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
    var editFlag = [[${@permission.hasPermi('web:patrol:edit')}]];
    var removeFlag = [[${@permission.hasPermi('web:patrol:remove')}]];
    var prefix = ctx + "patrol";
    $(function() {
        var options = {
            url: prefix + "/list",
            createUrl: prefix + "/add",
            updateUrl: prefix + "/edit/{id}",
            removeUrl: prefix + "/remove",
            exportUrl: prefix + "/export",
            sortName: "id",
            sortOrder: "asc",
            modalName: "参数",
            columns: [{
                checkbox: true
            },
                {
                    field: 'id',
                    title: '主键',
                    visible: false,
                },
                {
                    field: 'deptId',
                    title: '所属库区',
                    align: 'left',
                    // formatter: function(value, row, index) {
                    //     return $.table.tooltip(value);
                    // }
                },
                {
                    field: 'batchId',
                    title: '班次编号',
                    align: 'left',
                    // formatter: function(value, row, index) {
                    //     return $.table.tooltip(value);
                    // }
                },
                {
                    field: 'userName',
                    title: '巡逻人',
                    // formatter: function(value, row, index) {
                    //     return $.table.tooltip(value);
                    // }
                },
                {
                    title: '操作',
                    align: 'center',
                    formatter: function(value, row, index) {
                        var actions = [];
                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" 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 ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
                        return actions.join('');
                    }
                }]
        };
        $.table.init(options);
    });
    function openPatrolConf() {
        var url = ctx + "patrol/patrolConf";
        $.modal.openTab("巡更配置", url);
    }
</script>
</body>
</html>
fzzy-igdss-web/src/main/resources/templates/patrol/patrolConf/add.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <th:block th:include="include :: header('新增巡更配置')"/>
    <th:block th:include="include :: select2-css"/>
</head>
<body>
<div class="main-content">
    <form id="form-patrol-add" class="form-horizontal">
        <input name="deptId" type="hidden" id="treeId"/>
        <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"
                               maxlength="30" 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="userName" id="userName" placeholder="请输入" class="form-control " type="text"
                               maxlength="30" required>
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>
<th:block th:include="include :: footer"/>
<th:block th:include="include :: select2-js"/>
<script>
    var prefix = ctx + "patrol/patrolConf";
    $("#form-cabinet-add").validate({
        onkeyup: false,
        rules: {},
        messages: {},
        focusCleanup: true
    });
    // ç¡®å®šæŒ‰é’® æäº¤æ•°æ®
    function submitHandler() {
        if ($.validate.form()) {
            $.operate.save(prefix + "/add", $('#form-patrol-add').serialize());
        }
    }
</script>
</body>
</html>
fzzy-igdss-web/src/main/resources/templates/patrol/patrolConf/edit.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <th:block th:include="include :: header('修改巡更配置')"/>
    <th:block th:include="include :: select2-css"/>
</head>
<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">
        <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 "
                               type="text"
                               maxlength="30" 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="userName" id="userName" th:field="*{userName}" placeholder="请输入" class="form-control "
                               type="text"
                               maxlength="30" required>
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>
<th:block th:include="include :: footer"/>
<th:block th:include="include :: select2-js"/>
<script type="text/javascript">
    var prefix = ctx + "patrol/patrolConf";
    $("#form-cabinet-edit").validate({
        onkeyup: false,
        rules: {},
        messages: {},
        focusCleanup: true
    });
    function submitHandler() {
        if ($.validate.form()) {
            $.operate.save(prefix + "/edit", $('#form-patrol-edit').serialize());
        }
    }
</script>
</body>
</html>
fzzy-igdss-web/src/main/resources/templates/patrol/patrolConf/patrolConf.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
    <th:block th:include="include :: header('参数列表')" />
    <th:block th:include="include :: select2-css" />
</head>
<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>&nbsp;搜索</a>
                            <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                        </li>
                    </ul>
                </div>
            </form>
        </div>
        <div class="btn-group-sm" id="toolbar" role="group">
            <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="web:patrol:patrolConf:add">
                <i class="fa fa-plus"></i> æ–°å¢ž
            </a>
            <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="web:patrol:patrolConf:edit">
                <i class="fa fa-edit"></i> ä¿®æ”¹
            </a>
            <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="web:patrol:patrolConf:remove">
                <i class="fa fa-remove"></i> åˆ é™¤
            </a>
            <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="web:patrol:patrolConf:export">
                <i class="fa fa-download"></i> å¯¼å‡º
            </a>
        </div>
        <div class="col-sm-12 select-table table-striped">
            <table id="bootstrap-table"></table>
        </div>
    </div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
    var editFlag = [[${@permission.hasPermi('web:patrol:patrolConf:edit')}]];
    var removeFlag = [[${@permission.hasPermi('web:patrol:patrolConf:remove')}]];
    var prefix = ctx + "patrol/patrolConf";
    $(function() {
        var options = {
            url: prefix + "/list",
            createUrl: prefix + "/add",
            updateUrl: prefix + "/edit/{id}",
            removeUrl: prefix + "/remove",
            exportUrl: prefix + "/export",
            sortName: "batchId",
            sortOrder: "asc",
            modalName: "参数",
            columns: [{
                checkbox: true
            },
                {
                    field: 'batchId',
                    title: '主键',
                    visible: false,
                },
                {
                    field: 'batchName',
                    title: '班次名称',
                    align: 'left',
                    // formatter: function(value, row, index) {
                    //     return $.table.tooltip(value);
                    // }
                },
                {
                    field: 'userName',
                    title: '巡逻人',
                    // formatter: function(value, row, index) {
                    //     return $.table.tooltip(value);
                    // }
                },
                {
                    title: '操作',
                    align: 'center',
                    formatter: function(value, row, index) {
                        var actions = [];
                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" 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 ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.batchId + '\')"><i class="fa fa-remove"></i>删除</a>');
                        return actions.join('');
                    }
                }]
        };
        $.table.init(options);
    });
</script>
</body>
</html>
fzzy-igdss-web/src/main/resources/templates/snap/snapRecord/snapRecord.html
ÎļþÃû´Ó fzzy-igdss-web/src/main/resources/templates/snapRecord/snapRecord.html ÐÞ¸Ä
@@ -7,7 +7,7 @@
    <meta name="renderer" content="webkit">
    <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="@{/snapRecord/snapRecord-style.css}">
    <link rel="stylesheet" th:href="@{/snap/snapRecord-style.css}">
</head>
<body class="gray-bg">
<div class="container-div">
@@ -27,7 +27,15 @@
                </div>
            </form>
        </div>
        <div class="col-sm-12 " style="padding-top: 5px">
            <div class="btn-group-sm"  role="group" >
                <a class="btn btn-success" onclick="openConf()" shiro:hasPermission="system:user:add">
                    <i class="fa fa-plus"></i> æŠ“拍配置
                </a>
            </div>
        </div>
        <div class="col-sm-12 " style="padding-top: 10px;">
            <!-- å›¾ç‰‡ç½‘æ ¼ -->
            <div class="gallery-grid" id="gallery-container">
@@ -39,10 +47,8 @@
                </div>
                <!-- å›¾ç‰‡å¡ç‰‡ -->
                <div th:each="snapRecord : ${snapRecordList}" class="gallery-item">
<!--                    <img th:src="${snapRecord.imgPath}" th:alt="${snapRecord.id}"-->
<!--                         th:data-url="${snapRecord.imgPath}" th:data-id="${snapRecord.id}"-->
                    <img th:src="@{/logo-sm.png}" th:alt="${snapRecord.id}"
                         th:data-url="@{/logo-sm.png}" th:data-id="${snapRecord.id}"
                    <img th:src="${snapRecord.imgName ?: '/logo-sm.png'}" th:alt="${snapRecord.id}"
                         th:data-url="${snapRecord.imgName ?: '/logo-sm.png'}" th:data-id="${snapRecord.id}"
                         class="gallery-img" onclick="showSnapRecordPreview(this.getAttribute('data-url'))">
                    <div class="gallery-info">
                        <div class="gallery-header">
@@ -94,7 +100,7 @@
</div>
<th:block th:include="include :: footer" />
<script th:src="@{/ajax/libs/layui-ruoyi/layui.js}"></script>
<script th:src="@{/snapRecord/snapRecord.js}"></script>
<script th:src="@{/snap/snapRecord.js}"></script>
<script th:inline="javascript">
    var currentPage = [[${currentPage}]];
    var totalItems = [[${totalItems}]];