kongdeqiang
2023-02-17 ac94b1d939373a684344764e5b00dac44feabd81
增加service
8个文件已修改
5个文件已添加
755 ■■■■■ 已修改文件
src/main/java/com/wgcloud/WgcloudServiceApplication.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/wgcloud/controller/FailureLoggingController.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/wgcloud/entity/FailureLogging.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/wgcloud/entity/InspectionTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/wgcloud/entity/WorkLogging.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/wgcloud/mapper/FailureLoggingMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/wgcloud/service/FailureLoggingService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mybatis/mapper/FailureLoggingMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/js/failurelogging.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templates/common/aside.html 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templates/failurelogging/add.html 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templates/failurelogging/list.html 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templates/failurelogging/view.html 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/wgcloud/WgcloudServiceApplication.java
@@ -10,6 +10,7 @@
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
@@ -25,7 +26,7 @@
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
@SpringBootApplication
@SpringBootApplication(exclude = MongoAutoConfiguration.class)
@MapperScan("com.wgcloud.mapper")
@ServletComponentScan("com.wgcloud.filter")
@ComponentScan(basePackages = "com.wgcloud")
src/main/java/com/wgcloud/controller/FailureLoggingController.java
New file
@@ -0,0 +1,170 @@
package com.wgcloud.controller;
import com.github.pagehelper.PageInfo;
import com.wgcloud.entity.AccountInfo;
import com.wgcloud.entity.Equipment;
import com.wgcloud.entity.FailureLogging;
import com.wgcloud.service.FailureLoggingService;
import com.wgcloud.service.LogInfoService;
import com.wgcloud.util.HostUtil;
import com.wgcloud.util.PageUtil;
import com.wgcloud.util.staticvar.StaticKeys;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
 * @author kdq
 * @version 1.0.0
 * @ClassName FailureLoggingController.java
 * @Description TODO
 * @createTime 2023年02月16日 14:22:00
 */
