abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之十一(四十七)

来源:https://www.cnblogs.com/chillsrc/archive/2020/05/06/12839212.html
-Advertisement-
Play Games

在上面文章abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之十(四十六) 的學習之後,我們已經實現了入庫單的基本功能,增加,刪除,修改。接下來,我們實現添加庫位的功能。 ...


abp(net core)+easyui+efcore實現倉儲管理系統目錄

abp(net core)+easyui+efcore實現倉儲管理系統——ABP總體介紹(一) abp(net core)+easyui+efcore實現倉儲管理系統——解決方案介紹(二) abp(net core)+easyui+efcore實現倉儲管理系統——領域層創建實體(三)  abp(net core)+easyui+efcore實現倉儲管理系統——定義倉儲並實現 (四) abp(net core)+easyui+efcore實現倉儲管理系統——創建應用服務(五) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之控制器(六) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之列表視圖(七) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之增刪改視圖(八) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之菜單與測試(九) abp(net core)+easyui+efcore實現倉儲管理系統——使用 WEBAPI實現CURD (十一)

abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI前端頁面框架 (十八)

abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI之貨物管理一 (十九) abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之一(二十七) abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之三(二十九) abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之八(三十四) abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之十(三十六) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之一(三十七) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之二(三十八) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之三存儲過程(三十九) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之四(四十) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之五(四十一) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之六(四十二) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之七(四十三) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之八(四十四)    abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之九(四十五) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之十(四十六)  

 

    在上面文章abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之十(四十六) 的學習之後,我們已經實現了入庫單的基本功能,增加,刪除,修改接下來,我們實現添加庫位的功能

 

