Sfoglia il codice sorgente

完善简历逻辑

王育民 5 anni fa
parent
commit
dcfdb88c5e

+ 70 - 0
src/main/java/cn/minbb/job/controller/rest/UserController.java

@@ -0,0 +1,70 @@
+package cn.minbb.job.controller.rest;
+
+import cn.minbb.job.data.Const;
+import cn.minbb.job.data.ResponseResult;
+import cn.minbb.job.model.Resume;
+import cn.minbb.job.model.User;
+import cn.minbb.job.model.vo.UserVo;
+import cn.minbb.job.service.ResumeService;
+import cn.minbb.job.service.UserService;
+import cn.minbb.job.system.UserSession;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@Log4j2
+@RequestMapping("/user")
+@RestController
+public class UserController {
+
+    private final UserService userService;
+    private final ResumeService resumeService;
+
+    public UserController(UserService userService, ResumeService resumeService) {
+        this.userService = userService;
+        this.resumeService = resumeService;
+    }
+
+    @PostMapping("/info")
+    public ResponseResult<UserVo> userInfo(@RequestBody Map<String, String> params) {
+        User user = UserSession.getUserAuthentication();
+        if (null == user) {
+            return ResponseResult.<UserVo>ok(Boolean.FALSE).code(Const.ReturnCode.FAILED).message("用户未登录").build();
+        } else {
+            user = userService.findUserByUsername(user.getUsername());
+            Resume resume = resumeService.findOneByUserId(user.getId());
+            if (null == resume) {
+                resume = JSON.parseObject(JSON.toJSONString(params), Resume.class);
+            } else {
+                Resume obj = JSON.parseObject(JSON.toJSONString(params), Resume.class);
+                resume.setName(obj.getName());
+                resume.setPhoto(obj.getPhoto());
+                resume.setJobPlanning(obj.getJobPlanning());
+                resume.setPhone(obj.getPhone());
+                resume.setMail(obj.getMail());
+                resume.setWebsite(obj.getWebsite());
+                resume.setHome(obj.getHome());
+                resume.setSignature(obj.getSignature());
+                resume.setPlace(obj.getPlace());
+                resume.setEduTime(obj.getEduTime());
+                resume.setEduSchool(obj.getEduSchool());
+                resume.setEduProfession(obj.getEduProfession());
+                resume.setWorkTime(obj.getWorkTime());
+                resume.setWorkCompany(obj.getWorkCompany());
+                resume.setWorkPosition(obj.getWorkPosition());
+                resume.setWorkDescription(obj.getWorkDescription());
+                resume.setWorkGain(obj.getWorkGain());
+                resume.setSkill(obj.getSkill());
+                resume.setProject(obj.getProject());
+                resume.setHobby(obj.getHobby());
+                resume.setDescription(obj.getDescription());
+            }
+            resume.setUserId(user.getId());
+            resume.setIsEnabled(Boolean.TRUE);
+            resumeService.saveOne(resume);
+        }
+        return ResponseResult.<UserVo>ok(Boolean.TRUE).build();
+    }
+}

+ 6 - 2
src/main/java/cn/minbb/job/controller/web/UserController.java

@@ -42,8 +42,12 @@ public class UserController {
             modelAndView.setViewName(Const.ViewName.VIEW_REDIRECT);
         } else {
             Resume resume = resumeService.findOneByUserId(user.getId());
-            modelAndView.addObject("resume", resume == null ? new Resume() : resume);
-            modelAndView.setViewName(Const.ViewName.VIEW_USER_RESUME);
+            if (null == resume) {
+                modelAndView.setViewName(Const.ViewName.VIEW_REDIRECT + "user/info");
+            } else {
+                modelAndView.addObject("resume", resume);
+                modelAndView.setViewName(Const.ViewName.VIEW_USER_RESUME);
+            }
         }
         return modelAndView;
     }

+ 2 - 0
src/main/java/cn/minbb/job/service/ResumeService.java

@@ -3,5 +3,7 @@ package cn.minbb.job.service;
 import cn.minbb.job.model.Resume;
 
 public interface ResumeService {
+    Resume saveOne(Resume resume);
+
     Resume findOneByUserId(Integer userId);
 }

+ 5 - 0
src/main/java/cn/minbb/job/service/impl/ResumeServiceImpl.java

