project_glj_view.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. /**
  2. * Created by zhang on 2018/3/13.
  3. */
  4. projectGljObject={
  5. projectGljSetting:{
  6. header: [
  7. {headerName: "编码", headerWidth: 80, dataCode: "code", dataType: "String"},
  8. {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String"},
  9. {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String"},
  10. {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
  11. {headerName: "类型", headerWidth: 45, dataCode: "short_name", hAlign: "center", dataType: "String"},
  12. {headerName: "总消耗量", headerWidth: 100, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
  13. {headerName: "定额价", headerWidth: 70, dataCode: "basePrice", hAlign: "right", dataType: "Number",decimalField:'glj.quantity',validator:"number"},
  14. {headerName: "调整价", headerWidth: 70, dataCode: "adjustPrice", hAlign: "right", dataType: "Number",decimalField:"glj.unitPrice"},
  15. {headerName: "市场价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",decimalField:"glj.unitPrice",validator:"number"},
  16. {headerName: "是否暂估", headerWidth: 60, dataCode: "is_evaluate", hAlign: "center", dataType: "String",cellType:'checkBox'},
  17. {headerName: "供货方式", headerWidth: 80, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap},
  18. {headerName: "甲供数量", headerWidth: 100, dataCode: "supply_quantity", hAlign: "right", dataType: "String",validator:"number"},
  19. {headerName: "交货方式", headerWidth: 90, dataCode: "delivery", hAlign: "left", dataType: "String"},
  20. {headerName: "送达地点", headerWidth: 100, dataCode: "delivery_address", hAlign: "left", dataType: "String"},
  21. {headerName: "不调价", headerWidth: 55, dataCode: "is_adjust_price", dataType: "String",cellType: "checkBox"}
  22. ],
  23. view: {
  24. lockColumns: [0,1,2,3,4,5,7,12,13]
  25. }
  26. },
  27. projectGljSpread:null,
  28. projectGljSheet:null,
  29. projectGljSheetData:[],
  30. mixRatioSetting:{
  31. header:[
  32. {headerName: "编码", headerWidth: 80, dataCode: "code", dataType: "String"},
  33. {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String"},
  34. {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
  35. {headerName: "类型", headerWidth: 45, dataCode: "short_name", hAlign: "center", dataType: "String"},
  36. {headerName: "定额价", headerWidth: 70, dataCode: "basePrice", hAlign: "right", dataType: "Number",decimalField:'glj.quantity',validator:"number"},
  37. {headerName: "调整价", headerWidth: 70, dataCode: "adjustPrice", hAlign: "right", dataType: "Number",decimalField:"glj.unitPrice"},
  38. {headerName: "市场价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",decimalField:"glj.unitPrice",validator:"number"}
  39. ],
  40. view: {
  41. lockColumns: [0,1]
  42. }
  43. },
  44. mixRatioSpread:null,
  45. mixRatioSheet:null,
  46. mixRatioData:[],
  47. initProjectGljSpread:function () {
  48. this.projectGljSpread = SheetDataHelper.createNewSpread($("#project_glj_sheet")[0]);
  49. this.projectGljSheet = this.projectGljSpread .getSheet(0);
  50. this.initSheet(this.projectGljSheet,this.projectGljSetting);
  51. this.projectGljSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onProjectGljSelectionChange);
  52. this.projectGljSheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onProjectGljEditStarting);
  53. this.projectGljSheet.name('projectGljSheet');
  54. },
  55. onProjectGljEditStarting:function (sender, args) {
  56. let me = projectGljObject;
  57. let row = args.row;
  58. let col = args.col;
  59. let dataCode = me.projectGljSetting.header[col].dataCode;
  60. if(dataCode=='is_adjust_price'||dataCode=='is_evaluate'){
  61. args.cancel = true;
  62. }
  63. },
  64. onProjectGljSelectionChange:function (sender, args) {
  65. let me = projectGljObject;
  66. let row = args.newSelections[0].row;
  67. let col = args.newSelections[0].col;
  68. let data = me.projectGljSheetData[row];
  69. let dataCode = me.projectGljSetting.header[col].dataCode;
  70. if(dataCode=='basePrice'||dataCode=='marketPrice'||dataCode=='supply'){//有组成物时,市场单价、定额价、供货方式不能修改
  71. let priceCell = false;
  72. if (data.ratio_data && data.ratio_data.length > 0){
  73. priceCell = true;
  74. }
  75. if(priceCell==false&&dataCode=='basePrice'&&data.is_add!=1){//如果不是新增,定额价不可修改。
  76. priceCell = true;
  77. }
  78. me.projectGljSheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).locked(priceCell);
  79. }
  80. if(dataCode == 'supply_quantity'){
  81. if (data.supply == 1) {// 如果为部分甲供则甲供数量需要可编辑
  82. me.projectGljSheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).locked(false);
  83. }else {
  84. me.projectGljSheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).locked(true);
  85. }
  86. }
  87. me.projectGljSheet.repaint();
  88. },
  89. showProjectGljData:function () {
  90. let projectGljSheetData = [];
  91. let gljList = projectObj.project.projectGLJ.datas.gljList;
  92. gljList = filterProjectGLJ(gljList);
  93. gljList = sortProjectGLJ(gljList);
  94. for(let glj of gljList){
  95. projectGljSheetData.push(this.getSheetDataByGLJ(glj));
  96. }
  97. this.projectGljSheetData = projectGljSheetData;
  98. this.projectGljSheet.setRowCount(0);
  99. sheetCommonObj.showData(this.projectGljSheet, this.projectGljSetting,this.projectGljSheetData);
  100. this.projectGljSheet.setRowCount(this.projectGljSheetData.length);
  101. },
  102. getSheetDataByGLJ:function (glj) {
  103. let projectGLJ = projectObj.project.projectGLJ;
  104. let materialIdList = projectGLJ.datas.constData.materialIdList;
  105. let data ={
  106. id:glj.id,
  107. code:glj.code,
  108. name:glj.name,
  109. specs:glj.specs,
  110. unit:glj.unit,
  111. type:glj.type,
  112. short_name:projectGLJ.getShortNameByID(glj.type),
  113. quantity:glj.quantity,
  114. supply:glj.supply,
  115. supply_quantity:glj.supply_quantity,
  116. delivery:glj.delivery,
  117. delivery_address:glj.delivery_address,
  118. is_adjust_price:glj.is_adjust_price,
  119. ratio_data:glj.ratio_data,
  120. is_add:glj.unit_price.is_add,
  121. bgColour:'white'
  122. };
  123. gljOprObj.setGLJPrice(data,glj);
  124. //供货方式为完全甲供时设置甲供数量为总消耗量
  125. if (data.supply == 2) {
  126. data.supply_quantity = glj.quantity;
  127. }
  128. // 只有材料才显示是否暂估
  129. if (materialIdList.indexOf(glj.type) >= 0) {
  130. data.is_evaluate = glj.is_evaluate;
  131. }
  132. //bgColour
  133. if(data.basePrice == data.marketPrice){//如果定额价等于市场价时,改底色。 优先度低于有组成物时的底色
  134. data.bgColour = "#C4CAFB";
  135. }
  136. if (notEditType.indexOf(glj.type) >= 0) {
  137. if (data.ratio_data && data.ratio_data.length > 0){//有组成物时
  138. //设置底色
  139. data.bgColour = "#E0E0E0";
  140. }
  141. }
  142. return data;
  143. },
  144. refreshProjectGljRow:function (row) {
  145. let me = projectGljObject;
  146. let rowData = me.projectGljSheetData[row];
  147. let glj = projectObj.project.projectGLJ.getByID(rowData.id);
  148. if(glj){
  149. me.projectGljSheetData[row] = me.getSheetDataByGLJ(glj);
  150. }
  151. sheetCommonObj.showRowData(this.projectGljSheet, this.projectGljSetting,row,this.projectGljSheetData);
  152. },
  153. initSheet: function (sheet,setting) {
  154. var me = this;
  155. sheetCommonObj.initSheet(sheet, setting, 30);
  156. sheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onSheetValueChange);
  157. },
  158. onSheetValueChange:function (e,info) {
  159. let me = projectGljObject;
  160. if(info.sheetName=='projectGljSheet'){
  161. me.onProjectGLJValueChange(e,info);
  162. }
  163. },
  164. onProjectGLJValueChange:function (e,info) {
  165. let projectGLJ = projectObj.project.projectGLJ;
  166. let me = projectGljObject,row = info.row, col = info.col;
  167. let dataCode = me.projectGljSetting.header[col].dataCode;
  168. let recode = me.projectGljSheetData[row];
  169. let value = info.newValue;
  170. if (!me.checkData(col,me.projectGljSetting,value)) {
  171. alert('输入的数据类型不对,请重新输入!');
  172. return ;
  173. }
  174. let callback=function (impactList) {
  175. info.sheet.suspendPaint();
  176. info.sheet.suspendEvent();
  177. me.refreshProjectGljRow(row);
  178. for(let g of impactList){
  179. let index = _.findIndex(me.projectGljSheetData, { 'id': g.id });
  180. if(index>=0&&index != row){
  181. me.refreshProjectGljRow(index);
  182. }
  183. }
  184. info.sheet.resumeEvent();
  185. info.sheet.resumePaint();
  186. };
  187. if(dataCode=='basePrice'||dataCode=='marketPrice'){
  188. value= scMathUtil.roundForObj(value,getDecimal('glj.unitPrice'));//修改市场价和修改定额价时需要重新记算很多受影响的树节点,现在改成与定字额工料机那里调相同的方法。
  189. let editField = dataCode === 'basePrice'?"base_price":"market_price";
  190. projectObj.project.projectGLJ.updatePrice(recode,editField,value,'pg',callback);
  191. }else {
  192. let extend = {};
  193. // 如果是供货方式则需要处理数据
  194. if (dataCode === 'supply') {
  195. extend.supply_quantity = me.getSupplyQuantity(value, recode.quantity);
  196. }
  197. if(dataCode === 'supply_quantity'){//修改数量需做4舍5入
  198. value= value.toDecimal(getDecimal('glj.quantity'));
  199. }
  200. if(dataCode === 'is_evaluate'||dataCode === 'is_adjust_price'){
  201. if(value == true){
  202. value = 1;
  203. }else if(value == false){
  204. value = 0;
  205. }
  206. }
  207. extend = Object.keys(extend).length > 0 ? JSON.stringify(extend) : '';
  208. let updateData = {id: recode.id, field: dataCode, value: value, extend: extend};
  209. projectGLJ.pGljUpdate(updateData,callback);
  210. }
  211. },
  212. getSupplyQuantity : function(supplyType, quantity) {
  213. // 自行采购和甲定乙供则把甲供数量设置为0,其余情况则设置为当前总消耗量
  214. let supplyQuantity = supplyType == 0 || supplyType == 3 ? 0 : quantity;
  215. supplyQuantity = parseFloat(supplyQuantity);
  216. return supplyQuantity;
  217. },
  218. checkData : function(col,setting, value) {
  219. let result = true;
  220. let validator = setting.header[col].validator !== undefined ? setting.header[col].validator : null;
  221. if (validator === null) {
  222. return result;
  223. }
  224. switch (validator) {
  225. case 'number':
  226. let regular = /^\d+(\.\d+)?$/;
  227. result = regular.test(value);
  228. break;
  229. case 'boolean':
  230. let booleanValue = [true, false];
  231. result = booleanValue.indexOf(value) >= 0;
  232. break;
  233. }
  234. return result;
  235. }
  236. };
  237. $(function () {
  238. $('#tab_project_glj').on('show.bs.tab', function (e) {
  239. let me = projectGljObject;
  240. $(e.relatedTarget.hash).removeClass('active');
  241. setTimeout(function () {
  242. if(me.projectGljSpread==null){
  243. me.initProjectGljSpread();
  244. }
  245. me.showProjectGljData();
  246. loadSize("project-glj-main", function () {
  247. me.projectGljSpread.refresh();
  248. });
  249. },1)
  250. });
  251. slideResize($("#project-glj-main"), function () {
  252. projectGljObject.projectGljSpread.refresh();
  253. });
  254. });