、入庫單添加庫位信息

   入庫單的每一條明細數據,會對應一個或多個庫位。這就要求能夠對某一行的數據進行子表嵌套。在這裡通過採用easyui的datagrid-detailview.js插件創建子表格,大致的效果圖如下所示:

 

 

  1. Visual Studio 2017的“解決方案資源管理器”中,找到“ABP.TPLMS.Web.Mvc”項目的“Views/InStock”文件夾,然後滑鼠左鍵雙擊打開“Index.cshtml”文件。在“@section scripts{”節中添加如下代碼。
  <script src="~/lib/easyui-1.8/datagrid-detailview.js" asp-append-version="true"></script>

      2. 在Visual Studio 2017的“解決方案資源管理器”中,找到表示“ABP.TPLMS.Web.Mvc”項目中的wwwroot\view-resources\InStock目錄。

       3. 在InStock目錄中找到Index.js文件。在此文件的頭部我們要定義兩個變數mainIndex與editIndex,用來定位當前我們選中了哪一行。

var editIndex = undefined;
var mainIndex = undefined;

       4. 我們在此文件中的showDetail(no)方法中找到datagrid組件,並修改此組件的onClickRow事件中的相關代碼。

onClickRow

rowIndex, rowData

當用戶點擊一行時觸發,參數包括:
rowIndex:被點擊行的索引,從 0 開始
rowData:被點擊行對應的記錄

 

 
function ShowDetail(no) {
    var lastIndex;
    $("#dgINOD").datagrid({
        url: "/InStock/GetDetail?no=" + no,
        title: "入庫單明細",
        pagination: false,     

        fit: true,
        fitColumns: false,
        loadMsg: "正在載入入庫單明細信息...",
        toolbar: [
            { text: '添加明細', iconCls: 'icon-add', handler: function () { ShowCargoInfo(); } },
            { text: '添加庫位', iconCls: 'icon-edit', handler: function () { SubGridAddRow(); } },
            { text: '刪除', iconCls: 'icon-remove', handler: function () { deviceInfoDeleteClick(); } },
            '-'

        ],

        nowarp: false,
        border: false,
        idField: "Id",
        sortName: "Id",
        sortOrder: "asc",
        singleSelect: true,
        iconCls: 'icon-edit',      

        columns: [[
            { title: "編號", field: "SeqNo", width: 50, sortable: true },
            { title: "入庫單號", field: "InStockNo", width: 100, sortable: true },
            { title: "HSCode", field: "HSCode", width: 80, sortable: false },
            { title: "貨物代碼", field: "CargoCode", width: 100, sortable: true },
            { title: "貨物名稱", field: "CargoName", width: 160, sortable: false },
            { title: "規格型號", field: "Spcf", width: 80, sortable: false },
            {
                title: "數量", field: "Qty", width: 100, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 4

                    }
                }
            },
            {
                title: "長", field: "Length", width: 70, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },
            {
                title: "寬", field: "Width", width: 70, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },
            {
                title: "高", field: "Height", width: 70, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }

            },

            { title: "產銷國", field: "Country", width: 70, align: 'center' },
            {
                title: "單價", field: "Price", width: 100, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },       

            {
                title: "總價", field: "TotalAmt", width: 100, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },

            { title: "包裝", field: "Package", width: 70, align: 'center' },
            { title: "計量單位", field: "Unit", width: 70, align: 'center' },
            {
                title: "總體積", field: "Vol", width: 70, align: 'center', editor: {
                    type: 'numberbox', options: {

                        required: true, min: 0, precision: 4
                    }
                }
            },
           { title: "品牌", field: "Brand", width: 70, align: 'center' }

        ]],
        view: detailview,

        detailFormatter: function (index, row) {
            return '<div style="padding:2px"><table id="dgINODItem-' + index + '"></table></div>';
        },

        onExpandRow: function (index, row) {
            var ddv = $('#dgINODItem-' + index);
            ddv.datagrid({
                url: '/InStock/GetLocs?Id=' + row.Id,
                fitColumns: false,

                singleSelect: true,
                rownumbers: true,

                loadMsg: '',
                height: 'auto',
                columns: [[
                    { field: 'SeqNo', title: '序號', width: 50 },
                    {
                        field: 'Qty', title: '數量', width: 120, editor: {
                            type: 'numberbox', options: {
                                required: true, min: 0, precision: 2
                            }
                        }
                    },
                    {
                        field: 'Loc', title: '庫位', width: 150, editor: {

                            type: 'text', options: {
                                required: true
                            }
                        }
                    },

                    { field: 'CreationTime', title: '創建時間', hidden: 'true' },

                    { field: 'Id', title: 'Id', width: 50, hidden: 'true' },
                    { field: 'InStockOrderDetailId', title: 'InodId', width: 50, hidden: 'true' }
                ]],

                onResize: function () {
                    $('#dgINOD').datagrid('fixDetailRowHeight', index);
                },
                onLoadSuccess: function () {
                    setTimeout(function () {
                        $('#dgINOD').datagrid('fixDetailRowHeight', index);

                    }, 0);
                    editIndex = undefined;//主網格換行
                },
                onAfterEdit: function (rowIndex, rowData, changes) {
                    editIndex = undefined;
                },

                onClickRow: function (index1, row1) {

                    if (editIndex != index1) {
                        if (endEditing(ddv)) {
                            ddv.datagrid('selectRow', index1).datagrid('beginEdit', index1);
                            editIndex = index1;

                        }
                        else { ddv.datagrid('selectRow', editIndex); }
                    }
                }
            });
            $('#dgINOD').datagrid('fixDetailRowHeight', index);
        }, 

        onClickRow: function (index, rowData) {
            if (mainIndex!=undefined) {
                $('#dgINOD').datagrid('collapseRow', mainIndex);

            }           

            if (lastIndex != index) {
                $('#dgINOD').datagrid('endEdit', lastIndex);
                editrow(index);
            }
            lastIndex = index;
            mainIndex = index;
        },       

        onBeginEdit: function (rowIndex, rowData) {  
            setEditing(rowIndex);
        }
    });
}

 

5. 除了要修改上面的函數之外,我們還需要添加一些函數方法。下麵就給出Index.js的全部代碼:

//-----------------------系統管理-->入庫單管理-----------------------//

var editIndex = undefined;
var mainIndex = undefined;
//刷新數據

function initable() {
    $("#dgINSO").datagrid({
        url: "/InStock/List",
        title: "入庫單管理",
        pagination: true,
        pageSize: 10,
        pageList: [10, 20, 30],
        fit: true,
        fitColumns: false,

        loadMsg: "正在載入入庫單信息...",

        nowarp: false,
        border: false,
        idField: "Id",
        sortName: "Id",
        sortOrder: "asc",

        frozenColumns: [[//凍結列
            { field: "ck", checkbox: true, align: "left", width: 50 }           

        ]],
        columns: [[
            { title: "編號", field: "Id", width: 50, sortable: true },
            { title: "入庫單號", field: "No", width: 100, sortable: true },           

            {title: "狀態", field: "Status", width: 50            },
            { title: '到貨日期', field: 'ReceiveTime',  width: 100, align: 'center' },
            { title: "貨主", field: "OwnerCode", width: 150, sortable: true },
            { title: "預計到貨時間", field: "PreDeliveryTime", width: 100, sortable: false },
            { title: '客戶', field: 'CustomerName', width: 120, align: 'center' },
            { title: '收貨人',field: 'Oper', width: 100, align: 'center' },
            { title: '審核人',field: 'Checker', width: 120, align: 'center' },
            { title: '件數', field: 'PackageQty', width: 100, align: 'center' },
            { title: '創建時間', field: 'CreationTime', width: 100, align: 'center' }
        ]]
    }); 

}

