Ver código fonte

定额库增加定额配合比

zeweizhong 5 anos atrás
pai
commit
07c86441ec

+ 1 - 1
modules/all_models/stdRation_ration.js

@@ -7,7 +7,7 @@ const Schema = mongoose.Schema;
 const rationGljItemSchema = new Schema({
     gljId: Number,
     consumeAmt: Number,
-    proportion: Number //配合比,暂时无需使用,默认0
+    proportion: {type: Number, default: 0} //配合比,暂时无需使用,默认0
 }, { _id: false });
 
 const rationAssItemSchema = new Schema({

+ 17 - 1
public/common_util.js

@@ -17,4 +17,20 @@ function deleteEmptyObject(arr) {
             i = i - 1;
         };
     };
-};
+};
+
+((factory) => {
+    if (typeof module !== 'undefined') {
+        module.exports = factory();
+    } else {
+        window._commonUtil = factory();
+    }
+})(() => {
+    function isEmptyVal(val) {
+        return val === null || val === undefined || val === '';
+    }
+
+    return {
+        isEmptyVal
+    };
+});

+ 1 - 0
web/maintain/ration_repository/dinge.html

@@ -647,6 +647,7 @@
         <script src="/lib/lodash/lodash.js"></script>
         <script type="text/javascript" src="/web/maintain/ration_repository/js/global.js"></script>
         <script src="/public/web/PerfectLoad.js"></script>
+        <script src="/public/common_util.js"></script>
         <!-- zTree -->
         <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
         <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>

+ 117 - 158
web/maintain/ration_repository/js/ration_glj.js

