dailyCompletion.js 10 KB

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