当前位置: 首页 > news >正文

VUE+SPRINGBOOT从0-1打造前后端-前后台系统-文章列表

在当今信息爆炸的时代,新闻管理系统成为了各类网站和应用的标配功能。本文将详细介绍一个基于Vue.js前端框架和Spring Boot后端框架的新闻管理系统的设计与实现过程。该系统不仅实现了基本的新闻增删改查功能,还包含了点赞、分页、搜索等实用特性。

系统架构

前端架构

  • Vue.js:作为前端主框架,提供响应式数据绑定和组件化开发

  • Element UI:提供丰富的UI组件,如表格、分页、输入框等

  • Axios:处理HTTP请求,与后端API交互

  • Vue Router:管理前端路由

后端架构

  • Spring Boot:快速构建RESTful API

  • MyBatis Plus:简化数据库操作

  • Hutool:提供Excel导出等实用工具类

核心功能实现

1. 新闻列表展示与分页

前端通过IndexNews.vue组件展示新闻列表,关键代码如下:

// 分页查询方法
selectListPage() {this.$http.post("/news/list_page", this.send).then(res => {if (res.data.code === "200") {this.send.total = res.data.object.totalthis.list = res.data.object.data} else {this.$message.error('查询失败,' + res.data.code)router.push("/login")}})
}

后端对应的分页查询接口:

@PostMapping("/list_page")
public Res list_page(@RequestBody News news) {// 构建查询条件QueryWrapper<News> queryWrapper = new QueryWrapper<>();if (!MyUtils.blankFlag(news.getTitle())) {queryWrapper.like("title", news.getTitle());}if (!MyUtils.blankFlag(news.getContent())) {queryWrapper.like("content", news.getContent());}queryWrapper.orderByDesc("time");// 分页处理Integer total = Math.toIntExact(newsMapper.selectCount(queryWrapper));MyUtils.selectByPageManage(total, news);queryWrapper.last("limit " + news.getStart() + "," + news.getEnd());// 执行查询List<News> dataList = newsMapper.selectList(queryWrapper);// 返回结果HashMap<Object, Object> hashMap = new HashMap<>();hashMap.put("total", total);hashMap.put("data", dataList);return Res.success(hashMap);
}

2. 新闻搜索功能

系统支持按标题和内容进行搜索:

运行

<el-input v-model="send.title" placeholder="标题"></el-input>
<el-input v-model="send.content" placeholder="正文"></el-input>
<el-button @click="selectListPage">搜索</el-button>

3. 点赞功能实现

用户可以为喜欢的新闻点赞:

add_praise(id) {this.send.id = idthis.$http.post("/news/add_praise", this.send).then(res => {if (res.data.code === "200") {this.$message.success("点赞成功");this.selectListPage();}})
}

后端点赞接口:

@PostMapping("/add_praise")
public Res add_praise(@RequestBody News news) {News existNews = newsMapper.selectById(news.getId());existNews.setPraise(existNews.getPraise() + 1);newsMapper.updateById(existNews);return Res.success(null);
}

4. 新闻管理功能(管理员权限)

管理员可以删除新闻:

<span v-if="user.role === '管理员'"><a @click="confirmDelete(item.id)"><i class="el-icon-delete"></i> 删除</a>
</span>

对应的删除方法:

confirmDelete(id) {this.sendForm.id = idthis.$http.post("/news/delete", this.sendForm).then(res => {if (res.data.code === "200") {this.$message.success('删除成功')}this.selectListPage()})
}

后端删除接口:

@PostMapping("/delete")
public Res delete(@RequestBody News news) {newsMapper.deleteById(news);return Res.success(null);
}

技术亮点

1. 自定义滚动条样式

通过CSS实现了美观的滚动条:

.outer-scroll-container {&::-webkit-scrollbar {width: 2px;}&::-webkit-scrollbar-track {background: #f1f1f1;}&::-webkit-scrollbar-thumb {background: #888;border-radius: 4px;}
}

2. SEO优化

通过Vue的head配置实现了SEO优化:

head() {return {title: '新闻列表 - 人工智能系统',meta: [{hid: 'description', name: 'description', content: '人工智能最新新闻动态和资讯'},{hid: 'keywords', name: 'keywords', content: '人工智能新闻,人工智能资讯,人工智能动态'},]}
}

3. Excel导出功能

使用Hutool工具实现了Excel导出:

@GetMapping("/list_export")
public Res list_export(HttpServletResponse response) throws Exception {List<News> newsList = newsMapper.selectList(null);ExcelWriter excelWriter = ExcelUtil.getWriter(true);// 设置表头别名excelWriter.addHeaderAlias("id", "id");excelWriter.addHeaderAlias("title", "title");// ...其他字段excelWriter.write(newsList, true);// 设置响应头response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");String fileName = URLEncoder.encode("小说记录", "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");// 输出流处理ServletOutputStream out = response.getOutputStream();excelWriter.flush(out, true);out.close();excelWriter.close();return Res.success(null);
}

总结

本文详细介绍了一个完整的新闻管理系统的设计与实现过程。系统前端采用Vue.js+Element UI构建用户界面,后端使用Spring Boot提供RESTful API,数据库操作通过MyBatis Plus简化。系统实现了新闻的增删改查、分页展示、搜索过滤、点赞统计等功能,并针对管理员提供了新闻管理功能。

该系统架构清晰,代码规范,具有良好的扩展性和维护性。开发者可以根据实际需求进一步扩展功能,如增加新闻分类、评论系统、用户收藏等特性,使其成为一个更加完善的新闻平台。

http://www.dtcms.com/a/319854.html

相关文章:

  • [TIP 2025] 轻量级光谱注意力LSA,极致优化,减少99.8%参数,提升性能!
  • kafka安装与参数配置
  • MPC-in-the-Head 转换入门指南
  • 抖音、快手、视频号等多平台视频解析下载 + 磁力嗅探下载、视频加工(提取音频 / 压缩等)
  • 【性能测试】---测试工具篇(jmeter)
  • Java垃圾回收(GC)探析
  • 图像理解、计算机视觉相关名词解释
  • 最新教程 | CentOS 7 内网环境 Nginx + ECharts 页面离线部署手册(RPM 安装方式)
  • yolo目标检测技术:基础概念(一)
  • Vscode Data Wrangler 数据查看和处理工具
  • Docker容器技术详解
  • 施易德智慧门店管理系统:零售品牌出海的高效引擎
  • mysql 索引失效分析
  • Cesium粒子系统模拟风场动态效果
  • 国内使用 npm 时配置镜像源
  • 网络安全等级保护(等保)2.0 概述
  • 树莓派下载安装miniconda(linux版小anaconda)
  • 【奔跑吧!Linux 内核(第二版)】第6章:简单的字符设备驱动(一)
  • 解决 Nginx 反代中 proxy_ssl_name 环境变量失效问题:网页能打开但登录失败
  • 3深度学习Pytorch-神经网络--全连接神经网络、数据准备(构建数据类Dataset、TensorDataset 和数据加载器DataLoader)
  • TCP 如何保证可靠性
  • Linux openssl、openssh 升级 保留旧版本
  • 【插件式微服务架构系统分享】之 解耦至上:gateway 网关与APISIX 网关的不同分工
  • React 为什么要自定义 Hooks?
  • 一文解读“Performance面板”前端性能优化工具基础用法!
  • 顺序表——C语言
  • FPGA学习笔记——VGA静态字符的显示(寄存器)
  • SOMGAN:利用自组织映射提高生成对抗网络的模式探索能力
  • 国内PCB批量厂家推荐
  • Linux 文件IO与标准IO的区别解析