@Controller
@RequestMapping("/failurelogging")
public class FailureLoggingController {
    private static final Logger logger = LoggerFactory.getLogger(FailureLoggingController.class);
    @Resource
    private FailureLoggingService failureLoggingService;
    @Resource
    private LogInfoService logInfoService;
    /**
     * 根据条件查询设备列表
     *
     * @param model
     * @param request
     * @return
     */
    @RequestMapping(value = "list")
    public String failureList(FailureLogging failureLogging, Model model, HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        try {
            StringBuffer url = new StringBuffer();
//            if (!StringUtils.isEmpty(failureLogging.getOldDeviceName())) {
//                url.append("&oldDeviceName=").append(failureLogging.getOldDeviceName());
//            }
            PageInfo pageInfo = failureLoggingService.selectByParams(params, failureLogging.getPage(), failureLogging.getPageSize());
            PageUtil.initPageNumber(pageInfo, model);
            model.addAttribute("pageUrl", "/failurelogging/list?1=1" + url.toString());
            model.addAttribute("page", pageInfo);
            model.addAttribute("failureLogging", failureLogging);
        }catch (Exception e){
            logger.error("查询设备更换列表错误", e);
            logInfoService.save("查询资产信息错误", e.toString(), StaticKeys.LOG_XTCZ);
        }
        return "failurelogging/list";
    }
    @RequestMapping(value = "save")
    public String saveFailureLogging(FailureLogging failureLogging, Model model, HttpServletRequest request) {
        try {
            if (StringUtils.isEmpty(failureLogging.getId())) {
                failureLoggingService.save(failureLogging);
                failureLoggingService.saveLog(request, StaticKeys.LOG_ADD, failureLogging);
            } else {
                failureLoggingService.updateById(failureLogging);
                failureLoggingService.saveLog(request, StaticKeys.LOG_UPDATE, failureLogging);
            }
        } catch (Exception e) {
            logger.error("保存设备更换数据错误", e);
            logInfoService.save("保存设备更换数据错误", e.toString(), StaticKeys.LOG_XTCZ);
        }
        return "redirect:/failurelogging/list";
    }
    /**
     * 添加
     *
     * @param model
     * @param request
     * @return
     */
    @RequestMapping(value = "edit")
    public String edit(Model model, HttpServletRequest request) {
        String errorMsg = "添加设备";
        String id = request.getParameter("id");
        FailureLogging failureLogging = new FailureLogging();
        try {
            if (StringUtils.isEmpty(id)) {
                model.addAttribute("failureLogging", failureLogging);
                return "failureLogging/add";
            }
            failureLogging = failureLoggingService.selectById(id);
            model.addAttribute("failureLogging", failureLogging);
        } catch (Exception e) {
            logger.error(errorMsg, e);
            logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ);
        }
        return "failurelogging/add";
    }
    /**
     * 查看该应用统计图
     *
     * @param model
     * @param request
     * @return
     */
    @RequestMapping(value = "view")
    public String viewChart(Model model, HttpServletRequest request) {
        String errorMsg = "查看设备更换错误";
        String id = request.getParameter("id");
        FailureLogging failureLogging = new FailureLogging();
        try {
            failureLogging = failureLoggingService.selectById(id);
            model.addAttribute("failureLogging", failureLogging);
        } catch (Exception e) {
            logger.error(errorMsg, e);
            logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ);
        }
        return "failurelogging/view";
    }
    /**
     * 删除设备
     *
     * @param
     * @param model
     * @param request
     * @param redirectAttributes
     * @return
     */
    @RequestMapping(value = "del")
    public String delete(Model model, HttpServletRequest request, RedirectAttributes redirectAttributes) {
        String errorMsg = "删除更换设备错误";
        FailureLogging failureLogging = new FailureLogging();
        try {
            if (!StringUtils.isEmpty(request.getParameter("id"))) {
                String[] ids = request.getParameter("id").split(",");
                for (String id : ids) {
                    failureLogging = failureLoggingService.selectById(id);
                    failureLoggingService.saveLog(request, StaticKeys.LOG_DEL, failureLogging);
                }
                failureLoggingService.deleteById(ids);
            }
        } catch (Exception e) {
            logger.error(errorMsg, e);
            logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ);
        }
        return "redirect:/failurelogging/list";
    }
}
src/main/java/com/wgcloud/entity/FailureLogging.java
@@ -57,6 +57,6 @@
    /**
     * 更换时间
     */
    private Date personDate;
    private String personDate;
}
src/main/java/com/wgcloud/entity/InspectionTask.java
@@ -52,5 +52,5 @@
    /**
     * 创建时间
     */
    private Date createTime;
    private String createTime;
}
src/main/java/com/wgcloud/entity/WorkLogging.java
@@ -27,7 +27,7 @@
    /**
     * 操作时间
     */
    private Date workDate;
    private String workDate;
    /**
     * 操作日志
src/main/java/com/wgcloud/mapper/FailureLoggingMapper.java
@@ -24,10 +24,11 @@
    public List<FailureLogging> selectByParams(Map<String, Object> params) throws Exception;
    public Equipment selectById(String id) throws Exception;
    public FailureLogging selectById(String id) throws Exception;
    public int deleteById(String[] id) throws Exception;
    public int countByParams(Map<String, Object> params) throws Exception;
    public int updateById(FailureLogging failureLogging) throws Exception;
}
src/main/java/com/wgcloud/service/FailureLoggingService.java
@@ -1,6 +1,21 @@
package com.wgcloud.service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wgcloud.entity.Equipment;
import com.wgcloud.entity.FailureLogging;
import com.wgcloud.mapper.EquipmentMapper;
import com.wgcloud.mapper.FailureLoggingMapper;
import com.wgcloud.util.DateUtil;
import com.wgcloud.util.HostUtil;
import com.wgcloud.util.UUIDUtil;
import com.wgcloud.util.staticvar.StaticKeys;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
 * @author kdq
@@ -11,4 +26,47 @@
 */
