浏览代码

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionOperation

TonyKang 7 年之前
父节点
当前提交
c60f2fe6ba

+ 2 - 0
public/web/sheet/sheet_common.js

@@ -13,6 +13,7 @@ var sheetCommonObj = {
         //spreadBook.options.showHorizontalScrollbar = false;
         spreadBook.options.allowUserDragDrop = false;
         spreadBook.options.scrollbarMaxAlign = true;
+        spreadBook.options.allowContextMenu = false;
         spreadBook.options.allowUndo = false;
         spreadBook.options.cutCopyIndicatorVisible = false;
         return spreadBook;
@@ -49,6 +50,7 @@ var sheetCommonObj = {
         spreadBook.options.allowExtendPasteRange = true;
         spreadBook.options.allowUserDragDrop = false;
         spreadBook.options.allowUndo = false;
+        spreadBook.options.allowContextMenu = false;
         var spreadNS = GC.Spread.Sheets;
         var sheet = spreadBook.getSheet(0);
         sheet.suspendPaint();

+ 1 - 0
public/web/tree_sheet/tree_sheet_helper.js

@@ -30,6 +30,7 @@ var TREE_SHEET_HELPER = {
         spread.options.cutCopyIndicatorVisible = false;
         spread.options.allowCopyPasteExcelStyle = false;
         spread.options.allowUserDragDrop = false;
+        spread.options.allowContextMenu = false;
         spread.getActiveSheet().setRowCount(3);
         return spread;
     },

文件差异内容过多而无法显示
+ 2 - 2
web/maintain/bills_lib/html/neirong.html


文件差异内容过多而无法显示
+ 2 - 2
web/maintain/bills_lib/html/qingdan.html


文件差异内容过多而无法显示
+ 2 - 2
web/maintain/bills_lib/html/tezheng.html


+ 1 - 0
web/maintain/bills_lib/scripts/set_sheets.js

@@ -12,6 +12,7 @@ var setSheet = {
         spread.options.allowCopyPasteExcelStyle = false;
         spread.options.allowExtendPasteRange = isExtendPaste? true : false;
         spread.options.allowUserDragDrop = false;
+        spread.options.allowContextMenu = false;
         spread.getActiveSheet().options.allowCellOverflow = false;
         spread.getActiveSheet().options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;
         sheet.showRowOutline(false);

文件差异内容过多而无法显示
+ 2 - 2
web/maintain/ration_repository/anzhuang.html


文件差异内容过多而无法显示
+ 64 - 57
web/maintain/ration_repository/dinge.html


文件差异内容过多而无法显示
+ 2 - 2
web/maintain/ration_repository/fuzhu.html


文件差异内容过多而无法显示
+ 2 - 2
web/maintain/ration_repository/gongliao.html


+ 333 - 0
web/maintain/ration_repository/js/gljSelect.js

@@ -0,0 +1,333 @@
+/**
+ * Created by Zhong on 2017/8/25.
+ */
+
+let gljSelOprObj = {
+    parentNodeIds: {},
+    treeObj:null,
+    rootNode: null,//分类树根节点
+    radiosSelected: null,//allGljs, stdGljs, complementaryGljs
+    workBook: null,
+    selectedList: [],//选中的工料机
+    setting: {
+        header: [
+            {headerName:"选择", headerWidth: 40, dataCode: "select", hAlign: "center", vAlign: "center"},
+            {headerName:"编码",headerWidth:80,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"},
+            {headerName:"名称",headerWidth:120,dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center"},
+            {headerName:"规格型号",headerWidth:80,dataCode:"specs", dataType: "String", hAlign: "center", vAlign: "center"},
+            {headerName:"单位",headerWidth:80,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
+            {headerName:"单价",headerWidth:80,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"},
+            {headerName:"类型",headerWidth:80,dataCode:"gljType", dataType: "String",  hAlign: "center", vAlign: "center"}
+        ]
+    },
+    setProp: function (prop, value, gljList) {
+        for(let i = 0, len = gljList.length; i < len; i++){
+            gljList[i][prop] = value;
+        }
+    },
+    sortGlj: function(gljList) {
+        gljList.sort(function(a, b){
+            let rst = 0;
+            if (a.code > b.code) rst = 1
+            else if (a.code < b.code) rst = -1;
+            return rst;
+        });
+    },
+    switchToGljId: function (gljList) {
+        for(let glj of gljList){
+            glj.gljId = glj.ID;
+            delete glj.ID;
+        }
+    },
+    getSelGljItems: function(stdGljLibId, callback) {
+        let me = this;
+        $.ajax({
+            type:"POST",
+            url:"/stdGljRepository/api/getGljItems",
+            data:{"repositoryId": stdGljLibId},
+            dataType:"json",
+            cache:false,
+            timeout:20000,
+            success:function(result){
+                if(!result.error) {
+                    me.stdGljList = result.data;
+                    me.switchToGljId(me.stdGljList);
+                    me.sortGlj(me.stdGljList);
+                    if(callback){
+                        callback();
+                    }
+                }
+            },
+            error:function(err){
+                alert(err.responseJSON.error);
+            }
+        });
+    },
+    getGljClassTree: function (gljLibId, callback) {
+        let me = this;
+        let url = '/stdGljRepository/api/getGljTree';
+        let postData = {gljLibId: gljLibId};
+        let sucFunc = function (rstData) {
+            zTreeHelper.createTree(rstData, gljSelTreeOprObj.setting, "selGljTree", gljSelOprObj);
+            let rootNode = gljSelOprObj.treeObj.getNodes()[0];
+            if(rootNode && rootNode.isParent && rootNode.isFirstNode){
+                gljSelOprObj.rootNode = rootNode;
+            }
+            gljSelOprObj.buildSheet($('#gljSelSheet')[0]);
+            if(callback){
+                callback();
+            }
+        };
+        let errFunc = function () {
+
+        };
+        CommonAjax.post(url, postData, sucFunc, errFunc);
+    },
+    buildSheet: function (container) {
+        let me = gljSelOprObj;
+        me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
+        me.workBook.getSheet(0).setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
+        me.workBook.getSheet(0).setFormatter(-1, 1, "@", GC.Spread.Sheets.SheetArea.viewport);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, me.onCellEditStart);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
+        me.workBook.bind(GC.Spread.Sheets.Events.ButtonClicked, me.onButtonClicked);//复选框点击事件
+        me.bindBtnOpr($('#gljSelY'));
+        me.radiosChange();
+    },
+    onClipboardPasting: function (sender, args) {
+        args.cancel = true;
+    },
+    onCellEditStart: function (sender, args) {
+        args.cancel = true;
+    },
+    onButtonClicked: function (sender, args) {
+        let me = gljSelOprObj;
+        let val = args.sheet.getValue(args.row, args.col);
+        let thisGlj = me.currentCache[args.row];
+        thisGlj.isChecked = val;
+        if(args.sheet.isEditing()){
+            args.sheet.endEdit(true);
+        }
+        else{
+            //设置选中
+            if(val === true){
+                let isExist = false;
+                for(let i = 0, len = me.selectedList.length; i < len; i++){
+                    if(me.selectedList[i].gljId === thisGlj.gljId){
+                        isExist = true;
+                        break;
+                    }
+                }
+                if(!isExist){
+                    thisGlj.consumeAmt = 0;
+                    me.selectedList.push(thisGlj);
+                }
+            }
+            else if(val === false){
+                for(let i = 0, len = me.selectedList.length; i < len; i++){
+                    if(me.selectedList[i].gljId === thisGlj.gljId){
+                        me.selectedList.splice(i, 1);
+                        break;
+                    }
+                }
+            }
+        }
+    },
+    setShowGljList: function (gljList, clearChecked) {
+        //初始为所有工料机
+        let  me = this;
+        let curRationGlj = rationGLJOprObj.cache['_GLJ_' + rationGLJOprObj.currentRationItem.ID];
+        for(let i = 0; i < gljList.length; i++){
+            //去除与已添加的组成物重复的条目
+            let isExist = false;
+            for(let j = 0; j < curRationGlj.length; j++){
+                if(curRationGlj[j].gljId === gljList[i].gljId){
+                    isExist = true;
+                    break;
+                }
+            }
+            if(!isExist){
+                if(clearChecked){
+                    gljList[i].isChecked = false;
+                }
+            }
+            else {
+                gljList[i].isChecked = true;
+            }
+            me.showGljList.push(gljList[i]);
+        }
+    },
+    //初始默认radio
+    initRadio: function () {
+        let me = gljSelOprObj;
+        $('#gljSearchKeyword').val('');//恢复搜索文本
+        me.selectedList = [].concat(rationGLJOprObj.cache['_GLJ_' + rationGLJOprObj.currentRationItem.ID]);
+        //默认radio所有工料机
+        if(typeof $("input[name='glj']:checked")[0] !== 'undefined'){
+            $("input[name='glj']:checked")[0].checked = false;
+        }
+        $("input[value = 'allGljs']")[0].checked = true;
+        me.radiosSelected = 'allGljs';
+        //初始为所有工料机
+        me.showGljList = [];
+        if(me.radiosSelected === 'allGljs'){
+            me.setShowGljList(me.stdGljList, true);
+            me.sortGlj(me.showGljList);
+        }
+    },
+    filterDatasAndShow: function () {
+        let me = gljSelOprObj;
+        let val = $("input[name='glj']:checked").val();
+        me.radiosSelected = val;
+        //选择改变,数据重新筛选显示
+        me.showGljList = [];
+        if(me.radiosSelected === 'allGljs'){
+            me.setShowGljList(me.stdGljList);
+        }
+        //搜索匹配
+        let searchStr = $('#gljSearchKeyword').val();
+        if(searchStr && searchStr.trim() != ''){
+            let reg = new RegExp(searchStr);
+            me.showGljList = _.filter(me.showGljList, function (data) {
+                return reg.test(data.code) || reg.test(data.name);
+            });
+        }
+        me.sortGlj(me.showGljList);
+        //重新显示
+        me.showGljItems(me.showGljList, me.gljCurTypeId);
+        //切换radio后更新cache
+        if (me.currentOprParent = 1) {
+            if(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]){
+                me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]);
+            }
+            else{
+                me.currentCache = [];
+            }
+        } else {
+            me.currentCache = me.getCache();
+        }
+    },
+    //监听radios选择事件
+    radiosChange: function () {
+        let me = gljSelOprObj;
+        $('.glj-radio').change(function () {
+            me.filterDatasAndShow();
+        });
+    },
+
+    getParentCache: function (nodes) {
+        let me = gljSelOprObj, rst = [];
+        for(let i = 0; i < me.showGljList.length; i++){
+            if(nodes.indexOf(me.showGljList[i].gljClass) !== -1){
+                rst.push(me.showGljList[i]);
+            }
+        }
+        rst.sort(function (a, b) {
+            let rst = 0;
+            if(a.code > b.code) rst = 1;
+            else if(a.code < b.code)rst = -1;
+            return rst;
+        });
+        return rst;
+    },
+    getCache: function() {
+        let me = gljSelOprObj, rst = [];
+        for (let i = 0; i < me.showGljList.length; i++) {
+            if (me.showGljList[i].gljClass == me.gljCurTypeId) {
+                rst.push(me.showGljList[i]);
+            }
+        }
+        return rst;
+    },
+    showGljItems: function(data, type) {
+        let me = gljSelOprObj;
+        if (me.workBook) {
+            let cacheSection = [];
+            let pArr = me.parentNodeIds["_pNodeId_" + type];
+            for (let i = 0; i < data.length; i++) {
+                if (pArr && pArr.indexOf(data[i].gljClass) >= 0) {
+                    cacheSection.push(data[i]);
+                } else if (type == data[i].gljClass) {
+                    cacheSection.push(data[i]);
+                }
+            }
+            sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
+            sheetsOprObj.showDataForGljSel(me.workBook.getSheet(0), me.setting, cacheSection, rationGLJOprObj.distTypeTree);
+            me.workBook.getSheet(0).setRowCount(cacheSection.length);
+            cacheSection = null;
+        }
+    },
+    //组成物窗口按钮操作
+    bindBtnOpr: function (conf) {//确定、取消、关闭按钮
+        let me = gljSelOprObj, that = rationGLJOprObj;
+        conf.click(function () {
+            that.cache['_GLJ_' + that.currentRationItem.ID] = me.selectedList;
+            that.updateRationItem(function () {
+                that.sheet.getParent().focus();
+                sheetCommonObj.cleanData(that.sheet, that.setting, -1);
+                that.showGljItems(that.currentRationItem.ID);
+                $('#selGlj').modal('hide');
+            });
+        });
+    }
+};
+
+let gljSelTreeOprObj = {
+     setting: {
+        view: {
+            expandSpeed: "",
+            selectedMulti: false
+        },
+        edit: {
+            enable: false,
+            editNameSelectAll: true,
+            showRemoveBtn: true,
+            showRenameBtn: true,
+            removeTitle: "删除节点",
+            renameTitle: "更改名称"
+        },
+        data: {
+            keep: {
+                parent:true,
+                leaf:true
+            },
+            key: {
+                children: "items",
+                name: "Name"
+            },
+            simpleData: {
+                enable: false,
+                idKey: "ID",
+                pIdKey: "ParentID",
+                rootPId: -1
+            }
+        },
+        callback:{
+            onClick: function(event,treeId,treeNode) {
+                let me = gljSelOprObj, gljTypeId = treeNode.ID;
+                if(me.gljCurTypeId !== treeNode.ID){
+                    me.gljCurTypeId = treeNode.ID;
+                    if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
+                        me.currentOprParent = 1;
+                        me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + treeNode.ID]);
+                    } else {
+                        me.currentCache = me.getCache();
+                    }
+                }
+                me.showGljItems(me.showGljList, gljTypeId);
+            }
+        }
+    }
+};
+
+$(document).ready(function () {
+    $('#gljSearchKeyword').change(function () {
+        gljSelOprObj.filterDatasAndShow();
+    });
+    $('#gljSearchKeyword').bind('keypress', function (e) {
+        if(e.keyCode === 13){
+            $(this).blur();
+            return false;
+        }
+    });
+});