//顯示送貨單數據
function ShowCargo() {
    abp.log.warn('貨物信息列表日誌...');

    $("#dgCargo").datagrid({
        url: "/Cargo/List",
        title: "貨物管理管理",
        pagination: true,
        pageSize: 10,
        pageList: [10, 20, 30],

        fit: true,
        fitColumns: false,
        loadMsg: "正在載入貨物信息...",
        nowarp: false,
        border: false,

        idField: "Id",
        sortName: "Id",
        sortOrder: "asc",

        frozenColumns: [[//凍結列
            { field: "ck", checkbox: true, align: "left", width: 50 }
        ]],

        columns: [[
            { title: "編號", field: "Id", width: 50, sortable: true },
            { title: "供應商", field: "SupplierId", width: 80, sortable: true },
            { title: "HSCode", field: "HSCode", width: 100, sortable: true },

            { title: "貨物代碼", field: "CargoCode", width: 100, sortable: true },
            { title: "貨物名稱", field: "CargoName", width: 80, sortable: false },

            { title: "規格型號", field: "Spcf", width: 100, sortable: false },
            { title: "產銷國", field: "Country", width: 80, sortable: false },
            { title: "計量單位", field: "Unit", width: 100, sortable: false },
            { title: "包裝", field: "Package", width: 100, sortable: false },
            { title: "單價", field: "Price", width: 100, sortable: false },
            { title: "幣制", field: "Curr", width: 80, sortable: false },
            {
                title: "長寬高", field: "Length", width: 100, sortable: false, formatter: function (value, row, index) {
                    return row.Length + '*' + row.Width + '*' + row.Height;
                }
            },
            { title: "體積", field: "Vol", width: 80, sortable: false },
            { title: "備註", field: "Remark", width: 80, sortable: false },
            { title: '創建時間', field: 'CreationTime', width: 100, align: 'center' }

        ]]
    });

    abp.log.warn('3貨物信息列表日誌...');
} 

function ShowCargoInfo() {  
    $("#divImportCargo").dialog({
            closed: false,
            title: "選擇貨物信息",
            modal: true,
            width: 820,
            height: 550,
            collapsible: true,
            minimizable: true,
            maximizable: true,
            resizable: true
        });
       ShowCargo();
       $("#dgCargo").datagrid("clearChecked");
       $("#dgCargo").datagrid("clearSelections");
} 

function reloaded() {   //reload
    $("#reload").click(function () {
        //
        $('#dgINSO').datagrid('reload');
    });}
 

//修改點擊按鈕事件
function updInSOInfo() {  
    $("#edit").click(function () {      

        //判斷選擇的中
        var row = $("#dgINSO").datagrid('getSelected');        
        if (row) {         
            $.messager.confirm('編輯', '您想要編輯嗎?', function (r) {
                if (r) {                

                     //打開對話框編輯
                    $("#divAddUpdINO").dialog({
                        closed: false,
                        title: "修改入庫單",
                        modal: true,
                        width: 820,
                        height: 550,
                        collapsible: true,
                        minimizable: true,
                        maximizable: true,
                        resizable: true,

                    });    
                    //先綁定                  

                    showINO(row);
                    defaultTab();
                    ShowDetail(row.No);
                }               

            });

            SetEnabled(row.Status);
        } else {
            $.messager.alert('提示', ' 請選擇要編輯的行!', 'warning');
        }
    });   
}

//刪除
function deleteInSO() {
    $("#del").click(function () {
        var rows = $("#dgINSO").datagrid("getSelections");
        if (rows.length > 0) {
            $.messager.confirm("提示", "確定要刪除嗎?", function (res) {

                if (res) {
                    var codes = []; //重要不是{}
                    for (var i = 0; i < rows.length; i++) {
                        codes.push(rows[i].Id);
                    }

                    $.post("/InStock/Delete", { "ids": codes.join(',') }, function (data) {
                        if (data == "OK") {
                            $.messager.alert("提示", "刪除成功!");
                            $("#dgINSO").datagrid("clearChecked");
                            $("#dgINSO").datagrid("clearSelections");
                            $("#dgINSO").datagrid("load", {});
                        }                       
                        else if (data == "NO") {
                            $.messager.alert("提示", "刪除失敗!");

                            return;
                        }
                    });
                }
            });
        }
    })
}