@Service
public class FailureLoggingService {
    @Autowired
    private FailureLoggingMapper failureLoggingMapper;
    @Autowired
    private LogInfoService logInfoService;
    public PageInfo selectByParams(Map<String, Object> params, Integer currPage, Integer pageSize)throws Exception  {
        PageHelper.startPage(currPage, pageSize);
        List<FailureLogging> list = failureLoggingMapper.selectByParams(params);
        PageInfo<FailureLogging> pageInfo = new PageInfo<FailureLogging>(list);
        return pageInfo;
    }
    public void save(FailureLogging failureLogging) throws Exception {
        failureLogging.setId(UUIDUtil.getUUID());
        failureLoggingMapper.save(failureLogging);
    }
    public void updateById(FailureLogging failureLogging)
            throws Exception {
        failureLoggingMapper.updateById(failureLogging);
    }
    /**
     * 保存操作日志
     *
     * @param request 获取当前登录用户
     * @param action  操作标识
     */
    public void saveLog(HttpServletRequest request, String action, FailureLogging failureLogging) {
        if (null == failureLogging) {
            return;
        }
        logInfoService.save(HostUtil.getAccountByRequest(request).getAccount() + action + "设备更换名称:" + failureLogging.getOldDeviceName(),
                "设备更换ip:" + failureLogging.getOldDeviceIp(), StaticKeys.LOG_XTCZ);
    }
    public FailureLogging selectById(String id)throws Exception {
        return failureLoggingMapper.selectById(id);
    }
    public void deleteById(String[] ids)throws Exception {
        failureLoggingMapper.deleteById(ids);
    }
}
src/main/resources/mybatis/mapper/FailureLoggingMapper.xml
@@ -150,4 +150,36 @@
    </select>
    <update id="updateById" parameterType="com.wgcloud.entity.FailureLogging">
        UPDATE FAILURE_LOGGING
        <set>
            <if test="oldDeviceName != null">
                OLD_DEVICE_NAME = #{oldDeviceName},
            </if>
            <if test="oldDeviceIp != null">
                OLD_DEVICE_IP = #{oldDeviceIp},
            </if>
            <if test="oldDeviceModel != null">
                OLD_DEVICE_MODEL = #{oldDeviceModel},
            </if>
            <if test="newDeviceName != null">
                NEW_DEVICE_NAME = #{newDeviceName},
            </if>
            <if test="newDeviceIp != null">
                NEW_DEVICE_IP = #{newDeviceIp},
            </if>
            <if test="newDeviceModel != null">
                NEW_DEVICE_MODEL = #{newDeviceModel},
            </if>
            <if test="personName != null">
                PERSON_NAME = #{personName},
            </if>
            <if test="personDate != null">
                PERSON_DATE = #{personDate}
            </if>
        </set>
        WHERE ID = #{id}
    </update>
