Explorar el Código

Merge branch 'master' into olym

olym hace 7 años
padre
commit
ba0159e42d

+ 4 - 4
modules/common/const/bills_type.js

@@ -11,13 +11,13 @@ const typeFlag = {
     //分项
     FX: 3,
     //清单    
-    BILL: 4
+    BILLS: 4
 }
 const typeFlagList = [
     {name: '大项费用', value: typeFlag.DXFY},
-    {name: '分部', value: typeFlag.DXFY},
-    {name: '分项', value: typeFlag.DXFY},
-    {name: '清单', value: typeFlag.DXFY}
+    {name: '分部', value: typeFlag.FB},
+    {name: '分项', value: typeFlag.FX},
+    {name: '清单', value: typeFlag.BILLS}
 ];
 
 export {typeFlag as default, typeFlagList as List};

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

@@ -35,7 +35,7 @@ var gljItemModel = db.model("std_ration_lib_glj_list",gljSchema, "std_ration_lib
 var repositoryMap = require('./repository_map');
 var counter = require('../../../public/counter/counter');
 let moment = require('moment');
-import {gljModel, gljClassModel} from "../../std_glj_lib/models/schemas";
+import {gljModel, gljClassModel, compleGljModel} from "../../std_glj_lib/models/schemas";
 
 var gljItemDAO = function(){};
 gljItemDAO.prototype.getGljTypes = function(gljLibID, callback){
@@ -74,6 +74,30 @@ gljItemDAO.prototype.getGljItems = function(gljIds, callback){
     })
 };
 
+gljItemDAO.prototype.getStdCompleGljItems = async function (rationGljList, callback) {
+    try{
+        let rst = [];
+        for(let i = 0, len = rationGljList.length; i < len; i++){
+            if(rationGljList[i].type !== undefined && rationGljList[i].type === 'complementary'){
+                let compleGlj = await compleGljModel.find({ID: rationGljList[i].gljId, deleteInfo: null});
+                if(compleGlj.length > 0){
+                    rst.push(compleGlj[0]);
+                }
+            }
+            else {
+                let stdGlj = await gljModel.find({ID: rationGljList[i].gljId, $or: [{deleted: null}, {deleted: false}]});
+                if(stdGlj.length > 0){
+                    rst.push(stdGlj[0]);
+                }
+            }
+        }
+        callback(0, rst);
+    }
+    catch(err){
+        callback(err, null);
+    }
+};
+
 gljItemDAO.prototype.getGljItemsByCode = function(repositoryId, codes, callback){
     gljModel.find({"repositoryId": repositoryId,"code": {"$in": codes}},function(err,data){
         if(err) callback(true, "")

+ 58 - 30
modules/ration_repository/models/ration_item.js

@@ -8,7 +8,7 @@ let counter = require('../../../public/counter/counter');
 let gljDao = require('./glj_repository');
 let rationRepositoryDao = require('./repository_map');
 const scMathUtil = require('../../../public/scMathUtil').getUtil();
-import {rationItemModel} from './schemas';
+import {rationItemModel, compleRationModel} from './schemas';
 import STDGLJListModel from '../../std_glj_lib/models/gljModel';
 
 var rationItemDAO = function(){};
@@ -209,12 +209,9 @@ function round(v,e){
     return Math.round(v*t)/t;
 }
 
+
 rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
-   // let basePrcArr = data.basePrcArr;
-       // adjGljId = data.gljId, adjBasePrice = data.basePrice, adjGljType = data.gljType,
-      //  repId = data.repId, lastOpr = data.lastOpr;
-    //
-   // let updateArr;
+
     async.each(basePrcArr, function (basePrcObj, finalCb) {
         let adjGljId = basePrcObj.gljId, adjBasePrice = basePrcObj.basePrice, adjGljType = basePrcObj.gljType;
         async.waterfall([
@@ -231,7 +228,25 @@ rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
                                     cb(err);
                                 }
                                 else{
-                                    cb(null, result);
+                                    //补充定额
+                                    compleRationModel.find({'rationGljList.gljId': adjGljId},{ID: 1, rationGljList: 1}, function (err, compleRst) {
+                                        if(err){
+                                            cb(err);
+                                        }
+                                        else {
+                                            compleRationModel.update({'rationGljList.gljId': adjGljId}, {$pull: {rationGljList: {gljId: adjGljId}}}, {multi: true}, function (err) {
+                                                if(err){
+                                                    cb(err);
+                                                }
+                                                else {
+                                                    for(let i = 0, len = compleRst.length; i < len; i++){
+                                                        compleRst[i]._doc.type = 'complementary';
+                                                    }
+                                                    cb(null, result.concat(compleRst));
+                                                }
+                                            });
+                                        }
+                                    });
                                 }
                             });
                         }
@@ -243,27 +258,26 @@ rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
                             cb(err);
                         }
                         else{
-                            cb(null, result);
+                            compleRationModel.find({'rationGljList.gljId': adjGljId}, function (err, compleRst) {
+                                if(err){
+                                    cb(err);
+                                }
+                                else {
+                                    for(let i = 0, len = compleRst.length; i < len; i++){
+                                        compleRst[i]._doc.type = 'complementary';
+                                    }
+                                    cb(null, result.concat(compleRst));
+                                }
+                            });
                         }
                     });
                 }
