| 
					
				 | 
			
			
				@@ -94,6 +94,41 @@ let TEMPLATE_BILLS_SETTING = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             "font":"Arail", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "width":250, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "readOnly":false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "head":{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "titleNames":["计算基数"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "spanCols":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "spanRows":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "vAlign":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "hAlign":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "font":["Arial"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "data":{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "field":"calcBase", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "vAlign":0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "hAlign":3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "font":"Arail", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "width":50, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "readOnly":false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "head":{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "titleNames":["费率ID"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "spanCols":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "spanRows":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "vAlign":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "hAlign":[1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "font":["Arial"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "data":{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "field":"feeRateID", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "type":'Number', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "vAlign":0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "hAlign":1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "font":"Arail" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         "width":50, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         "readOnly":true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         "head":{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -161,7 +196,7 @@ $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         showButton(tree.selected && tree.selected.canUpMove(), $('#upMove')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         showButton(tree.selected && tree.selected.canDownMove(), $('#downMove')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         showButton(tree.selected ? true : false, $('#delete')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let RefreshBillsData = function (datas) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         datas.forEach(function (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let node = tree.findNode(data.data.ID); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -179,11 +214,19 @@ $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         combo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             .items(comboItems); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return combo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let getFixedFlagCellType = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let billsFixedFlagData = JSON.parse(billsFixedFlagList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return getNameValueComboCellType(billsFixedFlagData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let getNameToValueMap = function (listString) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let map = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let datas = JSON.parse(listString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let data of datas){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            map[data.name] = data.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let getTypeFlagCellType = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let billsTypeFlagData = JSON.parse(billsTypeFlagList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return getNameValueComboCellType(billsTypeFlagData); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -206,7 +249,30 @@ $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 valueField = valueField[fields[i]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let getRealValue = function (value,map) {//中文到实际值的转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        value = value.replace(/[\s\r\n]/g, "");//去掉空格,回车等无用字符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(map[value]!==undefined && map[value]!==null) value = map[value]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let setUpdateData = function (node,data,col,value,setting) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let fieldName = setting.cols[col].data.field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let valueType = setting.cols[col].data.type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(fieldName == 'type'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            value = getRealValue(value,typeMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(fieldName == 'flagsIndex.fixed.flag'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            value = getRealValue(value,fixedFlagMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (/flagsIndex/.test(fieldName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data.data.flags = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let flagField = fieldName.split('.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data.data.flags.push({fieldName: flagField[1],flag: value}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(valueType == 'Number') value = parseInt(value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setFee(data.data, fieldName, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     billsTemplateData = billsTemplateData.replace(/\n/g, '\\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let templateData = JSON.parse(billsTemplateData); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -230,6 +296,10 @@ $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let tree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let billsSpread = TREE_SHEET_HELPER.createNewSpread($('#billsSpread')[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let controller = TREE_SHEET_CONTROLLER.createNew(tree, billsSpread.getActiveSheet(), TEMPLATE_BILLS_SETTING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let fixedFlagMap = getNameToValueMap(billsFixedFlagList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let typeMap = getNameToValueMap(billsTypeFlagList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(fixedFlagMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(typeMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //format code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //billsSpread.getSheet(0).setFormatter(-1, 1, '@'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     controller.bind('refreshBaseActn', RefreshBaseActn); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -237,25 +307,33 @@ $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     billsSpread.bind(GC.Spread.Sheets.Events.EditEnded, function (sender, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var node = controller.tree.items[info.row]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var fieldName = controller.setting.cols[info.col].data.field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var data = {type: 'update', data: {ID: node.getID()}}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       if (/flagsIndex/.test(fieldName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            data.data.flags = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let flagField = fieldName.split('.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            data.data.flags.push({fieldName: flagField[1], flag: info.editingText}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setFee(data.data, fieldName, info.editingText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var valueType = controller.setting.cols[info.col].data.type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let value = info.editingText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(node){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var data = {type: 'update', data: {ID: node.getID()}}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (/flagsIndex/.test(fieldName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.data.flags = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let flagField = fieldName.split('.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.data.flags.push({fieldName: flagField[1], flag: info.editingText}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(valueType == 'Number') value = parseInt(info.editingText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setFee(data.data, fieldName, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var updateData = [data]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CommonAjax.post(updateUrl, updateData, function (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setFee(node.data, fieldName, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                controller.refreshTreeNode([node], false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                controller.refreshTreeNode([node], false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           info.sheet.getCell(info.row,info.col).value(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var updateData = [data]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CommonAjax.post(updateUrl, updateData, function (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setFee(node.data, fieldName, info.editingText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            controller.refreshTreeNode([node], false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            controller.refreshTreeNode([node], false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     billsSpread.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (e, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         console.log("ClipboardPasted"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var node, iRow, iCol, curRow, curCol, datas = [], data, fieldName, updateData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var node, iRow, iCol, curRow, curCol, datas = [], data, fieldName,valueType,value, updateData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (iRow = 0; iRow < info.cellRange.rowCount; iRow ++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             curRow = info.cellRange.row + iRow; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             node = controller.tree.items[curRow]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -263,15 +341,20 @@ $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 data = {type: 'update', data: {ID: node.getID()}}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (iCol = 0; iCol < info.cellRange.colCount; iCol++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     curCol = info.cellRange.col + iCol; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    value = info.sheet.getText(curRow, curCol); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   /* curCol = info.cellRange.col + iCol; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     fieldName = controller.setting.cols[curCol].data.field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    valueType = controller.setting.cols[curCol].data.type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    value = info.sheet.getText(curRow, curCol); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (/flagsIndex/.test(fieldName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         data.data.flags = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         let flagField = fieldName.split('.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        data.data.flags.push({fieldName: flagField[1],flag: info.sheet.getText(curRow, curCol)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        data.data.flags.push({fieldName: flagField[1],flag: value}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        setFee(data.data, fieldName, info.sheet.getText(curRow, curCol)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(valueType == 'Number') value = parseInt(value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        setFee(data.data, fieldName, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    setUpdateData(node,data,curCol,value,controller.setting); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 datas.push(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -283,7 +366,9 @@ $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             controller.showTreeData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    billsSpread.bind(GC.Spread.Sheets.Events.RangeChanged, function (e,info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(info); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tree.loadDatas(templateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     controller.showTreeData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     RefreshBaseActn(tree); 
			 |