/** * Created by Tony on 2017/4/28. */ var rationGLJOprObj = { processDecimal: -6, sheet: null, currentRationItem: null, distTypeTree: null, activeCell: null, tempCacheArr: [],//被更新的工料机,若更新的工料机不存在,则恢复 cache: {}, setting: { header: [ { headerName: "编码", headerWidth: 120, dataCode: "code", dataType: "String", formatter: "@" }, { headerName: "名称", headerWidth: 400, dataCode: "name", dataType: "String" }, { headerName: "规格型号", headerWidth: 120, dataCode: "specs", dataType: "String" }, { headerName: "单位", headerWidth: 160, dataCode: "unit", dataType: "String", hAlign: "center", vAlign: "center" }, { headerName: "定额价", headerWidth: 160, dataCode: "basePrice", dataType: "Number", formatter: "0.00", precision: 2 }, { headerName: "定额消耗", headerWidth: 160, dataCode: "consumeAmt", dataType: "Number", formatter: "0.000", precision: 3 }, { headerName: "类型", headerWidth: 160, dataCode: "gljType", dataType: "String", hAlign: "center", vAlign: "center" } ], view: { comboBox: [], lockColumns: [1, 2, 3, 4, 6] } }, getDistTypeTree: function (gljDistType) { let distType; let distTypeTree = { prefix: 'gljDistType', distTypes: {}, comboDatas: [], distTypesArr: [] }; gljDistType.forEach(function (typeData) { let typeObj = { data: typeData, children: [], parent: null } distTypeTree.distTypes[distTypeTree.prefix + typeData.ID] = typeObj; distTypeTree.distTypesArr.push(typeObj); }); gljDistType.forEach(function (typeData) { distType = distTypeTree.distTypes[distTypeTree.prefix + typeData.ID]; let parent = distTypeTree.distTypes[distTypeTree.prefix + typeData.ParentID]; if (parent) { distType.parent = parent; parent.children.push(distType); } }); distTypeTree.distTypesArr.forEach(function (distTypeObj) { if (distTypeObj.children.length === 0 && distTypeObj.data.fullName !== '普通机械' && distTypeObj.data.fullName !== '机械组成物' && distTypeObj.data.fullName !== '机上人工') { distTypeTree.comboDatas.push({ text: distTypeObj.data.fullName, value: distTypeObj.data.ID }); } if (distTypeObj.data.fullName === '机械') { distTypeTree.comboDatas.push({ text: distTypeObj.data.fullName, value: distTypeObj.data.ID }); } }); return distTypeTree; }, getGljDistType: function (callback) { let me = this; $.ajax({ type: 'post', url: "/complementaryRation/api/getGljDistType", dataType: 'json', success: function (result) { if (!result.error && callback) { me.distTypeTree = me.getDistTypeTree(result.data); callback(); } } }) }, buildSheet: function (sheet) { this.sheet = sheet; this.distTypeTree = this.getDistTypeTree(this.distTypeTree); sheetCommonObj.initSheet(this.sheet, this.setting, 30); this.onContextmenuOpr(); this.bindRationGljDelOpr(); this.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, this.onClipboardPasting); this.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, this.onClipboardPasted); this.sheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onEditStarting); this.sheet.bind(GC.Spread.Sheets.Events.EditEnded, this.onCellEditEnd); }, onContextmenuOpr: function () {//右键菜单 let me = this; let raCoe = rationCoeOprObj; $.contextMenu({ selector: '#rdSpread', build: function ($triggerElement, e) { //控制允许右键菜单在哪个位置出现 let target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.sheet.getParent()); let sheet = me.sheet; let addDis = false, delDis = false; let rationGlj = []; if (me.sheet.getParent().getActiveSheetIndex() === 0 && target.hitTestType === 3) {//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined' //rationGlj表 if (typeof target.row !== 'undefined') { //控制按钮是否可用 sheet.setActiveCell(target.row, target.col); console.log(me.currentRationItem); if (me.currentRationItem) { rationGlj = me.cache['_GLJ_' + me.currentRationItem.ID]; if (!rationGlj || target.row >= rationGlj.length) {//右键定位在有数据的行,删除键才显示可用 delDis = true; } else {//有数据 if (typeof target.col === 'undefined') {//定位不在表格内 delDis = true; } } } else { addDis = true; delDis = true; } } else { addDis = true; delDis = true; } return { callback: function () { }, items: { "add": { name: "添加人材机", disabled: addDis, icon: "fa-plus", callback: function (key, opt) { gljSelOprObj.initView(0, true); } }, "delete": { name: "删除人材机", disabled: delDis, icon: "fa-remove", callback: function (key, opt) { rationGlj.splice(target.row, 1); me.updateRationItem(function () { me.sheet.getParent().focus(); }); sheetCommonObj.cleanData(me.sheet, me.setting, -1); me.showGljItems(me.currentRationItem.ID); } }, } }; } //rationCoe表 else if (me.sheet.getParent().getActiveSheetIndex() === 2 && target.hitTestType === 3 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined') { let currentCache = raCoe.curRation && raCoe.isDef(raCoe.cache["_Coe_" + raCoe.curRation.ID]) ? raCoe.cache["_Coe_" + raCoe.curRation.ID] : []; sheet.setActiveCell(target.row, target.col); //控制按钮是否可用 let upDis = false, downDis = false, refDis = false; if (target.row >= currentCache.length) { upDis = true; downDis = true; refDis = true; } else { if (!raCoe.isDef(currentCache[target.row - 1])) { upDis = true; } if (!raCoe.isDef(currentCache[target.row + 1])) { downDis = true; } } return { callback: function () { }, items: { "upMove": { name: "上移", disabled: upDis, icon: "fa-arrow-up", callback: function (key, opt) { raCoe.upMove(currentCache[target.row], currentCache[target.row - 1], { row: target.row - 1, col: target.col }); } }, "downMove": { name: "下移", disabled: downDis, icon: "fa-arrow-down", callback: function (key, opt) { raCoe.downMove(currentCache[target.row], currentCache[target.row + 1], { row: target.row + 1, col: target.col }); } }, "ref": { name: "添加到本节其他定额", disabled: refDis, icon: "fa-arrow-left", callback: function (key, opt) { raCoe.updateSectionRation(rationOprObj.currentRations["_SEC_ID_" + rationOprObj.currentSectionId], currentCache[target.row], function (updateArr) { for (let i = 0, len = updateArr.length; i < len; i++) { let ration = updateArr[i]; let rationCoeList = updateArr[i].rationCoeList; let newNo = 1; for (let j = 0, jLen = rationCoeList.length; j < jLen; j++) { if (rationCoeList[j].no >= newNo) { newNo = rationCoeList[j].no + 1; } } let theCache = raCoe.cache["_Coe_" + ration.ID]; if (theCache !== undefined && theCache !== null) { let newCoe = {}; for (let attr in currentCache[target.row]) { newCoe[attr] = currentCache[target.row][attr]; } newCoe.no = newNo; theCache.push(newCoe); } } }); } } } }; } else { return false; } } }); }, bindRationGljDelOpr: function () { let me = rationGLJOprObj, spreadBook = me.sheet.getParent(); spreadBook.commandManager().register('rationGljDelete', function () { if (!me.currentRationItem) { return; } let sels = me.sheet.getSelections(), lockCols = me.setting.view.lockColumns; let cacheSection = me.cache["_GLJ_" + me.currentRationItem.ID], isUpdate = false; if (sels.length > 0) { for (let sel = 0; sel < sels.length; sel++) { if (sels[sel].colCount === me.setting.header.length) { if (cacheSection && sels[sel].row < cacheSection.length) { isUpdate = true; cacheSection.splice(sels[sel].row, sels[sel].rowCount); } } else { if (sels[sel].col !== 0 && sels[sel].col !== 5 && !(sels[sel].col === 1 && sels.col + sels[sel].colCount - 1 === 3)) { if (cacheSection) { for (let i = sels[sel].row === -1 ? 1 : 0; i < sels[sel].rowCount; i++) { if (sels[sel].row + i < cacheSection.length) { for (let col = sels[sel].col; col <= sels[sel].col + sels[sel].colCount - 1; col++) { if (lockCols.indexOf(col) === -1) { isUpdate = true; cacheSection[sels[sel].row + i][me.setting.header[col].dataCode] = 0; me.sheet.setValue(sels[sel].row + i, col, 0.00); } } } } } } } } } if (isUpdate) { me.updateRationItem(function () { me.sheet.getParent().focus(true); }); sheetCommonObj.cleanData(me.sheet, me.setting, -1); me.showGljItems(me.currentRationItem.ID); } }); spreadBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false); spreadBook.commandManager().setShortcutKey('rationGljDelete', GC.Spread.Commands.Key.del, false, false, false, false); }, onClipboardPasting: function (sender, args) { var me = rationGLJOprObj; let rationSection = rationOprObj.getCache(); let rationRow = rationOprObj.workBook.getSheet(0).getSelections()[0].row; me.currentRationItem = rationRow < rationSection.length ? rationSection[rationRow] : null; if (me.currentRationItem && typeof me.cache["_GLJ_" + me.currentRationItem.ID] === 'undefined') { me.cache["_GLJ_" + me.currentRationItem.ID] = []; } if (!(args.cellRange.col === 0 || args.cellRange.col === 5) || !(me.currentRationItem)) { args.cancel = true; } }, onClipboardPasted: function (e, info) { var me = rationGLJOprObj, repId = pageOprObj.rationLibId; me.tempCacheArr = []; let gljLibId = pageOprObj.gljLibId; console.log(gljLibId); if (gljLibId) { if (info.cellRange.col == 0) { let cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID]; var tmpCodes = sheetCommonObj.analyzePasteData({ header: [{ dataCode: "code" }] }, info); var codes = []; for (var i = 0; i < tmpCodes.length; i++) { let rowIdx = info.cellRange.row + i; if (rowIdx < cacheArr.length) {//更新 me.tempCacheArr.push({ org: cacheArr[rowIdx], newCode: tmpCodes[i].code }); cacheArr.splice(rowIdx--, 1); } codes.push(tmpCodes[i].code); } me.addGljItems(codes, gljLibId, info.cellRange); } else { //修改用量 if (me.cache["_GLJ_" + me.currentRationItem.ID] && info.cellRange.row < me.cache["_GLJ_" + me.currentRationItem.ID].length) { let tempConsumes = sheetCommonObj.analyzePasteData(me.setting, info); let maxCount = info.cellRange.row + info.cellRange.rowCount - 1 > me.cache["_GLJ_" + me.currentRationItem.ID].length - 1 ? me.cache["_GLJ_" + me.currentRationItem.ID].length - info.cellRange.row : info.cellRange.rowCount; for (let i = 0; i < maxCount; i++) { let roundCons = scMathUtil.roundTo(tempConsumes[i].consumeAmt, -3); me.cache["_GLJ_" + me.currentRationItem.ID][info.cellRange.row + i].consumeAmt = roundCons; } me.updateRationItem(function () { me.sheet.getParent().focus(true); }); if (info.cellRange.row + info.cellRange.rowCount - 1 >= me.cache["_GLJ_" + me.currentRationItem.ID].length - 1) { me.sheet.suspendPaint(); for (let rowIdx = me.cache["_GLJ_" + me.currentRationItem.ID].length; rowIdx <= info.cellRange.row + info.cellRange.rowCount - 1; rowIdx++) { me.sheet.setValue(rowIdx, info.cellRange.col, ''); } me.sheet.resumePaint(); } } else if (info.cellRange.row >= me.cache["_GLJ_" + me.currentRationItem.ID].length) { me.sheet.suspendPaint(); for (let rowIdx = info.cellRange.row; rowIdx <= info.cellRange.row + info.cellRange.rowCount - 1; rowIdx++) { me.sheet.setValue(rowIdx, info.cellRange.col, ''); } me.sheet.resumePaint(); } } } }, onEditStarting: function (sender, args) { let me = rationGLJOprObj; let rationSection = rationOprObj.getCache(); let rationRow = rationOprObj.workBook.getSheet(0).getSelections()[0].row; me.currentRationItem = rationRow < rationSection.length ? rationSection[rationRow] : null; if (me.currentRationItem && typeof me.cache["_GLJ_" + me.currentRationItem.ID] === 'undefined') { me.cache["_GLJ_" + me.currentRationItem.ID] = []; } if (!me.currentRationItem) { args.cancel = true; } else { if (args.col !== 0 && args.col !== 5 || args.col === 5 && args.row >= me.cache["_GLJ_" + me.currentRationItem.ID].length) { args.cancel = true; } } }, onCellEditEnd: function (sender, args) { var me = rationGLJOprObj; if (me.currentRationItem) { var cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID]; me.tempCacheArr = []; if (args.col != 0) { if (args.row < cacheArr.length) { var editGlj = cacheArr[args.row]; if (editGlj["consumeAmt"] != args.editingText) { let parseNum = parseFloat(args.editingText); if (isNaN(parseFloat(args.editingText))) { $('#alertModalBtn').click(); $('#alertText').text("定额消耗只能输入数值!"); $('#alertModalCls').click(function () { args.sheet.setValue(args.row, args.col, editGlj['consumeAmt']); }); $('#alertModalCof').click(function () { args.sheet.setValue(args.row, args.col, editGlj['consumeAmt']); }) } else { args.sheet.setValue(args.row, args.col, parseNum); let roundNum = scMathUtil.roundTo(parseNum, -3); editGlj["consumeAmt"] = roundNum; me.updateRationItem(function () { me.sheet.getParent().focus(true); }); } } } } else { if (args.editingText && args.editingText.toString().trim().length !== 0) { let isExist = false; for (let i = 0, len = cacheArr.length; i < len; i++) { if (cacheArr[i].code === args.editingText && i !== args.row) { isExist = true; break; } } if (isExist) { alert("人材机已存在!"); args.sheet.setValue(args.row, args.col, typeof cacheArr[args.row] !== 'undefined' ? cacheArr[args.row].code + '' : ''); } else { 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 gljLibID = pageOprObj.gljLibId; let codes = []; codes.push(args.editingText.toString().trim()); me.addGljItems(codes, gljLibID, args); } else if (args.row >= cacheArr.length) {//新增 let gljLibID = pageOprObj.gljLibId; if (gljLibID) { var codes = []; codes.push(args.editingText.toString().trim()); me.addGljItems(codes, gljLibID, args); } } } } else { args.sheet.setValue(args.row, args.col, args.row < cacheArr.length ? cacheArr[args.row].code : ''); } } } else { args.sheet.setValue(args.row, args.col, ''); } }, getRecoveryArr: function (tempDelArr, newArr) {//获得更新的code不存在,恢复删除的被更新数据 let rst = []; for (let i = 0, len = tempDelArr.length; i < len; i++) { let isExist = false; for (let j = 0, jLen = newArr.length; j < jLen; j++) { if (tempDelArr[i].newCode == newArr[j].code) { isExist = true; break; } } if (!isExist) { rst.push(tempDelArr[i].org); } } return rst; }, addGljItems: function (codes, repId, args) { let me = this; CommonAjax.post('/complementaryRation/api/getGljItemsByCodes', { gljCodes: codes, rationRepId: repId }, function (rstData) { if (rstData.length > 0) { if (priceProperties && priceProperties.length > 0) { let priceField = priceProperties[0].price.dataCode; for (let glj of rstData) { glj.basePrice = glj.priceProperty && glj.priceProperty[priceField] ? glj.priceProperty[priceField] : 0; } } sheetCommonObj.cleanData(me.sheet, me.setting, -1); let rstArr = [], dummyR = { gljId: 0, consumeAmt: 0 }, newAddArr = []; for (let i = 0; i < rstData.length; i++) { dummyR.gljId = rstData[i].ID; dummyR.type = rstData[i].type; rstArr.push(me.createRationGljDisplayItem(dummyR, rstData[i])); } if (me.cache["_GLJ_" + me.currentRationItem.ID]) { var cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID]; for (var i = 0; i < rstArr.length; i++) { var hasDup = false; for (var j = 0; j < cacheArr.length; j++) { if (cacheArr[j].gljId == rstArr[i].gljId) { hasDup = true; break; } } if (!hasDup) { newAddArr.push(rstArr[i]); } } me.cache["_GLJ_" + me.currentRationItem.ID] = cacheArr.concat(newAddArr); let recoveryArr = me.getRecoveryArr(me.tempCacheArr, rstData); if (recoveryArr.length > 0) { me.cache["_GLJ_" + me.currentRationItem.ID] = me.cache["_GLJ_" + me.currentRationItem.ID].concat(recoveryArr); } me.cache["_GLJ_" + me.currentRationItem.ID].sort(function (a, b) { let aV = a.gljType + a.code, bV = b.gljType + b.code; if (aV > bV) { return 1; } else if (aV < bV) { return -1 } return 0; }); } me.showGljItems(me.currentRationItem.ID); if (newAddArr.length > 0) { me.updateRationItem(function () { me.sheet.getParent().focus(true); }); } } else { let cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID] ? me.cache["_GLJ_" + me.currentRationItem.ID] : []; let recoveryArr = me.getRecoveryArr(me.tempCacheArr, []); if (recoveryArr.length > 0) { me.cache["_GLJ_" + me.currentRationItem.ID] = cacheArr.concat(recoveryArr); } //更新的工料机不存在 me.cache["_GLJ_" + me.currentRationItem.ID].sort(function (a, b) { let aV = a.gljType + a.code, bV = b.gljType + b.code; if (aV > bV) { return 1; } else if (aV < bV) { return -1 } return 0; }); $('#alertModalBtn').click(); $('#alertText').text("人材机" + codes + "不存在,请查找你所需要的人材机,或新增人材机"); $('#alertModalCls').click(function () { me.showGljItems(me.currentRationItem.ID); }); $('#alertModalCof').click(function () { me.showGljItems(me.currentRationItem.ID); }) } }); }, round(v, e) { var t = 1; for (; e > 0; t *= 10, e--); for (; e < 0; t /= 10, e++); return Math.round(v * t) / t; }, rationCal: function () { let me = rationGLJOprObj; let price = { gljType1: [], gljType2: [], gljType3: [] }, rst = { labourPrice: 0, materialPrice: 0, machinePrice: 0 }, rationBasePrc = 0; if (me.currentRationItem && me.cache['_GLJ_' + me.currentRationItem.ID]) { let cacheArr = me.cache['_GLJ_' + me.currentRationItem.ID]; cacheArr.forEach(function (gljData) { if (gljData.gljType && gljData.basePrice && gljData.consumeAmt) { let parent = me.distTypeTree.distTypes[me.distTypeTree.prefix + gljData.gljType].parent; if (parent && parent.data.ID <= 3) { price['gljType' + parent.data.ID].push(scMathUtil.roundTo(gljData.basePrice * gljData.consumeAmt, -3));//取三位 } if (!parent && gljData.gljType <= 3) { price['gljType' + gljData.gljType].push(scMathUtil.roundTo(gljData.basePrice * gljData.consumeAmt, -3));//取三位 } } }); if (price.gljType1.length > 0) { let labourPrice = 0; price.gljType1.forEach(function (singlePrc) { labourPrice = scMathUtil.roundTo(labourPrice + singlePrc, me.processDecimal); }); let roundPrice = scMathUtil.roundTo(labourPrice, -2); rst.labourPrice = roundPrice; rationBasePrc = scMathUtil.roundTo(rationBasePrc + roundPrice, -2); } if (price.gljType2.length > 0) { let materialPrice = 0; price.gljType2.forEach(function (singlePrc) { materialPrice = scMathUtil.roundTo(materialPrice + singlePrc, me.processDecimal); }); let roundPrice = scMathUtil.roundTo(materialPrice, -2); rst.materialPrice = roundPrice; rationBasePrc = scMathUtil.roundTo(rationBasePrc + roundPrice, -2); } if (price.gljType3.length > 0) { let machinePrice = 0; price.gljType3.forEach(function (singlePrc) { machinePrice = scMathUtil.roundTo(machinePrice + singlePrc, me.processDecimal); }); let roundPrice = scMathUtil.roundTo(machinePrice, -2); rst.machinePrice = roundPrice; rationBasePrc = scMathUtil.roundTo(rationBasePrc + roundPrice, -2); } rst.rationBasePrc = rationBasePrc; } return rst; }, updateRationItem: function (callback) { var me = this, updateArr = []; if (me.currentRationItem) { me.currentRationItem.rationGljList = me.buildRationItemGlj(); //recalculate ration basePrice let price = me.rationCal(); me.currentRationItem.labourPrice = price.labourPrice; me.currentRationItem.materialPrice = price.materialPrice; me.currentRationItem.machinePrice = price.machinePrice; me.currentRationItem.basePrice = price.rationBasePrc; updateArr.push(me.currentRationItem); rationOprObj.mixUpdateRequest(updateArr, [], [], function () { if (callback) callback(); }); } }, buildRationItemGlj: function () { var me = this, rst = []; if (me.currentRationItem && me.cache["_GLJ_" + me.currentRationItem.ID]) { var cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID]; for (var i = 0; i < cacheArr.length; i++) { const newItem = { gljId: cacheArr[i].gljId, consumeAmt: cacheArr[i].consumeAmt, type: cacheArr[i].type }; if (cacheArr[i].userId && cacheArr[i].userId !== userID) { // 是分享人材机 newItem.fromUser = cacheArr[i].userId; } rst.push(newItem); } } return rst; }, createRationGljDisplayItem: function (rItem, repGlj) { var rst = {}; rst.gljId = rItem.gljId; rst.type = rItem.type; rst.consumeAmt = rItem.consumeAmt; rst.code = repGlj.code; rst.name = repGlj.name; rst.specs = repGlj.specs; rst.unit = repGlj.unit; rst.basePrice = repGlj.basePrice; rst.gljType = repGlj.gljType; if (rItem.fromUser) { rst.userId = rItem.fromUser; } return rst; }, getGljItems: function (rationItem, callback) { let me = this, rationID = rationItem.ID, rationGljList = rationItem.rationGljList ? rationItem.rationGljList : [], rationType = rationItem.type; me.currentRationItem = rationItem; if (me.cache["_GLJ_" + rationID]) { me.showGljItems(rationID); } else { let gljIds = []; for (let i = 0; i < rationGljList.length; i++) { let idObj = Object.create(null); idObj.type = rationGljList[i].type; idObj.id = rationGljList[i].gljId; if (rationGljList[i].fromUser) { idObj.fromUser = rationGljList[i].fromUser; } gljIds.push(idObj); } CommonAjax.post('/complementaryRation/api/getGljItemsByIds', { ids: gljIds }, function (rstData) { sheetCommonObj.cleanSheet(me.sheet, me.setting, -1); if (priceProperties && priceProperties.length > 0) { let priceField = priceProperties[0].price.dataCode; for (let glj of rstData) { glj.basePrice = glj.priceProperty && glj.priceProperty[priceField] ? glj.priceProperty[priceField] : 0; } } var cacheArr = []; for (let i = 0; i < rstData.length; i++) { for (let j = 0; j < rationGljList.length; j++) { if (rationGljList[j].gljId == rstData[i].ID) { cacheArr.push(me.createRationGljDisplayItem(rationGljList[j], rstData[i])); break; } } } function compare() { return function (a, b) { let aV = a.gljType + a.code, bV = b.gljType + b.code; if (aV > bV) { return 1; } else if (aV < bV) { return -1 } return 0; } } cacheArr.sort(compare()); me.cache["_GLJ_" + rationID] = cacheArr; me.showGljItems(rationID); if (callback) callback(); }); } }, showGljItems: function (rationID) { var me = this; if (me.cache["_GLJ_" + rationID]) { sheetCommonObj.cleanData(me.sheet, me.setting, -1); me.cache["_GLJ_" + rationID].sort(function (a, b) { let aV = a.gljType + a.code, bV = b.gljType + b.code; if (aV > bV) { return 1; } else if (aV < bV) { return -1 } return 0; }); sheetsOprObj.showData(me.sheet, me.setting, me.cache["_GLJ_" + rationID], me.distTypeTree); } } }