-               /* rationItemModel.find({'rationGljList.gljId': adjGljId}, function (err, result) {
-                    if(err){
-                        cb(err);
-                    }
-                    else{
-                        cb(null, result);
-                    }
-                });*/
             },
             function (result, cb) {
                 async.each(result, function (rationItem, ecb) {
                     let rationGljList = rationItem.rationGljList,
                         gljIds = [];
-                    rationGljList.forEach(function (rationGlj) {
-                        gljIds.push(rationGlj.gljId);
-                    });
-                    gljDao.getGljItems(gljIds, function(err, gljItems){
+                    gljDao.getStdCompleGljItems(rationGljList, function(err, gljItems){
                         if(err){
                             ecb(err);
                         }
@@ -336,16 +350,30 @@ rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
                             }
                             updatePrc.basePrice = scMathUtil.roundTo(updatePrc.labourPrice + updatePrc.materialPrice + updatePrc.machinePrice, -2);
                             //updateDataBase
-                            rationItemModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice.toString(), materialPrice: updatePrc.materialPrice.toString(),
-                                    machinePrice: updatePrc.machinePrice.toString(), basePrice: updatePrc.basePrice.toString()}},
-                                function (err, result) {
-                                    if(err){
-                                        ecb(err);
-                                    }
-                                    else {
-                                        ecb(null);
-                                    }
-                                });
+                            if(rationItem._doc.type !== undefined && rationItem._doc.type === 'complementary'){
+                                compleRationModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice.toString(), materialPrice: updatePrc.materialPrice.toString(),
+                                        machinePrice: updatePrc.machinePrice.toString(), basePrice: updatePrc.basePrice.toString()}},
+                                    function (err, result) {
+                                        if(err){
+                                            ecb(err);
+                                        }
+                                        else {
+                                            ecb(null);
+                                        }
+                                    });
+                            }
+                            else {
+                                rationItemModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice.toString(), materialPrice: updatePrc.materialPrice.toString(),
+                                        machinePrice: updatePrc.machinePrice.toString(), basePrice: updatePrc.basePrice.toString()}},
+                                    function (err, result) {
+                                        if(err){
+                                            ecb(err);
+                                        }
+                                        else {
+                                            ecb(null);
+                                        }
+                                    });
+                            }
                         }
                     });
                 }, function(err){

+ 27 - 1
modules/ration_repository/models/schemas.js

@@ -104,9 +104,35 @@ var rationItemSchema = new Schema({
     isDeleted: Boolean
 });
 
+//补充定额
+let compleRationSchema = new Schema({
+    userId: Number,
+    compilationId: String,
+    rationRepId: Number,
+    ID:Number,
+    code: String,
+    name: String,
+    unit: String,
+    labourPrice: String,
+    materialPrice: String,
+    machinePrice: String,
+    basePrice: String,
+    sectionId: Number,
+    caption: String,
+    feeType: Number,
+    jobContent: String,
+    annotation: String,
+    rationGljList: Array,
+    rationCoeList: Array,
+    rationAssList: Array,
+    deleteInfo: Schema.Types.Mixed
+}, {versionKey: false});
+
 let coeListModel = db.model("std_ration_lib_coe_list",coeListSchema, "std_ration_lib_coe_list")
 let rationRepository = db.model("std_ration_lib_map", RepositoryMapSchema, "std_ration_lib_map");
 let rationChapterTreeModel = db.model("std_ration_lib_ration_chapter_trees", rationChapterTreeSchema, "std_ration_lib_ration_chapter_trees");
 let rationItemModel = db.model("std_ration_lib_ration_items",rationItemSchema, "std_ration_lib_ration_items");
+//补充定额
+let compleRationModel = db.model('complementary_ration_items', compleRationSchema, 'complementary_ration_items');
 
-export{coeListModel, rationRepository, rationChapterTreeModel, rationItemModel};
+export{coeListModel, rationRepository, rationChapterTreeModel, rationItemModel, compleRationModel};

+ 17 - 1
modules/std_glj_lib/models/schemas.js

@@ -77,10 +77,26 @@ let gljClassTemplate = mongoose.Schema({
     deleted: Boolean
 }, {versionKey: false});
 
+//补充工料机跟用户和编办绑定
+let complementaryGljSchema = new Schema({
+    userId: Number,
+    compilationId: String,
+    ID: Number,
+    code: String,
+    name: String,
+    specs: String,
+    unit: String,
+    basePrice: String,
+    gljClass: Number,
+    gljType: Number,
+    shortName: String,
+    component: Array
+}, {versionKey: false});
 
 let gljMapModel = mongoose.model('std_glj_lib_map', gljMapSchema, 'std_glj_lib_map');
 let gljModel = mongoose.model('std_glj_lib_gljList', gljSchema, 'std_glj_lib_gljList');
 let gljClassModel = mongoose.model('std_glj_lib_gljClass', gljClassSchema, 'std_glj_lib_gljClass');
 let gljClassTemplateModel = mongoose.model('std_glj_lib_gljClassTemplate', gljClassTemplate, 'std_glj_lib_gljClassTemplate');
+let compleGljModel = mongoose.model('complementary_glj_lib', complementaryGljSchema, 'complementary_glj_lib');
 
-export {gljMapModel as default, gljModel, gljClassModel, gljClassTemplateModel};
+export {gljMapModel as default, gljModel, gljClassModel, gljClassTemplateModel, compleGljModel};

+ 2 - 1
web/maintain/ration_repository/js/ration_assist.js

@@ -23,7 +23,8 @@ var rationAssistOprObj = {
     buildSheet: function(sheet) {
         var me = this;
         me.sheet = sheet;
-        me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        //me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        me.libID = pageOprObj.rationLibId; // 不可靠,有时取不到
         if (me.libID == undefined){me.libID = getQueryString('repository')};
 
         sheetCommonObj.initSheet(me.sheet, me.setting, 30);

+ 2 - 1
web/maintain/ration_repository/js/ration_coe.js

@@ -23,7 +23,8 @@ var rationCoeOprObj = {
     buildSheet: function(sheet) {
         var me = this;
         me.sheet = sheet;
-        me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        //me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        me.libID = pageOprObj.rationLibId; // 不可靠,有时取不到
         if (me.libID == undefined){me.libID = getQueryString('repository')};
         sheetCommonObj.initSheet(me.sheet, me.setting, 30);
         me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);

+ 4 - 6
web/maintain/ration_repository/js/ration_glj.js

@@ -143,10 +143,10 @@ var rationGLJOprObj = {
         }
     },
     onClipboardPasted: function(e, info) {
-        var me = rationGLJOprObj, repId = storageUtil.getSessionCache("RationGrp","repositoryID");
+        var me = rationGLJOprObj, repId = pageOprObj.rationLibId;
         me.tempCacheArr = [];
         if (repId) {
-            let gljLibId = storageUtil.getSessionCache("gljLib", "repositoryID_" + repId);
+            let gljLibId = pageOprObj.gljLibId;
             if(gljLibId){
                 if (info.cellRange.col == 0) {
                     let cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID];
@@ -257,15 +257,13 @@ var rationGLJOprObj = {
                         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 rationRepId = storageUtil.getSessionCache("RationGrp", "repositoryID");
-                            let gljLibID = storageUtil.getSessionCache("gljLib", "repositoryID_" + rationRepId);
+                            let gljLibID = pageOprObj.gljLibId;
                             let codes = [];
                             codes.push(args.editingText.toString().trim());
                             me.addGljItems(codes, gljLibID, args);
                         }
                         else if (args.row >= cacheArr.length) {//新增
-                            let rationRepId = storageUtil.getSessionCache("RationGrp", "repositoryID");
-                            let gljLibID = storageUtil.getSessionCache("gljLib", "repositoryID_" + rationRepId);
+                            let gljLibID = pageOprObj.gljLibId;
                             if (gljLibID) {
                                 var codes = [];
                                 codes.push(args.editingText.toString().trim());

+ 6 - 5
web/maintain/report/js/cfg_const.js

@@ -473,19 +473,20 @@ let preHandleTypeSetting = {
         }
     },
     callback:{
-        onClick: preHandleObj.onTypeClick,
+        onCheck: preHandleObj.onTypeClick,
         beforeDrag: function() {return false;}
     }
 };
 
 let sortingKeysSetting = {
     view: {
-        showIcon: true,
-        expandSpeed: "",
-        selectedMulti: false
+        // showIcon: true,
+        // expandSpeed: "",
+        // selectedMulti: false,
+        addDiyDom: preHandleSortObj.addDiyDom
     },
     edit: {
-        enable: true,
+        enable: false,
         editNameSelectAll: false,
         showRemoveBtn: false,
         showRenameBtn: false

+ 168 - 74
web/maintain/report/js/rpt_tpl_pre_handle.js

@@ -6,50 +6,59 @@ const sort_types = ["normal", "tree", "accord_to_parent", "self_define"];
 const pre_handle_data_objects = ["bills", "ration", "ration_glj"];
 const pre_handle_data_objects_name = ["清单", "定额", "定额工料机"];
 const exposed_bills_properties = [
-    {Name: "清单_ID", Title: "", Key: "ID"},
-    {Name: "清单_所属项目ID", Title: "", Key: "projectID"},
-    {Name: "清单_项目编码", Title: "", Key: "code"},
-    {Name: "清单_项目名称", Title: "", Key: "name"},
-    {Name: "清单_项目特征", Title: "", Key: "itemCharacterText"},
-    {Name: "清单_计量单位", Title: "", Key: "unit"},
-    {Name: "清单_工程量", Title: "", Key: "quantity"},
-    {Name: "清单_综合单价", Title: "", Key: "unitFee"},
-    {Name: "清单_综合合价", Title: "", Key: "totalFee"},
-    {Name: "清单_暂估价", Title: "", Key: "tenderUnitFee"}
+    {Name: "清单_ID", Title: "", Key: "ID", Order: "ascend"},
+    {Name: "清单_所属项目ID", Title: "", Key: "projectID", Order: "ascend"},
+    {Name: "清单_项目编码", Title: "", Key: "code", Order: "ascend"},
+    {Name: "清单_项目名称", Title: "", Key: "name", Order: "ascend"},
+    {Name: "清单_项目特征", Title: "", Key: "itemCharacterText", Order: "ascend"},
+    {Name: "清单_计量单位", Title: "", Key: "unit", Order: "ascend"},
+    {Name: "清单_工程量", Title: "", Key: "quantity", Order: "ascend"},
+    {Name: "清单_综合单价", Title: "", Key: "unitFee", Order: "ascend"},
+    {Name: "清单_综合合价", Title: "", Key: "totalFee", Order: "ascend"},
+    {Name: "清单_暂估价", Title: "", Key: "tenderUnitFee", Order: "ascend"}
 ];
 const exposed_ration_properties = [
-    {Name: "定额_工程内部ID", Title: "", Key: "ID"},
-    {Name: "定额_所属清单ID", Title: "", Key: "billsItemID"},
-    {Name: "定额_所属项目ID", Title: "", Key: "projectID"},
-    {Name: "定额_编号", Title: "", Key: "code"},
-    {Name: "定额_项目名称", Title: "", Key: "caption"},
-    {Name: "定额_单位", Title: "", Key: "unit"},
-    {Name: "定额_数量", Title: "", Key: "quantity"},
-    {Name: "定额_人工费", Title: "", Key: "labour"},
-    {Name: "定额_材料费", Title: "", Key: "material"},
-    {Name: "定额_机械费", Title: "", Key: "machine"},
-    {Name: "定额_机上人工费", Title: "", Key: "machineLabour"},
-    {Name: "定额_人工费调整", Title: "", Key: "adjustLabour"},
-    {Name: "定额_材料费调整", Title: "", Key: "'adjustMaterial'"},
-    {Name: "定额_机械费调整", Title: "", Key: "adjustMachine"},
-    {Name: "定额_机上人工费调整", Title: "", Key: "adjustMachineLabour"},
-    {Name: "定额_人工价差", Title: "", Key: "labourDiff"},
-    {Name: "定额_材料价差", Title: "", Key: "materialDiff"},
-    {Name: "定额_机械价差", Title: "", Key: "machineDiff"},
-    {Name: "定额_风险费用", Title: "", Key: "risk"}
+    {Name: "定额_工程内部ID", Title: "", Key: "ID", Order: "ascend"},
+    {Name: "定额_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"},
+    {Name: "定额_所属项目ID", Title: "", Key: "projectID", Order: "ascend"},
+    {Name: "定额_编号", Title: "", Key: "code", Order: "ascend"},
+    {Name: "定额_项目名称", Title: "", Key: "caption", Order: "ascend"},
+    {Name: "定额_单位", Title: "", Key: "unit", Order: "ascend"},
+    {Name: "定额_数量", Title: "", Key: "quantity", Order: "ascend"},
+    {Name: "定额_人工费", Title: "", Key: "labour", Order: "ascend"},
+    {Name: "定额_材料费", Title: "", Key: "material", Order: "ascend"},
+    {Name: "定额_机械费", Title: "", Key: "machine", Order: "ascend"},
+    {Name: "定额_机上人工费", Title: "", Key: "machineLabour", Order: "ascend"},
+    {Name: "定额_人工费调整", Title: "", Key: "adjustLabour", Order: "ascend"},
+    {Name: "定额_材料费调整", Title: "", Key: "'adjustMaterial'", Order: "ascend"},
+    {Name: "定额_机械费调整", Title: "", Key: "adjustMachine", Order: "ascend"},
+    {Name: "定额_机上人工费调整", Title: "", Key: "adjustMachineLabour", Order: "ascend"},
+    {Name: "定额_人工价差", Title: "", Key: "labourDiff", Order: "ascend"},
+    {Name: "定额_材料价差", Title: "", Key: "materialDiff", Order: "ascend"},
+    {Name: "定额_机械价差", Title: "", Key: "machineDiff", Order: "ascend"},
+    {Name: "定额_风险费用", Title: "", Key: "risk", Order: "ascend"}
     // {Name: "定额_管理费率", Title: "", Key: ""}
 ];
 const exposed_prj_glj_properties = [
     {Name: "工料机_ID", Title: "", Key: "ID"},
-    {Name: "工料机_所属定额ID", Title: "", Key: "rationID"},
-    {Name: "工料机_所属清单ID", Title: "", Key: "billsItemID"},
-    {Name: "工料机_所属工程ID", Title: "", Key: "projectID"},
-    {Name: "工料机_代码", Title: "", Key: "code"},
-    {Name: "工料机_名称", Title: "", Key: "name"},
-    {Name: "工料机_单位", Title: "", Key: "unit"},
-    {Name: "工料机_数量", Title: "", Key: "quantity"}
+    {Name: "工料机_所属定额ID", Title: "", Key: "rationID", Order: "ascend"},
+    {Name: "工料机_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"},
+    {Name: "工料机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"},
+    {Name: "工料机_代码", Title: "", Key: "code", Order: "ascend"},
+    {Name: "工料机_名称", Title: "", Key: "name", Order: "ascend"},
+    {Name: "工料机_单位", Title: "", Key: "unit", Order: "ascend"},
+    {Name: "工料机_数量", Title: "", Key: "quantity", Order: "ascend"}
 ];
 const exposed_properties_arr = [exposed_bills_properties, exposed_ration_properties, exposed_prj_glj_properties];
+const IDMark_Switch = "_switch",
+    IDMark_Icon = "_ico",
+    IDMark_Span = "_span",
+    IDMark_Input = "_input",
+    IDMark_Check = "_check",
+    IDMark_Edit = "_edit",
+    IDMark_Remove = "_remove",
+    IDMark_Ul = "_ul",
+    IDMark_A = "_a";
 
 let preHandleObj = {
     treeObj: null,
@@ -101,7 +110,7 @@ let preHandleObj = {
         }
     },
     addNewNode: function() {
-        let me = this, item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": "排序", "排序方式": "normal", Operations : []};
+        let me = this, item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": "排序", "排序方式": "normal", "排序键值集":[], Operations: []};
         me.private_set_title(item);
         me.treeObj.addNodes(null, -1, [item], true);
     },
@@ -121,34 +130,14 @@ let preHandleObj = {
         } else if (src[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_ADD_DUMMY) {
             preHandleAddDummyObj.copyNode(src, dest);
         }
-
-        // if (src[JV.PROP_SORT_TYPE]) dest[JV.PROP_SORT_TYPE] = src[JV.PROP_SORT_TYPE];
-        // if (src[JV.PROP_PARENT_DATA_KEY]) dest[JV.PROP_PARENT_DATA_KEY] = src[JV.PROP_PARENT_DATA_KEY];
-        // if (src[JV.PROP_PARENT_CHILD_SORT_KEY]) dest[JV.PROP_PARENT_CHILD_SORT_KEY] = src[JV.PROP_PARENT_CHILD_SORT_KEY];
-        // if (src[JV.PROP_PARENT_SORT_KEYS]) dest[JV.PROP_PARENT_SORT_KEYS] = src[JV.PROP_PARENT_SORT_KEYS];
-        // if (src[JV.PROP_CHILD_SORT_KEYS]) dest[JV.PROP_CHILD_SORT_KEYS] = src[JV.PROP_CHILD_SORT_KEYS];
-        // if (src[JV.PROP_OTHER_SUB_SORT]) dest[JV.PROP_OTHER_SUB_SORT] = src[JV.PROP_OTHER_SUB_SORT];
-        // if (src[JV.PROP_FILTER_KEY]) dest[JV.PROP_FILTER_KEY] = src[JV.PROP_FILTER_KEY];
-        // if (src[JV.PROP_FILTER_COMPARE_OBJ]) dest[JV.PROP_FILTER_COMPARE_OBJ] = src[JV.PROP_FILTER_COMPARE_OBJ];
-        // if (src[JV.PROP_FILTER_COMPARE_OBJ_KEY]) dest[JV.PROP_FILTER_COMPARE_OBJ_KEY] = src[JV.PROP_FILTER_COMPARE_OBJ_KEY];
-        // if (src[JV.PROP_FILTER_COMPARE_VAL]) dest[JV.PROP_FILTER_COMPARE_VAL] = src[JV.PROP_FILTER_COMPARE_VAL];
-        // if (src[JV.PROP_FILTER_CONDITION]) dest[JV.PROP_FILTER_CONDITION] = src[JV.PROP_FILTER_CONDITION];
-
-        // if (src[JV.PROP_HANDLE_TYPE_SUM]) dest[JV.PROP_HANDLE_TYPE_SUM] = src[JV.PROP_HANDLE_TYPE_SUM];
-        // if (src[JV.PROP_HANDLE_TYPE_SORT]) dest[JV.PROP_HANDLE_TYPE_SORT] = src[JV.PROP_HANDLE_TYPE_SORT];
-        // if (src[JV.PROP_HANDLE_TYPE_ADD_DUMMY]) dest[JV.PROP_HANDLE_TYPE_ADD_DUMMY] = src[JV.PROP_HANDLE_TYPE_ADD_DUMMY];
-        // if (src[JV.PROP_HANDLE_TYPE_ADJUST]) dest[JV.PROP_HANDLE_TYPE_ADJUST] = src[JV.PROP_HANDLE_TYPE_ADJUST];
-
-        // if (src[JV.PROP_PARENT_DATA_KEY]) dest[JV.PROP_PARENT_DATA_KEY] = src[JV.PROP_PARENT_DATA_KEY];
-
     },
     private_set_title: function(node) {
         let nameStr = node[JV.PROP_NAME], idx = nameStr.indexOf("(");
         if (idx >= 0) {
             nameStr = nameStr.slice(0, idx);
         }
-        node[JV.PROP_NAME] = nameStr + "(" + node["预处理类型"] + ")";
-        node.Title = "映射数据对象:" + node["映射数据对象"] + " | " + node["预处理类型"];
+        node[JV.PROP_NAME] = nameStr + "(" + node[JV.PROP_HANDLE_TYPE] + ")";
+        node.Title = "映射数据对象:" + node[JV.PROP_DATA_KEY] + " | " + node[JV.PROP_HANDLE_TYPE];
     },
     refreshByNode: function(treeNode) {
         let me = preHandleObj;
@@ -198,29 +187,47 @@ let preHandleObj = {
         $("#div_sort_type_parent_data")[0].style.display = "none";
     },
     onPreHandleClick: function(event,treeId,treeNode) {
+        //点击预处理环节 节点
         let me = preHandleObj;
         me.currentNode = treeNode;
         me.setDisabledBandSelect(false);
         me.refreshByNode(treeNode);
     },
     onTypeClick: function(event,treeId,treeNode) {
-        //
+        //选择预处理类型(排序、过滤。。。)
+        let me = preHandleObj;
+        if (me.currentNode) {
+            me.currentNode[JV.PROP_HANDLE_TYPE] = treeNode[JV.PROP_NAME];
+            me.private_set_title(me.currentNode);
+            me.treeObj.updateNode(me.currentNode, false);
+            me.refreshByNode(me.currentNode);
+        }
     },
     onChangeDataMappingObj: function(dom, oprType) {
+        //更改(或选择)预处理环节中的 数据依据(就是说报表想预处理什么数据)
+        let me = preHandleObj;
         if (oprType === "top") {
-            $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
+            me.childTreeObj = $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
+            me.treeObj = $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
         } else if (oprType === "accord_to_parent") {
-            $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
+            me.parentTreeObj = $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
         }
     },
     onSortTypeChange: function(dom) {
+        //排序类型的选择/更改
+        let me = preHandleObj;
+        me.hide_all_dom();
+        $("#div_pre_handle_data")[0].style.display = "";
+        $("#div_sort_type")[0].style.display = "";
         if (dom.selectedIndex === 2) {
             $("#div_sort_type_according_to_parent")[0].style.display = "";
             $("#div_sort_type_parent_data")[0].style.display = "";
-        } else {
-            $("#div_sort_type_according_to_parent")[0].style.display = "none";
-            $("#div_sort_type_parent_data")[0].style.display = "none";
+            me.parentTreeObj = $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
+            me.childTreeObj = $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
+        } else if (dom.selectedIndex === 0) {
+            $("#div_sort_type_normal")[0].style.display = "";
         }
+
     },
     onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
         //
@@ -235,11 +242,36 @@ let preHandleObj = {
         return rst;
     },
     extractTabFields: function (rptTpl) {
-        //
+        if (rptTpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
+            for (let handleObj of rptTpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
+                switch (handleObj[JV.PROP_HANDLE_TYPE]) {
+                    case JV.PROP_HANDLE_TYPE_SORT:
+                        preHandleSortObj.extractTabFields(handleObj);
+                        break;
+                    case JV.PROP_HANDLE_TYPE_FILTER:
+                        preHandleFilterObj.extractTabFields(handleObj);
+                        break;
+                    case JV.PROP_HANDLE_TYPE_SUM:
+                        preHandleSummaryObj.extractTabFields(handleObj);
+                        break;
+                    case JV.PROP_HANDLE_TYPE_ADJUST:
+                        preHandleAdjustObj.extractTabFields(handleObj);
+                        break;
+                    case JV.PROP_HANDLE_TYPE_ADD_DUMMY:
+                        preHandleAddDummyObj.extractTabFields(handleObj);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
     }
 };
 
 let preHandleSortObj = {
+    normalTreeObj: null,
+    parentTreeObj: null,
+    childTreeObj: null,
     copyNode: function (src, dest) {
         dest[JV.PROP_SORT_TYPE] = src[JV.PROP_SORT_TYPE];
         switch (sort_types.indexOf(src[JV.PROP_SORT_TYPE])) {
@@ -287,6 +319,7 @@ let preHandleSortObj = {
         }
     },
     refresh_node: function () {
+        let me = this;
         $("#div_sort_type")[0].style.display = "";
         if (preHandleObj.currentNode) {
             let sel = $("#select_sort_types")[0];
@@ -301,10 +334,16 @@ let preHandleSortObj = {
                     //normal
                     $("#div_sort_type_normal")[0].style.display = "";
                     idx = pre_handle_data_objects.indexOf(preHandleObj.currentNode[JV.PROP_DATA_KEY]);
-                    $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), sortingKeysSetting, exposed_properties_arr[idx]);
-                    let sortKeyRoot = {Name: JV.PROP_SORT_KEYS, items: [], isParent: true};
-                    let sortKeys = [];
-                    // me.treeObj = $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), preHandleSetting, handles);
+                    me.treeObj = $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), sortingKeysSetting, exposed_properties_arr[idx]);
+                    let nodes = me.treeObj.getNodes();
+                    for (let sortItem of preHandleObj.currentNode[JV.PROP_SORT_KEYS]) {
+                        for (let keyNode of nodes) {
+                            if (sortItem.key === keyNode.Key) {
+                                me.treeObj.checkNode(keyNode, true, false, false);
+                                break;
+                            }
+                        }
+                    }
                     break;
                 case 1 :
                     //tree
@@ -317,11 +356,11 @@ let preHandleSortObj = {
                     sel = $("#select_mapping_data_for_sort_type")[0];
                     idx = pre_handle_data_objects.indexOf(preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY]);
                     sel.selectedIndex = idx;
-                    //parent_sorting_keys
-                    $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[idx]);
-                    //child_sorting_keys
+                    me.parentTreeObj = $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[idx]);
+                    me.checkupNode(preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS], me.parentTreeObj);
                     idx = pre_handle_data_objects.indexOf(preHandleObj.currentNode[JV.PROP_DATA_KEY]);
-                    $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[idx]);
+                    me.childTreeObj = $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[idx]);
+                    me.checkupNode(preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS], me.childTreeObj);
                     break;
                 case 3 :
                     //self define
@@ -331,7 +370,50 @@ let preHandleSortObj = {
             }
         }
     },
+    checkupNode: function(keysArr, treeObj) {
+        let nodes = treeObj.getNodes();
+        for (let key of keysArr) {
+            for (let node of nodes) {
+                if (node.Key === key) {
+                    treeObj.checkNode(node, true, false, false);
+                    break;
+                }
+            }
+        }
+    },
     onCheck: function(event,treeId,treeNode) {
+        let me = preHandleSortObj;
+        if (treeId.indexOf("parent_sorting_keys") >= 0) {
+            //preHandleObj.currentNode
+        } else if (treeId.indexOf("child_sorting_keys") >= 0) {
+            //
+        } else {
+            me.resetNormalSort();
+        }
+    },
+    resetNormalSort: function() {
+        let nodes = me.treeObj.getNodes();
+        let normalSortKeys = [];
+        for (let node of nodes) {
+            if (node.checked) {
+                let keyObj = {key: node.Key, order: node.Order};
+                normalSortKeys.push(keyObj);
+            }
+        }
+        preHandleObj.currentNode[JV.PROP_SORT_KEYS] = normalSortKeys;
+    },
+    addDiyDom: function(treeId,treeNode) {
+        let aObj = $("#" + treeNode.tId + IDMark_A);
+        let editStr = "<select class='selDemo' id='diySelect_" +treeNode.tId+ "'><option value='ascend'>升序 </option><option value='descend'>降序 </option></select>";
+        aObj.after(editStr);
+        let sel = $("#diySelect_" + treeNode.tId);
+        if (sel) {
+            sel.bind("change", function(){
+                treeNode.Order = sel[0].value;
+            });
+        }
+    },
+    extractTabFields: function (handleObj) {
         //
     }
 };
@@ -344,6 +426,9 @@ let preHandleFilterObj = {
         $("#div_filter_type")[0].style.display = "";
         if (preHandleObj.currentNode) {
         }
+    },
+    extractTabFields: function (handleObj) {
+        //
     }
 };
 
@@ -355,6 +440,9 @@ let preHandleSummaryObj = {
         $("#div_summary_type")[0].style.display = "";
         if (preHandleObj.currentNode) {
         }
+    },
+    extractTabFields: function (handleObj) {
+        //
     }
 };
 
@@ -366,6 +454,9 @@ let preHandleAdjustObj = {
         $("#div_adjust_type")[0].style.display = "";
         if (preHandleObj.currentNode) {
         }
+    },
+    extractTabFields: function (handleObj) {
+        //
     }
 };
 
@@ -377,5 +468,8 @@ let preHandleAddDummyObj = {
         $("#div_add_dummy_type")[0].style.display = "";
         if (preHandleObj.currentNode) {
         }
+    },
+    extractTabFields: function (handleObj) {
+        //
     }
 };

+ 3 - 0
web/users/js/main_tree_col.js

@@ -69,6 +69,9 @@ let MainTreeCol = {
         },
         forMarketPrice:function (node) {
             return MainTreeCol.readOnly.non_volumePrice(node);
+        },
+        forContain:function (node) {
+            return MainTreeCol.readOnly.non_ration(node)&&!MainTreeCol.readOnly.glj(node);
         }
     },
     cellType: {