//清空文本框
function clearAll() {    
    $("#divAddUpdINO input").each(function () {
            $(this).val("");

        });
    $("#PreDeliveryTimeUpdate").val(getNowFormatDate());    

    $("#StatusUpdate").val("0");
    $("#NwtUpdate").val("0"); 

    $("#GwtUpdate").val("0");
    $("#PackageQtyUpdate").val("0");
  

}

function GetNo() {
    $.get(abp.appPath + "api/services/app/InStockOrder/GetNo", function (data) {
        $("#UpdNO").val(data);
    });

}

//獲取當前時間,格式YYYY-MM-DD
function getNowFormatDate() {
    var date = new Date();
    var seperator1 = "-";
    var year = date.getFullYear();
    var month = date.getMonth() + 1;

    var strDate = date.getDate();
    if (month >= 1 && month <= 9) {
        month = "0" + month;
    }

    if (strDate >= 0 && strDate <= 9) {
        strDate = "0" + strDate;
    }

    var currentdate = year + seperator1 + month + seperator1 + strDate;
    return currentdate;
}


//將表單數據轉為json
function form2Json(id) {
    var arr = $("#" + id).serializeArray()

    var jsonStr = ""; 

    jsonStr += '{';
    for (var i = 0; i < arr.length; i++) {
        jsonStr += '"' + arr[i].name + '":"' + arr[i].value + '",'

    }
    jsonStr = jsonStr.substring(0, (jsonStr.length - 1));

    jsonStr += '}' 

    var json = JSON.parse(jsonStr)
    return json

} 

function SetEnabled(status) {
    if (status == "提交") {
        $("#btnSave").prop('disabled', true);
    }

    else {
        $("#btnSave").removeAttr("disabled");

    }
}
 

function defaultTab() {
    //預設顯示第一個tab
    $('#box').tabs('select', "入庫單");

}

//彈出 導入送貨單的的對話框