@@ -17,6 +17,11 @@ public class ResumeServiceImpl implements ResumeService {
         this.resumeRepository = resumeRepository;
     }
 
+    @Override
+    public Resume saveOne(Resume resume) {
+        return resumeRepository.save(resume);
+    }
+
     @Override
     public Resume findOneByUserId(Integer userId) {
         Resume resume = new Resume();

+ 1 - 0
src/main/resources/templates/fragments/header.html

@@ -57,6 +57,7 @@
                 </a>
                 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="nav">
                     <a class="dropdown-item" href="/user/info" th:if="${user.hasRole(T(cn.minbb.job.enumerate.Role).USER)}">个人信息</a>
+                    <a class="dropdown-item" href="/user/resume" target="_blank" th:if="${user.hasRole(T(cn.minbb.job.enumerate.Role).USER)}">我的简历</a>
                     <a class="dropdown-item" href="/company/info" th:if="${user.hasRole(T(cn.minbb.job.enumerate.Role).COMPANY)}">企业信息</a>
                     <a class="dropdown-item" href="/company/resume" th:if="${user.hasRole(T(cn.minbb.job.enumerate.Role).COMPANY)}">收到简历</a>
                     <a class="dropdown-item" href="/school/info" th:if="${user.hasRole(T(cn.minbb.job.enumerate.Role).SCHOOL)}">学校信息</a>

+ 1 - 1
src/main/resources/templates/index.html

@@ -123,7 +123,7 @@
                         </h3>
                         <div class="mb-1 text-muted" th:text="${#dates.format(company.getCreatedDate(), 'yyyy年MM月dd日')}"></div>
                         <p class="card-text mb-auto" th:text="${company.getIntroduction()}"></p>
-                        <a href="#" th:href="${'/company?id=' + company.getId()}">了解更多</a>
+                        <a target="_blank" href="#" th:href="${'/company?id=' + company.getId()}">了解更多</a>
                     </div>
                     <img class="card-img-right flex-auto d-none d-md-block" alt="" src="" style="width: 200px; height: 250px;" th:src="${company.getBrand()}"/>
                 </div>

+ 4 - 1
src/main/resources/templates/job-full.html

@@ -14,10 +14,11 @@
 
         <div class="row">
             <div class="col-md-8">
-                <h3 class="pb-3 mb-4 font-italic border-bottom">全职位</h3>
+                <h3 class="pb-3 mb-4 font-italic border-bottom">全职位</h3>
 
                 <div class="my-3 p-3 bg-white rounded box-shadow">
                     <h5 class="border-bottom border-gray pb-2 mb-0">全职招聘</h5>
+                    <div th:if="${jobList.size() == 0}" style="margin-top: 16px;">暂无</div>
                     <div class="media text-muted pt-3" th:each="job : ${jobList}">
                         <img class="mr-2 rounded" alt="" src="" style="width: 32px; height: 32px;" th:src="${job.getCompany().getBrand()}"/>
                         <div class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
@@ -51,12 +52,14 @@
             <div class="col-md-4">
                 <div class="p-3">
                     <h4 class="font-italic">热门职位</h4>
+                    <div th:if="${jobTop.size() == 0}">暂无</div>
                     <ol class="list-unstyled mb-0">
                         <li th:each="job : ${jobTop}"><a href="#" target="_blank" th:href="${'/job?id=' + job.getId()}" th:text="${job.getName()}"></a></li>
                     </ol>
                 </div>
                 <div class="p-3">
                     <h4 class="font-italic">热门企业</h4>
+                    <div th:if="${companyTop.size() == 0}">暂无</div>
                     <ol class="list-unstyled">
                         <li th:each="company : ${companyTop}"><a href="#" target="_blank" th:href="${'/company?id=' + company.getId()}" th:text="${company.getName()}"></a></li>
                     </ol>

+ 3 - 1
src/main/resources/templates/job-practice.html

@@ -34,7 +34,8 @@
                 <h3 class="pb-3 mb-4 font-italic border-bottom">实习招聘</h3>
 
                 <div class="my-3 p-3 bg-white rounded box-shadow">
-                    <h5 class="border-bottom border-gray pb-2 mb-0" th:text="${name == '' ? '全部职位' : name}"></h5>
+                    <h5 class="border-bottom border-gray pb-2 mb-0" th:text="${#strings.isEmpty(name) ? '全部职位' : name}"></h5>
+                    <div th:if="${jobList.size() == 0}" style="margin-top: 16px;">暂无</div>
                     <div class="media text-muted pt-3" th:each="job : ${jobList}">
                         <img class="mr-2 rounded" alt="" src="" style="width: 32px; height: 32px;" th:src="${job.getCompany().getBrand()}"/>
                         <div class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
@@ -68,6 +69,7 @@
             <div class="col-md-4">
                 <div class="p-3">
                     <h4 class="font-italic">推荐职位</h4>
+                    <div th:if="${jobTop.size() == 0}">暂无</div>
                     <ol class="list-unstyled mb-0">
                         <li th:each="job : ${jobTop}"><a href="#" target="_blank" th:href="${'/job?id=' + job.getId()}" th:text="${job.getName()}"></a></li>
                     </ol>

+ 17 - 1
src/main/resources/templates/job.html

@@ -13,6 +13,9 @@
         <div class="container">
             <h1 class="jumbotron-heading" th:text="${job.getName()}"></h1>
             <p class="lead text-muted" th:text="${job.getSalary() + ' / ' + job.getEducation() + ' / ' + job.getType()}"></p>
+            <p>
+                <a class="btn btn-primary my-2" href="#" target="_blank" th:href="${'/company?id=' + job.getCompany().getId()}" th:text="${job.getCompany().getName()}">投递简历</a>
+            </p>
             <p>
                 <a class="btn btn-secondary my-2" th:href="${'/job?id=' + job.getId()}">支持一下</a>
                 <a class="btn btn-primary my-2" href="#modal-job" data-toggle="modal">投递简历</a>
@@ -33,7 +36,20 @@
                     <div class="media text-muted pt-3">
                         <div class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
                             <div class="d-flex justify-content-between align-items-center w-100">
-                                <strong class="text-gray-dark" th:text="${job.getDescription()}"></strong>
+                                <strong class="text-gray-dark" th:utext="${job.getDescription()}" style="white-space: pre-wrap;"></strong>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="my-3 p-3 bg-white rounded box-shadow">
+                    <h5 class="border-bottom border-gray pb-2 mb-0">职位标签</h5>
+                    <div class="media text-muted pt-3">
+                        <div class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
+                            <div class="d-flex justify-content-between align-items-center w-100">
+                                <strong class="text-gray-dark">
+                                    <span style="margin-right: 12px;" th:each="jobTag : ${job.getJobTagList()}" th:text="${jobTag.getName()}"></span>
+                                </strong>
                             </div>
                         </div>
                     </div>

+ 87 - 22
src/main/resources/templates/user-info.html

@@ -14,7 +14,7 @@
             <div class="row">
                 <div class="col-md-4 text-center">
                     <h1 class="jumbotron-heading">完善个人简历</h1>
-                    <img style="margin-top: 32px;" src="" alt="" th:src="${resume.getPhoto()}"/>
+                    <img id="photo" style="margin-top: 32px;" src="" alt="" width="240" th:src="${resume.getPhoto()}"/>
                     <h5 style="margin-top: 16px;">照片</h5>
                 </div>
 
@@ -22,7 +22,7 @@
                     <form>
                         <div class="form-group">
                             <label for="input-name">姓名</label>
-                            <input class="form-control" id="input-name" type="text" placeholder="姓名" maxlength="16"
+                            <input class="form-control" id="input-name" type="text" placeholder="" maxlength="16"
                                    th:value="${resume.getName()}"/>
                         </div>
                         <div class="form-group">
@@ -31,52 +31,52 @@
                         </div>
                         <div class="form-group">
                             <label for="input-job-planning">职业规划</label>
-                            <input class="form-control" id="input-job-planning" type="text" placeholder="职业规划" maxlength="32"
+                            <input class="form-control" id="input-job-planning" type="text" placeholder="" maxlength="32"
                                    th:value="${resume.getJobPlanning()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-phone">手机号码</label>
-                            <input class="form-control" id="input-phone" type="text" placeholder="手机号码" maxlength="32"
+                            <input class="form-control" id="input-phone" type="text" placeholder="" maxlength="32"
                                    th:value="${resume.getPhone()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-mail">电子邮箱</label>
-                            <input class="form-control" id="input-mail" type="text" placeholder="电子邮箱" maxlength="64"
+                            <input class="form-control" id="input-mail" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getMail()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-website">网站</label>
-                            <input class="form-control" id="input-website" type="text" placeholder="网站" maxlength="64"
+                            <input class="form-control" id="input-website" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getWebsite()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-home">家乡</label>
-                            <input class="form-control" id="input-home" type="text" placeholder="家乡" maxlength="32"
+                            <input class="form-control" id="input-home" type="text" placeholder="" maxlength="32"
                                    th:value="${resume.getHome()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-signature">签名</label>
-                            <input class="form-control" id="input-signature" type="text" placeholder="签名" maxlength="255"
+                            <input class="form-control" id="input-signature" type="text" placeholder="" maxlength="255"
                                    th:value="${resume.getSignature()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-place">当前所在地</label>
-                            <input class="form-control" id="input-place" type="text" placeholder="当前所在地" maxlength="255"
+                            <input class="form-control" id="input-place" type="text" placeholder="" maxlength="32"
                                    th:value="${resume.getPlace()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-edu-time">最高学历时间</label>
-                            <input class="form-control" id="input-edu-time" type="text" placeholder="最高学历时间" maxlength="255"
+                            <input class="form-control" id="input-edu-time" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getEduTime()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-edu-school">最高学历学校</label>
-                            <input class="form-control" id="input-edu-school" type="text" placeholder="最高学历学校" maxlength="255"
+                            <input class="form-control" id="input-edu-school" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getEduSchool()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-edu-profession">学习专业</label>
-                            <input class="form-control" id="input-edu-profession" type="text" placeholder="学习专业" maxlength="255"
+                            <input class="form-control" id="input-edu-profession" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getEduProfession()}"/>
                         </div>
                     </form>
