Explorar el Código

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

wutt hace 5 años
padre
commit
f976a15838
Se han modificado 31 ficheros con 1081 adiciones y 105 borrados
  1. 74 0
      official_backend/src/main/java/com/hssx/ysofficial/controller/FeedbackController.java
  2. 21 0
      official_backend/src/main/java/com/hssx/ysofficial/controller/ParameterController.java
  3. 65 0
      official_backend/src/main/java/com/hssx/ysofficial/entity/Feedback.java
  4. 53 0
      official_backend/src/main/java/com/hssx/ysofficial/entity/Parameter.java
  5. 16 0
      official_backend/src/main/java/com/hssx/ysofficial/mapper/FeedbackMapper.java
  6. 16 0
      official_backend/src/main/java/com/hssx/ysofficial/mapper/ParameterMapper.java
  7. 26 0
      official_backend/src/main/java/com/hssx/ysofficial/service/FeedbackService.java
  8. 16 0
      official_backend/src/main/java/com/hssx/ysofficial/service/ParameterService.java
  9. 101 0
      official_backend/src/main/java/com/hssx/ysofficial/service/impl/FeedbackServiceImpl.java
  10. 20 0
      official_backend/src/main/java/com/hssx/ysofficial/service/impl/ParameterServiceImpl.java
  11. 1 1
      official_backend/src/main/java/com/hssx/ysofficial/utility/CodeGenerator.java
  12. 19 0
      official_backend/src/main/resources/mapper/FeedbackMapper.xml
  13. 17 0
      official_backend/src/main/resources/mapper/ParameterMapper.xml
  14. 1 0
      official_frontend/src/icons/svg/customer.svg
  15. 13 0
      official_frontend/src/router/index.js
  16. 1 1
      official_frontend/src/utils/request.js
  17. 305 0
      official_frontend/src/views/index/customer.vue
  18. 21 23
      official_frontend/src/views/index/label.vue
  19. 63 0
      website/src/main/java/com/hssx/website/entity/Feedback.java
  20. 51 0
      website/src/main/java/com/hssx/website/entity/Parameter.java
  21. 16 0
      website/src/main/java/com/hssx/website/mapper/FeedbackMapper.java
  22. 16 0
      website/src/main/java/com/hssx/website/mapper/ParameterMapper.java
  23. 16 0
      website/src/main/java/com/hssx/website/service/FeedbackService.java
  24. 16 0
      website/src/main/java/com/hssx/website/service/ParameterService.java
  25. 8 0
      website/src/main/java/com/hssx/website/service/impl/ArticleServiceImpl.java
  26. 20 0
      website/src/main/java/com/hssx/website/service/impl/FeedbackServiceImpl.java
  27. 20 0
      website/src/main/java/com/hssx/website/service/impl/ParameterServiceImpl.java
  28. 19 20
      website/src/main/java/com/hssx/website/until/CodeGenerator.java
  29. 19 0
      website/src/main/resources/mapper/FeedbackMapper.xml
  30. 17 0
      website/src/main/resources/mapper/ParameterMapper.xml
  31. 14 60
      website/src/main/resources/templates/index.html

+ 74 - 0
official_backend/src/main/java/com/hssx/ysofficial/controller/FeedbackController.java

@@ -0,0 +1,74 @@
+package com.hssx.ysofficial.controller;
+
+
+import com.hssx.ysofficial.entity.Feedback;
+import com.hssx.ysofficial.service.FeedbackService;
+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-06
+ */
+@RestController
+@RequestMapping("/feedback")
+public class FeedbackController {
+    @Autowired
+    private FeedbackService feedbackService;
+
+    /**
+     * 获取用户说模块的标题
+     */
+    @RequestMapping("/getFeedbackTitle")
+    public HttpRespMsg getFeedbackTitle() {
+        return feedbackService.getFeedbackTitle();
+    }
+
+    /**
+     * 更新用户说模块的标题
+     * content 标题内容
+     */
+    @RequestMapping("/updateFeedbackTitle")
+    public HttpRespMsg updateFeedbackTitle(@RequestParam String content) {
+        return feedbackService.updateFeedbackTitle(content);
+    }
+
+    /**
+     * 获取用户说模块具体的信息列表
+     */
+    @RequestMapping("/listFeedback")
+    public HttpRespMsg listFeedback() {
+        return feedbackService.listFeedback();
+    }
+
+    /**
+     * 新增或修改某个用户说模块具体的信息
+     * id 修改时需要的id
+     * companyName 公司名称
+     * clientName 客户名称和职称
+     * description 具体描述
+     * file 可上传的图片
+     */
+    @RequestMapping("/insertOrUpdateFeedback")
+    public HttpRespMsg insertOrUpdateFeedback(Feedback feedback, MultipartFile file) {
+        return feedbackService.insertOrUpdateFeedback(feedback, file);
+    }
+
+    /**
+     * 删除某个用户说模块具体的信息
+     * id 要删除的id
+     */
+    @RequestMapping("/deleteFeedback")
+    public HttpRespMsg deleteFeedback(@RequestParam Integer id) {
+        return feedbackService.deleteFeedback(id);
+    }
+}
+