function showInSODialog() {
    $("#add").click(function () {     

            $.messager.confirm('編輯', '您想要創建入庫單嗎?', function (r) {

                if (r) {
                    //打開對話框編輯
                    $("#divAddUpdINO").dialog({
                        closed: false,
                        title: "新增入庫單",
                        modal: true,
                        width: 820,
                        height: 550,
                        collapsible: true,
                        minimizable: true,
                        maximizable: true,
                        resizable: true,

                    });                  

                }
                defaultTab();
                GetNo();
                clearAll();
                ShowDetail("");
            });       

    });  

    $("#btnSave").click(function () {    

        //保存
        var id = $("#IDUpdate").val();
        if (id == "" || id == undefined) {
            //驗證
            $.messager.confirm('確認', '您確認要保存嗎?', function (r) {
                if (r) {                   

                    var postData = GetINO();                    

                    if (postData.No == "" || postData.CustomerCode == "" || postData.CustomerName=="" || postData.OwnerName=="") {
                        $.messager.alert('提示', ' 請填寫相關必填項!', 'warning');

                        return;
                    }                   

                    $.post("/InStock/Add", postData, function (data) {
                        if (data == "OK") {
                            $.messager.alert("提示", "保存成功!");

                            initable();
                            collapseRows();
                        }

                        else if (data == "NO") {
                            $.messager.alert("提示", "保存失敗!");
                            return;

                        }

                    });
                }
            })
        }

        else {
            saveDetail();
            initable();
            collapseRows();

        }

    });
}
//添加明細
function ShowDetail(no) {
    var lastIndex;
    $("#dgINOD").datagrid({
        url: "/InStock/GetDetail?no=" + no,
        title: "入庫單明細",
        pagination: false,      
        fit: true

        fitColumns: false,
        loadMsg: "正在載入入庫單明細信息...",
        toolbar: [
            { text: '添加明細', iconCls: 'icon-add', handler: function () { ShowCargoInfo(); } },
            { text: '添加庫位', iconCls: 'icon-edit', handler: function () { SubGridAddRow(); } },
            { text: '刪除', iconCls: 'icon-remove', handler: function () { deviceInfoDeleteClick(); } },
            '-'
        ],

        nowarp: false,

        border: false,

        idField: "Id",

        sortName: "Id",

        sortOrder: "asc",
        singleSelect: true,
        iconCls: 'icon-edit',      

        columns: [[
            { title: "編號", field: "SeqNo", width: 50, sortable: true },
            { title: "入庫單號", field: "InStockNo", width: 100, sortable: true },

            { title: "HSCode", field: "HSCode", width: 80, sortable: false },
            { title: "貨物代碼", field: "CargoCode", width: 100, sortable: true },
            { title: "貨物名稱", field: "CargoName", width: 160, sortable: false },
            { title: "規格型號", field: "Spcf", width: 80, sortable: false },
            {
                title: "數量", field: "Qty", width: 100, align: 'center', editor: {
                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 4
                    }
                }
            },
            {
                title: "長", field: "Length", width: 70, align: 'center', editor: {
                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },
            {
                title: "寬", field: "Width", width: 70, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },
            {
                title: "高", field: "Height", width: 70, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },
            { title: "產銷國", field: "Country", width: 70, align: 'center' },
            {
                title: "單價", field: "Price", width: 100, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2

                    }
                }
            },       

            {
                title: "總價", field: "TotalAmt", width: 100, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 2
                    }
                }
            },
            { title: "包裝", field: "Package", width: 70, align: 'center' },
            { title: "計量單位", field: "Unit", width: 70, align: 'center' },
            {
                title: "總體積", field: "Vol", width: 70, align: 'center', editor: {

                    type: 'numberbox', options: {
                        required: true, min: 0, precision: 4

                    }
                }
            },
            { title: "品牌", field: "Brand", width: 70, align: 'center' }

        ]],

        view: detailview,

        detailFormatter: function (index, row) {
            return '<div style="padding:2px"><table id="dgINODItem-' + index + '"></table></div>';

        },

        onExpandRow: function (index, row) {
            var ddv = $('#dgINODItem-' + index);
            ddv.datagrid({
                url: '/InStock/GetLocs?Id=' + row.Id,
                fitColumns: false,
                singleSelect: true,
                rownumbers: true,
                loadMsg: '',
                height: 'auto',
                columns: [[                   //[{"InStockOrderDetailId":24,"SeqNo":1,"Loc":"A121","Qty":121.00,"CreationTime":"2020-02-17 16:37:05","Id":1}]
                    { field: 'SeqNo', title: '序號', width: 50 },
                    {
                        field: 'Qty', title: '數量', width: 120, editor: {
                            type: 'numberbox', options: {
                                required: true, min: 0, precision: 2
                            }
                        }
                    },
                    {
                        field: 'Loc', title: '庫位', width: 150, editor: {
                            type: 'text', options: {
                                required: true
                            }
                        }
                    },

                    { field: 'CreationTime', title: '創建時間', hidden: 'true' }, 

                    { field: 'Id', title: 'Id', width: 50, hidden: 'true' },
                    { field: 'InStockOrderDetailId', title: 'InodId', width: 50, hidden: 'true' }
                ]],

                onResize: function () {
                    $('#dgINOD').datagrid('fixDetailRowHeight', index);
                },

                onLoadSuccess: function () {
                    setTimeout(function () {
                        $('#dgINOD').datagrid('fixDetailRowHeight', index);

                    }, 0);
                    editIndex = undefined;//主網格換行
                },
                onAfterEdit: function (rowIndex, rowData, changes) {

                    editIndex = undefined;
                },

                onClickRow: function (index1, row1) {
                    if (editIndex != index1) {
                        if (endEditing(ddv)) {
                       ddv.datagrid('selectRow', index1).datagrid('beginEdit', index1);
                            editIndex = index1;

                        }
                        else { ddv.datagrid('selectRow', editIndex); }

                    }
                }
            });
            $('#dgINOD').datagrid('fixDetailRowHeight', index);

        },

        onClickRow: function (index, rowData) {
            if (mainIndex!=undefined) {
                $('#dgINOD').datagrid('collapseRow', mainIndex);

            }          

            if (lastIndex != index) {
                $('#dgINOD').datagrid('endEdit', lastIndex);
                editrow(index);
            }

            lastIndex = index;
            mainIndex = index;
        },        

        onBeginEdit: function (rowIndex, rowData) { 
            setEditing(rowIndex);
        }
    });
}

//計算報價小計