@@ -85,48 +85,48 @@
                     <form>
                         <div class="form-group">
                             <label for="input-work-time">工作时间</label>
-                            <input class="form-control" id="input-work-time" type="text" placeholder="工作时间" maxlength="255"
+                            <input class="form-control" id="input-work-time" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getWorkTime()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-work-company">工作公司</label>
-                            <input class="form-control" id="input-work-company" type="text" placeholder="工作公司" maxlength="255"
+                            <input class="form-control" id="input-work-company" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getWorkCompany()}"/>
                         </div>
                         <div class="form-group">
                             <label for="input-work-position">职位</label>
-                            <input class="form-control" id="input-work-position" type="text" placeholder="职位" maxlength="255"
+                            <input class="form-control" id="input-work-position" type="text" placeholder="" maxlength="64"
                                    th:value="${resume.getWorkPosition()}"/>
                         </div>
                         <div class="form-group">
                             <label for="textarea-work-description">工作描述</label>
                             <textarea class="form-control" id="textarea-work-description" rows="4" maxlength="500"
-                                      th:value="${resume.getWorkDescription()}"></textarea>
+                                      th:text="${resume.getWorkDescription()}"></textarea>
                         </div>
                         <div class="form-group">
                             <label for="textarea-work-gain">工作收获</label>
                             <textarea class="form-control" id="textarea-work-gain" rows="4" maxlength="500"
