material_replace_edit.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /**
  2. * Created by zhang on 2018/8/23.
  3. */
  4. let materialOjb = {
  5. billsSpread:null,
  6. materialSpread:null,
  7. billsList:JSON.parse(billsList),
  8. billsSetting:{
  9. header: [
  10. {headerName: "清单编号", headerWidth: 180, dataCode: "code", dataType: "String",formatter: "@"},
  11. {headerName: "清单名称", headerWidth: 240, dataCode: "name", dataType: "String"},
  12. {headerName: "规则", headerWidth: 150, dataCode: "rule", hAlign: "left", dataType: "String",cellType:'comboBox',editorValueType:true,options:[{text:"规则1",value:1},{text:"规则2",value:2}]}
  13. ],
  14. view: {
  15. lockColumns: [1]
  16. },
  17. headerHeight:45
  18. },
  19. materialSetting:{
  20. header: [
  21. {headerName: "材料编号", headerWidth: 180, dataCode: "code", dataType: "String"},
  22. {headerName: "材料名称", headerWidth: 240, dataCode: "name", dataType: "String",cellType:'tipsCell'},
  23. {headerName: "规格", headerWidth: 150, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'}
  24. ],
  25. view: {
  26. lockColumns: [1,2]
  27. },
  28. headerHeight:45
  29. },
  30. initSpread:function () {
  31. if(!this.billsSpread){
  32. this.billsSpread = SheetDataHelper.createNewSpread($("#billsSpread")[0]);
  33. }
  34. if(!this.materialSpread){
  35. this.materialSpread = SheetDataHelper.createNewSpread($("#materialSpread")[0]);
  36. }
  37. this.billsSheet = this.billsSpread .getSheet(0);
  38. sheetCommonObj.initSheet(this.billsSheet,this.billsSetting, 30);
  39. this.billsSheet.name('billsSheet');
  40. this.billsSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onBillsValueChange);
  41. this.billsSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onBillsSelectionChange);
  42. this.initRightClick("billsSpread",this.billsSpread);
  43. this.materialSheet = this.materialSpread .getSheet(0);
  44. sheetCommonObj.initSheet(this.materialSheet,this.materialSetting, 30);
  45. this.materialSheet.name('materialSheet');
  46. this.initRightClick("materialSpread",this.materialSpread);
  47. this.refreshSheet();
  48. },
  49. canDelete : function (sheet) {
  50. let sel = sheet.getSelections()[0];
  51. console.log(sel);
  52. if(sel.row === undefined || sel.row < 0) return false ;//一行都没选中时,不能删除
  53. //选中空行时,不能删除
  54. // to do
  55. return true;
  56. },
  57. initRightClick : function(id,spread) {
  58. let me = this;
  59. $.contextMenu({
  60. selector: '#'+id,
  61. build: function ($trigger, e) {
  62. me.rightClickTarget = SheetDataHelper.safeRightClickSelection($trigger, e, spread);
  63. return me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.viewport ||
  64. me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
  65. },
  66. items: {
  67. "delete": {
  68. name: "删除",
  69. icon: 'fa-trash-o',
  70. disabled: function () {
  71. return !me.canDelete(spread.getActiveSheet());
  72. },
  73. callback: function (key, opt) {
  74. console.log();
  75. }
  76. }
  77. }
  78. });
  79. },
  80. refreshSheet:function(){
  81. sheetCommonObj.showData(this.billsSheet,this.billsSetting,this.billsList);
  82. this.billsSheet.setRowCount(this.billsList.length + 1);
  83. },
  84. onBillsSelectionChange:function (sander,args) {
  85. args.sheet.repaint();
  86. },
  87. onBillsValueChange: function(sander,args){
  88. let me = materialOjb;
  89. let field = me.billsSetting.header[args.col].dataCode;
  90. let code = null;
  91. if(args.row < me.billsList.length){
  92. code = me.billsList[args.row].code;
  93. }
  94. if(me.validateBills(field,args.newValue)){
  95. let data = me.getUpdateData(field,args.newValue,code);
  96. if (data){
  97. me.saveBills([data]);
  98. return;
  99. }
  100. }
  101. me.refreshSheet();
  102. },
  103. validateBills:function (field,value) {
  104. if(field == 'code'){
  105. if(value.length !== 9){
  106. alert("清单长度不正确");
  107. return false;
  108. }
  109. if(_.find(this.billsList,{'code':value})) {
  110. alert("清单已存在");
  111. return false;
  112. }
  113. }
  114. return true;
  115. },
  116. getUpdateData:function (field,newValue,code) {
  117. if(field == 'code'){
  118. if(!isDef(code) || code ==''&&newValue!=null){//说明是新增
  119. return {
  120. type:'add',
  121. code:newValue.toString(),
  122. libID:$('#libID').val(),
  123. billsLibId:parseInt($('#billsLibId').val())
  124. }
  125. }else {//说明是替换
  126. return {
  127. type:'update',
  128. oldCode:code.toString(),
  129. newCode:newValue.toString(),
  130. libID:$('#libID').val(),
  131. billsLibId:parseInt($('#billsLibId').val())
  132. }
  133. }
  134. }else if(isDef(code)){
  135. let updateData = {};
  136. updateData[field] = newValue;
  137. return {
  138. type:'update',
  139. oldCode:code.toString(),
  140. libID:$('#libID').val(),
  141. updateData:updateData
  142. }
  143. }
  144. },
  145. saveBills:async function (datas) {
  146. try {
  147. let result = await ajaxPost("/materialReplace/saveBills",datas);
  148. let missCodes = [];
  149. for(let r of result){
  150. if(r.missCodes && r.missCodes.length >0) missCodes =missCodes.concat(r.missCodes);
  151. if(r.type == 'add'){
  152. this.billsList = this.billsList.concat(r.list);
  153. }if(r.type == 'update'){
  154. for(let l of r.list){
  155. this.updateCache(l.code,l.updateData)
  156. }
  157. }if(r.type == 'delete'){
  158. }
  159. }
  160. if(missCodes.length > 0) alert(`没有找到清单:${missCodes.join("、")}`);
  161. this.refreshSheet();
  162. }catch (err){
  163. console.log(err);
  164. }
  165. },
  166. updateCache:function (code,updateData) {
  167. let bill = _.find(this.billsList,{'code':code});
  168. for(let key of updateData){
  169. bill[key] = updateData[key]
  170. }
  171. }
  172. };
  173. function isDef(obj) {
  174. return obj!==undefined && obj!==null;
  175. }
  176. materialOjb.initSpread();