소스 검색

update ration_glj

zhangweicheng 8 년 전
부모
커밋
20d11a0da6

+ 2 - 2
modules/main/controllers/project_controller.js

@@ -13,9 +13,9 @@ module.exports = {
         var data = JSON.parse(req.body.data);
         Project.save(data, function (err, message, result) {
             if (err) {
-                callback(req, res, err, message, result);
-            } else {
                 callback(req, res, err, message, null);
+            } else {
+                callback(req, res, err, message, result);
             }
         });
     },

+ 7 - 1
modules/main/models/project.js

@@ -4,6 +4,7 @@
 var billsData = require('./bills');
 var rationData = require('./ration');
 var GLJData = require('./glj');
+var ration_glj_data = require('../../ration_glj/facade/ration_glj_facade')
 let projCounter = require('./proj_counter');
 var consts = require('./project_consts');
 var projectConsts = consts.projectConst;
@@ -14,6 +15,7 @@ var moduleMap = {};
 moduleMap[projectConsts.BILLS] = billsData;
 moduleMap[projectConsts.RATION] = rationData;
 moduleMap[projectConsts.GLJ] = GLJData;
+moduleMap[projectConsts.RATION_GLJ] = ration_glj_data;
 moduleMap[projCounter.collectionName] = projCounter;
 
 var Project = function (){};
@@ -42,7 +44,11 @@ Project.prototype.save = function(datas, callback){
 
     function saveModule(data) {
         return function (cb) {
-            moduleMap[data.moduleName].save(data.user_id, data.data, cb);
+            if(data.moduleName!=undefined){
+                moduleMap[data.moduleName].save(data.user_id, data.data, cb);
+            }
+           // console.log(moduleMap[data.moduleName])
+
         }
     }
     for (var i = 0; i < me.datas.length; i++){

+ 1 - 0
modules/main/models/project_consts.js

@@ -5,6 +5,7 @@ var projectConst = {
     BILLS: 'bills',
     RATION: 'ration',
     GLJ: 'GLJ',
+    RATION_GLJ:'ration_glj',
     PROJECTGLJ: 'projectGLJ',
     GLJLIST: 'GLJList',
     UNITPRICEFILE: 'unitPriceFile',

+ 4 - 2
modules/main/models/ration.js

@@ -68,16 +68,18 @@ class rationModel extends baseModel {
                         break;
                     case commonConsts.UT_DELETE:
                         doc.updateData.deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: user_id};
-                        ration.update({projectID: doc.updateData.projectID, ID: doc.updateData.ID}, doc.updateData, cb);
+                        ration.update({projectID: doc.updateData.projectID, ID: doc.updateData.ID}, doc.updateData,{multi: true},cb);
                         break;
                 }
             }
         }
+
+        functions
+
         for (let i = 0; i < datas.length; i++){
             data = datas[i];
             functions.push(saveOne(data));
         }
-
         async.parallel(functions, callback);
     };
 

+ 256 - 0
modules/ration_glj/facade/ration_glj_facade.js