-                                      th:value="${resume.getWorkGain()}"></textarea>
+                                      th:text="${resume.getWorkGain()}"></textarea>
                         </div>
                         <div class="form-group">
                             <label for="textarea-skill">专业技能</label>
                             <textarea class="form-control" id="textarea-skill" rows="4" maxlength="500"
-                                      th:value="${resume.getSkill()}"></textarea>
+                                      th:text="${resume.getSkill()}"></textarea>
                         </div>
                         <div class="form-group">
                             <label for="textarea-project">项目经历</label>
                             <textarea class="form-control" id="textarea-project" rows="4" maxlength="500"
-                                      th:value="${resume.getProject()}"></textarea>
+                                      th:text="${resume.getProject()}"></textarea>
                         </div>
                         <div class="form-group">
                             <label for="textarea-hobby">兴趣爱好</label>
                             <textarea class="form-control" id="textarea-hobby" rows="4" maxlength="500"
-                                      th:value="${resume.getHobby()}"></textarea>
+                                      th:text="${resume.getHobby()}"></textarea>
                         </div>
                         <div class="form-group">
                             <label for="textarea-description">自我描述</label>
                             <textarea class="form-control" id="textarea-description" rows="4" maxlength="500"
-                                      th:value="${resume.getDescription()}"></textarea>
+                                      th:text="${resume.getDescription()}"></textarea>
                         </div>
                     </form>
                 </div>