</mapper>
src/main/resources/static/js/failurelogging.js
New file
@@ -0,0 +1,27 @@
function add() {
    window.location.href = "/tssw/failurelogging/edit";
}
function searchByAccount() {
    window.location.href = "/tssw/failurelogging/list";
}
function view(id) {
    window.location.href = "/tssw/failurelogging/view?id="+id;
}
function edit(id){
    window.location.href = "/tssw/failurelogging/edit?id="+id;
}
function del(id) {
    if(confirm('你确定要删除吗?')) {
        window.location.href = "/tssw/failurelogging/del?id=" + id;
    }
}
function cancel(){
    history.back();
}
src/main/resources/templates/common/aside.html
@@ -414,6 +414,47 @@
                    </a>
                </li>
                <th:block th:if="${#strings.startsWith(session.menuActive,'8')}">
                    <li class="nav-item has-treeview menu-open">
                        <a  href="javascript:void(0);" class="nav-link active">
                </th:block>
                <th:block th:unless="${#strings.startsWith(session.menuActive,'8')}">
                    <li class="nav-item has-treeview">
                        <a  href="javascript:void(0);" class="nav-link">
                </th:block>
                <i class="nav-icon fas fa-network-wired"></i>
                <p title="巡检管理">
                    巡检管理
                    <i class="fas fa-angle-left right"></i>
                </p>
                </a>
                <ul class="nav nav-treeview">
                    <li class="nav-item">
                        <th:block th:if="${session.menuActive eq '81'}">
                            <a th:href="@{'/failurelogging/tuopuListHost'}" class="nav-link active">
                        </th:block>
                        <th:block th:unless="${session.menuActive eq '81'}">
                            <a th:href="@{'/failurelogging/tuopuListHost'}" class="nav-link">
                        </th:block>
                        <i class="nav-icon far fa-circle text-info"></i>
                        <p>巡检计划</p>
                        </a>
                    </li>
                    <li class="nav-item">
                        <th:block th:if="${session.menuActive eq '82'}">
                            <a th:href="@{'/failurelogging/list'}" class="nav-link active">
                        </th:block>
                        <th:block th:unless="${session.menuActive eq '82'}">
                            <a th:href="@{'/failurelogging/list'}" class="nav-link">
                        </th:block>
                        <i class="far fa-circle nav-icon"></i>
                        <p>备件更换</p>
                        </a>
                    </li>
                </ul>
                </li>
                <!--<li class="nav-item">
                    <a target="_blank" href="http://www.wgstart.com/elasticsearch-head/index.html"
@@ -431,4 +472,4 @@
        <!-- /.sidebar-menu -->
    </div>
    <!-- /.sidebar -->
</aside>
</aside>
src/main/resources/templates/failurelogging/add.html
New file
@@ -0,0 +1,158 @@
<!DOCTYPE html>
<html>
<head>
  <div  th:replace="common/header.html"></div>
