Procházet zdrojové kódy

Merge branch 'master' of http://47.100.37.243:10080/ZHOU/yunsu

wutt před 5 roky
rodič
revize
da4fb052f8
19 změnil soubory, kde provedl 610 přidání a 26 odebrání
  1. 56 0
      official_backend/src/main/java/com/hssx/ysofficial/controller/QualificationController.java
  2. 57 0
      official_backend/src/main/java/com/hssx/ysofficial/entity/Qualification.java
  3. 16 0
      official_backend/src/main/java/com/hssx/ysofficial/mapper/QualificationMapper.java
  4. 22 0
      official_backend/src/main/java/com/hssx/ysofficial/service/QualificationService.java
  5. 72 0
      official_backend/src/main/java/com/hssx/ysofficial/service/impl/QualificationServiceImpl.java
  6. 1 1
      official_backend/src/main/java/com/hssx/ysofficial/utility/CodeGenerator.java
  7. 18 0
      official_backend/src/main/resources/mapper/QualificationMapper.xml
  8. 1 0
      official_frontend/src/icons/svg/about.svg
  9. 1 0
      official_frontend/src/icons/svg/qualifications.svg
  10. 20 20
      official_frontend/src/router/index.js
  11. 190 0
      official_frontend/src/views/about/qualifications.vue
  12. 57 0
      website/src/main/java/com/hssx/website/entity/Qualification.java
  13. 16 0
      website/src/main/java/com/hssx/website/mapper/QualificationMapper.java
  14. 16 0
      website/src/main/java/com/hssx/website/service/QualificationService.java
  15. 20 0
      website/src/main/java/com/hssx/website/service/impl/QualificationServiceImpl.java
  16. 4 4
      website/src/main/java/com/hssx/website/service/impl/UserServiceImpl.java
  17. 1 1
      website/src/main/java/com/hssx/website/until/CodeGenerator.java
  18. 18 0
      website/src/main/resources/mapper/QualificationMapper.xml
  19. 24 0
      website/src/main/resources/templates/about.html

+ 56 - 0
official_backend/src/main/java/com/hssx/ysofficial/controller/QualificationController.java

@@ -0,0 +1,56 @@
+package com.hssx.ysofficial.controller;
+
+
+import com.hssx.ysofficial.entity.Qualification;
+import com.hssx.ysofficial.service.QualificationService;
+import com.hssx.ysofficial.utility.HttpRespMsg;
+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 org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-18
+ */
+@RestController
+@RequestMapping("/qualification")
+public class QualificationController {
+    @Autowired
+    private QualificationService qualificationService;
+
+    /**
+     * 获取资质列表
+     */
+    @RequestMapping("/list")
+    public HttpRespMsg getRecruitmentList() {
+        return qualificationService.getQualificationList();
+    }
+
+    /**
+     * 删除资质
+     * id 要删除的资质id
+     */
+    @RequestMapping("/delete")
+    public HttpRespMsg deleteRecruitment(@RequestParam Integer id) {
+        return qualificationService.deleteQualification(id);
+    }
+
+    /**
+     * 新增或修改资质
+     * id 修改时要传的资质id
+     * title 资质标题
+     * content 资质内容
+     * file 图片文件
+     */
+    @RequestMapping("/insertOrUpdate")
+    public HttpRespMsg editRecruitment(Qualification qualification, MultipartFile file) {
+        return qualificationService.editQualification(qualification, file);
+    }
+}
+

+ 57 - 0
official_backend/src/main/java/com/hssx/ysofficial/entity/Qualification.java

@@ -0,0 +1,57 @@
+package com.hssx.ysofficial.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("qualification")
+public class Qualification extends Model<Qualification> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 标题
+     */
+    @TableField(value = "title", insertStrategy = FieldStrategy.IGNORED)
+    private String title;
+
+    /**
+     * 内容
+     */
+    @TableField(value = "content", insertStrategy = FieldStrategy.IGNORED)
+    private String content;
+
+    /**
+     * 图片
+     */
+    @TableField("img_url")
+    private String imgUrl;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
official_backend/src/main/java/com/hssx/ysofficial/mapper/QualificationMapper.java