@@ -152,8 +152,73 @@
         </div>
     </div>
 
-    <script>
+    <script src="https://files.minbb.cn/plugins/jquery/3.4.0/jquery.js"></script>
+    <script type="text/javascript">
+        let photo = $("#photo")[0].src;
+        $(document).ready(function () {
+            $('#input-photo').change(function (e) {
+                let file = e.target.files[0];
+                if (file == null) {
+                    return false;
+                }
+                if (!/image\/\w+/.test(file.type)) {
+                    alert("请确保文件为图像类型");
+                    return false;
+                } else if (file.size / 1024 > 1024) {
+                    alert("图像大小不能超过 1MB");
+                    return false;
+                }
+                if (window.FileReader) {
+                    let reader = new FileReader();
+                    reader.readAsDataURL(file);
+                    reader.onloadend = function () {
+                        photo = reader.result;
+                        $('#photo').attr('src', photo);
+                    };
+                } else {
+                    alert("浏览器不支持");
+                }
+            });
+        });
+
         function save(obj) {
+            let name = $('#input-name').val(), jobPlanning = $('#input-job-planning').val(), phone = $('#input-phone').val(), mail = $('#input-mail').val(),
+                website = $('#input-website').val(), home = $('#input-home').val(), signature = $('#input-signature').val(), place = $('#input-place').val(),
+                eduTime = $('#input-edu-time').val(), eduSchool = $('#input-edu-school').val(), eduProfession = $('#input-edu-profession').val(),
+                workTime = $('#input-work-time').val(), workCompany = $('#input-work-company').val(), workPosition = $('#input-work-position').val(),
+                workDescription = $('#textarea-work-description').val(), workGain = $('#textarea-work-gain').val(), skill = $('#textarea-skill').val(),
+                project = $('#textarea-project').val(), hobby = $('#textarea-hobby').val(), description = $('#textarea-description').val();
+            if (name === '') {
+                alert("姓名不能为空");
+                return;
+            } else if (photo === "") {
+                alert("照片不能为空");
+                return;
+            }
+            $.ajax({
+                url: '/user/info',
+                type: 'POST',
+                contentType: "application/json; charset=utf-8",
+                data: JSON.stringify({
+                    "name": name, "photo": photo, "jobPlanning": jobPlanning, "phone": phone, "mail": mail,
+                    "website": website, "home": home, "signature": signature, "place": place,
+                    "eduTime": eduTime, "eduSchool": eduSchool, "eduProfession": eduProfession,
+                    "workTime": workTime, "workCompany": workCompany, "workPosition": workPosition,
+                    "workDescription": workDescription, "workGain": workGain, "skill": skill,
+                    "project": project, "hobby": hobby, "description": description
+                }),
+                dataType: "json",
+                success: function (data) {
+                    if (data.success) {
+                        window.location.reload();
+                    } else {
+                        alert("请重试");
+                    }
+                },
+                error: function (data) {
+                    console.log(data);
+                }
+            });
         }
     </script>
 </th:block>

+ 5 - 44
src/main/resources/templates/user-resume.html

@@ -2,7 +2,7 @@
 <html lang="zh-CN" xmlns="http://www.w3.org/1999/html"
       xmlns:th="http://www.thymeleaf.org">
 <head>
-    <title>王育民 - 简历</title>
+    <title>[[${resume.getName()}]] - 简历</title>
     <meta charset="UTF-8"/>
     <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
     <meta name="viewport" content="width=device-width, initial-scale=1"/>
@@ -93,7 +93,7 @@
                     </tr>
                     <tr>
                         <td class="center-align"><i class="fa fa-link"></i></td>
-                        <td><a href="https://www.minbb.cn/" style="color: white;" th:text="${resume.getWebsite()}">www.minbb.cn</a></td>
+                        <td><a href="#" style="color: white;" th:text="${resume.getWebsite()}" th:href="${resume.getWebsite()}">www.minbb.cn</a></td>
                     </tr>
                     <tr>
                         <td class="center-align"><i class="fa fa-home"></i></td>
