关于使用layui+tp6制作物品入库单,实现根据单价数量自动计算单品金额和合计金额

本文使用layuiadmin pro+tp6制作。

关于layuiadmin资源,本人纯手工还原了std版本可下载学习使用,pro版也还原了,目前正在整理中 。

LayuiAdmin std 2.3.2,纯手工还原icon-default.png?t=N7T8https://download.csdn.net/download/xych_ccui/88902038

源码仅限学习使用,请勿商用及传播。

 效果:

 HTLM部分:

<title>库房管理</title>
<style>
    .inputbottom {
        /*input显示下边线样式*/
        border: none;
        border-bottom: 1px #c9c9c9 solid;
    }
</style>
<div class="layui-card layadmin-header">
    <div class="layui-breadcrumb" lay-filter="breadcrumb">
        <a lay-href="">控制台</a>
        <a><cite>库房管理</cite></a>
        <a><cite>入库单</cite></a>
    </div>
</div>

<div class="layui-fluid">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md12">
            <div class="layui-card layui-form" lay-filter="form" id="form">
                <div class="layui-card-header layuiadmin-card-header-auto">
                    <button class="layui-btn layui-btn-normal" lay-href="storehouse/rukumingxi">入库明细列表</button>
                    <div style="float:right">
                        <button class="layui-btn layui-btn-normal" lay-submit lay-filter="layuiadmin-app-storehouse-form-submit">提交</button>
                    </div>
                </div>
                <div class="layui-card-body" pad15>
                    <div class="layui-card-body">
                        <input type="text" name="stor_num" lay-verify="" value="物品入库单" class="layui-input inputbottom" style="width:300px;text-align:center;font-size:18px;margin:0 auto;" readonly>
                    </div>
                    <table class="layui-table" lay-skin="nob">
                        <colgroup>
                            <col width="100">
                            <col>
                            <col width="150">
                            <col width="200">
                            <col width="200">
                            <col width="200">
                        </colgroup>
                        <tbody>
                            <tr>
                                <td align="right">入库说明:</td>
                                <td>
                                    <div class="layui-input-inline" style="width:300px;">
                                        <input type="text" name="stor_title" lay-verify="required" autocomplete="off" placeholder="请输入本次入库单相关说明" class="layui-input inputbottom">
                                    </div>
                                </td>
                                <td align="right">入库时间:</td>
                                <td><input type="text" class="layui-input inputbottom" name="stor_time" id="stor_time" placeholder="yyyy-MM-dd"></td>
                                <td align="right">入库单号:</td>
                                <td>
                                    <script type="text/html" template lay-url="/ccadmins/storehouse/stornum_rk" lay-type="get" lay-done="layui.form.render();">
                                        <input type="text" name="stor_num" lay-verify="required" value="{{d.data.stornum}}" readonly class="layui-input inputbottom">
                                    </script>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                    <table class="layui-table">
                        <colgroup>
                            <col width="150">
                            <col width="150">
                            <col width="150">
                            <col width="110">
                            <col width="90">
                            <col width="150">
                            <col width="150">
                            <col width="150">
                            <col width="70">
                        </colgroup>
                        <thead lay-skin="nob">
                            <tr>
                                <th style="text-align:center">物品名称</th>
                                <th style="text-align:center">品牌/供应商</th>
                                <th style="text-align:center">规格型号</th>
                                <th style="text-align:center">计量单位</th>
                                <th style="text-align:center">数量</th>
                                <th style="text-align:center">单价</th>
                                <th style="text-align:center">金额</th>
                                <th style="text-align:center">备注</th>
                                <th style="text-align:center">
                                    <span class="layui-btn layui-btn-xs layui-btn-normal add-line">&nbsp;增&nbsp;</span>
                                </th>
                            </tr>
                        </thead>
                        <tbody style="text-align:center" id="lineList">
                            <tr>
                                <td><input type="text" name="item_name[]" lay-verify="required" class="layui-input" autocomplete="off"></td>
                                <td><input type="text" name="brand[]" class="layui-input" autocomplete="off"></td>
                                <td><input type="text" name="specification[]" class="layui-input" autocomplete="off">
                                </td>
                                <td><input type="text" name="unit[]" lay-verify="required" class="layui-input" autocomplete="off"></td>
                                <td><input type="text" name="amount[]" lay-verify="required|number" class="layui-input" autocomplete="off"></td>
                                <td><input type="text" name="price[]" lay-verify="required" class="layui-input" autocomplete="off"></td>
                                <td><input type="text" name="money[]" class="layui-input" readonly></td>
                                <td><input type="text" name="comment[]" class="layui-input" autocomplete="off"></td>
                                <td><span name="deleteGoods"></span></td>
                            </tr>

                        </tbody>
                        <tbody>
                            <tr>
                                <td>合计大写</td>
                                <td colspan="3"><input type="text" name="totaldx" class="layui-input" readonly></td>
                                <td>合计金额</td>
                                <td colspan="4"><input type="text" name="total" class="layui-input" readonly></td>
                            </tr>
                        </tbody>
                    </table>
                    <table class="layui-table" lay-skin="nob">
                        <colgroup>
                            <col width="120">
                            <col width="300">
                            <col width="120">
                            <col width="300">
                            <col width="120">
                            <col width="300">
                        </colgroup>
                        <tbody>
                            <tr>
                                <td align="right">入库申请人:</td>
                                <td>
                                    <script type="text/html" template lay-url="/storehouse/userslist" lay-type="get" lay-done="layui.form.render('select');">
                                        <select name="applicant" lay-filter="applicant" lay-verify="required" lay-reqText="请选择">
                                            <option value="">请选择</option>
                                            {{# layui.each(d.data, function(index, item){ }}
                                            <option value="{{item.id}}">
                                            {{item.user_name}}
                                            </option>
                                            {{# }); }}
                                        </select>
                                    </script>
                                </td>
                                <td align="right">操作人员:</td>
                                <td>
                                    <script type="text/html" template lay-url="/storehouse/userslist" lay-type="get" lay-done="layui.form.render('select');">
                                        <select name="operator" lay-filter="operator" lay-verify="required" lay-reqText="请选择">
                                            <option value="">请选择</option>
                                            {{# layui.each(d.data, function(index, item){ }}
                                            <option value="{{item.id}}">
                                            {{item.user_name}}
                                            </option>
                                            {{# }); }}
                                        </select>
                                    </script>
                                </td>
                                <td align="right">财务人员:</td>
                                <td>
                                    <script type="text/html" template lay-url="/storehouse/userslist" lay-type="get" lay-done="layui.form.render('select');">
                                        <select name="caiwu" lay-filter="caiwu" lay-verify="required" lay-reqText="请选择">
                                            <option value="">请选择</option>
                                            {{# layui.each(d.data, function(index, item){ }}
                                            <option value="{{item.id}}">
                                            {{item.user_name}}
                                            </option>
                                            {{# }); }}
                                        </select>
                                    </script>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>

JS部分:

<script type="text/javascript">
    layui.use(['laydate', 'table', 'layer', 'admin', 'form'], function () {
        var $ = layui.jquery
            , admin = layui.admin
            , view = layui.view
            , table = layui.table
            , layer = layui.layer
            , laydate = layui.laydate
            , form = layui.form;
        //初始时间赋值
        laydate.render({
            elem: '#stor_time'
            , format: 'yyyy-MM-dd' //指定时间格式
            , value: new Date()
        });
        calc();       //合计
        numkeyup();   //输入数量
        pricekeyup(); //输入单价

        //监听增加行
        $('.add-line').on('click', function () {
            let tem = [
                '<tr>\
                    <td><input type="text" name="item_name[]" lay-verify="required" class="layui-input" autocomplete="off"></td>\
                    <td><input type="text" name="brand[]" class="layui-input" autocomplete="off"></td>\
                    <td><input type="text" name="specification[]" class="layui-input" autocomplete="off"></td>\
                    <td><input type="text" name="unit[]" lay-verify="required" class="layui-input" autocomplete="off"></td>\
                    <td><input type="text" name="amount[]" lay-verify="required" class="layui-input" autocomplete="off"></td>\
                    <td><input type="text" name="price[]" value="" lay-verify="required" class="layui-input" autocomplete="off"></td>\
                    <td><input type="text" name="money[]" class="layui-input" readonly></td>\
                    <td><input type="text" name="comment[]" class="layui-input" autocomplete="off"></td>\
                    <td><span class="layui-btn layui-btn-danger layui-btn-xs" name="deleteGoods">&nbsp;删&nbsp;</span></td>\
                </tr>'
            ];
            $('#lineList').append(tem);
            calc(); //计算
            numkeyup();   //输入数量
            pricekeyup(); //输入单价
            form.render();//渲染
        });
        //监听删除行
        $('#lineList').on('click', '.layui-btn-danger', function () {
            $(this).parents('tr').remove();
            calc();
        });
        //监听输入数量
        function numkeyup() {
            //body是关键,不然获取不到新增行的属性。也可以是父级或者祖级。
            var a = $("body input[name*='amount']").each(function () {
                $(this).on('keyup', function () { calc(); });
            });
        }
        //监听输入单价
        function pricekeyup() {
            var a = $("body input[name*='price']").each(function () {
                $(this).on('keyup', function () { calc(); });
            });
        }
        //计算价格
        function calc() {
            //找到共有对象
            var $obj = $("span[name='deleteGoods']");
            var sum = 0;
            //循环共有对象,让它循环获得我们想要的对象的值
            $obj.each(function () {
                //获得数量
                var $count = parseFloat($(this).parent().prev().prev().prev().prev().find("input").val());
                //获得单价
                var $price = parseFloat($(this).parent().prev().prev().prev().find("input").val());
                var timSum = $count * $price;
                if (timSum) {
                    $(this).parent().prev().prev().find("input").val(timSum.toFixed(2));//给金额赋值
                } else {
                    timSum = 0;
                    $(this).parent().prev().prev().find("input").val(timSum.toFixed(2));//给金额赋值
                }
                sum += timSum; //累加计算总价
                sumdx = num_change(sum.toFixed(2));//大写合计数
            });
            $("body input[name='total']").val(sum.toFixed(2));//赋值input合计
            $("body input[name='totaldx']").val(sumdx);       //赋值input合计大写
        };
        //监听提交
        form.on('submit(layuiadmin-app-storehouse-form-submit)', function (data) {
            var field = data.field; //获取提交的字段
            //....略
        });
        function num_change(money) {
            //汉字的数字
            var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
            //基本单位
            var cnIntRadice = new Array('', '拾', '佰', '仟');
            //对应整数部分扩展单位
            var cnIntUnits = new Array('', '万', '亿', '兆');
            //对应小数部分单位
            var cnDecUnits = new Array('角', '分', '毫', '厘');
            //整数金额时后面跟的字符
            var cnInteger = '整';
            //整型完以后的单位
            var cnIntLast = '元';
            //最大处理的数字
            var maxNum = 999999999999999.9999;
            //金额整数部分
            var integerNum;
            //金额小数部分
            var decimalNum;
            //输出的中文金额字符串
            var chineseStr = '';
            //分离金额后用的数组,预定义
            var parts;
            if (money == '') { return '零元'; }
            money = parseFloat(money);
            if (money >= maxNum) {
                //超出最大处理数字
                return '';
            }
            if (money == 0) {
                chineseStr = cnNums[0] + cnIntLast + cnInteger;
                return chineseStr;
            }
            //转换为字符串
            money = money.toString();
            if (money.indexOf('.') == -1) {
                integerNum = money;
                decimalNum = '';
            } else {
                parts = money.split('.');
                integerNum = parts[0];
                decimalNum = parts[1].substr(0, 4);
            }
            //获取整型部分转换
            if (parseInt(integerNum, 10) > 0) {
                var zeroCount = 0;
                var IntLen = integerNum.length;
                for (var i = 0; i < IntLen; i++) {
                    var n = integerNum.substr(i, 1);
                    var p = IntLen - i - 1;
                    var q = p / 4;
                    var m = p % 4;
                    if (n == '0') {
                        zeroCount++;
                    } else {
                        if (zeroCount > 0) {
                            chineseStr += cnNums[0];
                        }
                        //归零
                        zeroCount = 0;
                        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
                    }
                    if (m == 0 && zeroCount < 4) {
                        chineseStr += cnIntUnits[q];
                    }
                }
                chineseStr += cnIntLast;
            }
            //小数部分
            if (decimalNum != '') {
                var decLen = decimalNum.length;
                for (var i = 0; i < decLen; i++) {
                    var n = decimalNum.substr(i, 1);
                    if (n != '0') {
                        chineseStr += cnNums[Number(n)] + cnDecUnits[i];
                    }
                }
            }
            if (chineseStr == '') {
                chineseStr += cnNums[0] + cnIntLast + cnInteger;
            } else if (decimalNum == '') {
                chineseStr += cnInteger;
            }
            return chineseStr;
        }
    });

本文只写了关于前端的写法,关于后端获取数据库人员名单以及提交过程省略了,可以自行研究。

欢迎评论区进行评论和指导。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ccadmins

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值