jlzf-change-pnumset.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814
  1. $.event.special.valuechange = {
  2. teardown: function (namespaces) {
  3. $(this).unbind('.valuechange');
  4. },
  5. handler: function (e) {
  6. $.event.special.valuechange.triggerChanged($(this));
  7. },
  8. add: function (obj) {
  9. $(this).on('keyup.valuechange cut.valuechange paste.valuechange input.valuechange', obj.selector, $.event.special.valuechange.handler)
  10. },
  11. triggerChanged: function (element) {
  12. var current = element[0].contentEditable === 'true' ? element.html() : element.val()
  13. , previous = typeof element.data('previous') === 'undefined' ? element[0].defaultValue : element.data('previous');
  14. if (current !== previous) {
  15. element.trigger('valuechange', [element.data('previous')]);
  16. element.data('previous', current);
  17. }
  18. }
  19. };
  20. function escapeTags( str ) {
  21. return String( str )
  22. .replace( /&/g, '&' )
  23. .replace( /"/g, '"' )
  24. .replace( /'/g, ''' )
  25. .replace( /</g, '&lt;' )
  26. .replace( />/g, '&gt;' );
  27. }
  28. $(function(){
  29. toastr.options = {
  30. "closeButton": false,
  31. "debug": false,
  32. "newestOnTop": false,
  33. "progressBar": false,
  34. "positionClass": "toast-top-right",
  35. "preventDuplicates": false,
  36. "onclick": null,
  37. "showDuration": "300",
  38. "hideDuration": "1000",
  39. "timeOut": "5000",
  40. "extendedTimeOut": "1000",
  41. "showEasing": "swing",
  42. "hideEasing": "linear",
  43. "showMethod": "fadeIn",
  44. "hideMethod": "fadeOut"
  45. };
  46. //重置申请编号
  47. $('#resetnumber').click(function(){
  48. $('#pnum').val($(this).attr('data-num'));
  49. toastr.success('已重置申请编号');
  50. });
  51. //设置自动编号
  52. $('.autonumber').click(function(){
  53. var str1 = $('#pnum').val();
  54. $('#numhtmlshow').html('');
  55. if(str1.trim() !== ''){
  56. var match1 = /(?!\d{3,6})(\D|\d)|19\d{2}|20\d{2}|\d{3,6}/g;
  57. var result = str1.match(match1);
  58. var arr = new Array();
  59. var j = 0;
  60. var numhtml = '';
  61. for(var i=0; i<result.length;i++){
  62. if(result[i].length == 1){
  63. if(i == 0 || result[i-1].length >1){
  64. arr.push(result[i]);
  65. j++;
  66. }else if(i>=1 && result[i-1].length ==1){
  67. arr[j-1] = arr[j-1]+result[i];
  68. }
  69. }else {
  70. arr.push(result[i]);
  71. j++;
  72. }
  73. }
  74. $.each(arr,function(k,v){
  75. numhtml += '<span class="label label-default" style="margin: 5px 0;display: inline-block">'+v+' <a href="#" class="delrule btn btn-default btn-xs"><i class="glyphicon glyphicon-remove"></i></a></span> ';
  76. });
  77. $('#numhtmlshow').html(numhtml);
  78. }
  79. $('#autonumber').modal('show');
  80. });
  81. $('body').on('click','.delrule',function(){
  82. $(this).parents('.label').remove();
  83. });
  84. //tools change
  85. $('#tools').change(function(){
  86. if($(this).val() == 1){
  87. $('.toolshow').hide();
  88. $('#noteshow').show();
  89. }else if($(this).val() == 2){
  90. $('.toolshow').hide();
  91. $('#yearshow').show();
  92. }else if($(this).val() == 3){
  93. $('.toolshow').hide();
  94. $('.numbershow').show();
  95. }else{
  96. $('.toolshow').hide();
  97. }
  98. });
  99. //add tools
  100. $('#addtools').click(function(){
  101. var numhtml = '';
  102. if($('#tools').val() == 0){
  103. toastr.error('请选择组件再添加');
  104. return false;
  105. }else if($('#tools').val() == 1){
  106. if($('#noteshow input').val().trim() != ''){
  107. numhtml += '<span class="label label-default" style="margin: 5px 0;display: inline-block">'+$('#noteshow input').val().trim()+' <a href="#" class="delrule btn btn-default btn-xs"><i class="glyphicon glyphicon-remove"></i></a></span> ';
  108. }else{
  109. toastr.error('请输入你想添加的文本内容');
  110. return false;
  111. }
  112. }else if($('#tools').val() == 2){
  113. numhtml += '<span class="label label-default" style="margin: 5px 0;display: inline-block">'+$('#yearshow input').val()+' <a href="#" class="delrule btn btn-default btn-xs"><i class="glyphicon glyphicon-remove"></i></a></span> ';
  114. }else if($('#tools').val() == 3){
  115. numhtml += '<span class="label label-default" style="margin: 5px 0;display: inline-block">'+$('#setnumber').val()+' <a href="#" class="delrule btn btn-default btn-xs"><i class="glyphicon glyphicon-remove"></i></a></span> ';
  116. }
  117. $('#numhtmlshow').append(numhtml);
  118. });
  119. //位数number编号大小设置
  120. $('#numsite').on("valuechange", function (e, previous) {
  121. if($(this).val() == '' || parseInt($(this).val()) > 6 || parseInt($(this).val()) <3){
  122. toastr.error('请输入编号位数区间在3到6位');
  123. $(this).val(3);
  124. $('#setnumber').val('001');
  125. return false;
  126. }else{
  127. var num = parseInt($(this).val());
  128. var str = makenum(num);
  129. $('#setnumber').val(str);
  130. }
  131. });
  132. //生成编号
  133. $('#setcnum').click(function(){
  134. var cnum = '';
  135. $('#numhtmlshow span').each(function(){
  136. cnum += $.trim($(this).text());
  137. });
  138. $('#pnum').val(cnum);
  139. $('#autonumber').modal('hide');
  140. });
  141. //new and update same method
  142. //提出单位编辑
  143. $('#addcompany').click(function(){
  144. var newinput = '<div class="form-group"><input type="text" class="form-control" placeholder="请输入公司名称"></div>';
  145. $('#companyadddiv').append(newinput);
  146. });
  147. $('#updatecompany').click(function(){
  148. $(this).attr('disabled','disabled');
  149. var addcompanyArr = new Array();
  150. $('#companyadddiv').find('.form-control').each(function(){
  151. addcompanyArr.push($(this).val());
  152. });
  153. var updatecompanyArr = new Array();
  154. var updatecompanyidArr = new Array();
  155. $('#companyshow').find('.form-control').each(function(){
  156. updatecompanyArr.push($(this).val());
  157. updatecompanyidArr.push($(this).attr('id'));
  158. });
  159. //判断是否有重名情况再提交
  160. var flag = isRepeat(addcompanyArr.concat(updatecompanyArr));
  161. if(!flag){
  162. $.ajax({
  163. type: 'post',
  164. url: '/change/api/update/company',
  165. data:{ pmid: $('#pmid').val(),uci:updatecompanyidArr.length !== 0 ? updatecompanyidArr : '',uc:updatecompanyArr.length ? updatecompanyArr : '',ac:addcompanyArr.length !== 0 ? addcompanyArr : ''},
  166. dataType: 'json',
  167. success: function(result){
  168. if(result.code == 200){
  169. $('#companyadddiv').html('');
  170. $('#companyshow').append(result.addhtml);
  171. $('#company').html(result.selecthtml);
  172. $('#editcompany').modal('hide');
  173. toastr.success('变更单位已更新');
  174. }else{
  175. toastr.error('添加或编辑单位出错');
  176. }
  177. $('#updatecompany').attr('disabled',false);
  178. }
  179. })
  180. }else{
  181. toastr.error('变更单位不能同名');
  182. $('#updatecompany').attr('disabled',false);
  183. }
  184. });
  185. function isRepeat(arr){
  186. var hash = {};
  187. for(var i in arr) {
  188. if(hash[arr[i]])
  189. return true;
  190. hash[arr[i]] = true;
  191. }
  192. return false;
  193. }
  194. //变更清单添加
  195. $('.checklist').on('click',function(){
  196. if($(this).find('.listcheckbox').prop("checked")){
  197. $(this).find('.listcheckbox').prop("checked",false);
  198. $(this).removeClass('success');
  199. }else{
  200. $(this).find('.listcheckbox').prop("checked",true);
  201. $(this).addClass('success');
  202. }
  203. });
  204. $('.listcheckbox').on('click',function(){
  205. if($(this).prop("checked")){
  206. $(this).prop("checked",false);
  207. $(this).parents('.checklist').removeClass('success');
  208. }else{
  209. $(this).prop("checked",true);
  210. $(this).parents('.checklist').addClass('success');
  211. }
  212. });
  213. //审批人选择
  214. $('body').on('click','.alert-pnone .radio',function(e){
  215. if($(e.target).is('label')){
  216. return;
  217. }
  218. var uid = $(this).attr('data-uid');
  219. if($(this).parents('.alert-pnone').hasClass('alert-success')){
  220. $(this).parents('.alert-pnone').removeClass('alert-success');
  221. $(this).children('label').children('input[type="radio"]').prop('checked',false);
  222. //移除form中
  223. var auditlist = $('#selectauditlist').val().split('->');
  224. var reductionauditlist = $('#reductionAudit').val().split(',');
  225. $.each(auditlist,function(k,v){
  226. var vid = v.split('_')[0];
  227. if(uid == vid){
  228. auditlist.splice(k,1);
  229. reductionauditlist.splice(k,1);
  230. return false;
  231. }
  232. });
  233. $('#selectauditlist').val(auditlist.join('->'));
  234. $('#reductionAudit').val(reductionauditlist.join(','));
  235. }else{
  236. $(this).parents('.alert-pnone').addClass('alert-success');
  237. $(this).children('label').children('input[type="radio"]').prop('checked','checked');
  238. //添加
  239. var name = $(this).attr('data-uname');
  240. var company = $(this).attr('data-ucompany');
  241. var jobs = $(this).attr('data-ujobs');
  242. var adduser = uid+'_'+name+'_'+company+'_'+jobs;
  243. //添加到form中
  244. if($('#selectauditlist').val() != ''){
  245. var auditlist = $('#selectauditlist').val().split('->');
  246. var reductionauditlist = $('#reductionAudit').val().split(',');
  247. auditlist.push(adduser);
  248. reductionauditlist.push(uid);
  249. $('#selectauditlist').val(auditlist.join('->'));
  250. $('#reductionAudit').val(reductionauditlist.join(','));
  251. }else{
  252. $('#selectauditlist').val(adduser);
  253. $('#reductionAudit').val(uid);
  254. }
  255. }
  256. approvallist();
  257. });
  258. //添加到审批流程中
  259. $('#addaudit').click(function(){
  260. $('#usertableshow').html('');
  261. //添加到form中
  262. if($('#selectauditlist').val() != ''){
  263. var sort = 1;
  264. var auditlist = $('#selectauditlist').val().split('->');
  265. var auditarray = new Array();
  266. $.each(auditlist,function(k,v){
  267. var vmsg = v.split('_');
  268. var uid = vmsg[0];
  269. var name = vmsg[1];
  270. var company = vmsg[2];
  271. var jobs = vmsg[3];
  272. var addusertr = '<tr id="user_'+ uid +'" userid="'+ uid +'"><td width="100">'+sort+' 审</td><td width="250"><h4 class="media-heading">'+ jobs +' '+ name +'</h4>'+ company +'</td> <td width="100"></td> <td></td> </tr>';
  273. $('#usertableshow').append(addusertr);
  274. auditarray.push(uid);
  275. sort++;
  276. });
  277. $('#changeaudit').val(auditarray.join(','));
  278. }else{
  279. $('#changeaudit').val('');
  280. }
  281. $('#addshenpi').modal('hide');
  282. });
  283. //审批人搜索和添加
  284. $('#searchbtn').click(function(){
  285. var username = $.trim($('#searchname').val());
  286. if(username == ''){
  287. toastr.error('请输入审批人名称');
  288. return false;
  289. }else{
  290. var useridlist = $('#useridlist').val().split(',');
  291. //for(var i = 0; i < namelist.length; i++){
  292. // if(username == namelist[i]){
  293. // toastr.error('列表或常用中已存在当前审批人');
  294. // return false;
  295. // }
  296. //}
  297. $.ajax({
  298. type: 'post',
  299. url: '/change/user/search?name='+username,
  300. data: {useridlist:useridlist},
  301. dataType: 'json',
  302. success: function(result){
  303. if(result.code == 400){
  304. toastr.error(result.msg);
  305. }else{
  306. var userlist = result.userlist;
  307. var adduserhtml = '';
  308. for(var i in userlist){
  309. useridlist.push(userlist[i].userid);
  310. adduserhtml += '<div class="col-md-3 alert alert-pnone"><div class="radio" data-uid="'+ userlist[i].userid +'" data-uname="'+ userlist[i].name +'" data-ucompany="'+ userlist[i].company +'" data-ujobs="'+ userlist[i].jobs +'"><label><input type="radio" value="'+ userlist[i].userid +'">'+ userlist[i].name +'</label><div>'+userlist[i].jobs +'<br>'+ userlist[i].email +'</div></div></div>';
  311. }
  312. $('#useridlist').val(useridlist.join(','));
  313. $('#searchshow').append(adduserhtml);
  314. }
  315. }
  316. })
  317. }
  318. });
  319. //文件上传
  320. var btn = document.getElementById('uploadBtn'),
  321. msgBox = document.getElementById('msgBox'),
  322. filenum = $('#filesshow tr').length != 0 ? $('#filesshow tr').length : 1;
  323. var uploader = new ss.SimpleUpload({
  324. button: btn,
  325. url: '/change/file/upload/' + $('#pmid').val(),
  326. // sessionProgressUrl: '/code/ajaxuploader/sessionProgress.php',
  327. name: 'uploadfile',
  328. multipart: true,
  329. hoverClass: 'hover',
  330. focusClass: 'focus',
  331. responseType: 'json',
  332. multipleSelect: true,
  333. multiple: true,
  334. maxSize: 10240,
  335. data:{uid:$('#uid').val(),verification:$('#verification').val()},
  336. onSubmit: function(filename, extension) {
  337. var progress = document.createElement('div'),
  338. bar = document.createElement('div'),
  339. fileSize = document.createElement('div'),
  340. wrapper = document.createElement('div'),
  341. progressBox = document.getElementById('progressBox');
  342. progress.className = 'progress progress-striped';
  343. bar.className = 'progress-bar progress-bar-success';
  344. fileSize.className = 'size';
  345. wrapper.className = 'wrapper';
  346. progress.appendChild(bar);
  347. wrapper.innerHTML = '<div class="name">'+filename+'</div>';
  348. wrapper.appendChild(fileSize);
  349. wrapper.appendChild(progress);
  350. progressBox.appendChild(wrapper);
  351. this.setProgressBar(bar);
  352. this.setFileSizeBox(fileSize);
  353. this.setProgressContainer(wrapper);
  354. },
  355. onComplete: function( filename, response ) {
  356. if ( !response ) {
  357. toastr.error('无法上传文件');
  358. msgBox.innerHTML = '无法上传文件';
  359. return;
  360. }
  361. var msgBoxfiles = document.createElement('div');
  362. msgBoxfiles.className = 'msg';
  363. if ( response.success === true ) {
  364. toastr.success(filename + ' 上传成功。');
  365. msgBoxfiles.innerHTML = '<strong>' + escapeTags( filename ) + '</strong>' + ' 上传成功。';
  366. msgBox.appendChild(msgBoxfiles);
  367. var filestr = '<tr><td>'+ filenum +'</td><td><a href="'+ response.files.downurl +'">'+ response.files.filename +'</a></td><td>'+ response.files.size +'</td><td>'+ response.files.time +'</td><td><a id="delatt_'+ response.files.id +'" file_id="'+ response.files.id +'" class="btn btn-default btn-sm" title="删除附件"><span class="glyphicon glyphicon-trash text-danger"></span></a></td></tr>';
  368. $('#filesshow').append(filestr);
  369. //添加到form中
  370. if($('#changeatt').val() != ''){
  371. var attlist = $('#changeatt').val().split(',');
  372. attlist.push(response.files.id);
  373. $('#changeatt').val(attlist.join(','));
  374. }else{
  375. $('#changeatt').val(response.files.id);
  376. }
  377. filenum++;
  378. setTimeout(function(){
  379. msgBox.removeChild(msgBoxfiles);
  380. },3000);
  381. } else {
  382. if ( response.msg ) {
  383. toastr.error(filename + ' ' + response.msg);
  384. msgBoxfiles.innerHTML = '<strong>' + escapeTags( filename ) + '</strong> ' + response.msg;
  385. msgBox.appendChild(msgBoxfiles);
  386. setTimeout(function(){
  387. msgBox.removeChild(msgBoxfiles);
  388. },3000);
  389. } else {
  390. toastr.error(filename + ' 发生错误,上传失败。');
  391. msgBoxfiles.innerHTML = '<strong>' + escapeTags( filename ) + '</strong>'+ ' 发生错误,上传失败。';
  392. msgBox.appendChild(msgBoxfiles);
  393. setTimeout(function(){
  394. msgBox.removeChild(msgBoxfiles);
  395. },3000);
  396. }
  397. }
  398. },
  399. onError: function() {
  400. var msgBoxfiles = document.createElement('div');
  401. msgBoxfiles.className = 'msg';
  402. toastr.error('无法上传文件');
  403. msgBoxfiles.innerHTML = '无法上传文件';
  404. msgBox.appendChild(msgBoxfiles);
  405. setTimeout(function(){
  406. msgBox.removeChild(msgBoxfiles);
  407. },3000);
  408. }
  409. });
  410. //删除附件
  411. $('body').on('click',"a[id^='delatt_']",function (){
  412. var fid = $(this).attr('file_id');
  413. $(this).parents('tr').remove();
  414. var newsort = 1;
  415. $('#filesshow tr').each(function(){
  416. $(this).children('td').eq(0).text(newsort);
  417. newsort++;
  418. });
  419. filenum = newsort;
  420. var attlist = $('#changeatt').val().split(',');
  421. $.each(attlist,function(k,v){
  422. if(v == fid){
  423. attlist.splice(k,1);
  424. return false;
  425. }
  426. });
  427. $('#changeatt').val(attlist.join(','));
  428. $.ajax({
  429. type: 'post',
  430. url: '/change/file/delete',
  431. data:{fid: fid},
  432. dataType: 'json',
  433. success: function(result){
  434. }
  435. })
  436. });
  437. //让回车提交表单方法失效并改成光标往下
  438. $("body").on('keypress','input',function (e) {
  439. var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
  440. if (keyCode == 13) {
  441. for (var i = 0; i < this.form.elements.length; i++) {
  442. if (this == this.form.elements[i]) break;
  443. }
  444. i = (i + 1) % this.form.elements.length;
  445. this.form.elements[i].focus();
  446. return false;
  447. } else {
  448. return true;
  449. }
  450. });
  451. //modal取消事件,还原旧保存的数据
  452. $('#cancellist').click(function () {
  453. var reductionlist = $('#reductionList').val().split(',');
  454. //先删所有后还原
  455. var $rowtr = $('#addlist').find('tbody').children('tr');
  456. $rowtr.removeClass('success');
  457. $rowtr.find('input').prop('checked',false);
  458. var z = 0;
  459. for(var i = 0; i < reductionlist.length; i++){
  460. var j = z;
  461. for(; j < $rowtr.length; j++){
  462. if(reductionlist[i] == $rowtr.eq(j).children('td').eq(0).attr('list_id')){
  463. $rowtr.eq(j).addClass('success');
  464. $rowtr.eq(j).find('input').prop('checked',true);
  465. z = ++j;
  466. break;
  467. }
  468. }
  469. }
  470. $('#addlist').modal('hide');
  471. });
  472. $('#cancelaudit').click(function () {
  473. var reductionaudit = $('#reductionAudit').val();
  474. var changeaudit = $('#changeaudit').val();
  475. if(changeaudit !== reductionaudit){
  476. //不相同则要还原
  477. $('#selectauditlist').val('');
  478. var $rowdiv = $('#addshenpi').find('.col-md-8').children('.row').children('div');
  479. $rowdiv.removeClass('alert-success');
  480. $rowdiv.find('input').prop('checked',false);
  481. var auditlist = changeaudit.split(',');
  482. if(auditlist.length){
  483. for(var i = 0; i < auditlist.length; i++){
  484. for(var j = 0; j < $rowdiv.length; j++){
  485. var $rowdivdiv = $rowdiv.eq(j).children('div');
  486. if(auditlist[i] == $rowdivdiv.attr('data-uid')){
  487. $rowdiv.eq(j).addClass('alert-success');
  488. $rowdivdiv.find('input').prop('checked',true);
  489. var uid = $rowdivdiv.attr('data-uid');
  490. var name = $rowdivdiv.attr('data-uname');
  491. var company = $rowdivdiv.attr('data-ucompany');
  492. var jobs = $rowdivdiv.attr('data-ujobs');
  493. var adduser = uid+'_'+name+'_'+company+'_'+jobs;
  494. if($('#selectauditlist').val() != ''){
  495. var auditlist2 = $('#selectauditlist').val().split('->');
  496. auditlist2.push(adduser);
  497. $('#selectauditlist').val(auditlist2.join('->'));
  498. }else{
  499. $('#selectauditlist').val(adduser);
  500. }
  501. }
  502. }
  503. }
  504. }
  505. $('#reductionAudit').val(changeaudit);
  506. }
  507. approvallist();
  508. $('#addshenpi').modal('hide');
  509. });
  510. $('body').on('focus', "#tablelist input", function() {
  511. $(this).select();
  512. });
  513. //移除审批流程
  514. $('body').on('click', '.remove-select-audit', function() {
  515. var reductionlist = $('#reductionAudit').val().split(',');
  516. var selectlist = $('#selectauditlist').val().split('->');
  517. for(var i in reductionlist){
  518. if(reductionlist[i] == $(this).attr('uid')){
  519. reductionlist.splice(i,1);
  520. selectlist.splice(i,1);
  521. }
  522. }
  523. $('#reductionAudit').val(reductionlist.join(','));
  524. $('#selectauditlist').val(selectlist.join('->'));
  525. var $rowdiv = $('#addshenpi').find('.col-md-8').children('.row').children('.alert-success');
  526. for(var j in $rowdiv){
  527. if($rowdiv.eq(j).children('div').attr('data-uid') == $(this).attr('uid')){
  528. $rowdiv.eq(j).removeClass('alert-success');
  529. $rowdiv.eq(j).find('input').prop('checked',false);
  530. break;
  531. }
  532. }
  533. approvallist();
  534. });
  535. });
  536. //根据位数生成编号,3位-》001 ,5位-》00001
  537. function makenum(num){
  538. var arr = new Array(num);
  539. for(var i=0;i< num;i++){
  540. if(i != num-1){
  541. arr[i] = 0;
  542. }else{
  543. arr[i] = 1;
  544. }
  545. }
  546. return arr.join('');
  547. }
  548. //生成num位的0
  549. function makezero(num){
  550. var arr = new Array(num);
  551. for(var i=0;i< num;i++){
  552. arr[i] = 0;
  553. }
  554. return arr.join('');
  555. }
  556. //生成num小数位数的0.
  557. function makedecimalzero(num){
  558. if(num < 1){
  559. return '0';
  560. }else{
  561. return '0.'+makezero(num);
  562. }
  563. }
  564. //生成num位的10倍数
  565. function makemultiple(num){
  566. return Math.pow(10,parseInt(num));
  567. }
  568. //根据位数生成几位小数,0位-》1,1位-》0.1 ,5位-》0.00001
  569. function makedecimals(num){
  570. if(num >= 1 && num <= 6){
  571. var arr = new Array(num);
  572. for(var i=0;i< num;i++){
  573. if(i != num-1){
  574. arr[i] = 0;
  575. }else{
  576. arr[i] = 1;
  577. }
  578. }
  579. return '0.'+arr.join('');
  580. }else{
  581. return 1;
  582. }
  583. }
  584. //四舍五入或末尾加零,实现类似php的 sprintf("%.".decimal."f", val);
  585. function roundnum(val,decimals){
  586. if(val !== ''){
  587. val = parseFloat(val);
  588. if(decimals < 1){
  589. val = (Math.round(val)).toString();
  590. }else{
  591. var num = val.toString();
  592. if(num.lastIndexOf('.') == -1){
  593. num += '.';
  594. num += makezero(decimals);
  595. val = num;
  596. }else{
  597. var valdecimals = num.split('.')[1].length;
  598. if(parseInt(valdecimals) < parseInt(decimals)){
  599. num += makezero(parseInt(decimals)-parseInt(valdecimals));
  600. val = num;
  601. }else if(parseInt(valdecimals) > parseInt(decimals)){
  602. val = parseFloat(val) != 0 ? Math.round(val.mul(makemultiple(decimals))).div(makemultiple(decimals)) : makedecimalzero(decimals);
  603. var num = val.toString();
  604. if(num.lastIndexOf('.') == -1){
  605. num += '.';
  606. num += makezero(decimals);
  607. val = num;
  608. }else {
  609. var valdecimals = num.split('.')[1].length;
  610. if (parseInt(valdecimals) < parseInt(decimals)) {
  611. num += makezero(parseInt(decimals) - parseInt(valdecimals));
  612. val = num;
  613. }
  614. }
  615. }
  616. }
  617. }
  618. }
  619. return val;
  620. }
  621. //把已添加的数量改成响应位数,并把input的值设置成响应的要求,并更新localstorage和表单上传里的数据
  622. function decimalnumsetmodal(costdnum,numbernum,status){
  623. $('#changedecimalnum').val(costdnum+'_'+numbernum);
  624. //var step = makedecimals(numbernum);
  625. var trcount = $('#list tr').length/2;
  626. for(var i = 0; i < trcount; i++){
  627. var cnumval = roundnum($('#list tr').eq(i).children('td').eq(6).children('input').val(),numbernum);
  628. $('#list tr').eq(i).children('td').eq(6).children('input').attr('onkeyup','RegNum(this,event,'+numbernum+')');
  629. $('#list tr').eq(i).children('td').eq(6).children('input').val(cnumval);
  630. var unitprice = $('#list tr').eq(i).children('td').eq(3).text() || $('#list tr').eq(i).children('td').eq(3).children('input').val();
  631. var ctotalnum = roundnum(parseFloat(unitprice).mul(parseFloat(cnumval)),costdnum);
  632. $('#list tr').eq(i).children('td').eq(7).text(ctotalnum);
  633. if($('#list tr').eq(i).hasClass('clid')){
  634. var listid = $('#list tr').eq(i).attr('list_id');
  635. updatelist(listid,cnumval,$('#list tr').eq(i));
  636. if(status == 'update'){
  637. localStorage.setItem('update_'+$('#cid').val()+'_clistid_'+listid,cnumval);
  638. }else if(status == 'newadd'){
  639. localStorage.setItem('new_clistid_'+listid,cnumval);
  640. }
  641. }else{
  642. var numval = roundnum($('#list tr').eq(i).children('td').eq(4).children('input').val(),numbernum);
  643. $('#list tr').eq(i).children('td').eq(4).children('input').attr('onkeyup','RegNum(this,event,'+numbernum+')');
  644. $('#list tr').eq(i).children('td').eq(4).children('input').val(numval);
  645. var totalnum = roundnum(parseFloat(unitprice).mul(parseFloat(numval)),costdnum);
  646. $('#list tr').eq(i).children('td').eq(5).text(totalnum);
  647. var listid = $('#list tr').eq(i).attr('newlist_tid');
  648. var listtrmsg = updateandgetwhitelist(listid,$('#list tr').eq(i));
  649. if(status == 'update'){
  650. localStorage.setItem('update_'+$('#cid').val()+'_new_clistid_'+listid,listtrmsg);
  651. }else if(status == 'newadd'){
  652. localStorage.setItem('add_new_clistid_'+listid,listtrmsg);
  653. }
  654. }
  655. }
  656. totalamount(costdnum);
  657. $('#setting').modal('hide');
  658. toastr.success('设置并更新表格数据成功');
  659. }
  660. //更新并获取 changewhitelist
  661. function updateandgetwhitelist(newid,$thisstr){
  662. var adtrlist = new Array(6);
  663. adtrlist[0] = $thisstr.children('td').eq(0).children('input').val();
  664. adtrlist[1] = $thisstr.children('td').eq(1).children('input').val();
  665. adtrlist[2] = $thisstr.children('td').eq(2).children('select').val();
  666. adtrlist[3] = $thisstr.children('td').eq(3).children('input').val();
  667. adtrlist[4] = $thisstr.children('td').eq(4).children('input').val();
  668. adtrlist[5] = $thisstr.children('td').eq(6).children('input').val();
  669. var adtrliststr = adtrlist.join(';');
  670. //添加到form中
  671. if($('#changewhitelist').val() != ''){
  672. var wlist = $('#changewhitelist').val().split(',');
  673. var exist = 0;
  674. $.each(wlist,function(k,v){
  675. var wlistid = v.split('->')[0];
  676. if(wlistid == newid){
  677. exist = 1;
  678. var empty = 0;
  679. $.each(adtrlist,function(ak,av){
  680. if(av != '' && ak != 2){
  681. empty = 1;
  682. return false;
  683. }
  684. });
  685. if(empty){
  686. wlist.splice(k,1,newid+'->'+adtrliststr);
  687. }else{
  688. wlist.splice(k,1);
  689. }
  690. return false;
  691. }
  692. });
  693. if(exist == 0){
  694. wlist.push(newid+'->'+adtrliststr);
  695. }
  696. $('#changewhitelist').val(wlist.join(','));
  697. }else{
  698. $('#changewhitelist').val(newid+'->'+adtrliststr);
  699. }
  700. return adtrliststr;
  701. }
  702. //更新 changelist 元素
  703. function updatelist(id,cnum,$thisstr){
  704. var adtrlist = new Array(6);
  705. adtrlist[0] = $thisstr.children('td').eq(0).text();
  706. adtrlist[1] = $thisstr.children('td').eq(1).text();
  707. adtrlist[2] = $thisstr.children('td').eq(2).text();
  708. adtrlist[3] = $thisstr.children('td').eq(3).text();
  709. adtrlist[4] = $thisstr.children('td').eq(4).text();
  710. adtrlist[5] = cnum;
  711. var adtrliststr = adtrlist.join(';');
  712. //添加到form中list
  713. if($('#changelist').val() != ''){
  714. var clist = $('#changelist').val().split(',');
  715. var exist = 0;
  716. $.each(clist,function(k,v){
  717. var clistid = v.split('->')[0];
  718. if(clistid == id){
  719. exist = 1;
  720. clist.splice(k,1,id+'->'+adtrliststr);
  721. return false;
  722. }
  723. });
  724. if(exist == 0){
  725. clist.push(id+'->'+adtrliststr);
  726. }
  727. $('#changelist').val(clist.join(','));
  728. }else{
  729. $('#changelist').val(id+'->'+adtrliststr);
  730. }
  731. }
  732. //移除 changelist 元素
  733. function removelist(id){
  734. //清除form中list
  735. var clist = $('#changelist').val().split(',');
  736. $.each(clist,function(k,v){
  737. var clistid = v.split('->')[0];
  738. if(clistid == id){
  739. clist.splice(k,1);
  740. return false;
  741. }
  742. });
  743. $('#changelist').val(clist.join(','));
  744. }
  745. //统计合计金额
  746. function totalamount(decimal){
  747. var zero = makedecimalzero(decimal);
  748. var ctotalnum = 0;
  749. var ototalnum = 0;
  750. $('.clist').each(function(){
  751. var ctotal = $(this).children('td').eq(7).text();
  752. ctotalnum = ctotal != '' ? parseFloat(ctotalnum).add(parseFloat(ctotal)) : parseFloat(ctotalnum);
  753. var ototal = $(this).children('td').eq(5).text();
  754. ototalnum = ototal != '' ? parseFloat(ototalnum).add(parseFloat(ototal)) : parseFloat(ototalnum);
  755. });
  756. $('.ctatalamount').eq(1).text(ctotalnum != 0 ? roundnum(ctotalnum,decimal) : zero);
  757. $('.otatalamount').eq(1).text(ototalnum != 0 ? ototalnum : zero);
  758. }
  759. //显示并更新审批流程
  760. function approvallist(){
  761. $('#selectlist .approval-audit-li').remove();
  762. if($('#selectauditlist').val() != ''){
  763. var auditlist = $('#selectauditlist').val().split('->');
  764. var lihtml = '';
  765. for(var i in auditlist){
  766. var auditArr = auditlist[i].split('_');
  767. var iclass = parseInt(i)+1 == auditlist.length ? ' glyphicon-stop' : ' glyphicon-arrow-down';
  768. lihtml += '<li class="list-group-item approval-audit-li"><i class="glyphicon'+ iclass +' text-muted"></i>'+ auditArr[1] +'<a class="fR text-danger remove-select-audit" uid="'+ auditArr[0] +'" title="移除"><i class="glyphicon glyphicon-remove"></i></a></li>';
  769. }
  770. $('#selectlist').append(lihtml);
  771. }
  772. }