zoukankan      html  css  js  c++  java
  • 华夏erp easyui框架的开发纪要

    1:初始化表 datagrid

    先定义html table id

    在此以华夏erp为例 form 下定义一个table ,接着table内又定一个子table  <!-- 商品列表table --> <table id="materialData" 

       <form id="bomHeadFM" method="post" novalidate>
            <table width="100%" style="min-1100px;">
                <tr>
                    <td style="70px;">单据日期</td>
                    <td style="padding:5px;170px;">
                        <input type="text" name="OperTime" id="OperTime"
                               onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" class="txt Wdate radius-ui"
                               style="155px;" readonly/>
                    </td>
                    <td style="70px;">单据编号</td>
                    <td style="padding:5px">
                        <input name="Number" id="Number" class="easyui-validatebox radius-ui"
                               data-options="validType:'length[2,30]'" style="150px;" readonly/>
                    </td>
                    <td style="80px;"></td>
                    <td style="padding:5px;170px;"></td>
                    <td style="70px;"></td>
                    <td style="padding:5px"></td>
                    <td style="100px;"></td>
                </tr>
                <tr>
                    <td colspan="9">
                        <!-- 商品列表table -->
                        <table id="materialData" style="top:100px;border-bottom-color:#FFFFFF"></table>
                    </td>
                </tr>
                <tr>
                    <td colspan="9">
                        <textarea name="Remark" id="Remark" rows="2" cols="2" class="radius-ui" placeholder="暂无备注信息"
                                  style=" 100%; height:35px;"></textarea>
                    </td>
                </tr>
            </table>
        </form>

    定义完位置之后,初始化id  materialData

      $('#materialData').datagrid({
                height:345,
                rownumbers: false,
                //动画效果
                animate:false,
                //选中单行
                singleSelect: true,
                collapsible: false,
                pagination: false,
                //交替出现背景
                striped : true,
                showFooter: true,
                columns:[[
                    { field: 'Id',35,align:"center",hidden:true},
                    { field: 'op',align:"center", 35,
                        formatter:function(value,rec,index) {
                            return '<img title="删除" src="/js/easyui/themes/icons/edit_remove.png" style="cursor: pointer;"/>';
                        }
                    },
                    { title: '商品类型',field: 'MType',editor:'validatebox',80},
               /*     { title: '仓库名称', field: 'BomId', editor:'validatebox',  90,
                        formatter: function (value, row, index) {
                            return row.BomName;
                        },
                        editor: {
                            type: 'combobox',
                            options: {
                                valueField: 'id',
                                textField: 'bomName',
                                method: 'get',
                                hasDownArrow: false,
                                url: '/bom/findBomByUserId?UBType=UserBom&UBKeyId='+kid,
                                onSelect:function(rec){
                                    var bomId = rec.id;
                                    body =$("#bomHeadFM .datagrid-view2 .datagrid-body");
                                    footer =$("#bomHeadFM .datagrid-view2 .datagrid-footer");
                                    input = "input[type=text]";
                                    var currentRowDom = body.find(".datagrid-row").eq(editIndex);
                                    var mId = currentRowDom.find("[field='MaterialExtendId']").find(".textbox-value").val();
                                    if(mId){
                                        var type = "select"; //type 类型:点击 click,选择 select
                                        inOutBomService.findStockNumById(bomId, mId, monthTime, currentRowDom, input, ratioBom, type);
                                    }
                                }
                            }
                        }
                    },*/
                    { title: '条码_名称(规格)(型号)(扩展信息)(单位)',field: 'MaterialExtendId',270,
                        formatter:function(value,row,index){
                            return row.MaterialName;
                        },
                        editor:{
                            type:'combogrid',
                            options:{
                                url: "/material/findBySelect",
                                idField:'Id',
                                textField:'MaterialName',
                                method:'get',
                                pagination: true,
                                mode: 'remote',
                                hasDownArrow: false,
                                panelWidth: 630, //下拉框的宽度
                                panelHeight: 380,//下拉框的高度
                                columns:[[
                                    {field:'mBarCode',title:'条码',120},
                                    {field:'name',title:'名称',140},
                                    {field:'standard',title:'规格',80},
                                    {field:'model',title:'型号',80},
                                    {field:'unit',title:'单位',60},
                                    {field:'stock',title:'库存',50},
                                    {field:'expand',title:'扩展信息',80}
                                ]],
                                onBeforeLoad: function(param){
                                 /*   var edBom = $('#materialData').datagrid('getEditor', {index:editIndex,field:'BomId'});
                                    if(edBom) {
                                        param.bomId =  $(edBom.target).combobox('getValue');
                                    }*/
                                    param.mpList = mPropertyList; //商品属性
                                },
                                onLoadSuccess: function (rec) {
                                    if(rec && rec.total==1) {
                                        $(".datagrid-body [field='mBarCode']").click(); //在只有单个商品的时候自动选中
                                        var body =$("#bomHeadFM .datagrid-view2 .datagrid-body");
                                        input = "input[type=text]";
                                        var currentRowDom = body.find(".datagrid-row").eq(editIndex);
                                        currentRowDom.find("[field='OperNumber']").find(input).focus().select();
                                    }
                                },
                                onSelect:function(index, rowData){
                                    inOutBomService.materialSelect(rowData,monthTime);
                                }
                            }
                        }
                    },
                    { title: '库存',field: 'Stock',editor:'validatebox',50},
                    { title: '单位',field: 'Unit',editor:'validatebox',60},
                    { title: '数量',field: 'OperNumber',editor:'validatebox',60},
                    { title: '单价',field: 'UnitPrice',editor:'validatebox',60},
                    { title: '金额',field: 'AllPrice',editor:'validatebox',75},
                    { title: '备注',field: 'Remark',editor:'validatebox',100}
                ]],
                toolbar:[
                    {
                        id:'append',
                        text:'新增行',
                        iconCls:'icon-add',
                        handler:function() {
                            inOutBomService.append(); //新增行
                        }
                    },
                    {
                        id:'appendBom',
                        text:'新增仓库',
                        iconCls:'icon-add',
                        handler:function() {
                            inOutBomService.appendBom(); //新增仓库
                        }
                    },
                    {
                        id:'appendMaterial',
                        text:'新增商品',
                        iconCls:'icon-add',
                        handler:function() {
                            js.addTabPage(null, "商品信息", "/pages/materials/material.html");
                        }
                    }
                ],
                onLoadError:function() {
                    $.messager.alert('页面加载提示','页面加载异常,请稍后再试!','error');
                    return;
                }
            });

     接下来

    load data

    $("#materialData").datagrid('loadData',data);
    可以通过ajax请求的方式获取某单子的商品列表
       $.ajax({
                type:"get",
                url: '/bomItem/getDetailList',
                data: {
                    headerId: bomHeadID,
                    mpList: mPropertyList
                },
                dataType: "json",
                success: function (res) {
                    if(res && res.code === 200) {
                        var data = res.data;
                        var AllPrice = 0;
                        var TaxLastMoney = 0;
                        var DiscountMoney = $("#DiscountMoney").val()-0; //优惠金额
                        var DiscountLastMoney = $("#DiscountLastMoney").val()-0; //优惠后金额
                        if(type === "edit") {
                            AllPrice = TotalPrice;
                            TaxLastMoney = DiscountMoney + DiscountLastMoney;
                        }
                        var array = [];
                        array.push({
                            "AllPrice": AllPrice,
                            "TaxLastMoney": TaxLastMoney
                        });
                        data.footer = array;
                        $("#materialData").datagrid('loadData',data);
                        $("#bomHeadFM .datagrid-view2 .datagrid-footer").find("[field='op'] img").hide();
                        if(type === "add") {
                            $("#bomHeadDlg #append").click(); //新增行
                        } else if(type === "edit") {
                            for(var i=0;i<data.rows.length;i++){
                                $('#materialData').datagrid('selectRow', i).datagrid('beginEdit', i);
                                inOutBomService.autoReckon();
                            }
                        }
                    }
                },
                error:function() {
                    $.messager.alert('查询提示','查询数据后台异常,请稍后再试!','error');
                }
            });

    在新增商品的页面功能中就不需要ajax请求了,只需新增行的功能


    2: table grid窗口加工具栏
       var tableToolBar = [
                {
                    id:'addBomHead',
                    text:'增加',
                    iconCls:'icon-add',
                    handler:function() {
                        addBomHead();
                    }
                },
                {
                    id:'deleteBomHead',
                    text:'删除',
                    iconCls:'icon-remove',
                    handler:function() {
                        inOutBomService.batDeleteBomHead();
                    }
                }
            ];

    在datagrid 中加入

    $('#tableData').datagrid({
    ...........
    toolbar:tableToolBar,
    ......}

    再理一下这个组装单界面的逻辑 主页面如下

    第一步定义 tablePanel ,表的面板 ,其中包括搜索区域那部分定义, 然后初始化一个表的id 

     <table id="tableData" style="top:300px;border-bottom-color:#FFFFFF"></table>

    这个tabledata 是一个datagrid 表格 ,其初始化 在html代码的下边js初始化方法中

    下边就是tabledata 的初始化,  渲染的是一个 订单主页的表头 ,大家都知道一个订单有主订单 和子商品分两个表存储. 此页就是显示订单列表.点击查看就可以查看此订单里的商品了

     

    定义完datagrid后还需要对这个 grid 进行加载数据,  加载数据是通过ajax 方式 加载的

    上边是在html中定义的,接下来加载数据 不在这了,跑到另外一个js内咯,可能嫌弃代码在此堆着太多了吧 

    对担心数据较多加了分页功能,  -->showBomHeadDetails  这个erp 定义这个head 为主的意思,不是头, 搞得概念总是被混淆, head 一直是在表头里边见的比较多,主订单 用head 实在是绕啊

    ininPager: function () {
                var self = this;
                try {
                    var opts = $("#tableData").datagrid('options');
                    var pager = $("#tableData").datagrid('getPager');
                    pager.pagination({
                        onSelectPage:function(pageNum, pageSize) {
                            opts.pageNumber = pageNum;
                            opts.pageSize = pageSize;
                            pager.pagination('refresh', {
                                pageNumber:pageNum,
                                pageSize:pageSize
                            });
                            self.showBomHeadDetails(pageNum,pageSize);
                        }
                    });
                }
                catch (e) {
                    $.messager.alert('异常处理提示',"分页信息异常 :  " + e.name + ": " + e.message,'error');
                }
            },

    下边终于找到 ajax 请求和 $("#tableData").datagrid  load数据的地方.最终这条线算是完成了, 整个页面有这些可以显示出来了.

    //显示bomhead 主 列表
            showBomHeadDetails: function (pageNo,pageSize) {
                var materialParam = $.trim($("#searchMaterial").val());
                var beginTime = $.trim($("#searchBeginTime").val());
                var endTime = $.trim($("#searchEndTime").val());
                if(beginTime) {
                    beginTime = beginTime + ' 00:00:00';
                }
                if(endTime) {
                    endTime = endTime + ' 23:59:59';
                }
                $.ajax({
                    type: "get",
                    url: "/bomHead/list",
                    dataType: "json",
                    data: ({
                        search: JSON.stringify({
                            type: listType,
                            subType: listSubType,
                            roleType: roleType,
                            status: "",
                            number: $.trim($("#searchNumber").val()),
                            beginTime: beginTime,
                            endTime: endTime,
                            materialParam: materialParam,
                            bomIds: bomString
                        }),
                        currentPage: pageNo,
                        pageSize: pageSize
                    }),
                    success: function (res) {
                        if(res && res.code === 200){
                            if(res.data && res.data.page) {
                                $("#tableData").datagrid('loadData', res.data.page);
                            }
                        }
                    },
                    //此处添加错误处理
                    error: function () {
                        $.messager.alert('查询提示', '查询数据后台异常,请稍后再试!', 'error');
                        return;
                    }
                });
            },

    接下来就是主table 的toolbar 工具栏上的增加按钮了

     html代码部分还有一部分定义子产品列表的部分,应该是隐藏状态

    //新增窗口使用
    <div id="bomHeadDlg" class="easyui-dialog" style="padding:10px 20px;" fit="true"
         closed="true" buttons="#dlg-buttons" modal="true" cache="false" collapsible="false" closable="true">
        <form id="bomHeadFM" method="post" novalidate>
            <table width="100%" style="min-1100px;">
                <tr>
                    <td style="70px;">单据日期</td>
                    <td style="padding:5px;170px;">
                        <input type="text" name="OperTime" id="OperTime"
                               onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" class="txt Wdate radius-ui"
                               style="155px;" readonly/>
                    </td>
                    <td style="70px;">单据编号</td>
                    <td style="padding:5px">
                        <input name="Number" id="Number" class="easyui-validatebox radius-ui"
                               data-options="validType:'length[2,30]'" style="150px;" readonly/>
                    </td>
                    <td style="80px;"></td>
                    <td style="padding:5px;170px;"></td>
                    <td style="70px;"></td>
                    <td style="padding:5px"></td>
                    <td style="100px;"></td>
                </tr>
                <tr>
                    <td colspan="9">
                        <!-- 商品列表table -->
                        <table id="materialData" style="top:100px;border-bottom-color:#FFFFFF"></table>
                    </td>
                </tr>
                <tr>
                    <td colspan="9">
                        <textarea name="Remark" id="Remark" rows="2" cols="2" class="radius-ui" placeholder="暂无备注信息"
                                  style=" 100%; height:35px;"></textarea>
                    </td>
                </tr>
            </table>
        </form>
    </div>

    上边的部分就是新增按钮要调用和显示的部分

    点击按钮 ,主窗体的toolbar中定义了,然后绑定的  入口 addBomHead();

       var tableToolBar = [
                {
                    id:'addBomHead',
                    text:'增加',
                    iconCls:'icon-add',
                    handler:function() {
                        addBomHead();
                    }
                },

    巴拉巴拉初始化了很多最终 

    $('#bomHeadDlg').show().dialog('open').dialog('setTitle','<img src="/js/easyui/themes/icons/edit_add.png"/>&nbsp;增加' + addTitle);

    这个 bomHeadDlg 只是个div 的id 不是table的, 这个show 应该是说把这个div内的内容搬到一个新的窗体中,然后在初始化.我在此脑海里混淆了dialog 和grid   dialog是窗体 grid 是表单,要理智的分开

      <table id="materialData" style="top:100px;border-bottom-color:#FFFFFF"></table>
    此时代码跑到初始化那

     相似的datagrid 初始化场景

    function initTableData_material(type,TotalPrice) {
            var self = this;
            var body,footer,input; //定义表格和文本框
            var ratioBom = 1; //比例-仓库用
            var monthTime = getNowFormatMonth();
            $('#materialData').datagrid({
                height:345,
                rownumbers: false,
                //动画效果
                animate:false,
                //选中单行
                singleSelect: true,
                collapsible: false,
                pagination: false,
                //交替出现背景
                striped : true,
                showFooter: true,
                columns:[[
                    { field: 'Id',35,align:"center",hidden:true},
                    { field: 'op',align:"center", 35,
                        formatter:function(value,rec,index) {
                            return '<img title="删除" src="/js/easyui/themes/icons/edit_remove.png" style="cursor: pointer;"/>';
                        }
                    },
                    { title: '商品类型',field: 'MType',editor:'validatebox',80},
               /*     { title: '仓库名称', field: 'BomId', editor:'validatebox',  90,
                        formatter: function (value, row, index) {
                            return row.BomName;
                        },
                        editor: {
                            type: 'combobox',
                            options: {
                                valueField: 'id',
                                textField: 'bomName',
                                method: 'get',
                                hasDownArrow: false,
                                url: '/bom/findBomByUserId?UBType=UserBom&UBKeyId='+kid,
                                onSelect:function(rec){
                                    var bomId = rec.id;
                                    body =$("#bomHeadFM .datagrid-view2 .datagrid-body");
                                    footer =$("#bomHeadFM .datagrid-view2 .datagrid-footer");
                                    input = "input[type=text]";
                                    var currentRowDom = body.find(".datagrid-row").eq(editIndex);
                                    var mId = currentRowDom.find("[field='MaterialExtendId']").find(".textbox-value").val();
                                    if(mId){
                                        var type = "select"; //type 类型:点击 click,选择 select
                                        inOutBomService.findStockNumById(bomId, mId, monthTime, currentRowDom, input, ratioBom, type);
                                    }
                                }
                            }
                        }
                    },*/
                    { title: '条码_名称(规格)(型号)(扩展信息)(单位)',field: 'MaterialExtendId',270,
                        formatter:function(value,row,index){
                            return row.MaterialName;
                        },
                        editor:{
                            type:'combogrid',
                            options:{
                                url: "/material/findBySelect",
                                idField:'Id',
                                textField:'MaterialName',
                                method:'get',
                                pagination: true,
                                mode: 'remote',
                                hasDownArrow: false,
                                panelWidth: 630, //下拉框的宽度
                                panelHeight: 380,//下拉框的高度
                                columns:[[
                                    {field:'mBarCode',title:'条码',120},
                                    {field:'name',title:'名称',140},
                                    {field:'standard',title:'规格',80},
                                    {field:'model',title:'型号',80},
                                    {field:'unit',title:'单位',60},
                                    {field:'stock',title:'库存',50},
                                    {field:'expand',title:'扩展信息',80}
                                ]],
                                onBeforeLoad: function(param){
                                 /*   var edBom = $('#materialData').datagrid('getEditor', {index:editIndex,field:'BomId'});
                                    if(edBom) {
                                        param.bomId =  $(edBom.target).combobox('getValue');
                                    }*/
                                    param.mpList = mPropertyList; //商品属性
                                },
                                onLoadSuccess: function (rec) {
                                    if(rec && rec.total==1) {
                                        $(".datagrid-body [field='mBarCode']").click(); //在只有单个商品的时候自动选中
                                        var body =$("#bomHeadFM .datagrid-view2 .datagrid-body");
                                        input = "input[type=text]";
                                        var currentRowDom = body.find(".datagrid-row").eq(editIndex);
                                        currentRowDom.find("[field='OperNumber']").find(input).focus().select();
                                    }
                                },
                                onSelect:function(index, rowData){
                                    inOutBomService.materialSelect(rowData,monthTime);
                                }
                            }
                        }
                    },
                    { title: '库存',field: 'Stock',editor:'validatebox',50},
                    { title: '单位',field: 'Unit',editor:'validatebox',60},
                    { title: '数量',field: 'OperNumber',editor:'validatebox',60},
                    { title: '单价',field: 'UnitPrice',editor:'validatebox',60},
                    { title: '金额',field: 'AllPrice',editor:'validatebox',75},
                    { title: '备注',field: 'Remark',editor:'validatebox',100}
                ]],
                toolbar:[
                    {
                        id:'append',
                        text:'新增行',
                        iconCls:'icon-add',
                        handler:function() {
                            inOutBomService.append(); //新增行
                        }
                    },
                    {
                        id:'appendBom',
                        text:'新增仓库',
                        iconCls:'icon-add',
                        handler:function() {
                            inOutBomService.appendBom(); //新增仓库
                        }
                    },
                    {
                        id:'appendMaterial',
                        text:'新增商品',
                        iconCls:'icon-add',
                        handler:function() {
                            js.addTabPage(null, "商品信息", "/pages/materials/material.html");
                        }
                    }
                ],
                onLoadError:function() {
                    $.messager.alert('页面加载提示','页面加载异常,请稍后再试!','error');
                    return;
                }
            });
            $.ajax({
                type:"get",
                url: '/bomItem/getDetailList',
                data: {
                    headerId: bomHeadID,
                    mpList: mPropertyList
                },
                dataType: "json",
                success: function (res) {
                    if(res && res.code === 200) {
                        var data = res.data;
                        var AllPrice = 0;
                        var TaxLastMoney = 0;
                        var DiscountMoney = $("#DiscountMoney").val()-0; //优惠金额
                        var DiscountLastMoney = $("#DiscountLastMoney").val()-0; //优惠后金额
                        if(type === "edit") {
                            AllPrice = TotalPrice;
                            TaxLastMoney = DiscountMoney + DiscountLastMoney;
                        }
                        var array = [];
                        array.push({
                            "AllPrice": AllPrice,
                            "TaxLastMoney": TaxLastMoney
                        });
                        data.footer = array;
                        $("#materialData").datagrid('loadData',data);
                        $("#bomHeadFM .datagrid-view2 .datagrid-footer").find("[field='op'] img").hide();
                        if(type === "add") {
                            $("#bomHeadDlg #append").click(); //新增行
                        } else if(type === "edit") {
                            for(var i=0;i<data.rows.length;i++){
                                $('#materialData').datagrid('selectRow', i).datagrid('beginEdit', i);
                                inOutBomService.autoReckon();
                            }
                        }
                    }
                },
                error:function() {
                    $.messager.alert('查询提示','查询数据后台异常,请稍后再试!','error');
                }
            });
        }

    总体就这么理完了.  

    华夏erp 功能较为完善,细节功能处理的也比较多,所以代码迭代了一 堆堆,js代码在html 有定义,在单独的js里边还有,总之理清其逻辑需要跳来跳去的.需要一个循序渐进的过程.当前看来web支撑较为全面的功能,

    少不了代码的堆叠啊.

    关于erp技术交流可以加qq群:143280841

  • 相关阅读:
    公平锁和非公平锁
    读写锁StampedLock的思想
    线程工作窃取算法
    关于SQL注入的问题以及解决方法
    简单工厂模式、工厂模式和抽象工厂模式
    RestFul的无状态规则详解
    Identity Server 4 中文文档(v1.0.0) 目录
    第3章 支持和规范
    第2章 术语
    第1章 背景
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/14124116.html
Copyright © 2011-2022 走看看