yjMonthProgress.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. var locat = (window.location+'').split('/');
  2. $(function(){if('fhsms'== locat[3]){locat = locat[0]+'//'+locat[2];}else{locat = locat[0]+'//'+locat[2]+'/'+locat[3];};});
  3. $(getTop(globalThis).hangge());
  4. var pd_TABLETYPE = $('#pd_TABLETYPE').html();
  5. var subtable = $('#subtable').html();
  6. var pd_COMPANY = $("#pd_COMPANY").html();
  7. var pd_COMPANY_ID = $("#pd_COMPANY_ID").html();
  8. var pd_YEAR = $("#pd_YEAR").html();
  9. var pd_mode = $("#pd_mode").html();
  10. var editflag = 0;
  11. var validateJsonData = new Object();
  12. function tableInit(){
  13. //小计行的总计列
  14. // setTotalCell(0);
  15. $('#simple-table tbody .edittr').each(function(index,e){
  16. //行内总计
  17. setRowSumCell(e);
  18. //百分比初始化
  19. setTrPercentCell(e);
  20. });
  21. //小计行的总计列
  22. var totalcells = $('#simple-table .totaltr .sumCell');
  23. for(var i=0; i<totalcells.length; i++){
  24. setTotalCell(i);
  25. }
  26. //总计行百分比初始化
  27. $('#simple-table tbody .totaltr').each(function(index,e){
  28. setTrPercentCell(e);
  29. });
  30. //数字格式化
  31. $("#simple-table [totalType='sum']").each(function(index,e){
  32. var num = $(e).val();
  33. num = numFormat(num);
  34. $(e).val(num);
  35. });
  36. }
  37. function setTotalCell(index){
  38. if(index < $('#simple-table .totaltr .sumCell').length){
  39. var totalvalue = 0;
  40. for(var i=0; i<$('#simple-table .edittr').length; i++){
  41. var editcellval;
  42. if($('#simple-table .edittr').eq(i).find('[totalType="sum"]')[index].tagName == "INPUT")
  43. editcellval = $('#simple-table .edittr').eq(i).find('[totalType="sum"]').eq(index).val();
  44. else if($('#simple-table .edittr').eq(i).find('[totalType="sum"]')[index].tagName == "SPAN")
  45. editcellval = $('#simple-table .edittr').eq(i).find('[totalType="sum"]').eq(index).html();
  46. if(typeof(editcellval) != "undefined")
  47. totalvalue += Number(editcellval);
  48. }
  49. $('#simple-table .totaltr .sumCell').eq(index).html(numFormat(totalvalue) + '');
  50. $('#simple-table_tableColumnClone .totaltr .sumCell').eq(index).html(numFormat(totalvalue) + '');
  51. }
  52. }
  53. function editTable(){
  54. if(editflag == 0){
  55. $('#editbutton').html('编辑中');
  56. $("input.editInput").removeAttr("readonly");
  57. editflag = 1;
  58. }else if(editflag == 1){
  59. $('#editbutton').html('编辑');
  60. $("input.editInput").attr("readonly","readonly" );
  61. editflag = 0;
  62. }
  63. }
  64. function saveTable(type){
  65. if($('.vtip').length == 0){
  66. if(editflag == 1){
  67. $('#editbutton').html('编辑');
  68. $("input.editInput").attr("readonly","readonly" );
  69. editflag = 0;
  70. }
  71. var tabledata = dataResult();
  72. $.ajax({
  73. type : "post",
  74. url : locat+'/yjmonthProgress/saveData.do?TABLETYPE='+pd_TABLETYPE,
  75. data:{
  76. data:JSON.stringify(tabledata)
  77. },
  78. // type : "get",
  79. // url : locat+'/yjmonthProgress/saveData.do?data='+JSON.stringify(tabledata)+'&TABLETYPE='+pd_TABLETYPE,
  80. dataType : 'json',
  81. success : function(data){
  82. //保存后不能改项目名称
  83. $('.PROJECT_NAME').removeClass("editInput");
  84. //self.location.reload()
  85. $('#pd_mode').html("edit");
  86. getTop(globalThis).hangge();
  87. bootbox.dialog({
  88. message: "<span class='bigger-110'>保存成功!</span>",
  89. buttons:
  90. {
  91. "button" :
  92. {
  93. "label" : "确定",
  94. "className" : "btn-sm btn-success",
  95. "callback" : function(){
  96. //var selfhref = self.location.href;
  97. self.location.href;
  98. }
  99. }
  100. }
  101. });
  102. }
  103. });
  104. }else{
  105. getTop(globalThis).hangge();
  106. bootbox.dialog({
  107. message: "<span class='bigger-110'>仍有数据不符合要求!</span>",
  108. buttons:
  109. {
  110. "button" :
  111. {
  112. "label" : "确定",
  113. "className" : "btn-sm btn-success",
  114. "callback" : function(){
  115. //var selfhref = self.location.href;
  116. self.location.href;
  117. }
  118. }
  119. }
  120. });
  121. }
  122. }
  123. function dataResult(){
  124. var mapArry = $('#simple-table form').serializeArray();
  125. var dataArry = [];
  126. var cellcount = 55;
  127. var recordcount = $('#simple-table .edittr').length;
  128. for(var i=0; i<recordcount; i++){
  129. var recordmap = new Object();
  130. for(var j=0; j<cellcount; j++){
  131. recordmap[mapArry[i*cellcount+j].name] = mapArry[i*cellcount+j].value;
  132. }
  133. dataArry.push(recordmap);
  134. }
  135. return dataArry;
  136. }
  137. function setSJWCGCL(e){
  138. var trindex = $('#simple-table_tableColumnClone tbody tr').index($(e).parent().parent());
  139. $('#simple-table tbody tr').eq(trindex).find('td .SJWCGCL').val($(e).val());
  140. }
  141. //主表编辑input失焦后操作
  142. function editValue(e){
  143. if(!$(e).attr('readonly')){
  144. //计算行内累计值
  145. setRowSumCell($(e).parent().parent()[0]);
  146. //计算行内百分比
  147. setTrPercentCell($(e).parent().parent()[0]);
  148. //计算小计行百分比
  149. setTrPercentCell($("#simple-table .totaltr")[0]);
  150. //小计行总计
  151. if($(e).attr("totalType") == "sum"){
  152. setTotalCell($(e).parent().parent().find('[totalType="sum"]').index(e));
  153. $(e).parent().parent().find('.rowSumCell[totalType="sum"]').each(function(index,e){
  154. setTotalCell($(e).parent().parent().find('[totalType="sum"]').index(e));
  155. });
  156. }
  157. //计算小计行百分比
  158. setTrPercentCell($("#simple-table .totaltr")[0]);
  159. //校验
  160. validateTip(e);
  161. }
  162. }
  163. function resetUnitTotal(e){
  164. if(!$(e).attr('readonly')){
  165. setUnitTotalCell($(e).parent().parent()[0]);
  166. setTotalCell(0);
  167. $('.PROJECT_COST').val($('.sumCell.TOTAL_COST').val());
  168. setProjectScale();
  169. }
  170. }
  171. function setTrPercentCell(tr){
  172. $(tr).find("td>.percentCell").each(function(index,e){
  173. var num1,num2;
  174. if($(tr).find("td>."+$(e).attr("num1"))[0].tagName == "INPUT") num1 = $(tr).find("td>."+$(e).attr("num1")).val();
  175. else if($(tr).find("td>."+$(e).attr("num1"))[0].tagName == "SPAN") num1 = $(tr).find("td>."+$(e).attr("num1")).html();
  176. if($(tr).find("td>."+$(e).attr("num2"))[0].tagName == "INPUT") num2 = $(tr).find("td>."+$(e).attr("num2")).val();
  177. else if($(tr).find("td>."+$(e).attr("num2"))[0].tagName == "SPAN") num2 = $(tr).find("td>."+$(e).attr("num2")).html();
  178. var result = percentage(num1, num2);
  179. if(e.tagName == "INPUT") $(e).val(result);
  180. else if(e.tagName == "SPAN") $(e).html(result);
  181. });
  182. }
  183. function setRowSumCell(tr){
  184. $(tr).find("td>.rowSumCell").each(function(index,e){
  185. var totalvalue = 0;
  186. var sumtype = $(e).attr('class').split(' ')[1] + '_';
  187. for(var i=1; i<13; i++){
  188. var editcellval ="";
  189. if(sumtype=="PLAN_COST_"){
  190. editcellval = $(tr).find("td>."+sumtype+i).html();
  191. }
  192. else{
  193. editcellval = $(tr).find("td>."+sumtype+i).val();
  194. }
  195. if(typeof(editcellval) != "undefined")
  196. totalvalue += Number(editcellval);
  197. }
  198. $(e).html(numFormat(totalvalue) + '');
  199. });
  200. }
  201. function setUnitTotalCell(tr){
  202. $(tr).find("td>.unitTotalCell").each(function(index,e){
  203. var num1 = $(tr).find("td>."+$(e).attr("num1")).val();
  204. var num2 = $(tr).find("td>."+$(e).attr("num2")).val();
  205. var result = unitTotal(num1, num2);
  206. $(e).val(result);
  207. });
  208. }
  209. function percentage(num1, num2){
  210. var percent = "";
  211. if(!isNaN(Number(num1)) && !isNaN(Number(num2)) && Number(num2) != "0" && num1 != '')
  212. percent = Math.round(Number(num1) / Number(num2) * 100) ;
  213. return percent;
  214. }
  215. function unitTotal(num1, num2){
  216. var unitTotal = "";
  217. if(!isNaN(Number(num1)) && !isNaN(Number(num2)) && Number(num1) != "0" && Number(num2) != "0") unitTotal = Number(num1) * Number(num2);
  218. if(!isNaN(Number(unitTotal)) && Number(unitTotal) != "0") unitTotal = numFormat(unitTotal);
  219. return unitTotal;
  220. }
  221. function numFormat(num){
  222. if(!isNaN(Number(num)) && Number(num) != "0"){
  223. if(num<10) num = Number(num).toFixed(1);
  224. else num = Math.round(Number(num));
  225. }
  226. return num;
  227. }
  228. //获取校验json
  229. function getValidateJson(){
  230. $.ajax({
  231. type : "get",
  232. url : locat + "/annualDailyComp/getValidateJson.do?TABLETYPE=" + pd_TABLETYPE,
  233. dataType : 'json',
  234. success : function(data){
  235. Object.assign(validateJsonData,data.map,data.submap);
  236. }
  237. });
  238. }
  239. //校验规则
  240. function validateFun(name,val,e){
  241. if(name){
  242. if(name.indexOf('ACTUAL_COST') == 0) name = 'ACTUAL_COST';
  243. else if(name.indexOf('PAY_COST') == 0) name = 'PAY_COST';
  244. var vtype = validateJsonData[name].type;
  245. var vlength = validateJsonData[name].length;
  246. var vscale = validateJsonData[name].scale;
  247. var vnotnull = validateJsonData[name].notnull;
  248. if(val != ""){
  249. if(vtype == 'decimal'){
  250. var re = new RegExp("^(\\-|\\+)?\\d+(\\.\\d+)?$");
  251. //是否为数字
  252. if(!re.test(val)) return "请填写数字";
  253. //小数位数
  254. if(vscale == "1") $(e).val(numFormat(val));
  255. if(vscale != "1"){
  256. if(val.split(".").length = 2){
  257. if(val.split(".")[1].length > vscale) return "小数精度不超过"+vscale;
  258. }
  259. // re = new RegExp("/^\\d+(\\.\\d{1,"+vscale+"})?$/");
  260. // if(!re.test(val)) return "小数精度不超过"+vscale;
  261. }
  262. }
  263. //长度
  264. if(val.length > vlength) return "长度超长";
  265. //分报告名称不能重复
  266. if(name == 'ITEM_NAME'){
  267. for(var i=0; i<$('.ITEM_NAME').length; i++){
  268. if($('.ITEM_NAME')[i] != e && $('.ITEM_NAME').eq(i).val() == val) return "该字段不能重复";
  269. }
  270. }
  271. }else{
  272. if(vnotnull == '1') return "该字段不能为空";
  273. //分报告名称非空校验
  274. if(name == 'ITEM_NAME'){
  275. if($(e).parent().parent().find('>td>.UNIT').val()!=''
  276. ||$(e).parent().parent().find('>td>.UNIT_PRICE').val()!=''
  277. ||$(e).parent().parent().find('>td>.NUMBER').val()!=''){
  278. return "该字段不能为空";
  279. }
  280. }
  281. }
  282. //分报告名称非空校验
  283. if(name == 'UNIT'||name == 'UNIT_PRICE'||name == 'NUMBER'){
  284. $(e).parent().parent().find('>td>.ITEM_NAME').parent().find('.vtip').remove();
  285. if($(e).parent().parent().find('>td>.UNIT').val()!=''
  286. ||$(e).parent().parent().find('>td>.UNIT_PRICE').val()!=''
  287. ||$(e).parent().parent().find('>td>.NUMBER').val()!=''){
  288. validateTip($(e).parent().parent().find('>td>.ITEM_NAME')[0]);
  289. }
  290. }
  291. }
  292. return "";
  293. }
  294. //校验提示
  295. function validateTip(e){
  296. $(e).val($(e).val().trim());
  297. $(e).parent().find('.vtip').remove();
  298. var vtip = validateFun($(e).attr('name'),$(e).val(),e);
  299. if(vtip != ""){
  300. $(e).parent().append("<div class='vtip'>"+vtip+"</div>");
  301. $(e).parent().find('.vtip').width($(e).parent().width());
  302. }
  303. }
  304. //删除
  305. function del(){
  306. if($('.ace:checked').length > 0){
  307. var roads=[],pnames=[];
  308. $('.ace:checked').each(function(index,e){
  309. roads.push($(e).parent().parent().parent().find('[name="ROAD_ID"]').val());
  310. pnames.push($(e).parent().parent().parent().find('[name="PROJECT_NAME"]').val());
  311. });
  312. bootbox.confirm("确定要删除吗?", function(result) {
  313. if(result) {
  314. $.ajax({
  315. type : "get",
  316. url : locat+'/yjmonthProgress/deleteData.do?COMPANY_ID='+pd_COMPANY_ID+'&YEAR='+pd_YEAR+'&roads='+roads.join(',')+'&pnames='+pnames.join(',')+'&TABLETYPE='+pd_TABLETYPE,
  317. dataType : 'json',
  318. success : function(data){
  319. if("success" == data.msg){
  320. location.reload(true);
  321. }else if("false" == data.msg){
  322. getTop(globalThis).hangge();
  323. bootbox.dialog({
  324. message: "<span class='bigger-110'>删除失败!</span>",
  325. buttons:
  326. {
  327. "button" :
  328. {
  329. "label" : "确定",
  330. "className" : "btn-sm btn-success"
  331. }
  332. }
  333. });
  334. }
  335. }
  336. });
  337. }
  338. });
  339. }
  340. }
  341. $(function(){
  342. tableInit();
  343. getValidateJson();
  344. });
  345. //获取本网站的顶级节点,解决被其他网站iframe引入时发生的跨域问题
  346. function getTop(obj){
  347. var tp = obj;
  348. //alert(obj.name);
  349. if (tp.mainFrame == undefined) {
  350. tp = tp.parent;
  351. return getTop(tp);
  352. } else {
  353. return tp;
  354. }
  355. }