CMS内容管理系统

CMS内容管理系统

技术选型

开发工具:eclipse
数据库:Mysql
后端框架:SSM
前端框架:jQuery、Bootstrap、GridManager表格插件

项目架构

BS架构的项目
前台:1.公司官网信息维护
2.轮播图显示
3.文章显示
4.技术视频显示
等…
后台:1.后台管理系统
2.轮播图管理
3.文章管理
4.用户登录登出

实现思路和环境搭建

思路:后台实现内容的管理,包括图片文章视频的增删改查,然后在前台显示
环境搭建:后端框架使用ssm框架,导入需要的jar包,配置xml文件,搭建三层架构

轮播图实现演示

后端代码:

controller

@Controller
@RequestMapping("/system/slide")
public class SlideController {
	
	@Autowired
	private ISlideService service;

	/**
	 * 
	 * @Description:(跳转轮播图管理页面)
	 * @param:@param map
	 * @param:@return   
	 * @return:String  
	 * @author:Rock
	 * @date:2020年9月6日
	 * @version:V1.0
	 */
	@RequestMapping("/slide")
	public String toSlide() {
		return "slide/slide";
	}
	
	/**
	 * 
	 * @Description:(查询展示)
	 * @param:@param query
	 * @param:@return   
	 * @return:PageBean<Article>  
	 * @author:Rock
	 * @date:2020年9月6日
	 * @version:V1.0
	 */
	@RequestMapping("/selectAll")
	@ResponseBody
	public PageBean<Slide> selectAll(SlideQuery query) {
		
		return service.selectAll(query);
	}
	/**
	 * 
	 * @Description:(文件上传)
	 * @param:@param article
	 * @param:@param req
	 * @param:@return   
	 * @return:AjaxResult  
	 * @author:Rock
	 * @date:2020年9月6日
	 * @version:V1.0
	 */
	@RequestMapping("/save")
	@ResponseBody
	public AjaxResult save(Slide slide,HttpServletRequest req,MultipartFile img) {
		try {
			service.save(slide,req,img);
			
			return new AjaxResult();
		} catch (Exception e) {
			return new AjaxResult(false, "上传失败");
		}
	}
	/**
	 * 
	 * @Description:(删除)
	 * @param:@param slide
	 * @param:@param req
	 * @param:@param img
	 * @param:@return   
	 * @return:AjaxResult  
	 * @author:Rock
	 * @date:2020年9月8日
	 * @version:V1.0
	 */
	@RequestMapping("/del")
	@ResponseBody
	public AjaxResult del(Long id ,HttpServletRequest req) {
		try {
			service.del(id,req);
			return new AjaxResult();
		} catch (Exception e) {
			return new AjaxResult(false, "删除失败");
		}
	}
}

service


@Service
public class SlideServicdImpl implements ISlideService {

	@Autowired
	private SlideMapper mapper;

	@Override
	public PageBean<Slide> selectAll(SlideQuery query) {
		// 总条数
		Integer totalCount = mapper.selectCount(query);
		if(totalCount==0){
			return new PageBean<>();//如果一条数据都没有就返回默认值	
		}
		List<Slide> list = mapper.selectAll(query);
		return new PageBean<>(totalCount, list);
	}

	@Override
	public void save(Slide slide, HttpServletRequest req,MultipartFile img) throws Exception {
		if (img !=null) {
			//获取真实路径
			String realPath = req.getServletContext().getRealPath("/static/upload");
			File file = new File(realPath);
			if (!file.exists()) {
				file.mkdirs();
			}
			//获取上传文件名
			String filename = img.getOriginalFilename();
			//获取后缀
			String suffix = filename.substring(filename.lastIndexOf("."));
			String name = System.currentTimeMillis() + suffix;
			
			//获取输出流
			FileOutputStream output = new FileOutputStream(new File(realPath, name));
			//获取输入流
			InputStream input = img.getInputStream();
			//核心代码
			IOUtils.copy(input, output);
			
			//关流
			output.close();
			input.close();
			
			slide.setName(name);
			slide.setPath("/static/upload/"+name);
		}
		if (slide.getId() == null) {
			if (img != null) {
				mapper.add(slide);
			}
		}else{
			if (img !=null) {//图片不为空,意味着要修改图片
//				Long id = slide.getId();//拿到id
//				Slide s1 =mapper.selectById(id);
				String realPath = req.getServletContext().getRealPath("/static/upload");
				String name = slide.getName();
				File file = new File(realPath,name);
				if (file.exists()) {
					file.delete();
				}
				mapper.update(slide);
			}else{//不修改图片,不上传图片,最上面的代码就不执行,name 和path 就是空的,也不必修改,所以mapper.xml需要判断非空
				mapper.update(slide);
			}
		}
		
	}

