Quellcode durchsuchen

添加 SysMessage 数据模型, 接口和页面

reghao vor 2 Jahren
Ursprung
Commit
b19dc7f53f

+ 39 - 0
manager/src/main/java/cn/reghao/devops/manager/sys/controller/SysPageController.java

@@ -1,9 +1,16 @@
 package cn.reghao.devops.manager.sys.controller;
 
+import cn.reghao.devops.manager.sys.db.repository.SysMessageRepository;
+import cn.reghao.devops.manager.sys.model.po.SysMessage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 
 /**
  * @author reghao
@@ -12,9 +19,41 @@ import org.springframework.web.bind.annotation.GetMapping;
 @Api(tags = "系统页面")
 @Controller
 public class SysPageController {
+    private final SysMessageRepository sysMessageRepository;
+
+    public SysPageController(SysMessageRepository sysMessageRepository) {
+        this.sysMessageRepository = sysMessageRepository;
+    }
+
     @ApiOperation(value = "系统实时日志页面")
     @GetMapping("/sys/log")
     public String logPage() {
         return "/sys/syslog";
     }
+
+    @ApiOperation(value = "系统消息页面")
+    @GetMapping("/sys/message")
+    public String messagePage(Model model) {
+        PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createTime"));
+        Page<SysMessage> page = sysMessageRepository.findByUnreadIsTrue(pageRequest);
+        model.addAttribute("page", page);
+        model.addAttribute("list", page.getContent());
+        return "/sys/sysmsg";
+    }
+
+    @ApiOperation(value = "系统消息内容")
+    @GetMapping("/sys/message/detail/{id}")
+    public String messageDetail(@PathVariable("id") int id, Model model) {
+        SysMessage sysMessage = sysMessageRepository.findById(id).orElse(null);
+        String content = "";
+        if (sysMessage != null) {
+            content = sysMessage.getContent();
+
+            sysMessage.setUnread(false);
+            sysMessageRepository.save(sysMessage);
+        }
+
+        model.addAttribute("content", content);
+        return "/sys/sysmsgdetail";
+    }
 }

+ 15 - 0
manager/src/main/java/cn/reghao/devops/manager/sys/db/repository/SysMessageRepository.java

@@ -0,0 +1,15 @@
+package cn.reghao.devops.manager.sys.db.repository;
+
+import cn.reghao.devops.manager.sys.model.po.SysMessage;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author reghao
+ * @date 2024-02-05 09:29:02
+ */
+public interface SysMessageRepository extends JpaRepository<SysMessage, Integer> {
+    Page<SysMessage> findByUnreadIsTrue(Pageable pageable);
+    int countByUnread(boolean unread);
+}

+ 30 - 0
manager/src/main/java/cn/reghao/devops/manager/sys/model/po/SysMessage.java

@@ -0,0 +1,30 @@
+package cn.reghao.devops.manager.sys.model.po;
+
+import cn.reghao.devops.manager.util.db.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import javax.persistence.Entity;
+
+/**
+ * @author reghao
+ * @date 2024-02-05 09:25:39
+ */
+@AllArgsConstructor
+@NoArgsConstructor
+@Setter
+@Getter
+@Entity
+public class SysMessage extends BaseEntity {
+    private String title;
+    private Boolean unread;
+    private String content;
+
+    public SysMessage(String title, String content) {
+        this.title = title;
+        this.unread = true;
+        this.content = content;
+    }
+}

+ 43 - 0
manager/src/main/resources/templates/sys/sysmsg.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})"></head>
+
+<body class="timo-layout-page">
+<div class="layui-card">
+    <div class="layui-card-header timo-card-header">
+        <span><i class="fa fa-bars"></i> 系统消息</span>
+        <i class="layui-icon layui-icon-refresh refresh-btn"></i>
+    </div>
+    <div class="layui-card-body">
+        <div class="timo-table-wrap">
+            <table class="layui-table timo-table">
+                <thead>
+                <tr>
+                    <th data-field="createTime">时间</th>
+                    <th data-field="machineIpv4">标题</th>
+                    <th data-field="unread">状态</th>
+                    <th>操作</th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr th:each="item:${list}">
+                    <td th:text="${item.createTime}">时间</td>
+                    <td th:text="${item.title}">标题</td>
+                    <td th:text="${item.unread}">未读</td>
+                    <td>
+                        <a class="open-popup" data-title="消息内容" th:attr="data-url=@{'/sys/message/detail/'+${item.id}}"
+                           data-size="960,480" href="#">查看</a>
+                        <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.id} + ' 机器?'"
+                           th:href="@{'/api/sys/msg/' + ${item.id}}">删除</a>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+        <div th:replace="/common/fragment :: page"></div>
+    </div>
+</div>
+
+<script th:replace="/common/template :: script"></script>
+</body>
+</html>

+ 29 - 0
manager/src/main/resources/templates/sys/sysmsgdetail.html

@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})">
+    <style>
+        .page-error {
+            display: -webkit-box;
+            display: -ms-flexbox;
+            display: flex;
+            -webkit-box-align: center;
+            -ms-flex-align: center;
+            align-items: center;
+            -webkit-box-pack: center;
+            -ms-flex-pack: center;
+            justify-content: center;
+            -webkit-box-orient: vertical;
+            -webkit-box-direction: normal;
+            -ms-flex-direction: column;
+            flex-direction: column;
+            min-height: calc(100vh - 110px);
+            margin-bottom: 0;
+        }
+    </style>
+</head>
+<body>
+<div class="page-error" style="color: #009688">
+    <div style="font-size: 18px" th:text="${content}"></div>
+</div>
+</body>
+</html>