数据库课设记录 Day 6

 公司职员方的 ”接取投递“ 也完成了,直接套的 ”我的应聘“ 的容器块写的。

 最上方有三个选项,“可接取投递” 就是上一场通过,需要安排下一场或是处于刚刚投简历的投递,另两个字面意思。

在这里插入图片描述

 点那个 “接取投递” 的按钮后会蹦出来三个 input 框,填写后 ajax 提交后台修改。不过…我这时才知道 ajax ,如果提交的数据格式设置为 json (contentType:'json'),而且使用 Post 请求的话,后台控制器会无法识别参数…。当时点击提交后冇得反应,IDEA 也没有报错,就是单纯没有找到对应的控制器方法。
 控制器和 ajax 部分代码

@PostMapping("/pickUpApply")
@ResponseBody
String pickUpApply(@RequestParam("applicant") String applicant,
                   @RequestParam("positionID") String positionID,
                   @RequestParam("empID") String empID,
                   @RequestParam("desc") String desc,
                   @RequestParam("time") String time,
                   @RequestParam("place") String place ) {
$('#submit').click(function (e) {
    let desc = $('#fillInfo input[name=desc]').val();
    let time = $('#fillInfo input[name=time]').val();
    let place = $('#fillInfo input[name=place]').val();
    $.ajax( {
        url: '/apply/pickUpApply',
        data: {'applicant':applicant, 'positionID':positionID, 'empID':empID, 'desc':desc, 'time':time, 'place':place},
        type:"post",
        // contentType: "json", // 这个位置
        success: function (data) {
            alert("接取成功!");
        },
        error: function () {
            alert("error");
        }
    });

    $('#fillInfo').remove();
    location.reload();
});

 当时看了好久没看出问题,网上又搜了好久才知道。解决方法是用 @RequestBody 替代 @RequestParam,但是用 @RequestBody 好像只能允许一个参数。刚想换成 HttpServletRequest retuest 试试,然后看以前写的 ajax 都是 contentType:'text'…。原来 ajax 写了这么久,参数一直写的 json 的格式,传递参数的格式确是 text…还是说这个 text 和我理解的有点不一样?不懂…

 后面有时间可以考虑在每个容器块左边加一窄条色块,提示是 “很久前已完成”,“今天的面试” 还是 “刚结束需要填写结果” ,类似 CF 那样:

在这里插入图片描述
– 每道题左边的窄条,绿色代表通过,粉色代表有提交但未通过
在这里插入图片描述

 还有就是 interview 表可以添加一个字段用来记录面试官的评价。

 然后主页面的分页也写了,样式大体也是扒的 elementUI 的。
在这里插入图片描述

<!-- 分页器 -->
<div style="width:400px; height:40px; margin-left: 200px; ">
    <button type="button" class="el-prev toPrev"></button>
    <ul id="pageSelector" class="el-pager">
    </ul>
    <button type="button" class="el-next toNext"></button>
</div>
<!-- 保存当前页面的页数信息, hide 是 width = height = font-size = 0 实现视觉隐藏 -->
<div id="pagedata" class="hide">
    <span class="hide curPage" th:text="${curPage}"></span>
    <span class="hide totPage" th:text="${totPage}"></span>
</div>
<!-- curPage totPage toPrev toNext 是没有 css 样式的类,单纯用来借助 js 控制分页器的 -->
<!-- pageSelector 和 pagedata 这两个 ID 也是同理,单纯用来方便 js 定位的 -->
.el-pager {
    user-select: none;
    list-style: none;
    display: inline-block;
    vertical-align: top;
    font-size: 0;
    padding: 0;
    margin: 0;
}

.el-pager li, .el-prev, .el-next {
    margin: 0 5px;
    background-color: #f4f4f5;
    color: #606266;
    min-width: 30px;
    border-radius: 2px;
    padding: 0 8px;
    /* background: #fff; */
    vertical-align: top;
    display: inline-block;
    font-size: 13px;
    /* min-width: 35.5px; */
    height: 32px;
    line-height: 32px;
    cursor: pointer;
    box-sizing: border-box;
    text-align: center;
}
.el-pager li.active {
    background-color: #409eff;
    color: #fff;
    cursor: default;
}
.el-pager li:hover {
    background-color: #409eff;
    color: #fff;
}
.el-prev, .el-next {
    border: 0 none transparent;
    outline: 0;
}
.el-prev:hover, .el-next:hover {
    background-color: #409eff;
    color: #fff;
}
/* 这个文字完全是我瞎搞的,建议还是删了,'上一页'在button标签里写 */
.el-prev::before {
    content: "上一页";
}
.el-next::after {
    content: "下一页";
}

jquery

<script src="课设页面/js/jquery-3.6.0.min.js"></script>
<script>
function calcPage() {
    //  从隐藏的 span 中读取当前是哪一页, 和一共有多少页
    // 开始没有 parseInt...,debug了好久
    let curPage = parseInt( $('#pagedata .curPage').text() );
    let totPage = parseInt( $('#pagedata .totPage').text() );

    //  不超过 6 页全部显示
    if( totPage <= 6 ) {
        for(let i=1; i<=totPage; i++) {
            // 开始我拼接的 html 特别蠢: <li th:class=" ${curPage} == i ? 'active' : '' ">
            // 这里和原生 JS 里的 window.onload() 一样,是在页面加载完成后在计算分页器的,
            // 而 thymeleaf 的模板肯定是在加载前就解析的。当时检查元素里看了好久发现 <li> 里面的是 th:class 而不是 class 才意识到
            $('#pageSelector').append("<li class=\" numPage " + (i == curPage ? 'active' : '') + "\">" + i + "</li>");
        }
    } else {
        // 第一页先加上去
        $('#pageSelector').append("<li class=\" numPage " + (1 == curPage ? 'active' : '') + "\">" + 1 + "</li>");
        // 显示当前页前后 2 页,最多 5 页
        let left = Math.max(2,curPage - 2);
        let right = Math.min(totPage-1, curPage + 2);
        // 第一页 和 第 left 页之间加一个 ...
        if( 2 < left ) $('#pageSelector').append("<li class=\"toPrev\">...</li>");
        // left ~ right 页
        for(let i=left; i<=right; i++) {
            $('#pageSelector').append("<li class=\" numPage " + (i == curPage ? 'active' : '') + "\">" + i + "</li>");
        }
        // 第 right 页和最后一页之间加一个 '...'
        if( right < totPage-1 ) $('#pageSelector').append("<li class=\"toNext\">...</li>");
        $('#pageSelector').append("<li class=\" numPage " + (totPage == curPage ? 'active' : '') + "\">" + totPage + "</li>");
    }
}
$(document).ready(function () {
    // 处理页面
    calcPage();
    
    // 点击某个数字时实现跳转
    $('.numPage').click(function (e) {
        let num = $(this).text();
        let url = '/position/?page=' + num;
        window.location = url;
    });
    // 点击 '上/下一页' 或 '...' 时
    $('.toPrev').click(function () {
        let num = parseInt( $('#pageSelector .active').text() );
        let url = '/position/?page=' + Math.max(1,num-1);
        window.location = url;
    });
    $('.toNext').click(function () {
        let num = parseInt( $('#pageSelector .active').text() );
        let totPage = $('#pagedata .totPage').text();
        let url = '/position/?page=' + Math.min(totPage,num+1);
        window.location = url;
    });
});
</script>

页数比较多时大概是这么个效果:

– 共 17 页,当前在 6 页
在这里插入图片描述

– 共 17 页,当前在 16 页
在这里插入图片描述



上周末CCPC网络赛大抵是打出了我校为数不多的校排名达到三位数的成绩 ╮(╯﹏╰)╭

然后由于种种原因(其实不是种种)一支队伍好像是退出了…走过了两个暑假集训的一支强队…突然就有种凋敝的感觉了
这两周 ICPC 网络赛要是再打的一样差 acm 生涯就可以提前结束了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值