关于BootStrap的前端简易样式和简单分页的实现

这篇具有很好参考价值的文章主要介绍了关于BootStrap的前端简易样式和简单分页的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.前端--左侧导航栏,右侧内容


理想如下:

关于BootStrap的前端简易样式和简单分页的实现,前端,bootstrap,html

1.左右侧的框架搭建


 以学生登录系统为例,下方代码能够搭建基本的左侧导航栏,右侧内容的框架 

  • 导航栏中每一行用超链接表示,a 指向对应的controller层方法,target="iframe_a"指向右侧内容,最终实现在iframe_a容器中显示conroller层调用的方法显示的界面
<%@ page contentType="text/html;charset=UTF-8" %>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" >
    <title>首页</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <%Boolean result2 = (Boolean) session.getAttribute("result_login");
        if(result2){ %>
    <script type="text/javascript">
        $(function(){alert("登陆成功!");});
    </script>
    <%
            session.setAttribute("result_login",null);}
    %>
    <style>
        .father_box {
            margin-top: 50px;
            position: relative;
            width: 100%;
            height: 800px;
        }

        .content_one {
            overflow: hidden;
            padding-top: 3px;
            width: 18%;
            height: 800px;
            background-color: orange;
        }

        .content_two {
            position: relative;
            left: 18%;
            right: 12%;
            top: -800px;
            width: 82%;
            height: 750px;
        }
        .nav-stacked {
            width:96%;
            margin: 0 auto;
            text-align:center;
        }

    </style>
</head>
<body>
<%--通过学生登录时的判断获取该学生的信息--%>
<%Students students = (Students) session.getAttribute("student_curr");%>
<nav class="navbar navbar-default navbar-fixed-top">
    <div class="badge-primary">TYUT公寓管理系统--你好,<%=students.getsName()%>同学,欢迎登陆!
    <ul class="nav navbar-nav">
        <!-- Dropdown -->
        <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" >
                个人中心
                <b class="caret"></b>
            </a>
            <ul class="dropdown-menu">
                <li><a href="#" >个人信息</a></li>
                <li><a href="#">退出</a></li>
            </ul>
        </li>
    </ul></div>
</nav>
<div class="father_box">
    <div class="content_one">
        <ul class="nav nav-pills nav-stacked" >
            <!--style="width:96%;margin: 0 auto; text-align:center" 行内优先级高可改变导航的宽高用%可以是页面更协调-->
            <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">报修 <span class="caret"></span></a>
                <ul class="dropdown-menu ">
                    <li><a href="${pageContext.request.contextPath}/Msg/PageFindMsg" target="iframe_a">报修记录</a></li>
                    <li><a href="${pageContext.request.contextPath}/Msg/toInsertMsg?sId=<%=students.getsId()%>" target="iframe_a">申请报修</a></li>
                </ul>
            </li>
        </ul>
    </div>

    <div class="content_two">
        <!--右侧内容显示的盒子-->
        <iframe  width="100%" height="100%" name="iframe_a" frameborder="0" scrolling="no"></iframe>
    </div>
</div>
</body>
</html>

如下所示,点击报修后 任意选择,在右侧跳转对应界面,以显示报修记录为例

关于BootStrap的前端简易样式和简单分页的实现,前端,bootstrap,html

  • 分页展示的controller层方法(仅仅是个例子),主要是看return的是“showMsg.jsp”
    @RequestMapping("/PageFindMsg")
    public String PageFindAllMsg(@RequestParam(value = "pn",defaultValue = "1") int pn, HttpSession session){
        Page result = studentMsgService.showPageMsg(pn,3,session);
        System.out.println(pn);
        session.setAttribute("page",result);
        System.out.println(result);
        return "StudentMsg/showMsg";
    }

2.表格的前端显示


接着看showMsg.jsp,复制粘贴就行,填上自己的内容!最后分页的部分可以在本文后半部分看;

<%@ page import="com.tyut.pojo.Page" %>
<%@ page import="com.tyut.pojo.Msg" %>
<%@ page import="java.util.List" %>
<%@ page import="com.tyut.pojo.Students" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>保修记录</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <%String result = (String) session.getAttribute("res_add");
        if(result!=null){ %>
    <script type="text/javascript">
        $(function(){alert("<%=result%>");});
    </script>
    <%
            session.setAttribute("res_add",null);}
    %>