@@ -178,32 +178,7 @@
                     <div class="card-panel blue darken-3">
                         <div class="">
                             <h6><b>专业技能</b></h6>
-                            <ul>
-                                <li>
-                                    <i class="fa fa-caret-right"></i>
-                                    熟练使用 Office 办公软件和 Photoshop
-                                </li>
-                                <li>
-                                    <i class="fa fa-caret-right"></i>
-                                    熟练掌握 Java, HTML5, CSS3, JavaScript, C# 等软件开发语言
-                                </li>
-                                <li>
-                                    <i class="fa fa-caret-right"></i>
-                                    熟练使用 Bootstrap, Materialize, Spring Boot, Spring Cloud, Hibernate, MyBatis 等主流开发框架和技术
-                                </li>
-                                <li>
-                                    <i class="fa fa-caret-right"></i>
-                                    熟练使用 SQL 语言对 MySQL 关系型数据库进行增删改查等操作
-                                </li>
-                                <li>
-                                    <i class="fa fa-caret-right"></i>
-                                    熟练使用 Android 开发技术,开发原生 Android 应用程序
-                                </li>
-                                <li>
-                                    <i class="fa fa-caret-right"></i>
-                                    熟练使用并维护 Windows Server 服务器,并且在服务器上部署 Web 服务器,FTP 服务器,正向、反向网络代理服务器,MQTT 服务器,私有网络云盘,Git 环境等
-                                </li>
-                            </ul>
+                            <span th:text="${resume.getSkill()}"></span>
                         </div>
                     </div>
                 </div>
@@ -214,20 +189,7 @@
                     <div class="card-panel blue darken-3">
                         <div class="project">
                             <h6><b>项目经历</b></h6>
-                            <b>获奖情况:</b><br/>
-                            <span>2016 年 4 月荣获互联网 ACM 月季赛第二名;</span>
-                            <span>2017 年 4 月荣获第八届蓝桥杯全国软件和信息技术专业人才大赛河南赛区JAVA软件开发大学B组省部级个人二等奖;</span>
-                            <span>2017 年 5 月荣获第十三届“挑战杯”河南省大学生课外学术科技作品竞赛省级二等奖;</span>
-                            <span>2017 年 11 月荣获计算机学科类单项奖学金。</span>
-                            <b>项目经历:</b><br/>
-                            <span>基于Android 在线点名 APP 的设计与实现、基于 Android 的远程数据库管理软件的设计与实现、大学生创新能力评测系统、国际教育学院设备借还系统、渔民博客/主页等。</span>
-                            <span>中移在线项目组:86君APP后端开发、公安三所送检智能门禁APP前端开发、实名认证一体机串口通信中间件开发、智慧社区后端开发。</span>
-                            <b>网站地址:</b>
-                            <a class="white light-green-text" href="https://www.minbb.cn" target="_blank">&nbsp; www.minbb.cn &nbsp;</a>
-                            <a class="white light-green-text" href="https://my.minbb.cn" target="_blank">&nbsp; my.minbb.cn &nbsp;</a>
-                            <a class="white light-green-text" href="https://blog.minbb.cn" target="_blank">&nbsp; blog.minbb.cn &nbsp;</a>
-                            <a class="white light-green-text" href="https://sso.minbb.cn" target="_blank">&nbsp; sso.minbb.cn &nbsp;</a>
-                            <a class="white light-green-text" href="https://lender.minbb.cn" target="_blank">&nbsp; lender.minbb.cn &nbsp;</a>
+                            <span th:text="${resume.getProject()}"></span>
                         </div>
                     </div>
                 </div>
@@ -239,8 +201,7 @@
                         <div class="">
                             <h6><b>技能爱好</b></h6>
                             <div class="project" style="text-indent: 2em;" th:text="${resume.getSkill()}">
-                                <span>在专业技能方面,我爱好与计算机相关的一切,计算机硬件、软件、网络、编写和设计程序等。</span>
-                                <span>在兴趣爱好方面,对科技类产品,物联网技术,电子电器等都非常热衷。我对计算机和互联网行业有着非常浓厚的兴趣,面对这些我会态度诚恳、积极工作,并通过我的努力,在计算机领域有所成就。</span>
+                                <span th:text="${resume.getHobby()}"></span>
                             </div>
                         </div>
                     </div>