python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子管理实现

锋哥原创的Springboot+Layui python222网站实战:

python222网站实战课程视频教程(SpringBoot+Python爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBoot+Python爬虫实战) ( 火爆连载更新中... )共计23条视频,包括:python222网站实战课程视频教程(SpringBoot+Python爬虫实战) ( 火爆连载更新中... )、第2讲 架构搭建实现、第3讲 页面系统属性动态化设计实现等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1yX4y1a7qM/

新建ArticleAdminController

package com.python222.controller.admin;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.python222.entity.Article;
import com.python222.entity.PageBean;
import com.python222.service.ArticleService;
import com.python222.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 管理员-帖子控制器
 * @author python222小锋老师
 * @site www.python222.com
 */
@RestController
@RequestMapping(value = "/admin/article")
public class ArticleAdminController {

    @Autowired
    private ArticleService articleService;

    /**
     * 根据条件分页查询帖子
     * @param page
     * @param limit
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/list")
    public Map<String,Object> list(@RequestParam(value="page",required=false)Integer page,@RequestParam(value="limit",required=false)Integer limit, @RequestParam(value="title",required=false)String title)throws Exception{
        Map<String, Object> resultMap = new HashMap<>();
        PageBean pageBean=new PageBean(page,limit);
        Page<Article> articlePage = articleService.page(new Page<>(pageBean.getPage(), pageBean.getPageSize()),new QueryWrapper<Article>().like(StringUtil.isNotEmpty(title),"title",title).orderByDesc("publish_date"));
        resultMap.put("code", 0);
        resultMap.put("count", articlePage.getTotal());
        resultMap.put("data", articlePage.getRecords());
        return resultMap;
    }


    /**
     * 删除帖子
     * @param id
     * @return
     * @throws Exception
     */
    @RequestMapping("/delete")
    public Map<String,Object> delete(Integer id)throws Exception{
        Map<String, Object> resultMap = new HashMap<>();
        articleService.removeById(id);
        resultMap.put("success", true);
        return resultMap;
    }

    /**
     * 根据id查询帖子实体
     * @param id
     * @return
     * @throws Exception
     */
    @RequestMapping("/findById")
    public Map<String,Object> findById(Integer id)throws Exception{
        Map<String, Object> resultMap = new HashMap<>();
        Article article=articleService.getById(id);
        resultMap.put("article", article);
        resultMap.put("success", true);
        return resultMap;
    }


}

新建articleManage.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>帖子管理</title>
<link rel="stylesheet" href="/static/layui/css/layui.css"></link>
<link rel="stylesheet" href="/static/css/css.css"></link>
</head>
<body>

   <script type="text/html" id="hotSwitchTpl">
      <!-- 这里的 checked 的状态只是演示 -->
      <input type="checkbox" name="{{d.id}}" value="{{d.hot}}" lay-skin="switch" lay-filter="hotSwitch" lay-text="&nbsp;是&nbsp;|&nbsp;否&nbsp;" {{ d.hot == true ? 'checked' : '' }}>
   </script>

   <div style="padding: 20px">
           <span class="layui-breadcrumb">
           <a>首页</a>
           <a><cite>帖子管理</cite></a>
         </span>
          <div style="padding-top: 20px;">
            <div style="padding: 20px">
               <div class="layui-form">

                  <div class="layui-inline">
                     <label class="layui-form-label">文章标题:</label>
                     <div class="layui-input-inline">
                        <input type="text" id="s_title"  placeholder="请输入" autocomplete="off" style="width: 400px" class="layui-input" onkeydown="if(event.keyCode==13) search()"/>
                     </div>
                  </div>


                  <div class="layui-inline">
                     <button class="layui-btn layuiadmin-btn-list"  lay-submit="" onclick="search()" lay-filter="LAY-app-contlist-search">
                        <i class="layui-icon layui-icon-search layuiadmin-button-btn" ></i>
                     </button>
                  </div>
               </div>
             <div>
                <table width="100%" id="articleListTable" ></table>
             </div>
         </div>
     </div>