</head>
<body>
<div class="container">
    <div class="row clearfix">
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>保修信息列表</small>
                </h1>
            </div>

        </div>
    </div>
    <div class="row">
        <div class="col-md-4 column">
            <%Students students = (Students)session.getAttribute("student_curr");%>
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/Msg/toInsertMsg?sId=<%=students.getsId()%>">申请保修</a>
        </div>
    </div>
    <div class="row clearfix">
        <div class="col-md-12 column">
            <table class="table table-hover table-striped" id="managers_table">
                <thead>
                <%--表头--%>
                <tr>
                    <th>发送者Id</th>
                    <th>发送者姓名</th>
                    <th>报修内容</th>
                    <th>发送时间</th>
                    <th>状态</th>
                    <th>楼管备注</th>
                </tr>
                </thead>
                <%-- 表主体--%>
                <tbody>
                <%Page page1 = (Page)session.getAttribute("page");%>
                <%List<Msg> msgs = page1.getRows_Msg(); %>
                <%if(msgs.size() == 0){%>
                <tr><div class="text-center">暂无信息</div></tr>
                <%}%>
                <%for(Msg msg:msgs){%>
                <tr>
                    <td><%=msg.getsId()%></td>
                    <td><%=msg.getsName()%></td>
                    <td><%=msg.getMsg()%></td>
                    <td><%=msg.getTime()%></td>
                    <% if(msg.getStatus().equals("待处理")){%>
                    <td><p class="text-danger"><%=msg.getStatus()%></p></td>
                    <%}else{%>
                        <td> <p class="text-success"><%=msg.getStatus()%></p></td>
                    <%}%>
                    <td><%=msg.getManagerResp()%></td>
                </tr>
                <%}%>
                </tbody>
            </table>
            <div class="curPage" align="center">
                当前页&nbsp; <%=page1.getCur()%>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;共&nbsp; <%=page1.getEnd()%>&nbsp;页,共&nbsp; <%=page1.getTotal()%>&nbsp;条数据
            </div>
            <a href="${pageContext.request.contextPath}/Msg/PageFindMsg?pn=<%=page1.getPageInfo_Msg().getPrePage()%>">上一页</a>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
            <a href="${pageContext.request.contextPath}/Msg/PageFindMsg?pn=<%=page1.getPageInfo_Msg().getNextPage()%>">下一页</a>
        </div>
    </div>
</div>
</div>
</body>
</html>

该表格运行样式如下,是运用了bootstrap的简易样式;

关于BootStrap的前端简易样式和简单分页的实现,前端,bootstrap,html

3.新增、修改页面--表单的前端显示


以学生发送报修信息为例,点击“申请报修”后,实际调用/Msg/toInsertMsg对应的controller层方法,由他跳转到填写表单的页面sendMsg.jsp

@RequestMapping("/toInsertMsg")
    public String toInsertMsg(int sId, HttpSession session){
       return "StudentMsg/sendMsg";

    }

sendMsg.jsp如下,这里关于学生的id、姓名和宿舍楼号等信息都是写死的,学生不用填

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div id="all" class="container">
    <div class="row clearfix">
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>修改职工信息</small>
                </h1>
            </div>
        </div>
    </div>
    <%Students stu = (Students)session.getAttribute("student_curr");%>
    <form
        name="newManager" class="form-horizontal" role="form" action="${pageContext.request.contextPath}/Msg/insertMsg" method="post">
<table class="table  table-hover">
     <tr>
            <th>发送者Id:</th>
            <td>
                <%=stu.getsId()%><input type="hidden" name="sId" value=<%=stu.getsId()%>>
            </td>
        </tr>

        <tr>
            <th>发送者姓名:</th>
            <td><%=stu.getsName()%><input type="hidden" name="sName" value=<%=stu.getsName()%>></td>
        </tr>
        <tr>
            <th>报修内容:</th>
            <td> <div class="row">
                <div class="col-md-3" size="10">
                    <textarea class="form-control" rows="3" name="msg"></textarea>
                </div>
            </div>
            </td>
        </tr>
        <tr>
        <th>联系电话:</th>
            <td><input class="form-control" type="text" name="sPhone" value=<%=stu.getsPhone()%>></td>>
        </tr>
    <input type="hidden" value="待处理" name="status" >
    <input type="hidden" value="暂无" name="managerResp" >
    <input type="hidden" value=<%=stu.getsNumber()%> name="sNumber" >
    </table>
    <input  type="submit" value="提交"/>
    <input  type="reset" value="重置"/>