@@ -0,0 +1,16 @@
+package com.hssx.ysofficial.mapper;
+
+import com.hssx.ysofficial.entity.Qualification;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-18
+ */
+public interface QualificationMapper extends BaseMapper<Qualification> {
+
+}

+ 22 - 0
official_backend/src/main/java/com/hssx/ysofficial/service/QualificationService.java

@@ -0,0 +1,22 @@
+package com.hssx.ysofficial.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.hssx.ysofficial.entity.Qualification;
+import com.hssx.ysofficial.utility.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-18
+ */
+public interface QualificationService extends IService<Qualification> {
+    HttpRespMsg getQualificationList();
+
+    HttpRespMsg deleteQualification(Integer id);
+
+    HttpRespMsg editQualification(Qualification qualification, MultipartFile multipartFile);
+}

+ 72 - 0
official_backend/src/main/java/com/hssx/ysofficial/service/impl/QualificationServiceImpl.java

@@ -0,0 +1,72 @@
+package com.hssx.ysofficial.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hssx.ysofficial.entity.Qualification;
+import com.hssx.ysofficial.mapper.QualificationMapper;
+import com.hssx.ysofficial.service.QualificationService;
+import com.hssx.ysofficial.utility.HttpRespMsg;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.UUID;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-18
+ */
+@Service
+public class QualificationServiceImpl extends ServiceImpl<QualificationMapper, Qualification> implements QualificationService {
+
+    @Resource
+    private QualificationMapper qualificationMapper;
+    @Value("${upload.path}")
+    private String uploadPath;
+
+    @Override
+    public HttpRespMsg getQualificationList() {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.data = qualificationMapper.selectList(new QueryWrapper<>());
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg deleteQualification(Integer id) {
+        qualificationMapper.deleteById(id);
+        return new HttpRespMsg();
+    }
+
+    @Override
+    public HttpRespMsg editQualification(Qualification qualification, MultipartFile multipartFile) {
+        if (multipartFile != null) {
+            String fileName = multipartFile.getOriginalFilename();
+            File direction = new File(uploadPath);
+            String rand = UUID.randomUUID().toString().replaceAll("-", "");
+            String suffix = fileName.substring(fileName.lastIndexOf("."));
+            String storedFileName = rand + suffix;
+            try {
+                File savedFile = new File(direction, storedFileName);
+                savedFile.createNewFile();
+                multipartFile.transferTo(savedFile);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            qualification.setImgUrl("/upload/" + storedFileName);
+        }
+        if (qualification.getId() != null) {
+            qualificationMapper.updateById(qualification);
+        } else {
+            qualificationMapper.insert(qualification);
+        }
+        return new HttpRespMsg();
+    }
+}

+ 1 - 1
official_backend/src/main/java/com/hssx/ysofficial/utility/CodeGenerator.java

@@ -188,7 +188,7 @@ public class CodeGenerator {
         //若想要生成的实体类继承某个Controller,则可打开下面注释。写上需要继承的Controller的位置即可
 //        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
         //单独生成逗号隔开
-        strategy.setInclude("recruitment");
+        strategy.setInclude("qualification");
         //全生成
 //        strategy.setInclude();//表名,多个英文逗号分割
         //多个英文逗号隔开

+ 18 - 0
official_backend/src/main/resources/mapper/QualificationMapper.xml

@@ -0,0 +1,18 @@
+<?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="com.hssx.ysofficial.mapper.QualificationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.ysofficial.entity.Qualification">
+        <id column="id" property="id" />
+        <result column="title" property="title" />
+        <result column="content" property="content" />
+        <result column="img_url" property="imgUrl" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, title, content, img_url
+    </sql>
+
+</mapper>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
official_frontend/src/icons/svg/about.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
official_frontend/src/icons/svg/qualifications.svg


+ 20 - 20
official_frontend/src/router/index.js

@@ -172,27 +172,27 @@ export const constantRoutes = [
   {
     path: '/position',
     component: Layout,
+    meta: { title: '关于我们', icon: 'about' },
     children: [
-      {
-        path: '',
-        name: 'position',
-        component: () => import('@/views/about/position'),
-        meta: { title: '职位管理', icon: 'position' }
-      }
-    ]
-  },
-
-  {
-    path: '/position/:id',
-    component: Layout,
-    children: [
-      {
-        path: '',
-        name: 'positionEdit',
-        hidden: true,
-        component: () => import('@/views/about/positionEdit'),
-        meta: { title: '职位管理编辑', icon: 'position' }
-      }
+        {
+            path: '',
+            name: 'position',
+            component: () => import('@/views/about/position'),
+            meta: { title: '职位管理', icon: 'position' }
+        },
+        {
+            path: '',
+            name: 'positionEdit',
+            hidden: true,
+            component: () => import('@/views/about/positionEdit'),
+            meta: { title: '职位管理编辑', icon: 'position' }
+        },
+        {
+            path: '/qualifications',
+            name: 'qualifications',
+            component: () => import('@/views/about/qualifications'),
+            meta: { title: '荣誉资质', icon: 'qualifications' }
+        }
     ]
   },
 

+ 190 - 0
official_frontend/src/views/about/qualifications.vue

@@ -0,0 +1,190 @@
+<template>
+    <div class="app-container">
+        <el-button size="small" type="primary" @click="openDialog(false, null)" :loading="loading">添加</el-button>
+        <el-table :data="cooperations" style="width: 100%">
+        <el-table-column type="index" width="50"></el-table-column>
+        <el-table-column label="图片" width="200">
+            <template slot-scope="scope">
+            <el-image :src="scope.row.imgUrl"></el-image>
+            <!-- style="width: 200px; height: 200px"  -->
+            </template>
+        </el-table-column>
+        <el-table-column prop="title" label="名称" width="150"></el-table-column>
+        <el-table-column prop="content" label="描述"></el-table-column>
+        <el-table-column label="操作" width="300">
+            <template slot-scope="scope">
+            <el-button size="small" @click="openDialog(true, scope.$index)" :loading="loading">编辑</el-button>
+            <el-button size="small" type="danger" @click="deleteCooperation(scope.row.id)" :loading="loading">删除</el-button>
+            </template>
+        </el-table-column>
+        </el-table>
+
+        <!-- 添加和编辑的dialog -->
+        <el-dialog title="荣誉资质" :visible.sync="addDialogVisible" width="500px">
+            <el-form ref="form" :model="cooperationsForm" :rules="rules" label-width="80px">
+                <el-form-item label="名称" prop="name">
+                    <el-input v-model="cooperationsForm.name" placeholder="请输入名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="描述" prop="description">
+                    <el-input v-model="cooperationsForm.description" placeholder="请输入描述" clearable></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-upload ref="upload" action="customize" :http-request="uploadDiscardFile" :limit="1" :before-remove="beforeRemove">
+                        <el-button size="small" type="primary" :loading="loading">上传一张图片</el-button>
+                    </el-upload>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="addDialogVisible = false">取消</el-button>
+                <el-button type="primary" @click="addCooperation()" :loading="loading">提交</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+    import request from "@/utils/request";
+    export default {
+        data() {
+            return {
+                editing: false,
+                loading: false,
+                addDialogVisible: false,
+                cooperations: [],
+                cooperationsForm: {
+                    id: null,
+                    name: null,
+                    description: null,
+                    image: null
+                },
+            };
+        },
+        methods: {
+            //打开对话框
+            openDialog(isEdit, index) {
+                this.editing = isEdit;
+                if (this.editing) {
+                    this.cooperationsForm.id = this.cooperations[index].id;
+                    this.cooperationsForm.name = this.cooperations[index].title;
+                    this.cooperationsForm.description = this.cooperations[index].content;
+                    this.cooperationsForm.image = null;
+                } else {
+                    this.cooperationsForm.id = null;
+                    this.cooperationsForm.name = "";
+                    this.cooperationsForm.description = "";
+                    this.cooperationsForm.image = null;
+                }
+                this.addDialogVisible = true;
+            },
+            //获取合作信息
+            getCooperations() {
+                this.loading = true;
+                request({
+                    url: "/qualification/list",
+                    method: "post"
+                })
+                .then(response => {
+                    this.cooperations = response.data;
+                    this.loading = false;
+                })
+                .catch(error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    this.loading = false;
+                });
+            },
+
+            //删除合作信息
+            deleteCooperation(id) {
+                request({
+                    url: "/qualification/delete",
+                    method: "post",
+                    params: { id: id }
+                })
+                .then(response => {
+                    this.$message({
+                        message: "删除成功",
+                        type: "success"
+                    });
+                    this.getCooperations();
+                    this.addDialogVisible = false;
+                    this.loading = false;
+                })
+                .catch(error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    this.loading = false;
+                });
+            },
+            //添加/编辑合作信息
+            addCooperation() {
+                this.$refs.form.validate(valid => {
+                    if (valid) {
+                        this.loading = true;
+                        var form = new FormData();
+                        form.append("title", this.cooperationsForm.name);
+                        form.append("content", this.cooperationsForm.description);
+                        //新增记录 并且 没有图片时
+                        if (this.cooperationsForm.image == null && this.editing == false) {
+                            //如果没上传文件的话
+                            this.loading =false;
+                            this.$message({
+                                message: "尚未上传图片",
+                                type: "error"
+                            });
+                            return;
+                            //有图片时
+                        } else if (this.cooperationsForm.image != null) {
+                            form.append("multipartFile", this.cooperationsForm.image);
+                        }
+                        if (this.cooperationsForm.id != null) {
+                            form.append("id", this.cooperationsForm.id);
+                        }
+                        request({
+                            url: "/qualification/insertOrUpdate",
+                            method: "post",
+                            data: form
+                        })
+                        .then(response => {
+                            this.$refs.upload.clearFiles();
+                            this.getCooperations();
+                            this.addDialogVisible = false;
+                            this.loading = false;
+                            this.$message({
+                                message: "添加成功",
+                                type: "success"
+                            });
+                        })
+                        .catch(error => {
+                            this.$message({
+                                message: error,
+                                type: "error"
+                            });
+                            this.loading = false;
+                        });
+                    }
+                });
+            },
+            //文件上传的部分操作
+            uploadDiscardFile(params) {
+                this.cooperationsForm.image = params.file;
+                return false;
+            },
+            //文件上传的移除操作
+            beforeRemove(params) {
+                this.cooperationsForm.image = null;
+            }
+        },
+        mounted() {
+            this.getCooperations();
+        }
+    };
+</script>
+
+<style scoped>
+</style>
+

+ 57 - 0
website/src/main/java/com/hssx/website/entity/Qualification.java

@@ -0,0 +1,57 @@
+package com.hssx.website.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class Qualification extends Model<Qualification> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 内容
+     */
+    @TableField("content")
+    private String content;
+
+    /**
+     * 图片
+     */
+    @TableField("img_url")
+    private String imgUrl;
+
+    /**
+     * 标题
+     */
+    @TableField("title")
+    private String title;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
website/src/main/java/com/hssx/website/mapper/QualificationMapper.java

@@ -0,0 +1,16 @@
+package com.hssx.website.mapper;
+
+import com.hssx.website.entity.Qualification;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-18
+ */
+public interface QualificationMapper extends BaseMapper<Qualification> {
+
+}

+ 16 - 0
website/src/main/java/com/hssx/website/service/QualificationService.java

@@ -0,0 +1,16 @@
+package com.hssx.website.service;
+
+import com.hssx.website.entity.Qualification;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-18
+ */
+public interface QualificationService extends IService<Qualification> {
+
+}

+ 20 - 0
website/src/main/java/com/hssx/website/service/impl/QualificationServiceImpl.java

@@ -0,0 +1,20 @@
+package com.hssx.website.service.impl;
+
+import com.hssx.website.entity.Qualification;
+import com.hssx.website.mapper.QualificationMapper;
+import com.hssx.website.service.QualificationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-18
+ */
+@Service
+public class QualificationServiceImpl extends ServiceImpl<QualificationMapper, Qualification> implements QualificationService {
+
+}

+ 4 - 4
website/src/main/java/com/hssx/website/service/impl/UserServiceImpl.java

@@ -2,10 +2,7 @@ package com.hssx.website.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.hssx.website.entity.Article;
-import com.hssx.website.entity.Cooperations;
-import com.hssx.website.entity.User;
-import com.hssx.website.entity.VipProducts;
+import com.hssx.website.entity.*;
 import com.hssx.website.entity.vo.CooperationsVO;
 import com.hssx.website.mapper.*;
 import com.hssx.website.service.UserService;
@@ -35,6 +32,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     private VipProductsMapper vipProductsMapper;
     @Resource
     private RecruitmentMapper recruitmentMapper;
+    @Resource
+    private QualificationMapper qualificationMapper;
 
     @Override
     public Model getAdvantage(Model model) {
@@ -111,6 +110,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Override
     public Model getAbout(Model model) {
         model.addAttribute("jobs", recruitmentMapper.selectList(new QueryWrapper<>()));
+        model.addAttribute("qualifications", qualificationMapper.selectList(new QueryWrapper<>()));
         return model;
     }
 

+ 1 - 1
website/src/main/java/com/hssx/website/until/CodeGenerator.java

@@ -205,7 +205,7 @@ public class CodeGenerator {
         //此处user是表名,多个英文逗号分割
 //        strategy.setInclude("mould_down_packet");
 //        strategy.setExclude();//数据库表全生成
-        strategy.setInclude("recruitment");//表名,多个英文逗号分割
+        strategy.setInclude("qualification");//表名,多个英文逗号分割
         strategy.setControllerMappingHyphenStyle(true);
         //数据库表前缀,不配置这行的话,生成的类会带有T如:TUser,配置后即可将前缀去掉
 //        strategy.setTablePrefix("tb_");

+ 18 - 0
website/src/main/resources/mapper/QualificationMapper.xml

@@ -0,0 +1,18 @@
+<?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="com.hssx.website.mapper.QualificationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.website.entity.Qualification">
+        <id column="id" property="id" />
+        <result column="content" property="content" />
+        <result column="img_url" property="imgUrl" />
+        <result column="title" property="title" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, content, img_url, title
+    </sql>
+
+</mapper>

+ 24 - 0
website/src/main/resources/templates/about.html

@@ -100,6 +100,30 @@
         </div>
     </div>
     <div id="content">
+        <div class="container">
+            <section class="bar">
+                <div class="row">
+                    <div class="col-md-12">
+                        <div class="heading">
+                            <h2>荣誉资质</h2>
+                        </div>
+                    </div>
+                </div>
+                <div class="row portfolio text-center">
+                    <div class="col-md-3" style="margin-bottom: 60px;" th:each="item : ${qualifications}">
+                        <div class="box-image-text">
+                            <div class="image"><img th:src="${{item.imgUrl}}" alt="..." class="img-fluid">
+                                <!--<div class="overlay d-flex align-items-center justify-content-center"><a href="#" class="btn btn-template-outlined-white"><i class="fa fa-chain"> </i> Read More</a></div>-->
+                            </div>
+                            <div class="content">
+                                <h4><span href="#" th:text="${item.title}"></span></h4>
+                                <p th:text="${item.content}"></p>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </div>
         <div class="container">
             <section class="bar">
                 <div class="row">