+ 21 - 0
official_backend/src/main/java/com/hssx/ysofficial/controller/ParameterController.java

@@ -0,0 +1,21 @@
+package com.hssx.ysofficial.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 其他简单参数的表 前端控制器
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-06
+ */
+@RestController
+@RequestMapping("/parameter")
+public class ParameterController {
+
+}
+

+ 65 - 0
official_backend/src/main/java/com/hssx/ysofficial/entity/Feedback.java

@@ -0,0 +1,65 @@
+package com.hssx.ysofficial.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+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 Reiskuchen
+ * @since 2020-02-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("feedback")
+public class Feedback extends Model<Feedback> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司名字
+     */
+    @TableField("company_name")
+    private String companyName;
+
+    /**
+     * 发言人职称 姓名
+     */
+    @TableField("client_name")
+    private String clientName;
+
+    /**
+     * 对产品的评价
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 图片
+     */
+    @TableField("pic_url")
+    private String picUrl;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 53 - 0
official_backend/src/main/java/com/hssx/ysofficial/entity/Parameter.java

@@ -0,0 +1,53 @@
+package com.hssx.ysofficial.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+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 Reiskuchen
+ * @since 2020-02-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("parameter")
+public class Parameter extends Model<Parameter> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 参数表主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 参数值
+     */
+    @TableField("parameter_value")
+    private String parameterValue;
+
+    /**
+     * 参数备注
+     */
+    @TableField("parameter_note")
+    private String parameterNote;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

@@ -0,0 +1,16 @@
+package com.hssx.ysofficial.mapper;
+
+import com.hssx.ysofficial.entity.Feedback;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 装饰在首页的客户反馈 Mapper 接口
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-06
+ */
+public interface FeedbackMapper extends BaseMapper<Feedback> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.hssx.ysofficial.mapper;
+
+import com.hssx.ysofficial.entity.Parameter;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 其他简单参数的表 Mapper 接口
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-06
+ */
+public interface ParameterMapper extends BaseMapper<Parameter> {
+
+}

+ 26 - 0
official_backend/src/main/java/com/hssx/ysofficial/service/FeedbackService.java

@@ -0,0 +1,26 @@
+package com.hssx.ysofficial.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.hssx.ysofficial.entity.Feedback;
+import com.hssx.ysofficial.utility.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * 装饰在首页的客户反馈 服务类
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-06
+ */
+public interface FeedbackService extends IService<Feedback> {
+    HttpRespMsg getFeedbackTitle();
+
+    HttpRespMsg updateFeedbackTitle(String content);
+
+    HttpRespMsg listFeedback();
+
+    HttpRespMsg insertOrUpdateFeedback(Feedback feedback, MultipartFile multipartFile);
+
+    HttpRespMsg deleteFeedback(Integer id);
+}

+ 16 - 0
official_backend/src/main/java/com/hssx/ysofficial/service/ParameterService.java

@@ -0,0 +1,16 @@
+package com.hssx.ysofficial.service;
+
+import com.hssx.ysofficial.entity.Parameter;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 其他简单参数的表 服务类
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-06
+ */
+public interface ParameterService extends IService<Parameter> {
+
+}

+ 101 - 0
official_backend/src/main/java/com/hssx/ysofficial/service/impl/FeedbackServiceImpl.java