</form>
</div>
</body>
</html>

表单提交的controller方法如下,新增过后还是要到分页展示的controller方法;

    @RequestMapping("/insertMsg")
    public String InsertMsg(Msg message,HttpSession session){
        int row = studentMsgService.InsertMsg(message);
        if(row>0){
            session.setAttribute("res_add","申请报修成功!");
        }else {
            session.setAttribute("res_add","报修失败!");
        }
        return "redirect:/Msg/PageFindMsg";
    }

最终,运行界面如下:

关于BootStrap的前端简易样式和简单分页的实现,前端,bootstrap,html

二、简单分页的实现


1.导入依赖

在pom.xml中导入依赖

 <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.7</version>
 </dependency>

2.在mybatis-config.xml中配置

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

3.在pojo包中新建一个对象类--Page.java

public class Page {

    private int start;	// 首页
    private int end;	// 尾页
    private int cur;	// 当前页
    private long total;	// 总记录数
    private List<DormManagers> rows;	// 记录的集合(查询出来的相应页的数据)
    private PageInfo<DormManagers> pageInfo;  //这里的DormManagers、Msg都是你要查对象的类型
    private List<Msg> rows_Msg;     
    public PageInfo<Msg> getPageInfo_Msg() {
        return pageInfo_Msg;
    }
//getter、setter方法省略
}

rows--用于存放分页查出来的结果,在service层使用;

PageInfo--是我们使用分页插件提供的一个类型的对象,能够包含页数信息、前一页、后一页等等;

4.在Service层


service层的接口要有分页的方法、实现类也要有

接口如下,只需要关注第四个;

public interface StudentMsgService {
    public List<Msg> FindMsgBySId(int sId);
    public int InsertMsg(Msg message);
    public Students FindStuBySId(int sId);
    public Page showPageMsg(int page, int rows, HttpSession session);
    public List<Msg> FindHistoryFixByStatus(Msg msg);
}

实现类如下,这里我想要实现多条件查询,在前端获取到查询信息封装到一个Msg对象中,存到session中,名为msg_condition

解释参数:

page--当前页数

rows--每页有多少行

最终得到的:

list--当前第page页的数据集合

pageInfos--可以理解为一些页的配置信息

 有小伙伴可能有疑问,这里为什么要传一个session作为参数,而且session是怎么来的呢?

       首先,我们是学生端,只能查到登录系统的学生的信息,所以session用来传学生学号的,还有一个作用就是用来传查询参数(封装在Msg中,刚好学生Id也在这个Msg对象中);这个session是controller层调用service层的方法传来的,个人理解为,整个项目用一个session对象,他有许多自己定义的变量。

 public Page showPageMsg(int page, int rows, HttpSession session) {
        PageHelper.startPage(page, rows);
        Msg msg= (Msg)session.getAttribute("msg_condition");
        List<Msg> list = studentMsgMapper.FindHistoryFix(msg);
        System.out.println(msg.toString());
        for(Msg msg1:list){
            System.out.println(msg1.toString());
        }
        PageInfo<Msg> pageInfos=new PageInfo<>(list);
        // 创建一个返回值对象,封装结果
        Page result = new Page();
        result.setPageInfo_Msg(pageInfos);
        // 封装数据
        result.setRows_Msg(list);
        // 取记录总条数
        PageInfo<Msg> pageInfo = new PageInfo<>(list);
        result.setTotal(pageInfo.getTotal());
        // 取第一页
        result.setStart(pageInfo.getNavigateFirstPage());
        // 取最后一页
        result.setEnd(pageInfo.getNavigateLastPage());
        // 设置当前页
        result.setCur(page);
        return result;
    }

那么我刚点进去的分页页面如何显示呢?

       前端不获取也能显示分页信息,在学生登录时就将登录获取到的学生id存进一个Msg对象中,设置成session变量,名称就为msg_condition,这样,查看保修信息时也可以直接在showPageMsg获取到id,其他属性均为空。

    @RequestMapping("/loginStudent")
    public String StudentLogin(Students students,HttpSession session){
        Students stu = studentMsgService.FindStuBySId(students.getsId());
        if(students.getsPassword().equals(stu.getsPassword())){
            Msg msg = new Msg();
            msg.setsId(stu.getsId());
            session.setAttribute("result_login",true);
            session.setAttribute("student_curr",stu);
            session.setAttribute("msg_condition",msg);
            return "redirect:/Msg/toPageStudentFirst";
        }else {
            session.setAttribute("result_login",false);
            return "redirect:/Msg/toStudentLogin";
        }
        }

