scientificCompletion.js 11 KB

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