【LayUI】 动态table操作:edit、switch、tool、checkbox

场景描述:价格信息可以手动编辑,编辑其中一个价格框时实时计算出其他价格;或是勾选中要修改价格的数据进行批量修改,批量修改框弹出点击“确定”时更改列表缓存,等最终点击“保存”按钮时才去请求数据库更改数据。参与活动的开关、移除操作会直接更改数据库数据

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ActivityGoodsSku.aspx.cs" Inherits="Ruby.Admin.MarketingManage.ActivityGoodsSku" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <link href="../../new_website/scripts/layui/css/layui.css" rel="stylesheet" />
    <script src="../../new_website/scripts/jquery1.8.3/jquery-1.8.3.js" type="text/javascript"></script>
    <script src="../../new_website/scripts/layui/layui.all.js" type="text/javascript"></script>
    <script src="../../new_website/scripts/vue/vue.min.js"></script>

    <style type="text/css">
        body {
            color: #505050;
            background: #f5f4f4;
        }

        .layui-form-item {
            margin-bottom: 0px !important;
            padding-bottom: 10px;
        }

            .layui-form-item .layui-inline {
                margin-bottom: 0px;
            }

        .goodsImg {
            width: 50px;
            height: 50px;
        }

        .layui-table, .layui-table-view {
            margin: 0px;
        }

            .layui-table th {
                text-align: center;
            }

            .layui-table td {
                text-align: center;
            }
    </style>