<script src="/static/layui/layui.js"></script>
<script src="/static/js/jquery.js"></script>
<script src="/static/js/common.js"></script>
<script type="text/javascript">



   function formattedDate(obj){
      const date = new Date(obj.publishDate);
      const year = date.getFullYear();
      const month = (date.getMonth() + 1).toString().padStart(2, '0');
      const day = date.getDate().toString().padStart(2, '0');
      const formattedDate = `${year}-${month}-${day}`;
      return formattedDate
   }




   layui.use(['element','form','table'], function(){
        var form=layui.form;
        var element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块
        $ = layui.jquery; // 使用jquery
        table = layui.table;

        table.render({
          elem: '#articleListTable'
          ,url:'/admin/article/list'
          ,cols: [[
           {type:'checkbox'}
              ,{field:'id', width:100,title: '编号'}
            ,{field:'title',title: '帖子标题'}
            ,{field:'publishDate', width:150,title: '发布日期',templet:formattedDate}
            ,{field:'hot', width:100, title: '热门?',align:'center',templet:hotSwitchTpl}
            ,{field:'action', width:250, title: '操作',align:'center',templet:formatAction}
          ]]
          ,page: true
        });

      // 监听用户状态操作
      form.on('switch(hotSwitch)', function(obj){
         $.post("/admin/article/updateHotState",{"id":this.name,"hot":obj.elem.checked},function(result){
            if(result.success){
               layer.msg("执行成功!");
               table.reload("articleListTable",{});
            }else{
               layer.msg("执行失败,请联系管理员!");
            }
         },"json");

      });


   });


   function search(){
      var s_title=$("#s_title").val();
      table.reload("articleListTable",{
         page:{
            curr:1
         }
         ,where:{
            title:s_title
         }
      })
   }


   function deleteOne(id){
      layer.confirm('您确定要删除这条记录吗?', {
       title:"系统提示"
        ,btn: ['确定','取消'] //按钮
      }, function(){
         layer.closeAll('dialog');
         $.post("/admin/article/delete",{"id":id},function(result){
            if(result.success){
               layer.msg("删除成功!");
               table.reload("articleListTable",{});
            }else{
               layer.msg("删除失败,请联系管理员!");
            }
         },"json");
      }, function(){

      });
   }

   function addArticle(){
      layer.open({
           type: 2,
           title: '添加友情链接',
           area: ['500px', '500px'],
           content: '/admin/saveArticle.html' //iframe的url
         });
   }

   function modifyArticle(id){
      layer.open({
           type: 2,
           title: '修改友情链接',
           area: ['500px', '500px'],
           content: '/admin/saveArticle.html?id='+id //iframe的url
         });
   }

   function publishArticle(id){
      $.post("/admin/article/publish",{"id":id},function(result){
         if(result.success){
            layer.msg("发布成功!");
            table.reload("articleListTable",{});
         }else{
            layer.msg("发布失败,请联系管理员!");
         }
      },"json");
   }

   function modifyArticle(id){
      window.location.href="saveArticle.html?id="+id
   }


   function formatAction(d){
      var s="<button class='layui-btn layui-btn-normal layui-btn-xs' onclick='modifyArticle("+d.id+")'><i class='layui-icon layui-icon-edit'></i>编辑</button><button class='layui-btn layui-btn-warm layui-btn-xs' onclick='deleteOne("+d.id+")'><i class='layui-icon layui-icon-delete' ></i>删除</button>";
      if(d.status==2){
         return s;
      }else{
         return "<button th:if='${d.status!=2}' class='layui-btn layui-btn layui-btn-xs' onclick='publishArticle("+d.id+")'><i class='layui-icon layui-icon-edit'></i>发布帖子</button>"+s;
      }
   }



</script>
</body>
</html>
/**
 * 修改帖子热门状态
 * @param article
 * @return
 */
