Layui使用中遇到的问题

Layui使用中遇到的问题

1、使用数据表格遇到的问题:

我这边是后台需要三个参数:
在这里插入图片描述

这里的 Bill是个对象,原本这里我加有 @RequestBody 注解的,如下:
在这里插入图片描述

但是这会需要前端传回的是JSON字符串格式,即在layui的数据表格中需要声明contentType为 application/json
在这里插入图片描述

如果没添加contentType为 application/json会报错:

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing:

在这里插入图片描述

在这里插入图片描述

而当你加上这个contentType:'application/json'
在这里插入图片描述

由于我这里开启了layui的page:
在这里插入图片描述

所以这会导致一个问题:在请求时,它会把分页的两个参数,page和limit也塞到JSON中,那么Spring就无法成功地把请求参数映射到我的Bill对象,所以就会导致报错:

Access to XMLHttpRequest at 'http://localhost:8086/api/bill/list' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

在这里插入图片描述

在这里插入图片描述

解决方法就是,不用@RequestBody,像我最上面那样,这样传递的就是JSON对象了,Spring就能从中找到自己需要的对象参数进行对象封装,就能正确的进行请求了。
在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>账单列表</title>
    <link rel="stylesheet" href="../static/layui/css/layui.css" media="all">
</head>
<body>
<br/>
<ul class="layui-nav" lay-filter="">
    <li class="layui-nav-item"><a href="">账单列表</a></li>
    <li class="layui-nav-item"><a href="">账户</a></li>
    <li class="layui-nav-item"><a href="">退出</a></li>
</ul>
<br/><br/>
<form id="form" class="layui-form layui-card-body" >
    <input type="hidden" name="page" id="page" value="1"/>
    <input type="hidden" name="limit" id="limit" value="10"/>
    <div class="layui-inline">
        <label class="layui-form-label">类型:</label>
        <div class="layui-input-block">
            <select id="typeId" lay-verify="required">
                <option value="" selected>全部</option>
                <option value="1">收入</option>
                <option value="2">支出</option>
                <option value="3">借入</option>
                <option value="4">借出</option>
            </select>
        </div>
    </div>
    <div class="layui-inline">
        <label class="layui-form-label" for="date1">开始时间:</label>
        <div class="layui-input-inline">
            <input type="text" class="layui-input" id="date1" name="data1" placeholder="请输入起始时间">
        </div>
    </div>

    <div class="layui-inline">
        <label class="layui-form-label" for="date2">结束时间:</label>
        <div class="layui-input-inline">
            <input type="text" class="layui-input" id="date2" name="data2" placeholder="请输入结束时间">
        </div>
    </div>

    <div class="layui-inline">
        <div class="layui-upload-button">
            <button type="button" class="layui-btn layui-btn-normal" id="findByCondition">查询</button>
            <button type="reset" class="layui-btn layui-btn-normal">重置</button>
            <button type="button" class="layui-btn layui-btn-normal" id="add">添加</button>
        </div>
    </div>
</form>

<div class="with:80%">
    <div class="layui-inline" style="left:50px">
        <table id="demo" lay-filter="billList" class="layui-table"></table>
    </div>
</div>


<script src="../static/layui/layui.js"></script>
<script src="../static/js/jquery-1.10.2.min.js"></script>
<script type="text/html" id="userBar">
    <div class="layui-btn-container">
<!--        <button class="layui-btn layui-btn-sm" lay-event="edit">修改</button>-->
<!--        <button class="layui-btn layui-btn-danger  layui-btn-sm" lay-event="changeStu">删除</button>-->
        <button type="button" class="layui-btn layui-btn-sm" lay-event="update">
            <i class="layui-icon">&#xe642;</i>
        </button>
        <button type="button" class="layui-btn layui-btn-danger layui-btn-sm" lay-event="delete">
            <i class="layui-icon">&#xe640;</i>
        </button>
    </div>
