testCompletion.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+'/test/saveData.do?data='+JSON.stringify(tabledata)+'&TABLETYPE='+pd_TABLETYPE,*/
  69. type : "post",
  70. url : locat+'/test/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. //小计
  143. setTotalCell($(e).parent().parent().find('[totalType="sum"]').index(e));
  144. //小计汇总
  145. $(e).parent().parent().find('.rowSumCell[totalType="sum"]').each(function(index,e){
  146. setTotalCell($(e).parent().parent().find('[totalType="sum"]').index(e));
  147. });
  148. //计算小计行百分比
  149. setTrPercentCell($("#simple-table .totaltr")[0]);
  150. //校验
  151. validateTip(e);
  152. }
  153. }
  154. function setSJWCGCL(e){
  155. var trindex = $('#simple-table_tableColumnClone tbody tr').index($(e).parent().parent());
  156. $('#simple-table tbody tr').eq(trindex).find('td .SJWCGCL').val($(e).val());
  157. }
  158. function resetUnitTotal(e){
  159. if(!$(e).attr('readonly')){
  160. setUnitTotalCell($(e).parent().parent()[0]);
  161. setTotalCell(0);
  162. $('.PROJECT_COST').val($('.sumCell.TOTAL_COST').val());
  163. setProjectScale();
  164. }
  165. }
  166. function setTrPercentCell(tr){
  167. $(tr).find("td>.percentCell").each(function(index,e){
  168. var num1,num2;
  169. if($(tr).find("td>."+$(e).attr("num1"))[0].tagName == "INPUT") num1 = $(tr).find("td>."+$(e).attr("num1")).val();
  170. else if($(tr).find("td>."+$(e).attr("num1"))[0].tagName == "SPAN") num1 = $(tr).find("td>."+$(e).attr("num1")).html();
  171. if($(tr).find("td>."+$(e).attr("num2"))[0].tagName == "INPUT") num2 = $(tr).find("td>."+$(e).attr("num2")).val();
  172. else if($(tr).find("td>."+$(e).attr("num2"))[0].tagName == "SPAN") num2 = $(tr).find("td>."+$(e).attr("num2")).html();
  173. var result = percentage(num1, num2);
  174. if(e.tagName == "INPUT") $(e).val(result);
  175. else if(e.tagName == "SPAN") $(e).html(result);
  176. });
  177. }
  178. function setRowSumCell(tr){
  179. $(tr).find("td>.rowSumCell").each(function(index,e){
  180. var totalvalue = 0;
  181. var sumtype = $(e).attr('class').split(' ')[1] + '_';
  182. for(var i=1; i<13; i++){
  183. var editcellval ="";
  184. if(sumtype=="PLAN_COST_"){
  185. editcellval = $(tr).find("td>."+sumtype+i).html();
  186. }
  187. else{
  188. editcellval = $(tr).find("td>."+sumtype+i).val();
  189. }
  190. if(typeof(editcellval) != "undefined")
  191. totalvalue += Number(editcellval);
  192. }
  193. $(e).html(numFormat(totalvalue) + '');
  194. });
  195. }
  196. function setUnitTotalCell(tr){
  197. $(tr).find("td>.unitTotalCell").each(function(index,e){
  198. var num1 = $(tr).find("td>."+$(e).attr("num1")).val();
  199. var num2 = $(tr).find("td>."+$(e).attr("num2")).val();
  200. var result = unitTotal(num1, num2);
  201. $(e).val(result);
  202. });
  203. }
  204. function percentage(num1, num2){
  205. var percent = "";
  206. if(!isNaN(Number(num1)) && !isNaN(Number(num2)) && Number(num2) != "0" && num1 != '')
  207. percent = Math.round(Number(num1) / Number(num2) * 100) ;
  208. return percent;
  209. }
  210. function unitTotal(num1, num2){
  211. var unitTotal = "";
  212. if(!isNaN(Number(num1)) && !isNaN(Number(num2)) && Number(num1) != "0" && Number(num2) != "0") unitTotal = Number(num1) * Number(num2);
  213. if(!isNaN(Number(unitTotal)) && Number(unitTotal) != "0") unitTotal = numFormat(unitTotal);
  214. return unitTotal;
  215. }
  216. function numFormat(num){
  217. if(!isNaN(Number(num)) && Number(num) != "0"){
  218. if(num<10) num = Number(num).toFixed(1);
  219. else num = Math.round(Number(num));
  220. }
  221. return num;
  222. }
  223. //获取校验json
  224. function getValidateJson(){
  225. $.ajax({
  226. type : "get",
  227. url : locat + "/annualDailyComp/getValidateJson.do?TABLETYPE=" + pd_TABLETYPE,
  228. dataType : 'json',
  229. success : function(data){
  230. Object.assign(validateJsonData,data.map,data.submap);
  231. }
  232. });
  233. }
  234. //校验规则
  235. function validateFun(name,val,e){
  236. if(name){
  237. if(name.indexOf('ACTUAL_COST') == 0) name = 'ACTUAL_COST';
  238. else if(name.indexOf('PAY_COST') == 0) name = 'PAY_COST';
  239. else if(name.indexOf('PLAN_COST') == 0) name = 'PLAN_COST';
  240. var vtype = validateJsonData[name].type;
  241. var vlength = validateJsonData[name].length;
  242. var vscale = validateJsonData[name].scale;
  243. var vnotnull = validateJsonData[name].notnull;
  244. if(val != ""){
  245. if(vtype == 'decimal'){
  246. var re = new RegExp("^(\\-|\\+)?\\d+(\\.\\d+)?$");
  247. //是否为数字
  248. if(!re.test(val)) return "请填写数字";
  249. //小数位数
  250. if(vscale == "1") $(e).val(numFormat(val));
  251. if(vscale != "1"){
  252. if(val.split(".").length = 2){
  253. if(val.split(".")[1].length > vscale) return "小数精度不超过"+vscale;
  254. }
  255. // re = new RegExp("/^\\d+(\\.\\d{1,"+vscale+"})?$/");
  256. // if(!re.test(val)) return "小数精度不超过"+vscale;
  257. }
  258. }
  259. //长度
  260. if(val.length > vlength) return "长度超长";
  261. //分报告名称不能重复
  262. if(name == 'ITEM_NAME'){
  263. for(var i=0; i<$('.ITEM_NAME').length; i++){
  264. if($('.ITEM_NAME')[i] != e && $('.ITEM_NAME').eq(i).val() == val) return "该字段不能重复";
  265. }
  266. }
  267. }else{
  268. if(vnotnull == '1') return "该字段不能为空";
  269. //分报告名称非空校验
  270. if(name == 'ITEM_NAME'){
  271. if($(e).parent().parent().find('>td>.UNIT').val()!=''
  272. ||$(e).parent().parent().find('>td>.UNIT_PRICE').val()!=''
  273. ||$(e).parent().parent().find('>td>.NUMBER').val()!=''){
  274. return "该字段不能为空";
  275. }
  276. }
  277. }
  278. //分报告名称非空校验
  279. if(name == 'UNIT'||name == 'UNIT_PRICE'||name == 'NUMBER'){
  280. $(e).parent().parent().find('>td>.ITEM_NAME').parent().find('.vtip').remove();
  281. if($(e).parent().parent().find('>td>.UNIT').val()!=''
  282. ||$(e).parent().parent().find('>td>.UNIT_PRICE').val()!=''
  283. ||$(e).parent().parent().find('>td>.NUMBER').val()!=''){
  284. validateTip($(e).parent().parent().find('>td>.ITEM_NAME')[0]);
  285. }
  286. }
  287. }
  288. return "";
  289. }
  290. //校验提示
  291. function validateTip(e){
  292. $(e).val($(e).val().trim());
  293. $(e).parent().find('.vtip').remove();
  294. var vtip = validateFun($(e).attr('name'),$(e).val(),e);
  295. if(vtip != ""){
  296. $(e).parent().append("<div class='vtip'>"+vtip+"</div>");
  297. $(e).parent().find('.vtip').width($(e).parent().width());
  298. }
  299. }
  300. //删除
  301. function del(){
  302. if($('.ace:checked').length > 0){
  303. var roads=[],pnames=[];
  304. $('.ace:checked').each(function(index,e){
  305. roads.push($(e).parent().parent().parent().find('[name="ROAD_ID"]').val());
  306. pnames.push($(e).parent().parent().parent().find('[name="PROJECT_NAME"]').val());
  307. });
  308. bootbox.confirm("确定要删除吗?", function(result) {
  309. if(result) {
  310. $.ajax({
  311. type : "get",
  312. url : locat+'/test/deleteData.do?COMPANY_ID='+pd_COMPANY_ID+'&YEAR='+pd_YEAR+'&roads='+roads.join(',')+'&pnames='+pnames.join(',')+'&TABLETYPE='+pd_TABLETYPE,
  313. dataType : 'json',
  314. success : function(data){
  315. if("success" == data.msg){
  316. location.reload(true);
  317. }else if("false" == data.msg){
  318. getTop(globalThis).hangge();
  319. bootbox.dialog({
  320. message: "<span class='bigger-110'>删除失败!</span>",
  321. buttons:
  322. {
  323. "button" :
  324. {
  325. "label" : "确定",
  326. "className" : "btn-sm btn-success"
  327. }
  328. }
  329. });
  330. }
  331. }
  332. });
  333. }
  334. });
  335. }
  336. }
  337. $(function(){
  338. tableInit();
  339. getValidateJson();
  340. });
  341. //获取本网站的顶级节点,解决被其他网站iframe引入时发生的跨域问题
  342. function getTop(obj){
  343. var tp = obj;
  344. //alert(obj.name);
  345. if (tp.mainFrame == undefined) {
  346. tp = tp.parent;
  347. return getTop(tp);
  348. } else {
  349. return tp;
  350. }
  351. }