@RequestMapping("/updateHotState")
public Map<String,Object> updateHotState(Article article){
    Article oldArticle = articleService.getById(article.getId());
    oldArticle.setHot(article.getHot());
    oldArticle.setHotDate(new Date());
    articleService.updateById(oldArticle);

    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("success",true);
    return resultMap;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/352597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go的基准测试

基准测试&#xff08;Benchmark&#xff09;是一项用于测量和评估软件性能指标的方法&#xff0c;主要用于评估你写的代码的性能。 基准测试的代码文件必须以_test.go结尾基准测试的函数必须以Benchmark开头&#xff0c;必须是可导出的基准测试函数必须接受一个指向Benchmark类…

Blender教程-初始用户界面-01

开始第一天的Blender学习、也是业余学习。希望记录下这一份学习的过程、并且分享给大家。今天带大家认识Blender这一款软件&#xff0c;先说说我为什么选择了Blender&#xff0c;我在软件市场找了好久&#xff0c;市场上其他雷同软件都是要么收费要么不好用&#xff0c;最终决定…

文件包含漏洞长度截断

长度截断 文件漏洞的利用方式什么是长度截断通过实操理解00截断对版本要求更高一点&#xff0c;而长度截断则是利用了windows的系统漏洞&#xff0c;就是windows文件名&#xff08;就是文件名后缀之后&#xff09;之后如果有空格&#xff0c;或者是点都会被忽略掉&#xff0c;也…

安科瑞宿舍安全用电监测:科技保障,安全无忧

在当今社会&#xff0c;电力已成为我们日常生活中不可或缺的一部分。然而&#xff0c;不正确的用电方式或管理不善可能会引发火灾等安全事故&#xff0c;给学生带来生命财产威胁。为了解决这一问题&#xff0c;安科瑞宿舍安全用电监测系统应运而生&#xff0c;为学生的用电安全…

day05-盒子模型

01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 li:first-child {background-color: green; } :nth-child(公式) 提示&#xff1a;公式中的n取值从 0 开始。 伪元素选择器 作用&#xff1a;创建虚拟元素&#xff08;伪元素&#xff09;…

JavaWeb01--Tomcat

1、JavaWeb概述 Web开发是基于请求和响应的&#xff1a; 请求&#xff1a;浏览器&#xff08;客户端&#xff09;向服务器发送信息 响应&#xff1a;服务器向浏览器回送信息 请求和响应是成对出现的。 Web资源分类 所谓Web资源即放在Internet网上供外界访问的文件或程序&#x…

基于springboot药房管理系统源码和论文

伴随着全球信息化发展&#xff0c;行行业业都与计算机技术相衔接&#xff0c;计算机技术普遍运用于药房管理行业。实施计算机系统来管理可以降低逍遥大药房管理成本&#xff0c;使整个逍遥大药房行业的发展有显著提升。 本论文主要面向逍遥大药房管理中出现的一些常见问题&…

Gin 应用多实例部署session问题、session参数与刷新

文章目录 一、Gin Session 存储的实现方案二、memstore&#xff1a;基于内存的实现2.1 基本使用2.2 关键参数 三、使用redis&#xff1a;多实例部署3.1 使用redis优势3.2 基本使用 四、信息安全的三个核心概念五、Gin Session 参数5.1 参数介绍 六、Session 自动刷新 一、Gin S…

jenkins+gitlab实现iOS自动打包的坎坷之路(本文包含CI\CD过程中的一些坑点以及一些理解及建议)

本文须知&#xff1a;本文成功案例是配置jekins所在服务器配置打包环境&#xff0c;并非在jenkins中配置打包环境。关于为何不采用在jenkins中配置打包环境将会在文中具体讲解。最后因为是基于jekins所在服务器配置的打包环境&#xff0c;按照本文所诉&#xff0c;实现ios自动打…

Java后端开发:学籍系统核心逻辑

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

SQL语句创建一个简单的银行数据库

目录 一、银行业务E-R图 二、数据库模型图 转换关系模型后&#xff1a; 三、创建数据库 3.1 创建银行业务数据库 四、创建表 4.1 创建客户信息表 4.2 创建银行卡信息表 4.3 创建交易信息表 4.4 创建存款类型表 结果如下&#xff1a; ​编辑 五、插入适量数据 5.1…

【Python】字符串

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

android开发者模式@adb无线调试

文章目录 adb调试功能介绍有线调试无线调试 配置无线adb调试手机端开发者选项配置电脑端配置步骤初次使用进行配对链接设备小结 检查链接是否成功 技巧快速打开无线调试 refs adb调试 功能介绍 ADB&#xff08;Android Debug Bridge&#xff09;是一种强大的命令行工具&#…

Linux初始相关配置

前言 在学完了Linux的相关基础命令后&#xff0c;在正式使用Linux系统之前&#xff0c;我觉得配置一些东西是很有意义的。 文章目录 前言1.权限配置&#xff0c;普通用户无法sudo提权2.vim配置3.vim其他操作4.动静态库5.gcc/g6.程序翻译的过程7.make/makefile8.cmake/CMakeLis…

docker拉取镜像时指定其OS及CPU指令集类型

前言 之前在香橙派5上安装的时候碰到过一次指定镜像的OS及cpu指令集类型的问题&#xff0c;但是当时没有记录&#xff0c;现在用到 了又想不起来&#xff0c;干脆就自己记录一下。预防后面忘掉。docker报错截图 上次时在arm的cpu中运行x86镜像&#xff0c;这次时在x86中运行arm…

仰暮计划|“星星之火可以燎原,平凡人的一生同样值得称赞

传递助老之情&#xff0c;践行为老初心。为学习和发扬助老为老精神&#xff0c;我参与了康乐忆享实践队开展的以“仰暮计划”为主题的实践活动&#xff0c;在实践过程中了解老人的人生经历&#xff0c;传播尊老爱老思想。我与老人谭爷爷在谈论家常时&#xff0c;他拿出年轻时的…

Blender教程-物体的移动、旋转与缩放-04

一、新建一个立方体 ShiftA新建一个立方体用来演示。 二、物体的移动 xyz轴移动 点击下图图左侧的移动选项后&#xff0c;选中要移动的物体&#xff0c;会出现三个箭头的方向&#xff0c;这分别代表沿着x、y、z轴移动。xyz平面移动 这个小正方体代表沿着某一个面移动&#…

基于JAVA的陕西非物质文化遗产网站 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

程序员的平均结婚年龄

关于程序员的平均结婚年龄&#xff0c;根据之前的信息&#xff1a; 一项对全球10000名在职程序员的调查数据显示&#xff0c;程序员第一次结婚的平均年龄是39.43周岁。而在中国的部分地区&#xff0c;如北京等地&#xff0c;程序员群体中普遍反映的结婚年龄是在30岁左右。 程序…

hive面试题

0. 思维导图 1. 简述Hive♥♥ 我理解的&#xff0c;hive就是一款构建数据仓库的工具&#xff0c;它可以就结构化的数据映射为一张表&#xff0c;并且可以通过SQL语句进行查询分析。本质上是将SQL转换为MapReduce或者spark来进行计算&#xff0c;数据是存储在hdfs上&#xff0c;…