/** * Created by Mai on 2017/8/22. */ let TEMPLATE_BILLS_SETTING = { "emptyRows":1, "headRows":1, "headRowHeight":[35], "treeCol": 1, "cols":[{ "width":80, "readOnly":false, "head":{ "titleNames":["类别"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data":{ "field":"type", "vAlign":0, "hAlign":1, "font":"Arail", } }, { "width":200, "readOnly":false, "head":{ "titleNames":["编号"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"], }, "data":{ "field":"code", "vAlign":0, "hAlign":3, "font":"Arail", "formatter": '@' } }, { "width":300, "readOnly":false, "head":{ "titleNames":["名称"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data":{ "field":"name", "vAlign":0, "hAlign":3, "font":"Arail" } }, { "width":50, "readOnly":false, "head":{ "titleNames":["单位"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data":{ "field":"unit", "vAlign":0, "hAlign":1, "font":"Arail" } }, { "width":200, "readOnly":false, "head":{ "titleNames":["清单固定类别"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data":{ "field":"flagsIndex.fixed.flag", "vAlign":0, "hAlign":3, "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":{ "titleNames":["ID"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data":{ "field":"ID", "vAlign":0, "hAlign":1, "font":"Arail" } }, { "width":50, "readOnly":true, "head":{ "titleNames":["ParentID"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data":{ "field":"ParentID", "vAlign":0, "hAlign":1, "font":"Arail" } }, { "width":50, "readOnly":true, "head":{ "titleNames":["NextSiblingID"], "spanCols":[1], "spanRows":[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data":{ "field":"NextSiblingID", "vAlign":0, "hAlign":1, "font":"Arail" } }] }; $(document).ready(function () { let RefreshBaseActn = function (tree) { /* let showButton = function (show, btn) { 隐藏改成灰显 if (show) { btn.show(); } else { btn.hide(); } };*/ let setButtonValid = function (valid, btn) { if (valid) { btn.removeClass('disabled'); } else { btn.addClass('disabled'); } }; setButtonValid(tree.selected && tree.selected.canUpLevel(), $('#upLevel')); setButtonValid(tree.selected && tree.selected.canDownLevel(), $('#downLevel')); setButtonValid(tree.selected && tree.selected.canUpMove(), $('#upMove')); setButtonValid(tree.selected && tree.selected.canDownMove(), $('#downMove')); setButtonValid(tree.selected ? true : false, $('#delete')); }; let RefreshBillsData = function (datas) { datas.forEach(function (data) { let node = tree.findNode(data.data.ID); if (node) { $.extend(true, node.data, data.data); } }); }; let getNameValueComboCellType = function (datas) { let comboItems = []; for (let data of datas) { comboItems.push({text: data.name, value: data.value}); } let combo = new GC.Spread.Sheets.CellTypes.ComboBox(); 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); }; let setFee = function (data, fullField, value) { let fields = fullField.split('.'), valueField = data; for (let i in fields) { if (valueField[fields[i]]) { if (i == fields.length - 1) { valueField[fields[i]] = value; } else { valueField = valueField[fields[i]]; } } else { if (i == fields.length - 1) { valueField[fields[i]] = value; } else { valueField[fields[i]] = {}; }; valueField = valueField[fields[i]]; } } }; let getRealValue = function (value,map) {//中文到实际值的转换 if(value) 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(value && valueType == 'Number') value = parseInt(value); setFee(data.data, fieldName, value); } }; billsTemplateData = billsTemplateData.replace(/\n/g, '\\n'); let templateData = JSON.parse(billsTemplateData); for (let data of templateData) { if (data.flags) { data.flagsIndex = {}; for (let flag of data.flags) { data.flagsIndex[flag.fieldName] = flag; } } } for (col of TEMPLATE_BILLS_SETTING.cols) { if (col.data.field === 'type' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) { col.data.cellType = getTypeFlagCellType(); } else if (col.data.field === 'flagsIndex.fixed.flag' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) { col.data.cellType = getFixedFlagCellType(); } } 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); 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 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(value && 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(""); } }); billsSpread.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (e, info) { console.log("ClipboardPasted"); 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]; if (node) { 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); setUpdateData(node,data,curCol,value,controller.setting); } datas.push(data); } }; CommonAjax.post(updateUrl, datas, function (data) { RefreshBillsData(data); controller.showTreeData(); }, function () { controller.showTreeData(); }); }); billsSpread.bind(GC.Spread.Sheets.Events.RangeChanged, function (e,info) { let datas = []; let changGroup = _.groupBy(info.changedCells,'row'); for(let row in changGroup){ let node = controller.tree.items[row]; if (node) { let data = {type: 'update', data: {ID: node.getID()}}; for (let cell of changGroup[row]) { let value = info.sheet.getText(cell.row, cell.col); if(value=="") value = null; setUpdateData(node,data,cell.col,value,controller.setting); } datas.push(data); } } CommonAjax.post(updateUrl, datas, function (data) { RefreshBillsData(data); controller.showTreeData(); }, function () { controller.showTreeData(); }); }); tree.loadDatas(templateData); controller.showTreeData(); let sel = billsSpread.getActiveSheet().getSelections()[0]; controller.setTreeSelected(tree.items[sel.row == -1?0:sel.row]);//初始化选中项 RefreshBaseActn(tree); $('#insert').click(function () { let me = this; $(me).addClass('disabled'); var selected = controller.tree.selected, updateData; if (selected) { updateData = controller.tree.getInsertData(selected.getParentID(), selected.getNextSiblingID()); } else { updateData = controller.tree.getInsertData(); } if (updateData.length > 0) { CommonAjax.post(updateUrl, updateData, function (data) { controller.insert(); controller.showTreeData(); $(me).removeClass('disabled'); }); } else { alert('新增节点失败, 请重试.'); $(me).removeClass('disabled'); } }); $('#delete').click(function () { let me = this; $(me).addClass('disabled'); let selection = controller.sheet.getSelections()[0], updateData,deleteMap={},deleteNodes=[]; for(let i=0;i < selection.rowCount;i++){ let tem_node = controller.tree.items[selection.row+i]; if(i == 0){//第一个直接添加; deleteMap[tem_node.getID()] = tem_node; deleteNodes.push(tem_node); }else { setNodeToMapAndArray(tem_node,deleteMap,deleteNodes); } } if (deleteNodes.length > 0) { updateData = controller.tree.getDeleteDatas(deleteMap,deleteNodes); CommonAjax.post(updateUrl, updateData, function (data) { controller.m_delete(deleteNodes); controller.showTreeData(); $(me).removeClass('disabled'); }); } function setNodeToMapAndArray(node,map,array) { let nodeID = node.getID(); if(map[nodeID]==undefined||map[nodeID]==null){ newMap(node,node.parent,map,array) } function newMap(node,parent,map,array) { let nodeID =node.getID(); if(parent==null){//说明已经是最顶层了 map[nodeID]=node; array.push(node); }else { let parentID = parent.getID(); if(map[parentID]==undefined||map[parentID]==null){ newMap(node,parent.parent,map,array); } } } } }); $('#upLevel').click(function () { let me = this; $(me).addClass('disabled'); var selected = controller.tree.selected, updateData; if (selected) { updateData = selected.getUpLevelData(); CommonAjax.post(updateUrl, updateData, function (data) { controller.upLevel(); controller.showTreeData(); $(me).removeClass('disabled'); }); } }); $('#downLevel').click(function () { let me = this; $(me).addClass('disabled'); var selected = controller.tree.selected, updateData; if (selected) { updateData = selected.getDownLevelData(); CommonAjax.post(updateUrl, updateData, function (data) { controller.downLevel(); controller.showTreeData(); $(me).removeClass('disabled'); }); } }); $('#upMove').click(function () { let me = this; $(me).addClass('disabled'); var selected = controller.tree.selected, updateData; if (selected) { updateData = selected.getUpMoveData(); CommonAjax.post(updateUrl, updateData, function (data) { controller.upMove(); controller.showTreeData(); $(me).removeClass('disabled'); }); } }); $('#downMove').click(function () { let me = this; $(me).addClass('disabled'); var selected = controller.tree.selected, updateData; if (selected) { updateData = selected.getDownMoveData(); CommonAjax.post(updateUrl, updateData, function (data) { controller.downMove(); controller.showTreeData(); $(me).removeClass('disabled'); }); } }); });