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
8.1 KiB

  1. import{_ as e,r as a,al as t,h as l,a as n,w as o,j as s,V as u,l as i,t as r,m as c,C as d,E as m,g as v,H as h,J as p,i as g,am as f,K as _,ab as w,b as y,y as b,z as C,a7 as I,A as k,a3 as x,G as R,an as V,a5 as j,X as U,I as E}from"./index-BWvsB30X.js";const S=e({__name:"h5-signature",props:{show:{type:Boolean,default:!1}},emits:["close","confirm"],setup(e,{emit:_}){const w=e,y=_;let b=null;const C=a(!1),I=a(!1);let k=!1;const x=async()=>{await new Promise(((e,a)=>{if(window.SmoothSignature)return void e();if(k){const a=setInterval((()=>{window.SmoothSignature&&(clearInterval(a),e())}),50);return}k=!0;const t=document.createElement("script");t.src="https://cdn.csybhelp.com/lib/smooth-signature.umd.min.js",t.onload=e,t.onerror=a,document.head.appendChild(t)})),await f(),setTimeout((()=>{const e=document.getElementById("signContainer");if(!e)return;e.innerHTML="";const a=document.createElement("canvas");a.style.width="100%",a.style.height="100%",e.appendChild(a),b=new window.SmoothSignature(a,{width:e.offsetWidth,height:e.offsetHeight,minWidth:2,maxWidth:6,color:"#333",bgColor:"transparent"}),a.addEventListener("touchstart",(()=>{C.value=!0})),a.addEventListener("mousedown",(()=>{C.value=!0}))}),200)};t((()=>w.show),(async e=>{e&&(C.value=!1,I.value=!1,b=null,await x())}));const R=()=>{b&&b.clear(),C.value=!1},V=()=>{y("close")},j=async()=>{if(!C.value||!b)return d({title:"请先签名",icon:"none"});if(!I.value){I.value=!0,m({title:"保存中..."});try{const e=b.getPNG();if(!e)throw{msg:"获取签名失败"};const a=await E(e,-90),t=U(a),l=new FormData;l.append("file",t,"signature.png");const n=v("pap-cytx-token")||"",o=(uni.$u&&uni.$u.http&&uni.$u.http.config?uni.$u.http.config.baseURL:"/pro-api")+"/api/mp/upload",s=await new Promise(((e,a)=>{const t=new XMLHttpRequest;t.open("POST",o),n&&t.setRequestHeader("Authorization","Bearer "+n),t.onload=()=>{try{const l=JSON.parse(t.responseText);0===l.code&&l.data&&l.data.url?e(l.data.url):a({msg:l.msg||"上传失败"})}catch(l){a({msg:"上传失败"})}},t.onerror=()=>a({msg:"网络错误"}),t.send(l)}));h(),y("confirm",{url:s})}catch(e){h(),d({title:e.msg||"上传失败",icon:"none"})}finally{I.value=!1}}},U=e=>{const a=e.split(","),t=a[0].match(/:(.*?);/)[1],l=atob(a[1]);let n=l.length;const o=new Uint8Array(n);for(;n--;)o[n]=l.charCodeAt(n);return new Blob([o],{type:t})},E=(e,a)=>new Promise((t=>{const l=new Image;l.onload=()=>{const e=document.createElement("canvas"),n=a*Math.PI/180;90===Math.abs(a)?(e.width=l.height,e.height=l.width):(e.width=l.width,e.height=l.height);const o=e.getContext("2d");o.translate(e.width/2,e.height/2),o.rotate(n),o.drawImage(l,-l.width/2,-l.height/2),t(e.toDataURL("image/png"))},l.src=e}));return(a,t)=>{const d=p,m=g;return e.show?(l(),n(m,{key:0,class:"sign-page"},{default:o((()=>[s(m,{class:"canvas-wrap",onTouchmove:t[0]||(t[0]=u((()=>{}),["stop","prevent"]))},{default:o((()=>[s(m,{class:"hint-text"},{default:o((()=>[s(d,null,{default:o((()=>[i("请在此处手写签名")])),_:1}),s(d,{class:"hint-sub"},{default:o((()=>[i("请横屏书写")])),_:1})])),_:1}),s(m,{id:"signContainer",class:"sign-container"})])),_:1}),s(m,{class:"bottom-btns"},{default:o((()=>[s(m,{class:"btn-close",onClick:V},{default:o((()=>[s(d,null,{default:o((()=>[i("取消")])),_:1})])),_:1}),s(m,{class:"btn-clear",onClick:R},{default:o((()=>[s(d,null,{default:o((()=>[i("清除")])),_:1})])),_:1}),s(m,{class:"btn-save",onClick:j},{default:o((()=>[s(d,null,{default:o((()=>[i(r(I.value?"上传中":"保存"),1)])),_:1})])),_:1})])),_:1})])),_:1})):c("",!0)}}},[["__scopeId","data-v-3410dbae"]]),N=e({__name:"sign",setup(e){const t=a(""),u=a(""),m=a(""),v=a(""),h=a(""),f=a(""),N=a(""),L=a(""),P=a(!1),T=a(!1);_((e=>{t.value=e.type||"privacy",e.amount&&(v.value=decodeURIComponent(e.amount)),e.guardianName&&(h.value=decodeURIComponent(e.guardianName)),e.guardianIdCard&&(f.value=decodeURIComponent(e.guardianIdCard)),e.guardianRelation&&(N.value=decodeURIComponent(e.guardianRelation)),H()})),w((()=>{}));const H=async()=>{try{const e="sign_"+t.value,a=await y("/api/content",{key:e});u.value=a.data.title||"",m.value=a.data.content||""}catch(e){}},$=()=>{T.value=!0},z=e=>{T.value=!1,e.url&&(L.value=e.url)},A=async()=>{if(!L.value)return d({title:"请先签名",icon:"none"});if("income"===t.value&&(!v.value||Number(v.value)<=0))return d({title:"请填写有效的收入金额",icon:"none"});if("privacy_jhr"===t.value){if(!h.value.trim())return d({title:"请输入监护人姓名",icon:"none"});if(!f.value.trim())return d({title:"请输入监护人身份证号",icon:"none"});if(!/^\d{17}[\dXx]$/.test(f.value))return d({title:"监护人身份证格式不正确",icon:"none"});if(!N.value.trim())return d({title:"请输入与患者关系",icon:"none"})}P.value=!0;try{const e={type:t.value,signImage:L.value,amount:"income"===t.value?v.value:void 0,guardianName:"privacy_jhr"===t.value?h.value.trim():void 0,guardianIdCard:"privacy_jhr"===t.value?f.value.trim():void 0,guardianRelation:"privacy_jhr"===t.value?N.value.trim():void 0},a=await R("/api/mp/sign",e);V("signResult",{type:t.value,url:a.data.url,amount:"income"===t.value?v.value:void 0,guardianName:"privacy_jhr"===t.value?h.value.trim():void 0,guardianIdCard:"privacy_jhr"===t.value?f.value.trim():void 0,guardianRelation:"privacy_jhr"===t.value?N.value.trim():void 0}),d({title:"签署成功",icon:"success"}),setTimeout((()=>j()),1e3)}catch(e){e&&e.msg&&d({title:e.msg,icon:"none"})}finally{P.value=!1}};return(e,a)=>{const d=g,_=U,w=p,y=b(C("u-input"),I),R=E,V=b(C("u-icon"),k),j=b(C("u-button"),x),H=b(C("h5-signature"),S);return l(),n(d,{class:"page"},{default:o((()=>[s(d,{class:"section"},{default:o((()=>[s(d,{class:"doc-title"},{default:o((()=>[i(r(u.value),1)])),_:1}),s(_,{class:"doc-body",nodes:m.value},null,8,["nodes"])])),_:1}),"income"===t.value?(l(),n(d,{key:0,class:"section"},{default:o((()=>[s(d,{class:"form-label"},{default:o((()=>[i("请填写您的个人年可支配收入(元)")])),_:1}),s(d,{class:"amount-wrap"},{default:o((()=>[s(w,{class:"amount-prefix"},{default:o((()=>[i("¥")])),_:1}),s(y,{modelValue:v.value,"onUpdate:modelValue":a[0]||(a[0]=e=>v.value=e),type:"number",placeholder:"请输入金额",border:"none",maxlength:"7"},null,8,["modelValue"])])),_:1})])),_:1})):c("",!0),"privacy_jhr"===t.value?(l(),n(d,{key:1,class:"section"},{default:o((()=>[s(d,{class:"form-label"},{default:o((()=>[i("监护人信息")])),_:1}),s(d,{class:"form-row"},{default:o((()=>[s(w,{class:"row-label"},{default:o((()=>[i("监护人姓名")])),_:1}),s(y,{modelValue:h.value,"onUpdate:modelValue":a[1]||(a[1]=e=>h.value=e),placeholder:"请输入监护人姓名",border:"surround",maxlength:"20"},null,8,["modelValue"])])),_:1}),s(d,{class:"form-row"},{default:o((()=>[s(w,{class:"row-label"},{default:o((()=>[i("监护人身份证")])),_:1}),s(y,{modelValue:f.value,"onUpdate:modelValue":a[2]||(a[2]=e=>f.value=e),placeholder:"请输入监护人身份证号",border:"surround",maxlength:"18"},null,8,["modelValue"])])),_:1}),s(d,{class:"form-row"},{default:o((()=>[s(w,{class:"row-label"},{default:o((()=>[i("与患者关系")])),_:1}),s(y,{modelValue:N.value,"onUpdate:modelValue":a[3]||(a[3]=e=>N.value=e),placeholder:"如:父亲、母亲",border:"surround",maxlength:"10"},null,8,["modelValue"])])),_:1})])),_:1})):c("",!0),s(d,{class:"section"},{default:o((()=>[s(d,{class:"sign-label"},{default:o((()=>[i("请在下方签名确认")])),_:1}),s(d,{class:"canvas-wrap",onClick:$},{default:o((()=>[L.value?(l(),n(R,{key:0,class:"sign-preview",src:L.value,mode:"aspectFit"},null,8,["src"])):(l(),n(d,{key:1,class:"canvas-placeholder"},{default:o((()=>[s(V,{name:"edit-pen",size:"28",color:"#ccc"}),s(w,null,{default:o((()=>[i("点击此处去签名")])),_:1})])),_:1}))])),_:1}),L.value?(l(),n(d,{key:0,class:"sign-actions"},{default:o((()=>[s(d,{class:"clear-btn",onClick:$},{default:o((()=>[i("重新签名")])),_:1})])),_:1})):c("",!0)])),_:1}),s(d,{class:"btn-wrap"},{default:o((()=>[s(j,{text:"确认签署",loading:P.value,onClick:A,color:"#0E63E3",size:"large"},null,8,["loading"])])),_:1}),s(H,{show:T.value,onClose:a[4]||(a[4]=e=>T.value=!1),onConfirm:z},null,8,["show"])])),_:1})}}},[["__scopeId","data-v-c2a99871"]]);export{N as default};