@@ -17,7 +17,8 @@ var rationGLJOprObj = {
             {headerName:"单位",headerWidth:60,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
             {headerName:"定额价",headerWidth:80, dataCode:"basePrice", dataType: "Number", formatter:"0.00",  precision: 2},
             {headerName:"定额消耗",headerWidth:80, dataCode:"consumeAmt", dataType: "Number", formatter: "0.000", precision: 3},
-            {headerName:"类型",headerWidth:70,dataCode:"gljType", dataType: "String", hAlign: "center", vAlign: "center"}
+            {headerName:"类型",headerWidth:70,dataCode:"gljType", dataType: "String", hAlign: "center", vAlign: "center"},
+            {headerName:"配合比",headerWidth:70,dataCode:"proportion", dataType: "Number", formatter:"0.00",  precision: 2}
         ],
         view:{
             comboBox:[],
@@ -75,38 +76,23 @@ var rationGLJOprObj = {
         this.sheet.bind(GC.Spread.Sheets.Events.EditEnded, this.onCellEditEnd);
     },
     bindRationGljDelOpr: function () {
-        let me = rationGLJOprObj, spreadBook = me.sheet.getParent();
+        const me = rationGLJOprObj;
+        const spreadBook = me.sheet.getParent();
         spreadBook.commandManager().register('rationGljDelete', function () {
-            let sels = me.sheet.getSelections(), lockCols = me.setting.view.lockColumns;
-            let cacheSection = me.cache["_GLJ_" + me.currentRationItem.ID], isUpdate = false;
-            if(sels.length > 0){
-                for(let sel = 0; sel < sels.length; sel++){
-                    if(sels[sel].colCount === me.setting.header.length){
-                        if(cacheSection && sels[sel].row < cacheSection.length){
-                            isUpdate = true;
-                            cacheSection.splice(sels[sel].row, sels[sel].rowCount);
-                        }
-                    }
-                    else{
-                         if(sels[sel].col !== 0 && sels[sel].col !== 5 && !(sels[sel].col === 1 && sels.col + sels[sel].colCount -1 === 3)){
-                            if(cacheSection){
-                                for(let i = sels[sel].row === -1 ? 1 : 0; i < sels[sel].rowCount; i++){
-                                    if(sels[sel].row + i < cacheSection.length){
-                                        for(let col = sels[sel].col; col <= sels[sel].col + sels[sel].colCount - 1; col++){
-                                            if(lockCols.indexOf(col) === -1){
-                                                isUpdate = true;
-                                                cacheSection[sels[sel].row + i][me.setting.header[col].dataCode] = 0;
-                                                me.sheet.setValue(sels[sel].row + i, col, 0.00);
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
+            const cacheSection = me.cache["_GLJ_" + me.currentRationItem.ID];
+            const sels = me.sheet.getSelections();
+            if (!cacheSection || !sels.length) {
+                return;
+            }
+            let isUpdate = false;
+            for (const sel of sels) {
+                const deleteRow = sel.colCount === me.setting.header.length && sel.row < cacheSection.length;
+                if (deleteRow) {
+                    isUpdate = true;
+                    cacheSection.splice(sel.row, sel.rowCount);
                 }
             }
-            if(isUpdate){
+            if (isUpdate) {
                 me.updateRationItem(function () {
                     me.sheet.getParent().focus(true);
                 });
@@ -118,155 +104,123 @@ var rationGLJOprObj = {
         spreadBook.commandManager().setShortcutKey('rationGljDelete', GC.Spread.Commands.Key.del, false, false, false, false);
     },
     onClipboardPasting: function(sender, args) {
-        var me = rationGLJOprObj;
-        let rationSection = rationOprObj.getCache();
-        let rationRow = rationOprObj.workBook.getSheet(0).getSelections()[0].row;
-        me.currentRationItem = rationRow < rationSection.length ? rationSection[rationRow] : null;
+        const me = rationGLJOprObj;
+        const rationCache = rationOprObj.getCache();
+        const rationRow = rationOprObj.workBook.getSheet(0).getSelections()[0].row;
+        me.currentRationItem = rationRow < rationCache.length ? rationCache[rationRow] : null;
         if(me.currentRationItem && typeof me.cache["_GLJ_" + me.currentRationItem.ID] === 'undefined'){
             me.cache["_GLJ_" + me.currentRationItem.ID] = [];
         }
-        if (!(args.cellRange.col === 0 || args.cellRange.col === 5) || !(me.currentRationItem)) {
+        const field = me.setting.header[args.cellRange.col].dataCode;
+        const canPasteFields = ['code', 'consumeAmt', 'proportion'];
+        if (!me.currentRationItem || !(canPasteFields.includes(field) && args.cellRange.colCount === 1)) {
             args.cancel = true;
         }
     },
     onClipboardPasted: function(e, info) {
-        var me = rationGLJOprObj, repId = pageOprObj.rationLibId;
+        const me = rationGLJOprObj;
         me.tempCacheArr = [];
-        if (repId) {
-            let gljLibId = pageOprObj.gljLibId;
-            if(gljLibId){
-                if (info.cellRange.col == 0) {
-                    let cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID];
-                    var tmpCodes = sheetCommonObj.analyzePasteData({header:[{dataCode: "code"}] }, info);
-                    var codes = [];
-                    for (var i = 0; i < tmpCodes.length; i++) {
-                        let rowIdx = info.cellRange.row + i;
-                        if(rowIdx < cacheArr.length){//更新
-                            me.tempCacheArr.push({org: cacheArr[rowIdx], newCode: tmpCodes[i].code});
-                            cacheArr.splice(rowIdx--, 1);
-                        }
-                        codes.push(tmpCodes[i].code);
-                    }
-                    me.addGljItems(codes, gljLibId, info.cellRange);
-                } else {
-                    //修改用量
-                    if(me.cache["_GLJ_" + me.currentRationItem.ID] && info.cellRange.row < me.cache["_GLJ_" + me.currentRationItem.ID].length){
-                        let tempConsumes = sheetCommonObj.analyzePasteData(me.setting, info);
-                        let maxCount = info.cellRange.row + info.cellRange.rowCount -1 > me.cache["_GLJ_" + me.currentRationItem.ID].length -1 ?
-                        me.cache["_GLJ_" + me.currentRationItem.ID].length - info.cellRange.row : info.cellRange.rowCount;
-                        for(let i = 0; i < maxCount; i++){
-                            let roundCons = scMathUtil.roundTo(tempConsumes[i].consumeAmt, -3);
-                            me.cache["_GLJ_" + me.currentRationItem.ID][info.cellRange.row + i].consumeAmt = roundCons;
-                        }
-                        me.updateRationItem(function () {
-                            me.sheet.getParent().focus(true);
-                        });
-                        if(info.cellRange.row + info.cellRange.rowCount -1 >= me.cache["_GLJ_" + me.currentRationItem.ID].length -1){
-                            me.sheet.suspendPaint();
-                            for(let rowIdx = me.cache["_GLJ_" + me.currentRationItem.ID].length; rowIdx <= info.cellRange.row + info.cellRange.rowCount -1; rowIdx++){
-                                me.sheet.setValue(rowIdx, info.cellRange.col, '');
-                            }
-                            me.sheet.resumePaint();
-                        }
-                    }
-                    else if(info.cellRange.row >= me.cache["_GLJ_" + me.currentRationItem.ID].length){
-                        me.sheet.suspendPaint();
-                        for(let rowIdx = info.cellRange.row; rowIdx <= info.cellRange.row + info.cellRange.rowCount -1; rowIdx ++){
-                            me.sheet.setValue(rowIdx, info.cellRange.col, '');
-                        }
-                        me.sheet.resumePaint();
-                    }
+        const gljCache = me.cache["_GLJ_" + me.currentRationItem.ID];
+        const field = me.setting.header[info.cellRange.col].dataCode;
+        if (field === 'code') {
+            const pasteList = sheetCommonObj.analyzePasteData({header:[{dataCode: "code"}] }, info);
+            const codes = [];
+            for (let i = 0; i < pasteList.length; i++) {
+                let rowIdx = info.cellRange.row + i;
+                if(rowIdx < gljCache.length){//更新
+                    me.tempCacheArr.push({org: gljCache[rowIdx], newCode: pasteList[i].code});
+                    gljCache.splice(rowIdx--, 1);
+                }
+                codes.push(pasteList[i].code);
+            }
+            me.addGljItems(codes, pageOprObj.gljLibId, info.cellRange);
+        } else if (gljCache && info.cellRange.row < gljCache.length) {
+            const pasteList = sheetCommonObj.analyzePasteData(me.setting, info);
+            const maxCount = info.cellRange.row + info.cellRange.rowCount -1 > gljCache.length -1 ?
+                gljCache.length - info.cellRange.row : info.cellRange.rowCount;
+            const precision = me.setting.header[info.cellRange.col].precision;
+            for (let i = 0; i < maxCount; i++) {
+                let roundCons = scMathUtil.roundTo(pasteList[i][field], -precision);
+                gljCache[info.cellRange.row + i][field] = roundCons;
+            }
+            me.updateRationItem(function () {
+                me.sheet.getParent().focus(true);
+            });
+            if (info.cellRange.row + info.cellRange.rowCount -1 >= gljCache.length -1) {
+                me.sheet.suspendPaint();
+                for(let rowIdx = gljCache.length; rowIdx <= info.cellRange.row + info.cellRange.rowCount -1; rowIdx++){
+                    me.sheet.setValue(rowIdx, info.cellRange.col, '');
                 }
+                me.sheet.resumePaint();
+            }
+        } else if (info.cellRange.row >= gljCache.length) {
+            me.sheet.suspendPaint();
+            for(let rowIdx = info.cellRange.row; rowIdx <= info.cellRange.row + info.cellRange.rowCount -1; rowIdx ++){
+                me.sheet.setValue(rowIdx, info.cellRange.col, '');
             }
+            me.sheet.resumePaint();
         }
     },
     onEditStarting: function (sender, args) {
-        let me = rationGLJOprObj;
-        let rationSection = rationOprObj.getCache();
-        let rationRow = rationOprObj.workBook.getSheet(0).getSelections()[0].row;
+        const me = rationGLJOprObj;
+        const rationSection = rationOprObj.getCache();
+        const rationRow = rationOprObj.workBook.getSheet(0).getSelections()[0].row;
         me.currentRationItem = rationRow < rationSection.length ? rationSection[rationRow] : null;
         if(me.currentRationItem && typeof me.cache["_GLJ_" + me.currentRationItem.ID] === 'undefined'){
             me.cache["_GLJ_" + me.currentRationItem.ID] = [];
         }
-        if(!me.currentRationItem){
-            args.cancel = true;
+        const isEmptyRation = !me.currentRationItem;
+        if (isEmptyRation) {
+            return args.cancel = true;
         }
-        else {
-            if(args.col !== 0 && args.col !== 5 || args.col === 5 && args.row >= me.cache["_GLJ_" + me.currentRationItem.ID].length){
-                args.cancel = true;
-            }
+        const canEditFields = ['code', 'consumeAmt', 'proportion'];
+        const emptyGLJCanEditFields = ['code'];
+        const isEmptyGLJ = args.row >= me.cache["_GLJ_" + me.currentRationItem.ID].length;
+        const editingField = me.setting.header[args.col].dataCode;
+        const isValidField =  isEmptyGLJ && emptyGLJCanEditFields.includes(editingField) || !isEmptyGLJ && canEditFields.includes(editingField);
+        if (!isValidField) {
+            return args.cancel = true;
         }
     },
-    onCellEditEnd: function(sender, args){
-        var me = rationGLJOprObj;
-        if(me.currentRationItem) {
-            var cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID];
-            me.tempCacheArr = [];
-            if (args.col != 0) {
-                if (args.row < cacheArr.length) {
-                    var editGlj = cacheArr[args.row];
-                    if (editGlj["consumeAmt"] != args.editingText) {
-                        let parseNum = parseFloat(args.editingText);
-                        if (isNaN(parseFloat(args.editingText))) {
-                            $('#alertModalBtn').click();
-                            $('#alertText').text("定额消耗只能输入数值!");
-                            $('#alertModalCls').click(function () {
-                                args.sheet.setValue(args.row, args.col, editGlj['consumeAmt']);
-                            });
-                            $('#alertModalCof').click(function () {
-                                args.sheet.setValue(args.row, args.col, editGlj['consumeAmt']);
-                            })
-                        }
-                        else {
-                            args.sheet.setValue(args.row, args.col, parseNum);
-                            let roundNum = scMathUtil.roundTo(parseNum, -3);
-                            editGlj["consumeAmt"] = roundNum;
-                            me.updateRationItem(function () {
-                                me.sheet.getParent().focus(true);
-                            });
-                        }
-                    }
-                }
+    onCellEditEnd: function(sender, args) {
+        const me = rationGLJOprObj;
+        me.tempCacheArr = [];
+        const cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID];
+        const editingField = me.setting.header[args.col].dataCode;
+        const trimText = args.editingText ? args.editingText.trim() : '';
+        const curGLJ = cacheArr[args.row];
+        const originText = curGLJ  && !_commonUtil.isEmptyVal(curGLJ[editingField]) ? String(curGLJ[editingField]) : '';
+        if (!trimText || trimText === originText) {
+            args.sheet.setValue(args.row, args.col, originText);
+            return;
+        }
+        if (editingField === 'code') {
+            const matchGLJ = cacheArr.find((item, index) => item.code === trimText && index !== args.row);
+            if (matchGLJ) {
+                alert("该人材机已存在!");
+                args.sheet.setValue(args.row, args.col, originText);
+                return;
+            }
+            if (args.row < cacheArr.length) { // 替换人材机
+                me.tempCacheArr.push({org: cacheArr[args.row], newCode: args.editingText.toString().trim()});
+                cacheArr.splice(args.row, 1);
+            }
+            me.addGljItems([trimText], pageOprObj.gljLibId)
+        } else {
+            const fieldName = me.setting.header[args.col].headerName;
+            if (isNaN(trimText)) {
+                $('#alertText').text(`${fieldName}只能输入数值。`);
+                $('#alertModal').modal('show');
+                args.sheet.setValue(args.row, args.col, originText);
             } else {
-                if (args.editingText && args.editingText.toString().trim().length !== 0) {
-                    let isExist = false;
-                    for (let i = 0, len = cacheArr.length; i < len; i++) {
-                        if (cacheArr[i].code === args.editingText && i !== args.row) {
-                            isExist = true;
-                            break;
-                        }
-                    }
-                    if (isExist) {
-                        alert("该人材机已存在!");
-                        args.sheet.setValue(args.row, args.col, typeof cacheArr[args.row] !== 'undefined' ? cacheArr[args.row].code + '' : '');
-                    }
-                    else {
-                        if (args.row < cacheArr.length && args.editingText !== cacheArr[args.row].code) {//更新
-                            me.tempCacheArr.push({org: cacheArr[args.row], newCode: args.editingText.toString().trim()});
-                            cacheArr.splice(args.row, 1);
-                            let gljLibID = pageOprObj.gljLibId;
-                            let codes = [];
-                            codes.push(args.editingText.toString().trim());
-                            me.addGljItems(codes, gljLibID, args);
-                        }
-                        else if (args.row >= cacheArr.length) {//新增
-                            let gljLibID = pageOprObj.gljLibId;
-                            if (gljLibID) {
-                                var codes = [];
-                                codes.push(args.editingText.toString().trim());
-                                me.addGljItems(codes, gljLibID, args);
-                            }
-                        }
-                    }
-                }
-                else {
-                    args.sheet.setValue(args.row, args.col, args.row < cacheArr.length ? cacheArr[args.row].code : '');
-                }
+                const precision = me.setting.header[args.col].precision;
+                const roundText = scMathUtil.roundTo(trimText, -precision);
+                curGLJ[editingField] = roundText;
+                me.updateRationItem(function () {
+                    me.sheet.getParent().focus(true);
+                });
             }
         }
-        else {
-            args.sheet.setValue(args.row, args.col, '');
-        }
     },
     onContextmenuOpr: function () {//右键菜单
         let me = this;
@@ -409,7 +363,7 @@ var rationGLJOprObj = {
         }
         return rst;
     },
-    addGljItems: function(codes, repId, args) {
+    addGljItems: function(codes, repId) {
         var me = this;
         $.ajax({
             type:"POST",
@@ -533,7 +487,11 @@ var rationGLJOprObj = {
         if (me.currentRationItem && me.cache["_GLJ_" + me.currentRationItem.ID]) {
             var cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID];
             for (var i = 0; i < cacheArr.length; i++) {
-                rst.push({gljId: cacheArr[i].gljId, consumeAmt: cacheArr[i].consumeAmt, proportion: 0});
+                rst.push({
+                    gljId: cacheArr[i].gljId,
+                    consumeAmt: cacheArr[i].consumeAmt,
+                    proportion: cacheArr[i].proportion
+                });
             }
         }
         return rst;
@@ -543,6 +501,7 @@ var rationGLJOprObj = {
         var rst = {};
         rst.gljId = rItem.gljId;
         rst.consumeAmt = rItem.consumeAmt;
+        rst.proportion = rItem.proportion;
         rst.code = repGlj.code;
         rst.name = repGlj.name;
         rst.specs = repGlj.specs;