preventionCompletion.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. var locat = (window.location + '').split('/');
  2. if ('fhsms' == locat[3]) {
  3. locat = locat[0] + '//' + locat[2];
  4. } else {
  5. locat = locat[0] + '//' + locat[2] + '/' + locat[3];
  6. }
  7. var EDITMONTH = '';//当前编辑月份
  8. var flag = true;
  9. $(function() {
  10. $(getTop(globalThis).hangge());
  11. //initTables();
  12. //mergeCell();
  13. });
  14. function editTable(){
  15. if(editflag == 0){
  16. $('#editbutton').html('编辑中');
  17. $(".editInput").removeAttr("readonly");
  18. editflag = 1;
  19. }else if(editflag == 1){
  20. $('#editbutton').html('编辑');
  21. $(".editInput").attr("readonly","readonly" );
  22. editflag = 0;
  23. }
  24. }
  25. //合并单元格
  26. function mergeCell(){
  27. var pTr = $('#simple-table tbody').find('td');
  28. var companyArr = new Array();
  29. $.each(pTr,function(i,obj){
  30. var name = $(obj).attr('name');
  31. if(name != undefined)
  32. companyArr.push(name);
  33. });
  34. //相同name去重,合并单元格
  35. companyArr = rep(companyArr);
  36. $.each(companyArr,function(i,obj){
  37. var td = $('#simple-table tbody').find('td[name="'+obj+'"]');
  38. $.each(td,function(n){
  39. var t = $(td).eq(n);//当前td
  40. var currentTr = $(t).parent();//当前td所属tr
  41. var count = $(td).length;//相同name个数
  42. //合并单元格
  43. if(0 == n){
  44. $(t).attr('rowspan',obj.substring(0, 2) == "c_" ? count+1:count).css('vertical-align','middle');
  45. }else{
  46. $(t).remove();
  47. }
  48. //生成序号,根据道路排序
  49. if(obj.substring(0, 2) == "r_"){
  50. $(currentTr).find('.num').text(n+1);
  51. }
  52. //生成合计
  53. if(n == count -1){
  54. //公司
  55. if(obj.substring(0, 2) == "c_"){
  56. var company = obj.substring(2,obj.length);
  57. var monthTd = '';
  58. for(var i=1;i<13;i++){
  59. monthTd += '<td class="center"><span class="sumCell" name="'+company+'_ACTUAL_COST_'+i+'"></span></td>';
  60. monthTd += '<td class="center"><span class="sumCell" name="'+company+'_PAY_COST_'+i+'"></span></td>';
  61. monthTd += '<td class="center"><span class="sumCell" name="'+company+'_RATIO_'+i+'"></span></td>';
  62. }
  63. monthTd += '<td class="center"><span class="sumCell" name="'+company+'_ACTUAL_COST"></span></td>';
  64. monthTd += '<td class="center"><span class="sumCell" name="'+company+'_PAY_COST"></span></td>';
  65. monthTd += '<td class="center"><span class="sumCell" name="'+company+'_RATIO"></span></td>';
  66. /*var sumTr = '<tr class="totaltr"><td colspan="6" class="center">小计</td>'+
  67. '<td class="center"><span class="sumCell" name="'+company+'_PROJECT_COST"></span></td>'+
  68. '<td class="center"><span class="sumCell" name="'+company+'_AUDIT_FEE"></span></td>'+
  69. '<td></td>'+
  70. monthTd+
  71. '</tr>'
  72. $(currentTr).after(sumTr);*/
  73. }
  74. }
  75. });
  76. });
  77. calcutSum();
  78. }
  79. //格式化数字
  80. function numFormat(num){
  81. if(!isNaN(Number(num)) && Number(num) != "0"){
  82. if(num<10) num = Number(num).toFixed(1);
  83. else num = Math.round(Number(num));
  84. }
  85. return num;
  86. }
  87. //汇总统计
  88. function calcutSum(){
  89. var sumCell = $('#simple-table tbody').find('.sumCell');
  90. $(sumCell).each(function(i,o){
  91. var name = $(o).attr('name');
  92. var sum = 0;
  93. var sumLabel = $('#simple-table tbody label[name="'+name+'"]');
  94. $(sumLabel).each(function(n,s){
  95. var v = $(s).text().trim();
  96. if(typeof(v) != "undefined")
  97. sum += Number(v);
  98. });
  99. $(o).text(numFormat(sum));
  100. });
  101. }
  102. //数组去重
  103. function rep(arr){
  104. var o={};
  105. var new_arr = [];
  106. for(var i=0;i<arr.length;i++){
  107. var k=arr[i];
  108. if(!o[k]){
  109. o[k]=true;
  110. new_arr.push(k);
  111. }
  112. }
  113. return new_arr;
  114. }
  115. //初始化表格数据
  116. function initTables(){
  117. //数据初始化
  118. $(varList).each(function(i,obj){
  119. var companyId = obj.COMPANY_ID;
  120. var roadId = obj.ROAD_ID;
  121. var year = obj.YEAR;
  122. var projectName = obj.PROJECT_NAME;
  123. var tr = $('#simple-table tbody').find('tr').eq(i);
  124. $(monthRoadList).each(function(n,o){
  125. var o_companyId = o.COMPANY_ID;
  126. var o_roadId = o.ROAD_ID;
  127. var o_year = o.YEAR;
  128. var month = o.MONTH;
  129. var o_projectName = o.PROJECT_NAME;
  130. if(companyId == o_companyId && roadId == o_roadId && year == o_year && projectName == o_projectName){
  131. $(tr).find('label[class="editInput ACTUAL_COST_'+month+'"]').text(o.ACTUAL_COST).parent().attr('title',o.ACTUAL_COST);
  132. $(tr).find('label[class="editInput PAY_COST_'+month+'"]').text(o.PAY_COST).parent().attr('title',o.PAY_COST);
  133. $(tr).find('label[class="editInput RATIO_'+month+'"]').text(o.RATIO).parent().attr('title',o.RATIO);
  134. }
  135. });
  136. $(sumRoadList).each(function(n,o){
  137. var o_companyId = o.COMPANY_ID;
  138. var o_roadId = o.ROAD_ID;
  139. if(companyId == o_companyId && roadId == o_roadId){
  140. $(tr).find('label[name="'+companyId+'_ACTUAL_COST"]').text(o.SUM_ACTUAL_COST).parent().attr('title',o.SUM_ACTUAL_COST);;
  141. $(tr).find('label[name="'+companyId+'_PAY_COST"]').text(o.SUM_PAY_COST).parent().attr('title',o.SUM_PAY_COST);;
  142. $(tr).find('label[name="'+companyId+'_RATIO"]').text(o.SUM_RATIO).parent().attr('title',o.SUM_RATIO);;
  143. }
  144. });
  145. });
  146. }
  147. function editValue(e){
  148. validateTip(e);
  149. }
  150. //校验提示
  151. function validateTip(e){
  152. if($(e).val() != '')
  153. $(e).val($(e).val().trim());
  154. $(e).parent().find('.vtip').remove();
  155. var name = $(e).attr('name');
  156. var index = name.lastIndexOf("_");
  157. name = name.substring(0,index);
  158. var vtip = validateFun(name,$(e).val(),e);
  159. if(vtip != ""){
  160. flag = false;
  161. $(e).parent().append("<div class='vtip'>"+vtip+"</div>");
  162. $(e).parent().find('.vtip').width($(e).parent().width());
  163. }
  164. return vtip;
  165. }
  166. //校验规则
  167. function validateFun(name,val,e){
  168. if(val == ''){
  169. return "该字段不能为空";
  170. }
  171. var re = new RegExp("^(\\-|\\+)?\\d+(\\.\\d+)?$");
  172. //是否为数字
  173. if(!re.test(val)) return "请填写数字";
  174. var vscale = "1";//小数位数
  175. var arr = (val + '').split(".");
  176. if(arr.length == 2){
  177. if(arr[1] != '' && arr[1].length > vscale)
  178. return "小数精度不超过"+vscale;
  179. }
  180. if('RATIO' == name && numFormat(val) > 100){
  181. return "数值不能超过100";
  182. }
  183. return "";
  184. }
  185. $.fn.serializeObject = function(){
  186. var o = {};
  187. var month = '';
  188. var a = this.serializeArray();
  189. $.each(a,function(){
  190. var name = this.name;
  191. var index = name.lastIndexOf("_");
  192. month = name.substring(index+1,name.length);
  193. name = name.substring(0,index);
  194. if(o[name]){
  195. if(!o[name].push){
  196. o[name] = [o[name]];
  197. }
  198. o[name].push(this.value || '');
  199. }else{
  200. o[name] = this.value || '';
  201. }
  202. });
  203. o.month = month;
  204. return o;
  205. }
  206. function save(){
  207. var formData = $('#Form').serializeObject();
  208. var data = new Array();
  209. flag = true;
  210. $(varList).each(function(i,obj){
  211. var o = {};
  212. o.company = obj.COMPANY;
  213. o.companyId = obj.COMPANY_ID;
  214. o.year = obj.YEAR;
  215. o.road = obj.ROAD;
  216. o.roadId = obj.ROAD_ID;
  217. o.projectName = obj.PROJECT_NAME;
  218. o.month = formData.month;
  219. o.actualCost = formData.ACTUAL_COST[i];
  220. o.payCost = formData.PAY_COST[i];
  221. o.ratio = formData.RATIO[i];
  222. data.push(o);
  223. var month = o.month;
  224. validateTip($("input[name='ACTUAL_COST_"+month+"']").eq(i));
  225. validateTip($("input[name='PAY_COST_"+month+"']").eq(i));
  226. validateTip($("input[name='RATIO_"+month+"']").eq(i));
  227. });
  228. if(!flag)
  229. return;
  230. $.ajax({
  231. url : locat+'/preventionCompletion/save.do',
  232. type : "post",
  233. dataType : 'json',
  234. headers: {
  235. 'Accept': 'application/json',
  236. 'Content-Type': 'application/json'
  237. },
  238. data:JSON.stringify(data),
  239. success : function(data){
  240. if(data.msg == 'ok'){
  241. window.location.reload();
  242. }else{
  243. alert('error');
  244. }
  245. }
  246. });
  247. }
  248. //编辑
  249. function editMonth(month,dom){
  250. if(EDITMONTH != '' && EDITMONTH != month){
  251. bootbox.confirm("其他月份尚未保存,是否进行保存?", function(result) {
  252. if(result) {
  253. save();
  254. }else{
  255. cancle();
  256. edit(month,dom);
  257. }
  258. });
  259. }else{
  260. edit(month,dom);
  261. }
  262. }
  263. //取消编辑
  264. function cancle(){
  265. $('#saveBtn').addClass('dispaly');
  266. $('#cancleBtn').addClass('dispaly');
  267. var month = EDITMONTH;
  268. $('.month_'+month).attr('width','5%');
  269. var actualCostName = 'ACTUAL_COST_'+month;
  270. var payCostName = 'PAY_COST_'+month;
  271. var ratioName = 'RATIO_'+month;
  272. removeInput(actualCostName);
  273. removeInput(payCostName);
  274. removeInput(ratioName);
  275. EDITMONTH = '';
  276. }
  277. function removeInput(name){
  278. $('.'+name).css('display','block');
  279. $('.'+name).next().remove();
  280. $('.vtip').remove();
  281. }
  282. //编辑
  283. function edit(month,dom){
  284. $('#saveBtn').removeClass('dispaly');
  285. $('#cancleBtn').removeClass('dispaly');
  286. EDITMONTH = month;
  287. $(dom).parent().attr('width','50%');
  288. var actualCostName = 'ACTUAL_COST_'+month;
  289. var payCostName = 'PAY_COST_'+month;
  290. var ratioName = 'RATIO_'+month;
  291. addInput(actualCostName,6);
  292. addInput(payCostName,6);
  293. addInput(ratioName,4);
  294. }
  295. function addInput(name,maxlen){
  296. $('.'+name).css('display','none');
  297. $('.'+name).next().remove();
  298. var input = '<input onblur="editValue(this)" name="'+name+'" class="editInput" type="text" style="width:50px" maxlength = '+maxlen+'/>';
  299. $('.'+name).after(input);
  300. //文本框副总
  301. $('.'+name).each(function(i,obj){
  302. var v = $(obj).text().trim();
  303. $(obj).next('input').val(v);
  304. });
  305. }
  306. //获取本网站的顶级节点,解决被其他网站iframe引入时发生的跨域问题
  307. function getTop(obj){
  308. var tp = obj;
  309. //alert(obj.name);
  310. if (tp.mainFrame == undefined) {
  311. tp = tp.parent;
  312. return getTop(tp);
  313. } else {
  314. return tp;
  315. }
  316. }