@@ -0,0 +1,101 @@
+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.Feedback;
+import com.hssx.ysofficial.entity.Parameter;
+import com.hssx.ysofficial.mapper.FeedbackMapper;
+import com.hssx.ysofficial.mapper.ParameterMapper;
+import com.hssx.ysofficial.service.FeedbackService;
+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.util.UUID;
+
+/**
+ * <p>
+ * 装饰在首页的客户反馈 服务实现类
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-06
+ */
+@Service
+public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> implements FeedbackService {
+
+    @Value("${upload.path}")
+    private String uploadPath;
+
+    @Resource
+    private ParameterMapper parameterMapper;
+
+    @Resource
+    private FeedbackMapper feedbackMapper;
+
+    @Override
+    public HttpRespMsg getFeedbackTitle() {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.data = parameterMapper.selectById(1).getParameterValue(); //id是1的即为标题
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg updateFeedbackTitle(String content) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        Parameter parameter = parameterMapper.selectById(1).setParameterValue(content);
+        if (parameterMapper.updateById(parameter) == 0) {
+            httpRespMsg.setError("新增失败");
+        }
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg listFeedback() {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.data = feedbackMapper.selectList(new QueryWrapper<Feedback>().orderByAsc("id"));
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg insertOrUpdateFeedback(Feedback feedback, MultipartFile multipartFile) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        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();
+            }
+            feedback.setPicUrl("/upload/" + storedFileName);
+        }
+        if (feedback.getId() == null) {
+            if (feedbackMapper.insert(feedback) == 0) {
+                httpRespMsg.setError("新增失败");
+            }
+        } else {
+            if (feedbackMapper.updateById(feedback) == 0) {
+                httpRespMsg.setError("修改失败");
+            }
+        }
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg deleteFeedback(Integer id) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        if (feedbackMapper.deleteById(id) == 0) {
+            httpRespMsg.setError("删除失败");
+        }
+        return httpRespMsg;
+    }
+}

+ 20 - 0
official_backend/src/main/java/com/hssx/ysofficial/service/impl/ParameterServiceImpl.java

@@ -0,0 +1,20 @@
+package com.hssx.ysofficial.service.impl;
+
+import com.hssx.ysofficial.entity.Parameter;
+import com.hssx.ysofficial.mapper.ParameterMapper;
+import com.hssx.ysofficial.service.ParameterService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 其他简单参数的表 服务实现类
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2020-02-06
+ */
+@Service
+public class ParameterServiceImpl extends ServiceImpl<ParameterMapper, Parameter> implements ParameterService {
+
+}

+ 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("characteristic");
+        strategy.setInclude("feedback");
         //全生成
 //        strategy.setInclude();//表名,多个英文逗号分割
         //多个英文逗号隔开

+ 19 - 0
official_backend/src/main/resources/mapper/FeedbackMapper.xml

@@ -0,0 +1,19 @@
+<?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.FeedbackMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.ysofficial.entity.Feedback">
+        <id column="id" property="id" />
+        <result column="company_name" property="companyName" />
+        <result column="client_name" property="clientName" />
+        <result column="description" property="description" />
+        <result column="pic_url" property="picUrl" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_name, client_name, description, pic_url
+    </sql>
+
+</mapper>

+ 17 - 0
official_backend/src/main/resources/mapper/ParameterMapper.xml

@@ -0,0 +1,17 @@
+<?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.ParameterMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.ysofficial.entity.Parameter">
+        <id column="id" property="id" />
+        <result column="parameter_value" property="parameterValue" />
+        <result column="parameter_note" property="parameterNote" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, parameter_value, parameter_note
+    </sql>
+
+</mapper>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 0
official_frontend/src/icons/svg/customer.svg


+ 13 - 0
official_frontend/src/router/index.js

@@ -75,6 +75,19 @@ export const constantRoutes = [
     ]
   },
 