	@Override
	public void del(Long id, HttpServletRequest req) {
		//获取真实路径
		String realPath = req.getServletContext().getRealPath("/static/upload");
		Slide slide =mapper.selectById(id);
		mapper.del(id);//删除对象
		//删除路径下图片
		String name = slide.getName();
		File file = new File(realPath, name);
		if (file.exists()) {
			file.delete();
		}
	}

	@Override
	public List<Slide> selectSlide() {
		return mapper.selectSlide();
		
	}

}

mapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.itsource.mapper.SlideMapper">
		<!-- List<Slide> selectSlide(); -->
		<select id="selectSlide" resultType="cn.itsource.domain.Slide">
			select * from t_slide where enable = 1
		</select>
		<!-- void del(Long id); -->
		<delete id="del">
			delete from t_slide where id = #{id}
		</delete>

		<!-- Slide selectById(Long id); -->
		<select id="selectById" resultType="cn.itsource.domain.Slide">
			select * from t_slide where id=#{id}
		</select>
		<!-- void update(Slide slide); -->
		
		<update id="update" parameterType="Slide">
			update t_slide
			<set>
				<if test="name != null">
					name = #{name},
				</if>	
				<if test="path != null">
					path = #{path},
				</if>		
				createDate=#{createDate},enable = #{enable} 
			</set>
			where id= #{id}
		</update>
		<!-- void add(Slide slide); -->
		<insert id="add" >
			insert into t_slide (name,path,enable,createDate)
			values(#{name},#{path},#{enable},#{createDate})
		</insert>
	<!-- List<Slide> selectAll(SlideQuery query); -->
		<select id="selectAll" resultType="cn.itsource.domain.Slide">
			select * from t_slide
			<include refid="query"></include>
			limit #{begin},#{pageSize}
		</select>
	<!-- Integer selectCount(SlideQuery query); -->
		<select id="selectCount" resultType="int">
			select count(id) from t_slide
			<include refid="query"></include>
		</select>
		
		<sql id="query">
			<where>
				<if test="enable != null">
					and enable = #{enable}
				</if>
				<if test="name != null and '' != name.trim()">
					and name like concat('%',trim(#{name}),'%')
				</if>
			</where>
		</sql>
</mapper>

前端展示

<script>
					$(function() {
						$.ajax({
							type: "post",
							url: "/home/slide/select",
							dataType: "json",
							success: function(msg){
								$.each(msg,function(index,obj){
									var slide= '<a target="_blank" href=""  class="swiper-slide swiper-lazy"'
										+' data-background="'+obj.path+'">'
										+'<div class="swiper-lazy-preloader"></div></a>'
									$("#showSlide").append(slide);
								})
								var bannerSwiper = new Swiper ('#banner.swiper-container', {
								 	autoplay: { disableOnInteraction: false },
								    loop: true,
								    pagination: {
								      	el: '.swiper-pagination',
								      	bulletElement: 'div',
								     	clickable: true
								    },
									lazy: true
							  	});
							  	$("#banner .swiper-slide")
								  	.mouseenter(function() {
								  		bannerSwiper.autoplay.stop();
								  	})
								  	.mouseleave(function() {
								  		bannerSwiper.autoplay.start();
								  	});
							}
						});
						
					});
				</script>

js代码:

 document.querySelector('#table-demo-ajaxPageCode').GM({
		        gridManagerName: 'demo-ajaxPageCode',
		        ajaxData: '/system/slide/selectAll',
		        ajaxType: 'POST',
		        supportAjaxPage: true, 
		        sizeData: [5,10,15,20],
	    		pageSize: 5,
		        currentPageKey: "currentPage",
		        pageSizeKey: "pageSize", 
		        height: "100%",
		        columnData: [
		            {
		                key: 'name',
		                align: 'center',
		                text: '图片名称'
		            },{
		                key: 'path',
		                align: 'center',
		                text: '文件路径',
		                template: function(cell, row, index, key){
		                	return '<img width="60px" src="'+cell+'" alt="没有图片"/>';
		               	} 
		            },{
		                key: 'createDate',
		                align: 'center',
		                text: '创建日期'
		            },{
		                key: 'enable',
		                align: 'center',
		                text: '是否启用',
		                template: function(cell, row, index, key){
		                	return cell?"启用":"禁用";
		                }
		            },{
		                key: 'id',
		                align: 'center',
		                text: '操作&nbsp;&nbsp;<a id="addButton" style=color:green; href="javascript:;" >新增</a>',
		                template: function(cell, row, index, key){
		                	// 对象转成json格式的string串     
							var rows = JSON.stringify(row);	
							return '<a data-id='+cell+' style="color:red" href="javascript:;">删除</a>&nbsp;&nbsp;'
									+ "<a data-obj='"+rows+"' style='color:blue' href='javascript:;'>修改</a>";
		                } 
		            } 
		            
		        ]
		    });
		    //入口函数
		    $(function(){
		    	//高级查询
		    	$("#queryButton").click(function(){
		    		//获取数据
					var datas = $("#queryForm").serializeObject();
		    		
					// 发送请求
					GridManager.setQuery("demo-ajaxPageCode", datas);
		    	})
		    	
		    	//新增,事件委托
		    	$("body").on("click","#addButton",function(){
		    		//清空数据
		    		$("#saveForm")[0].reset();
		    		//清空隐藏域
		    		$("#hid").val("");
		    		$("#enable").prop("checked",true)	
		    		//弹出模态框
		    		$("#saveModal").modal("show");
		    	})
		    	//修改,事件委托
		    	$("body").on("click","a[data-obj]",function(){
		    		
		    		//清空数据
		    		$("#saveForm")[0].reset();
		    		//清空隐藏域
		    		$("#hid").val("");
	    			//获取数据
	    			var objs = $(this).data("obj");
	    			console.debug(objs);
	    			//将数据传入作用域
	    			$("#saveForm").setForm(objs);
	    		
		    		//弹出模态框
		    		$("#saveModal").modal("show");
		    	})
		    	//保存按钮绑定事件 发送请求
		    	$("#saveButton").click(function(){
		    		$("#saveForm").ajaxSubmit({
		    			success:function(msg){
		    				
		    				if(msg.result){
		    					//关闭添加和修改模态框
		    					$("#saveModal").modal("hide");
		    					//刷新表格
		    					GridManager.refreshGrid('demo-ajaxPageCode');
		    				}else{
		    					alert(msg.error);
		    				}
		    			}
		    		});
		    	})
		    	//删除---->事件委托
		    	$("body").on("click","a[data-id]",function(){
		    		//获取id
		    		var id = $(this).data("id");
		    		//弹出模态框
		    		$("#delModal").modal("show");
		    		//解绑删除按钮,避免多次点击后绑定多次事件
	    			$("#delModelButton").off("click");
		    		//确定删除按钮绑定--发送请求
		    		$("#delModelButton").click(function(){
		    			$.ajax({
		    				type: "post",
		    				url: "/system/slide/del",
		    				data: {"id":id},
		    				dataType: "json",
		    				success: function(msg){
		    					if (msg.result) {
									//关闭模态框
									$("#delModal").modal("hide");
									
									//刷新页面
									GridManager.refreshGrid("demo-ajaxPageCode");
								} else {
									alert(msg.error);
								}
		    				}
		    			})
		    		})
		    
		    	})
		    })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值