material_adjust_view.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. /**
  2. * Created by zhang on 2019/5/15.
  3. */
  4. let materialAdjustObj = {
  5. spread:null,
  6. priceInfoSheet:null,
  7. priceCoeSheet:null,
  8. priceInfoDatas:[],
  9. priceCoeDatas:[],
  10. priceInfoSetting:{
  11. header: [
  12. {headerName: "关联", headerWidth: 80, dataCode: "is_related", dataType: "String",cellType:'checkBox'},
  13. {headerName: "材料号", headerWidth: 80, dataCode: "code", dataType: "String"},
  14. {headerName: "材料名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'},
  15. {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'},
  16. {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
  17. {headerName: "数量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
  18. {headerName: "风险系数%", headerWidth: 80, dataCode: "riskCoe", hAlign: "right", dataType: "Number",validator:"number"},
  19. {headerName: "基准单价", headerWidth: 70, dataCode: "standardPrice", hAlign: "right", dataType: "Number",validator:"number"},
  20. {headerName: "投标单价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},
  21. {headerName: "合价", headerWidth: 90, dataCode: "totalPrice", hAlign: "right", dataType: "Number",validator:"number",decimalField:'bills.totalPrice'},
  22. {headerName: "供货方式", headerWidth: 70, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap},
  23. {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"}
  24. ],
  25. view:{ lockColumns: ["is_related","quantity","totalPrice","originPlace","vender","supply"]}
  26. },
  27. priceCoeSetting:{
  28. header: [
  29. {headerName: "关联", headerWidth: 80, dataCode: "is_related", dataType: "String",cellType:'checkBox'},
  30. {headerName: "材料号", headerWidth: 80, dataCode: "code", dataType: "String"},
  31. {headerName: "材料名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'},
  32. {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'},
  33. {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
  34. {headerName: "变值权重B", headerWidth: 90, dataCode: "varWeight", hAlign: "right", dataType: "Number",validator:"number",formatter:"0.00"},
  35. {headerName: "基本价格指数F0", headerWidth: 70, dataCode: "FO", hAlign: "right", dataType: "Number",validator:"number"},
  36. {headerName: "现行价格指数Ft", headerWidth: 70, dataCode: "FI", hAlign: "right", dataType: "Number",validator:"number"},
  37. {headerName: "数量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
  38. {headerName: "单价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},
  39. {headerName: "合价", headerWidth: 90, dataCode: "totalPrice", hAlign: "right", dataType: "Number",validator:"number",decimalField:'bills.totalPrice'},
  40. {headerName: "供货方式", headerWidth: 70, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap},
  41. {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"}
  42. ],
  43. view:{ lockColumns: ["is_related","quantity","totalPrice","originPlace","varWeight","vender","supply"]}
  44. },
  45. refreshSheetDatas:function () {
  46. //读项目属性的值,若没有则默认为造价信息差额调整法
  47. let adjustType = $('#adjustType').val();
  48. if (adjustType === 'priceInfo') {
  49. materialAdjustObj.showPriceInfoDatas();
  50. } else {
  51. materialAdjustObj.showPriceCoeDatas();
  52. }
  53. configMaterialObj.showEvaluateRelateDatas();
  54. },
  55. getSheetDatas:function () {
  56. let adjustType = $('#adjustType').val();
  57. return adjustType === 'priceInfo' ? this.priceInfoDatas : this.priceCoeDatas;
  58. },
  59. getSheet:function () {
  60. let adjustType = $('#adjustType').val();
  61. return adjustType === 'priceInfo' ? this.priceInfoSheet : this.priceCoeSheet;
  62. },
  63. initPriceInfoSheet:function () {
  64. this.priceInfoSheet = configMaterialObj.configSpread.getSheet(2);
  65. sheetCommonObj.initSheet(this.priceInfoSheet,this.priceInfoSetting,30);
  66. this.priceInfoSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);
  67. this.priceInfoSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onSelectionChange);
  68. this.priceInfoSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onPriceInfoEditString);
  69. this.priceInfoSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange);
  70. this.priceInfoSheet.name('priceInfoSheet');
  71. this.priceInfoSheet.setRowHeight(0, 36, 1);
  72. },
  73. initPriceCoeSheet:function () {
  74. this.priceCoeSheet = configMaterialObj.configSpread.getSheet(3);
  75. sheetCommonObj.initSheet(this.priceCoeSheet,this.priceCoeSetting,30);
  76. this.priceCoeSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);
  77. this.priceCoeSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onSelectionChange);
  78. this.priceCoeSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onPriceInfoEditString);
  79. this.priceCoeSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange);
  80. this.priceCoeSheet.name('priceCoeSheet');
  81. this.priceCoeSheet.setRowHeight(0, 36, 1);
  82. },
  83. onSelectionChange:function (sender, args) {
  84. let me = configMaterialObj;
  85. let newSel = args.newSelections[0];
  86. let oldSel = args.oldSelections?args.oldSelections[0]:{};
  87. if(newSel.row != oldSel.row){
  88. me.showEvaluateRelateDatas();
  89. me.relateFilterAgain = false;
  90. }
  91. },
  92. onSheetRangeChange:function (a,args) {
  93. let me = materialAdjustObj,updateMap = {},tasks=[];
  94. let projectGLJ = projectObj.project.projectGLJ;
  95. let setting = $("#adjustType").val() == "priceInfo"?me.priceInfoSetting:me.priceCoeSetting;
  96. let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas;
  97. for(let c of args.changedCells){
  98. let dataCode = setting.header[c.col].dataCode;
  99. let value= args.sheet.getCell(c.row, c.col).text();
  100. let recode = datas[c.row];
  101. if(dataCode == "unit" && recode.is_related){
  102. me.refreshSheetDatas();
  103. return ;
  104. }
  105. if (value&&!sheetCommonObj.checkData(c.col,setting,value)) {
  106. alert('输入的数据类型不对,请重新输入!');
  107. me.refreshSheetDatas();
  108. return ;
  109. }
  110. if(dataCode=='marketPrice'){
  111. dataCode = 'market_price';
  112. if(recode.is_related){//关联的情况下,直接修改工料机价格
  113. return projectGLJ.updatePrice(recode,dataCode,value,'rg', projectGljObject.refreshViewsData);
  114. }
  115. }else {
  116. let tem = updateMap[recode.ID]?updateMap[recode.ID]:{};
  117. if(value&&dataCode == "standardPrice") value = scMathUtil.roundForObj(value,getDecimal('glj.unitPrice'))+"";
  118. if(value == recode[dataCode]) continue;
  119. tem[dataCode] = value;
  120. updateMap[recode.ID] = tem;
  121. }
  122. }
  123. for(let ID in updateMap){
  124. let edata = {type:"contractor_list",doc:updateMap[ID],action:"update",ID:ID};
  125. tasks.push(edata);
  126. }
  127. if(tasks.length > 0) configMaterialObj.updateEvaluateMaterial(tasks,false);
  128. },
  129. onPriceInfoEditString:function (a,args) {
  130. let me = materialAdjustObj;
  131. let setting = $("#adjustType").val() == "priceInfo"?me.priceInfoSetting:me.priceCoeSetting;
  132. let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas;
  133. let dataCode = setting.header[args.col].dataCode;
  134. let recorde = datas[args.row];
  135. if(recorde){
  136. if(recorde.is_related && dataCode =="unit") args.cancel = true;
  137. }
  138. },
  139. onSheetValueChange:function (a,args) {
  140. let me = materialAdjustObj,row = args.row, col = args.col;
  141. let setting = $("#adjustType").val() == "priceInfo"?me.priceInfoSetting:me.priceCoeSetting;
  142. let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas;
  143. let dataCode = setting.header[col].dataCode;
  144. let evaluate = datas[row];
  145. let value = args.newValue;
  146. if (value&&! sheetCommonObj.checkData(col,setting,value)) {
  147. alert('输入的数据类型不对,请重新输入!');
  148. return me.refreshSheetDatas();
  149. }
  150. if(dataCode == 'marketPrice'){
  151. dataCode = 'market_price';
  152. if(evaluate.is_evaluate == 1){
  153. alert("当前材料市场价已被锁定,修改请先返回人材机汇总界面解除锁定。");
  154. return me.refreshSheetDatas();
  155. }
  156. if(evaluate.is_related){//关联的情况下,直接修改工料机价格
  157. return projectObj.project.projectGLJ.updatePrice(evaluate,dataCode,value,'rg', projectGljObject.refreshViewsData);
  158. }
  159. }
  160. if(dataCode == "standardPrice") value = scMathUtil.roundForObj(value,getDecimal('glj.unitPrice'))+"";
  161. let edata = {type:'contractor_list',doc:{},action:"update",ID:evaluate.ID};
  162. if(evaluate[dataCode] == value) return me.refreshSheetDatas();
  163. edata.doc[dataCode] = value;
  164. configMaterialObj.updateEvaluateMaterial([edata],false);
  165. },
  166. deleteAdjust:function () {
  167. let me = this,updateMap={};
  168. let projectGLJ = projectObj.project.projectGLJ;
  169. let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas;
  170. let sels = this.spread.getActiveSheet().getSelections();
  171. let select = sels.length > 0? sels[0]:null;
  172. if(!select) return;
  173. for(let i =0;i<select.rowCount;i++){
  174. let recode = datas[select.row+i];
  175. if(recode) updateMap[recode.id] = {is_info_adjust:0,is_coe_adjust:0};
  176. }
  177. if( _.isEmpty(updateMap)) return;
  178. projectGLJ.batchUpdateGLJProperty(updateMap,materialAdjustObj.refreshSheetDatas);
  179. },
  180. showPriceInfoDatas:function () {
  181. configMaterialObj.configSpread.setActiveSheetIndex(2);
  182. let sel = this.priceInfoSheet.getSelections()[0];
  183. let oldData = sel.row<this.priceInfoDatas.length?this.priceInfoDatas[sel.row]:"";
  184. this.priceInfoDatas = this.getPirceInfoDatas();
  185. sheetCommonObj.showData(this.priceInfoSheet, this.priceInfoSetting,this.priceInfoDatas);
  186. this.priceInfoSheet.setRowCount(this.priceInfoDatas.length);
  187. sel.row = oldData?_.findIndex(this.priceInfoDatas,{'ID':oldData.ID}):'';
  188. this.priceInfoSheet.setSelection(sel.row==-1?0:sel.row,sel.col,sel.rowCount,sel.colCount);
  189. },
  190. showPriceCoeDatas:function () {
  191. configMaterialObj.configSpread.setActiveSheetIndex(3);
  192. let sel = this.priceCoeSheet.getSelections()[0];
  193. let oldData = sel.row<this.priceCoeDatas.length?this.priceCoeDatas[sel.row]:"";
  194. this.priceCoeDatas = this.getPriceCoeDatas();
  195. sheetCommonObj.showData(this.priceCoeSheet, this.priceCoeSetting,this.priceCoeDatas);
  196. this.priceCoeSheet.setRowCount(this.priceCoeDatas.length);
  197. sel.row = oldData?_.findIndex(this.priceCoeDatas,{'ID':oldData.ID}):'';
  198. this.priceCoeSheet.setSelection(sel.row==-1?0:sel.row,sel.col,sel.rowCount,sel.colCount);
  199. },
  200. getPirceInfoDatas:function(projectGLJList,contractor_list,decimalObj){
  201. let datas = [];
  202. let pgljList = projectGLJList?projectGLJList:projectObj.project.projectGLJ.datas.gljList;
  203. let contractorList = contractor_list?contractor_list:projectObj.project.contractor_list.datas;
  204. let billsDecimal = decimalObj?decimalObj.bills.totalPrice:getDecimal('bills.totalPrice');
  205. let gljMap = _.indexBy(pgljList,'id');
  206. for(let e of contractorList){
  207. let t = {
  208. ID:e.ID,
  209. projectID: e.projectID,
  210. is_related:e.is_related,//关联,1关,0不关
  211. projectGLJID:e.projectGLJID,//关联工料机ID
  212. seq:e.seq,//序号
  213. code:e.code,
  214. name:e.name,
  215. specs:e.specs,
  216. unit:e.unit,
  217. type:e.type,
  218. marketPrice:e.market_price,
  219. quantity:e.quantity,
  220. remark:e.remark,
  221. supply:e.supply,
  222. riskCoe : e.riskCoe,
  223. is_evaluate:0,
  224. standardPrice : e.standardPrice
  225. };
  226. let pglj = gljMap[e.projectGLJID];
  227. if(e.is_related && pglj){
  228. gljOprObj.setGLJPrice(t,pglj);
  229. t.vender = pglj.vender;
  230. t.supply = pglj.supply;
  231. t.is_evaluate = pglj.is_evaluate;
  232. t.quantity = pglj.quantity;
  233. }
  234. t.totalPrice = scMathUtil.roundForObj(parseFloat(t.quantity) * parseFloat(t.marketPrice) ,billsDecimal);
  235. datas.push(t);
  236. }
  237. return _.sortByAll(datas,'code');
  238. },
  239. getPriceCoeDatas:function (projectGLJList,contractor_list,totalFee,decimalObj) {
  240. let datas = [];
  241. let pgljList = projectGLJList?projectGLJList:projectObj.project.projectGLJ.datas.gljList;
  242. let contractorList = contractor_list?contractor_list:projectObj.project.contractor_list.datas;
  243. let billsDecimal = decimalObj?decimalObj.bills.totalPrice:getDecimal('bills.totalPrice');
  244. let gljMap = _.indexBy(pgljList,'id');
  245. if(!gljUtil.isDef(totalFee)){
  246. let node = projectObj.project.Bills.getEngineeringCostNode(projectObj.mainController);
  247. totalFee = node && node.data.feesIndex && node.data.feesIndex.common?node.data.feesIndex.common.totalFee:0;
  248. }
  249. for(let e of contractorList){
  250. let t = {
  251. ID:e.ID,
  252. projectID: e.projectID,
  253. is_related:e.is_related,//关联,1关,0不关
  254. projectGLJID:e.projectGLJID,//关联工料机ID
  255. seq:e.seq,//序号
  256. code:e.code,
  257. name:e.name,
  258. specs:e.specs,
  259. unit:e.unit,
  260. type:e.type,
  261. marketPrice:e.market_price,
  262. quantity:e.quantity,
  263. remark:e.remark,
  264. supply:e.supply,
  265. is_evaluate:0,
  266. FO : e.FO,
  267. FI : e.FI
  268. };
  269. let pglj = gljMap[e.projectGLJID];
  270. if(e.is_related && pglj){
  271. gljOprObj.setGLJPrice(t,pglj);
  272. t.vender = pglj.vender;
  273. t.supply = pglj.supply;
  274. t.quantity = pglj.quantity;
  275. t.is_evaluate = pglj.is_evaluate;
  276. }
  277. t.totalPrice = scMathUtil.roundForObj(parseFloat(t.quantity) * parseFloat(t.marketPrice) ,billsDecimal);
  278. if(totalFee !==0) t.varWeight = scMathUtil.roundForObj(t.totalPrice/totalFee,2);
  279. datas.push(t);
  280. }
  281. return _.sortByAll(datas,'code');
  282. },
  283. getCommonObject:function (glj) {
  284. let data ={
  285. select:0,
  286. id:glj.id,
  287. code:glj.code,
  288. name:glj.name,
  289. specs:glj.specs,
  290. unit:glj.unit,
  291. type:glj.type,
  292. quantity:glj.quantity,
  293. supply:glj.supply,
  294. originPlace:glj.originPlace,
  295. vender:glj.vender,
  296. brand:glj.brand,
  297. remark:glj.remark
  298. };
  299. gljOprObj.setGLJPrice(data,glj);
  300. return data;
  301. },
  302. checkedDefualtOption:function (className) {
  303. for(let a of $("."+className)){
  304. if(className == "pglj_sel_input"|| a.id == "glj_sel_material" || a.id == "glj_sel_main"||a.id =="glj_sel_eqp") $(a).prop("checked",true)
  305. }
  306. },
  307. insertEmptyRow : function () {
  308. let ndata = {type:"contractor_list",doc:{},action:"add"};
  309. ndata.doc['ID'] = uuid.v1();
  310. ndata.doc['is_related'] = 0;
  311. ndata.doc['seq'] = "";
  312. ndata.doc['projectID'] = projectObj.project.ID();
  313. ndata.doc['code'] = "";
  314. ndata.doc['name'] = "";
  315. ndata.doc['unit'] = "";
  316. ndata.doc['originPlace'] = "";
  317. ndata.doc['vender'] = "";
  318. ndata.doc['remark'] = "";
  319. ndata.doc['supply'] = "";
  320. ndata.doc['riskCoe'] = "";
  321. ndata.doc['standardPrice'] = "";
  322. ndata.doc['FO'] = "";
  323. ndata.doc['FI'] = "";
  324. configMaterialObj.updateEvaluateMaterial([ndata],false);
  325. }
  326. };
  327. let gljFromObj={
  328. spread:null,
  329. sheet:null,
  330. datas:[],
  331. setting:{
  332. header: [
  333. {headerName: "选择", headerWidth: 45, dataCode: "select", hAlign: "center", dataType: "String",cellType:'checkBox'},
  334. {headerName: "编码", headerWidth: 80, dataCode: "code", dataType: "String"},
  335. {headerName: "类型", headerWidth: 30, dataCode: "short_name", hAlign: "center", dataType: "String"},
  336. {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'},
  337. {headerName: "规格型号", headerWidth: 100, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'},
  338. {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
  339. {headerName: "总消耗量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
  340. {headerName: "市场价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:"glj.unitPrice"
  341. {headerName: "供货方式", headerWidth: 70, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap},
  342. {headerName: "暂估", headerWidth: 45, dataCode: "is_evaluate", hAlign: "center", dataType: "String",cellType:'checkBox'},
  343. {headerName: "产地", headerWidth: 80, dataCode: "originPlace", hAlign: "left", dataType: "String"},
  344. {headerName: "厂家", headerWidth: 80, dataCode: "vender", hAlign: "left", dataType: "String"},
  345. {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"}
  346. ],
  347. view: {
  348. lockColumns: ["is_evaluate"]
  349. }
  350. },
  351. checkType:"取消",//记住点击过的按钮的text
  352. initSpread:function () {
  353. if(!this.spread){
  354. this.spread = SheetDataHelper.createNewSpread($("#glj_from_sheet")[0]);
  355. sheetCommonObj.spreadDefaultStyle(this.spread);
  356. }else {
  357. this.spread.refresh();
  358. }
  359. this.sheet = this.spread.getSheet(0);
  360. sheetCommonObj.initSheet(this.sheet,this.setting);
  361. this.sheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onEditStarting);
  362. this.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, this.onClipboardPasting);
  363. this.sheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onValueChanged);
  364. this.sheet.setRowHeight(0, 36, 1);
  365. disableRightMenu("glj_from_sheet",this.spread);
  366. },
  367. onEditStarting:function (e,args) {
  368. args.cancel = true;
  369. },
  370. onClipboardPasting:function (e,args) {
  371. args.cancel = true;
  372. },
  373. onValueChanged:function (e,args) {
  374. let me = gljFromObj;
  375. let value = args.newValue;
  376. value = value == true?1:0;
  377. me.datas[args.row].select = value;
  378. },
  379. showDatas:function () {
  380. this.datas = [];
  381. let gljList = projectObj.project.projectGLJ.datas.gljList;
  382. gljList = this.filterGLJ(gljList);
  383. gljList = sortProjectGLJ(gljList);
  384. for(let glj of gljList){
  385. this.datas.push(this.getSheetDatas(glj));
  386. }
  387. this.refreshDatas();
  388. },
  389. filterGLJ:function (gljList) {
  390. let typeMap = {};
  391. for(let ch of $(".glj_sel_input:checked")){
  392. typeMap[$(ch).val()] = true;
  393. }
  394. let inputV = $("#glj_sel_input").val();
  395. return _.filter(gljList,function (item) {
  396. if(item.quantity === 0 || item.quantity === '0') return false;
  397. if(!typeMap[0]){//如果没有勾选所有,下面再细分
  398. let firstS = (item.type+"").substring(0,1);
  399. if(!typeMap[firstS]) return false
  400. }
  401. if(inputV!=""){//输入的关键字过滤
  402. if(item.code.indexOf(inputV)==-1 && item.name.indexOf(inputV)==-1) return false
  403. }
  404. return true;
  405. });
  406. },
  407. refreshDatas:function () {
  408. this.checkByType(this.checkType);
  409. sheetCommonObj.showData(this.sheet, this.setting,this.datas);
  410. this.sheet.setRowCount(this.datas.length);
  411. },
  412. getSheetDatas(glj){
  413. let projectGLJ = projectObj.project.projectGLJ;
  414. let materialIdList = projectGLJ.datas.constData.materialIdList;
  415. let data = materialAdjustObj.getCommonObject(glj);
  416. data.select = 0;
  417. data.short_name = projectGLJ.getShortNameByID(glj.type);
  418. // 只有材料才显示是否暂估
  419. if (materialIdList.indexOf(glj.type) >= 0) data.is_evaluate = glj.is_evaluate;
  420. data.from = glj;
  421. data.is_contractor_material = glj.is_contractor_material;
  422. return data;
  423. },
  424. checkByType:function (type) {
  425. for(let d of this.datas){
  426. d.select = 0;
  427. switch (type){
  428. case "全选":
  429. d.select = 1;
  430. break;
  431. case "全选主材":
  432. if(d.type == 4) d.select = 1;
  433. break;
  434. case "全选设备":
  435. if(d.type == 5) d.select = 1;
  436. break;
  437. case "取消":
  438. d.select = d.is_contractor_material?1:0;
  439. break;
  440. }
  441. }
  442. },
  443. confirmSelect:function () {
  444. let tasks = [];
  445. let datas = projectObj.project.contractor_list.datas,modelType= 'contractor_list',field= 'is_contractor_material';
  446. let evaluateMap = _.indexBy(datas,"projectGLJID");
  447. let evaluateKeyMap = {};//关键字映射表
  448. for(let e of datas){
  449. let eIndex = gljUtil.getIndex(e,gljUtil.materialKeyArray);
  450. evaluateKeyMap[eIndex] = e;
  451. }
  452. for(let d of this.datas){
  453. if(d.select == 1){//如果是选中状态
  454. if(d[field] == 1) {//如果已经标记为承包人材料
  455. let evl = evaluateMap[d.id];
  456. if(evl){
  457. //这里应该是错误检查的保证,按正常是不应该出现这种情况的
  458. if(evl.is_related !=1) tasks.push({type:modelType,doc:{projectGLJID:d.id,is_related:1},action:"update",ID:evl.ID});
  459. }else {
  460. tasks.push(getNewEval(d,modelType))
  461. }
  462. }else {//如果不是暂估,要改成暂估
  463. let pdata = {id:d.id,doc:{},action:'update',type:"glj_list"};
  464. pdata.doc[field] = 1;
  465. tasks.push(pdata);
  466. let evaluate = evaluateKeyMap[gljUtil.getIndex(d,gljUtil.materialKeyArray)];
  467. if(evaluate) {//如果已经存在5个关键字相同的暂估材料,则自动关联起来
  468. let edata = {type:modelType,doc:{projectGLJID:d.id,is_related:1},action:"update",ID:evaluate.ID};
  469. tasks.push(edata);
  470. }else {//如果不存在,则生成一条新的
  471. tasks.push(getNewEval(d,modelType));
  472. }
  473. }
  474. }else {//未选中状态的,检查一下是否存在关联的情况,取消关联
  475. let tdoc = {};
  476. tdoc[field] = 0;
  477. if(d[field] == 1) tasks.push({id:d.id,doc:tdoc,action:'update',type:"glj_list"});
  478. let evl = evaluateMap[d.id];
  479. if(evl){
  480. if(evl.is_related ==1) tasks.push({type:modelType,doc:{is_related:0},action:"update",ID:evl.ID});
  481. }
  482. let evaluate = evaluateKeyMap[gljUtil.getIndex(d,gljUtil.materialKeyArray)];
  483. if(evaluate) {
  484. if(evaluate.is_related ==1) tasks.push({type:modelType,doc:{is_related:0},action:"update",ID:evaluate.ID});
  485. }
  486. }
  487. }
  488. if(tasks.length > 0) configMaterialObj.updateEvaluateMaterial(tasks);
  489. function getNewEval(d,m_t) {
  490. let ndata = {type:m_t,doc:{},action:"add"};
  491. ndata.doc['ID'] = uuid.v1();
  492. ndata.doc['projectGLJID'] = d.id;
  493. ndata.doc['is_related'] = 1;
  494. ndata.doc['seq'] = d.code;
  495. ndata.doc['projectID'] = d.from.project_id;
  496. ndata.doc['code'] = d.code;
  497. ndata.doc['name'] = d.name;
  498. ndata.doc['specs'] = d.specs;
  499. ndata.doc['unit'] = d.unit;
  500. ndata.doc['quantity'] = d.quantity;
  501. ndata.doc['type'] = d.type;
  502. ndata.doc['market_price'] = d.from.unit_price.market_price;
  503. ndata.doc['originPlace'] = d.originPlace;
  504. ndata.doc['vender'] = d.vender;
  505. ndata.doc['remark'] = d.remark;
  506. ndata.doc['supply'] = d.supply;
  507. ndata.doc['riskCoe'] = "";
  508. ndata.doc['standardPrice'] = d.from.unit_price.market_price;
  509. ndata.doc['FO'] = "";
  510. ndata.doc['FI'] = "";
  511. return ndata;
  512. }
  513. }
  514. };
  515. $(function () {
  516. $("#adjustType").change(function () {
  517. materialAdjustObj.refreshSheetDatas();
  518. let val = $(this).val();
  519. let mixDatas = {projectID: projectObj.project.projectInfo.ID, updateType: 'update',
  520. properties: {'property.gljAdjustType': val},
  521. options: {}, labourCoes: {}, rations: [], bills: []};
  522. CommonAjax.post('/pm/api/updateMixDatas', {user_id: userID, mixDataArr: mixDatas}, function (rstData) {
  523. projectObj.project.projectInfo.property.gljAdjustType = val;
  524. });
  525. });
  526. $('#selectFromGLJ').on('shown.bs.modal',function(e){
  527. gljFromObj.checkType="取消";
  528. gljFromObj.initSpread();
  529. gljFromObj.showDatas();
  530. });
  531. $(".glj_sel_input").change(function () {
  532. let check = $(this).prop("checked");
  533. if($(this).val() == 0){//勾选的是全选,其它的勾选项跟着改变
  534. for(let a of $(".glj_sel_input")){
  535. $(a).prop("checked",check)
  536. }
  537. }else {//勾选其它选项
  538. let a_checked = true;
  539. for(let o of $(".glj_sel_input_other")){//如果其它的有一个不勾选,则所有项也不打勾
  540. if($(o).prop("checked") === false){
  541. a_checked = false;
  542. break;
  543. }
  544. }
  545. $("#glj_sel_all").prop("checked",a_checked);
  546. }
  547. gljFromObj.showDatas();
  548. });
  549. $("#glj_sel_btn_find").click(function () {
  550. gljFromObj.showDatas();
  551. });
  552. $(".glj_sel_check_btn").click(function () {
  553. gljFromObj.checkType = $(this).text();
  554. gljFromObj.refreshDatas();
  555. })
  556. $("#glj_sel_confirm").click(function () {
  557. gljFromObj.confirmSelect();
  558. })
  559. });