|
@@ -28,15 +28,16 @@ repositoryGljObj = {
|
|
|
gljAllTypeId: -1,
|
|
|
gljCurTypeId: -1,
|
|
|
currentRepositoryId: -1,
|
|
|
+ currentCache: null,
|
|
|
gljList: [],
|
|
|
setting: {
|
|
|
header:[
|
|
|
{headerName:"编码",headerWidth:120,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"},
|
|
|
- {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center"},
|
|
|
- {headerName:"规格",headerWidth:120,dataCode:"specs", dataType: "String", hAlign: "left", vAlign: "center"},
|
|
|
+ {headerName:"名称",headerWidth:260,dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center"},
|
|
|
+ {headerName:"规格",headerWidth:260,dataCode:"specs", dataType: "String", hAlign: "left", vAlign: "center"},
|
|
|
{headerName:"单位",headerWidth:120,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
|
|
|
{headerName:"基价单价",headerWidth:120,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"},
|
|
|
- {headerName:"类型",headerWidth:120,dataCode:"gljType", dataType: "Number", hAlign: "center", vAlign: "center"}
|
|
|
+ {headerName:"类型",headerWidth:120,dataCode:"gljDistType", dataType: "String", hAlign: "center", vAlign: "center"}
|
|
|
],
|
|
|
view:{
|
|
|
comboBox:[
|
|
@@ -96,8 +97,9 @@ repositoryGljObj = {
|
|
|
cache:false,
|
|
|
timeout:5000,
|
|
|
success:function(result){
|
|
|
- if(result.success) {
|
|
|
+ if(!result.error) {
|
|
|
me.gljList = result.data;
|
|
|
+ me.sortGlj();
|
|
|
me.showGljItems(result.data, me.gljCurTypeId);
|
|
|
}
|
|
|
},
|
|
@@ -115,42 +117,80 @@ repositoryGljObj = {
|
|
|
cacheSection.push(data[i]);
|
|
|
}
|
|
|
}
|
|
|
- cacheSection.sort(function(g1, g2) {
|
|
|
- var rst = 0;
|
|
|
- if (g1.code > g2.code) rst = 1
|
|
|
- else if (g1.code < g2.code) rst = -1;
|
|
|
- return rst;
|
|
|
- })
|
|
|
sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
|
|
|
sheetCommonObj.showData(me.workBook.getSheet(0), me.setting, cacheSection);
|
|
|
+ cacheSection = null;
|
|
|
}
|
|
|
},
|
|
|
buildSheet: function(container) {
|
|
|
var me = repositoryGljObj;
|
|
|
me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
|
|
|
- //var instance = new GC.Spread.Common.CultureInfo();
|
|
|
- //var value; // Type: Object
|
|
|
- //value = instance.NumberFormat;
|
|
|
- //console.log(value);
|
|
|
me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
|
|
|
me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
|
|
|
- //me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {
|
|
|
- // console.log("Start cell editing.");
|
|
|
- //});
|
|
|
- me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, function (sender, args) {
|
|
|
- console.log("Finish cell editing.");
|
|
|
- //if (args.col == 0) {
|
|
|
- // args.sheet.suspendPaint();
|
|
|
- // args.sheet.suspendEvent();
|
|
|
- // args.sheet.setValue(args.row, args.col, args.editingText, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
- // args.sheet.resumeEvent();
|
|
|
- // args.sheet.resumePaint();
|
|
|
- //}
|
|
|
- });
|
|
|
+ me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, me.onCellEditStart);
|
|
|
+ me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
|
|
|
+ me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
|
|
|
+ },
|
|
|
+ onCellEditStart: function(sender, args) {
|
|
|
+ var me = repositoryGljObj;
|
|
|
+ var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
|
|
|
+ me.currentEditingGlj = rObj;
|
|
|
+ var cacheSection = me.gljList;
|
|
|
+ if (cacheSection) {
|
|
|
+ for (var j = 0; j < cacheSection.length; j++) {
|
|
|
+ if (cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
|
|
|
+ rObj["ID"] = cacheSection[j]["ID"];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onCellEditEnd: function(sender, args) {
|
|
|
+ var me = repositoryGljObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row),
|
|
|
+ updateArr = [], addArr = [];
|
|
|
+ if (me.currentEditingGlj["ID"]) {
|
|
|
+ rObj["ID"] = me.currentEditingGlj["ID"];
|
|
|
+ updateArr.push(rObj);
|
|
|
+ } else {
|
|
|
+ addArr.push(rObj);
|
|
|
+ }
|
|
|
+ rObj.gljType = me.gljCurTypeId;
|
|
|
+ me.currentEditingGlj = null;
|
|
|
+ me.mixUpdateRequest(updateArr, addArr, []);
|
|
|
+ },
|
|
|
+ onRangeChanged: function(sender, args) {
|
|
|
+ if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
|
|
|
+ var me = repositoryGljObj, updateArr = [], removeArr = [];
|
|
|
+ var cacheSection = me.currentCache;
|
|
|
+ if (cacheSection) {
|
|
|
+ for (var i = 0; i < args.rowCount; i++) {
|
|
|
+ var hasUpdate = false, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row + i),
|
|
|
+ isEmpty = sheetCommonObj.chkIfEmpty(rObj, me.setting);
|
|
|
+ for (var j = 0; j < cacheSection.length; j++) {
|
|
|
+ if (cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
|
|
|
+ rObj["ID"] = cacheSection[j]["ID"];
|
|
|
+ hasUpdate = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (hasUpdate) {
|
|
|
+ if (isEmpty) {
|
|
|
+ removeArr.push(rObj["ID"]);
|
|
|
+ } else updateArr.push(rObj);
|
|
|
+ } else if (isEmpty) {
|
|
|
+ if (args.row + i < cacheSection.length) {
|
|
|
+ rObj["ID"] = cacheSection[args.row + i]["ID"];
|
|
|
+ removeArr.push(rObj["ID"]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ me.mixUpdateRequest(updateArr, [], removeArr);
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
onClipboardPasting: function(sender, args) {
|
|
|
var me = repositoryGljObj;
|
|
|
- if (args.cellRange.colCount != me.setting.header.length) {
|
|
|
+ if (args.cellRange.colCount != me.setting.header.length || me.gljCurTypeId < 0 || me.gljAllTypeId === me.gljCurTypeId) {
|
|
|
args.cancel = true;
|
|
|
}
|
|
|
},
|
|
@@ -168,46 +208,100 @@ repositoryGljObj = {
|
|
|
}
|
|
|
}
|
|
|
if (!hasCacheItem) {
|
|
|
+ items[i].gljType = me.gljCurTypeId;
|
|
|
addArr.push(items[i]);
|
|
|
} else {
|
|
|
updateArr.push(items[i]);
|
|
|
}
|
|
|
}
|
|
|
if (updateArr.length > 0 || addArr.length > 0) {
|
|
|
- $.ajax({
|
|
|
- type:"POST",
|
|
|
- url:"api/mixUpdateGljItems",
|
|
|
- data:{"repositoryId": me.currentRepositoryId, "updateItems": JSON.stringify(updateArr), "addItems": JSON.stringify(addArr)},
|
|
|
- dataType:"json",
|
|
|
- cache:false,
|
|
|
- timeout:5000,
|
|
|
- success:function(result){
|
|
|
- if (result.err) {
|
|
|
- alert(err);
|
|
|
- me.getRationItems(me.currentRepositoryId);
|
|
|
- } else {
|
|
|
- if (addArr.length > 0) {
|
|
|
- me.gljList = me.gljList.concat(addArr);
|
|
|
- }
|
|
|
- for (var i = 0; i < updateArr.length; i++) {
|
|
|
- for (var j = 0; j < me.gljList.length; j++) {
|
|
|
- if (me.gljList[j][me.setting.header[0].dataCode] == updateArr[i][me.setting.header[0].dataCode]) {
|
|
|
- me.gljList[j] = updateArr[i];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- me.showGljItems(me.gljList, me.gljAllTypeId);
|
|
|
+ me.mixUpdateRequest(updateArr, addArr, []);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mixUpdateRequest: function(updateArr, addArr, removeIds) {
|
|
|
+ var me = repositoryGljObj;
|
|
|
+ $.ajax({
|
|
|
+ type:"POST",
|
|
|
+ url:"api/mixUpdateGljItems",
|
|
|
+ data:{"repositoryId": me.currentRepositoryId, "updateItems": JSON.stringify(updateArr), "addItems": JSON.stringify(addArr), "removeIds": JSON.stringify(removeIds)},
|
|
|
+ dataType:"json",
|
|
|
+ cache:false,
|
|
|
+ timeout:5000,
|
|
|
+ success:function(result){
|
|
|
+ if (result.error) {
|
|
|
+ alert(result.message);
|
|
|
+ me.getRationItems(me.currentRepositoryId);
|
|
|
+ } else {
|
|
|
+ me.updateCache(addArr, updateArr, removeIds, result);
|
|
|
+ me.sortGlj();
|
|
|
+ me.currentCache = me.getCache();
|
|
|
+ me.showGljItems(me.gljList, me.gljCurTypeId);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error:function(err){
|
|
|
+ alert(err.responseJSON.error);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getCache: function() {
|
|
|
+ var me = this, rst = [];
|
|
|
+ for (var i = 0; i < me.gljList.length; i++) {
|
|
|
+ if (me.gljList[i].gljType == me.gljCurTypeId) {
|
|
|
+ rst.push(me.gljList[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ },
|
|
|
+ updateCache: function(addArr, updateArr, removeIds, result) {
|
|
|
+ var me = this, cacheSection = me.gljList;
|
|
|
+ if (addArr.length > 0) {
|
|
|
+ me.gljList = me.gljList.concat(addArr);
|
|
|
+ cacheSection = me.gljList;
|
|
|
+ }
|
|
|
+ for (var i = removeIds.length - 1; i >= 0; i--) {
|
|
|
+ for (var j = cacheSection.length - 1; j >= 0 ; j--) {
|
|
|
+ if (cacheSection[j]["ID"] == removeIds[i]) {
|
|
|
+ cacheSection.splice(j,1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (result && result.data.ops && result.data.ops.length > 0) {
|
|
|
+ for (var i = 0; i < result.data.ops.length; i++) {
|
|
|
+ for (var j = 0; j < cacheSection.length; j++) {
|
|
|
+ if (cacheSection[j][me.setting.header[0].dataCode] == result.data.ops[i][me.setting.header[0].dataCode]) {
|
|
|
+ cacheSection[j]["ID"] = result.data.ops[i]["ID"];
|
|
|
}
|
|
|
- },
|
|
|
- error:function(){
|
|
|
}
|
|
|
- })
|
|
|
+ }
|
|
|
}
|
|
|
+ for (var i = 0; i < updateArr.length; i++) {
|
|
|
+ for (var j = 0; j < cacheSection.length; j++) {
|
|
|
+ if (updateArr[i]["ID"] && cacheSection[j]["ID"]) {
|
|
|
+ if (cacheSection[j]["ID"] == updateArr[i]["ID"]) {
|
|
|
+ cacheSection[j] = updateArr[i];
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (cacheSection[j][me.setting.header[0].dataCode] == updateArr[i][me.setting.header[0].dataCode]) {
|
|
|
+ cacheSection[j] = updateArr[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ sortGlj: function() {
|
|
|
+ var me = this;
|
|
|
+ me.gljList.sort(function(a, b){
|
|
|
+ var rst = 0;
|
|
|
+ if (a.code > b.code) rst = 1
|
|
|
+ else if (a.code < b.code) rst = -1;
|
|
|
+ return rst;
|
|
|
+ });
|
|
|
},
|
|
|
onClick: function(event,treeId,treeNode) {
|
|
|
var me = repositoryGljObj,
|
|
|
gljTypeId = treeNode.ID;
|
|
|
- repositoryGljObj.gljCurTypeId = treeNode.ID;
|
|
|
- repositoryGljObj.showGljItems(repositoryGljObj.gljList, gljTypeId);
|
|
|
+ me.gljCurTypeId = treeNode.ID;
|
|
|
+ me.currentCache = me.getCache();
|
|
|
+ me.showGljItems(me.gljList, gljTypeId);
|
|
|
}
|
|
|
}
|