+  {
+    path: '/customer',
+    component: Layout,
+    children: [
+      {
+        path: '',
+        name: 'customer',
+        component: () => import('@/views/index/customer'),
+        meta: { title: '客户说', icon: 'customer' }
+      }
+    ]
+  },
+
   {
     path: '/advantage',
     component: Layout,

+ 1 - 1
official_frontend/src/utils/request.js

@@ -8,7 +8,7 @@ const service = axios.create({
     // url = base url + request url
     // baseURL: process.env.VUE_APP_BASE_API,
     baseURL: "http://111.231.87.63:8088",
-    // baseURL: "http://192.168.5.101:8098",
+    // baseURL: "http://192.168.5.184:8098",
     // withCredentials: true, // send cookies when cross-domain requests
     timeout: 5000 // request timeout
 })

+ 305 - 0
official_frontend/src/views/index/customer.vue

@@ -0,0 +1,305 @@
+<template>
+    <div class="app-container">
+        <el-button size="small" type="primary" @click="openDialog(false, null)" :loading="loading">添加</el-button>
+        <el-button size="small" type="primary" @click="openDialog1()" :loading="loading">编辑文案</el-button>
+        <div>
+            <h3>客户说文案</h3>
+            <p>{{copywriting}}</p>
+        </div>
+        <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.picUrl"></el-image>
+                    <!--  style="width: 200px; height: 200px" -->
+                </template>
+            </el-table-column>
+            <el-table-column prop="companyName" label="客户名称" width="150"></el-table-column>
+            <el-table-column prop="clientName" label="客户负责人" width="150"></el-table-column>
+            <el-table-column prop="description" label="客户评价"></el-table-column>
+            <el-table-column label="操作" width="180">
+                <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="100px">
+                <el-form-item label="客户名称" prop="title">
+                    <el-input v-model="cooperationsForm.title" placeholder="请输入客户名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="客户负责人" prop="title1">
+                    <el-input v-model="cooperationsForm.title1" placeholder="请输入客户负责人" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="客户评价" prop="introduction">
+                    <el-input type="textarea" rows="5" v-model="cooperationsForm.introduction" 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>
+
+        <!-- 添加和编辑的dialog -->
+        <el-dialog title="客户说文案" :visible.sync="addDialogVisible1" width="500px">
+            <el-form ref="form" :model="cooperationsForm" :rules="rules" label-width="80px">
+                <el-form-item label="客户名称" prop="copywriting">
+                    <el-input type="textarea" rows="5" v-model="cooperationsForm.copywriting" placeholder="请输入产品名称" clearable></el-input>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="addDialogVisible1 = false">取消</el-button>
+                <el-button type="primary" @click="addCooperation1()" :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,
+                    title: null,
+                    title1: null,
+                    introduction: null,
+                    address: null,
+                    image: null,
+                    copywriting: null
+                },
+                rules: {
+                    title: [{ required: true, message: "请输入客户名称", trigger: "blur" }],
+                    title1: [{ required: true, message: "请输入客户负责人", trigger: "blur" }],
+                    introduction: [{ required: true, message: "请输入客户评价", trigger: "blur"}],
+                    copywriting: [{ required: true, message: "请输入客户说文案", trigger: "blur"}],
+                },
+
+                addDialogVisible1: false,
+                copywriting: '',
+            };
+        },
+        methods: {
+            //打开对话框
+            openDialog(isEdit, index) {
+                this.editing = isEdit;
+                if (this.editing) {
+                    this.cooperationsForm.id = this.cooperations[index].id;
+                    this.cooperationsForm.title = this.cooperations[index].companyName;
+                    this.cooperationsForm.title1 = this.cooperations[index].companyName;
+                    this.cooperationsForm.introduction = this.cooperations[index].description;
+                    this.cooperationsForm.image = null;
+                } else {
+                    this.cooperationsForm.id = null;
+                    this.cooperationsForm.title = "";
+                    this.cooperationsForm.title1 = "";
+                    this.cooperationsForm.introduction = "";
+                    this.cooperationsForm.image = null;
+                }
+                this.addDialogVisible = true;
+            },
+
+            openDialog1() {
+                this.addDialogVisible1 = true;
+            },
+
+            getFeedbackTitle() {
+                request({
+                    url: "/feedback/getFeedbackTitle",
+                    method: "post",
+                    params: {}
+                })
+                .then(response => {
+                    this.copywriting = response.data.parameterValue;
+                    this.cooperationsForm.copywriting = response.data.parameterValue;
+                })
+                .catch(error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+
+            addCooperation1() {
+                this.$refs.form.validate(valid => {
+                    if (valid) {
+                        request({
+                            url: "/feedback/list",
+                            method: "post",
+                            params: {content: this.cooperationsForm.copywriting}
+                        })
+                        .then(response => {
+                            this.$message({
+                                message: "编辑成功",
+                                type: "success"
+                            });
+                            this.addDialogVisible1 = false;
+                            this.getFeedbackTitle();
+                        })
+                        .catch(error => {
+                            this.$message({
+                                message: error,
+                                type: "error"
+                            });
+                            this.loading = false;
+                        });
+                    }
+                })
+            },
+
+            //获取合作信息
+            getCooperations() {
+                this.loading = true;
+                request({
+                    url: "/feedback/listFeedback",
+                    method: "post",
+                    params: {pageIndex:1,pageSize: 9999999}
+                })
+                .then(response => {
+                    this.cooperations = response.data;
+                    this.loading = false;
+                })
+                .catch(error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    this.loading = false;
+                });
+            },
+
+            //删除合作信息
+            deleteCooperation(id) {
+                request({
+                    url: "/feedback/deleteFeedback",
+                    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("companyName", this.cooperationsForm.title);
+                        form.append("clientName", this.cooperationsForm.title1);
+                        form.append("description", this.cooperationsForm.introduction);
+                        //新增记录 并且 没有图片时
+                        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("file", this.cooperationsForm.image);
+                        }
+                        if (this.cooperationsForm.id != null) {
+                            form.append("id", this.cooperationsForm.id);
+                        }
+                        request({
+                            url: "/feedback/insertOrUpdateFeedback",
+                            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;
+                        });
+                    }
+                });
+            },
+
+            //切换置顶
+            switchSticky(id) {
+                request({
+                    url: "/cooperations/switchCooperationSticky",
+                    method: "post",
+                    params: { id: id }
+                })
+                .then(response => {
+                    this.$message({
+                        message: "操作成功",
+                        type: "success"
+                    });
+                    this.getCooperations();
+                })
+                .catch(error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+
+            //文件上传的部分操作
+            uploadDiscardFile(params) {
+                this.cooperationsForm.image = params.file;
+                return false;
+            },
+
+            //文件上传的移除操作
+            beforeRemove(params) {
+                this.cooperationsForm.image = null;
+            }
+        },
+        mounted() {
+            this.getFeedbackTitle();
+            this.getCooperations();
+        }
+    };
+</script>
+
+<style scoped>
+</style>
+