</head>
<body th:class="${application.sidebarCollapse}">
<div th:replace="common/chart.html"></div>
<div class="wrapper">
  <div th:replace="common/navbar.html"></div>
  <div th:replace="common/aside.html"></div>
  <!-- Content Wrapper. Contains page content -->
  <div class="content-wrapper" style="font-size:0.90rem">
    <!-- Content Header (Page header) -->
    <section class="content-header">
      <div class="container-fluid">
        <div class="row mb-2">
          <div class="col-sm-6">
            <h1></h1>
          </div>
            <div class="col-sm-6">
                <ol class="breadcrumb float-sm-right">
                    <li class="breadcrumb-item active"></li>
                </ol>
            </div>
        </div>
      </div><!-- /.container-fluid -->
    </section>
    <!-- Main content -->
    <section class="content">
      <div class="container-fluid">
        <div class="row">
  <div class="col-md-10">
    <div class="card card-primary">
      <div class="card-header">
        <h3 class="card-title">添加更换计划</h3>
          <div class=" float-sm-right">
              <a href="javascript:history.back()">返回</a>
          </div>
      </div>
      <!-- /.card-header -->
      <!-- form start -->
        <form role="form" id="form1" th:action="@{'/failurelogging/save'}">
            <input type="hidden" name="id" th:value="${failureLogging.id}"/>
            <div class="card-body">
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label><font color="red">*</font>旧设备名称</label>
                            <input type="text" autocomplete="off"  th:value="${failureLogging.oldDeviceName}" class="validate[required,maxSize[50]] form-control" name="oldDeviceName" id="oldDeviceName" placeholder="">
                        </div>
                        <div class="form-group">
                            <label>旧设备ip</label>
                            <input type="text" autocomplete="off"  th:value="${failureLogging.oldDeviceIp}" class="validate[required,maxSize[50]] form-control" name="oldDeviceIp" id="oldDeviceIp" placeholder="">
                        </div>
                        <div class="form-group">
                            <label>旧设备型号</label>
                            <input type="text" autocomplete="off"  th:value="${failureLogging.oldDeviceModel}" class="validate[required,maxSize[50]] form-control" name="oldDeviceModel" id="oldDeviceModel" placeholder="">
                        </div>
                        <div class="form-group">
                            <label>更换人</label>
                            <input type="text" autocomplete="off"  th:value="${failureLogging.personName}" class="validate[required,maxSize[50]] form-control" name="personName" id="personName" placeholder="">
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label>新设备名称</label>
                            <input type="text" autocomplete="off"  th:value="${failureLogging.newDeviceName}" class="validate[required,maxSize[50]] form-control" name="newDeviceName" id="newDeviceName" placeholder="">
                        </div>
                        <div class="form-group">
                            <label>新设备ip</label>
                            <input type="text" autocomplete="off"  th:value="${failureLogging.newDeviceIp}" class="validate[required,maxSize[50]] form-control" name="newDeviceIp" id="newDeviceIp" placeholder="">
                        </div>
                        <div class="form-group">
                            <label>新设备型号</label>
                            <input type="text" autocomplete="off" th:value="${failureLogging.newDeviceModel}" class="validate[required,maxSize[50]] form-control" name="newDeviceModel" id="newDeviceModel" placeholder="">
                        </div>
                        <div class="form-group">
                            <label>更换时间</label>
                            <input type="text" autocomplete="off"  th:value="${failureLogging.personDate}" class="validate[required,maxSize[50]] form-control" name="personDate" id="personDate" placeholder="">
                        </div>
                    </div>
                </div>
            </div>
            <!-- /.card-body -->
            <div class="card-footer">
                <button type="submit" class="btn btn-primary btn-sm" style="margin-right:10px;">保 存</button>
                <button type="button"  th:onclick="goback()"  class="btn bg-gradient-danger btn-sm">返 回</button>
            </div>
        </form>
      <!-- /.card-body -->
    </div>
    <!-- /.card -->
  </div>
        </div>
      </div>
    </section>
  </div>
  <div th:replace="common/footer.html"></div>
</div>
<!-- ./wrapper -->
<link rel="stylesheet" th:href="@{'/static/js/jQuery/validationEngine.jquery.css'}" type="text/css"/>
<script th:src="@{'/static/js/jQuery/jquery.validationEngine-zh_CN.js'}" type="text/javascript" charset="utf-8"></script>
<script th:src="@{'/static/js/jQuery/jquery.validationEngine.js'}" type="text/javascript" charset="utf-8"></script>
<script th:inline="javascript">
    $(document).ready(function(){
        $("#form1").validationEngine();
        var caigouDateResponse =[[${failureLogging.personDate}]];
        var caigouDate = $('#personDate');
        if(caigouDate!=null && caigouDate != undefined){
            caigouDate.daterangepicker({
                singleDatePicker: true,
                showDropdowns: true,
                // timePicker: true,
                // timePicker24Hour : true,
                // autoUpdateInput: false,
                "opens": "center",
                "locale": {
                    format: 'YYYY-MM-DD',
                    applyLabel: "应用",
                    cancelLabel: "取消",
                    daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
                    monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
                }
            });
            if(caigouDateResponse==''  || caigouDateResponse==null){
                caigouDate.val("");
            }
        }
    });
    function goback() {
        history.back();
    }
</script>
</body>
</html>
src/main/resources/templates/failurelogging/list.html
New file
@@ -0,0 +1,131 @@
<!DOCTYPE html>
<html>
<head>
  <div  th:replace="common/header.html"></div>