@@ -0,0 +1,256 @@
+/**
+ * Created by chen on 2017/6/29.
+ */
+
+let mongoose = require('mongoose');
+const uuidV1 = require('uuid/v1')
+let consts = require('../../main/models/project_consts')
+let commonConsts = consts.commonConst;
+let _=require("lodash");
+let ration_glj = mongoose.model('ration_glj');
+//let std_ration_lib_glj_list_model = require('../../ration_repository/models/glj_repository');
+let std_ration_lib_glj_list_model = mongoose.model('std_ration_lib_glj_list');
+let async = require("async");
+let ration = mongoose.model('ration');
+
+let operationMap={
+    'ut_create':create_ration_glj,
+    'ut_update':update_ration_glj,
+    'ut_delete':delete_ration_glj
+}
+
+
+module.exports={
+    save:save,
+    getData:getData,
+    deleteByRation:deleteByRation
+}
+
+function get_lib_glj_info(ration_glj) {
+    return function (cb) {
+        std_ration_lib_glj_list_model.findOne({'ID':ration_glj.GLJID},(err,glj)=>{
+            if(err){
+                cb(err,'')
+            }else {
+                ration_glj.name = glj.name;
+                ration_glj.code = glj.code;
+                ration_glj.unit = glj.unit;
+                ration_glj.specs = glj.specs;
+                ration_glj.basePrice = glj.basePrice;
+                ration_glj.gljDistType = glj.gljDistType;
+                cb(null,ration_glj)
+            }
+        })
+    }
+}
+
+function create_ration_glj(user_id,datas) {
+    return function (callback) {
+        let ration_glj_list=datas.ration_glj_list;
+        var tasks=[];
+        for(let i =0;i<ration_glj_list.length;i++){
+            ration_glj_list[i].ID = uuidV1();
+            tasks.push(get_lib_glj_info(ration_glj_list[i]))
+        }
+        async.parallel(tasks,(err,results)=>{
+            if(err){
+                callback(err,results)
+            }else {
+                ration_glj.insertMany(results,(err,doc)=>{
+                    if(err){
+                        callback(err,null);
+                    }else {
+                        let returndata ={
+                            updateTpye:commonConsts.UT_CREATE,
+                            moduleName:'ration_glj',
+                            data:results
+                        }
+                        callback(null,returndata)
+                    }
+                });
+            }
+        })
+    }
+
+}
+
+function update_ration_glj(user_id,datas) {
+    return function (callback) {
+        ration_glj.update(datas.query,datas.doc,(err,result)=>{
+            if(err){
+                callback(err,'');
+            }else {
+                let returndata ={
+                    moduleName:'ration_glj',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        query:datas.query,
+                        doc:datas.doc
+                    }
+                }
+                callback(null,returndata)
+            }
+
+        })
+    }
+}
+
+function delete_ration_glj(user_id,datas) {
+    return function (callback) {
+        if(datas.deleteType=="RATION"){
+            deleteByRation(datas,callback);
+        }else if(datas.deleteType=="BILL"){
+            deleteByBill(user_id,datas,callback);
+        } else{
+            deleteByID(datas,callback);
+        }
+    }
+}
+
+function deleteByRation(datas,callback) {
+    let data = datas.updateData;
+    ration_glj.deleteMany({projectID: data.projectID, rationID: data.ID},callback);
+}
+
+function deleteByBill(user_id,datas,callback) {
+    let tasks = [];
+    tasks.push(startingTask("deleteByBill"));
+    tasks.push(getRationsByBill(datas));
+    tasks.push(deleteRationsbyBill(user_id,datas));
+    tasks.push(deleteByMultiRations(datas));
+    async.waterfall(tasks,function (err,results) {
+        if(err){
+            callback(err,'');
+        }else {
+            callback(null,results);
+        }
+    })
+}
+
+
+function  deleteByID(datas,callback){
+    ration_glj.deleteOne(datas.query,(err,result)=>{
+        if(err){
+            callback(err,'');
+        }else {
+            let returndata ={
+                moduleName:'ration_glj',
+                data:{
+                    updateTpye:commonConsts.UT_DELETE,
+                    query:datas.query,
+                }
+            }
+            callback(null,returndata)
+        }
+    })
+}
+
+function startingTask(processName){
+    return function(asyncCallBack){
+        var result = {
+            processName : processName
+        };
+        asyncCallBack(null, result);
+    };
+}
+
+function  getRationsByBill(datas) {
+    return function (results,callback) {
+        ration.find({projectID:datas.updateData.projectID,billsItemID:datas.updateData.ID},function (err,rations) {
+            if(err){
+                callback(err,'')
+            }else {
+                results.rations=rations;
+                callback(null,results)
+            }
+        })
+    }
+}
+
+function deleteRationsbyBill (user_id,datas){
+    return function (results,callback) {
+       let deleteInfo ={
+            deleteInfo :{deleted: true, deleteDateTime: new Date(), deleteBy: user_id}
+        };
+        ration.update({projectID: datas.updateData.projectID, billsItemID:datas.updateData.ID},deleteInfo,{multi: true},(err,deleteresults)=>{
+            if(err){
+                callback(err,'');
+            }else {
+                callback(null,results);
+            }
+        });
+    }
+}
+
+
+function deleteByMultiRations(datas) {
+    return function (results,deleteCallBack) {
+        var delete_tasks = [];
+        var deleteOne=function (ration) {
+            return function (callback) {
+                ration_glj.deleteMany({projectID: ration.projectID, rationID: ration.ID},function (err,result) {
+                    if(err){
+                        callback(err,'');
+                    }else {
+                        callback(null,result);
+                    }
+                });
+            }
+        }
+        let rations = results.rations;
+        for(let i=0;i<rations.length;i++){
+            delete_tasks.push(deleteOne(rations[i]._doc));
+        }
+        async.parallel(delete_tasks,(err,results)=>{
+            if (err){
+                deleteCallBack(err,'')
+            }else {
+                deleteCallBack(null,results)
+            }
+        })
+    }
+}
+
+
+/*
+function  deleteByRation(doc) {
+    return function (callback){
+        ration_glj.deleteMany({projectID: doc.updateData.projectID, rationID: doc.updateData.ID},callback);
+    }
+}
+*/
+
+function save (user_id, datas, callback) {
+    let perations=[];
+    if(_.isArray(datas)){
+        for(let i=0;i<datas.length;i++){
+            perations.push(operationMap[datas[i].updateType](user_id,datas[i]));
+        }
+    }else {
+        perations.push(operationMap[datas.updateType](user_id,datas));
+    }
+    async.parallel(perations,function (err,results) {
+        if(err){
+            callback(err,'');
+        }else {
+            if(results.length==1){
+                callback(null,results[0])
+            }else {
+                callback(null,results)
+            }
+        }
+    })
+}
+
+function getData(projectID, callback) {
+    console.log("ration_glj getData function");
+    ration_glj.find({'projectID':projectID},(err,datas)=>{
+        if(err){
+            callback(1, '', null);
+        }else {
+            callback(0, consts.projectConst.RATION_GLJ, datas);
+        }
+    })
+
+
+}