</head>
<body>
    <div class="layui-block" style="font-size: 24px; padding: 15px 25px; margin-bottom: 10px; background: #fff;">
        活动商品SKU设置
    </div>

    <div id="data_view">
        <div style="background: #fff;">
            <table class="layui-table">
                <tr>
                    <td class="goodsImg">
                        <div style="width: 50px; height: 50px">
                            <img src="<%= GoodsImg %>" class="goodsImg" />
                        </div>

                    </td>
                    <td style="text-align: left">
                        <p><%= GoodsName %></p>
                        <p><%= GoodsId %></p>
                    </td>
                </tr>
            </table>
        </div>

        <div style="background-color: #FFF; margin-top: 10px; padding-top: 10px">
            <div class="layui-form-item">
                <input id="btnAdd1" type="button" value="添加活动SKU" v-on:click="addActivityGoodsSku()" class="layui-btn  layui-btn-normal" />
                <input type="button" value="批量设置折扣" v-on:click="batchEditPrice('Discount')" class="layui-btn  layui-btn-normal" />
                <input type="button" value="批量设置减价" v-on:click="batchEditPrice('ReductionPrice')" class="layui-btn  layui-btn-normal" />
                <input type="button" value="批量设置活动价" v-on:click="batchEditPrice('ActivitySalePrice')" class="layui-btn  layui-btn-normal" />
                <div class="layui-inline">
                    <label class="layui-form-label">已选<span style="color: red" id="checkedCount">0</span></label>
                </div>
            </div>
            <div id="divEditColumn" style="display: none">
                <div style="margin: 10px">
                    <input class="layui-input" id="inputValue" />
                </div>
            </div>
        </div>

        <div style="background-color: #FFF; height: auto; margin-top: 10px">
            <table id="tbActivityGoodsSku" class="layui-table" lay-filter="tbActivityGoodsSku" lay-skin="line"></table>
            <script type="text/html" id="barOperation">
                <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">移除</a>
            </script>
        </div>

        <div id="pageModule" style="margin-top: 10px">
            <input type="button" class="layui-btn layui-btn-primary" v-on:click="window.location.href = 'ActivityGoodsList.aspx?MenuId=<%= MenuId %>&ActivityNo=<%= ActivityNo %>&ResourceNo=<%= ResourceNo %>'" value="返 回" />
            <input id="btnAdd" type="button" value="保 存" v-on:click="addActivityGoods()" class="layui-btn  layui-btn-normal" />
        </div>
    </div>

    <script>
        var data_view = new Vue({
            el: '#data_view',
            data: {
                goodsSkuList: [],   //要设置参与活动的sku列表 
                form: '',
                layTable: '',
                objUpdateArr: []
            },
            mounted: function () {
                var that = this;
                layui.use(['form', 'laypage', 'table'], function () {
                    form = layui.form;
                    layTable = layui.table;

                    var params = {
                        MenuId: '<%= MenuId%>',
                        GoodsId: '<%=GoodsId %>',
                        ResourceNo: '<%=ResourceNo %>',
                        ActivityNo: '<%=ActivityNo %>',
                        flag: 'GetActivityGoodsSkuList'
                    }
                    layTable.render({
                        id: 'tbActivityGoodsSku',
                        elem: '#tbActivityGoodsSku', //指定原始表格元素选择器(推荐id选择器)   
                        defaultToolbar: ['filter'],
                        cellMinWidth: 120,
                        cols: [[ //标题栏,设置表头 
                            {
                                checkbox: true, title: '全选'
                            }
                            //, { field: 'ID', title: 'ID',  }
                            //, { field: 'SID', title: 'SID' }
                            , {
                                field: 'SkuName', title: 'SKU属性组合', templet: function (d) {
                                    if (d.SkuNameMatching == "1") {
                                        SkuName = "<p>" + d.SkuName + "</p>";
                                    }
                                    else {
                                        SkuName = "<p style='color: red;'>" + d.SkuName + "<span style='font-size:12px; color:rgba(255, 141, 26, 1)'>(该SKU不匹配)</span></p>";
                                    }
                                    return SkuName;
                                }
                            }
                            , { field: 'SalePrice', title: '原价' }
                            , { field: 'Discount', title: '打折(可编辑)', edit: 'text' }
                            , { field: 'ReductionPrice', edit: 'text', title: '减价(可编辑)' }
                            , { field: 'ActivitySalePrice', edit: 'text', title: '活动价(可编辑)' }
                            , { field: 'ActivityOverPrice', edit: 'text', title: '活动结算价(可编辑)' }
                            , { field: 'OverPrice', title: '结算价' }
                            , {
                                field: 'ProfitRate', title: '利润率', templet: function (d) {
                                    return Math.round(d.ProfitRate * 100) + '%'
                                }
                            }
                            , {
                                field: 'ActivityProfitRate', title: '活动利润率', templet: function (d) {
                                    return Math.round(d.ActivityProfitRate * 100) + '%'
                                }
                            }
                            , { field: 'SkuStock', title: '现有库存' }
                            , {
                                field: 'ActivityStatus', title: '参与活动', templet: function (d) {
                                    if (d.ActivityStatus == "1") {
                                        ActivityStatus = "<input type='checkbox' value='" + d.ID + "' id='status' lay-filter='switchStatus' checked='checked' name='status'  lay-skin='switch' lay-text='是|否' >";
                                    }
                                    else {
                                        ActivityStatus = "<input type='checkbox' value='" + d.ID + "' id='status' lay-filter='switchStatus'  name='status'  lay-skin='switch' lay-text='是|否' >";
                                    }
                                    return ActivityStatus;
                                }
                            }
                            , { title: '操作', toolbar: '#barOperation' }
                        ]],
                        method: 'post',
                        url: '../handle/Marketing.ashx',
                        contentType: 'application/x-www-form-urlencoded',
                        where: params,
                        parseData: function (res) {
                            //console.log(res)
                            return {
                                "code": '0', //解析接口状态
                                "msg": res.message, //解析提示文本
                                "count": res.result, //解析数据长度
                                "data": res.data //解析数据列表
                            };
                        },
                        done: function (res) {
                            $('th[data-field=' + 0 + '] div.layui-form-checkbox').addClass('layui-hide');   //隐藏全选的复选框
                            layTable.render();
                        }
                    });

                    //监听单元格编辑
                    layTable.on('edit(tbActivityGoodsSku)', function (obj) {
                        var value = obj.value //得到修改后的值
                        , trData = obj.data //得到所在行所有键值
                        , field = obj.field; //得到字段 

                        if (Number(obj.value) <= 0 || isNaN(obj.value)) {
                            var oldText = $(this).prev().text();
                            layer.msg('请输入大于0的数字');
                            $(this).val(oldText);
                            return;
                        }

                        var salePrice = Number(trData.SalePrice);   //原价 
                        var activityProfitRate = Number(trData.ActivityProfitRate); //活动利润率 

                        //自动计算值 
                        if (field == 'Discount') {  //折扣
                            var discount = Number(trData.Discount); //折扣
                            trData.ReductionPrice = (salePrice - Math.round((salePrice * (discount / 10)) * 100) / 100).toFixed(2);  //减价:原价-原价*折扣
                            trData.ActivitySalePrice = (salePrice - trData.ReductionPrice).toFixed(2);   //活动价:原价-减价
                            trData.ActivityOverPrice = (trData.ActivitySalePrice - Math.round(trData.ActivitySalePrice * activityProfitRate)).toFixed(2);   //活动结算价:活动价-(活动价*活动利润率)
                        }
                        if (field == 'ReductionPrice') {
                            var reductionPrice = Number(trData.ReductionPrice); //减价 
                            trData.ActivitySalePrice = (salePrice - reductionPrice).toFixed(2);   //活动价:原价-减价
                            trData.Discount = (Math.round((trData.ActivitySalePrice / salePrice * 10) * 100) / 100).toFixed(2);   //折扣:活动价/原价    
                            trData.ActivityOverPrice = (trData.ActivitySalePrice - Math.round(trData.ActivitySalePrice * activityProfitRate)).toFixed(2);   //活动结算价:活动价-(活动价*活动利润率)
                        }
                        if (field == 'ActivitySalePrice') {
                            var activitySalePrice = Number(trData.ActivitySalePrice); //活动价 
                            trData.Discount = (Math.round((activitySalePrice / salePrice * 10) * 100) / 100).toFixed(2);   //折扣:活动价/原价    
                            trData.ReductionPrice = (salePrice - Math.round((salePrice * (trData.Discount / 10)) * 100) / 100).toFixed(2);  //减价:原价-原价*折扣
                            trData.ActivityOverPrice = (activitySalePrice - Math.round(activitySalePrice * activityProfitRate)).toFixed(2);   //活动结算价:活动价-(活动价*活动利润率)
                        }
                        if (field == 'ActivityOverPrice') {
                            var activityOverPrice = Number(trData.ActivityOverPrice); //活动结算价 
                            trData.ActivitySalePrice = (salePrice - trData.ReductionPrice).toFixed(2);   //活动价:原价-减价
                            trData.Discount = (Math.round((trData.ActivitySalePrice / salePrice * 10) * 100) / 100).toFixed(2);   //折扣:活动价/原价 
                            trData.ReductionPrice = (salePrice - Math.round(salePrice * (trData.Discount / 10))).toFixed(2);  //减价:原价-原价*折扣 
                        }

                        obj.update(obj.data);
                        form.render();
                        $('th[data-field=' + 0 + '] div.layui-form-checkbox').addClass('layui-hide');   //隐藏全选的复选框
                    });

                    //监听开关按钮
                    form.on('switch(switchStatus)', function (obj) {
                        //console.log(obj)
                        //layer.tips(this.value + ' ' + this.name + ':' + obj.elem.checked, obj.othis); 
                        that.changeActivityStatus(obj.value, obj.elem.checked)
                    });

                    //监听行工具事件(移除商品SKU)
                    layTable.on('tool(tbActivityGoodsSku)', function (obj) {
                        if (obj.event === 'del') {
                            var params = {
                                MenuId: '<%= MenuId%>',
                                SkuID: obj.data.ID,
                                flag: "delActivityGoodsSku"
                            };
                                layer.confirm("您确定要删除该信息吗?", { icon: 3, title: '提示', btn: ['确定', '取消'] }, function () {
                                    $.post("../handle/Marketing.ashx", params, function (data) {
                                        data = JSON.parse(data);
                                        if (data.result == "0") {
                                            layer.alert('删除成功', {
                                                icon: 1, title: '提示', closeBtn: 0,
                                                yes: function () {
                                                    window.location.reload();
                                                }
                                            });
                                        } else {
                                            layer.alert('删除失败', { icon: 2, title: '提示', closeBtn: 0 });
                                        }
                                    });
                                })
                            }
                    });

                    //监听复选框选中事件(去除全选,批量操作价格)
                    layTable.on('checkbox(tbActivityGoodsSku)', function (obj) {
                        var checkStatus = layTable.checkStatus('tbActivityGoodsSku');
                        document.getElementById('checkedCount').innerHTML = checkStatus.data.length; //选中数量    
                        $('th[data-field=' + 0 + '] div.layui-form-checkbox').addClass('layui-hide');   //隐藏全选的复选框 
                        if (obj.checked) {
                            that.objUpdateArr.push(obj)
                        } else {
                            that.objUpdateArr.splice(obj, 1)
                        }
                    });

                    form.render();
                })
            },
            methods: {
                //切换菜单
                changeMenu: function (index) {
                    //console.log(index)
                    this.ModularType = index
                },

                //todo 批量设置价格
                batchEditPrice: function (field) {
                    var that = this;
                    var checkStatus = layTable.checkStatus('tbActivityGoodsSku');
                    //console.log(layui.table.cache['tbActivityGoodsSku'])
                    //console.log(that.objUpdateArr)

                    if (checkStatus.data.length == 0) {
                        layer.alert('请选择要设置的SKU', { icon: 7, title: '提示', closeBtn: 0 });
                        return;
                    }

                    //获取选中项的最低价和最高价
                    var minPrice = 0;
                    var maxPrice = 0;
                    var arrPrice = [];
                    for (var i = 0; i < checkStatus.data.length; i++) {
                        arrPrice.push(Number(checkStatus.data[i].SalePrice));
                    }
                    if (arrPrice.length > 0) {
                        maxPrice = Math.max.apply(null, arrPrice);
                        minPrice = Math.min.apply(null, arrPrice);
                    }

                    var placeHolder = '';
                    if (field == 'Discount') {
                        placeHolder = '请输入折扣';
                    }
                    if (field == 'ReductionPrice') {
                        placeHolder = '请输入减价金额';
                    }
                    if (field == 'ActivitySalePrice') {
                        placeHolder = '请输入活动价格';
                    }

                    layer.open({
                        type: 1,
                        title: ['原价:¥' + minPrice + '~¥' + maxPrice, 'font-size:16px;'],
                        area: ['300px'],
                        btn: ['确定', '取消'],
                        content: $('#divEditColumn'),
                        success: function (layero, index) {
                            $('#inputValue').attr('placeholder', placeHolder)
                        },
                        yes: function (index, layero) {
                            var inputValue = Number($('#inputValue').val());
                            if (inputValue != '') {
                                if (isNaN(inputValue) || Number(inputValue) <= 0) {
                                    layer.alert('请输入大于0的数字', { icon: 7, title: '提示', closeBtn: 0 });
                                    return;
                                }
                                //console.log(checkStatus)
                                for (var i = 0; i < that.objUpdateArr.length; i++) {
                                    var trData = that.objUpdateArr[i].data;
                                    var salePrice = Number(trData.SalePrice).toFixed(2);   //原价 
                                    var activityProfitRate = Number(trData.ActivityProfitRate).toFixed(2); //活动利润率 

                                    //自动计算值 
                                    if (field == 'Discount') {  //折扣
                                        var discount = Number(inputValue); //折扣
                                        trData.Discount = discount;
                                        trData.ReductionPrice = (salePrice - Math.round((salePrice * (discount / 10)) * 100) / 100).toFixed(2);  //减价:原价-原价*折扣
                                        trData.ActivitySalePrice = (salePrice - trData.ReductionPrice).toFixed(2);   //活动价:原价-减价
                                        trData.ActivityOverPrice = (trData.ActivitySalePrice - Math.round(trData.ActivitySalePrice * activityProfitRate)).toFixed(2);   //活动结算价:活动价-(活动价*活动利润率) 
                                    }
                                    if (field == 'ReductionPrice') {
                                        var reductionPrice = Number(inputValue); //减价 
                                        trData.ReductionPrice = reductionPrice;
                                        trData.ActivitySalePrice = (salePrice - reductionPrice).toFixed(2);   //活动价:原价-减价
                                        trData.Discount = (Math.round((trData.ActivitySalePrice / salePrice * 10) * 100) / 100).toFixed(2);   //折扣:活动价/原价    
                                        trData.ActivityOverPrice = (trData.ActivitySalePrice - Math.round(trData.ActivitySalePrice * activityProfitRate)).toFixed(2);   //活动结算价:活动价-(活动价*活动利润率)
                                    }
                                    if (field == 'ActivitySalePrice') {
                                        var activitySalePrice = Number(inputValue); //活动价 
                                        trData.ActivitySalePrice = activitySalePrice;
                                        trData.Discount = (Math.round((activitySalePrice / salePrice * 10) * 100) / 100).toFixed(2);   //折扣:活动价/原价    
                                        trData.ReductionPrice = (salePrice - Math.round((salePrice * (trData.Discount / 10)) * 100) / 100).toFixed(2);  //减价:原价-原价*折扣
                                        trData.ActivityOverPrice = (activitySalePrice - Math.round(activitySalePrice * activityProfitRate)).toFixed(2);   //活动结算价:活动价-(活动价*活动利润率)
                                    }

                                    that.objUpdateArr[i].update(that.objUpdateArr[i].data);
                                    form.render();
                                }
                                $('#inputValue').val('');   //设置文本框为空,防止打开别的弹框时还有值
                            }

                            layer.close(index);
                        }
                    });
                },

                // 是否参与活动
                changeActivityStatus: function (skuId, status) {
                    var params = {
                        MenuId: '<%= MenuId%>',
                        ActivityStatus: status,
                        SkuID: skuId,
                        flag: 'changeActivityStatus'
                    }
                    $.post("../handle/Marketing.ashx", params, function (data) {
                        //console.log(data)
                        data = JSON.parse(data);
                        if (data.result == "0") {
                            layer.alert('操作成功', {
                                icon: 1,
                                title: '提示',
                                closeBtn: 0,

                            });
                        } else {
                            layer.alert('操作失败', {
                                icon: 2,
                                title: '提示',
                                closeBtn: 0
                            });
                        }
                    });
                },

                addActivityGoodsSku: function () {
                    var that = this;
                    layer.open({
                        type: 2,
                        title: "设置参与活动SKU",
                        area: ['800px', '500px'],
                        content: 'ActivityGoodsSkuAdd.aspx?MenuId=' + '<%=MenuId%>' + '&ActivityNo=' + '<%=ActivityNo %>' + '&ResourceNo=' + '<%=ResourceNo %>' + '&GoodsId=' + '<%=GoodsId %>',
                        success: function (layero, index) {
                        }, 
                    });
                },

                addActivityGoods: function () {
                    var tableCache = layui.table.cache['tbActivityGoodsSku'];
                    var params = {
                        MenuId: '<%= MenuId%>',
                        tableCache: JSON.stringify(tableCache),
                        flag: 'EditSkuPrice'
                    }

                    if (tableCache.length > 0) {
                        var res = false;
                        for (var i = 0; i < tableCache.length; i++) {
                            if (tableCache[i].SkuNameMatching == '0') {
                                res = true;
                            }
                        }

                        if (res) {
                            layer.confirm("存在不匹配的SKU数据,是否继续?", { icon: 3, title: '提示', btn: ['确定', '取消'] }, function () {
                                $.post("../handle/Marketing.ashx", params, function (data) {
                                    data = JSON.parse(data);
                                    if (data.result == "0") {
                                        layer.alert('更新成功', {
                                            icon: 1, title: '提示', closeBtn: 0,
                                            yes: function () {
                                                window.location.reload();
                                            }
                                        });
                                    } else {
                                        layer.alert('更新失败', { icon: 2, title: '提示', closeBtn: 0 });
                                    }
                                });
                            })
                        } else {
                            $.post("../handle/Marketing.ashx", params, function (data) {
                                data = JSON.parse(data);
                                if (data.result == "0") {
                                    layer.alert('更新成功', {
                                        icon: 1, title: '提示', closeBtn: 0,
                                        yes: function () {
                                            window.location.reload();
                                        }
                                    });
                                } else {
                                    layer.alert('更新失败', { icon: 2, title: '提示', closeBtn: 0 });
                                }
                            });
                        }
                    }
                     
                    //console.log(tableCache)
                },



            }
        })
    </script>
</body>
</html>
View Code

 

 

 

 

 

posted @ 2021-04-02 11:31  智者见智  阅读(1174)  评论(0编辑  收藏  举报