You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
2.5 KiB

  1. import{_ as a,r as e,K as t,am as s,Z as n,Y as l,a as i,w as o,i as c,h as u,j as r,l as d,C as f,E as h,ao as g,F as p,H as v,an as m,a5 as y,J as _,ap as w}from"./index-BWvsB30X.js";const x=a({__name:"signature",setup(a){let x=null,C=null,b=0,T=0;const P=e(!1),k=e(!1);let I=0,R=0;t((async()=>{await s(),setTimeout((()=>{n().select("#signCanvas").fields({node:!0,size:!0}).exec((a=>{if(!a[0])return;C=a[0].node;const e=l().pixelRatio;b=a[0].width,T=a[0].height,C.width=b*e,C.height=T*e,x=C.getContext("2d"),x.scale(e,e),x.lineCap="round",x.lineJoin="round",x.lineWidth=4,x.strokeStyle="#333"}))}),300)}));const F=a=>{const e=a.touches[0];return{x:e.x,y:e.y}},j=a=>{if(!x)return;P.value=!0;const{x:e,y:t}=F(a);I=e,R=t,x.beginPath(),x.moveTo(e,t)},q=a=>{if(!x)return;const{x:e,y:t}=F(a);x.beginPath(),x.moveTo(I,R),x.lineTo(e,t),x.stroke(),I=e,R=t},J=()=>{},z=()=>{x&&C&&(x.clearRect(0,0,b,T),P.value=!1)},E=()=>{P.value?k.value||(k.value=!0,h({title:"保存中..."}),g({canvas:C,fileType:"png",quality:1,success:async a=>{try{const e=l().pixelRatio,t=uni.createOffscreenCanvas({type:"2d",width:T*e,height:b*e}),s=t.getContext("2d"),n=t.createImage();await new Promise(((e,t)=>{n.onload=e,n.onerror=t,n.src=a.tempFilePath})),s.translate(0,b*e),s.rotate(-Math.PI/2),s.drawImage(n,0,0);const i=await new Promise(((a,e)=>{g({canvas:t,fileType:"png",quality:1,success:a,fail:e})})),o=await p("/api/mp/upload",{filePath:i.tempFilePath,name:"file"});if(!o.data||!o.data.url)throw{msg:"上传失败"};v(),m("signatureResult",{url:o.data.url}),y()}catch(e){v(),f({title:e.msg||"上传失败,请重试",icon:"none"})}finally{k.value=!1}},fail:()=>{v(),f({title:"保存失败",icon:"none"}),k.value=!1}})):f({title:"请先签名",icon:"none"})};return(a,e)=>{const t=_,s=c,n=w;return u(),i(s,{class:"sign-page"},{default:o((()=>[r(s,{class:"canvas-wrap"},{default:o((()=>[r(s,{class:"hint-text"},{default:o((()=>[r(t,null,{default:o((()=>[d("请在此处手写签名")])),_:1}),r(t,{class:"hint-sub"},{default:o((()=>[d("请横屏书写")])),_:1})])),_:1}),r(n,{id:"signCanvas","canvas-id":"signCanvas",type:"2d",class:"sign-canvas","disable-scroll":"",onTouchstart:j,onTouchmove:q,onTouchend:J})])),_:1}),r(s,{class:"bottom-btns"},{default:o((()=>[r(s,{class:"btn-clear",onClick:z},{default:o((()=>[r(t,null,{default:o((()=>[d("清除")])),_:1})])),_:1}),r(s,{class:"btn-save",onClick:E},{default:o((()=>[r(t,null,{default:o((()=>[d("保存")])),_:1})])),_:1})])),_:1})])),_:1})}}},[["__scopeId","data-v-f86ebae0"]]);export{x as default};