/** * Created by vian on 2017/4/12. */ var dbController = { insert: function(controller, btn){ tools.btnClose(btn); btn.attr('doing', 'true'); if(controller.tree.items.length === 0){ controller.tree.maxNodeID(0); let newNodeId = controller.tree.newNodeID(); billsAjax.createBills(userAccount, billsLibId, newNodeId, -1 , -1, null, function(){ controller.insert(); controller.tree.selected.jobs = new Array(); controller.tree.selected.items = new Array(); controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); tools.btnAction(btn); btn.attr('doing', 'false'); }); } else { let node = controller.tree.selected; if(node){ var updateId = node.getID(), createpid = node.getParentID(), createnid = node.getNextSiblingID(); let newNodeId = controller.tree.newNodeID(); let updatePreData = {ID: updateId, NextSiblingID: newNodeId}; billsAjax.createBills(userAccount, billsLibId, newNodeId, createpid, createnid, updatePreData, function(){ controller.insert(); controller.tree.selected.jobs = new Array(); controller.tree.selected.items = new Array(); controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); tools.btnAction(btn); btn.attr('doing', 'false'); }); } else { let updateNode = controller.tree.roots[controller.tree.roots.length - 1]; let updateId = updateNode.getID(); let newNodeId = controller.tree.newNodeID(); let updatePreData = {ID: updateId, NextSiblingID: newNodeId}; billsAjax.createBills(userAccount, billsLibId, newNodeId, -1, -1, updatePreData, function(){ controller.insert(); controller.tree.selected.jobs = new Array(); controller.tree.selected.items = new Array(); controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); tools.btnAction(btn); btn.attr('doing', 'false'); }); } } }, upLevel: function(controller, btn){ tools.btnClose(btn); btn.attr('doing', 'true'); var node = controller.tree.selected; var ids = []; var updateData = []; var getNextSibling = function(node){ if(node.nextSibling){ ids.push(node.getNextSiblingID()); getNextSibling(node.nextSibling); } } //node if(node){ if(node.parent){ let updateA = { ID: node.getID(), ParentID: node.parent.getParentID(), NextSiblingID: node.parent.getNextSiblingID(), type: 'oprNode' }; updateData.push(updateA); //parent let updateB = { ID: node.getParentID(), NextSiblingID: node.getID(), type: 'parentNode' } updateData.push(updateB); if(node.nextSibling){ getNextSibling(node); let updateC = { ID: ids, ParentID: node.getID(), type: 'nextSiblingNode' } updateData.push(updateC); } if(node.preSibling){ let updateD = { ID: node.preSibling.getID(), NextSiblingID: -1, type: 'preSiblingNode' } updateData.push(updateD); } billsAjax.upLevel(userAccount, billsLibId, updateData, function(){ tools.btnAction(btn); btn.attr('doing', 'false'); controller.upLevel(); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); }); //rechargeController.createRecharge(controller.tree.selected); } } }, downLevel: function(controller, btn){ tools.btnClose(btn); btn.attr('doing', 'true'); var node = controller.tree.selected; var updateData = []; if(node){ if(node.preSibling){ var updateA = { ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID(), type: 'preSiblingNode' }; var updateB = { ID: node.getID(), ParentID: node.preSibling.getID(), NextSiblingID: -1, type: 'oprNode' }; updateData.push(updateA); updateData.push(updateB); if(node.preSibling.children.length > 0){ var updateC = { ID: node.preSibling.children[node.preSibling.children.length -1].getID(), NextSiblingID: node.getID(), type: 'preChildren' } updateData.push(updateC); } billsAjax.downLevel(userAccount, billsLibId, updateData, function(){ tools.btnAction(btn); btn.attr('doing', 'false'); controller.downLevel(); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); }); //rechargeController.createRecharge(controller.tree.selected); } } }, delete: function(controller, btn, totalJobs, totalItems){ tools.btnClose(btn); btn.attr('doing', 'true'); var node = controller.tree.selected; if(node){ var deleteIds = []; var getDeleteIds = function(node){ if(node){ deleteIds.push(node.getID()); var length = node.children.length; if(length > 0){ for(var i=0; i 0){ tools.orderReshowData(jobsSheet, jobs, jobsSetting, 'job', false); orgJobData = jobsSheet.getValue(0, 0); } let items = controller.tree.selected.items; setSheet.setMaxRowCount(itemsSheet, items); if(items.length > 0){ tools.orderReshowData(itemsSheet, items, itemsSetting, 'item', false); orgItemData = itemsSheet.getValue(0, 0); } } else { tools.clearData(jobsSheet); tools.clearData(itemsSheet); $('#exampleTextarea').val(""); } sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs'); sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items'); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); //to solve refresh after deleted }); } }, upMove: function(controller, btn){ tools.btnClose(btn); btn.attr('doing', 'true'); var node = controller.tree.selected; var updateData = []; if(node){ if(node.preSibling){ let updateA = { ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID() }; let updateB = { ID: node.getID(), NextSiblingID: node.preSibling.getID() }; updateData.push(updateA); updateData.push(updateB); if(node.preSibling.preSibling){ let updateC = { ID: node.preSibling.preSibling.getID(), NextSiblingID: node.getID() } updateData.push(updateC); } billsAjax.upMove(userAccount, billsLibId, updateData, function(){ tools.btnAction(btn); btn.attr('doing', 'false'); controller.upMove(); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); }); } } }, downMove: function(controller, btn){ tools.btnClose(btn); btn.attr('doing', 'true'); var node = controller.tree.selected; var updateData = []; if(node){ if(node.nextSibling){ var updateA = { ID: node.getNextSiblingID(), NextSiblingID: node.getID(), type: 'nextSiblingNode' }; var updateB = { ID: node.getID(), NextSiblingID: node.nextSibling.getNextSiblingID(), type: 'oprNode' }; updateData.push(updateA); updateData.push(updateB); if(node.preSibling){ var updateC = { ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID(), type: 'preSiblingNode' }; updateData.push(updateC); } billsAjax.downMove(userAccount, billsLibId, updateData); tools.btnAction(btn); btn.attr('doing', 'false'); controller.downMove(); sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); } } }, editData: function(controller){ controller.sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){ var node = controller.tree.selected, updateId, field; if(node){ updateId = node.getID(); billsLibSetting.cols.forEach(function(col, idx){ if(args.col === idx){ field = col.data.field; node.data[field] = args.editingText; sheetBillsDatas.datasIdx['rowIdx'+ args.row][field] = args.editingText; } }); billsAjax.updateBills(userAccount, billsLibId, updateId, field, args.editingText); //sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); } else { args.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(''); } }); } }; var createObj = { newJob: function(data){ var Job = function(data){ this.data = data; //count = 0则没有被引用了 this.count = 0; }; return new Job(data); }, newJobs: function(){ var TotalJobs = function(){ this.jobs = {}; this.jobsArr = []; this.prefix = '_id'; }; TotalJobs.prototype.findJob = function(id){ return this.jobs[this.prefix + id] ? this.jobs[this.prefix + id] : null; } TotalJobs.prototype.loadJobs = function (nodes, datas){ var me = this; datas.forEach(function(jobData){ var job = createObj.newJob(jobData); me.jobs[me.prefix + jobData.id] = job; me.jobsArr.push(job); }); if(nodes){ nodes.forEach(function(node){ node.jobs = new Array(); node.data.jobs.forEach(function(obj){ if(me.jobs[me.prefix + obj.id]){ node.jobs.push({job: me.jobs[me.prefix + obj.id], serialNo: obj.serialNo}); me.jobs[me.prefix + obj.id].count ++; } else { node.data.jobs.splice(node.data.jobs.indexOf(obj), 1); } }); }); } }; TotalJobs.prototype.getUpdateIds = function(nodes, repeatId){ var ids = []; nodes.forEach(function(node){ node.jobs.forEach(function(job){ if(job.data.id === repeatId){ ids.push(node.getID()); } }); }); return ids; }; return new TotalJobs(); }, newItem: function(data){ var Item = function(data){ this.data = data; this.count = 0; }; return new Item(data); }, newItems: function(){ var TotalItems = function(){ this.items = {}; this.itemsArr = []; this.prefix = '_id'; }; TotalItems.prototype.findItem = function(id){ return this.items[this.prefix + id] ? this.items[this.prefix + id] : null; } TotalItems.prototype.loadItems = function (nodes, datas){ var me = this; datas.forEach(function(itemData){ var item = createObj.newItem(itemData); me.items[me.prefix + itemData.id] = item; me.itemsArr.push(item); }); if(nodes){ nodes.forEach(function(node){ node.items = new Array(); node.data.items.forEach(function(obj){ if(me.items[me.prefix + obj.id]){ node.items.push({item: me.items[me.prefix + obj.id], serialNo: obj.serialNo}); me.items[me.prefix + obj.id].count ++; } else { node.data.items.splice(node.data.items.indexOf(obj), 1); } }); }); } }; TotalItems.prototype.getUpdateIds = function(nodes, repeatId){ var ids = []; nodes.forEach(function(node){ node.items.forEach(function(item){ if(item.data.id === repeatId){ ids.push(node.getID()); } }); }); return ids; }; return new TotalItems(); } }; var tools = { alertOpr: function(args, sheet, txt, arr, field){ $('#alertTxt').text(txt); $('#alertBtn').click(); sheet.options.isProtected = true; let dataCode = args.col === 0 ? 'code' : 'content'; let orgCode = args.row < arr.length ? arr[args.row][field].data[dataCode] : ''; $('#alertCof').unbind('click'); $('#alertCls').unbind('click'); $('#alertCls').click(function () { sheet.options.isProtected = false; sheet.getCell(args.row, args.col).value(orgCode); }); $('#alertCof').click(function () { sheet.options.isProtected = false; sheet.getCell(args.row, args.col).value(orgCode); }); }, alertTotalOpr: function (args, txt, arr) { $('#alertTxt').text(txt); $('#alertBtn').click(); args.sheet.options.isProtected = true; let dataCode = args.col === 0 ? 'code' : 'content'; let orgCode = args.row < arr.length ? arr[args.row].data[dataCode] : ''; $('#alertCof').unbind('click'); $('#alertCls').unbind('click'); $('#alertCls').click(function () { args.sheet.options.isProtected = false; args.sheet.getCell(args.row, args.col).value(orgCode); }); $('#alertCof').click(function () { args.sheet.options.isProtected = false; args.sheet.getCell(args.row, args.col).value(orgCode); }); }, //ref sheet up&down Move canUpMove: function (selected, arr) { return selected && arr.indexOf(selected) > 0 && arr.indexOf(selected) !== -1 ? true: false; }, canDownMove: function (selected, arr) { return selected && arr.indexOf(selected) < arr.length -1 && arr.indexOf(selected) !== -1 ? true: false; }, btnClose: function (btn) { btn.css("opacity", "0.2"); btn.addClass("disabled"); //btn.attr(attr, 'true'); }, btnAction: function (btn) { btn.css("opacity", ""); btn.removeClass("disabled"); //btn.attr(attr, 'false'); }, /*isExist: function (totalArr, field, newData, orgData){ var isExist = false; if(totalArr.length > 0){ totalArr.forEach(function(item){ if(item.data[field] == newData && newData !== orgData){ isExist = true; } }); } return isExist; },*/ isExist: function (totalArr, field, newData){ var isExist = false; if(totalArr.length > 0){ totalArr.forEach(function(item){ if(item.data[field] == newData){ isExist = true; } }); } return isExist; }, isRepeat: function(arr, field, newData, ref, classify){ var isRepeat = false; if(classify){ if(arr){ arr.forEach(function(item){ if(ref === 'reference' && item[classify].data[field] == newData){ isRepeat = true; } else if(ref === 'document' && item[field] === newData){ isRepeat = true; } }); } } else { if(arr){ arr.forEach(function(item){ if(ref === 'reference' && item.data[field] == newData){ isRepeat = true; } else if(ref === 'document' && item[field] === newData){ isRepeat = true; } }); } } return isRepeat; }, addAttr: function(attr){ if(!attr){ attr = new Array(); } }, isEmptyObj: function(obj){ let t; for(t in obj) return !1; return !0; }, reSetCell: function(sheet, rowIdx, colIdx, value, id){ if(value && colIdx!== null){ sheet.getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(value); } sheet.setTag(rowIdx, 0, id); sheet.setTag(rowIdx, 1, id); }, getIndex: function(arr, id, classify){ var index; arr.forEach(function(item){ if(item[classify].data.id === id){ index = arr.indexOf(item); } }); return index; }, getObj: function(arr, id, classify){ for(let i=0; i 0 ? arr[arr.length - 1].data.code : 0; }, getValidDatas: function(sheet, setting, args){ let validDatas = []; const colLen = 4; let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount; let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1; for(let i =orgRow; i<=maxRow; i++){ let validData = {}; for(let j= orgCol; j<=maxCol; j++){ let value = sheet.getValue(i, j); if(value){ setting.cols.forEach(function(col, colIdx){ if(colIdx === j){ validData[col.data.field] = value; } }); } } if(!tools.isEmptyObj(validData)){ validDatas.push(validData); } } //--------------------------------------- /*for(let i=orgRow; i<= maxRow; i++){ if(tools.getValidRow(sheet, i)){ console.log(`validRow: ${i}`); let validData = {code: '', name: '', unit: '', ruleText: ''}; for(var j=orgCol; j<=maxCol; j++){ let field; setting.cols.forEach(function(col, colIdx){ if(colIdx === j){ field = col.data.field; if(sheet.getValue(i, j)){ validData[field] = sheet.getValue(i, j); } } }); //validData[field] = sheet.getValue(i, j); } validDatas.push(validData); } }*/ return validDatas; }, getValidRow: function(sheet, rowIdx){ const colCount = 4; let isValid = false; for(let i=0; i< colCount; i++){ if(sheet.getValue(rowIdx, i, GC.Spread.Sheets.SheetArea.viewport)){ isValid = true; } } return isValid; }, getDelDatas: function(controller, totalJobs, totalItems){ let delJobs = controller.tree.selected.jobs, delItems = controller.tree.selected.items, delJobsIds = [], delItemsIds = []; if(delJobs.length > 0){ delJobs.forEach() } }, delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){ var delJobs = controller.tree.selected.jobs; var delItems = controller.tree.selected.items; var delJobsIds = []; var delItemsIds = []; if(delJobs.length > 0){ delJobs.forEach(function(obj){ obj.job.count --; if(obj.job.count <=0){ totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1); delJobsIds.push(obj.job.data.id) } }); jobsAjax.deleteJobContent(userAccount, billsLibId, delJobsIds); tools.clearData(jobsSheet); tools.orderReshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, 'job', true); } if(delItems.length > 0){ delItems.forEach(function(obj){ obj.item.count --; if(obj.item.count <=0){ totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1); delItemsIds.push(obj.item.data.id) } }); itemsAjax.deleteItemCharacter(userAccount, billsLibId, delItemsIds); tools.clearData(itemsSheet); tools.orderReshowData(itemsSheet, controller.tree.selected.items, itemsSetting, 'item', true); } controller.delete(); }, deleteELes: function (arr, delIds, classifyStr){ var ids = []; delIds.forEach(function(delId){ arr.forEach(function(ele){ if(ele[classifyStr].data.id === delId){ arr.splice(arr.indexOf(ele), 1); ele.count--; /*if(ele.count <= 0){ ids.push(ele.data.id); }*/ } }); }); /* if(callback){ callback(ids); }*/ }, getSerialNo: function(arr){ if(arr.length > 0){ tools.resortSerialNo(arr); return arr[arr.length - 1].serialNo + 1; } return 1; }, resortSerialNo: function(arr){ function compare(){ return function (a, b){ let valA = a.serialNo, valB = b.serialNo; return valA - valB; } } arr.sort(compare()); }, resort: function(arr, attr, isValue){ function compare(attr){ return function (a, b){ var valA, valB; if(isValue){ valA = a[attr]; valB = a[attr]; } else { valA = a.data[attr]; valB = b.data[attr]; } return valA - valB; } } arr.sort(compare(attr)); }, //update-- orderReshowData: function(sheet, arr, setting, classify, isResort){ sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport); sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader); tools.clearData(sheet); if(arr.length > 0){ sheet.suspendPaint(); setSheet.setMaxRowCount(sheet, arr); if(isResort){ tools.resortSerialNo(arr); } let length = arr.length; for(let i=0; i 0){ var length = arr.length; for(var i=0; i 0){ sheet.suspendPaint(); var length = arr.length; for(var i=0; i 0){ for(let j=0; j< uniqLen; j++){ if(arr[i].field === uniqArr[j].field && arr[i].data === uniqArr[j].data){ flag = true; //uniqArr.push(arr[i]); } } if(!flag){ uniqArr.push(arr[i]); } } else { uniqArr.push(arr[i]) } } return uniqArr; }, resetRowIdx: function(arr, beginRow){ let rowIdx = beginRow; for(let i=0; i< arr.length; i++){ if(arr[i].rowIdx !== rowIdx){ rowIdx++; arr[i].rowIdx = rowIdx; } } }, getsheetDatas: function(sheet, classify, controller){ let rowCount = sheet.getRowCount(); const colIdx = 1; let sheetDatas; if(classify === 'total'){ sheetDatas = []; for(let i=0; i { let cnDataObj, ceDataObj, content, jobId; let isExisit = tools.isExist(totalJobs.jobsArr, 'content', obj.data, null); let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', obj.data, 'reference', 'job'); if(isExisit && !isRepeat){ totalJobs.jobsArr.forEach(job => { if(obj.data === job.data.content){ jobId = job.data.id; } }); ceDataObj= { newData: obj.data, billsLibId: billsLibId, nodeId: nodeId, jobId: jobId, serialNo: obj.serialNo, type: CreateExist }; createDatas.push(ceDataObj); } if(!isExisit){ maxJobsNumber++; //currentCountId++; cnDataObj = { //id: maxJobsNumber, billsLibId: billsLibId, nodeId: nodeId, newData: obj.data, code: maxJobsNumber, serialNo: obj.serialNo, type: CreateNew }; createDatas.push(cnDataObj); } }); crossedDatas.forEach(cData => { let ueObj, unObj, newJobId; let isExisit = tools.isExist(totalJobs.jobsArr, 'content', cData.newData, null); let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', cData.newData, 'reference', 'job'); if(isExisit && !isRepeat){ totalJobs.jobsArr.forEach(job => { if(cData.newData === job.data.content){ newJobId = job.data.id; } }); ueObj = { newData: cData.newData, billsLibId: billsLibId, nodeId: nodeId, newJobId: newJobId, orgJobId: cData.orgId, serialNo:cData.serialNo, type: UpdateExist }; updateDatas.push(ueObj); } if(!isExisit && !isRepeat){ maxJobsNumber++; //currentCountId++; unObj = { //newJobId: maxJobsNumber, billsLibId: billsLibId, nodeId: nodeId, newData: cData.newData, orgJobId: cData.orgId, code: maxJobsNumber, serialNo: cData.serialNo, type: UpdateNew }; updateDatas.push(unObj); } }); let pasteDatas = { updateDatas: updateDatas, createDatas: createDatas }; return pasteDatas; }, encapItemsData: function(uncrossedDatas, crossedDatas, controller, totalItems){ const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew'; let updateDatas = []; let createDatas = []; let nodeId = controller.tree.selected.getID(); uncrossedDatas.forEach(obj => { let cnDataObj, ceDataObj, content,itemId; let isExisit = tools.isExist(totalItems.itemsArr, 'content', obj.data, null); let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', obj.data, 'reference', 'item'); if(isExisit && !isRepeat){ totalItems.itemsArr.forEach(item => { if(obj.data === item.data.content){ itemId = item.data.id; } }); ceDataObj= { newData: obj.data, billsLibId: billsLibId, nodeId: nodeId, itemId: itemId, serialNo: obj.serialNo, type: CreateExist }; createDatas.push(ceDataObj); } if(!isExisit){ maxItemsNumber++; //currentCountId++; cnDataObj = { // id: maxItemsNumber, billsLibId: billsLibId, nodeId: nodeId, newData: obj.data, serialNo: obj.serialNo, code: maxItemsNumber, type: CreateNew }; createDatas.push(cnDataObj); } }); crossedDatas.forEach(cData => { let ueObj, unObj, newItemId; let isExisit = tools.isExist(totalItems.itemsArr, 'content', cData.newData, null); let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', cData.newData, 'reference', 'item'); if(isExisit && !isRepeat){ totalItems.itemsArr.forEach(item => { if(cData.newData === item.data.content){ newItemId = item.data.id; } }); ueObj = { newData: cData.newData, billsLibId: billsLibId, nodeId: nodeId, newItemId: newItemId, orgItemId: cData.orgId, serialNo: cData.serialNo, type: UpdateExist }; updateDatas.push(ueObj); } if(!isExisit && !isRepeat){ maxItemsNumber++; //currentCountId++; unObj = { // newItemId: maxItemsNumber, billsLibId: billsLibId, nodeId: nodeId, newData: cData.newData, orgItemId: cData.orgId, code: maxItemsNumber, serialNo: cData.serialNo, type: UpdateNew }; updateDatas.push(unObj); } }); let pasteDatas = { updateDatas: updateDatas, createDatas: createDatas }; return pasteDatas; }, encapTotalJobsDatas: function(sheet, totalJobs, uncrossedDatas, crossedDatas){ let pasteDatas; let rebuildArr =[]; if(crossedDatas.length > 0){ for(let i=0; i< crossedDatas.length; i++){ let field = crossedDatas[i].field, data = crossedDatas[i].data; let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, data, 'reference'); if(isRepeat){ crossedDatas.splice(i--, 1); } } for(let i=0; i< crossedDatas.length; i++){ let field = crossedDatas[i].field, data = crossedDatas[i].data; if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){ crossedDatas.splice(i--, 1); } } } if(uncrossedDatas.length > 0){ for(let i=0; i< uncrossedDatas.length; i++){ let field = uncrossedDatas[i].field; let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, uncrossedDatas[i].data, 'reference'); if(isRepeat){ uncrossedDatas.splice(i--, 1); } } for(let i=0; i< uncrossedDatas.length; i++){ let field = uncrossedDatas[i].field; if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){ uncrossedDatas.splice(i--, 1); } } rebuildArr = tools.rebuildArr(uncrossedDatas, 'create'); function myCompare(a, b){ if(a.rowIdx > b.rowIdx) return 1; if(a.rowIdx < b.rowIdx) return -1; return 0; } function myCompareCode(a, b){ if(a.code > b.code) return -1; if(a.code < b.code) return 1; return 0; } if(rebuildArr.length > 0){ rebuildArr.sort(myCompareCode); if(rebuildArr[0].code){ maxJobsNumber = maxJobsNumber + 1 > rebuildArr[0].code ? maxJobsNumber : rebuildArr[0].code; } rebuildArr.forEach(function(data){ if(data.type !== 'CreateT' && data.field === 'content' ){ maxJobsNumber++; let code = maxJobsNumber; data.code = code; } }); } //rebuildArr.sort(myCompare); } //rebuildArr.sort(myCompare); pasteDatas = { updateDatas: crossedDatas, createDatas: rebuildArr } return pasteDatas; }, encapTotalItemsDatas: function(sheet, totalItems, uncrossedDatas, crossedDatas){ let pasteDatas; let rebuildArr =[]; if(crossedDatas.length > 0){ for(let i=0; i< crossedDatas.length; i++){ let field = crossedDatas[i].field, data = crossedDatas[i].data; let isRepeat = tools.isRepeat(totalItems.itemsArr, field, data, 'reference'); if(isRepeat){ crossedDatas.splice(i--, 1); } } for(let i=0; i< crossedDatas.length; i++){ let field = crossedDatas[i].field, data = crossedDatas[i].data; if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){ crossedDatas.splice(i--, 1); } } } if(uncrossedDatas.length > 0){ for(let i=0; i< uncrossedDatas.length; i++){ let field = uncrossedDatas[i].field; let isRepeat = tools.isRepeat(totalItems.itemsArr, field, uncrossedDatas[i].data, 'reference'); if(isRepeat){ uncrossedDatas.splice(i--, 1); } } for(let i=0; i< uncrossedDatas.length; i++){ let field = uncrossedDatas[i].field; if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){ uncrossedDatas.splice(i--, 1); } } rebuildArr = tools.rebuildArr(uncrossedDatas, 'create'); function myCompare(a, b){ if(a.rowIdx > b.rowIdx) return 1; if(a.rowIdx < b.rowIdx) return -1; return 0; } function myCompareCode(a, b){ if(a.code > b.code) return -1; if(a.code < b.code) return 1; return 0; } //rebuildArr.sort(myCompare); if(rebuildArr.length > 0){ rebuildArr.sort(myCompareCode); if(rebuildArr[0].code){ maxItemsNumber = maxItemsNumber + 1 > rebuildArr[0].code ? maxItemsNumber : rebuildArr[0].code; } rebuildArr.forEach(function(data){ if(data.type !== 'CreateT' && data.field === 'content' ){ maxItemsNumber ++; let code = maxItemsNumber; data.code = code; } }); } } // rebuildArr.sort(myCompare); pasteDatas = { updateDatas: crossedDatas, createDatas: rebuildArr } return pasteDatas; }, encapValues: function(sheet, totalItems, uncrossedDatas, crossedDatas){ let rebuildArr =[]; let rebuildUpdateDatas = []; let valuesArr = valueController.getValues(totalItems, selectedId); function myCompare(a, b){ if(a.rowIdx > b.rowIdx) return 1; if(a.rowIdx < b.rowIdx) return -1; return 0; } if(crossedDatas.length > 0){ for(let i=0; i< crossedDatas.length; i++){ let field = crossedDatas[i].field, data = crossedDatas[i].data; let isRepeat = tools.isRepeat(valuesArr, field, data, 'document', 'value'); if(isRepeat){ crossedDatas.splice(i--, 1); } } for(let i=0; i< crossedDatas.length; i++){ let field = crossedDatas[i].field, data = crossedDatas[i].data; if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){ crossedDatas.splice(i--, 1); } } rebuildUpdateDatas = tools.rebuildArr(crossedDatas, 'update'); rebuildUpdateDatas.sort(myCompare); for(let i =0; i< rebuildUpdateDatas.length; i++){ rebuildUpdateDatas[i].itemId = selectedId; } } if(uncrossedDatas.length > 0){ for(let i=0; i< uncrossedDatas.length; i++){ let field = uncrossedDatas[i].field; let isRepeat = tools.isRepeat(valuesArr, field, uncrossedDatas[i].data, 'document', 'value'); if(isRepeat){ uncrossedDatas.splice(i--, 1); } } for(let i=0; i< uncrossedDatas.length; i++){ let field = uncrossedDatas[i].field; if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){ uncrossedDatas.splice(i--, 1); } } rebuildArr = tools.rebuildArr(uncrossedDatas, 'create'); //rebuildArr.sort(myCompare); function myCompareCode(a, b){ let valA = a.code, valB = b.code; return valB- valA; } rebuildArr.sort(myCompareCode); let newCode = valueController.getCode(totalItems, selectedId); if(rebuildArr[0].code){ newCode = newCode > rebuildArr[0].code ? newCode : rebuildArr[0].code + 1; } for(let i=0; i< rebuildArr.length; i++){ rebuildArr[i].itemId = selectedId; if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'value'){ rebuildArr[i].code = newCode; newCode++; } } } //backendOP let pasteDatas = { updateDatas: rebuildUpdateDatas, createDatas: rebuildArr }; return pasteDatas; }, rebuildArr: function(arr, classify){ let conformDatas = []; let flag = true; for(let i=0; i< arr.length; i++){ for(let j=i+1; j 0){ for(let i=0; i { if(job.data.content === datas[i].newData){ let serialNo = datas[i].serialNo; let index = tools.getIndex(controller.tree.selected.jobs, datas[i].orgJobId, 'job'); job.count ++; controller.tree.selected.jobs.splice(index, 1); controller.tree.selected.jobs.splice(index, 0, {job: job, serialNo: serialNo}); } }); } else if(datas[i].type === UpdateNew){ let newJobData, newJob; let newJobId = datas[i].newJobId, serialNo = datas[i].serialNo; newJobData = {id: newJobId, content: datas[i].newData, code: datas[i].code}; newJob = createObj.newJob(newJobData); newJob.count = 1; totalJobs.jobs[totalJobs.prefix + newJobId] = newJob; totalJobs.jobsArr.push(newJob); var index = tools.getIndex(controller.tree.selected.jobs, datas[i].orgJobId, 'job'); controller.tree.selected.jobs.splice(index, 1); controller.tree.selected.jobs.splice(index, 0, {job: newJob, serialNo: serialNo}); } else if(datas[i].type === CreateExist){ let serialNo = datas[i].serialNo; totalJobs.jobsArr.forEach(job => { if(job.data.content === datas[i].newData){ job.count ++; controller.tree.selected.jobs.push({job: job, serialNo: serialNo}); } }); } else if(datas[i].type === CreateNew){ let newJobId = datas[i].newJobId, serialNo = datas[i].serialNo; let newJobData, newJob; newJobData = {id: newJobId, content: datas[i].newData, code: datas[i].code}; newJob = createObj.newJob(newJobData); newJob.count = 1; totalJobs.jobs[totalJobs.prefix + newJobId] = newJob; totalJobs.jobsArr.push(newJob); controller.tree.selected.jobs.push({job: newJob, serialNo: serialNo}); } } } } //resort&reshow tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true); sheetDatas = tools.getsheetDatas(sheet); }, frontItemsRelOperator: function(sheet, setting, controller, totalItems, datas){ const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew'; if(datas.length > 0){ for(let i =0; i { if(item.data.content === datas[i].newData){ let index = tools.getIndex(controller.tree.selected.items, datas[i].orgItemId, 'item'); item.count ++; controller.tree.selected.items.splice(index, 1); controller.tree.selected.items.splice(index, 0, {item: item, serialNo: serialNo}); } }); } else if(datas[i].type === UpdateNew){ let newItemData, newItem; let newItemId = datas[i].newItemId, serialNo = datas[i].serialNo; newItemData = {id: newItemId, content: datas[i].newData, code: datas[i].code}; newItem = createObj.newItem(newItemData); newItem.count = 1; totalItems.items[totalItems.prefix + newItemId] = newItem; totalItems.itemsArr.push(newItem); var index = tools.getIndex(controller.tree.selected.items, datas[i].orgItemId, 'item'); controller.tree.selected.items.splice(index, 1); controller.tree.selected.items.splice(index, 0, {item: newItem, serialNo: serialNo}); } else if(datas[i].type === CreateExist){ let serialNo = datas[i].serialNo; totalItems.itemsArr.forEach(item => { if(item.data.content === datas[i].newData){ item.count ++; controller.tree.selected.items.push({item: item, serialNo: serialNo}); } }); } else if(datas[i].type === CreateNew){ let newItemId = datas[i].newItemId, serialNo = datas[i].serialNo; let newItemData, newItem; newItemData = {id: newItemId, content: datas[i].newData, code: datas[i].code}; newItem = createObj.newItem(newItemData); newItem.count = 1; totalItems.items[totalItems.prefix + newItemId] = newItem; totalItems.itemsArr.push(newItem); controller.tree.selected.items.push({item: newItem, serialNo: serialNo}); } } } } //resort&reshow tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true); sheetItemsDatas = tools.getsheetDatas(sheet); }, pasteJobsFront: function(sheet, totalJobs, datas){ const Update = 'Update', CreateT = 'CreateT'; if(datas.length > 0){ for(let i=0; i { if(job.data.id === datas[i].orgId){ job.data[datas[i].field] = datas[i].data; } }); } else if(datas[i].type === CreateT){ //maxJobsNumber++; // maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code; newJobData = {id: datas[i].newJobId, content: datas[i].content, code: datas[i].code}; newJob = createObj.newJob(newJobData); totalJobs.jobsArr.push(newJob); } else if(datas[i].type !== CreateT && datas[i].field === 'content'){ newJobData = {id: datas[i].newJobId, content: datas[i].data, code: datas[i].code}; newJob = createObj.newJob(newJobData); totalJobs.jobsArr.push(newJob); } else if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){ // maxJobsNumber++; // maxJobsNumber = maxJobsNumber >= datas[i].data ? maxJobsNumber : datas[i].data; newJobData = {id: datas[i].newJobId, content: '', code: datas[i].data}; newJob = createObj.newJob(newJobData); totalJobs.jobsArr.push(newJob); } } } } setSheet.setMaxRowCount(sheet, totalJobs.jobsArr); tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true); sheetJobsDatas = tools.getsheetDatas(sheet, 'total'); }, pasteItemsFront: function(sheet, totalItems, datas){ const Update = 'Update', CreateT = 'CreateT'; if(datas.length > 0){ for(let i=0; i { if(item.data.id === datas[i].orgId){ item.data[datas[i].field] = datas[i].data; } }); } else if(datas[i].type === CreateT){ newItemData = {id: datas[i].newItemId, content: datas[i].content, code: datas[i].code}; newItem = createObj.newItem(newItemData); totalItems.itemsArr.push(newItem); totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem; } else if(datas[i].type !== CreateT && datas[i].field === 'content'){ newItemData = {id: datas[i].newItemId, content: datas[i].data, code: datas[i].code}; newItem = createObj.newItem(newItemData); totalItems.itemsArr.push(newItem); totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem; } else if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){ newItemData = {id: datas[i].newItemId, content: '', code: datas[i].data}; newItem = createObj.newItem(newItemData); totalItems.itemsArr.push(newItem); totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem; } } } } setSheet.setMaxRowCount(sheet, totalItems.itemsArr); tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true); totalItemsDatas = tools.getsheetDatas(sheet, 'total'); }, pasteValueFront: function(sheet, totalItems, datas){ let backendUpdateDatas = []; let valuesArr = valueController.getValues(totalItems, selectedId); if(datas.length > 0){ for(let i =0; i< datas.length; i++){ let index; if(datas[i]){ if(datas[i].type === 'UpdateT'){ if(valuesArr){ for(let j=0; j< valuesArr.length; j++){ if(datas[i].orgId === valuesArr[j].code){ index = j; valuesArr.splice(j--, 1); } } let updateEle = {code: datas[i].code, value: datas[i].content}; valuesArr.splice(index, 0, updateEle); } } else if(datas[i].type !== 'UpdateT' && datas[i].field === 'code'){ if(valuesArr){ for(let j=0; j< valuesArr.length; j++){ if(datas[i].orgId === valuesArr[j].code){ valuesArr[j].code = datas[i].data; } } } } else if(datas[i].type !== 'UpdateT' && datas[i].field === 'value'){ if(valuesArr){ for(let j=0; j< valuesArr.length; j++){ if(datas[i].orgId === valuesArr[j].code){ valuesArr[j].value = datas[i].data } } } } else if(datas[i].type === 'CreateT'){ let newValueData = {value: datas[i].content, code: datas[i].code}; valuesArr.push(newValueData); } else if(datas[i].type !== 'CreateT' && datas[i].field === 'value'){ let newValueData = {value: datas[i].data, code: datas[i].code}; valuesArr.push(newValueData); } else if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){ let newValueData = {value: '', code: datas[i].data}; valuesArr.push(newValueData); } } } } tools.reshowValue(sheet, valuesArr, eigenValueSetting, true); valueDatas = tools.getsheetDatas(sheet, 'total'); } }; var jobsController = { currentEditData: null, editData: function(controller, sheet, totalJobs, setting){ let me = jobsController; sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) { me.currentEditData = sheet.getValue(args.row, args.col) + ''; }); sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) { var field, newData = args.editingText + '', id = sheet.getTag(args.row, args.col); setting.cols.forEach(function (col, idx) { if (args.col === idx) { field = col.data.field; } }); if (controller.tree.selected && newData !== me.currentEditData) { var isExist = tools.isExist(totalJobs.jobsArr, field, newData); var isRepeat = tools.isRepeat(controller.tree.selected.jobs, field ,newData, 'reference', 'job'); //create if(!id && newData && !isRepeat){ if(isExist){ jobsController.createExist(sheet, controller, totalJobs, field, newData, args, setting); } else { jobsController.createNew(sheet, controller, totalJobs, field, newData, args, setting); } } //update else if(id && !isRepeat){ jobsController.update(sheet, controller, totalJobs, field, newData, id, isExist, args, setting); } //处理重复 if(isRepeat){ tools.alertOpr(args, sheet, '该工作内容已存在!', controller.tree.selected.jobs, 'job'); } } else { sheet.getCell(args.row, args.col).value(me.currentEditData + ''); } }); }, createNew: function(sheet, controller, totalJobs, field, newData, args, setting){ if(field === 'content'){ maxJobsNumber++; //update-- let serialNo = tools.getSerialNo(controller.tree.selected.jobs); //-- jobsAjax.edCreateJob(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxJobsNumber, serialNo, function(newJobId){ var newJobData, newJob; newJobData = {id: newJobId, content: newData, code: maxJobsNumber}; newJob = createObj.newJob(newJobData); newJob.count = 1; totalJobs.jobs[totalJobs.prefix + newJobId] = newJob; totalJobs.jobsArr.push(newJob); controller.tree.selected.jobs.push({job: newJob, serialNo: serialNo});//update-- tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true)//update-- }); } else { tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.jobs, 'job'); } }, createExist: function(sheet, controller, totalJobs, field, newData, args, setting){ totalJobs.jobsArr.forEach(function(job){ if(field === 'content'&& newData === job.data.content){ let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update-- //billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data.id);//update-- billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'jobs', {id: job.data.id, serialNo: serialNo});//update-- job.count++; // controller.tree.selected.jobs.push(job);//update-- controller.tree.selected.jobs.push({job: job, serialNo: serialNo});//update-- //tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update-- tools.orderReshowData(sheet,controller.tree.selected.jobs, setting, 'job', true); } else if(field == 'code' && newData == job.data.code){ let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update-- billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'jobs', {id: job.data.id, serialNo: serialNo});//update-- job.count++; controller.tree.selected.jobs.push({job: job, serialNo: serialNo});//update-- // tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update-- tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true); } }); }, update: function(sheet, controller, totalJobs, field, newData, id, isExist, args, setting){ if(isExist){ totalJobs.jobsArr.forEach(function(job){ if(field == 'code' && job.data[field] == newData){ let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;//update--add let index = tools.getIndex(controller.tree.selected.jobs, id, 'job');//update-- getIndex job.count++; controller.tree.selected.jobs.splice(index, 1); controller.tree.selected.jobs.splice(index, 0, {job: job, serialNo: serialNo});//update-- billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs'); tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true); } if(field === 'content' && job.data[field] === newData){ let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo;//update--add let index = tools.getIndex(controller.tree.selected.jobs, id, 'job'); job.count++; controller.tree.selected.jobs.splice(index, 1); controller.tree.selected.jobs.splice(index, 0, {job: job, serialNo: serialNo});//update-- billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, job.data.id, 'update', 'jobs'); // tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update-- tools.orderReshowData(sheet,controller.tree.selected.jobs, setting, 'job', true); } }); } else{ if(field === 'content'){ maxJobsNumber++; //let serialNo = tools.getSerialNo(controller.tree.selected.jobs);//update-- let serialNo = tools.getObj(controller.tree.selected.jobs, id, 'job').serialNo; jobsAjax.edUpdateJob(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxJobsNumber, id, function(newJobId){//update-- var newJobData, newJob; newJobData = {id: newJobId, content: newData, code: maxJobsNumber}; newJob = createObj.newJob(newJobData); newJob.count = 1; totalJobs.jobs[totalJobs.prefix + newJobId] = newJob; totalJobs.jobsArr.push(newJob); var index = tools.getIndex(controller.tree.selected.jobs, id, 'job'); controller.tree.selected.jobs.splice(index, 1); controller.tree.selected.jobs.splice(index, 0, {job: newJob, serialNo: serialNo});//update-- //tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update-- tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);//update-- }); } else { tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.jobs, 'job'); /* //todo: 提示窗口 console.log(`enter`); console.log(typeof newData); if(typeof newData === 'number'){ console.log(`orgJobData: ${orgJobData}`); sheet.getCell(args.row, args.col).value(orgJobData); } else { //编号只能是数字 sheet.getCell(args.row, args.col).value(''); }*/ } } }, upMove: function (controller, sheet) { let updateSelArr = []; $('#upMove').attr('doing', 'true'); tools.btnClose($('#upMove')); let args = controller.tree.selected.args, thisJob = controller.tree.selected.jobs[args.row], preJob = controller.tree.selected.jobs[args.row - 1], tempSerialNo; //switch serialNo tempSerialNo = thisJob.serialNo; thisJob.serialNo = preJob.serialNo; preJob.serialNo = tempSerialNo; updateSelArr.push({id: thisJob.job.data.id, serialNo: thisJob.serialNo}); updateSelArr.push({id: preJob.job.data.id, serialNo: preJob.serialNo}); billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'jobs', function () { tools.orderReshowData(sheet, controller.tree.selected.jobs, jobsSetting, 'job', true); sheet.setActiveCell(args.row -1, args.col); controller.tree.selected.args.row = args.row - 1; $('#upMove').attr('doing', 'false'); if(tools.canUpMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){ $('#upMove').attr('canMove', 'true'); tools.btnAction($('#upMove')); } else{ $('#upMove').attr('canMove', 'false'); } if(tools.canDownMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){ $('#downMove').attr('canMove', true); tools.btnAction($('#downMove')); } else{ $('#downMove').attr('canMove', 'false'); tools.btnClose($('#downMove')); } }); }, downMove: function (controller, sheet) { let updateSelArr = []; $('#downMove').attr('doing', 'true'); tools.btnClose($('#downMove')); let tempSerialNo = controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo; controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo = controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo; controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo = tempSerialNo; updateSelArr.push({id: controller.tree.selected.jobs[controller.tree.selected.args.row].job.data.id, serialNo: controller.tree.selected.jobs[controller.tree.selected.args.row].serialNo}); updateSelArr.push({id: controller.tree.selected.jobs[controller.tree.selected.args.row + 1].job.data.id, serialNo: controller.tree.selected.jobs[controller.tree.selected.args.row + 1].serialNo}); billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'jobs', function () { tools.orderReshowData(sheet, controller.tree.selected.jobs, jobsSetting, 'job', true); sheet.setActiveCell(controller.tree.selected.args.row + 1, controller.tree.selected.args.col); controller.tree.selected.args.row = controller.tree.selected.args.row + 1; $('#downMove').attr('doing', 'false'); if(tools.canDownMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){ $('#downMove').attr('canMove', 'true'); tools.btnAction($('#downMove')); } else{ $('#downMove').attr('canMove', 'false'); } if(tools.canUpMove(controller.tree.selected.jobs[controller.tree.selected.args.row], controller.tree.selected.jobs)){ $('#upMove').attr('canMove', 'true'); tools.btnAction($('#upMove')); } else{ $('#upMove').attr('canMove', 'false'); tools.btnClose($('#upMove')); } }); } }; var itemsController = { currentEditData: null, editData: function(controller, sheet, totalItems, setting){ let me = itemsController; sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) { me.currentEditData = sheet.getValue(args.row, args.col) + ''; }) sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args) { var field, newData = args.editingText + '', id = sheet.getTag(args.row, args.col); setting.cols.forEach(function (col, idx) { if (args.col === idx) { field = col.data.field; } }); if (controller.tree.selected && newData !== me.currentEditData) { var isExist = tools.isExist(totalItems.itemsArr, field, newData); var isRepeat = tools.isRepeat(controller.tree.selected.items, field ,newData, 'reference', 'item'); //create if(!id && newData && !isRepeat){ if(isExist){ itemsController.createExist(sheet, controller, totalItems, field, newData, args, setting); } else { itemsController.createNew(sheet, controller, totalItems, field, newData, args, setting); } } //update else if(id && !isRepeat){ itemsController.update(sheet, controller, totalItems, field, newData, id, isExist, args, setting); } //处理重复 if(isRepeat){ tools.alertOpr(args, sheet, '该项目特征已存在!', controller.tree.selected.items, 'item'); } } else { sheet.getCell(args.row, args.col).value(me.currentEditData + ''); } }); }, createNew: function(sheet, controller, totalItems, field, newData, args, setting){ if(field === 'content'){ maxItemsNumber++; let serialNo = tools.getSerialNo(controller.tree.selected.items); itemsAjax.edCreateItem(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxItemsNumber, serialNo, function(newItemId){ let newItemData, newItem; newItemData = {id: newItemId, content: newData, code: maxItemsNumber}; newItem = createObj.newItem(newItemData); newItem.count = 1; totalItems.items[totalItems.prefix + newItemId] = newItem; totalItems.itemsArr.push(newItem); controller.tree.selected.items.push({item: newItem, serialNo: serialNo}); //tools.reshowData(sheet, controller.tree.selected.items, setting, true); tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true); }); } else { tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.items, 'item'); } }, createExist: function(sheet, controller, totalItems, field, newData, args, setting){ totalItems.itemsArr.forEach(function(item){ if(field === 'content'&& newData === item.data.content){ let serialNo = tools.getSerialNo(controller.tree.selected.items); billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'items', {id: item.data.id, serialNo: serialNo}); item.count++; controller.tree.selected.items.push({item: item, serialNo: serialNo}); tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true); } else if(field == 'code' && newData == item.data.code){ let serialNo = tools.getSerialNo(controller.tree.selected.items); billsAjax.updateBills(userAccount, billsLibId, controller.tree.selected.getID(), 'items', {id: item.data.id, serialNo: serialNo}); item.count++; controller.tree.selected.items.push({item: item, serialNo: serialNo}); tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true); } }); }, update: function(sheet, controller, totalItems, field, newData, id, isExist, args, setting){ if(isExist){ totalItems.itemsArr.forEach(function(item){ if(field == 'code' && item.data[field] == newData){ let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo; let index = tools.getIndex(controller.tree.selected.items, id, 'item'); item.count++; controller.tree.selected.items.splice(index, 1); controller.tree.selected.items.splice(index, 0, {item: item, serialNo: serialNo}); billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items'); tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true); } if(field === 'content' && item.data[field] === newData){ let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo; let index = tools.getIndex(controller.tree.selected.items, id, 'item'); item.count++; controller.tree.selected.items.splice(index, 1); controller.tree.selected.items.splice(index, 0, {item: item, serialNo: serialNo}); billsAjax.updateBillsArr(userAccount, billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items'); tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true); } }); } else{ if(field === 'content'){ maxItemsNumber++; let serialNo = tools.getObj(controller.tree.selected.items, id, 'item').serialNo; itemsAjax.edUpdateItem(userAccount, billsLibId, controller.tree.selected.getID(), newData, maxItemsNumber, id, function(newItemId){ var newItemData, newItem; newItemData = {id: newItemId, content: newData, code: maxItemsNumber}; newItem = createObj.newItem(newItemData); newItem.count = 1; totalItems.items[totalItems.prefix + newItemId] = newItem; totalItems.itemsArr.push(newItem); var index = tools.getIndex(controller.tree.selected.items, id, 'item'); controller.tree.selected.items.splice(index, 1); controller.tree.selected.items.splice(index, 0, {item: newItem, serialNo: serialNo}); tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true); }); } else { tools.alertOpr(args, sheet, '该编号不存在,请重新输入!', controller.tree.selected.items, 'item'); } } }, upMove: function (controller, sheet) { let updateSelArr = []; $('#upMove').attr('doing', 'true'); tools.btnClose($('#upMove')); let tempSerialNo = controller.tree.selected.items[controller.tree.selected.args.row].serialNo; controller.tree.selected.items[controller.tree.selected.args.row].serialNo = controller.tree.selected.items[controller.tree.selected.args.row -1].serialNo; controller.tree.selected.items[controller.tree.selected.args.row -1].serialNo = tempSerialNo; updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row].serialNo}); updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row -1].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row -1].serialNo}); billsAjax.updateSerialNo(billsLibId, controller.tree.selected.getID(), updateSelArr, 'items', function () { tools.orderReshowData(sheet, controller.tree.selected.items, itemsSetting, 'item', true); sheet.setActiveCell(controller.tree.selected.args.row -1, controller.tree.selected.args.col); controller.tree.selected.args.row = controller.tree.selected.args.row -1; $('#upMove').attr('doing', 'false'); if(tools.canUpMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)){ $('#upMove').attr('canMove', 'true'); tools.btnAction($('#upMove')); } else{ $('#upMove').attr('canMove', 'false'); } if(tools.canDownMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)){ $('#downMove').attr('canMove', 'true'); tools.btnAction($('#downMove')); } else{ $('#downMove').attr('canMove', 'false'); tools.btnClose($('#downMove')); } }); }, downMove: function (controller, sheet) { let updateSelArr = []; $('#downMove').attr('doing', 'true'); tools.btnClose($('#downMove')); let tempSerialNo = controller.tree.selected.items[controller.tree.selected.args.row].serialNo; controller.tree.selected.items[controller.tree.selected.args.row].serialNo = controller.tree.selected.items[controller.tree.selected.args.row + 1].serialNo; controller.tree.selected.items[controller.tree.selected.args.row + 1].serialNo = tempSerialNo; updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row].serialNo}); updateSelArr.push({id: controller.tree.selected.items[controller.tree.selected.args.row + 1].item.data.id, serialNo: controller.tree.selected.items[controller.tree.selected.args.row +1].serialNo}); billsAjax.updateSerialNo(userAccount, billsLibId, controller.tree.selected.getID(), updateSelArr, 'items', function () { tools.orderReshowData(sheet, controller.tree.selected.items, itemsSetting, 'item', true); sheet.setActiveCell(controller.tree.selected.args.row +1, controller.tree.selected.args.col); controller.tree.selected.args.row = controller.tree.selected.args.row +1; $('#downMove').attr('doing', 'false'); if(tools.canDownMove(controller.tree.selected.items[controller.tree.selected.args.row], controller.tree.selected.items)){ $('#downMove').attr('canMove', 'true'); tools.btnAction($('#downMove')); } else{ $('#downMove').attr('canMove', 'false'); } if(tools.canUpMove(controller.tree.selected.items[controlle.tree.selected.args.row], controller.tree.selected.items)){ $('#upMove').attr('canMove', 'true'); tools.btnAction($('#upMove')); } else{ $('#upMove').attr('canMove', 'false'); tools.btnClose($('#upMove')); } }); } }; var valueController = { currentEditData: null, editData: function(totalItems, sheet, setting){ let me = valueController; sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) { me.currentEditData = sheet.getValue(args.row, args.col) + ''; }) sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){ var newValue = args.editingText + '', tagId = sheet.getTag(args.row, args.col), field, isRepeat; setting.cols.forEach(function(col, colIdx){ if(args.col === colIdx){ field = col.data.field; } }); if(selectedId && newValue!== me.currentEditData){ isRepeat = tools.isRepeat(valueController.getValues(totalItems, selectedId), field, newValue, 'document'); if(!tagId && !isRepeat && newValue){//create valueController.createValue(sheet, totalItems, selectedId, field, newValue); } else if(tagId && !isRepeat){//update valueController.updateValue(userAccount, totalItems, tagId, newValue, field); } if(isRepeat){ if(tagId && newValue){ sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(me.currentEditData); } else { sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(''); } } } else{ sheet.getCell(args.row, args.col).value(me.currentEditData + ''); } }); }, createValue: function(sheet, totalItems, id, field, newValue){ var newData; if(field === 'value'){ var newCode = valueController.getCode(totalItems, id); newData = {code: newCode, value: newValue}; tools.reSetCell(sheet, sheet.getActiveRowIndex(), 0, newCode, newCode); } else { if(typeof newValue === 'number'){ newData = {code: newValue, value: ''}; tools.reSetCell(sheet, sheet.getActiveRowIndex(), null, null, newValue); } else { //编号只能为数字! sheet.getCell(args.row, args.col).value(''); } } totalItems.findItem(id).data.itemValue.push(newData); itemsAjax.updateValue(userAccount, billsLibId, id, newData, null, 'create'); valueDatas = tools.getsheetDatas(sheet, 'total'); }, updateValue: function(totalItems, tagId, newData, field){ var updateData = {code: tagId, newData: newData, field: field}; var itemVals = totalItems.findItem(selectedId).data.itemValue; if(field === 'value'){ var updateEle = {code: tagId, value: newData}; if(itemVals){ var index; itemVals.forEach(function(val){ if(val.code === tagId){ index = itemVals.indexOf(val); itemVals.splice(index, 1); } }); itemVals.splice(index, 0, updateEle); } itemsAjax.updateValue(userAccount, billsLibId, selectedId, updateData, null, 'update'); } else { if(typeof newData === 'number'){ if(itemVals){ var updateEle; var index; itemVals.forEach(function(val){ if(val.code === tagId){ updateEle = {code: newData, value: val.value}; index = itemVals.indexOf(val); itemVals.splice(index, 1); } }); itemVals.splice(index, 0, updateEle); } itemsAjax.updateValue(userAccount, billsLibId, selectedId, updateData, null, 'update'); } else { //编号只能为数字! sheet.getCell(args.row, args.col).value(''); } } }, getValues: function(totalItems, id){ return totalItems.findItem(id).data.itemValue; }, getTopItem: function(totalItems){ tools.resort(totalItems.itemsArr, 'code', false); return totalItems.itemsArr.length > 0 ? totalItems.itemsArr[0] : null }, getCode: function(totalItems, id){ var valArr = totalItems.findItem(id).data.itemValue; if(valArr){ tools.resort(valArr, 'code', true); return valArr.length > 0 ? valArr[valArr.length - 1].code + 1 : 1; }else { return 1; } }, isRepeat: function(arr, newValue){ var isRepeat = false; arr.forEach(function(itemValue){ if(itemValue.value === newValue){ isRepeat = true; } }); return isRepeat; } }; var totalJobsController = { currentEditData: null, eiditData: function(totalJobs, sheet, setting){ let me = totalJobsController; sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) { me.currentEditData = sheet.getValue(args.row, args.col) + ''; }) sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){ var newData = args.editingText + '', tagId = sheet.getTag(args.row, args.col), field, isRepeat; setting.cols.forEach(function(col, colIdx){ if(args.col === colIdx){ field = col.data.field; } }); if(newData !== me.currentEditData){ isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference', null); if(!tagId && !isRepeat && newData){//create totalJobsController.createJob(sheet, totalJobs, field, newData, args); } else if(tagId && !isRepeat){//update totalJobsController.updateJob(totalJobs, tagId, field, newData, args); } if(isRepeat){ tools.alertTotalOpr(args, '该工作内容已存在!', totalJobs.jobsArr); } } else{ sheet.getCell(args.row, args.col).value(me.currentEditData + ''); } }); }, createJob: function(sheet, totalJobs, field, newData, args){ if(field === 'content'){ maxJobsNumber++; let code = maxJobsNumber; jobsAjax.createJobContent(userAccount, billsLibId, newData, code, function(newJobId){ let newJobData, newJob; newJobData = {id: newJobId, content: newData, code: code}; newJob = createObj.newJob(newJobData); totalJobs.jobsArr.push(newJob); //tools.reSetCell(sheet, args.row, 0, code, newJobId); tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true); setSheet.setMaxRowCount(sheet, totalJobs.jobsArr); sheetJobsDatas = tools.getsheetDatas(sheet, 'total'); }); } else { let parseNum = parseInt(newData); //if(typeof newData === 'number'){ if(!isNaN(parseNum)){ maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData; jobsAjax.createJobContent(userAccount, billsLibId, '', newData, function(newJobId){ let newJobData, newJob; newJobData = {id: newJobId, content: '', code: newData}; newJob = createObj.newJob(newJobData); totalJobs.jobsArr.push(newJob); //tools.reSetCell(sheet, args.row, 0, null, newJobId); tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true); setSheet.setMaxRowCount(sheet, totalJobs.jobsArr); sheetJobsDatas = tools.getsheetDatas(sheet, 'total'); }); } else { //编号只能为数字! tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalJobs.jobsArr); // sheet.getCell(args.row, args.col).value(""); } } }, updateJob: function(totalJobs, id, field, newData, args){ // if(field === 'code' && typeof newData !== 'number'){ if(field === 'code' && isNaN(parseInt(newData))){ tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalJobs.jobsArr); } else { totalJobs.jobsArr.forEach(function(job){ if(job.data.id === id){ job.data[field] = newData; } }); tools.reshowData(args.sheet, totalJobs.jobsArr, totalJobsSetting, true); jobsAjax.updateJobContent(userAccount, billsLibId, id, field, newData); } } }; var totalItemsController = { currentEditData: null, eiditData: function(totalItems, sheet, setting){ let me = totalItemsController; sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) { me.currentEditData = sheet.getValue(args.row, args.col) + ''; }); sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){ var newData = args.editingText + '', tagId = sheet.getTag(args.row, args.col), field, isRepeat; setting.cols.forEach(function(col, colIdx){ if(args.col === colIdx){ field = col.data.field; } }); if(newData !== me.currentEditData){ isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference', null); if(!tagId && !isRepeat && newData){//create totalItemsController.createItem(sheet, totalItems, field, newData, args); } else if(tagId && !isRepeat ){//update totalItemsController.updateItem(totalItems, tagId, field, newData, args); } else if(isRepeat){ tools.alertTotalOpr(args, '该项目特征已存在!', totalItems.itemsArr); } } else{ sheet.getCell(args.row, args.col).value(me.currentEditData + ''); } }); }, createItem: function(sheet, totalItems, field, newData, args){ if(field === 'content'){ maxItemsNumber++; let code = maxItemsNumber; itemsAjax.createItemCharacter(userAccount, billsLibId, newData, code, function(newItemId){ var newItemData, newItem; newItemData = {id: newItemId, content: newData, code: code, itemValue: []}; newItem = createObj.newItem(newItemData); totalItems.itemsArr.push(newItem); totalItems.items[totalItems.prefix + newItemId] = newItem; //tools.reSetCell(sheet, args.row, 0, code, newItemId); tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true); setSheet.setMaxRowCount(sheet, totalItems.itemsArr); totalItemsDatas = tools.getsheetDatas(sheet, 'total'); }); } else { if(!isNaN(parseInt(newData))){ maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData; itemsAjax.createItemCharacter(userAccount, billsLibId, '', newData, function(newItemId){ var newItemData, newItem; newItemData = {id: newItemId, content: '', code: newData, itemValue: []}; newItem = createObj.newItem(newItemData); totalItems.itemsArr.push(newItem); totalItems.items[totalItems.prefix + newItemId] = newItem; //tools.reSetCell(sheet, args.row, 0, null, newItemId); tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true); setSheet.setMaxRowCount(sheet, totalItems.itemsArr); totalItemsDatas = tools.getsheetDatas(sheet, 'total'); }); } else { tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalItems.itemsArr); } } }, updateItem: function(totalItems, id, field, newData, args){ if(field === 'code' && isNaN(parseInt(newData))){ tools.alertTotalOpr(args, '编号只能为数字,请重新输入!', totalItems.itemsArr); } else { totalItems.itemsArr.forEach(function(item){ if(item.data.id === id){ item.data[field] = newData; } }); tools.reshowData(args.sheet, totalItems.itemsArr, totalItemsSetting, true); itemsAjax.updateItemCharacter(userAccount, billsLibId, id, field, newData); } } }; var rechargeController = { updateRechar: function(selectedNode, newData){ if(selectedNode){ var updateId = selectedNode.getID(); selectedNode.data.recharge = newData; /*var getupdateIds = function(node){ updateIds.push(node.getID()); node.data.recharge = newData; if(node.children.length > 0){ node.children.forEach(function(node){ getupdateIds(node); }); } } getupdateIds(tools.getRoot(selectedNode));*/ billsAjax.updateRecharge(userAccount, billsLibId, updateId, newData); } else { $('exampleTextarea').val(''); } }, createRecharge: function(node){ if(node){ var tempId = []; tempId.push(node.getID()); var rootNode = tools.getRoot(node); if(rootNode.data.recharge && rootNode !== node){ billsAjax.updateRecharge(userAccount, billsLibId, tempId, rootNode.data.recharge); node.data.recharge = rootNode.data.recharge; $('#exampleTextarea').val(node.data.recharge); } else { node.data.recharge = ''; $('#exampleTextarea').val(''); } } else { $('exampleTextarea').val(''); } } };