+ 21 - 23
official_frontend/src/views/index/label.vue

@@ -3,12 +3,12 @@
         <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">
+            <!-- <el-table-column label="标签图片" width="200">
                 <template slot-scope="scope">
                     <el-image :src="scope.row.imageUrl"></el-image>
-                    <!--  style="width: 200px; height: 200px" -->
+                     style="width: 200px; height: 200px"
                 </template>
-            </el-table-column>
+            </el-table-column> -->
             <el-table-column prop="name" label="标签名称" width="150"></el-table-column>
             <el-table-column prop="description" label="标签描述"></el-table-column>
             <el-table-column label="操作" width="180">
@@ -28,11 +28,11 @@
                 <el-form-item label="标签描述" prop="introduction">
                     <el-input v-model="cooperationsForm.introduction" placeholder="请输入标签描述" clearable></el-input>
                 </el-form-item>
-                <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-item> -->
             </el-form>
             <span slot="footer" class="dialog-footer">
                 <el-button @click="addDialogVisible = false">取消</el-button>
@@ -55,15 +55,13 @@
                     id: null,
                     title: null,
                     introduction: null,
-                    // type: null,
                     address: null,
-                    image: null
+                    // image: null
                 },
                 rules: {
                     title: [{ required: true, message: "请输入标签名称", trigger: "blur" }],
                     introduction: [{ required: true, message: "请输入标签描述", trigger: "blur"}],
                     address: [{ required: true, message: "请输入标签网址", trigger: "blur"}],
-                    // type: [{ required: true, message: "请选择标签类型", trigger: "change" }]
                 }
             };
         },
@@ -75,12 +73,12 @@
                     this.cooperationsForm.id = this.cooperations[index].id;
                     this.cooperationsForm.title = this.cooperations[index].name;
                     this.cooperationsForm.introduction = this.cooperations[index].description;
-                    this.cooperationsForm.image = null;
+                    // this.cooperationsForm.image = null;
                 } else {
                     this.cooperationsForm.id = null;
                     this.cooperationsForm.title = "";
                     this.cooperationsForm.introduction = "";
-                    this.cooperationsForm.image = null;
+                    // this.cooperationsForm.image = null;
                 }
                 this.addDialogVisible = true;
             },
@@ -140,18 +138,18 @@
                         form.append("name", this.cooperationsForm.title);
                         form.append("description", this.cooperationsForm.introduction);
                         //新增记录 并且 没有图片时
-                        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("file", this.cooperationsForm.image);
-                        }
+                        // 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("file", this.cooperationsForm.image);
+                        // }
                         if (this.cooperationsForm.id != null) {
                             form.append("id", this.cooperationsForm.id);
                         }