+ 4 - 6
modules/ration_glj/models/ration_glj.js

@@ -4,13 +4,11 @@
 var mongoose = require('mongoose'),
     Schema = mongoose.Schema;
 
-/**
- * Schema
- */
 var ration_glj = new Schema({
-    ID: String,
+    ID:{ type:String,unique:true},
     GLJID:Number,
     projectID: Number,
+    rationID:Number,
     name:String,
     code:String,
     specs:String,
@@ -25,6 +23,6 @@ var ration_glj = new Schema({
     adjustPrice:Number,
     marketPriceAdjest:Number,
     isEstimate:Boolean
-});
+},{versionKey:false});
 
-mongoose.model('ration_glj', ration_glj);
+mongoose.model('ration_glj', ration_glj);

+ 49 - 0
modules/ration_glj/models/ration_glj_temp.js

@@ -0,0 +1,49 @@
+/**
+ * Created by chen on 2017/6/29.
+ */
+let subSchema = require("../../main/models/bills_sub_schemas");
+let deleteSchema = require('../../../public/models/delete_schema');
+
+var mongoose = require('mongoose'),
+    Schema = mongoose.Schema;
+//下面是临时代码,以后删除
+
+var gljSchema =new Schema({
+    repositoryId: Number,
+    ID:Number,
+    //以下是基于已有access库
+    code: String,
+    name: String,
+    specs: String,
+    unit: String,
+    basePrice: Number,
+    gljType: Number, //这个是UI显示上的详细分类,对应gljTypeSchema
+    gljDistType: String  //人工,材料,机械
+},{versionKey:false});
+
+mongoose.model("std_ration_lib_glj_list",gljSchema,"std_ration_lib_glj_list");
+
+let rationSchema = new Schema({
+    ID: Number,
+    projectID: Number,
+    billsItemID: Number,
+    serialNo: Number,
+    libID: Number,
+    code: String,
+    name: String,
+    maskName: String,
+    unit: String,
+    quantity: String, // Decimal
+    programID: Number,
+    adjustState: String,
+    content: String,
+    rationProjName: String,
+    comments: String,
+    // 费用字段
+    fees: [subSchema.feesSchema],
+    // 标记字段
+    flags: [subSchema.flagsSchema],
+    deleteInfo: deleteSchema
+});
+
+mongoose.model("ration", rationSchema, "ration");