function setEditing(rowIndex) {
    var editors = $('#dgINOD').datagrid('getEditors', rowIndex);
    var priceEditor = editors[4];
    var qtyEditor = editors[0];
    var lengthEditor = editors[1];
    var widthEditor = editors[2];
    var heightEditor = editors[3];
    var totalVolEditor = editors[6];

    var totalAmtEditor = editors[5];
    priceEditor.target.numberbox({
        onChange: function () { calculate();}

    });

    qtyEditor.target.numberbox({
        onChange: function () {
            calculate();
            calculateVol();
        }

    });

    lengthEditor.target.numberbox({
        onChange: function () { calculateVol(); }
    });

    widthEditor.target.numberbox({
        onChange: function () { calculateVol(); }

    });

    heightEditor.target.numberbox({
        onChange: function () { calculateVol(); }
    });

    function calculate() {
        var cost = (priceEditor.target.val()) * (qtyEditor.target.val());

        console.log(cost);
        totalAmtEditor.target.numberbox("setValue", cost);
    }

    function calculateVol() {
        var vol = (lengthEditor.target.val() / 100.0) * (widthEditor.target.val() / 100.0) * (heightEditor.target.val() / 100.0)*
(qtyEditor.target.val()); console.log(vol); totalVolEditor.target.numberbox("setValue", vol); } } function editrow(index) { $('#dgINOD').datagrid('selectRow', index) .datagrid('beginEdit', index); } function endEdit() { var rows = $('#dgINOD').datagrid('getRows'); if (rows==undefined) { return; } for (var i = 0; i < rows.length; i++) { $('#dgINOD').datagrid('endEdit', i); } } //
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 隨著互聯網時代的到來,人們更加傾向於互聯網購物。某寶又是電商行業的巨頭,在某寶平臺中有很多商家數據。 今天帶大家使用python+selenium工具獲取這些公開的 適合人群: Python零基礎、對爬蟲數據採集感興趣的同學! 環境介紹: python 3.6pycharmseleniumti ...
  • 之前在博客上分享過一篇文章,涉及到 Java 中的註釋,就信誓旦旦地寫了一句話:“註釋是不會被執行的!”結果,有小伙伴留言說,“老師,你確定嗎?” 我這個人一直有個優點,就是能聽得進去別人的聲音,管你是贊美的還是批評的,從來都是虛心接受。因為我相信,大多數小伙伴都是出於善的目的。 況且,我在技術上從 ...
  • phpstorm2020新版激活方法,怎麼獲取?網上找了好多,都過時了,不能用,最終找到一個好的方法,不斷一更新,歡迎收藏! phpstorm2020最新版激活方法 永久更新,每隔一段時間更新新版的激活碼,歡迎索取,只提供學習。索取方法,關註公眾號:雲碼素材,回覆phpstorm. ...
  • 不可變類的意思是創建該類的實例後,該實例的實例變數是不可改變的。Java提供的8個包裝類和String類都是不可變類。因此String和8個包裝類都具有不可變性。 就拿String類來說,通過閱讀String類的源碼我們可以發現其實整個String類是被final所修飾,而其用來存儲值的底層實際上是 ...
  • 作者:小書go https://blog.csdn.net/qzcsu/article/details/72861891 背景描述 我們知道網路層,可以實現兩個主機之間的通信。但是這並不具體,因為,真正進行通信的實體是在主機中的進程,是一個主機中的一個進程與另外一個主機中的一個進程在交換數據。IP協 ...
  • 概述 性能優化一向是後端服務優化的重點,但是線上性能故障問題不是經常出現,或者受限於業務產品,根本就沒辦法出現性能問題,包括筆者自己遇到的性能問題也不多,所以為了提前儲備知識,當出現問題的時候不會手忙腳亂,我們本篇文章來模擬下常見的幾個Java性能故障,來學習怎麼去分析和定位。 另外要註意:光理論是 ...
  • 1、數據結構的歷史背景及現狀,有沒有必要學習數據結構 在電腦發展的初期,人們使用電腦的目的主要是處理數值計算問題。當我們使用電腦來解決一個具體問題時,一般需要經過下列幾個步驟:首先要從該具體問題抽象出一個適當的數學模型,然後設計或選擇一個解此數學模型的演算法,最後編出程式進行調試、測試,直至得到 ...
  • 隨著 .NET 5 發佈日期的日益臨近,其對應的 C# 新版本已確定為 C# 9.0,其中新增加的特性(或語法糖)也已基本鎖定,本系列文章將向大家展示它們。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...