</head>
<body th:class="${application.sidebarCollapse}">
<div th:replace="common/chart.html"></div>
<div class="wrapper">
  <div th:replace="common/navbar.html"></div>
  <div th:replace="common/aside.html"></div>
  <!-- Content Wrapper. Contains page content -->
  <div class="content-wrapper" style="font-size:0.90rem">
    <!-- Content Header (Page header) -->
    <section class="content-header" style="height:38px">
      <div class="container-fluid">
        <div class="row mb-2" style="margin-top: -7px;">
          <div class="col-sm-6"></div>
          <div class="col-sm-6">
            <ol class="breadcrumb float-sm-right">
              <li class="breadcrumb-item"><a href="javascript:history.back()">返回上级</a></li>
            </ol>
          </div>
        </div>
      </div><!-- /.container-fluid -->
    </section>
    <!-- Main content -->
    <section class="content">
      <div class="container-fluid">
        <div class="row">
  <div class="col-md-12">
    <div class="card">
      <div class="card-header">
        <h3 class="card-title"><i class="nav-icon fas fa-server"></i>&nbsp;设备列表</h3>
        <div class=" float-sm-right">
          <!-- SEARCH FORM -->
          <form class="form-inline ml-3" th:action="@{'/failurelogging/list'}">
            <th:block th:if="${session.LOGIN_KEY.role != 'guest'}">
              <button type="button" onclick="delChecks('/failurelogging/del')"  class="btn bg-danger btn-sm" style="margin-right:5px;">删除</button>
              <button type="button" onclick="add()" class="btn btn-primary btn-sm" style="margin-right:5px;">添加</button>
            </th:block>
<!--            <div th:replace="common/accountSelect.html"></div>-->
            <div class="input-group input-group-sm">
<!--              <input class="form-control"  name="name" autocomplete="off" th:value="${failurelogging.oldDeviceName}" type="text" placeholder="旧设备名称">-->
              <div class="input-group-append">
                <button class="btn btn-primary" type="submit">
                  <i class="fas fa-search"></i>
                </button>
              </div>
            </div>
          </form>
        </div>
      </div>
      <!-- /.card-header -->
      <div class="card-body">
        <table class="table table-bordered table-hover">
          <thead>
          <tr>
            <th style="width: 20px"> <input type="checkbox" value="" name="checkall" id="checkall"></th>
            <th style="width: 60px">序号</th>
            <th>旧设备名称</th>
            <th>旧设备ip</th>
            <th>旧设备型号</th>
            <th>新设备名称</th>
            <th>新设备ip</th>
            <th>新设备型号</th>
            <th>更换人</th>
            <th>更换时间</th>
<!--            <th th:if="${application.userInfoManage == 'true' && session.LOGIN_KEY.role == 'admin'}">账号</th>-->
              <th>操作</th>
          </tr>
          </thead>
          <tbody>
          <th:block th:each="item,iterStat : ${page.list}">
            <tr>
              <td><input type="checkbox" th:value="${item.id}" name="todo2" th:id="${item.id}+'_check'"/></td>
              <td th:text="${iterStat.index+1}">1</td>
              <td th:text="${item.oldDeviceName}">Update software</td>
              <td th:text="${item.oldDeviceIp}">Update software</td>
              <td th:text="${item.oldDeviceModel}">Update software</td>
              <td th:text="${item.newDeviceName}">Update software</td>
              <td th:text="${item.newDeviceIp}">Update software</td>
              <td th:text="${item.newDeviceModel}">Update software</td>
              <td th:text="${item.personName}">Update software</td>
              <td th:text="${item.personDate}">Update software</td>
              <td>
                <th:block th:if="${session.LOGIN_KEY.role != 'guest'}">
                  <button type="button"  th:onclick="edit([[${item.id}]])"  class="btn bg-gradient-primary btn-sm">编辑</button>
                  <button type="button"  th:onclick="del([[${item.id}]])"  class="btn bg-gradient-danger btn-sm">删除</button>
                </th:block>
                <button type="button"  th:onclick="view([[${item.id}]])"  class="btn bg-gradient-primary btn-sm">查看</button></td>
            </tr>
          </th:block>
          </tbody>
        </table>
      </div>
      <!-- /.card-body -->
      <div th:replace="common/page.html"></div>
    </div>
    <!-- /.card -->
  </div>
        </div>
      </div>
    </section>
  </div>
  <div th:replace="common/footer.html"></div>