+ 1 - 1
modules/ration_repository/models/glj_repository.js

@@ -31,7 +31,7 @@ var gljSchema = mongoose.Schema({
     gljDistType: String  //人工,材料,机械
 });
 var gljTypeModel = db.model("std_ration_lib_glj_type",gljTypeSchema, "std_ration_lib_glj_type");
-var gljItemModel = db.model("std_ration_lib_glj_list",gljSchema, "std_ration_lib_glj_list");
+var gljItemModel = mongoose.model("std_ration_lib_glj_list");
 var repositoryMap = require('./repository_map');
 var counter = require('../../../public/counter/counter');
 

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

@@ -92,6 +92,7 @@ var sheetCommonObj = {
         var me = this, ch = GC.Spread.Sheets.SheetArea.viewport;
         sheet.suspendPaint();
         sheet.suspendEvent();
+        sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
         for (var col = 0; col < setting.header.length; col++) {
             var hAlign = "left", vAlign = "center";
             if (setting.header[col].hAlign) {

+ 5 - 1
web/building_saas/main/js/controllers/project_controller.js

@@ -40,10 +40,13 @@ ProjectController = {
 
         var selected = project.mainTree.selected;
         var newSource = null, newNode = null;
-
+        if(selected==null){
+            return;
+        }
         if (selected.sourceType === project.Bills.getSourceType() && selected.source.children.length === 0) {
             if (std) {
                 newSource = project.Ration.insertStdRation(selected.source.getID(), null, std);
+                project.ration_glj.addRationGLJ(newSource,std);
             } else {
                 newSource = project.Ration.insertRation(selected.source.getID());
             }
@@ -51,6 +54,7 @@ ProjectController = {
         } else if (selected.sourceType === project.Ration.getSourceType()) {
             if (std) {
                 newSource = project.Ration.insertStdRation(selected.source[project.masterField.ration], selected.source, std);
+                project.ration_glj.addRationGLJ(newSource,std);
             } else {
                 newSource = project.Ration.insertRation(selected.source[project.masterField.ration], selected.source);
             }

+ 10 - 4
web/building_saas/main/js/models/bills.js

@@ -141,11 +141,17 @@ var Bills = {
         };
         bills.prototype.deleteBills = function (node) {
             var deleteData = this.tree.getDeleteData(node);
-            project.beginUpdate('deleteBills');
-            project.push(ModuleNames.bills, tools.coverseTreeUpdateData(deleteData, this.project.ID()));
-            project.endUpdate();
+            var ration_glj =projectObj.project.ration_glj;
+          //  project.beginUpdate('deleteBills');
+            //project.push(ModuleNames.bills, tools.coverseTreeUpdateData(deleteData, this.project.ID()));
+            //project.endUpdate();
+            var moudles =[ModuleNames.bills,ModuleNames.ration_glj];
+            var deleteDatas=[tools.coverseTreeUpdateData(deleteData, this.project.ID()),ration_glj.getDeleteDataByBills(deleteData)];
+           // project.ration.getDeleteDataByBill(node);
+            project.pushNow('deleteBILL', moudles, deleteDatas);
 
-            return this.tree.delete(node);
+
+           // return this.tree.delete(node);
         };
         bills.prototype.upMoveBills = function (node) {
             var upMoveData = node.getUpMoveData();

+ 2 - 1
web/building_saas/main/js/models/main_consts.js

@@ -6,5 +6,6 @@ const ModuleNames = {
     ration: 'ration',
     GLJ: 'GLJ',
     feeRate: 'feeRate',
-    projectGLJ: 'projectGLJ'
+    projectGLJ: 'projectGLJ',
+    ration_glj:'ration_glj'
 };

+ 1 - 0
web/building_saas/main/js/models/project.js

@@ -58,6 +58,7 @@ var PROJECT = {
             this.Bills = Bills.createNew(this);
             this.Ration = Ration.createNew(this);
             this.GLJ = GLJ.createNew(this);
+            this.ration_glj = ration_glj.createNew(this)
             this.FeeRate = FeeRate.createNew(this);
 
             this.masterField = {ration: 'billsItemID'};

+ 6 - 1
web/building_saas/main/js/models/ration.js

@@ -148,8 +148,13 @@ var Ration = {
             updateData.push({'updateType': 'ut_delete', 'updateData': {'ID': rationData.ID, 'projectID': this.project.ID()}});
             return updateData;
         };
+        ration.prototype.getDeleteDataByBill = function (node) {
+            console.log(node);
+        };
+
         ration.prototype.delete = function (ration) {
-            this.project.pushNow('deleteRation', [this.getSourceType()], [this.getDeleteData(ration)]);
+            var ration_glj =projectObj.project.ration_glj;
+            this.project.pushNow('deleteRation', [this.getSourceType(),ration_glj.getSourceType()], [this.getDeleteData(ration),ration_glj.getDeleteDataByRation(ration)]);
 
             this.datas.splice(this.datas.indexOf(ration), 1);
         };

+ 172 - 0
web/building_saas/main/js/models/ration_glj.js

@@ -0,0 +1,172 @@
+/**
+ * Created by Mai on 2017/4/1.
+ */
+var ration_glj = {
+    createNew: function (project) {
+        // 用户定义private方法
+        var tools = {};
+
+        // 所有通过this访问的属性,都不应在此单元外部进行写入操作
+        var ration_glj = function (proj) {
+            this.gljTree = cacheTree.createNew(this);
+           // this.project = proj;
+            this.datas = [];
+
+            var sourceType = ModuleNames.ration_glj;
+            this.getSourceType = function () {
+                return sourceType;
+            }
+            proj.registerModule(ModuleNames.ration_glj, this);
+        };
+
+        // 从后台获取数据
+        /*glj.prototype.pullData = function (){
+            this.project.pullData(
+                '/glj/getData',
+                {projectID: this.project.ID},
+                function(result){
+                    if (result.error ===0){
+                        this.loadDatas(result.data);
+                    }
+                    else {
+                        // to do: 错误处理需要细化
+                        alert(result.message);
+                    }
+                },
+                function (){}//to do: 错误处理需要细化
+            )
+        };*/
+        // prototype用于定义public方法
+        ration_glj.prototype.loadData = function (datas) {
+            this.datas = datas;
+        };
+
+        // 提交数据后返回数据处理
+        ration_glj.prototype.doAfterUpdate = function(err, data){
+            if(!err){
+                if(data.updateTpye=='ut_update'){
+                    this.refreshAfterUpdate(data);
+                }else if(data.updateTpye=='ut_delete'){
+                    this.refreshAfterDelete(data);
+                } else {
+                    this.refreshAfterSave(data);
+                }
+            }
+        };
+        ration_glj.prototype.refreshAfterSave=function(data){
+            if(projectObj.project.ration_glj.datas&&Array.isArray(projectObj.project.ration_glj.datas)){
+                projectObj.project.ration_glj.datas = projectObj.project.ration_glj.datas.concat(data);
+            }else {
+                projectObj.project.ration_glj.datas = data;
+            }
+            sheetCommonObj.showData(gljOprObj.sheet,gljOprObj.setting,data);
+            // SheetDataHelper.loadSheetData(setting, rationLibObj.sectionRationsSpread.getActiveSheet(), datas);
+        };
+        ration_glj.prototype.refreshAfterUpdate=function(data){
+            var glj_list = projectObj.project.ration_glj.datas;
+            var glj_index= _.findIndex(glj_list,(glj)=>{
+                return glj.ID==data.query.ID&&glj.projectID==data.query.projectID;
+            })
+            glj_list[glj_index].customQuantity=data.doc.customQuantity;
+            glj_list[glj_index].quantity=data.doc.quantity;
+
+            var showList = _.filter(glj_list,{'projectID':data.query.projectID,'rationID':glj_list[glj_index].rationID});
+            gljOprObj.sheetData=showList;
+           sheetCommonObj.showData(gljOprObj.sheet,gljOprObj.setting,showList);
+        };
+        ration_glj.prototype.refreshAfterDelete=function(data){
+            var glj_list = projectObj.project.ration_glj.datas;
+            _.remove(glj_list,data.query);
+            _.remove(gljOprObj.sheetData,data.query);
+            sheetCommonObj.showData(gljOprObj.sheet,gljOprObj.setting,gljOprObj.sheetData);
+        };
+        // CSL,2017.05.09
+        ration_glj.prototype.modifyQuantity = function (data, newQuantity) {
+            this.project.beginUpdate('modifyQuantity');
+            data.quantity = newQuantity;
+            data.customQuantity = newQuantity;
+            data.updateType = 'ut_update';
+            this.project.push(this.getSourceType, data);
+            this.project.endUpdate();
+        };
+
+        ration_glj.prototype.modifyPrice = function (data, newPrice) {
+            this.project.beginUpdate('modifyPrice');
+            data.price = newPrice;
+            data.updateType = 'ut_update';
+            this.project.push(this.getSourceType, data);
+            this.project.endUpdate();
+        };
+
+        ration_glj.prototype.deleteGLJ = function (data) {
+            this.project.beginUpdate('deleteGLJ');
+            data.customQuantity = 0;
+            data.quantity = 0;
+            data.rationItemQuantity = 0;
+            data.updateType = 'ut_update';
+            this.project.push(this.getSourceType, data);
+            this.project.endUpdate();
+        };
+
+        ration_glj.prototype.replaceGLJ = function (data, newGLJID) {
+            this.project.beginUpdate('replaceGLJ');
+            data.GLJID = newGLJID;
+            data.updateType = 'ut_update';
+            this.project.push(this.getSourceType, data);
+            this.project.endUpdate();
+        };
+
+        ration_glj.prototype.addRationGLJ = function (newRation,data) {
+            if(data.hasOwnProperty('rationGljList')&&data.rationGljList.length>0){
+                let criteria= {};
+                criteria.ration_glj_list = [];
+                for(let i=0;i<data.rationGljList.length;i++){
+                    let temdata = data.rationGljList[i];
+                    let newGLJ = {};
+                    newGLJ.projectID = newRation.projectID;
+                    newGLJ.GLJID = temdata.gljId;
+                    newGLJ.rationID = newRation.ID;
+                    newGLJ.rationItemQuantity= temdata.consumeAmt;
+                    newGLJ.quantity=temdata.consumeAmt;
+                    criteria.ration_glj_list.push(newGLJ)
+                }
+                criteria.updateType = 'ut_create';
+                project.pushNow('addRationGLJ',[this.getSourceType()],[criteria]);
+            }
+        };
+        ration_glj.prototype.getDeleteDataByRation=function(rationData){
+            var updateData = [];
+            updateData.push({'deleteType':'RATION','updateType': 'ut_delete', 'updateData': {'ID': rationData.ID, 'projectID': rationData.projectID}});
+            return updateData;
+        };
+        ration_glj.prototype.getDeleteDataByBills=function(datas){
+            var updateData = [];
+            datas.forEach(function (deleteData) {
+                var billData = deleteData.data;
+                updateData.push({'deleteType':'BILL','updateType': 'ut_delete', 'updateData': {'ID': billData.ID, 'projectID': billData.projectID}});
+            })
+            return updateData;
+        };
+        ration_glj.prototype.deleteByRation = function(ration){
+            var glj_list = projectObj.project.ration_glj.datas;
+            var newList =_.filter(glj_list,(glj)=>{
+               return glj.rationID!=ration.ID;
+            });
+            if(newList!=undefined){
+                projectObj.project.ration_glj.datas = newList;
+            }
+        };
+        ration_glj.prototype.updataOrdelete=function(row){
+            var updateData = [];
+            if(row.rationItemQuantity==0){
+                updateData.push({'updateType': 'ut_delete', 'query': {'ID': row.ID, 'projectID': row.projectID}});
+            }else {
+                updateData.push({'updateType': 'ut_update','query': {'ID': row.ID, 'projectID': row.projectID},'doc':{'quantity':0,'customQuantity':0}});
+            }
+            project.pushNow('addRationGLJ',[this.getSourceType()],updateData)
+        }
+
+
+        return new ration_glj(project);
+    }
+};

+ 65 - 11
web/building_saas/main/js/views/glj_view.js

@@ -6,24 +6,25 @@ var gljOprObj = {
     sheet: null,
     libID: null,
     ration: null,
+    sheetData:null,
     setting: {
         header: [
-            {headerName: "编码", headerWidth: 60, dataCode: "ID", dataType: "String", formatter: "@"},
+            {headerName: "编码", headerWidth: 60, dataCode: "code", dataType: "String", formatter: "@"},
             {headerName: "名称", headerWidth: 80, dataCode: "name", dataType: "String"},
             {headerName: "规格型号", headerWidth: 80, dataCode: "specs", dataType: "String", hAlign: "center"},
             {headerName: "单位", headerWidth: 60, dataCode: "unit", dataType: "String", hAlign: "center"},
-            {headerName: "类别", headerWidth: 50, dataCode: "gljType", dataType: "String", hAlign: "center"},
-            {headerName: "定额消耗量", headerWidth: 80, dataCode: "orgRQuantity", dataType: "String", hAlign: "right"},    // dataType: "Number", formatter: "0.00"
+            {headerName: "类别", headerWidth: 50, dataCode: "gljDistType", dataType: "String", hAlign: "center"},
+            {headerName: "定额消耗量", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "String", hAlign: "right"},    // dataType: "Number", formatter: "0.00"
             {headerName: "自定义消耗量", headerWidth: 80, dataCode: "customQuantity", dataType: "String", hAlign: "right"},
             {headerName: "消耗量", headerWidth: 80, dataCode: "quantity", dataType: "String", hAlign: "right"},
-            {headerName: "数量", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "String", hAlign: "right"},
-            {headerName: "基价单价", headerWidth: 80, dataCode: "rationPrice", dataType: "String", hAlign: "right"},
+            {headerName: "基价单价", headerWidth: 80, dataCode: "basePrice", dataType: "String", hAlign: "right"},
             {headerName: "调整基价", headerWidth: 80, dataCode: "adjustPrice", dataType: "String", hAlign: "right"},
             {headerName: "市场单价", headerWidth: 80, dataCode: "marketPrice", dataType: "String", hAlign: "right"},
-            {headerName: "市场单价调整", headerWidth: 80, dataCode: "price", dataType: "String", hAlign: "right"}
+            {headerName: "市场单价调整", headerWidth: 80, dataCode: "price", dataType: "String", hAlign: "right"},
+            {headerName: "是否暂估", headerWidth: 80, dataCode: "isEstimate", dataType: "String", hAlign: "right"}
         ],
         view: {
-            comboBox: [{row: -1, col: 2, rowCount: -1, colCount: 1}],
+            comboBox: [{row: -1, col: 12, rowCount: -1, colCount: 1}],
             lockedCells: [{row: -1, col: 3, rowCount: -1, colCount: 1}]
         }
     },
@@ -33,14 +34,14 @@ var gljOprObj = {
         me.sheet = sheet;
         sheetCommonObj.initSheet(me.sheet, me.setting, 30);
 
-        var unit = new GC.Spread.Sheets.CellTypes.ComboBox();
-        unit.items(["米","千克"]);
-        me.sheet.getRange(-1, 3, -1, 1).cellType(unit);
-
+       // var unit = new GC.Spread.Sheets.CellTypes.ComboBox();
+        //unit.items(["米","千克"]);
+       // me.sheet.getRange(-1, 3, -1, 1).cellType(unit);
         sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
         sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
         sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
         sheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
+        this.loadGLJSpreadContextMenu();
     },
 
     onClipboardPasting: function(sender, args) {
@@ -67,6 +68,59 @@ var gljOprObj = {
             if (!confirm(`确定要删除选中的 ${args.rowCount} 条辅助定额吗?`)){return; }
             // your code...
         };
+    },
+    showDataIfRationSelect:function (node) {
+        let gljList = [];
+        if(node){
+            if(this.selectedNodeId&&this.selectedNodeId==node.getID()){
+                return;
+            }else {
+                this.selectedNodeId=node.getID();
+            }
+            if(node.sourceType=="ration"){
+                let ration_glj = projectObj.project.ration_glj;
+                let ration = node.data;
+                if(ration_glj.datas&&ration_glj.datas.length>0){
+                    gljList = _.filter(ration_glj.datas,{'projectID':ration.projectID,'rationID':ration.ID})
+                }
+                sheetCommonObj.showData(this.sheet,this.setting,gljList);
+            }
+        }
+        this.selectedNodeId=null;
+        sheetCommonObj.showData(this.sheet,this.setting,gljList);
+        this.sheetData=gljList;
+    },
+    loadGLJSpreadContextMenu: function () {
+        var project =projectObj.project, spread =subSpread;
+        var selectedRow =null;
+        $.contextMenu({
+            selector: '#subSpread',
+            build: function ($trigger, e) {
+                var target = SheetDataHelper.safeRightClickSelection($trigger, e, spread);
+                selectedRow = target.row;
+                //controller.setTreeSelected(controller.tree.items[target.row]);
+                return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
+            },
+            items: {
+                "delete_glj": {
+                    name: '删除工料机',
+                    icon: 'fa-remove',
+                    disabled: function () {
+                        //var selected = project.mainTree.selected;
+                        var disable = true;
+                        if(gljOprObj.sheetData!=null&&gljOprObj.sheetData.length>0&&selectedRow<gljOprObj.sheetData.length){
+                            disable=false
+                        }
+                        return disable;
+                    },
+                    callback: function () {
+                        var deleteRow = gljOprObj.sheetData[selectedRow];
+                        projectObj.project.ration_glj.updataOrdelete(deleteRow);
+                    }
+                }
+            }
+        });
     }
+
 }
 

+ 13 - 1
web/building_saas/main/js/views/project_view.js

@@ -6,6 +6,7 @@ var projectObj = {
     project: null,
     mainSpread: null,
     mainController: null,
+    gljSpreed:null,
     checkMainSpread: function () {
         if (!this.mainSpread) {
             this.mainSpread = SheetDataHelper.createNewSpread($('#billsSpread')[0]);
@@ -23,7 +24,6 @@ var projectObj = {
         this.project.loadDatas(function (err) {
             if (!err) {
                 that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), BillsGridSetting);
-
                 that.mainController.showTreeData();
                 that.mainController.bind('refreshBaseActn', function (tree) {
                     var setButtonValid = function (valid, btn) {
@@ -40,6 +40,17 @@ var projectObj = {
                     setButtonValid(tree.selected ? true : false, $('#delete'));
                 });
 
+              /*  if(!projectObj.gljSpreed){
+                    projectObj.gljSpreed = gljView.buildSheet($("#gljSpread")[0]);
+                    that.loadGLJSpreadContextMenu();
+                }*/
+
+
+                that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, function (node) {
+                    console.log(projectObj.project);
+                    gljOprObj.showDataIfRationSelect(node);
+                });
+
                 that.loadMainSpreadContextMenu();
             }
             else {
@@ -146,6 +157,7 @@ $('#delete').click(function () {
             controller.delete();
         } else if (selected.sourceType === project.Ration.getSourceType()) {
             project.Ration.delete(selected.source);
+            project.ration_glj.deleteByRation(selected.source);
             controller.delete();
         };
     }