@@ -161,7 +159,7 @@
                             data: form
                         })
                         .then(response => {
-                            this.$refs.upload.clearFiles();
+                            // this.$refs.upload.clearFiles();
                             this.getCooperations();
                             this.addDialogVisible = false;
                             this.loading = false;

+ 63 - 0
website/src/main/java/com/hssx/website/entity/Feedback.java

@@ -0,0 +1,63 @@
+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-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class Feedback extends Model<Feedback> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司名字
+     */
+    @TableField("company_name")
+    private String companyName;
+
+    /**
+     * 发言人职称 姓名
+     */
+    @TableField("client_name")
+    private String clientName;
+
+    /**
+     * 对产品的评价
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 图片
+     */
+    @TableField("pic_url")
+    private String picUrl;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 51 - 0
website/src/main/java/com/hssx/website/entity/Parameter.java

@@ -0,0 +1,51 @@
+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-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class Parameter extends Model<Parameter> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 参数表主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 参数值
+     */
+    @TableField("parameter_value")
+    private String parameterValue;
+
+    /**
+     * 参数备注
+     */
+    @TableField("parameter_note")
+    private String parameterNote;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

@@ -0,0 +1,16 @@
+package com.hssx.website.mapper;
+
+import com.hssx.website.entity.Feedback;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 装饰在首页的客户反馈 Mapper 接口
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-06
+ */
+public interface FeedbackMapper extends BaseMapper<Feedback> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.hssx.website.mapper;
+
+import com.hssx.website.entity.Parameter;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 其他简单参数的表 Mapper 接口
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-06
+ */
+public interface ParameterMapper extends BaseMapper<Parameter> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.hssx.website.service;
+
+import com.hssx.website.entity.Feedback;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 装饰在首页的客户反馈 服务类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-06
+ */
+public interface FeedbackService extends IService<Feedback> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.hssx.website.service;
+
+import com.hssx.website.entity.Parameter;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 其他简单参数的表 服务类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-06
+ */
+public interface ParameterService extends IService<Parameter> {
+
+}

+ 8 - 0
website/src/main/java/com/hssx/website/service/impl/ArticleServiceImpl.java

@@ -34,6 +34,10 @@ public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> impl
     private CompanyProductsMapper companyProductsMapper;
     @Resource
     private CharacteristicMapper characteristicMapper;
+    @Resource
+    private ParameterMapper parameterMapper;
+    @Resource
+    private FeedbackMapper feedbackMapper;
 
     @Override
     public Model getList(Model model) {
@@ -50,6 +54,10 @@ public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> impl
                 .selectList(new QueryWrapper<Comment>().orderByAsc("id")));
         model.addAttribute("characteristic", characteristicMapper
                 .selectList(new QueryWrapper<Characteristic>().orderByAsc("id")));
+        model.addAttribute("feedbackTitle", parameterMapper
+                .selectById(1).getParameterValue()); //String参数表id为1的项即是此处文案
+        model.addAttribute("feedback", feedbackMapper
+                .selectList(new QueryWrapper<Feedback>().orderByAsc("id")));
         return model;
     }
 

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

@@ -0,0 +1,20 @@
+package com.hssx.website.service.impl;
+
+import com.hssx.website.entity.Feedback;
+import com.hssx.website.mapper.FeedbackMapper;
+import com.hssx.website.service.FeedbackService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 装饰在首页的客户反馈 服务实现类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-06
+ */
+@Service
+public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> implements FeedbackService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.hssx.website.service.impl;
+
+import com.hssx.website.entity.Parameter;
+import com.hssx.website.mapper.ParameterMapper;
+import com.hssx.website.service.ParameterService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 其他简单参数的表 服务实现类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-06
+ */
+@Service
+public class ParameterServiceImpl extends ServiceImpl<ParameterMapper, Parameter> implements ParameterService {
+
+}

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

@@ -18,19 +18,18 @@ import java.util.Scanner;
 
 /**
  * mybatis-plus代码生成器
- *  使用该类需要添加以下依赖,在此之前请移除所有与mybatis有关的其他依赖,防止冲突
- *   <dependency>
- *      <groupId>com.baomidou</groupId>
- *       <artifactId>mybatis-plus-generator</artifactId>
- *       <version>3.1.2</version>
- *  </dependency>
- *
- *  <dependency>
- *        <groupId>com.baomidou</groupId>
- *        <artifactId>mybatis-plus-boot-starter</artifactId>
- *        <version>3.1.2</version>
- *   </dependency>
+ * 使用该类需要添加以下依赖,在此之前请移除所有与mybatis有关的其他依赖,防止冲突
+ * <dependency>
+ * <groupId>com.baomidou</groupId>
+ * <artifactId>mybatis-plus-generator</artifactId>
+ * <version>3.1.2</version>
+ * </dependency>
  *
+ * <dependency>
+ * <groupId>com.baomidou</groupId>
+ * <artifactId>mybatis-plus-boot-starter</artifactId>
+ * <version>3.1.2</version>
+ * </dependency>
  */
 // 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
 public class CodeGenerator {
@@ -131,7 +130,7 @@ public class CodeGenerator {
          *             <version>2.0</version>
          *         </dependency>
          */
-         String templatePath = "/templates/mapper.xml.vm";
+        String templatePath = "/templates/mapper.xml.vm";
 
         // 自定义输出配置
         List<FileOutConfig> focList = new ArrayList<>();
@@ -139,10 +138,10 @@ public class CodeGenerator {
         focList.add(new FileOutConfig(templatePath) {
             @Override
             public String outputFile(TableInfo tableInfo) {
-                if(pc.getModuleName() == null){
+                if (pc.getModuleName() == null) {
                     return projectPath + "/src/main/resources/mapper/"
                             + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
-                }else{
+                } else {
                     // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                     return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                             + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
@@ -160,15 +159,15 @@ public class CodeGenerator {
                 //对于已存在的文件,只需重复生成 entity 和 mapper.xml
                 File file = new File(filePath);
                 boolean exist = file.exists();
-                if(exist){
-                    if (filePath.endsWith("Mapper.xml")||FileType.ENTITY==fileType){
+                if (exist) {
+                    if (filePath.endsWith("Mapper.xml") || FileType.ENTITY == fileType) {
                         return true;
-                    }else {
+                    } else {
                         return false;
                     }
                 }
                 //不存在的文件都需要创建
-                return  true;
+                return true;
             }
         });
 
@@ -206,7 +205,7 @@ public class CodeGenerator {
         //此处user是表名,多个英文逗号分割
 //        strategy.setInclude("mould_down_packet");
 //        strategy.setExclude();//数据库表全生成
-        strategy.setInclude("characteristic");//表名,多个英文逗号分割
+        strategy.setInclude("feedback");//表名,多个英文逗号分割
         strategy.setControllerMappingHyphenStyle(true);
         //数据库表前缀,不配置这行的话,生成的类会带有T如:TUser,配置后即可将前缀去掉
 //        strategy.setTablePrefix("tb_");

+ 19 - 0
website/src/main/resources/mapper/FeedbackMapper.xml

@@ -0,0 +1,19 @@
+<?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.FeedbackMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.website.entity.Feedback">
+        <id column="id" property="id" />
+        <result column="company_name" property="companyName" />
+        <result column="client_name" property="clientName" />
+        <result column="description" property="description" />
+        <result column="pic_url" property="picUrl" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_name, client_name, description, pic_url
+    </sql>
+
+</mapper>

+ 17 - 0
website/src/main/resources/mapper/ParameterMapper.xml

@@ -0,0 +1,17 @@
+<?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.ParameterMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.website.entity.Parameter">
+        <id column="id" property="id" />
+        <result column="parameter_value" property="parameterValue" />
+        <result column="parameter_note" property="parameterNote" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, parameter_value, parameter_note
+    </sql>
+
+</mapper>

+ 14 - 60
website/src/main/resources/templates/index.html

@@ -99,9 +99,15 @@
     <section class="bar background-white background-wap">
         <div class="container text-center">
             <div class="row">
-                <div class="col-lg-4 col-md-6" th:each="item : ${characteristic}">
+                <div class="col-lg-4 col-md-6" th:each="item,itemStat : ${characteristic}">
                     <div class="box-simple">
-                        <img class="icon-outlined" style="border: none;border-radius:unset;width:150px;height: unset;line-height: unset;" th:src="${{item.imageUrl}}">
+<!--                        <img class="icon-outlined" style="border: none;border-radius:unset;width:150px;height: unset;line-height: unset;" th:src="${{item.imageUrl}}">-->
+                        <div class="icon-outlined" th:if="${{itemStat.index}}==0"><i class="fa fa-desktop"></i></div>
+                        <div class="icon-outlined" th:if="${{itemStat.index}}==1"><i class="fa fa-print"></i></div>
+                        <div class="icon-outlined" th:if="${{itemStat.index}}==2"><i class="fa fa-globe"></i></div>
+                        <div class="icon-outlined" th:if="${{itemStat.index}}==3"><i class="fa fa-lightbulb-o"></i></div>
+                        <div class="icon-outlined" th:if="${{itemStat.index}}==4"><i class="fa fa-envelope-o"></i></div>
+                        <div class="icon-outlined" th:if="${{itemStat.index}}==5"><i class="fa fa-user"></i></div>
                         <h3 class="h4" th:text="${{item.name}}"></h3>
                         <p th:text="${{item.description}}"></p>
                     </div>
@@ -114,75 +120,23 @@
             <div class="heading text-center">
                 <h2>客户说</h2>
             </div>
-            <p class="lead">塑维智造是一款云端制造协同系统,通过数据和算法让生产更加高效。基于数据聚合、多角色协同、可视化分析、
+            <p class="lead" th:text="${{feedbackTitle}}">塑维智造是一款云端制造协同系统,通过数据和算法让生产更加高效。基于数据聚合、多角色协同、可视化分析、
                 智能决策四大亮点,帮助企业缩短生产周期、降低库存积压、提升产能利用率、透明化制造流程,实现数据驱动下的精益制造。</p>
             <!-- Carousel Start-->
             <ul class="owl-carousel testimonials list-unstyled equal-height">
-                <li class="item">
+                <li class="item" th:each="item,itemStat : ${feedback}">
                     <div class="testimonial d-flex flex-wrap">
                         <div class="text">
-                            <p>「 对比多家供应商后,我们选择了塑维,事实证明我们的选择是正确的,产能得到了大幅度提升! 」</p>
+                            <p th:text="${{item.description}}">「 对比多家供应商后,我们选择了塑维,事实证明我们的选择是正确的,产能得到了大幅度提升! 」</p>
                         </div>
                         <div class="bottom d-flex align-items-center justify-content-between align-self-end">
                             <div class="icon"><i class="fa fa-quote-left"></i></div>
                             <div class="testimonial-info d-flex">
                                 <div class="title">
-                                    <h5>南京维和制造</h5>
-                                    <p>CEO, 杨树人</p>
+                                    <h5 th:text="${{item.companyName}}">南京维和制造</h5>
+                                    <p th:text="${{item.clientName}}">CEO, 杨树人</p>
                                 </div>
-                                <div class="avatar"><img alt="" src="img/person-1.jpg" class="img-fluid"></div>
-                            </div>
-                        </div>
-                    </div>
-                </li>
-                <li class="item">
-                    <div class="testimonial d-flex flex-wrap">
-                        <div class="text">
-                            <p>「 工厂内很多以前难以收集、分析的数据,通过黑湖智造系统得以聚合、分析,帮助我们更好地发现生产问题,提升产能! 」</p>
-                        </div>
-                        <div class="bottom d-flex align-items-center justify-content-between align-self-end">
-                            <div class="icon"><i class="fa fa-quote-left"></i></div>
-                            <div class="testimonial-info d-flex">
-                                <div class="title">
-                                    <h5>黑湖科技</h5>
-                                    <p>设备 生产主管</p>
-                                </div>
-                                <div class="avatar"><img alt="" src="img/person-2.jpg" class="img-fluid"></div>
-                            </div>
-                        </div>
-                    </div>
-                </li>
-                <li class="item">
-                    <div class="testimonial d-flex flex-wrap">
-                        <div class="text">
-                            <p>「 上了黑湖智造系统之后,有效改造了厂内协同混乱的情况!物料、排程、生产、质检等信息都能够无缝打通! 」</p>
-                            <!--<p>A collection of textile samples lay spread out on the table - Samsa was a travelling salesman - and above it there hung a picture that he had recently cut out of an illustrated magazine and housed in a nice, gilded frame.</p>-->
-                        </div>
-                        <div class="bottom d-flex align-items-center justify-content-between align-self-end">
-                            <div class="icon"><i class="fa fa-quote-left"></i></div>
-                            <div class="testimonial-info d-flex">
-                                <div class="title">
-                                    <h5>黑湖科技</h5>
-                                    <p>设备 项目经理</p>
-                                </div>
-                                <div class="avatar"><img alt="" src="img/person-3.png" class="img-fluid"></div>
-                            </div>
-                        </div>
-                    </div>
-                </li>
-                <li class="item">
-                    <div class="testimonial d-flex flex-wrap">
-                        <div class="text">
-                            <p>「 对比多家供应商后,我们选择了塑维,事实证明我们的选择是正确的,产能得到了大幅度提升! 」</p>
-                        </div>
-                        <div class="bottom d-flex align-items-center justify-content-between align-self-end">
-                            <div class="icon"><i class="fa fa-quote-left"></i></div>
-                            <div class="testimonial-info d-flex">
-                                <div class="title">
-                                    <h5>南京维和制造</h5>
-                                    <p>生产经理, 张大牛</p>
-                                </div>
-                                <div class="avatar"><img alt="" src="img/person-4.jpg" class="img-fluid"></div>
+                                <div class="avatar"><img alt="" th:src="${{item.picUrl}}" class="img-fluid"></div>
                             </div>
                         </div>
                     </div>