</script>
<script>
    $(function () {
        layui.use('laydate', function () {
            var laydate = layui.laydate;

            //执行一个laydate实例
            laydate.render({
                elem: '#date1' //指定元素
            });
            laydate.render({
                elem: '#date2' //指定元素
            });
        });

        //Demo
        layui.use('form', function () {
        });
        //注意:导航 依赖 element 模块,否则无法进行功能性操作
        layui.use('element', function(){
        });
        layui.use('table', function () {
            var table = layui.table;
            //第一个实例
            table.render({
                elem: '#demo',
                id:'table',
                // width: 1200,
                url: 'http://localhost:8086/api/bill/list', //数据接口
                page: true, //开启分页
                // where:{"typeId":typeId,"date1":date1,"date2":date2},
                // method:'post',
                // contentType: 'application/json',
                cols: [[ //表头
                    {field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left'}
                    , {field: 'title', title: '标题', width: 200}
                    , {field: 'billTime', title: '时间', width: 200, sort: true, templet:'<div>{{ layui.util.toDateString(d.billTime, "yyyy-MM-dd") }}</div>'}
                    , {field: 'price', title: '金额', width: 100,sort: true}
                    , {field: 'typeId', title: '类别', width: 200}
                    , {field: 'explain', title: '说明', width: 280}
                    , {field: 'action', title: '操作', width: 140, align:'center',toolbar:'#userBar'}
                ]]
            });
            table.on('tool(billList)',function (obj) {
                let data = obj.data;
                switch(obj.event){
                    case 'update':
                        layer.msg('修改');
                        window.location.href="update.html?id="+data.id;//跳修改页面,并且传递当前行的id,供后台查询
                        break;
                    case 'delete':
                        layer.confirm('确认删除? 此操作不可逆',{btn: ['确定', '取消'],title:"提示",icon: 2}, function(){
                            layer.closeAll("dialog");
                            var windowId = layer.load();
                            $.get('http://localhost:8086/api/bill/delete/'+data.id,function (result) {
                                layer.close(windowId);
                                if (result == 1){
                                    layer.msg("删除成功!")
                                    var table = layui.table;
                                    table.reload('table');
                                };

                            });
                        })
                        break;
                }
            });
        });

        $("#findByCondition").click(function () {
            var table = layui.table;
            var typeId = $("#typeId").val()
            var date1 = $("#date1").val()
            var date2 = $("#date2").val()

            table.reload('table',{  // 这里之所以是 table,而不是上边的 demo 是因为,在上边table.render时给了一个id为table
                where: {'typeId':typeId,'date1':date1,'date2':date2},
                method:'post'
            });
            return false;

        })

        $("#add").click(function () {
            layer.msg('添加');
            window.location.href="add.html";//跳添加页面
            return false;
        })

    })

</script>
</body>
</html>

2、时间格式转换

使用自定义模板和工具集中的时间工具:
**在这里插入图片描述
**
**在这里插入图片描述
**
注意的是,需要用d来访问对应的数据:
**在这里插入图片描述
**
比如:我这里就是:

{field: 'billTime', title: '时间', width: 200, sort: true, templet:'<div>{{ layui.util.toDateString(d.billTime, "yyyy-MM-dd HH:mm:ss") }}</div>'}

在其他地方使用的话,可以如下:

			layui.use('util', function () {
                var util = layui.util;
                $.get(originUrl + '/toUpdate/' + id, function (result) {
                    $("#id").val(result.id);
                    var typeId = result.typeId;
                    for (let i = 0; i < options.length; i++) {
                        option = options[i];
                        if ($(option).val() == typeId) {
                            $(option).prop("selected",true);
                            $(".layui-select-title input").val($(option).html())
                        }
                    }
                    $("#title").val(result.title);
                                                       
                    // 重点是这一行                                   
                    var billTime = util.toDateString(result.billTime, "yyyy-MM-dd");
                                                       
                                                       
                    $("#billTime").val(billTime);
                    $("#price").val(result.price);
                    $("#explain").val(result.explain);
                })
            })

3、跳转页面时带参数

window.location.href="update.html?id="+data.id;//跳修改页面,并且传递当前行的id,供后台查询

这样在update.html页面,通过:

window.location.href // http://localhost:8080/templates/update.html?id=1

就能获取到带有id值的url
然后进行正则提取:

function getQueryString(name) {
        let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        let r = window.location.search.substr(1).match(reg); // Location{ancestorOrigins: DOMStringList, href: "http://localhost:8080/templates/update.html?id=1", origin: "http://localhost:8080", protocol: "http:", host: "localhost:8080", …}
        if (r != null) {
            return decodeURIComponent(r[2]);
        };
        return null;
    };
    var id = getQueryString("id");

就能拿到传递过来的id值了,这样就可以进行后续的填充数据了(因为我这里是修改,所以要能看到原数据最好)

4、form表单的一个问题

我的form表单中的有个保存的button,我给他绑定了点击监听事件,用$.get提交,想用弹出层给页面提示效果,然后跳转页面,但是弹出层并不生效,而且会刷新一次这个页面,经过观察,是提交了两次,一次是我给定的地址,而另一次却是另外的一个地址,很奇怪,然后看网上,有人说把button改为input即可,我改了之后果然正常的执行,然后跳转页面了

代码如下:
我已经把button注释了,留做对照

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改账单</title>
    <link rel="stylesheet" href="../static/layui/css/layui.css" media="all">
</head>
<body>
<ul class="layui-nav" lay-filter="">
    <li class="layui-nav-item">修改账单</li>
    <li class="layui-nav-item"><a href="">返回</a></li>
</ul>
<br/><br/>
<form class="layui-form layui-card-body" action="">
    <input type="hidden" name="id" id="id"/>
    <div class="layui-form-item">
        <label class="layui-form-label">类型:</label>
        <div class="layui-input-block">
            <select id="typeId" name="typeId" lay-verify="required">
            </select>
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label">标题</label>
        <div class="layui-input-block">
            <input type="text" name="title" id="title" required lay-verify="required" placeholder="标题"
                   autocomplete="off" class="layui-input">
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label" for="billTime">日期</label>
        <div class="layui-input-inline">
            <input type="text" class="layui-input" id="billTime" name="billTime" placeholder="日期">
        </div>
    </div>


    <div class="layui-form-item">
        <label class="layui-form-label">金额</label>
        <div class="layui-input-block">
            <input type="text" name="price" id="price" required lay-verify="required" placeholder="金额"
                   autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">说明</label>
        <div class="layui-input-block">
            <input type="text" name="explain" id="explain" required placeholder="说明" autocomplete="off"
                   class="layui-input">
        </div>
    </div>


    <div class="layui-form-item">
        <div class="layui-input-block">
<!--            <button class="layui-btn" id="update">修改</button>-->
            <input class="layui-btn" type="button" id="update" value="修改">
            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>
</form>


</body>
<script src="../static/layui/layui.js"></script>
<script src="../static/js/jquery-1.10.2.min.js"></script>
<script>
    function getQueryString(name) {
        let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        let r = window.location.search.substr(1).match(reg); // Location{ancestorOrigins: DOMStringList, href: "http://localhost:8080/templates/update.html?id=1", origin: "http://localhost:8080", protocol: "http:", host: "localhost:8080", …}
        if (r != null) {
            return decodeURIComponent(r[2]);
        }
        ;
        return null;
    };
    // console.log(window.location.href)
    // var url = window.location.href // http://localhost:8080/templates/update.html?id=1
    // console.log("id = " + getQueryString("id"))
    var id = getQueryString("id");
    var originUrl = 'http://localhost:8086/api/bill/'
    // var url = 'http://localhost:8086/api/bill/toUpdate/'+id;
    var types = null;
    $.post(originUrl + 'types', function (result) {
        console.log('types:' + result[0].name);
        types = result;
    })
    // 回显数据
    layui.use('util', function () {
        var util = layui.util;
        $.get(originUrl + '/toUpdate/' + id, function (result) {
            // console.log('bill:' + result.title);
            $("#id").val(result.id);
            var typeId = result.typeId
            // 填充下拉列表
            for (let i = 0; i < types.length; i++) {
                type = types[i];
                if (type.id == typeId) {
                    $("#typeId").append("<option value=" + type.id + " selected>" + type.name + "</option>");
                } else {
                    $("#typeId").append("<option value=" + type.id + ">" + type.name + "</option>");
                }
            }
            $("#title").val(result.title);
            var billTime = util.toDateString(result.billTime, "yyyy-MM-dd");
            $("#billTime").val(billTime);
            $("#price").val(result.price);
            $("#explain").val(result.explain);
        })
    })

    layui.use(['form', 'laydate'], function () {
        // var form = layui.form;
        var laydate = layui.laydate;

        //执行一个laydate实例
        laydate.render({
            elem: '#billTime' //指定元素
        });

    });

    $("#update").click(function () {
        var id = $("#id").val();
        var typeId = $("#typeId").val();
        var title = $("#title").val();
        var billTime = $("#billTime").val();
        var price = $("#price").val();
        var explain = $("#explain").val();
        console.log(originUrl)
        $.post(originUrl + 'update',
            {
                id: id,
                typeId: typeId,
                title: title,
                billTime: billTime,
                price: price,
                explain: explain
            },
            function (result) {
                if(result == 1){
                    layer.msg("修改成功!");
                    window.location.href = "list.html";// 跳转页面
                }

            })
    })
</script>
</html>

然后,还有的是说使用layui的表单提交,在里面进行$.ajax请求,然后给它return false,好像也可以,但是我并不可以,提交的地址不是我传递的地址,所以后台是没有任何操作的。
还有的说是,因为jQuery的 与 l a y u i 的 与 layui的 layui有冲突;所以更改layui的$$即可,但是我还是一样的问题,所以我还是采用了把button变为input的解决方案

更新:

上边使用表单提交的方法不正确的原因是我没有给button lay-submit属性,然后还需要就是return false
button的lay-submit不要忘记!

<button class="layui-btn" lay-submit lay-filter="update" id="update">修改</button>

我最开始没有写lay-submit这个属性,导致我使用layui的表单监听submit提交时,总是访问不正确的地址,然后并不执行我绑定的ajax请求。这里加上lay-submit的话,需要在表单监听submit提交中,加上return false,否则也是不能正确执行ajax的。
下面是修改后的:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改账单</title>
    <link rel="stylesheet" href="../static/layui/css/layui.css" media="all">
</head>
<body>
<ul class="layui-nav" lay-filter="">
    <li class="layui-nav-item">修改账单</li>
    <li class="layui-nav-item"><a href="">返回</a></li>
</ul>
<br/><br/>
<form class="layui-form layui-card-body" action="">
    <input type="hidden" name="id" id="id"/>
    <div class="layui-form-item">
        <label class="layui-form-label">类型:</label>
        <div class="layui-input-block">
            <select id="typeId" name="typeId" lay-verify="required">
            </select>
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label">标题</label>
        <div class="layui-input-block">
            <input type="text" name="title" id="title" required lay-verify="required" placeholder="标题"
                   autocomplete="off" class="layui-input">
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label" for="billTime">日期</label>
        <div class="layui-input-inline">
            <input type="text" class="layui-input" id="billTime" name="billTime" placeholder="日期">
        </div>
    </div>


    <div class="layui-form-item">
        <label class="layui-form-label">金额</label>
        <div class="layui-input-block">
            <input type="text" name="price" id="price" required lay-verify="required" placeholder="金额"
                   autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">说明</label>
        <div class="layui-input-block">
            <input type="text" name="explain" id="explain" required placeholder="说明" autocomplete="off"
                   class="layui-input">
        </div>
    </div>


    <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn" lay-submit lay-filter="update" id="update">修改</button>
            <!--            <input class="layui-btn" type="button" id="update" value="修改">-->
            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>
</form>


</body>
<script src="../static/layui/layui.js"></script>
<script src="../static/js/jquery-1.10.2.min.js"></script>
<script>
    function getQueryString(name) {
        let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        let r = window.location.search.substr(1).match(reg); // Location{ancestorOrigins: DOMStringList, href: "http://localhost:8080/templates/update.html?id=1", origin: "http://localhost:8080", protocol: "http:", host: "localhost:8080", …}
        if (r != null) {
            return decodeURIComponent(r[2]);
        }
        ;
        return null;
    };
    // console.log(window.location.href)
    // var url = window.location.href // http://localhost:8080/templates/update.html?id=1
    // console.log("id = " + getQueryString("id"))
    var id = getQueryString("id");
    var originUrl = 'http://localhost:8086/api/bill/'
    // var url = 'http://localhost:8086/api/bill/toUpdate/'+id;
    var types = null;
    $.post(originUrl + 'types', function (result) {
        console.log('types:' + result[0].name);
        types = result;
    })
    // 回显数据
    layui.use('util', function () {
        var util = layui.util;
        $.get(originUrl + '/toUpdate/' + id, function (result) {
            // console.log('bill:' + result.title);
            $("#id").val(result.id);
            var typeId = result.typeId
            // 填充下拉列表
            for (let i = 0; i < types.length; i++) {
                type = types[i];
                if (type.id == typeId) {
                    $("#typeId").append("<option value=" + type.id + " selected>" + type.name + "</option>");
                } else {
                    $("#typeId").append("<option value=" + type.id + ">" + type.name + "</option>");
                }
            }
            $("#title").val(result.title);
            var billTime = util.toDateString(result.billTime, "yyyy-MM-dd");
            $("#billTime").val(billTime);
            $("#price").val(result.price);
            $("#explain").val(result.explain);
        })
    })

    layui.use(['form', 'laydate'], function () {
        var form = layui.form;
        var laydate = layui.laydate;

        //执行一个laydate实例
        laydate.render({
            elem: '#billTime' //指定元素
        });

        form.on('submit(update)', function (data) {
            $.post(originUrl + 'update', data.field, function (result) {
                if (result == 1) {
                    layer.msg("修改成功!");
                    window.location.href = "list.html";// 跳转页面
                }

            })
            return false;
        })

    });

</script>
</html>

5、一个select下拉框问题

我是动态填充select下拉列表内容,然后根据查询的账单id来确定要选中的下拉列表元素,但是,总是不能正确的展示所选中的下拉列表元素,即使使用了 prop("selected",true)也并不可以,如下:
在这里插入图片描述

这里总是不对应,查了很久也没有找到好的解决方法,于是自力更生吧,,
观察到,实际上是下边这个.layui-select-title内的input 控制的上边的文本内容,所以:
在这里插入图片描述

解决!
如果有什么好的办法,请留言告诉我,真的不想找了,,,
全部代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改账单</title>
    <link rel="stylesheet" href="../static/layui/css/layui.css" media="all">
</head>
<body>
<ul class="layui-nav" lay-filter="">
    <li class="layui-nav-item">修改账单</li>
    <li class="layui-nav-item"><a href="list.html">返回</a></li>
</ul>
<br/><br/>
<form class="layui-form layui-card-body" action="">
    <input type="hidden" name="id" id="id"/>
    <div class="layui-form-item">
        <label class="layui-form-label">类型:</label>
        <div class="layui-input-block">
            <select id="typeId" name="typeId" lay-verify="required" lay-filter="type" autocomplete="off">
            </select>
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label">标题</label>
        <div class="layui-input-block">
            <input type="text" name="title" id="title" required lay-verify="required" placeholder="标题"
                   autocomplete="off" class="layui-input">
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label" for="billTime">日期</label>
        <div class="layui-input-inline">
            <input type="text" class="layui-input" id="billTime" name="billTime" placeholder="日期">
        </div>
    </div>


    <div class="layui-form-item">
        <label class="layui-form-label">金额</label>
        <div class="layui-input-block">
            <input type="text" name="price" id="price" required lay-verify="required" placeholder="金额"
                   autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">说明</label>
        <div class="layui-input-block">
            <input type="text" name="explain" id="explain" required placeholder="说明" autocomplete="off"
                   class="layui-input">
        </div>
    </div>


    <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn" lay-submit lay-filter="update" id="update">修改</button>
            <!--            <input class="layui-btn" type="button" id="update" value="修改">-->
            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>
</form>


</body>
<script src="../static/layui/layui.js"></script>
<script src="../static/js/jquery-1.10.2.min.js"></script>
<script>
    function getQueryString(name) {
        let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        let r = window.location.search.substr(1).match(reg); // Location{ancestorOrigins: DOMStringList, href: "http://localhost:8080/templates/update.html?id=1", origin: "http://localhost:8080", protocol: "http:", host: "localhost:8080", …}
        if (r != null) {
            return decodeURIComponent(r[2]);
        }
        ;
        return null;
    };
    // console.log(window.location.href)
    // var url = window.location.href // http://localhost:8080/templates/update.html?id=1
    // console.log("id = " + getQueryString("id"))
    var id = getQueryString("id");
    var originUrl = 'http://localhost:8086/api/bill/'
    // var url = 'http://localhost:8086/api/bill/toUpdate/'+id;
    // var types = null;
    $.post(originUrl + 'types', function (types) {
        if (types.length > 0){
            // 填充下拉列表
            for (let i = 0; i < types.length; i++) {
                type = types[i];
                $("#typeId").append("<option value=" + type.id + ">" + type.name + "</option>");
            }

            var options = $("#typeId option");
            // 保证先获取完下拉列表再回显数据
            // 回显数据
            layui.use('util', function () {
                var util = layui.util;
                $.get(originUrl + '/toUpdate/' + id, function (result) {
                    // console.log('bill:' + result.title);
                    $("#id").val(result.id);
                    var typeId = result.typeId;
                    for (let i = 0; i < options.length; i++) {
                        option = options[i];
                        if ($(option).val() == typeId) {
                            $(option).prop("selected",true);
                            $(".layui-select-title input").val($(option).html())
                        }
                    }
                    $("#title").val(result.title);
                    var billTime = util.toDateString(result.billTime, "yyyy-MM-dd");
                    $("#billTime").val(billTime);
                    $("#price").val(result.price);
                    $("#explain").val(result.explain);
                })
            })
        }

    })




    layui.use(['form', 'laydate'], function () {
        var form = layui.form;
        var laydate = layui.laydate;

        //执行一个laydate实例
        laydate.render({
            elem: '#billTime' //指定元素
        });

        form.on('submit(update)', function (data) {
            $.post(originUrl + 'update', data.field, function (result) {
                if (result == 1) {
                    layer.msg("修改成功!");
                    window.location.href = "list.html";// 跳转页面
                }

            })
            return false;
        })


    });

</script>
</html>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值