在刚开始写时,可以把下面的第三行换成如下, 来检测一下自己写的对不对,这样就是查所有的属于自己id的,没有限制条件。

int sId = (int)session.getAttribute("sId");

5.在Controller层


pn不传参数,默认为第1页;

 将结果result(Page类型的)传到前端去;

    @RequestMapping("/PageFindMsg")
    public String PageFindAllMsg(@RequestParam(value = "pn",defaultValue = "1") int pn, HttpSession session){
        Page result = studentMsgService.showPageMsg(pn,3,session);
        System.out.println(pn);
        session.setAttribute("page",result);
        System.out.println(result);
        return "StudentMsg/showMsg";
    }

6.前端


之前已经写过了,分页主要用于表格的展示,主要看以下部分:

  1. 在前端通过page1.getRows_Msg用于获取当前页数的展示信息,再进行遍历即可;
  2. 当前页数、结束页数、总页数都是我们之前定义的属性,调用get方法即可;
  3. 上一页、下一页是我们使用的分页插件提供的对象PageInfo的属性,两次调用get方法即可;
<tbody>
                <%Page page1 = (Page)session.getAttribute("page");%>
                <%List<Msg> msgs = page1.getRows_Msg(); %>
                <%if(msgs.size() == 0){%>
                <tr><div class="text-center">暂无信息</div></tr>
                <%}%>
                <%for(Msg msg:msgs){%>
                <tr>
                    <td><%=msg.getsId()%></td>
                    <td><%=msg.getsName()%></td>
                    <td><%=msg.getMsg()%></td>
                    <td><%=msg.getTime()%></td>
                    <% if(msg.getStatus().equals("待处理")){%>
                    <td><p class="text-danger"><%=msg.getStatus()%></p></td>
                    <%}else{%>
                        <td> <p class="text-success"><%=msg.getStatus()%></p></td>
                    <%}%>
                    <td><%=msg.getManagerResp()%></td>
                </tr>
                <%}%>
                </tbody>
            </table>
            <div class="curPage" align="center">
                当前页&nbsp; <%=page1.getCur()%>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;共&nbsp; <%=page1.getEnd()%>&nbsp;页,共&nbsp; <%=page1.getTotal()%>&nbsp;条数据
            </div>
            <a href="${pageContext.request.contextPath}/Msg/PageFindMsg?pn=<%=page1.getPageInfo_Msg().getPrePage()%>">上一页</a>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
            <a href="${pageContext.request.contextPath}/Msg/PageFindMsg?pn=<%=page1.getPageInfo_Msg().getNextPage()%>">下一页</a>

能力有限,很多东西也没搞明白,自己用笨办法实现的,也还有很多问题没有解决,欢迎讨论!

三、补充

1.对于分页下方的页码错误的问题

在展示的前端页面的“上一页”、“下一页”超链接前加入以下代码,并修改超链接即可

  <%int pn1=page1.getPageInfo_Msg().getPrePage();
            int pn2 = page1.getPageInfo_Msg().getNextPage();
            int pn3 = page1.getEnd();
            if(pn1 ==0){pn1++;}
            if(pn2 == 0){pn2=pn3;}%>
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/Msg/PageFindMsg?pn=<%=pn1%>">上一页</a>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/Msg/PageFindMsg?pn=<%=pn2%>">下一页</a>

这样就算点击到第一页再点击“上一页”,页码也不会出错了,“下一页”同理;

关于BootStrap的前端简易样式和简单分页的实现,前端,bootstrap,html文章来源地址https://www.toymoban.com/news/detail-819610.html