</div>
<!-- ./wrapper -->
<script th:src="@{'/static/js/failurelogging.js?v=3.3.9'}"></script>
<script th:inline="javascript">
</script>
</body>
</html>
src/main/resources/templates/failurelogging/view.html
New file
@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html>
<head>
  <div  th:replace="common/header.html"></div>
</head>
<body th:class="${application.sidebarCollapse}">
<div th:replace="common/chart.html"></div>
<div class="wrapper">
  <div th:replace="common/navbar.html"></div>
  <div th:replace="common/aside.html"></div>
  <!-- Content Wrapper. Contains page content -->
  <div class="content-wrapper" style="font-size:0.90rem">
    <!-- Content Header (Page header) -->
    <section class="content-header">
      <div class="container-fluid">
        <div class="row mb-2">
          <div class="col-sm-6">
            <h1></h1>
          </div>
            <div class="col-sm-6">
                <ol class="breadcrumb float-sm-right">
                    <li class="breadcrumb-item active"></li>
                </ol>
            </div>
        </div>
      </div><!-- /.container-fluid -->
    </section>
    <!-- Main content -->
    <section class="content">
      <div class="container-fluid">
        <div class="row">
  <div class="col-md-10">
    <div class="card card-primary">
      <div class="card-header">
        <h3 class="card-title">查看备件更换</h3>
          <div class=" float-sm-right">
              <a href="javascript:history.back()">返回</a>
          </div>
      </div>
      <!-- /.card-header -->
      <!-- form start -->
        <form role="form" id="form1" th:action="@{'/failurelogging/save'}">
            <input type="hidden" name="id" th:value="${failurelogging.id}"/>
            <div class="card-body">
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label><font color="red">*</font>旧设备名称</label>
                            <div  th:text="${failurelogging.oldDeviceName}" ></div>
                        </div>
                        <div class="form-group">
                            <label>旧设备ip</label>
                            <div  th:text="${failurelogging.oldDeviceIp}" ></div>
                        </div>
                        <div class="form-group">
                            <label>旧设备型号</label>
                            <div  th:text="${failurelogging.oldDeviceModel}" ></div>
                        </div>
                        <div class="form-group">
                            <label>新设备名称</label>
                            <div  th:text="${failurelogging.newDeviceName}" ></div>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label><font color="red">*</font>新设备ip</label>
                            <div  th:text="${failurelogging.newDeviceIp}" ></div>
                        </div>
                        <div class="form-group">
                            <label>新设备型号</label>
                            <div  th:text="${failurelogging.newDeviceModel}" ></div>
                        </div>
                        <div class="form-group">
                            <label>更换人</label>
                            <div  th:text="${failurelogging.personName}" ></div>
                        </div>
                        <div class="form-group">
                            <label>更换时间</label>
                            <div  th:text="${failurelogging.personDate}" ></div>
                        </div>
                    </div>
                </div>
            </div>
            <!-- /.card-body -->
        </form>
      <!-- /.card-body -->
    </div>
    <!-- /.card -->
  </div>
        </div>
      </div>
    </section>
  </div>
  <div th:replace="common/footer.html"></div>
</div>
<!-- ./wrapper -->
<link rel="stylesheet" th:href="@{'/static/js/jQuery/validationEngine.jquery.css'}" type="text/css"/>
<script th:src="@{'/static/js/jQuery/jquery.validationEngine-zh_CN.js'}" type="text/javascript" charset="utf-8"></script>
<script th:src="@{'/static/js/jQuery/jquery.validationEngine.js'}" type="text/javascript" charset="utf-8"></script>
<script th:inline="javascript">
    function goback() {
        history.back();
    }
</script>
</body>
</html>