sign-view-signer_sign.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <!DOCTYPE html>
  2. <html lang=zh-cn>
  3. <head>
  4. <meta charset=utf-8>
  5. <title>纵横计量支付系统</title>
  6. <meta name=description content=计量支付>
  7. <meta name=copyright content=smartcost.com.cn>
  8. <meta name="viewport" content="width=device-width,initial-scale=1.0">
  9. <link rel=stylesheet href="{{rootUrl}}global/css/bootstrap.css">
  10. <link rel="stylesheet" href="{{rootUrl}}global/css/jquery-ui.min.css">
  11. <link rel=stylesheet href={{rootUrl}}global/css/style.css>
  12. <script src={{rootUrl}}global/js/jquery-1.9.1.min.js></script>
  13. <script src={{rootUrl}}global/js/bootstrap.js></script>
  14. <script src={{rootUrl}}global/js/jl.js></script>
  15. <script src="{{rootUrl}}global/js/jquery-ui.min.js"></script>
  16. </head>
  17. <body>
  18. <!-- include "top" -->
  19. <div class="wrapContent">
  20. <!-- include "left" -->
  21. <div class="mainContainer" style="overflow-y:hidden">
  22. <!--内容-->
  23. <div class="mainContent signContent">
  24. <div class="title clearfix sign-title-height">
  25. <div class="fR sign-topbar">
  26. <a class="btn btn-primary" href="javascript:void(0);" onclick="addsgin()"><i class="icon-pencil icon-white"></i> 签名</a>
  27. <a id="delallsign" class="btn btn-danger" style="display: none" href="javascript:void(0);" onclick="delconfirm();"><i class="icon-remove icon-white"></i> 清除签名</a>
  28. <a class="btn " href="javascript:void(0);" onclick="printdiv('sign_msg')"><i class="icon-print "></i> 打印</a>
  29. </div>
  30. <div class="fR sign-page-num">
  31. <span id="picnum">1</span> / {{signmsg.pagenum}} 页
  32. </div>
  33. <h1><a href="/sign/needlist" title="返回"><span class="closePanel" aria-hidden="true" data-icon="Z"></span></a>&nbsp;{{signmsg.name}}</h1>
  34. </div>
  35. <div class="sign-view clearfix">
  36. <div class="sign-side fR">
  37. <div class="view-info">
  38. <ul>
  39. <li><div class="fL">所在项目</div>{{signmsg.project}}</li>
  40. <li><div class="fL">标段</div>{{signmsg.tender}}</li>
  41. <li><div class="fL">期数</div>第{{ToChinaseNum(signmsg.phaseno)}}期</li>
  42. </ul>
  43. </div>
  44. <div class="signed-list">
  45. <ul>
  46. <!-- if !empty({{auditlist}}) -->
  47. <!-- loop auditlist -->
  48. <li><div class="no fL">{{auditlist' value.index}}</div><div class="avatars fL"><img src="{{auditlist' value.avatar}}">{{auditlist' value.aname}}</div><div class="corl fR"><!-- if {{auditlist' value.status}} == 'checked' --><span class="colGreen">完成</span><!-- elseif {{auditlist' value.status}} == 'checking' --><span class="colOrange">签署中</span><!-- else --><span class=""></span><!-- endif --></div></li>
  49. <!-- endloop -->
  50. <!-- endif -->
  51. </ul>
  52. <div class="btn-bar">
  53. <a href="javascript:void(0);" onclick="judagedonesign();" class="btn btn-success btn-large btn-block">完成签署</a>
  54. </div>
  55. </div>
  56. </div>
  57. <input type="hidden" id="maxwidth" value="{{maxwidth}}">
  58. <input type="hidden" id="maxheight" value="{{maxheight}}">
  59. <div class="sign-content fL" id="sign_msg">
  60. <div class="warp-printer">
  61. <!-- if !empty({{attlist}}) -->
  62. <!-- loop attlist -->
  63. <div class="page" id="pageContainer{{attlist' value.curnum}}"><img src="{{rootUrl}}{{attlist' value.filepath}}" style="max-width: 99.8%">
  64. <div class="user-sign draggable" data-num="{{attlist' value.sid}}_{{attlist' value.said}}" style="position: absolute;top: 10%;left: 10%;z-index: 999;width: 300px;height: 150px;">
  65. <div class="img-bar">
  66. <a href="javascript:void(0);" onclick="setallqm({{attlist' value.curnum}})" title="批量签名" class="allqm" style="display: none"><span data-icon="v" aria-hidden="true" ></span></a>
  67. <a href="javascript:void(0);" onclick="setqm({{attlist' value.curnum}});" title="确定签署" class="sign_confirm"><span data-icon="T" aria-hidden="true" class="colGreen"></span></a>
  68. <a href="javascript:void(0);" onclick="delqm({{attlist' value.curnum}});" title="删除签名" class="sign_del"><span data-icon="U" aria-hidden="true" class="colRed"></span></a>
  69. </div>
  70. <div class="focus">
  71. <img src="{{picpath}}">
  72. </div>
  73. </div>
  74. <!-- if !empty({{attlist' value.auditatt}}) -->
  75. <!-- loop attlist' value.auditatt -->
  76. <div class="user-sign" style="z-index:10;{{attlist' auditatt' value.position}}">
  77. <div class="">
  78. <img src="{{attlist' auditatt' value.picpath}}">
  79. </div>
  80. </div>
  81. <!-- endloop -->
  82. <!-- endif -->
  83. </div>
  84. <!-- endloop -->
  85. <!-- endif -->
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. <!--内容-->
  91. </div>
  92. </div>
  93. <!-- 完成签署人弹出 -->
  94. <div id="donesign" class="modal hide fade" tabindex="-1" role="dialog" aria-hidden="true">
  95. <div class="modal-body">
  96. <h4>完成后不可更改,确认完成签署?</h4>
  97. </div>
  98. <div class="modal-footer">
  99. <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
  100. <button type="button" class="btn btn-success" onclick="donesign();">确认</button>
  101. </div>
  102. </div>
  103. <!-- 添加签署人弹出 -->
  104. <script type="text/javascript">autoFlashHeight();</script>
  105. <script>
  106. $( function() {
  107. $('.page').css('width',$('#maxwidth').val()+'px');
  108. $('#sign_msg').scroll(function(){
  109. for(var i = 1; i <= $('.page').length; i++){
  110. var yheight=$('#sign_msg').scrollTop()+200;
  111. var obj = document.getElementById("pageContainer"+i);
  112. var tops = obj.offsetTop;//元素距离顶部高度
  113. var divheight = obj.offsetHeight;//元素高度
  114. var tops2 = tops+divheight;
  115. if(tops<=yheight && yheight<tops2) {
  116. document.getElementById("picnum").innerHTML = i;
  117. break;
  118. }
  119. }
  120. });
  121. $( ".draggable" ).draggable({ containment: "parent" },{stop: function( event, ui ) {
  122. }}).resizable({ maxWidth: 600 },{ maxHeight: 300 },{ aspectRatio: true },{ autoHide: true },{
  123. stop: function( event, ui ) {
  124. // localStorage.setItem('sign_'+$(this).attr('data-num'),$(this).attr('style'));
  125. }
  126. });
  127. //把本地缓存的信息读出来
  128. $('.page .draggable').each(function(k,v){
  129. if(localStorage.getItem('sign_'+$(this).attr('data-num'))){
  130. $(this).attr('style',localStorage.getItem('sign_'+$(this).attr('data-num')));
  131. $('#delallsign').show();
  132. }
  133. if(localStorage.getItem('status_'+$(this).attr('data-num'))){
  134. if(localStorage.getItem('status_'+$(this).attr('data-num')) == 'copyhide'){
  135. $(this).find(".sign_confirm").hide();
  136. $(this).find(".allqm").hide();
  137. }else if(localStorage.getItem('status_'+$(this).attr('data-num')) == 'copyshow'){
  138. $(this).find(".sign_confirm").hide();
  139. $(this).find(".allqm").show();
  140. }
  141. $(this).draggable( "option", "cancel", ".page" );
  142. $(this).resizable("option", "cancel", ".page");
  143. $(this).resizable( "option", "cancel", ".page" );
  144. }
  145. });
  146. } );
  147. </script>
  148. <script type="text/javascript">
  149. function addsgin() {
  150. if($('.focus img').attr('src') == '{{rootUrl}}'){
  151. alert('请先在个人信息中添加属于您的签名照');
  152. return false;
  153. }
  154. var curpage = $('#picnum').text();
  155. if(localStorage.getItem('sign_'+$( "#pageContainer"+curpage+" .draggable" ).attr('data-num'))){
  156. alert('第 '+curpage+' 张报表已存在您的签名,无法重复添加');
  157. return false;
  158. }
  159. $("#pageContainer"+curpage+" .draggable").show();
  160. $("#pageContainer"+curpage+" .draggable").css({'width':"300px","height":"150px","left":"10%","top":"10%","position":"absolute"});
  161. $( "#pageContainer"+curpage+" .draggable" ).draggable( "option", "cancel", "" );
  162. $( "#pageContainer"+curpage+" .draggable" ).resizable("option", "cancel", "");
  163. $( "#pageContainer"+curpage).find(".sign_confirm").show();
  164. $( "#pageContainer"+curpage).find(".allqm").hide();
  165. // localStorage.setItem('sign_'+$( "#pageContainer"+curpage+" .draggable" ).attr('data-num'),$( "#pageContainer"+curpage+" .draggable" ).attr('style'));
  166. }
  167. function delconfirm(){
  168. var delall = confirm('确定删除所有签名?');
  169. if(delall == true){
  170. $('.page .draggable').each(function(k,v){
  171. $(this).hide();
  172. localStorage.removeItem('sign_'+$(this).attr('data-num'));
  173. localStorage.removeItem('status_'+$(this).attr('data-num'));
  174. });
  175. $('#delallsign').hide();
  176. }else{
  177. return false;
  178. }
  179. }
  180. function setqm(id) {
  181. $( "#pageContainer"+id+" .draggable" ).resizable("option", "cancel", ".page").draggable( "option", "cancel", ".page" );
  182. $( "#pageContainer"+id).find(".sign_confirm").hide();
  183. $( "#pageContainer"+id).find(".allqm").show();
  184. $('#delallsign').show();
  185. localStorage.setItem('sign_'+$( "#pageContainer"+id+" .draggable" ).attr('data-num'),$( "#pageContainer"+id+" .draggable" ).attr('style'));
  186. localStorage.setItem('status_'+$( "#pageContainer"+id+" .draggable" ).attr('data-num'),'copyshow');
  187. }
  188. function delqm(id) {
  189. $( "#pageContainer"+id+" .draggable" ).hide();
  190. localStorage.removeItem('sign_'+$( "#pageContainer"+id+" .draggable" ).attr('data-num'));
  191. localStorage.removeItem('status_'+$( "#pageContainer"+id+" .draggable" ).attr('data-num'));
  192. var flag = false;
  193. $('.page .draggable').each(function(k,v){
  194. if(localStorage.getItem('sign_'+$(this).attr('data-num'))){
  195. flag = true;
  196. return;
  197. }
  198. });
  199. if(!flag){
  200. $('#delallsign').hide();
  201. }
  202. }
  203. function setallqm(id) {
  204. var left = $( "#pageContainer"+id+" .draggable" ).css('left');
  205. var top = $( "#pageContainer"+id+" .draggable" ).css('top');
  206. var width = $( "#pageContainer"+id+" .draggable" ).css('width');
  207. var height = $( "#pageContainer"+id+" .draggable" ).css('height');
  208. for(var i = 1; i <= $('.page').length; i++){
  209. if(id != i){
  210. $( "#pageContainer"+i+" .draggable" ).css({'width':width,"height":height,"left":left,"top":top,"position":"absolute"});
  211. $( "#pageContainer"+i+" .draggable" ).show();
  212. $( "#pageContainer"+i+" .draggable" ).draggable( "option", "cancel", ".page" );
  213. $( "#pageContainer"+i+" .draggable" ).resizable("option", "cancel", ".page");
  214. $( "#pageContainer"+i+" .draggable" ).resizable( "option", "cancel", ".page" );
  215. $( "#pageContainer"+i).find(".sign_confirm").hide();
  216. $( "#pageContainer"+i).find(".allqm").hide();
  217. localStorage.setItem('sign_'+$( "#pageContainer"+i+" .draggable" ).attr('data-num'),$( "#pageContainer"+i+" .draggable" ).attr('style'));
  218. }else{
  219. $( "#pageContainer"+i).find(".allqm").hide();
  220. }
  221. localStorage.setItem('status_'+$( "#pageContainer"+i+" .draggable" ).attr('data-num'),'copyhide');
  222. }
  223. }
  224. </script>
  225. <script>
  226. function printdiv(printpage)
  227. {
  228. var maxwidth = $('#maxwidth').val();
  229. var maxheight = $('#maxheight').val();
  230. $('.warp-printer').css("max-width",maxwidth+"px");
  231. var headstr = '<html><head><title></title><link rel="stylesheet" href="https://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"><style type="text/css" media="print">' +
  232. '@page {size: {{style}}; margin: 0mm; padding: 0mm; border:0mm; } @media print body {margin:0mm;padding:0mm;border: 0mm} .warp-printer .page{margin:0mm;padding:0mm;border: 0mm;widows:0 orphans:0} .sign-content .page{margin:0mm;padding:0mm;border: 0mm;widows:0 orphans:0}' +
  233. '</style></head><body>';
  234. var footstr = '</body>';
  235. var newstr = document.all.item(printpage).innerHTML;
  236. var oldstr = document.body.innerHTML;
  237. //把数据存到本地缓存中
  238. // $('.page .draggable').each(function(k,v){
  239. // if($(this).attr('style')){
  240. // localStorage.setItem('sign_'+$(this).attr('data-num'),$(this).attr('style'));
  241. // }
  242. // });
  243. document.body.innerHTML = headstr+newstr+footstr;
  244. window.print();
  245. document.body.innerHTML = oldstr;
  246. window.location.reload();
  247. return false;
  248. }
  249. function judagedonesign()
  250. {
  251. var flag = false;
  252. $('.page .draggable').each(function(k,v){
  253. if(localStorage.getItem('sign_'+$(this).attr('data-num'))){
  254. flag = true;
  255. return;
  256. }
  257. // if($(this).attr('style') && $(this).css('display') == 'block'){
  258. // flag = true;
  259. // return;
  260. // }
  261. });
  262. if(flag){
  263. $('#donesign').modal('show');
  264. }else{
  265. alert('请至少签署一个报表');
  266. }
  267. }
  268. function donesign(){
  269. var saidarray = new Array();
  270. var positionarray = new Array();
  271. var i = 0;
  272. $('.page .draggable').each(function(k,v){
  273. if(localStorage.getItem('sign_'+$(this).attr('data-num'))){
  274. saidarray[i] = $(this).attr('data-num').split('_')[1];
  275. positionarray[i] = $(this).attr('style');
  276. i++;
  277. }
  278. localStorage.removeItem('sign_'+$(this).attr('data-num'));
  279. localStorage.removeItem('status_'+$(this).attr('data-num'));
  280. });
  281. $.ajax({
  282. type: 'post',
  283. url: '/sign/donesign',
  284. data:{sid:'{{signsid}}',path:'{{picpath}}',said:saidarray,position:positionarray},
  285. dataType: 'json',
  286. success: function(result){
  287. if(result.code == 400){
  288. alert(result.msg);
  289. }else{
  290. window.location.href = result.url;
  291. }
  292. }
  293. })
  294. }
  295. </script>
  296. </body>