+ 48 - 1
web/maintain/ration_repository/js/ration.js

@@ -54,6 +54,7 @@ let rationOprObj = {
         let me = rationOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
         me.getRationsCodes(rationRepId);
+        me.onContextmenuOpr();
         me.rationDelOpr();
         me.setCombo(me.workBook.getSheet(0), 'dynamic');
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
@@ -160,6 +161,49 @@ let rationOprObj = {
         }
         return cacheSection;
     },
+    onContextmenuOpr: function () {//右键菜单
+        let me = this;
+        $.contextMenu({
+            selector: '#rationItemsSheet',
+            build: function($triggerElement, e){
+                //控制允许右键菜单在哪个位置出现
+                let target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.workBook);
+                let sheet = me.workBook.getSheet(0);
+                let  delDis = false;
+                let cacheSection = me.getCache();
+                let ration = cacheSection[target.row];
+                if(target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
+                    if(typeof target.row !== 'undefined'){
+                        //控制按钮是否可用
+                        sheet.setActiveCell(target.row, target.col);
+                        if(!cacheSection ||target.row >= cacheSection.length){//右键定位在有数据的行,删除键才显示可用
+                            delDis = true;
+                        }
+                        else{//有数据
+                            if(typeof target.col === 'undefined'){//定位不在表格内
+                                delDis = true;
+                            }
+                        }
+                    }
+                    else{
+                        delDis = true;
+                    }
+                    return {
+                        callback: function(){},
+                        items: {
+                            "delete": {name: "删除", disabled: delDis, icon: "fa-remove", callback: function (key, opt) {
+                                me.mixDel = 1;
+                                me.mixUpdateRequest([], [], [ration.ID]);
+                            }}
+                        }
+                    };
+                }
+                else{
+                    return false;
+                }
+            }
+        });
+    },
     rationDelOpr: function () {
         let me = rationOprObj;
         me.workBook.commandManager().register('rationDelete', function () {
@@ -259,7 +303,6 @@ let rationOprObj = {
     onCellEditStart: function(sender, args) {
         let me = rationOprObj;
         if(!me.canRations || me.setting.view.lockColumns.indexOf(args.col) !== -1){
-            console.log('enter');
             args.cancel = true;
         }
         else{
@@ -277,6 +320,10 @@ let rationOprObj = {
         }
     },
     onCellEditEnd: function(sender, args) {
+        let edV = args.sheet.getValue(args.row, args.col);
+        if(edV){
+            args.sheet.setValue(args.row, args.col, edV.toString().trim());
+        }
         let me = rationOprObj, rObj = sheetsOprObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row),
             updateArr = [], addArr = [];
         let dataCode = me.setting.header[args.col].dataCode;

+ 11 - 11
web/maintain/ration_repository/js/ration_coe.js

@@ -10,7 +10,7 @@ var rationCoeOprObj = {
     cache: {},
     setting: {
         header:[
-            {headerName:"编号",headerWidth:120,dataCode:"serialNo", dataType: "Number", hAlign: 'left'},
+            {headerName:"编号",headerWidth:120,dataCode:"serialNo", dataType: "Number", hAlign: 'center'},
             {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String", hAlign: 'left'},
             {headerName:"内容",headerWidth:300,dataCode:"content", dataType: "String", hAlign: 'left'}
         ],
@@ -32,7 +32,7 @@ var rationCoeOprObj = {
         me.sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStarting);
         me.sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
         //右键
-        me.onContextmenuOpr();
+        //me.onContextmenuOpr();
     },
 
     isDef: function (v) {
@@ -40,18 +40,18 @@ var rationCoeOprObj = {
     },
 
     onContextmenuOpr: function () {
-        let me = rationCoeOprObj;
+        let raCoe = rationCoeOprObj;
         $.contextMenu({
             selector: '#rdSpread',
             build: function($triggerElement, e){
                 //控制允许右键菜单在哪个位置出现
-                let sheet = me.sheet;
+                let sheet = raCoe.sheet;
                 let offset = $("#rdSpread").offset(),
                     x = e.pageX - offset.left,
                     y = e.pageY - offset.top;
                 let target = sheet.hitTest(x, y);
                 if(sheet.getParent().getActiveSheetIndex() === 2 && target.hitTestType === 3 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'){//在表格内
-                    let currentCache = me.isDef(me.cache["_Coe_" + me.curRation.ID])  ? me.cache["_Coe_" + me.curRation.ID] : [];
+                    let currentCache = raCoe.isDef(raCoe.cache["_Coe_" + raCoe.curRation.ID])  ? raCoe.cache["_Coe_" + raCoe.curRation.ID] : [];
                     sheet.setActiveCell(target.row, target.col);
                     //控制按钮是否可用
                     let upDis = false,
@@ -63,10 +63,10 @@ var rationCoeOprObj = {
                         refDis = true;
                     }
                     else {
-                        if(!me.isDef(currentCache[target.row - 1])){
+                        if(!raCoe.isDef(currentCache[target.row - 1])){
                             upDis = true;
                         }
-                        if(!me.isDef(currentCache[target.row + 1])){
+                        if(!raCoe.isDef(currentCache[target.row + 1])){
                             downDis = true;
                         }
                     }
@@ -74,13 +74,13 @@ var rationCoeOprObj = {
                         callback: function(){},
                         items: {
                             "upMove": {name: "上移", disabled: upDis, icon: "fa-arrow-up", callback: function (key, opt) {
-                                me.upMove(currentCache[target.row], currentCache[target.row - 1], {row: target.row - 1, col: target.col});
+                                raCoe.upMove(currentCache[target.row], currentCache[target.row - 1], {row: target.row - 1, col: target.col});
                             }},
                             "downMove": {name: "下移", disabled: downDis, icon: "fa-arrow-down", callback: function (key, opt) {
-                                me.downMove(currentCache[target.row], currentCache[target.row + 1], {row: target.row + 1, col: target.col});
+                                raCoe.downMove(currentCache[target.row], currentCache[target.row + 1], {row: target.row + 1, col: target.col});
                             }},
                             "ref": {name: "添加到本节其他定额", disabled: refDis, icon: "fa-arrow-left", callback: function (key, opt) {
-                                me.updateSectionRation(rationOprObj.currentRations["_SEC_ID_" + rationOprObj.currentSectionId], currentCache[target.row], function (updateArr) {
+                                raCoe.updateSectionRation(rationOprObj.currentRations["_SEC_ID_" + rationOprObj.currentSectionId], currentCache[target.row], function (updateArr) {
                                     for(let i = 0, len = updateArr.length; i < len; i++){
                                         let ration = updateArr[i];
                                         let rationCoeList = updateArr[i].rationCoeList;
@@ -90,7 +90,7 @@ var rationCoeOprObj = {
                                                 newNo = rationCoeList[j].no + 1;
                                             }
                                         }
-                                        let theCache = me.cache["_Coe_" + ration.ID];
+                                        let theCache = raCoe.cache["_Coe_" + ration.ID];
                                         if(theCache !== undefined && theCache !== null){
                                             let newCoe = {};
                                             for(let attr in currentCache[target.row]){

+ 115 - 28
web/maintain/ration_repository/js/ration_glj.js

@@ -15,7 +15,7 @@ var rationGLJOprObj = {
             {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String"},
             {headerName:"规格型号",headerWidth:120,dataCode:"specs", dataType: "String"},
             {headerName:"单位",headerWidth:160,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
-            {headerName:"基价单价",headerWidth:160, dataCode:"basePrice", dataType: "Number", formatter:"0.00",  precision: 2},
+            {headerName:"定额价",headerWidth:160, dataCode:"basePrice", dataType: "Number", formatter:"0.00",  precision: 2},
             {headerName:"定额消耗",headerWidth:160, dataCode:"consumeAmt", dataType: "Number", formatter: "0.000", precision: 3},
             {headerName:"类型",headerWidth:160,dataCode:"gljType", dataType: "String", hAlign: "center", vAlign: "center"}
         ],
@@ -79,13 +79,17 @@ var rationGLJOprObj = {
         var me = this;
         me.sheet = sheet;
         me.getGljDistType(function () {
-           // me.onContextmenuOpr();
-            sheetCommonObj.initSheet(me.sheet, me.setting, 30);
-            me.bindRationGljDelOpr();
-            me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
-            me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
-            me.sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStarting);
-            me.sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
+            gljSelOprObj.getGljClassTree(pageOprObj.gljLibId, function () {
+                gljSelOprObj.getSelGljItems(pageOprObj.gljLibId, function () {
+                    sheetCommonObj.initSheet(me.sheet, me.setting, 30);
+                    me.onContextmenuOpr();
+                    me.bindRationGljDelOpr();
+                    me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
+                    me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
+                    me.sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStarting);
+                    me.sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
+                });
+            });
         });
     },
     bindRationGljDelOpr: function () {
@@ -282,37 +286,120 @@ var rationGLJOprObj = {
             args.sheet.setValue(args.row, args.col, '');
         }
     },
-    onContextmenuOpr: function () {
-        let me = rationGLJOprObj;
+    onContextmenuOpr: function () {//右键菜单
+        let me = this;
+        let raCoe = rationCoeOprObj;
         $.contextMenu({
             selector: '#rdSpread',
-            build: function ($triggerElement, e) {
+            build: function($triggerElement, e){
                 //控制允许右键菜单在哪个位置出现
+                let target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.sheet.getParent());
                 let sheet = me.sheet;
-                let offset = $triggerElement.offset(),
-                    x = e.pageX - offset.left,
-                    y = e.pageY - offset.top;
-                let target = sheet.hitTest(x, y);
-                if(sheet.parent.getActiveSheetIndex() === 0 && target.hitTestType === 3 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'){
-                    let delDis = true, cacheSection;
-                    sheet.setActiveCell(target.row, target.col);
-                    if(me.currentRationItem){
-                        let cacheSection = me.cache["_GLJ_" + me.currentRationItem.ID];
-                        if(target.row < cacheSection.length){
-                            delDis = false;
+                let addDis = false, delDis = false;
+                let rationGlj = [];
+                if(me.sheet.getParent().getActiveSheetIndex() === 0 && target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
+                    //rationGlj表
+                    if(typeof target.row !== 'undefined'){
+                        //控制按钮是否可用
+                        sheet.setActiveCell(target.row, target.col);
+                        if(me.currentRationItem){
+                            rationGlj =  me.cache['_GLJ_' + me.currentRationItem.ID];
+                            if(!rationGlj ||target.row >= rationGlj.length){//右键定位在有数据的行,删除键才显示可用
+                                delDis = true;
+                            }
+                            else{//有数据
+                                if(typeof target.col === 'undefined'){//定位不在表格内
+                                    delDis = true;
+                                }
+                            }
                         }
+                        else{
+                            addDis = true;
+                            delDis = true;
+                        }
+                    }
+                    else{
+                        addDis = true;
+                        delDis = true;
                     }
                     return {
-                        callback: function(key, options) {
-                        },
+                        callback: function(){},
                         items: {
-                            "delete": {name: "删除", icon: 'fa-remove', disabled: delDis, callback: function (key, opt) {
-                                cacheSection.splice(target.row, 1);
-                                me.updateRationItem(function () {
-                                    me.sheet.getParent().focus(true);
+                            "add": {name: "添加人材机", disabled: addDis, icon: "fa-plus", callback: function (key, opt) {
+                                //默认radio所有工料机
+                                gljSelOprObj.initRadio();
+                                gljSelOprObj.gljCurTypeId = null;
+                                //默认点击树根节点
+                                if(gljSelOprObj.rootNode){
+                                    gljSelOprObj.treeObj.selectNode(gljSelOprObj.rootNode);
+                                    gljSelTreeOprObj.setting.callback.onClick(null, 'componentTree', gljSelOprObj.rootNode);
+                                }
+                                //弹出窗口
+                                $('#selGlj').modal('show');
+                            }},
+                            "delete": {name: "删除人材机", disabled: delDis, icon: "fa-remove", callback: function (key, opt) {
+                                rationGlj.splice(target.row, 1);
+                                me.updateRationItem(function(){
+                                    me.sheet.getParent().focus();
                                 });
                                 sheetCommonObj.cleanData(me.sheet, me.setting, -1);
                                 me.showGljItems(me.currentRationItem.ID);
+                            }},
+                        }
+                    };
+                }
+                //rationCoe表
+                else if(me.sheet.getParent().getActiveSheetIndex() === 2 && target.hitTestType === 3 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'){
+                    let currentCache = raCoe.isDef(raCoe.cache["_Coe_" + raCoe.curRation.ID])  ? raCoe.cache["_Coe_" + raCoe.curRation.ID] : [];
+                    sheet.setActiveCell(target.row, target.col);
+                    //控制按钮是否可用
+                    let upDis = false,
+                        downDis = false,
+                        refDis = false;
+                    if(target.row >= currentCache.length){
+                        upDis = true;
+                        downDis = true;
+                        refDis = true;
+                    }
+                    else {
+                        if(!raCoe.isDef(currentCache[target.row - 1])){
+                            upDis = true;
+                        }
+                        if(!raCoe.isDef(currentCache[target.row + 1])){
+                            downDis = true;
+                        }
+                    }
+                    return {
+                        callback: function(){},
+                        items: {
+                            "upMove": {name: "上移", disabled: upDis, icon: "fa-arrow-up", callback: function (key, opt) {
+                                raCoe.upMove(currentCache[target.row], currentCache[target.row - 1], {row: target.row - 1, col: target.col});
+                            }},
+                            "downMove": {name: "下移", disabled: downDis, icon: "fa-arrow-down", callback: function (key, opt) {
+                                raCoe.downMove(currentCache[target.row], currentCache[target.row + 1], {row: target.row + 1, col: target.col});
+                            }},
+                            "ref": {name: "添加到本节其他定额", disabled: refDis, icon: "fa-arrow-left", callback: function (key, opt) {
+                                raCoe.updateSectionRation(rationOprObj.currentRations["_SEC_ID_" + rationOprObj.currentSectionId], currentCache[target.row], function (updateArr) {
+                                    for(let i = 0, len = updateArr.length; i < len; i++){
+                                        let ration = updateArr[i];
+                                        let rationCoeList = updateArr[i].rationCoeList;
+                                        let newNo = 1;
+                                        for(let j = 0, jLen = rationCoeList.length; j < jLen; j++){
+                                            if(rationCoeList[j].no >= newNo){
+                                                newNo = rationCoeList[j].no + 1;
+                                            }
+                                        }
+                                        let theCache = raCoe.cache["_Coe_" + ration.ID];
+                                        if(theCache !== undefined && theCache !== null){
+                                            let newCoe = {};
+                                            for(let attr in currentCache[target.row]){
+                                                newCoe[attr] = currentCache[target.row][attr];
+                                            }
+                                            newCoe.no = newNo;
+                                            theCache.push(newCoe);
+                                        }
+                                    }
+                                });
                             }}
                         }
                     };

+ 1 - 0
web/maintain/ration_repository/js/section_tree.js

@@ -87,6 +87,7 @@ let sectionTreeObj = {
         },
         options: {
             tabStripVisible:  false,
+            allowContextMenu: false,
             allowCopyPasteExcelStyle : false,
             allowExtendPasteRange: false,
             allowUserDragDrop : false,

+ 53 - 0
web/maintain/ration_repository/js/sheetsOpr.js

@@ -80,6 +80,59 @@ let sheetsOprObj = {
         sheet.resumePaint();
         //me.shieldAllCells(sheet);
     },
+    showDataForGljSel: function(sheet, setting, data, distTypeTree) {
+        var me = this, ch = GC.Spread.Sheets.SheetArea.viewport;
+        sheet.suspendPaint();
+        sheet.suspendEvent();
+        let checkBoxType = new GC.Spread.Sheets.CellTypes.CheckBox();
+        if(typeof setting.owner !== 'undefined' && setting.owner === 'gljComponent'){
+            sheet.setRowCount(data.length + 5);
+        }
+        else{
+            sheet.setRowCount(typeof repositoryGljObj !== 'undefined' && repositoryGljObj.currentOprParent === 1 ? data.length : data.length + 10);
+        }
+        for (var col = 0; col < setting.header.length; col++) {
+            var hAlign = "left", vAlign = "center";
+            if (setting.header[col].hAlign) {
+                hAlign = setting.header[col].hAlign;
+            } else if (setting.header[col].dataType !== "String"){
+                hAlign = "right";
+            }
+            vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign;
+            me.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign);
+            if (setting.header[col].formatter) {
+                sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);
+            }
+            for (var row = 0; row < data.length; row++) {
+                if(setting.header[col].dataCode === 'gljType' && data[row].gljType){
+                    let distTypeVal =  distTypeTree.distTypes[distTypeTree.prefix + data[row].gljType].data.fullName;
+                    sheet.setValue(row, col, distTypeVal, ch);
+                }
+                else {
+                    sheet.setValue(row, col, data[row][setting.header[col].dataCode], ch);
+                    sheet.setTag(row, 0, data[row].ID, ch);
+                }
+                //复选框
+                if(setting.header[col].dataCode === 'isComplementary'){
+                    sheet.setCellType(row, col, checkBoxType);
+                    sheet.getCell(row, col).value(1);
+                }
+                //新增组成物表,选择复选框
+                if(setting.header[col].dataCode === 'select'){
+                    sheet.setCellType(row, col, checkBoxType)
+                    if(data[row].isChecked === true){
+                        sheet.getCell(row, col).value(1);
+                    }
+                }
+            }
+            for(let i = data.length; i < sheet.getRowCount(); i++){
+                sheet.setCellType(i, 6, null);
+            }
+        }
+        sheet.resumeEvent();
+        sheet.resumePaint();
+        //me.shieldAllCells(sheet);
+    },
     combineRowData: function(sheet, setting, row, repositoryGljObj) {
         let me = this;
         var rst = {};

文件差异内容过多而无法显示
+ 2 - 2
web/maintain/std_glj_lib/html/gongliao.html


+ 1 - 0
web/maintain/std_glj_lib/js/gljClassTree.js

@@ -48,6 +48,7 @@ let gljClassTreeObj = {
         },
         options: {
             tabStripVisible:  false,
+            allowContextMenu: false,
             allowCopyPasteExcelStyle : false,
             allowExtendPasteRange: false,
             allowUserDragDrop : false,

文件差异内容过多而无法显示
+ 2 - 2
web/users/views/layout/layout.html