到了这里,关于关于BootStrap的前端简易样式和简单分页的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java 干货教程】Java实现分页的几种方式详解

    无论是自我学习中,还是在工作中,固然会遇到 与前端搭配实现分页的功能 ,发现有几种方式,特此记录一下。 这种情况也是有的,(根据业务场景且仅仅只能用于 数据量少 的情况)。即后端不做任何数据的限制,直接把全部数据返回给前端,前端通过组件实现分页,筛选等

    2024年02月02日
    浏览(34)
  • 织梦模板用{dede:sql}标签如何实现分页的示例代码

    近研究了一下织梦CMS系统,看到一篇关于sql标签调用数据列表如何翻页的文章,感觉不错,贴出来大家分享一下。相信很多使用dedecms的朋友在网上查找关于dede:sql标签进行分页的解决方案时都不尽如人意,尤其是在列表页使用dede:sql调用外部数据(所谓调用外部数据就是指在

    2024年02月02日
    浏览(33)
  • mybatis 在当前项目中的实际应用及自定义分页的实现

    实现目标 实现目标,使用spring 提供的分页相关的类,避免代码中直接使用PageHelper 具体实现 创建自定义PageHelper,并使用spring-data-common提供的具体实现类操作分页 maven 中引入相关依赖 这样我们在项目中就不直接与pageHelper 打交道了,将代码控制在自定义的 PageHelper 中了。 具

    2024年02月07日
    浏览(47)
  • element-ui在table分页的情况下实现多页筛选(单列/多列)

    element-ui官网提供的筛选样例只能对当前页的数据进行筛选,但我们用它提供的filter-change事件和column-key属性来实现多页筛选 在element-ui官网提供的筛选样例的基础上, el-table 标签上 加 @filter-change=\\\"filterChange\\\" 在要筛选的那一列的 el-table-column 标签上 加 column-key=\\\"tag\\\" 去掉 el-tab

    2023年04月09日
    浏览(24)
  • 前端基础(CSS)——css介绍 & 常用样式 & 案例—进化到Bootstrap——进化到Element-UI(未完待续)

    css是什么,层叠样式表, css作用:让html网页有布局,变漂亮 参考w3school 以p标签为例, 序号 位置 优先级 1 写在p标签内 最高 2 写在style内 第二 3 写在link内 最低 (1)标签选择器—div{} 标签选择器,选择html文档中所有的div,对所有的div进行设置 (2)id选择器----#div01{} 符号

    2024年02月08日
    浏览(42)
  • Mybatis (3)-----分页的运用

    目录 一、分页查询 二,特殊的字符处理 三、总结 前言:在我们上篇已经学的动态sql的基础上,今天继续讲解关于maybatis的分页,特殊的字符处理。希望这篇博客可以帮助到大家哦! 为什么要重写mybatis的分页? 重写MyBatis的分页功能有几个原因。 首先,MyBatis默认的分页功能

    2024年02月11日
    浏览(30)
  • Redis滚动分页的使用

    关注推送也叫Feed流。通过无限下拉刷新获取新的信息。 Feed流产品常见有两种模式: Timeline: 不做内容筛选,简单的按照内容发布时间排序,常用于好友或关注。例如朋友圈 优点:信息全面,不会有缺失。并且实现也相对简单 缺点:信息噪音较多,用户不一定感兴趣,内容获

    2024年02月04日
    浏览(30)
  • 基于vue+element 分页的封装

    分页也是我们在实际应用当中非常常见的存在,其实分页本身在element中做的就挺好的了,但是使用确实非常的多,所以还是有必要封装一下,主要是为了减少代码的冗余,以及提升开发的效率和降低后续维护的成本。 这是一段普通分页的示例 效果是这样的 在这当中用到了我

    2024年02月15日
    浏览(32)
  • es中3种分页的介绍以及对比

    类型 原理 优点 缺点 使用场景 from + size 类似 msql的 limit 0,100;  limit  from,size 灵活性好,实现简单,适合浅分页 无法实现深度分页问题 ,当查询数量超过10000就会报错 top10000以内的查询 Scroll 首次查询会在内存中保存一个历史快照以及游标(scroll_id),记录当前消息查询的终

    2024年02月03日
    浏览(37)
  • 前端vue简单好用的上拉加载下拉刷新组件,支持列表分页 本地分页

    前端vue简单好用的上拉加载下拉刷新组件,支持列表分页 本地分页, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:         #### 使用方法 ```使用方法 !-- pullDown:下拉刷新 back-top: 回到顶部  -- ccPullScroll class=\\\"pullScrollView\\\" ref=\\\"pullScroll\\\" :back-top=\\\"true\\\" :pullDo

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包