|
@@ -229,13 +229,16 @@
|
|
|
autoFlashHeight();
|
|
|
var billsTree = billsLibTree.createBillsTree();
|
|
|
var billsLibId = getQueryString("billsLibId");
|
|
|
+ var jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
|
|
|
$(document).ready(function(){
|
|
|
$("#aStdJobs").attr('href', function(){
|
|
|
return 'stdJobs?billsLibId=' + billsLibId;
|
|
|
});
|
|
|
billsAjax.getStdBillsLibName(billsLibId);
|
|
|
- billsAjax.getBills(billsLibId);
|
|
|
- buildJobs();
|
|
|
+ billsAjax.getBills(billsLibId, function(bills){
|
|
|
+ showBillsSheet(bills, jobsSpread.getActiveSheet(), billsLibSetting)
|
|
|
+ });
|
|
|
+ buildJobs(jobsSpread);
|
|
|
buildItems();
|
|
|
});
|
|
|
//test
|
|
@@ -270,11 +273,11 @@
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- function showBillsSheet(datas){
|
|
|
+ function showBillsSheet(datas, jobsSheet, setting){
|
|
|
var billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
|
|
|
initSheet(billsSpread);
|
|
|
billsTree.loadDatas(datas);
|
|
|
- var controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), billsLibSetting);
|
|
|
+ var controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), setting);
|
|
|
controller.showTreeData();
|
|
|
if(!controller.tree.selected && controller.tree.findNode(controller.sheet.getTag(0, 0, GC.Spread.Sheets.SheetArea.viewport))){
|
|
|
controller.setTreeSelected(controller.tree.findNode(controller.sheet.getTag(0, 0, GC.Spread.Sheets.SheetArea.viewport)));
|
|
@@ -295,35 +298,176 @@
|
|
|
});
|
|
|
controller.setTreeSelected(controller.tree.findNode(controller.sheet.getTag(0,0)));
|
|
|
nodeOpration(controller);
|
|
|
+ bindSheet(controller, jobsSheet, jobsSetting);
|
|
|
+ jobsController(controller, jobsSheet, jobsSetting);
|
|
|
+ //testNodeID:
|
|
|
+ console.log('newNodeID: '+controller.tree.newNodeID());
|
|
|
+ console.log('maxNodeID: '+controller.tree.maxNodeID());
|
|
|
+ console.log('rangeNodeID: '+controller.tree.rangeNodeID());
|
|
|
+ controller.tree.maxNodeID(100);
|
|
|
+ console.log('newNodeID: '+controller.tree.newNodeID());
|
|
|
+ //test
|
|
|
}
|
|
|
|
|
|
- function buildJobs(){
|
|
|
- var jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
|
|
|
- initSheet(jobsSpread);
|
|
|
- TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
|
|
|
+
|
|
|
+ var Job = function(node, data){
|
|
|
+ this.node = node;
|
|
|
+ this.data = data;
|
|
|
+ }
|
|
|
+
|
|
|
+ var TotalJobs = function(tree){
|
|
|
+ this.tree = tree;
|
|
|
+ this.jobs = {};
|
|
|
+ this.prefix = '_id';
|
|
|
+ }
|
|
|
+
|
|
|
+ TotalJobs.prototype.loadJobs = function (nodes){
|
|
|
+ var me = this;
|
|
|
+ nodes.forEach(function(node){
|
|
|
+ node.data.jobs.forEach(function(jobData){
|
|
|
+ var job = new Job(node, jobData);
|
|
|
+ me.jobs[me.prefix + jobData.id] = job;
|
|
|
+ node.jobs.push(job);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function bindSheet(controller, sheet, field, setting){
|
|
|
+ controller.sheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function(sender, args){
|
|
|
+ if(controller.tree.selected && args.oldSelections[0].row !== args.newSelections[0].row|| args.oldSelections[0].row === 0){
|
|
|
+ sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
|
|
|
+ sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.tag);
|
|
|
+ if(field === 'jobs'){
|
|
|
+ var jobs = controller.tree.selected.jobs;
|
|
|
+ if(jobs.length > 0){
|
|
|
+ for(var i=0; i<jobs.length; i++){
|
|
|
+ setting.cols.forEach(function(col, cidx){
|
|
|
+ sheet.setTag(i, cidx, jobs[i].data.id, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ if(jobs[i].data[col.data.field]){
|
|
|
+ sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value(jobs[i].data[col.data.field]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value('');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(field === 'items'){
|
|
|
+ var items = controller.tree.selected.data.items;
|
|
|
+ if(items.length > 0){
|
|
|
+ for(var i=0; i<items.length; i++){
|
|
|
+ setting.cols.forEach(function(col, cidx){
|
|
|
+ sheet.setTag(i, cidx, result[i].id, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ if(result[i][col.data.field]){
|
|
|
+ sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value(result[i][col.data.field]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value('');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- function jobsController(sheet, jobsSetting){
|
|
|
- jobsAjax.getJobContent(billsLibId, function(jobsArr){
|
|
|
+ function jobsController(controller, sheet, setting){
|
|
|
+ // jobsAjax.getJobContent(billsLibId, function(jobsArr){
|
|
|
+ var totalJobs = new TotalJobs(controller.tree);
|
|
|
+ totalJobs.loadJobs(controller.tree.items);
|
|
|
|
|
|
- sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
|
|
|
- var field, oldData = args.sheet.getValue(args.row, args.col), newData = args.editingText, id = sheet.getTag(args.row, args.col) ;
|
|
|
- jobsSetting.cols.forEach(function(col, idx){
|
|
|
- if(args.col === idx){
|
|
|
- field = col.data.field;
|
|
|
+ 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){
|
|
|
+ var isExist = false;
|
|
|
+ var isRepeat = false;
|
|
|
+ controller.tree.selected.jobs.forEach(function(job){
|
|
|
+ if(job.data[field] === newData && id !== job.data.id){
|
|
|
+ isRepeat = true;
|
|
|
}
|
|
|
});
|
|
|
//create
|
|
|
- if(!id && !newData){
|
|
|
- jobsAjax.createJobContent(billsLibId, field, newData);
|
|
|
+ if(!id && newData && !isRepeat){
|
|
|
+ if(totalJobs.jobs){
|
|
|
+ totalJobs.jobs.forEach(function(job){
|
|
|
+ //todo:整合代码
|
|
|
+ if(field === 'content'&& newData === job.data.content){
|
|
|
+ isExist = true;
|
|
|
+ billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job );
|
|
|
+ controller.tree.selected.jobs.push(job);
|
|
|
+ sheet.getCell(args.row, 0).value(job.data.code);
|
|
|
+ sheet.setTag(args.row, 0, job.data.id);
|
|
|
+ sheet.setTag(args.row, 1, job.data.id);
|
|
|
+ }
|
|
|
+ else if(field === 'code' && newData === job.data.code){
|
|
|
+ isExist = true;
|
|
|
+ billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job);
|
|
|
+ controller.tree.selected.data.jobs.push(job);
|
|
|
+ sheet.getCell(args.row, 1).value(job.data.content);
|
|
|
+ sheet.setTag(args.row, 0, job.data.id);
|
|
|
+ sheet.setTag(args.row, 1, job.data.id);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if(!isExist){
|
|
|
+ jobsAjax.createJobContent(billsLibId, field, newData, function(id){
|
|
|
+ var newJobData, newJob;
|
|
|
+ if(field === 'code'){
|
|
|
+ newJobData = {id: id, code: newData, content: ''};
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ newJobData = {id: id, content: newData, code: ''};
|
|
|
+ }
|
|
|
+ newJob = new Job(controller.tree.selected, newJobData);
|
|
|
+ totalJobs.jobs[totalJobs.prefix + id] = newJob;
|
|
|
+ billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
|
|
|
+ controller.tree.selected.jobs.push(newJob);
|
|
|
+ sheet.setTag(args.row, 0, id);
|
|
|
+ sheet.setTag(args.row, 1, id);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ jobsAjax.createJobContent(billsLibId, field, newData, function(id){
|
|
|
+ var newJobData, newJob;
|
|
|
+ if(field === 'code'){
|
|
|
+ newJobData = {id: id, code: newData, content: ''};
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ newJobData = {id: id, content: newData, code: ''};
|
|
|
+ }
|
|
|
+ newJob = new Job(controller.tree.selected, newJobData);
|
|
|
+ totalJobs.jobs[totalJobs.prefix + id] = newJob;
|
|
|
+ billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
|
|
|
+ controller.tree.selected.jobs.push(newJob);
|
|
|
+ sheet.setTag(args.row, 0, id);
|
|
|
+ sheet.setTag(args.row, 1, id);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
//update
|
|
|
- if(id && newData !== oldData ){
|
|
|
+ if(id && newData && !isRepeat){
|
|
|
+ totalJobs.jobs[totalJobs.prefix + id].data[field] = newData;
|
|
|
jobsAjax.updateJobContent(id, field, newData);
|
|
|
+ billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), field, id, newData);
|
|
|
}
|
|
|
- });
|
|
|
+ if(isRepeat){
|
|
|
+ sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
+ // });
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
+ function buildJobs(jobsSpread){
|
|
|
+ initSheet(jobsSpread);
|
|
|
+ TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
|
|
|
}
|
|
|
|
|
|
function buildItems(){
|