@robot-admin/naive-ui-components 0.17.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +12 -11
  3. package/README_EN.md +1 -0
  4. package/dist/C_AntV2.cjs +1 -1
  5. package/dist/C_AntV2.js +3 -3
  6. package/dist/C_Barcode.css +6 -6
  7. package/dist/C_Barcode2.cjs +1 -1
  8. package/dist/C_Barcode2.js +1 -1
  9. package/dist/C_Chat.css +269 -185
  10. package/dist/C_Chat2.cjs +1 -1
  11. package/dist/C_Chat2.js +1 -1
  12. package/dist/C_Code.css +26 -26
  13. package/dist/C_Code2.cjs +1 -1
  14. package/dist/C_Code2.js +1 -1
  15. package/dist/C_Draggable2.cjs +1 -1
  16. package/dist/C_Draggable2.js +1 -1
  17. package/dist/C_FilePreview.css +96 -57
  18. package/dist/C_FilePreview2.cjs +1 -1
  19. package/dist/C_FilePreview2.js +1 -1
  20. package/dist/C_GlobalSearch.css +140 -118
  21. package/dist/C_GlobalSearch2.cjs +1 -1
  22. package/dist/C_GlobalSearch2.js +1 -1
  23. package/dist/C_ImageCropper.css +10 -10
  24. package/dist/C_ImageCropper2.cjs +1 -1
  25. package/dist/C_ImageCropper2.js +1 -1
  26. package/dist/C_Login.css +79 -79
  27. package/dist/C_Login2.cjs +1 -1
  28. package/dist/C_Login2.js +1 -1
  29. package/dist/C_Map.css +10 -10
  30. package/dist/C_Map2.cjs +1 -1
  31. package/dist/C_Map2.js +1 -1
  32. package/dist/C_OrgChart.css +28 -4
  33. package/dist/C_OrgChart2.cjs +1 -1
  34. package/dist/C_OrgChart2.js +1 -1
  35. package/dist/C_QRCode2.cjs +1 -1
  36. package/dist/C_QRCode2.js +1 -1
  37. package/dist/C_Signature.css +15 -15
  38. package/dist/C_Signature2.cjs +1 -1
  39. package/dist/C_Signature2.js +1 -1
  40. package/dist/C_SplitPane.cjs +1 -1
  41. package/dist/C_SplitPane.css +231 -77
  42. package/dist/C_SplitPane.js +1 -1
  43. package/dist/C_SplitPane2.cjs +1 -1
  44. package/dist/C_SplitPane2.js +1 -1
  45. package/dist/C_Table.base.css +110 -117
  46. package/dist/C_Table.css +110 -117
  47. package/dist/C_Table.d.ts +1 -0
  48. package/dist/C_TagsView2.cjs +1 -1
  49. package/dist/C_TagsView2.js +1 -1
  50. package/dist/C_Transfer.css +93 -84
  51. package/dist/C_Transfer2.cjs +1 -1
  52. package/dist/C_Transfer2.js +1 -1
  53. package/dist/C_Tree.d.ts +1 -0
  54. package/dist/C_Upload.css +5 -5
  55. package/dist/C_Upload2.cjs +1 -1
  56. package/dist/C_Upload2.js +1 -1
  57. package/dist/C_VideoPlayer2.cjs +4 -3
  58. package/dist/C_VideoPlayer2.js +4 -3
  59. package/dist/C_VtableGantt.css +29 -28
  60. package/dist/C_VtableGantt2.cjs +1 -1
  61. package/dist/C_VtableGantt2.js +1 -1
  62. package/dist/C_WaterFall.css +29 -29
  63. package/dist/C_WaterFall2.cjs +1 -1
  64. package/dist/C_WaterFall2.js +1 -1
  65. package/dist/C_WorkFlow2.cjs +1 -1
  66. package/dist/C_WorkFlow2.js +1 -1
  67. package/dist/constants.d.cts +2 -2
  68. package/dist/constants.d.ts +2 -2
  69. package/dist/constants2.d.cts +2 -2
  70. package/dist/constants2.d.ts +2 -2
  71. package/dist/constants3.d.cts +2 -2
  72. package/dist/constants3.d.ts +2 -2
  73. package/dist/constants4.d.cts +5 -5
  74. package/dist/constants4.d.ts +5 -5
  75. package/dist/constants5.d.cts +5 -9
  76. package/dist/constants5.d.ts +5 -9
  77. package/dist/data.d.cts +11 -11
  78. package/dist/data.d.ts +11 -11
  79. package/dist/helpers.cjs +1 -1
  80. package/dist/helpers.js +1 -1
  81. package/dist/index.d.ts +1 -0
  82. package/dist/index.vue.d.cts +6 -6
  83. package/dist/index.vue.d.ts +6 -6
  84. package/dist/index10.vue.d.cts +3 -3
  85. package/dist/index10.vue.d.ts +3 -3
  86. package/dist/index11.vue.d.cts +3 -3
  87. package/dist/index11.vue.d.ts +3 -3
  88. package/dist/index12.vue.d.cts +3 -3
  89. package/dist/index12.vue.d.ts +2 -2
  90. package/dist/index13.vue.d.cts +2 -2
  91. package/dist/index13.vue.d.ts +5 -5
  92. package/dist/index14.vue.d.cts +5 -5
  93. package/dist/index14.vue.d.ts +4 -4
  94. package/dist/index15.vue.d.cts +4 -4
  95. package/dist/index15.vue.d.ts +3 -3
  96. package/dist/index16.vue.d.cts +3 -3
  97. package/dist/index17.vue.d.ts +2 -2
  98. package/dist/index18.vue.d.cts +2 -2
  99. package/dist/index18.vue.d.ts +6 -6
  100. package/dist/index19.vue.d.cts +6 -6
  101. package/dist/index19.vue.d.ts +3 -3
  102. package/dist/index2.vue.d.cts +2 -2
  103. package/dist/index2.vue.d.ts +2 -2
  104. package/dist/index20.vue.d.cts +5 -1
  105. package/dist/index20.vue.d.ts +5 -1
  106. package/dist/index21.vue.d.cts +2 -2
  107. package/dist/index21.vue.d.ts +2 -2
  108. package/dist/index22.vue.d.cts +2 -2
  109. package/dist/index22.vue.d.ts +2 -2
  110. package/dist/index23.vue.d.cts +2 -2
  111. package/dist/index23.vue.d.ts +2 -2
  112. package/dist/index25.vue.d.cts +6 -6
  113. package/dist/index25.vue.d.ts +6 -6
  114. package/dist/index27.vue.d.cts +2 -2
  115. package/dist/index27.vue.d.ts +2 -2
  116. package/dist/index28.vue.d.cts +6 -2
  117. package/dist/index28.vue.d.ts +6 -2
  118. package/dist/index3.vue.d.cts +3 -3
  119. package/dist/index3.vue.d.ts +3 -3
  120. package/dist/index4.vue.d.cts +3 -3
  121. package/dist/index5.vue.d.ts +2 -2
  122. package/dist/index6.vue.d.cts +2 -2
  123. package/dist/index6.vue.d.ts +7 -4
  124. package/dist/index7.vue.d.cts +7 -4
  125. package/dist/index7.vue.d.ts +2 -2
  126. package/dist/index8.vue.d.cts +2 -2
  127. package/dist/index8.vue.d.ts +5 -7
  128. package/dist/index9.vue.d.cts +5 -7
  129. package/dist/index9.vue.d.ts +3 -3
  130. package/dist/mapUtils.d.cts +3 -3
  131. package/dist/mapUtils.d.ts +3 -3
  132. package/dist/presets.d.cts +1 -1
  133. package/dist/presets.d.ts +1 -1
  134. package/dist/style.css +1176 -850
  135. package/dist/useCalendarEvents.d.cts +1 -1
  136. package/dist/useCalendarEvents.d.ts +1 -1
  137. package/dist/useCollapsePanel.d.cts +3 -3
  138. package/dist/useCollapsePanel.d.ts +3 -3
  139. package/dist/useCropperCore.d.cts +6 -6
  140. package/dist/useCropperCore.d.ts +6 -6
  141. package/dist/useDraggableLayout.d.cts +13 -11
  142. package/dist/useDraggableLayout.d.ts +13 -11
  143. package/dist/useDynamicFormState.d.cts +2 -2
  144. package/dist/useDynamicFormState.d.ts +2 -2
  145. package/dist/useEdgeInteraction.d.cts +2 -2
  146. package/dist/useEdgeInteraction.d.ts +2 -2
  147. package/dist/useFullscreen.d.cts +6 -2
  148. package/dist/useFullscreen.d.ts +6 -2
  149. package/dist/useGlobalSearch.d.cts +9 -4
  150. package/dist/useGlobalSearch.d.ts +9 -4
  151. package/dist/useInfiniteScroll.d.cts +4 -1
  152. package/dist/useInfiniteScroll.d.ts +4 -1
  153. package/dist/useQRCode.d.cts +3 -3
  154. package/dist/useQRCode.d.ts +3 -3
  155. package/dist/useSearchState.d.cts +3 -3
  156. package/dist/useSearchState.d.ts +3 -3
  157. package/dist/useSignatureHistory.d.cts +5 -5
  158. package/dist/useSignatureHistory.d.ts +5 -5
  159. package/dist/useSplitResize.d.cts +8 -8
  160. package/dist/useSplitResize.d.ts +8 -8
  161. package/dist/useTableQuery.cjs +2 -2
  162. package/dist/useTableQuery.d.cts +20 -10
  163. package/dist/useTableQuery.d.ts +20 -10
  164. package/dist/useTableQuery.js +2 -2
  165. package/dist/useTimeSelection.d.cts +3 -3
  166. package/dist/useTimeSelection.d.ts +3 -3
  167. package/dist/useWorkflowValidation.d.cts +2 -2
  168. package/dist/useWorkflowValidation.d.ts +2 -2
  169. package/dist/verification.d.cts +5 -5
  170. package/dist/verification.d.ts +5 -5
  171. package/docs/component-review-20261019.md +55 -0
  172. package/docs/guides/runtime-performance.md +38 -0
  173. package/docs/guides/split-pane.en.md +4 -0
  174. package/docs/guides/split-pane.md +4 -0
  175. package/docs/guides/table-density.md +20 -0
  176. package/docs/guides/transfer.md +11 -0
  177. package/docs/runtime-review-20261019.md +41 -0
  178. package/package.json +4 -2
package/dist/C_Login2.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{t as n}from"./C_Captcha2.js";import{i as r,r as i,t as a}from"./storage.js";import{t as ee}from"./C_QRCode2.js";import{Fragment as o,computed as s,createBlock as c,createCommentVNode as l,createElementBlock as u,createElementVNode as d,createTextVNode as f,createVNode as p,defineComponent as m,onMounted as h,onUnmounted as g,openBlock as _,reactive as v,ref as y,renderList as te,renderSlot as ne,resolveComponent as re,toDisplayString as b,vShow as x,watch as ie,withCtx as S,withDirectives as C,withKeys as w}from"vue";import{NButton as ae,NCheckbox as oe,NDivider as se,NForm as ce,NFormItem as le,NInput as ue,NText as de,NTooltip as fe}from"naive-ui";const T=[{key:`github`,label:`GitHub`,icon:`mdi:github`},{key:`wechat`,label:`微信`,icon:`mdi:wechat`},{key:`qq`,label:`QQ`,icon:`mdi:qqchat`}],E={passwordLogin:!0,captchaLogin:!0,qrcodeLogin:!0,socialLogin:!0,register:!0,captchaVerify:!0,rememberMe:!0,forgotPassword:!0},pe={class:`c-login-panel`},me={class:`c-login__header`},he={key:0,class:`c-login__logo`},ge={class:`c-login__title`},_e={key:0,class:`c-login__subtitle`},ve={key:1,class:`c-login__subtitle c-login__subtitle--register`},ye={key:0,class:`c-login__aux-row`},be={class:`c-login__code-row`},xe={key:0,class:`c-login__captcha-wrap`},Se={key:3,class:`c-login__qr-panel`},Ce={class:`c-login__qr-frame`},we={key:1,class:`c-login__qr-placeholder`},Te={key:2,class:`c-login__qr-scan-line`},Ee={class:`c-login__qr-hint`},De={class:`c-login__code-row`},Oe={key:7,class:`c-login__mode-switch`},ke={class:`c-login__social-row`},Ae={key:9,class:`c-login__register-row`};var D=t(m({__name:`index`,props:{title:{default:`欢迎回来`},subtitle:{},logoIcon:{},features:{},socialProviders:{},qrcodeUrl:{},storageKey:{default:`c_login_remember`},loading:{type:Boolean,default:!1},submitDisabled:{type:Boolean},defaultUsername:{default:``},defaultPassword:{default:``},captchaVerifier:{},captchaProvider:{default:`puzzle-captcha`},captchaChallengeUrl:{},requireCaptchaServerVerification:{type:Boolean,default:!1},captchaVerificationTimeout:{default:1e4}},emits:[`submit`,`captcha-submit`,`send-code`,`social-login`,`forgot-password`,`qrcode-refresh`,`register-submit`,`register-send-code`,`captcha-visible-change`,`username-change`],setup(t,{expose:m,emit:re}){let D=(e,t)=>{let n=globalThis.$t;return n?.(e,t,`robot_admin`)??t},O=(e,t,n)=>[{required:!0,message:`${e}不能为空`,trigger:`blur`},{validator:(e,n)=>!n||typeof n==`string`&&t.test(n),message:n,trigger:`blur`}],k=/^(?:(?:\+|00)86)?1[3-9]\d{9}$/,je=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{6,20}$/,A=t,j=re,M=s(()=>({...A,features:{...E,...A.features},socialProviders:A.socialProviders??T})),N=s(()=>M.value.features),P=s(()=>M.value.socialProviders),F=y(`password`),I=y(null),L=v({username:A.defaultUsername??``,password:A.defaultPassword??``}),Me={username:[{required:!0,message:D(`cl_username_rule`,`请输入用户名`),trigger:`blur`}],password:[{required:!0,message:D(`cl_password_rule`,`请输入密码`),trigger:`blur`}]};ie(()=>L.username,e=>j(`username-change`,e),{immediate:!0,flush:`sync`});let R=y(!1);ie([R,()=>L.username],([e])=>{e?r(A.storageKey,{username:L.username}):i(A.storageKey)}),h(()=>{let e=a(A.storageKey);typeof e?.username==`string`&&(L.username=e.username,R.value=!0)});let z=async()=>{if(!(A.loading||A.submitDisabled||N.value.captchaVerify&&!G.value)){try{await I.value?.validate()}catch{return}A.loading||A.submitDisabled||N.value.captchaVerify&&!G.value||j(`submit`,{...L,...G.value?{captchaToken:K.value,captchaTimestamp:q.value,captchaType:J.value,captchaVerifiedBy:Y.value}:{}})}},B=y(null),V=v({account:``,code:``}),H=y(0),U=null,Ne={account:O(`手机号`,k,`手机号格式错误`),code:[{required:!0,message:D(`cl_code_rule`,`请输入验证码`),trigger:`blur`}]},W=y(),G=y(!1),K=y(``),q=y(0),J=y(`puzzle-captcha`),Y=y(),Pe=e=>{G.value=!0,K.value=e.token,q.value=e.timestamp,J.value=e.type,Y.value=e.verifiedBy},Fe=()=>{G.value=!1},Ie=e=>{G.value=e,e||(K.value=``,q.value=0,J.value=`puzzle-captcha`,Y.value=void 0)},Le=()=>{G.value=!1,K.value=``,q.value=0,J.value=`puzzle-captcha`,Y.value=void 0,W.value?.reset()},Re=async()=>{if(!(A.loading||A.submitDisabled)){try{await B.value?.validate()}catch{return}N.value.captchaVerify&&!G.value||j(`captcha-submit`,{...V})}},ze=()=>{let e=V.account.trim();H.value>0||!k.test(e)||(j(`send-code`,e),U&&=(clearInterval(U),null),H.value=60,U=setInterval(()=>{H.value--,H.value<=0&&(clearInterval(U),U=null)},1e3))},X=s(()=>A.qrcodeUrl?.trim()??``),Be=()=>{j(`qrcode-refresh`)},Ve=y(null),Z=v({phone:``,code:``,password:``,confirmPassword:``}),Q=y(0),$=null,He={phone:O(`手机号`,k,`手机号格式错误`),code:[{required:!0,message:D(`cl_code_rule`,`请输入验证码`),trigger:`blur`}],password:O(`密码`,je,`密码必须包含大小写字母和数字,长度6-20位`),confirmPassword:[{required:!0,message:D(`cl_confirm_pw_rule`,`请再次输入密码`),trigger:`blur`},{validator:(e,t)=>t===Z.password?!0:Error(D(`cl_pw_mismatch`,`两次密码输入不一致`)),trigger:`blur`}]},Ue=()=>{let e=Z.phone.trim();Q.value>0||!k.test(e)||(j(`register-send-code`,e),$&&=(clearInterval($),null),Q.value=60,$=setInterval(()=>{Q.value--,Q.value<=0&&(clearInterval($),$=null)},1e3))},We=async()=>{try{await Ve.value?.validate()}catch{return}j(`register-submit`,{...Z})};return g(()=>{U&&=(clearInterval(U),null),$&&=(clearInterval($),null)}),m({resetCaptcha:Le}),(t,r)=>{let i=ue,a=le,s=oe,m=de,h=ce,g=ae,v=se,y=fe;return _(),u(`div`,pe,[l(` ===== Logo / 标题区 ===== `),d(`div`,me,[ne(t.$slots,`logo`,{},()=>[M.value.logoIcon?(_(),u(`div`,he,[p(e,{name:M.value.logoIcon,size:36,class:`c-login__logo-icon`},null,8,[`name`])])):l(`v-if`,!0)],!0),d(`h2`,ge,b(M.value.title),1),M.value.subtitle&&F.value!==`register`?(_(),u(`p`,_e,b(M.value.subtitle),1)):l(`v-if`,!0),l(` 注册视图的副标题 `),F.value===`register`?(_(),u(`p`,ve,b(D(`cl_register`,`注册账号`)),1)):l(`v-if`,!0)]),l(` ===== 密码登录表单(默认视图) ===== `),C(p(h,{ref_key:`passwordFormRef`,ref:I,model:L,rules:Me,class:`c-login__form`},{default:S(()=>[p(a,{path:`username`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:L.username,"onUpdate:value":r[0]||=e=>L.username=e,disabled:A.loading,placeholder:D(`cl_username_ph`,`请输入用户名`),clearable:``},{prefix:S(()=>[p(e,{name:`mdi:account-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`disabled`,`placeholder`])]),_:1}),p(a,{path:`password`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:L.password,"onUpdate:value":r[1]||=e=>L.password=e,disabled:A.loading,type:`password`,"show-password-on":`click`,placeholder:D(`cl_password_ph`,`请输入密码`),clearable:``,onKeyup:w(z,[`enter`])},{prefix:S(()=>[p(e,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`disabled`,`placeholder`])]),_:1}),l(` 宿主扩展字段只获得账号与忙碌状态,不暴露密码。 `),ne(t.$slots,`password-fields`,{username:L.username,loading:A.loading},void 0,!0),l(` 记住我 + 忘记密码 `),N.value.rememberMe||N.value.forgotPassword?(_(),u(`div`,ye,[N.value.rememberMe?(_(),c(s,{key:0,checked:R.value,"onUpdate:checked":r[2]||=e=>R.value=e,class:`c-login__remember`},{default:S(()=>[f(b(D(`cl_remember`,`记住我`)),1)]),_:1},8,[`checked`])):l(`v-if`,!0),N.value.forgotPassword?(_(),c(m,{key:1,class:`c-login__forgot`,onClick:r[3]||=e=>j(`forgot-password`)},{default:S(()=>[f(b(D(`cl_forgot`,`忘记密码?`)),1)]),_:1})):l(`v-if`,!0)])):l(`v-if`,!0)]),_:3},8,[`model`]),[[x,F.value===`password`]]),l(` ===== 验证码登录表单 ===== `),C(p(h,{ref_key:`captchaFormRef`,ref:B,model:V,rules:Ne,class:`c-login__form`},{default:S(()=>[p(a,{path:`account`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:V.account,"onUpdate:value":r[4]||=e=>V.account=e,placeholder:D(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:S(()=>[p(e,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),p(a,{path:`code`,class:`c-login__form-item`},{default:S(()=>[d(`div`,be,[p(i,{value:V.code,"onUpdate:value":r[5]||=e=>V.code=e,placeholder:D(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`,onKeyup:w(Re,[`enter`])},{prefix:S(()=>[p(e,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),p(g,{disabled:H.value>0||!V.account,class:`c-login__send-code-btn`,onClick:ze},{default:S(()=>[f(b(H.value>0?`${H.value}s ${D(`cl_resend`,`后重发`)}`:D(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1},8,[`model`]),[[x,F.value===`captcha`]]),l(` ===== 人机验证拼图(仅密码登录模式) ===== `),N.value.captchaVerify&&F.value===`password`?(_(),u(`div`,xe,[p(n,{ref_key:`captchaRef`,ref:W,theme:`dark`,provider:A.captchaProvider,"challenge-url":A.captchaChallengeUrl,verifier:A.captchaVerifier,"require-server-verification":A.requireCaptchaServerVerification,"verification-timeout":A.captchaVerificationTimeout,onSuccess:Pe,onFail:Fe,onChange:Ie,onVisibleChange:r[6]||=e=>j(`captcha-visible-change`,e)},null,8,[`provider`,`challenge-url`,`verifier`,`require-server-verification`,`verification-timeout`])])):l(`v-if`,!0),l(` ===== 登录按钮(密码和验证码模式) ===== `),F.value===`password`||F.value===`captcha`?(_(),c(g,{key:1,type:`primary`,block:``,loading:A.loading,disabled:A.loading||A.submitDisabled||F.value===`password`&&N.value.captchaVerify&&!G.value,class:`c-login__submit-btn`,onClick:r[7]||=e=>F.value===`password`?z():Re()},{default:S(()=>[f(b(F.value===`password`&&N.value.captchaVerify&&!G.value?D(`cl_verify_first`,`请先完成人机验证`):D(`cl_login_btn`,`登 录`)),1)]),_:1},8,[`loading`,`disabled`])):l(`v-if`,!0),l(` ===== 返回按钮(验证码子视图) ===== `),F.value===`captcha`?(_(),c(g,{key:2,block:``,class:`c-login__back-btn`,onClick:r[8]||=e=>F.value=`password`},{default:S(()=>[f(b(D(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 扫码登录面板 ===== `),F.value===`qrcode`?(_(),u(`div`,Se,[d(`div`,Ce,[X.value?(_(),c(ee,{key:0,value:X.value,size:148,margin:1,"show-border":!1,color:`#ffffff`,"bg-color":`#000000`,"error-correction-level":`M`},null,8,[`value`])):(_(),u(`div`,we,b(D(`cl_qr_missing`,`请配置二维码地址`)),1)),X.value?(_(),u(`div`,Te)):l(`v-if`,!0),r[18]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--tl`},null,-1),r[19]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--tr`},null,-1),r[20]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--bl`},null,-1),r[21]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--br`},null,-1)]),d(`p`,Ee,[p(e,{name:`mdi:cellphone-check`,size:13}),f(` `+b(D(`cl_qr_hint`,`打开手机扫码后点击「确认」即可登录`)),1)]),p(g,{text:``,size:`tiny`,class:`c-login__qr-refresh`,onClick:Be},{icon:S(()=>[p(e,{name:`mdi:refresh`,size:12})]),default:S(()=>[f(` `+b(D(`cl_qr_refresh`,`二维码已失效?点击刷新`)),1)]),_:1})])):l(`v-if`,!0),l(` ===== 返回按钮(扫码子视图,在二维码下方) ===== `),F.value===`qrcode`?(_(),c(g,{key:4,block:``,class:`c-login__back-btn`,onClick:r[9]||=e=>F.value=`password`},{default:S(()=>[f(b(D(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 注册表单 ===== `),C(p(h,{ref_key:`registerFormRef`,ref:Ve,model:Z,rules:He,class:`c-login__form`},{default:S(()=>[p(a,{path:`phone`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:Z.phone,"onUpdate:value":r[10]||=e=>Z.phone=e,placeholder:D(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:S(()=>[p(e,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),p(a,{path:`code`,class:`c-login__form-item`},{default:S(()=>[d(`div`,De,[p(i,{value:Z.code,"onUpdate:value":r[11]||=e=>Z.code=e,placeholder:D(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`},{prefix:S(()=>[p(e,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),p(g,{disabled:Q.value>0||!Z.phone,class:`c-login__send-code-btn`,onClick:Ue},{default:S(()=>[f(b(Q.value>0?`${Q.value}s ${D(`cl_resend`,`后重发`)}`:D(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1}),p(a,{path:`password`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:Z.password,"onUpdate:value":r[12]||=e=>Z.password=e,type:`password`,"show-password-on":`click`,placeholder:D(`cl_password_ph`,`请输入密码`)},{prefix:S(()=>[p(e,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),p(a,{path:`confirmPassword`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:Z.confirmPassword,"onUpdate:value":r[13]||=e=>Z.confirmPassword=e,type:`password`,"show-password-on":`click`,placeholder:D(`cl_confirm_pw_ph`,`请再次输入密码`),onKeyup:w(We,[`enter`])},{prefix:S(()=>[p(e,{name:`mdi:lock-check-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1})]),_:1},8,[`model`]),[[x,F.value===`register`]]),l(` ===== 注册确认按钮 ===== `),F.value===`register`?(_(),c(g,{key:5,type:`primary`,block:``,loading:A.loading,class:`c-login__submit-btn`,onClick:We},{default:S(()=>[f(b(D(`cl_confirm`,`确认`)),1)]),_:1},8,[`loading`])):l(`v-if`,!0),l(` ===== 注册视图返回按钮 ===== `),F.value===`register`?(_(),c(g,{key:6,block:``,class:`c-login__back-btn`,onClick:r[14]||=e=>F.value=`password`},{default:S(()=>[f(b(D(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 登录方式切换(仅密码登录默认视图显示) ===== `),F.value===`password`&&(N.value.captchaLogin||N.value.qrcodeLogin)?(_(),u(`div`,Oe,[N.value.captchaLogin?(_(),c(g,{key:0,class:`c-login__mode-btn`,size:`small`,onClick:r[15]||=e=>F.value=`captcha`},{default:S(()=>[f(b(D(`cl_captcha_login`,`验证码登录`)),1)]),_:1})):l(`v-if`,!0),N.value.qrcodeLogin?(_(),c(g,{key:1,class:`c-login__mode-btn`,size:`small`,onClick:r[16]||=e=>F.value=`qrcode`},{default:S(()=>[f(b(D(`cl_qr_login`,`扫码登录`)),1)]),_:1})):l(`v-if`,!0)])):l(`v-if`,!0),l(` ===== 其他登录方式(仅密码登录默认视图显示) ===== `),F.value===`password`&&N.value.socialLogin&&P.value.length?(_(),u(o,{key:8},[p(v,{class:`c-login__divider`},{default:S(()=>[f(b(D(`cl_social_login`,`其他账号登录`)),1)]),_:1}),d(`div`,ke,[(_(!0),u(o,null,te(P.value,t=>(_(),c(y,{key:t.key,trigger:`hover`,placement:`top`},{trigger:S(()=>[p(g,{circle:``,class:`c-login__social-btn`,onClick:e=>j(`social-login`,t.key)},{icon:S(()=>[p(e,{name:t.icon,size:16},null,8,[`name`])]),_:2},1032,[`onClick`])]),default:S(()=>[f(` `+b(t.label),1)]),_:2},1024))),128))])],64)):l(`v-if`,!0),l(` ===== 注册入口(仅密码登录默认视图显示) ===== `),F.value===`password`&&N.value.register?(_(),u(`div`,Ae,[p(m,{class:`c-login__register-hint`},{default:S(()=>[f(b(D(`cl_no_account`,`还没有账号?`)),1)]),_:1}),p(m,{class:`c-login__register-link`,onClick:r[17]||=e=>F.value=`register`},{default:S(()=>[f(b(D(`cl_register`,`注册账号`)),1)]),_:1})])):l(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-f9c3ae4b`]]);export{E as n,T as r,D as t};
1
+ import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{t as n}from"./C_Captcha2.js";import{t as r}from"./useActionTask.js";import{i,r as a,t as o}from"./storage.js";import{t as ee}from"./C_QRCode2.js";import{Fragment as te,computed as s,createBlock as c,createCommentVNode as l,createElementBlock as u,createElementVNode as d,createTextVNode as f,createVNode as p,defineComponent as m,onMounted as h,onUnmounted as g,openBlock as _,reactive as v,ref as y,renderList as ne,renderSlot as re,resolveComponent as ie,toDisplayString as b,vShow as x,watch as S,withCtx as C,withDirectives as w,withKeys as T}from"vue";import{NButton as ae,NCheckbox as oe,NDivider as se,NForm as ce,NFormItem as le,NInput as ue,NText as de,NTooltip as fe}from"naive-ui";const pe=[{key:`github`,label:`GitHub`,icon:`mdi:github`},{key:`wechat`,label:`微信`,icon:`mdi:wechat`},{key:`qq`,label:`QQ`,icon:`mdi:qqchat`}],me={passwordLogin:!0,captchaLogin:!0,qrcodeLogin:!0,socialLogin:!0,register:!0,captchaVerify:!0,rememberMe:!0,forgotPassword:!0},he={class:`c-login-panel`},ge={class:`c-login__header`},_e={key:0,class:`c-login__logo`},ve={class:`c-login__title`},ye={key:0,class:`c-login__subtitle`},be={key:1,class:`c-login__subtitle c-login__subtitle--register`},xe={key:0,class:`c-login__aux-row`},Se={class:`c-login__code-row`},Ce={key:0,class:`c-login__captcha-wrap`},we={key:3,class:`c-login__qr-panel`},Te={class:`c-login__qr-frame`},Ee={key:1,class:`c-login__qr-placeholder`},De={key:2,class:`c-login__qr-scan-line`},Oe={class:`c-login__qr-hint`},ke={class:`c-login__code-row`},Ae={key:7,class:`c-login__mode-switch`},je={class:`c-login__social-row`},Me={key:9,class:`c-login__register-row`};var E=t(m({__name:`index`,props:{title:{default:`欢迎回来`},subtitle:{},logoIcon:{},features:{},socialProviders:{},qrcodeUrl:{},storageKey:{default:`c_login_remember`},loading:{type:Boolean,default:!1},submitDisabled:{type:Boolean},defaultUsername:{default:``},defaultPassword:{default:``},captchaVerifier:{},captchaProvider:{default:`puzzle-captcha`},captchaChallengeUrl:{},requireCaptchaServerVerification:{type:Boolean,default:!1},captchaVerificationTimeout:{default:1e4}},emits:[`submit`,`captcha-submit`,`send-code`,`social-login`,`forgot-password`,`qrcode-refresh`,`register-submit`,`register-send-code`,`captcha-visible-change`,`username-change`],setup(t,{expose:m,emit:ie}){let E=(e,t)=>{let n=globalThis.$t;return n?.(e,t,`robot_admin`)??t},D=(e,t,n)=>[{required:!0,message:`${e}不能为空`,trigger:`blur`},{validator:(e,n)=>!n||typeof n==`string`&&t.test(n),message:n,trigger:`blur`}],O=/^(?:(?:\+|00)86)?1[3-9]\d{9}$/,Ne=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{6,20}$/,k=t,A=ie,j=s(()=>({...k,features:{...me,...k.features},socialProviders:k.socialProviders??pe})),M=s(()=>j.value.features),Pe=s(()=>j.value.socialProviders),N=y(`password`),Fe=r(),P=s(()=>Fe.isRunning(N.value)),Ie=!1,F=0;S(N,()=>F++,{flush:`sync`});let I=e=>!Ie&&N.value===e&&!k.loading&&!k.submitDisabled&&(e===`register`||!M.value.captchaVerify||G.value);async function L(e,t,n,r){await Fe.run(e,async()=>{let i=t.value;if(!i)return;let a=F,o={...n};try{await i.validate()}catch{return}!I(e)||a!==F||i!==t.value||!Object.keys(o).every(e=>o[e]===n[e])||r(o)},()=>I(e))}let R=y(null),z=v({username:k.defaultUsername??``,password:k.defaultPassword??``}),Le={username:[{required:!0,message:E(`cl_username_rule`,`请输入用户名`),trigger:`blur`}],password:[{required:!0,message:E(`cl_password_rule`,`请输入密码`),trigger:`blur`}]};S(()=>z.username,e=>A(`username-change`,e),{immediate:!0,flush:`sync`});let B=y(!1);S([B,()=>z.username],([e])=>{e?i(k.storageKey,{username:z.username}):a(k.storageKey)}),h(()=>{let e=o(k.storageKey);typeof e?.username==`string`&&(z.username=e.username,B.value=!0)});let Re=()=>L(`password`,R,z,e=>{A(`submit`,{...e,...G.value?{captchaToken:K.value,captchaTimestamp:q.value,captchaType:J.value,captchaVerifiedBy:Y.value}:{}})}),ze=y(null),V=v({account:``,code:``}),H=y(0),U=null,Be={account:D(`手机号`,O,`手机号格式错误`),code:[{required:!0,message:E(`cl_code_rule`,`请输入验证码`),trigger:`blur`}]},W=y(),G=y(!1),K=y(``),q=y(0),J=y(`puzzle-captcha`),Y=y(),Ve=e=>{G.value=!0,K.value=e.token,q.value=e.timestamp,J.value=e.type,Y.value=e.verifiedBy},He=()=>{G.value=!1},Ue=e=>{G.value=e,e||(K.value=``,q.value=0,J.value=`puzzle-captcha`,Y.value=void 0)},We=()=>{G.value=!1,K.value=``,q.value=0,J.value=`puzzle-captcha`,Y.value=void 0,W.value?.reset()},Ge=()=>L(`captcha`,ze,V,e=>A(`captcha-submit`,e)),Ke=()=>{let e=V.account.trim();H.value>0||!O.test(e)||(A(`send-code`,e),U&&=(clearInterval(U),null),H.value=60,U=setInterval(()=>{H.value--,H.value<=0&&(clearInterval(U),U=null)},1e3))},X=s(()=>k.qrcodeUrl?.trim()??``),qe=()=>{A(`qrcode-refresh`)},Je=y(null),Z=v({phone:``,code:``,password:``,confirmPassword:``}),Q=y(0),$=null,Ye={phone:D(`手机号`,O,`手机号格式错误`),code:[{required:!0,message:E(`cl_code_rule`,`请输入验证码`),trigger:`blur`}],password:D(`密码`,Ne,`密码必须包含大小写字母和数字,长度6-20位`),confirmPassword:[{required:!0,message:E(`cl_confirm_pw_rule`,`请再次输入密码`),trigger:`blur`},{validator:(e,t)=>t===Z.password?!0:Error(E(`cl_pw_mismatch`,`两次密码输入不一致`)),trigger:`blur`}]},Xe=()=>{let e=Z.phone.trim();Q.value>0||!O.test(e)||(A(`register-send-code`,e),$&&=(clearInterval($),null),Q.value=60,$=setInterval(()=>{Q.value--,Q.value<=0&&(clearInterval($),$=null)},1e3))},Ze=()=>L(`register`,Je,Z,e=>A(`register-submit`,e));return g(()=>{Ie=!0,U&&=(clearInterval(U),null),$&&=(clearInterval($),null)}),m({resetCaptcha:We}),(t,r)=>{let i=ue,a=le,o=oe,s=de,m=ce,h=ae,g=se,v=fe;return _(),u(`div`,he,[l(` ===== Logo / 标题区 ===== `),d(`div`,ge,[re(t.$slots,`logo`,{},()=>[j.value.logoIcon?(_(),u(`div`,_e,[p(e,{name:j.value.logoIcon,size:36,class:`c-login__logo-icon`},null,8,[`name`])])):l(`v-if`,!0)],!0),d(`h2`,ve,b(j.value.title),1),j.value.subtitle&&N.value!==`register`?(_(),u(`p`,ye,b(j.value.subtitle),1)):l(`v-if`,!0),l(` 注册视图的副标题 `),N.value===`register`?(_(),u(`p`,be,b(E(`cl_register`,`注册账号`)),1)):l(`v-if`,!0)]),l(` ===== 密码登录表单(默认视图) ===== `),w(p(m,{ref_key:`passwordFormRef`,ref:R,model:z,rules:Le,class:`c-login__form`},{default:C(()=>[p(a,{path:`username`,class:`c-login__form-item`},{default:C(()=>[p(i,{value:z.username,"onUpdate:value":r[0]||=e=>z.username=e,disabled:k.loading,placeholder:E(`cl_username_ph`,`请输入用户名`),clearable:``},{prefix:C(()=>[p(e,{name:`mdi:account-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`disabled`,`placeholder`])]),_:1}),p(a,{path:`password`,class:`c-login__form-item`},{default:C(()=>[p(i,{value:z.password,"onUpdate:value":r[1]||=e=>z.password=e,disabled:k.loading,type:`password`,"show-password-on":`click`,placeholder:E(`cl_password_ph`,`请输入密码`),clearable:``,onKeyup:T(Re,[`enter`])},{prefix:C(()=>[p(e,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`disabled`,`placeholder`])]),_:1}),l(` 宿主扩展字段只获得账号与忙碌状态,不暴露密码。 `),re(t.$slots,`password-fields`,{username:z.username,loading:k.loading||P.value},void 0,!0),l(` 记住我 + 忘记密码 `),M.value.rememberMe||M.value.forgotPassword?(_(),u(`div`,xe,[M.value.rememberMe?(_(),c(o,{key:0,checked:B.value,"onUpdate:checked":r[2]||=e=>B.value=e,class:`c-login__remember`},{default:C(()=>[f(b(E(`cl_remember`,`记住我`)),1)]),_:1},8,[`checked`])):l(`v-if`,!0),M.value.forgotPassword?(_(),c(s,{key:1,class:`c-login__forgot`,onClick:r[3]||=e=>A(`forgot-password`)},{default:C(()=>[f(b(E(`cl_forgot`,`忘记密码?`)),1)]),_:1})):l(`v-if`,!0)])):l(`v-if`,!0)]),_:3},8,[`model`]),[[x,N.value===`password`]]),l(` ===== 验证码登录表单 ===== `),w(p(m,{ref_key:`captchaFormRef`,ref:ze,model:V,rules:Be,class:`c-login__form`},{default:C(()=>[p(a,{path:`account`,class:`c-login__form-item`},{default:C(()=>[p(i,{value:V.account,"onUpdate:value":r[4]||=e=>V.account=e,placeholder:E(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:C(()=>[p(e,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),p(a,{path:`code`,class:`c-login__form-item`},{default:C(()=>[d(`div`,Se,[p(i,{value:V.code,"onUpdate:value":r[5]||=e=>V.code=e,placeholder:E(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`,onKeyup:T(Ge,[`enter`])},{prefix:C(()=>[p(e,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),p(h,{disabled:H.value>0||!V.account,class:`c-login__send-code-btn`,onClick:Ke},{default:C(()=>[f(b(H.value>0?`${H.value}s ${E(`cl_resend`,`后重发`)}`:E(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1},8,[`model`]),[[x,N.value===`captcha`]]),l(` ===== 人机验证拼图(仅密码登录模式) ===== `),M.value.captchaVerify&&N.value===`password`?(_(),u(`div`,Ce,[p(n,{ref_key:`captchaRef`,ref:W,theme:`dark`,provider:k.captchaProvider,"challenge-url":k.captchaChallengeUrl,verifier:k.captchaVerifier,"require-server-verification":k.requireCaptchaServerVerification,"verification-timeout":k.captchaVerificationTimeout,onSuccess:Ve,onFail:He,onChange:Ue,onVisibleChange:r[6]||=e=>A(`captcha-visible-change`,e)},null,8,[`provider`,`challenge-url`,`verifier`,`require-server-verification`,`verification-timeout`])])):l(`v-if`,!0),l(` ===== 登录按钮(密码和验证码模式) ===== `),N.value===`password`||N.value===`captcha`?(_(),c(h,{key:1,type:`primary`,block:``,loading:k.loading||P.value,disabled:k.loading||P.value||k.submitDisabled||N.value===`password`&&M.value.captchaVerify&&!G.value,class:`c-login__submit-btn`,onClick:r[7]||=e=>N.value===`password`?Re():Ge()},{default:C(()=>[f(b(N.value===`password`&&M.value.captchaVerify&&!G.value?E(`cl_verify_first`,`请先完成人机验证`):E(`cl_login_btn`,`登 录`)),1)]),_:1},8,[`loading`,`disabled`])):l(`v-if`,!0),l(` ===== 返回按钮(验证码子视图) ===== `),N.value===`captcha`?(_(),c(h,{key:2,block:``,class:`c-login__back-btn`,onClick:r[8]||=e=>N.value=`password`},{default:C(()=>[f(b(E(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 扫码登录面板 ===== `),N.value===`qrcode`?(_(),u(`div`,we,[d(`div`,Te,[X.value?(_(),c(ee,{key:0,value:X.value,size:148,margin:1,"show-border":!1,color:`#ffffff`,"bg-color":`#000000`,"error-correction-level":`M`},null,8,[`value`])):(_(),u(`div`,Ee,b(E(`cl_qr_missing`,`请配置二维码地址`)),1)),X.value?(_(),u(`div`,De)):l(`v-if`,!0),r[18]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--tl`},null,-1),r[19]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--tr`},null,-1),r[20]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--bl`},null,-1),r[21]||=d(`div`,{class:`c-login__qr-corner c-login__qr-corner--br`},null,-1)]),d(`p`,Oe,[p(e,{name:`mdi:cellphone-check`,size:13}),f(` `+b(E(`cl_qr_hint`,`打开手机扫码后点击「确认」即可登录`)),1)]),p(h,{text:``,size:`tiny`,class:`c-login__qr-refresh`,onClick:qe},{icon:C(()=>[p(e,{name:`mdi:refresh`,size:12})]),default:C(()=>[f(` `+b(E(`cl_qr_refresh`,`二维码已失效?点击刷新`)),1)]),_:1})])):l(`v-if`,!0),l(` ===== 返回按钮(扫码子视图,在二维码下方) ===== `),N.value===`qrcode`?(_(),c(h,{key:4,block:``,class:`c-login__back-btn`,onClick:r[9]||=e=>N.value=`password`},{default:C(()=>[f(b(E(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 注册表单 ===== `),w(p(m,{ref_key:`registerFormRef`,ref:Je,model:Z,rules:Ye,class:`c-login__form`},{default:C(()=>[p(a,{path:`phone`,class:`c-login__form-item`},{default:C(()=>[p(i,{value:Z.phone,"onUpdate:value":r[10]||=e=>Z.phone=e,placeholder:E(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:C(()=>[p(e,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),p(a,{path:`code`,class:`c-login__form-item`},{default:C(()=>[d(`div`,ke,[p(i,{value:Z.code,"onUpdate:value":r[11]||=e=>Z.code=e,placeholder:E(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`},{prefix:C(()=>[p(e,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),p(h,{disabled:Q.value>0||!Z.phone,class:`c-login__send-code-btn`,onClick:Xe},{default:C(()=>[f(b(Q.value>0?`${Q.value}s ${E(`cl_resend`,`后重发`)}`:E(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1}),p(a,{path:`password`,class:`c-login__form-item`},{default:C(()=>[p(i,{value:Z.password,"onUpdate:value":r[12]||=e=>Z.password=e,type:`password`,"show-password-on":`click`,placeholder:E(`cl_password_ph`,`请输入密码`)},{prefix:C(()=>[p(e,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),p(a,{path:`confirmPassword`,class:`c-login__form-item`},{default:C(()=>[p(i,{value:Z.confirmPassword,"onUpdate:value":r[13]||=e=>Z.confirmPassword=e,type:`password`,"show-password-on":`click`,placeholder:E(`cl_confirm_pw_ph`,`请再次输入密码`),onKeyup:T(Ze,[`enter`])},{prefix:C(()=>[p(e,{name:`mdi:lock-check-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1})]),_:1},8,[`model`]),[[x,N.value===`register`]]),l(` ===== 注册确认按钮 ===== `),N.value===`register`?(_(),c(h,{key:5,type:`primary`,block:``,loading:k.loading||P.value,disabled:k.loading||k.submitDisabled||P.value,class:`c-login__submit-btn`,onClick:Ze},{default:C(()=>[f(b(E(`cl_confirm`,`确认`)),1)]),_:1},8,[`loading`,`disabled`])):l(`v-if`,!0),l(` ===== 注册视图返回按钮 ===== `),N.value===`register`?(_(),c(h,{key:6,block:``,class:`c-login__back-btn`,onClick:r[14]||=e=>N.value=`password`},{default:C(()=>[f(b(E(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 登录方式切换(仅密码登录默认视图显示) ===== `),N.value===`password`&&(M.value.captchaLogin||M.value.qrcodeLogin)?(_(),u(`div`,Ae,[M.value.captchaLogin?(_(),c(h,{key:0,class:`c-login__mode-btn`,size:`small`,onClick:r[15]||=e=>N.value=`captcha`},{default:C(()=>[f(b(E(`cl_captcha_login`,`验证码登录`)),1)]),_:1})):l(`v-if`,!0),M.value.qrcodeLogin?(_(),c(h,{key:1,class:`c-login__mode-btn`,size:`small`,onClick:r[16]||=e=>N.value=`qrcode`},{default:C(()=>[f(b(E(`cl_qr_login`,`扫码登录`)),1)]),_:1})):l(`v-if`,!0)])):l(`v-if`,!0),l(` ===== 其他登录方式(仅密码登录默认视图显示) ===== `),N.value===`password`&&M.value.socialLogin&&Pe.value.length?(_(),u(te,{key:8},[p(g,{class:`c-login__divider`},{default:C(()=>[f(b(E(`cl_social_login`,`其他账号登录`)),1)]),_:1}),d(`div`,je,[(_(!0),u(te,null,ne(Pe.value,t=>(_(),c(v,{key:t.key,trigger:`hover`,placement:`top`},{trigger:C(()=>[p(h,{circle:``,class:`c-login__social-btn`,onClick:e=>A(`social-login`,t.key)},{icon:C(()=>[p(e,{name:t.icon,size:16},null,8,[`name`])]),_:2},1032,[`onClick`])]),default:C(()=>[f(` `+b(t.label),1)]),_:2},1024))),128))])],64)):l(`v-if`,!0),l(` ===== 注册入口(仅密码登录默认视图显示) ===== `),N.value===`password`&&M.value.register?(_(),u(`div`,Me,[p(s,{class:`c-login__register-hint`},{default:C(()=>[f(b(E(`cl_no_account`,`还没有账号?`)),1)]),_:1}),p(s,{class:`c-login__register-link`,onClick:r[17]||=e=>N.value=`register`},{default:C(()=>[f(b(E(`cl_register`,`注册账号`)),1)]),_:1})])):l(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-00fdce30`]]);export{me as n,pe as r,E as t};
package/dist/C_Map.css CHANGED
@@ -662,7 +662,7 @@ svg.leaflet-image-layer.leaflet-interactive path {
662
662
  }
663
663
  }
664
664
 
665
- .c-map[data-v-464b0051] {
665
+ .c-map[data-v-7db70bf0] {
666
666
  position: relative;
667
667
  width: 100%;
668
668
  min-height: 300px;
@@ -670,13 +670,13 @@ svg.leaflet-image-layer.leaflet-interactive path {
670
670
  border-radius: var(--c-radius-sm, 4px);
671
671
  overflow: hidden;
672
672
  }
673
- .c-map .map-container[data-v-464b0051] {
673
+ .c-map .map-container[data-v-7db70bf0] {
674
674
  width: 100%;
675
675
  height: 100%;
676
676
  border-radius: inherit;
677
677
  overflow: hidden;
678
678
  }
679
- .c-map .map-loading[data-v-464b0051] {
679
+ .c-map .map-loading[data-v-7db70bf0] {
680
680
  position: absolute;
681
681
  top: 0;
682
682
  left: 0;
@@ -691,21 +691,21 @@ svg.leaflet-image-layer.leaflet-interactive path {
691
691
  }
692
692
 
693
693
  /* layer: shortcuts */
694
- .container[data-v-464b0051]{width:100%;}
694
+ .container[data-v-7db70bf0]{width:100%;}
695
695
  @media (min-width: 640px){
696
- .container[data-v-464b0051]{max-width:640px;}
696
+ .container[data-v-7db70bf0]{max-width:640px;}
697
697
  }
698
698
  @media (min-width: 768px){
699
- .container[data-v-464b0051]{max-width:768px;}
699
+ .container[data-v-7db70bf0]{max-width:768px;}
700
700
  }
701
701
  @media (min-width: 1024px){
702
- .container[data-v-464b0051]{max-width:1024px;}
702
+ .container[data-v-7db70bf0]{max-width:1024px;}
703
703
  }
704
704
  @media (min-width: 1280px){
705
- .container[data-v-464b0051]{max-width:1280px;}
705
+ .container[data-v-7db70bf0]{max-width:1280px;}
706
706
  }
707
707
  @media (min-width: 1536px){
708
- .container[data-v-464b0051]{max-width:1536px;}
708
+ .container[data-v-7db70bf0]{max-width:1536px;}
709
709
  }
710
710
  /* layer: default */
711
- .transition[data-v-464b0051]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
711
+ .transition[data-v-7db70bf0]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
package/dist/C_Map2.cjs CHANGED
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],i={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},a={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},o={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},s=15e3;let c=null,l=null;function u(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const d=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},f=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=u(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:d(n)}};function p(e,t=s,n,r){let i;try{i=f(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:u,normalizedSecurityConfig:d}=i,{clearTimeout:p,document:m,host:h,setTimeout:g}=i.platform;return l&&l!==a?Promise.reject(Error(`同一页面不能使用不同的高德地图 Key 或安全配置`)):h.AMap?Promise.resolve(h.AMap):c||(l=a,d&&(h._AMapSecurityConfig={...d}),c=new Promise((e,n)=>{let r=m.querySelector(`script[data-c-map-amap="true"]`),i=r||m.createElement(`script`),a=!1,d=Number.isFinite(t)&&t>0?t:s,f=()=>{p(b),i.removeEventListener(`load`,v),i.removeEventListener(`error`,y)},_=e=>{a||(a=!0,f(),i.remove(),c=null,l=null,n(e))},v=()=>{if(!a){if(!h.AMap){_(Error(`高德地图 API 加载完成但未找到全局对象`));return}a=!0,f(),e(h.AMap)}},y=()=>_(Error(`高德地图 API 加载失败`)),b=g(()=>_(Error(`高德地图 API 加载超时(${d}ms)`)),d);i.addEventListener(`load`,v,{once:!0}),i.addEventListener(`error`,y,{once:!0}),!r&&(i.async=!0,i.dataset.cMapAmap=`true`,i.src=`${o.apiUrl}${encodeURIComponent(u)}`,m.head.appendChild(i))}),c)}const m=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.map==`function`&&typeof t.marker==`function`&&typeof t.tileLayer==`function`},h=e=>{if(m(e))return e;let t=e&&typeof e==`object`?e.default:void 0;if(m(t))return t;throw Error(`Leaflet 模块加载失败:未找到 map、marker 和 tileLayer API`)},g=async()=>h(await import(`leaflet`));function _(e){if(!e||e.length!==2)return!1;let[t,n]=e;return Number.isFinite(t)&&Number.isFinite(n)&&t>=-90&&t<=90&&n>=-180&&n<=180}function v(e){return[e[1],e[0]]}function y(e){return e.filter(e=>_([e.lat,e.lng]))}function b(e,t=a.minZoom,n=a.maxZoom){return Number.isFinite(e)?Math.min(Math.max(e,t),n):i.zoom}function x(e={}){let{url:t,...n}={...a,...e};return{url:t,options:n}}const S=[`aria-label`,`aria-busy`],C={key:0,class:`map-loading`,role:`status`,"aria-live":`polite`,"aria-label":`地图加载中`},w=(0,t.defineComponent)({name:`C_Map`,__name:`index`,props:{ariaLabel:{default:`地图`},height:{default:i.height},center:{default:()=>[...i.center]},zoom:{default:i.zoom},markers:{default:()=>[]},mapType:{default:i.mapType},amapKey:{default:``},amapSecurityConfig:{},amapLoadTimeout:{default:15e3},amapOptions:{default:()=>({})},tileConfig:{default:()=>({})},zoomControl:{type:Boolean,default:!0},preferCanvas:{type:Boolean,default:!0},fitMarkersOnInit:{type:Boolean,default:!1}},emits:[`ready`,`markerClick`,`error`],setup(e,{expose:r,emit:i}){let a=e,o=i,s=(0,t.ref)(),c=(0,t.ref)(!0),l=null,u=null,d=[],f=null,m=null,h=[],w=[],T=0,E=!1,D=e=>e instanceof Error?e:Error(String(e)),O=()=>{d.forEach(e=>e.remove()),d=[]},k=()=>{w.forEach(e=>e.close?.()),w=[],h.forEach(e=>e.setMap?.(null)),h=[]},A=()=>{O(),k();let e=u;if(u=null,e){let t=e;t._animatingZoom=!1}e?.stop(),e?.remove(),m?.destroy(),m=null,s.value?.replaceChildren()},j=()=>{let e=++T;return A(),c.value=!0,e},M=e=>!E&&e===T,N=()=>{if(_(a.center))return a.center;throw Error(`地图中心坐标无效,应使用 [纬度, 经度] 且处于合法范围`)},P=(e,t)=>{M(e)&&(A(),c.value=!1,o(`error`,D(t)))},F=()=>{let e=l,t=u;!t||!e||a.mapType!==`osm`||(O(),y(a.markers).forEach(n=>{let r=e.marker([n.lat,n.lng]);if(n.popup){let e=document.createElement(`span`);e.textContent=n.popup,r.bindPopup(e)}r.on(`click`,e=>{o(`markerClick`,n,e)}),r.addTo(t),d.push(r)}))},I=()=>{let e=f,t=m;!t||!e||a.mapType!==`amap`||(k(),y(a.markers).forEach(n=>{let r=new e.Marker({position:v([n.lat,n.lng]),title:n.title||n.popup||``});if(n.popup){let i=document.createElement(`span`);i.textContent=n.popup;let a=new e.InfoWindow({content:i,offset:new e.Pixel(0,-30)});w.push(a),r.on(`click`,e=>{a.open(t,r.getPosition()),o(`markerClick`,n,e)})}else r.on(`click`,e=>o(`markerClick`,n,e));r.setMap(t),h.push(r)}))},L=()=>u||m,R=()=>{u?.invalidateSize({pan:!1}),m?.resize?.()},z=(e={})=>{let t=y(a.markers);if(t.length===0)return!1;if(u){let n=t.map(e=>[e.lat,e.lng]);return u.fitBounds(n,{maxZoom:e.maxZoom,padding:e.padding}),!0}if(m&&h.length>0){let[t=0,n=0]=e.padding||[];return m.setFitView?.(h,!1,[n,t,n,t],e.maxZoom),!0}return!1},B=async()=>{if(!s.value)return;let e=j();try{let n=await g();if(!M(e)||!s.value)return;l=n;let{url:r,options:i}=x(a.tileConfig),d=b(a.zoom,i.minZoom,i.maxZoom);if(u=n.map(s.value,{center:N(),zoom:d,zoomControl:a.zoomControl,preferCanvas:a.preferCanvas}),n.tileLayer(r,i).addTo(u),F(),a.fitMarkersOnInit&&z(),await(0,t.nextTick)(),requestAnimationFrame(()=>{M(e)&&R()}),!M(e)||!u)return;c.value=!1,o(`ready`,u)}catch(t){P(e,t)}},V=async()=>{if(!s.value)return;let e=j();try{let t=await p(a.amapKey,a.amapLoadTimeout,a.amapSecurityConfig);if(!M(e)||!s.value)return;f=t,m=new t.Map(s.value,{...a.amapOptions,zoom:b(a.zoom,1,20),center:v(N())}),I(),a.fitMarkersOnInit&&z(),c.value=!1,o(`ready`,m)}catch(t){P(e,t)}},H=async()=>{a.mapType===`amap`?await V():await B()};return(0,t.watch)(()=>a.markers,()=>{a.mapType===`osm`?F():I()},{deep:!0}),(0,t.watch)([()=>a.mapType,()=>a.amapKey,()=>a.amapSecurityConfig,()=>a.amapLoadTimeout,()=>a.amapOptions,()=>a.tileConfig,()=>a.zoomControl,()=>a.preferCanvas],()=>void H(),{deep:!0}),(0,t.watch)([()=>a.center,()=>a.zoom],()=>{if(!_(a.center)){o(`error`,Error(`地图中心坐标无效,应使用 [纬度, 经度]`));return}u?.setView(a.center,b(a.zoom)),m?.setCenter(v(a.center)),m?.setZoom(b(a.zoom,1,20))},{deep:!0}),(0,t.onMounted)(async()=>{await(0,t.nextTick)(),await H()}),(0,t.onUnmounted)(()=>{E=!0,T+=1,A()}),r({fitToMarkers:z,getMap:L,refresh:R}),(r,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`c-map`,role:`region`,"aria-label":e.ariaLabel,"aria-busy":c.value},[(0,t.createElementVNode)(`div`,{ref_key:`mapContainer`,ref:s,class:`map-container`,style:(0,t.normalizeStyle)({height:e.height})},null,4),c.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,C,[(0,t.createVNode)((0,t.unref)(n.NSpin),{size:`large`})])):(0,t.createCommentVNode)(`v-if`,!0)],8,S))}});var T=e.t(w,[[`__scopeId`,`data-v-464b0051`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return T}});
1
+ require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],i={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},a={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},o={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},s=15e3;let c=null,l=null;function u(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const d=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},f=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=u(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:d(n)}};function p(e,t=s,n,r){let i;try{i=f(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:u,normalizedSecurityConfig:d}=i,{clearTimeout:p,document:m,host:h,setTimeout:g}=i.platform;return l&&l!==a?Promise.reject(Error(`同一页面不能使用不同的高德地图 Key 或安全配置`)):h.AMap?Promise.resolve(h.AMap):c||(l=a,d&&(h._AMapSecurityConfig={...d}),c=new Promise((e,n)=>{let r=m.querySelector(`script[data-c-map-amap="true"]`),i=r||m.createElement(`script`),a=!1,d=Number.isFinite(t)&&t>0?t:s,f=()=>{p(b),i.removeEventListener(`load`,v),i.removeEventListener(`error`,y)},_=e=>{a||(a=!0,f(),i.remove(),c=null,l=null,n(e))},v=()=>{if(!a){if(!h.AMap){_(Error(`高德地图 API 加载完成但未找到全局对象`));return}a=!0,f(),e(h.AMap)}},y=()=>_(Error(`高德地图 API 加载失败`)),b=g(()=>_(Error(`高德地图 API 加载超时(${d}ms)`)),d);i.addEventListener(`load`,v,{once:!0}),i.addEventListener(`error`,y,{once:!0}),!r&&(i.async=!0,i.dataset.cMapAmap=`true`,i.src=`${o.apiUrl}${encodeURIComponent(u)}`,m.head.appendChild(i))}),c)}const m=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.map==`function`&&typeof t.marker==`function`&&typeof t.tileLayer==`function`},h=e=>{if(m(e))return e;let t=e&&typeof e==`object`?e.default:void 0;if(m(t))return t;throw Error(`Leaflet 模块加载失败:未找到 map、marker 和 tileLayer API`)},g=async()=>h(await import(`leaflet`));function _(e){if(!e||e.length!==2)return!1;let[t,n]=e;return Number.isFinite(t)&&Number.isFinite(n)&&t>=-90&&t<=90&&n>=-180&&n<=180}function v(e){return[e[1],e[0]]}function y(e){return e.filter(e=>_([e.lat,e.lng]))}function b(e,t=a.minZoom,n=a.maxZoom){return Number.isFinite(e)?Math.min(Math.max(e,t),n):i.zoom}function x(e={}){let{url:t,...n}={...a,...e};return{url:t,options:n}}const S=[`aria-label`,`aria-busy`],C={key:0,class:`map-loading`,role:`status`,"aria-live":`polite`,"aria-label":`地图加载中`},w=(0,t.defineComponent)({name:`C_Map`,__name:`index`,props:{ariaLabel:{default:`地图`},height:{default:i.height},center:{default:()=>[...i.center]},zoom:{default:i.zoom},markers:{default:()=>[]},mapType:{default:i.mapType},amapKey:{default:``},amapSecurityConfig:{},amapLoadTimeout:{default:15e3},amapOptions:{default:()=>({})},tileConfig:{default:()=>({})},zoomControl:{type:Boolean,default:!0},preferCanvas:{type:Boolean,default:!0},fitMarkersOnInit:{type:Boolean,default:!1}},emits:[`ready`,`markerClick`,`error`],setup(e,{expose:r,emit:i}){let a=e,o=i,s=(0,t.ref)(),c=(0,t.ref)(!0),l=null,u=null,d=[],f=null,m=null,h=[],w=[],T=0,E=!1,D=e=>e instanceof Error?e:Error(String(e)),O=()=>{d.forEach(e=>e.remove()),d=[]},k=()=>{w.forEach(e=>e.close?.()),w=[],h.forEach(e=>e.setMap?.(null)),h=[]},A=()=>{O(),k();let e=u;if(u=null,e){let t=e;t._animatingZoom=!1}e?.stop(),e?.remove(),m?.destroy(),m=null,s.value?.replaceChildren()},j=()=>{let e=++T;return A(),c.value=!0,e},M=e=>!E&&e===T,N=()=>{if(_(a.center))return a.center;throw Error(`地图中心坐标无效,应使用 [纬度, 经度] 且处于合法范围`)},P=(e,t)=>{M(e)&&(A(),c.value=!1,o(`error`,D(t)))},F=()=>{let e=l,t=u;if(!t||!e||a.mapType!==`osm`)return;O();let n=e.icon({iconUrl:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2240%22%20viewBox%3D%220%200%2028%2040%22%3E%3Cpath%20d%3D%22M14%2039S1%2024%201%2014a13%2013%200%200%201%2026%200c0%2010-13%2025-13%2025Z%22%20fill%3D%22%23287be8%22%20stroke%3D%22white%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2214%22%20cy%3D%2214%22%20r%3D%225%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E`,iconSize:[28,40],iconAnchor:[14,40],popupAnchor:[0,-35]});y(a.markers).forEach(r=>{let i=e.marker([r.lat,r.lng],{icon:n,title:r.title||r.popup||``});if(r.popup){let e=document.createElement(`span`);e.textContent=r.popup,i.bindPopup(e)}i.on(`click`,e=>{o(`markerClick`,r,e)}),i.addTo(t),d.push(i)})},I=()=>{let e=f,t=m;!t||!e||a.mapType!==`amap`||(k(),y(a.markers).forEach(n=>{let r=new e.Marker({position:v([n.lat,n.lng]),title:n.title||n.popup||``});if(n.popup){let i=document.createElement(`span`);i.textContent=n.popup;let a=new e.InfoWindow({content:i,offset:new e.Pixel(0,-30)});w.push(a),r.on(`click`,e=>{a.open(t,r.getPosition()),o(`markerClick`,n,e)})}else r.on(`click`,e=>o(`markerClick`,n,e));r.setMap(t),h.push(r)}))},L=()=>u||m,R=()=>{u?.invalidateSize({pan:!1}),m?.resize?.()},z=(e={})=>{let t=y(a.markers);if(t.length===0)return!1;if(u){let n=t.map(e=>[e.lat,e.lng]);return u.fitBounds(n,{maxZoom:e.maxZoom,padding:e.padding}),!0}if(m&&h.length>0){let[t=0,n=0]=e.padding||[];return m.setFitView?.(h,!1,[n,t,n,t],e.maxZoom),!0}return!1},B=async()=>{if(!s.value)return;let e=j();try{let n=await g();if(!M(e)||!s.value)return;l=n;let{url:r,options:i}=x(a.tileConfig),d=b(a.zoom,i.minZoom,i.maxZoom);if(u=n.map(s.value,{center:N(),zoom:d,zoomControl:a.zoomControl,preferCanvas:a.preferCanvas}),n.tileLayer(r,i).addTo(u),F(),a.fitMarkersOnInit&&z(),await(0,t.nextTick)(),requestAnimationFrame(()=>{M(e)&&R()}),!M(e)||!u)return;c.value=!1,o(`ready`,u)}catch(t){P(e,t)}},V=async()=>{if(!s.value)return;let e=j();try{let t=await p(a.amapKey,a.amapLoadTimeout,a.amapSecurityConfig);if(!M(e)||!s.value)return;f=t,m=new t.Map(s.value,{...a.amapOptions,zoom:b(a.zoom,1,20),center:v(N())}),I(),a.fitMarkersOnInit&&z(),c.value=!1,o(`ready`,m)}catch(t){P(e,t)}},H=async()=>{a.mapType===`amap`?await V():await B()};return(0,t.watch)(()=>a.markers,()=>{a.mapType===`osm`?F():I()},{deep:!0}),(0,t.watch)([()=>a.mapType,()=>a.amapKey,()=>a.amapSecurityConfig,()=>a.amapLoadTimeout,()=>a.amapOptions,()=>a.tileConfig,()=>a.zoomControl,()=>a.preferCanvas],()=>void H(),{deep:!0}),(0,t.watch)([()=>a.center,()=>a.zoom],()=>{if(!_(a.center)){o(`error`,Error(`地图中心坐标无效,应使用 [纬度, 经度]`));return}u?.setView(a.center,b(a.zoom)),m?.setCenter(v(a.center)),m?.setZoom(b(a.zoom,1,20))},{deep:!0}),(0,t.onMounted)(async()=>{await(0,t.nextTick)(),await H()}),(0,t.onUnmounted)(()=>{E=!0,T+=1,A()}),r({fitToMarkers:z,getMap:L,refresh:R}),(r,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`c-map`,role:`region`,"aria-label":e.ariaLabel,"aria-busy":c.value},[(0,t.createElementVNode)(`div`,{ref_key:`mapContainer`,ref:s,class:`map-container`,style:(0,t.normalizeStyle)({height:e.height})},null,4),c.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,C,[(0,t.createVNode)((0,t.unref)(n.NSpin),{size:`large`})])):(0,t.createCommentVNode)(`v-if`,!0)],8,S))}});var T=e.t(w,[[`__scopeId`,`data-v-7db70bf0`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return T}});
package/dist/C_Map2.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./export-helper.js";import{createCommentVNode as t,createElementBlock as n,createElementVNode as r,createVNode as i,defineComponent as a,nextTick as o,normalizeStyle as s,onMounted as c,onUnmounted as l,openBlock as u,ref as d,unref as f,watch as p}from"vue";import{NSpin as m}from"naive-ui";const h=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],g={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},_={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},v={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},y=15e3;let b=null,x=null;function S(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const C=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},w=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=S(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:C(n)}};function T(e,t=y,n,r){let i;try{i=w(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:o,normalizedSecurityConfig:s}=i,{clearTimeout:c,document:l,host:u,setTimeout:d}=i.platform;return x&&x!==a?Promise.reject(Error(`同一页面不能使用不同的高德地图 Key 或安全配置`)):u.AMap?Promise.resolve(u.AMap):b||(x=a,s&&(u._AMapSecurityConfig={...s}),b=new Promise((e,n)=>{let r=l.querySelector(`script[data-c-map-amap="true"]`),i=r||l.createElement(`script`),a=!1,s=Number.isFinite(t)&&t>0?t:y,f=()=>{c(g),i.removeEventListener(`load`,m),i.removeEventListener(`error`,h)},p=e=>{a||(a=!0,f(),i.remove(),b=null,x=null,n(e))},m=()=>{if(!a){if(!u.AMap){p(Error(`高德地图 API 加载完成但未找到全局对象`));return}a=!0,f(),e(u.AMap)}},h=()=>p(Error(`高德地图 API 加载失败`)),g=d(()=>p(Error(`高德地图 API 加载超时(${s}ms)`)),s);i.addEventListener(`load`,m,{once:!0}),i.addEventListener(`error`,h,{once:!0}),!r&&(i.async=!0,i.dataset.cMapAmap=`true`,i.src=`${v.apiUrl}${encodeURIComponent(o)}`,l.head.appendChild(i))}),b)}const E=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.map==`function`&&typeof t.marker==`function`&&typeof t.tileLayer==`function`},D=e=>{if(E(e))return e;let t=e&&typeof e==`object`?e.default:void 0;if(E(t))return t;throw Error(`Leaflet 模块加载失败:未找到 map、marker 和 tileLayer API`)},O=async()=>D(await import(`leaflet`));function k(e){if(!e||e.length!==2)return!1;let[t,n]=e;return Number.isFinite(t)&&Number.isFinite(n)&&t>=-90&&t<=90&&n>=-180&&n<=180}function A(e){return[e[1],e[0]]}function j(e){return e.filter(e=>k([e.lat,e.lng]))}function M(e,t=_.minZoom,n=_.maxZoom){return Number.isFinite(e)?Math.min(Math.max(e,t),n):g.zoom}function N(e={}){let{url:t,...n}={..._,...e};return{url:t,options:n}}const P=[`aria-label`,`aria-busy`],F={key:0,class:`map-loading`,role:`status`,"aria-live":`polite`,"aria-label":`地图加载中`};var I=e(a({name:`C_Map`,__name:`index`,props:{ariaLabel:{default:`地图`},height:{default:g.height},center:{default:()=>[...g.center]},zoom:{default:g.zoom},markers:{default:()=>[]},mapType:{default:g.mapType},amapKey:{default:``},amapSecurityConfig:{},amapLoadTimeout:{default:15e3},amapOptions:{default:()=>({})},tileConfig:{default:()=>({})},zoomControl:{type:Boolean,default:!0},preferCanvas:{type:Boolean,default:!0},fitMarkersOnInit:{type:Boolean,default:!1}},emits:[`ready`,`markerClick`,`error`],setup(e,{expose:a,emit:h}){let g=e,_=h,v=d(),y=d(!0),b=null,x=null,S=[],C=null,w=null,E=[],D=[],I=0,L=!1,R=e=>e instanceof Error?e:Error(String(e)),z=()=>{S.forEach(e=>e.remove()),S=[]},B=()=>{D.forEach(e=>e.close?.()),D=[],E.forEach(e=>e.setMap?.(null)),E=[]},V=()=>{z(),B();let e=x;if(x=null,e){let t=e;t._animatingZoom=!1}e?.stop(),e?.remove(),w?.destroy(),w=null,v.value?.replaceChildren()},H=()=>{let e=++I;return V(),y.value=!0,e},U=e=>!L&&e===I,W=()=>{if(k(g.center))return g.center;throw Error(`地图中心坐标无效,应使用 [纬度, 经度] 且处于合法范围`)},G=(e,t)=>{U(e)&&(V(),y.value=!1,_(`error`,R(t)))},K=()=>{let e=b,t=x;!t||!e||g.mapType!==`osm`||(z(),j(g.markers).forEach(n=>{let r=e.marker([n.lat,n.lng]);if(n.popup){let e=document.createElement(`span`);e.textContent=n.popup,r.bindPopup(e)}r.on(`click`,e=>{_(`markerClick`,n,e)}),r.addTo(t),S.push(r)}))},q=()=>{let e=C,t=w;!t||!e||g.mapType!==`amap`||(B(),j(g.markers).forEach(n=>{let r=new e.Marker({position:A([n.lat,n.lng]),title:n.title||n.popup||``});if(n.popup){let i=document.createElement(`span`);i.textContent=n.popup;let a=new e.InfoWindow({content:i,offset:new e.Pixel(0,-30)});D.push(a),r.on(`click`,e=>{a.open(t,r.getPosition()),_(`markerClick`,n,e)})}else r.on(`click`,e=>_(`markerClick`,n,e));r.setMap(t),E.push(r)}))},J=()=>x||w,Y=()=>{x?.invalidateSize({pan:!1}),w?.resize?.()},X=(e={})=>{let t=j(g.markers);if(t.length===0)return!1;if(x){let n=t.map(e=>[e.lat,e.lng]);return x.fitBounds(n,{maxZoom:e.maxZoom,padding:e.padding}),!0}if(w&&E.length>0){let[t=0,n=0]=e.padding||[];return w.setFitView?.(E,!1,[n,t,n,t],e.maxZoom),!0}return!1},Z=async()=>{if(!v.value)return;let e=H();try{let t=await O();if(!U(e)||!v.value)return;b=t;let{url:n,options:r}=N(g.tileConfig),i=M(g.zoom,r.minZoom,r.maxZoom);if(x=t.map(v.value,{center:W(),zoom:i,zoomControl:g.zoomControl,preferCanvas:g.preferCanvas}),t.tileLayer(n,r).addTo(x),K(),g.fitMarkersOnInit&&X(),await o(),requestAnimationFrame(()=>{U(e)&&Y()}),!U(e)||!x)return;y.value=!1,_(`ready`,x)}catch(t){G(e,t)}},Q=async()=>{if(!v.value)return;let e=H();try{let t=await T(g.amapKey,g.amapLoadTimeout,g.amapSecurityConfig);if(!U(e)||!v.value)return;C=t,w=new t.Map(v.value,{...g.amapOptions,zoom:M(g.zoom,1,20),center:A(W())}),q(),g.fitMarkersOnInit&&X(),y.value=!1,_(`ready`,w)}catch(t){G(e,t)}},$=async()=>{g.mapType===`amap`?await Q():await Z()};return p(()=>g.markers,()=>{g.mapType===`osm`?K():q()},{deep:!0}),p([()=>g.mapType,()=>g.amapKey,()=>g.amapSecurityConfig,()=>g.amapLoadTimeout,()=>g.amapOptions,()=>g.tileConfig,()=>g.zoomControl,()=>g.preferCanvas],()=>void $(),{deep:!0}),p([()=>g.center,()=>g.zoom],()=>{if(!k(g.center)){_(`error`,Error(`地图中心坐标无效,应使用 [纬度, 经度]`));return}x?.setView(g.center,M(g.zoom)),w?.setCenter(A(g.center)),w?.setZoom(M(g.zoom,1,20))},{deep:!0}),c(async()=>{await o(),await $()}),l(()=>{L=!0,I+=1,V()}),a({fitToMarkers:X,getMap:J,refresh:Y}),(a,o)=>(u(),n(`div`,{class:`c-map`,role:`region`,"aria-label":e.ariaLabel,"aria-busy":y.value},[r(`div`,{ref_key:`mapContainer`,ref:v,class:`map-container`,style:s({height:e.height})},null,4),y.value?(u(),n(`div`,F,[i(f(m),{size:`large`})])):t(`v-if`,!0)],8,P))}}),[[`__scopeId`,`data-v-464b0051`]]);export{N as a,h as c,M as i,_ as l,j as n,A as o,k as r,g as s,I as t};
1
+ import{t as e}from"./export-helper.js";import{createCommentVNode as t,createElementBlock as n,createElementVNode as r,createVNode as i,defineComponent as a,nextTick as o,normalizeStyle as s,onMounted as c,onUnmounted as l,openBlock as u,ref as d,unref as f,watch as p}from"vue";import{NSpin as m}from"naive-ui";const h=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],g={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},_={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},v={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},y=15e3;let b=null,x=null;function S(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const C=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},w=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=S(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:C(n)}};function T(e,t=y,n,r){let i;try{i=w(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:o,normalizedSecurityConfig:s}=i,{clearTimeout:c,document:l,host:u,setTimeout:d}=i.platform;return x&&x!==a?Promise.reject(Error(`同一页面不能使用不同的高德地图 Key 或安全配置`)):u.AMap?Promise.resolve(u.AMap):b||(x=a,s&&(u._AMapSecurityConfig={...s}),b=new Promise((e,n)=>{let r=l.querySelector(`script[data-c-map-amap="true"]`),i=r||l.createElement(`script`),a=!1,s=Number.isFinite(t)&&t>0?t:y,f=()=>{c(g),i.removeEventListener(`load`,m),i.removeEventListener(`error`,h)},p=e=>{a||(a=!0,f(),i.remove(),b=null,x=null,n(e))},m=()=>{if(!a){if(!u.AMap){p(Error(`高德地图 API 加载完成但未找到全局对象`));return}a=!0,f(),e(u.AMap)}},h=()=>p(Error(`高德地图 API 加载失败`)),g=d(()=>p(Error(`高德地图 API 加载超时(${s}ms)`)),s);i.addEventListener(`load`,m,{once:!0}),i.addEventListener(`error`,h,{once:!0}),!r&&(i.async=!0,i.dataset.cMapAmap=`true`,i.src=`${v.apiUrl}${encodeURIComponent(o)}`,l.head.appendChild(i))}),b)}const E=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.map==`function`&&typeof t.marker==`function`&&typeof t.tileLayer==`function`},D=e=>{if(E(e))return e;let t=e&&typeof e==`object`?e.default:void 0;if(E(t))return t;throw Error(`Leaflet 模块加载失败:未找到 map、marker 和 tileLayer API`)},O=async()=>D(await import(`leaflet`));function k(e){if(!e||e.length!==2)return!1;let[t,n]=e;return Number.isFinite(t)&&Number.isFinite(n)&&t>=-90&&t<=90&&n>=-180&&n<=180}function A(e){return[e[1],e[0]]}function j(e){return e.filter(e=>k([e.lat,e.lng]))}function M(e,t=_.minZoom,n=_.maxZoom){return Number.isFinite(e)?Math.min(Math.max(e,t),n):g.zoom}function N(e={}){let{url:t,...n}={..._,...e};return{url:t,options:n}}const P=[`aria-label`,`aria-busy`],F={key:0,class:`map-loading`,role:`status`,"aria-live":`polite`,"aria-label":`地图加载中`};var I=e(a({name:`C_Map`,__name:`index`,props:{ariaLabel:{default:`地图`},height:{default:g.height},center:{default:()=>[...g.center]},zoom:{default:g.zoom},markers:{default:()=>[]},mapType:{default:g.mapType},amapKey:{default:``},amapSecurityConfig:{},amapLoadTimeout:{default:15e3},amapOptions:{default:()=>({})},tileConfig:{default:()=>({})},zoomControl:{type:Boolean,default:!0},preferCanvas:{type:Boolean,default:!0},fitMarkersOnInit:{type:Boolean,default:!1}},emits:[`ready`,`markerClick`,`error`],setup(e,{expose:a,emit:h}){let g=e,_=h,v=d(),y=d(!0),b=null,x=null,S=[],C=null,w=null,E=[],D=[],I=0,L=!1,R=e=>e instanceof Error?e:Error(String(e)),z=()=>{S.forEach(e=>e.remove()),S=[]},B=()=>{D.forEach(e=>e.close?.()),D=[],E.forEach(e=>e.setMap?.(null)),E=[]},V=()=>{z(),B();let e=x;if(x=null,e){let t=e;t._animatingZoom=!1}e?.stop(),e?.remove(),w?.destroy(),w=null,v.value?.replaceChildren()},H=()=>{let e=++I;return V(),y.value=!0,e},U=e=>!L&&e===I,W=()=>{if(k(g.center))return g.center;throw Error(`地图中心坐标无效,应使用 [纬度, 经度] 且处于合法范围`)},G=(e,t)=>{U(e)&&(V(),y.value=!1,_(`error`,R(t)))},K=()=>{let e=b,t=x;if(!t||!e||g.mapType!==`osm`)return;z();let n=e.icon({iconUrl:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2240%22%20viewBox%3D%220%200%2028%2040%22%3E%3Cpath%20d%3D%22M14%2039S1%2024%201%2014a13%2013%200%200%201%2026%200c0%2010-13%2025-13%2025Z%22%20fill%3D%22%23287be8%22%20stroke%3D%22white%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2214%22%20cy%3D%2214%22%20r%3D%225%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E`,iconSize:[28,40],iconAnchor:[14,40],popupAnchor:[0,-35]});j(g.markers).forEach(r=>{let i=e.marker([r.lat,r.lng],{icon:n,title:r.title||r.popup||``});if(r.popup){let e=document.createElement(`span`);e.textContent=r.popup,i.bindPopup(e)}i.on(`click`,e=>{_(`markerClick`,r,e)}),i.addTo(t),S.push(i)})},q=()=>{let e=C,t=w;!t||!e||g.mapType!==`amap`||(B(),j(g.markers).forEach(n=>{let r=new e.Marker({position:A([n.lat,n.lng]),title:n.title||n.popup||``});if(n.popup){let i=document.createElement(`span`);i.textContent=n.popup;let a=new e.InfoWindow({content:i,offset:new e.Pixel(0,-30)});D.push(a),r.on(`click`,e=>{a.open(t,r.getPosition()),_(`markerClick`,n,e)})}else r.on(`click`,e=>_(`markerClick`,n,e));r.setMap(t),E.push(r)}))},J=()=>x||w,Y=()=>{x?.invalidateSize({pan:!1}),w?.resize?.()},X=(e={})=>{let t=j(g.markers);if(t.length===0)return!1;if(x){let n=t.map(e=>[e.lat,e.lng]);return x.fitBounds(n,{maxZoom:e.maxZoom,padding:e.padding}),!0}if(w&&E.length>0){let[t=0,n=0]=e.padding||[];return w.setFitView?.(E,!1,[n,t,n,t],e.maxZoom),!0}return!1},Z=async()=>{if(!v.value)return;let e=H();try{let t=await O();if(!U(e)||!v.value)return;b=t;let{url:n,options:r}=N(g.tileConfig),i=M(g.zoom,r.minZoom,r.maxZoom);if(x=t.map(v.value,{center:W(),zoom:i,zoomControl:g.zoomControl,preferCanvas:g.preferCanvas}),t.tileLayer(n,r).addTo(x),K(),g.fitMarkersOnInit&&X(),await o(),requestAnimationFrame(()=>{U(e)&&Y()}),!U(e)||!x)return;y.value=!1,_(`ready`,x)}catch(t){G(e,t)}},Q=async()=>{if(!v.value)return;let e=H();try{let t=await T(g.amapKey,g.amapLoadTimeout,g.amapSecurityConfig);if(!U(e)||!v.value)return;C=t,w=new t.Map(v.value,{...g.amapOptions,zoom:M(g.zoom,1,20),center:A(W())}),q(),g.fitMarkersOnInit&&X(),y.value=!1,_(`ready`,w)}catch(t){G(e,t)}},$=async()=>{g.mapType===`amap`?await Q():await Z()};return p(()=>g.markers,()=>{g.mapType===`osm`?K():q()},{deep:!0}),p([()=>g.mapType,()=>g.amapKey,()=>g.amapSecurityConfig,()=>g.amapLoadTimeout,()=>g.amapOptions,()=>g.tileConfig,()=>g.zoomControl,()=>g.preferCanvas],()=>void $(),{deep:!0}),p([()=>g.center,()=>g.zoom],()=>{if(!k(g.center)){_(`error`,Error(`地图中心坐标无效,应使用 [纬度, 经度]`));return}x?.setView(g.center,M(g.zoom)),w?.setCenter(A(g.center)),w?.setZoom(M(g.zoom,1,20))},{deep:!0}),c(async()=>{await o(),await $()}),l(()=>{L=!0,I+=1,V()}),a({fitToMarkers:X,getMap:J,refresh:Y}),(a,o)=>(u(),n(`div`,{class:`c-map`,role:`region`,"aria-label":e.ariaLabel,"aria-busy":y.value},[r(`div`,{ref_key:`mapContainer`,ref:v,class:`map-container`,style:s({height:e.height})},null,4),y.value?(u(),n(`div`,F,[i(f(m),{size:`large`})])):t(`v-if`,!0)],8,P))}}),[[`__scopeId`,`data-v-7db70bf0`]]);export{N as a,h as c,M as i,_ as l,j as n,A as o,k as r,g as s,I as t};
@@ -289,11 +289,35 @@
289
289
  text-align: center;
290
290
  }
291
291
 
292
+ /* layer: shortcuts */
293
+ .\!container[data-v-22a61058]{width:100% !important;}
294
+ .container[data-v-22a61058]{width:100%;}
295
+ @media (min-width: 640px){
296
+ .\!container[data-v-22a61058]{max-width:640px !important;}
297
+ .container[data-v-22a61058]{max-width:640px;}
298
+ }
299
+ @media (min-width: 768px){
300
+ .\!container[data-v-22a61058]{max-width:768px !important;}
301
+ .container[data-v-22a61058]{max-width:768px;}
302
+ }
303
+ @media (min-width: 1024px){
304
+ .\!container[data-v-22a61058]{max-width:1024px !important;}
305
+ .container[data-v-22a61058]{max-width:1024px;}
306
+ }
307
+ @media (min-width: 1280px){
308
+ .\!container[data-v-22a61058]{max-width:1280px !important;}
309
+ .container[data-v-22a61058]{max-width:1280px;}
310
+ }
311
+ @media (min-width: 1536px){
312
+ .\!container[data-v-22a61058]{max-width:1536px !important;}
313
+ .container[data-v-22a61058]{max-width:1536px;}
314
+ }
292
315
  /* layer: default */
293
- .transform[data-v-3c5e8f18]{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
294
- .rounded[data-v-3c5e8f18]{border-radius:0.25rem;}
295
- .px[data-v-3c5e8f18]{padding-left:1rem;padding-right:1rem;}
316
+ .transform[data-v-22a61058]{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
317
+ .rounded[data-v-22a61058]{border-radius:0.25rem;}
318
+ .px[data-v-22a61058]{padding-left:1rem;padding-right:1rem;}
319
+ .transition[data-v-22a61058]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
296
320
 
297
321
 
298
322
  /* layer: default */
299
- .rounded[data-v-f16fa660]{border-radius:0.25rem;}
323
+ .rounded[data-v-023709c3]{border-radius:0.25rem;}
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`);const n={class:`c-orgchart__node-wrapper`},r=[`role`,`tabindex`,`aria-label`,`onKeydown`],i={class:`c-orgchart__node-default`},a={key:0,class:`c-orgchart__avatar`},o=[`src`,`alt`],s={class:`c-orgchart__info`},c={class:`c-orgchart__label`},l={key:0,class:`c-orgchart__subtitle`},u=[`aria-label`,`aria-expanded`],d={key:0,class:`c-orgchart__children`},f=(0,t.defineComponent)({name:`OrgNode`,__name:`OrgNode`,props:{node:{},collapsible:{type:Boolean}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{emit:f}){let p=e,m=f,h=(0,t.ref)(!p.node.collapsed);(0,t.watch)(()=>p.node.collapsed,e=>{h.value=!e});let g=(0,t.computed)(()=>p.node.children&&p.node.children.length>0),_=(0,t.computed)(()=>!g.value),v=e=>{e instanceof KeyboardEvent&&e.target!==e.currentTarget||e.target.closest(`button, a, input, select, textarea`)||m(`node-click`,p.node)},y=()=>{h.value=!h.value,h.value?m(`node-expand`,p.node):m(`node-collapse`,p.node)};return(f,p)=>{let m=(0,t.resolveComponent)(`OrgNode`,!0);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,n,[(0,t.createCommentVNode)(` 节点卡片 `),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`c-orgchart__node`,[e.node.className,{"c-orgchart__node--leaf":_.value}]])},[(0,t.createElementVNode)(`div`,{class:`c-orgchart__node-select`,role:f.$slots.node?void 0:`button`,tabindex:f.$slots.node?void 0:0,"aria-label":f.$slots.node?void 0:e.node.label,onClick:(0,t.withModifiers)(v,[`stop`]),onKeydown:[(0,t.withKeys)((0,t.withModifiers)(v,[`stop`]),[`enter`]),(0,t.withKeys)((0,t.withModifiers)(v,[`stop`,`prevent`]),[`space`])]},[(0,t.renderSlot)(f.$slots,`node`,{node:e.node,isLeaf:_.value,isExpanded:h.value},()=>[(0,t.createCommentVNode)(` 默认节点渲染 `),(0,t.createElementVNode)(`div`,i,[e.node.avatar?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,a,[(0,t.createElementVNode)(`img`,{src:e.node.avatar,alt:e.node.label},null,8,o)])):(0,t.createCommentVNode)(`v-if`,!0),(0,t.createElementVNode)(`div`,s,[(0,t.createElementVNode)(`div`,c,(0,t.toDisplayString)(e.node.label),1),e.node.subtitle?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,l,(0,t.toDisplayString)(e.node.subtitle),1)):(0,t.createCommentVNode)(`v-if`,!0)])])],!0)],40,r),(0,t.createCommentVNode)(` 折叠/展开按钮 `),e.collapsible&&!_.value?((0,t.openBlock)(),(0,t.createElementBlock)(`button`,{key:0,type:`button`,class:`c-orgchart__toggle`,"aria-label":h.value?`折叠 ${e.node.label}`:`展开 ${e.node.label}`,"aria-expanded":h.value,onClick:(0,t.withModifiers)(y,[`stop`])},(0,t.toDisplayString)(h.value?`−`:`+`),9,u)):(0,t.createCommentVNode)(`v-if`,!0)],2),(0,t.createCommentVNode)(` 子节点容器 `),g.value&&h.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,d,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.node.children,n=>((0,t.openBlock)(),(0,t.createBlock)(m,{key:n.id,node:n,collapsible:e.collapsible,onNodeClick:p[0]||=e=>f.$emit(`node-click`,e),onNodeExpand:p[1]||=e=>f.$emit(`node-expand`,e),onNodeCollapse:p[2]||=e=>f.$emit(`node-collapse`,e)},null,8,[`node`,`collapsible`]))),128))])):(0,t.createCommentVNode)(`v-if`,!0)])}}});var p=e.t(f,[[`__scopeId`,`data-v-f16fa660`]]);const m={key:0,class:`c-orgchart__controls`},h={class:`c-orgchart__zoom-level`},g=(0,t.defineComponent)({name:`C_OrgChart`,__name:`index`,props:{data:{},direction:{default:`vertical`},lineStyle:{default:`rounded`},lineColor:{default:`#d1d5db`},lineWidth:{default:2},nodeSpacing:{default:24},levelSpacing:{default:48},zoomable:{type:Boolean,default:!0},pannable:{type:Boolean,default:!0},initialZoom:{default:1},minZoom:{default:.3},maxZoom:{default:2},collapsible:{type:Boolean,default:!0}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{expose:n,emit:r}){let i=e,a=r,o=(0,t.ref)(null),s=(0,t.ref)(i.initialZoom),c=(0,t.ref)(0),l=(0,t.ref)(0),u=(0,t.ref)(!1),d=(0,t.ref)(0),f=(0,t.ref)(0),g=(0,t.computed)(()=>Math.round(s.value*100)),_=(0,t.computed)(()=>({"--c-orgchart-line-color":i.lineColor,"--c-orgchart-line-width":`${i.lineWidth}px`,"--c-orgchart-node-spacing":`${i.nodeSpacing}px`,"--c-orgchart-level-spacing":`${i.levelSpacing}px`})),v=(0,t.computed)(()=>({transform:`translate(${c.value}px, ${l.value}px) scale(${s.value})`,transformOrigin:`center top`})),y=e=>{if(!i.zoomable)return;e.preventDefault();let t=e.deltaY>0?-.1:.1,n=Math.max(i.minZoom,Math.min(i.maxZoom,s.value+t));s.value=Math.round(n*100)/100},b=e=>{!i.pannable||e.button!==0||e.target.closest(`.c-orgchart__node, .c-orgchart__controls`)||(u.value=!0,d.value=e.clientX-c.value,f.value=e.clientY-l.value)},x=e=>{u.value&&(c.value=e.clientX-d.value,l.value=e.clientY-f.value)},S=()=>{u.value=!1},C=()=>{s.value=Math.min(i.maxZoom,s.value+.1)},w=()=>{s.value=Math.max(i.minZoom,s.value-.1)},T=()=>{s.value=Math.max(i.minZoom,Math.min(i.maxZoom,i.initialZoom)),c.value=0,l.value=0},E=e=>a(`node-click`,e),D=e=>a(`node-expand`,e),O=e=>a(`node-collapse`,e);return n({zoomIn:C,zoomOut:w,resetView:T,zoom:s}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`containerRef`,ref:o,class:(0,t.normalizeClass)([`c-orgchart`,[`c-orgchart--${i.direction}`,`c-orgchart--line-${i.lineStyle}`]]),style:(0,t.normalizeStyle)(_.value),onWheel:y,onMousedown:b,onMousemove:x,onMouseup:S,onMouseleave:S},[(0,t.createElementVNode)(`div`,{class:`c-orgchart__viewport`,style:(0,t.normalizeStyle)(v.value)},[(0,t.createVNode)(p,{node:i.data,collapsible:i.collapsible,onNodeClick:E,onNodeExpand:D,onNodeCollapse:O},(0,t.createSlots)({_:2},[e.$slots.node?{name:`node`,fn:(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,`node`,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)),void 0,!0)]),key:`0`}:void 0]),1032,[`node`,`collapsible`])],4),(0,t.createCommentVNode)(` 缩放控制 `),i.zoomable?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,m,[(0,t.createElementVNode)(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`放大`,onClick:C},` + `),(0,t.createElementVNode)(`span`,h,(0,t.toDisplayString)(g.value)+`%`,1),(0,t.createElementVNode)(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`缩小`,onClick:w},` − `),(0,t.createElementVNode)(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`重置`,onClick:T},` ⟳ `)])):(0,t.createCommentVNode)(`v-if`,!0)],38))}});var _=e.t(g,[[`__scopeId`,`data-v-3c5e8f18`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _}});
1
+ require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`);const n={class:`c-orgchart__node-wrapper`},r=[`role`,`tabindex`,`aria-label`,`onKeydown`],i={class:`c-orgchart__node-default`},a={key:0,class:`c-orgchart__avatar`},o=[`src`,`alt`],s={class:`c-orgchart__info`},c={class:`c-orgchart__label`},l={key:0,class:`c-orgchart__subtitle`},u=[`aria-label`,`aria-expanded`],d={key:0,class:`c-orgchart__children`},f=(0,t.defineComponent)({name:`OrgNode`,__name:`OrgNode`,props:{node:{},collapsible:{type:Boolean}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{emit:f}){let p=e,m=f,h=(0,t.ref)(!p.node.collapsed);(0,t.watch)(()=>p.node.collapsed,e=>{h.value=!e});let g=(0,t.computed)(()=>p.node.children&&p.node.children.length>0),_=(0,t.computed)(()=>!g.value),v=e=>{e instanceof KeyboardEvent&&e.target!==e.currentTarget||e.target.closest(`button, a, input, select, textarea`)||m(`node-click`,p.node)},y=()=>{h.value=!h.value,h.value?m(`node-expand`,p.node):m(`node-collapse`,p.node)};return(f,p)=>{let m=(0,t.resolveComponent)(`OrgNode`,!0);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,n,[(0,t.createCommentVNode)(` 节点卡片 `),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`c-orgchart__node`,[e.node.className,{"c-orgchart__node--leaf":_.value}]])},[(0,t.createElementVNode)(`div`,{class:`c-orgchart__node-select`,role:f.$slots.node?void 0:`button`,tabindex:f.$slots.node?void 0:0,"aria-label":f.$slots.node?void 0:e.node.label,onClick:(0,t.withModifiers)(v,[`stop`]),onKeydown:[(0,t.withKeys)((0,t.withModifiers)(v,[`stop`]),[`enter`]),(0,t.withKeys)((0,t.withModifiers)(v,[`stop`,`prevent`]),[`space`])]},[(0,t.renderSlot)(f.$slots,`node`,{node:e.node,isLeaf:_.value,isExpanded:h.value},()=>[(0,t.createCommentVNode)(` 默认节点渲染 `),(0,t.createElementVNode)(`div`,i,[e.node.avatar?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,a,[(0,t.createElementVNode)(`img`,{src:e.node.avatar,alt:e.node.label},null,8,o)])):(0,t.createCommentVNode)(`v-if`,!0),(0,t.createElementVNode)(`div`,s,[(0,t.createElementVNode)(`div`,c,(0,t.toDisplayString)(e.node.label),1),e.node.subtitle?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,l,(0,t.toDisplayString)(e.node.subtitle),1)):(0,t.createCommentVNode)(`v-if`,!0)])])],!0)],40,r),(0,t.createCommentVNode)(` 折叠/展开按钮 `),e.collapsible&&!_.value?((0,t.openBlock)(),(0,t.createElementBlock)(`button`,{key:0,type:`button`,class:`c-orgchart__toggle`,"aria-label":h.value?`折叠 ${e.node.label}`:`展开 ${e.node.label}`,"aria-expanded":h.value,onClick:(0,t.withModifiers)(y,[`stop`])},(0,t.toDisplayString)(h.value?`−`:`+`),9,u)):(0,t.createCommentVNode)(`v-if`,!0)],2),(0,t.createCommentVNode)(` 子节点容器 `),g.value&&h.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,d,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.node.children,n=>((0,t.openBlock)(),(0,t.createBlock)(m,{key:n.id,node:n,collapsible:e.collapsible,onNodeClick:p[0]||=e=>f.$emit(`node-click`,e),onNodeExpand:p[1]||=e=>f.$emit(`node-expand`,e),onNodeCollapse:p[2]||=e=>f.$emit(`node-collapse`,e)},(0,t.createSlots)({_:2},[f.$slots.node?{name:`node`,fn:(0,t.withCtx)(e=>[(0,t.renderSlot)(f.$slots,`node`,(0,t.mergeProps)({ref_for:!0},e),void 0,!0)]),key:`0`}:void 0]),1032,[`node`,`collapsible`]))),128))])):(0,t.createCommentVNode)(`v-if`,!0)])}}});var p=e.t(f,[[`__scopeId`,`data-v-023709c3`]]);const m={key:0,class:`c-orgchart__controls`},h={class:`c-orgchart__zoom-level`},g=(0,t.defineComponent)({name:`C_OrgChart`,__name:`index`,props:{data:{},direction:{default:`vertical`},lineStyle:{default:`rounded`},lineColor:{default:`#d1d5db`},lineWidth:{default:2},nodeSpacing:{default:24},levelSpacing:{default:48},zoomable:{type:Boolean,default:!0},pannable:{type:Boolean,default:!0},initialZoom:{default:1},fitOnInit:{type:Boolean,default:!1},minZoom:{default:.3},maxZoom:{default:2},collapsible:{type:Boolean,default:!0}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{expose:n,emit:r}){let i=e,a=r,o=(0,t.ref)(null),s=(0,t.ref)(null),c=(0,t.ref)(!1),l,u=!1,d=(0,t.ref)(i.initialZoom),f=(0,t.ref)(0),g=(0,t.ref)(0),_=(0,t.ref)(!1),v=(0,t.ref)(0),y=(0,t.ref)(0),b=(0,t.computed)(()=>Math.round(d.value*100)),x=(0,t.computed)(()=>({"--c-orgchart-line-color":i.lineColor,"--c-orgchart-line-width":`${i.lineWidth}px`,"--c-orgchart-node-spacing":`${i.nodeSpacing}px`,"--c-orgchart-level-spacing":`${i.levelSpacing}px`})),S=(0,t.computed)(()=>({transform:`translate(${f.value}px, ${g.value}px) scale(${d.value})`,transformOrigin:`center top`,transition:c.value?`none`:void 0})),C=e=>{if(!i.zoomable)return;e.preventDefault();let t=e.deltaY>0?-.1:.1,n=Math.max(i.minZoom,Math.min(i.maxZoom,d.value+t));d.value=Math.round(n*100)/100},w=e=>{!i.pannable||e.button!==0||e.target.closest(`.c-orgchart__node, .c-orgchart__controls`)||(_.value=!0,v.value=e.clientX-f.value,y.value=e.clientY-g.value)},T=e=>{_.value&&(f.value=e.clientX-v.value,g.value=e.clientY-y.value)},E=()=>{_.value=!1},D=()=>{d.value=Math.min(i.maxZoom,d.value+.1)},O=()=>{d.value=Math.max(i.minZoom,d.value-.1)},k=()=>{d.value=Math.max(i.minZoom,Math.min(i.maxZoom,i.initialZoom)),f.value=0,g.value=0},A=async()=>{await(0,t.nextTick)();let e=o.value,n=s.value?.firstElementChild;if(u||!e||!n||!e.clientWidth||(c.value=!0,d.value=Math.max(i.minZoom,Math.min(i.maxZoom,1,(e.clientWidth-48)/Math.max(n.scrollWidth,1),(e.clientHeight-64)/Math.max(n.scrollHeight,1))),f.value=0,g.value=0,await(0,t.nextTick)(),u))return;let r=e.getBoundingClientRect(),a=n.getBoundingClientRect();f.value=r.left+r.width/2-a.left-a.width/2,g.value=r.top+24-a.top,await(0,t.nextTick)(),c.value=!1};(0,t.onMounted)(()=>{i.fitOnInit&&A(),typeof ResizeObserver<`u`&&(l=new ResizeObserver(()=>{i.fitOnInit&&A()}),o.value&&l.observe(o.value))}),(0,t.watch)([()=>i.data,()=>i.direction],()=>{i.fitOnInit&&A()}),(0,t.onBeforeUnmount)(()=>{u=!0,l?.disconnect()});let j=e=>a(`node-click`,e),M=e=>a(`node-expand`,e),N=e=>a(`node-collapse`,e);return n({zoomIn:D,zoomOut:O,resetView:k,fitView:A,zoom:d}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`containerRef`,ref:o,class:(0,t.normalizeClass)([`c-orgchart`,[`c-orgchart--${i.direction}`,`c-orgchart--line-${i.lineStyle}`]]),style:(0,t.normalizeStyle)(x.value),onWheel:C,onMousedown:w,onMousemove:T,onMouseup:E,onMouseleave:E},[(0,t.createElementVNode)(`div`,{ref_key:`viewportRef`,ref:s,class:`c-orgchart__viewport`,style:(0,t.normalizeStyle)(S.value)},[(0,t.createVNode)(p,{node:i.data,collapsible:i.collapsible,onNodeClick:j,onNodeExpand:M,onNodeCollapse:N},(0,t.createSlots)({_:2},[e.$slots.node?{name:`node`,fn:(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,`node`,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)),void 0,!0)]),key:`0`}:void 0]),1032,[`node`,`collapsible`])],4),(0,t.createCommentVNode)(` 缩放控制 `),i.zoomable?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,m,[(0,t.createElementVNode)(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`放大`,onClick:D},` + `),(0,t.createElementVNode)(`span`,h,(0,t.toDisplayString)(b.value)+`%`,1),(0,t.createElementVNode)(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`缩小`,onClick:O},` − `),(0,t.createElementVNode)(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`重置`,onClick:k},` ⟳ `)])):(0,t.createCommentVNode)(`v-if`,!0)],38))}});var _=e.t(g,[[`__scopeId`,`data-v-22a61058`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _}});
@@ -1 +1 @@
1
- import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createSlots as s,createVNode as c,defineComponent as l,guardReactiveProps as u,normalizeClass as d,normalizeProps as f,normalizeStyle as p,openBlock as m,ref as h,renderList as g,renderSlot as _,resolveComponent as v,toDisplayString as y,watch as b,withCtx as x,withKeys as S,withModifiers as C}from"vue";const w={class:`c-orgchart__node-wrapper`},T=[`role`,`tabindex`,`aria-label`,`onKeydown`],E={class:`c-orgchart__node-default`},D={key:0,class:`c-orgchart__avatar`},O=[`src`,`alt`],k={class:`c-orgchart__info`},A={class:`c-orgchart__label`},j={key:0,class:`c-orgchart__subtitle`},M=[`aria-label`,`aria-expanded`],N={key:0,class:`c-orgchart__children`};var P=e(l({name:`OrgNode`,__name:`OrgNode`,props:{node:{},collapsible:{type:Boolean}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{emit:s}){let c=e,l=s,u=h(!c.node.collapsed);b(()=>c.node.collapsed,e=>{u.value=!e});let f=n(()=>c.node.children&&c.node.children.length>0),p=n(()=>!f.value),x=e=>{e instanceof KeyboardEvent&&e.target!==e.currentTarget||e.target.closest(`button, a, input, select, textarea`)||l(`node-click`,c.node)},P=()=>{u.value=!u.value,u.value?l(`node-expand`,c.node):l(`node-collapse`,c.node)};return(n,s)=>{let c=v(`OrgNode`,!0);return m(),a(`div`,w,[i(` 节点卡片 `),o(`div`,{class:d([`c-orgchart__node`,[e.node.className,{"c-orgchart__node--leaf":p.value}]])},[o(`div`,{class:`c-orgchart__node-select`,role:n.$slots.node?void 0:`button`,tabindex:n.$slots.node?void 0:0,"aria-label":n.$slots.node?void 0:e.node.label,onClick:C(x,[`stop`]),onKeydown:[S(C(x,[`stop`]),[`enter`]),S(C(x,[`stop`,`prevent`]),[`space`])]},[_(n.$slots,`node`,{node:e.node,isLeaf:p.value,isExpanded:u.value},()=>[i(` 默认节点渲染 `),o(`div`,E,[e.node.avatar?(m(),a(`div`,D,[o(`img`,{src:e.node.avatar,alt:e.node.label},null,8,O)])):i(`v-if`,!0),o(`div`,k,[o(`div`,A,y(e.node.label),1),e.node.subtitle?(m(),a(`div`,j,y(e.node.subtitle),1)):i(`v-if`,!0)])])],!0)],40,T),i(` 折叠/展开按钮 `),e.collapsible&&!p.value?(m(),a(`button`,{key:0,type:`button`,class:`c-orgchart__toggle`,"aria-label":u.value?`折叠 ${e.node.label}`:`展开 ${e.node.label}`,"aria-expanded":u.value,onClick:C(P,[`stop`])},y(u.value?`−`:`+`),9,M)):i(`v-if`,!0)],2),i(` 子节点容器 `),f.value&&u.value?(m(),a(`div`,N,[(m(!0),a(t,null,g(e.node.children,t=>(m(),r(c,{key:t.id,node:t,collapsible:e.collapsible,onNodeClick:s[0]||=e=>n.$emit(`node-click`,e),onNodeExpand:s[1]||=e=>n.$emit(`node-expand`,e),onNodeCollapse:s[2]||=e=>n.$emit(`node-collapse`,e)},null,8,[`node`,`collapsible`]))),128))])):i(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-f16fa660`]]);const F={key:0,class:`c-orgchart__controls`},I={class:`c-orgchart__zoom-level`};var L=e(l({name:`C_OrgChart`,__name:`index`,props:{data:{},direction:{default:`vertical`},lineStyle:{default:`rounded`},lineColor:{default:`#d1d5db`},lineWidth:{default:2},nodeSpacing:{default:24},levelSpacing:{default:48},zoomable:{type:Boolean,default:!0},pannable:{type:Boolean,default:!0},initialZoom:{default:1},minZoom:{default:.3},maxZoom:{default:2},collapsible:{type:Boolean,default:!0}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{expose:t,emit:r}){let l=e,g=r,v=h(null),b=h(l.initialZoom),S=h(0),C=h(0),w=h(!1),T=h(0),E=h(0),D=n(()=>Math.round(b.value*100)),O=n(()=>({"--c-orgchart-line-color":l.lineColor,"--c-orgchart-line-width":`${l.lineWidth}px`,"--c-orgchart-node-spacing":`${l.nodeSpacing}px`,"--c-orgchart-level-spacing":`${l.levelSpacing}px`})),k=n(()=>({transform:`translate(${S.value}px, ${C.value}px) scale(${b.value})`,transformOrigin:`center top`})),A=e=>{if(!l.zoomable)return;e.preventDefault();let t=e.deltaY>0?-.1:.1,n=Math.max(l.minZoom,Math.min(l.maxZoom,b.value+t));b.value=Math.round(n*100)/100},j=e=>{!l.pannable||e.button!==0||e.target.closest(`.c-orgchart__node, .c-orgchart__controls`)||(w.value=!0,T.value=e.clientX-S.value,E.value=e.clientY-C.value)},M=e=>{w.value&&(S.value=e.clientX-T.value,C.value=e.clientY-E.value)},N=()=>{w.value=!1},L=()=>{b.value=Math.min(l.maxZoom,b.value+.1)},R=()=>{b.value=Math.max(l.minZoom,b.value-.1)},z=()=>{b.value=Math.max(l.minZoom,Math.min(l.maxZoom,l.initialZoom)),S.value=0,C.value=0},B=e=>g(`node-click`,e),V=e=>g(`node-expand`,e),H=e=>g(`node-collapse`,e);return t({zoomIn:L,zoomOut:R,resetView:z,zoom:b}),(e,t)=>(m(),a(`div`,{ref_key:`containerRef`,ref:v,class:d([`c-orgchart`,[`c-orgchart--${l.direction}`,`c-orgchart--line-${l.lineStyle}`]]),style:p(O.value),onWheel:A,onMousedown:j,onMousemove:M,onMouseup:N,onMouseleave:N},[o(`div`,{class:`c-orgchart__viewport`,style:p(k.value)},[c(P,{node:l.data,collapsible:l.collapsible,onNodeClick:B,onNodeExpand:V,onNodeCollapse:H},s({_:2},[e.$slots.node?{name:`node`,fn:x(t=>[_(e.$slots,`node`,f(u(t)),void 0,!0)]),key:`0`}:void 0]),1032,[`node`,`collapsible`])],4),i(` 缩放控制 `),l.zoomable?(m(),a(`div`,F,[o(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`放大`,onClick:L},` + `),o(`span`,I,y(D.value)+`%`,1),o(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`缩小`,onClick:R},` − `),o(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`重置`,onClick:z},` ⟳ `)])):i(`v-if`,!0)],38))}}),[[`__scopeId`,`data-v-3c5e8f18`]]);export{L as t};
1
+ import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createSlots as s,createVNode as c,defineComponent as l,guardReactiveProps as u,mergeProps as d,nextTick as f,normalizeClass as p,normalizeProps as m,normalizeStyle as h,onBeforeUnmount as g,onMounted as _,openBlock as v,ref as y,renderList as b,renderSlot as x,resolveComponent as S,toDisplayString as C,watch as w,withCtx as T,withKeys as E,withModifiers as D}from"vue";const O={class:`c-orgchart__node-wrapper`},k=[`role`,`tabindex`,`aria-label`,`onKeydown`],A={class:`c-orgchart__node-default`},j={key:0,class:`c-orgchart__avatar`},M=[`src`,`alt`],N={class:`c-orgchart__info`},P={class:`c-orgchart__label`},F={key:0,class:`c-orgchart__subtitle`},I=[`aria-label`,`aria-expanded`],L={key:0,class:`c-orgchart__children`};var R=e(l({name:`OrgNode`,__name:`OrgNode`,props:{node:{},collapsible:{type:Boolean}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{emit:c}){let l=e,u=c,f=y(!l.node.collapsed);w(()=>l.node.collapsed,e=>{f.value=!e});let m=n(()=>l.node.children&&l.node.children.length>0),h=n(()=>!m.value),g=e=>{e instanceof KeyboardEvent&&e.target!==e.currentTarget||e.target.closest(`button, a, input, select, textarea`)||u(`node-click`,l.node)},_=()=>{f.value=!f.value,f.value?u(`node-expand`,l.node):u(`node-collapse`,l.node)};return(n,c)=>{let l=S(`OrgNode`,!0);return v(),a(`div`,O,[i(` 节点卡片 `),o(`div`,{class:p([`c-orgchart__node`,[e.node.className,{"c-orgchart__node--leaf":h.value}]])},[o(`div`,{class:`c-orgchart__node-select`,role:n.$slots.node?void 0:`button`,tabindex:n.$slots.node?void 0:0,"aria-label":n.$slots.node?void 0:e.node.label,onClick:D(g,[`stop`]),onKeydown:[E(D(g,[`stop`]),[`enter`]),E(D(g,[`stop`,`prevent`]),[`space`])]},[x(n.$slots,`node`,{node:e.node,isLeaf:h.value,isExpanded:f.value},()=>[i(` 默认节点渲染 `),o(`div`,A,[e.node.avatar?(v(),a(`div`,j,[o(`img`,{src:e.node.avatar,alt:e.node.label},null,8,M)])):i(`v-if`,!0),o(`div`,N,[o(`div`,P,C(e.node.label),1),e.node.subtitle?(v(),a(`div`,F,C(e.node.subtitle),1)):i(`v-if`,!0)])])],!0)],40,k),i(` 折叠/展开按钮 `),e.collapsible&&!h.value?(v(),a(`button`,{key:0,type:`button`,class:`c-orgchart__toggle`,"aria-label":f.value?`折叠 ${e.node.label}`:`展开 ${e.node.label}`,"aria-expanded":f.value,onClick:D(_,[`stop`])},C(f.value?`−`:`+`),9,I)):i(`v-if`,!0)],2),i(` 子节点容器 `),m.value&&f.value?(v(),a(`div`,L,[(v(!0),a(t,null,b(e.node.children,t=>(v(),r(l,{key:t.id,node:t,collapsible:e.collapsible,onNodeClick:c[0]||=e=>n.$emit(`node-click`,e),onNodeExpand:c[1]||=e=>n.$emit(`node-expand`,e),onNodeCollapse:c[2]||=e=>n.$emit(`node-collapse`,e)},s({_:2},[n.$slots.node?{name:`node`,fn:T(e=>[x(n.$slots,`node`,d({ref_for:!0},e),void 0,!0)]),key:`0`}:void 0]),1032,[`node`,`collapsible`]))),128))])):i(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-023709c3`]]);const z={key:0,class:`c-orgchart__controls`},B={class:`c-orgchart__zoom-level`};var V=e(l({name:`C_OrgChart`,__name:`index`,props:{data:{},direction:{default:`vertical`},lineStyle:{default:`rounded`},lineColor:{default:`#d1d5db`},lineWidth:{default:2},nodeSpacing:{default:24},levelSpacing:{default:48},zoomable:{type:Boolean,default:!0},pannable:{type:Boolean,default:!0},initialZoom:{default:1},fitOnInit:{type:Boolean,default:!1},minZoom:{default:.3},maxZoom:{default:2},collapsible:{type:Boolean,default:!0}},emits:[`node-click`,`node-expand`,`node-collapse`],setup(e,{expose:t,emit:r}){let l=e,d=r,b=y(null),S=y(null),E=y(!1),D,O=!1,k=y(l.initialZoom),A=y(0),j=y(0),M=y(!1),N=y(0),P=y(0),F=n(()=>Math.round(k.value*100)),I=n(()=>({"--c-orgchart-line-color":l.lineColor,"--c-orgchart-line-width":`${l.lineWidth}px`,"--c-orgchart-node-spacing":`${l.nodeSpacing}px`,"--c-orgchart-level-spacing":`${l.levelSpacing}px`})),L=n(()=>({transform:`translate(${A.value}px, ${j.value}px) scale(${k.value})`,transformOrigin:`center top`,transition:E.value?`none`:void 0})),V=e=>{if(!l.zoomable)return;e.preventDefault();let t=e.deltaY>0?-.1:.1,n=Math.max(l.minZoom,Math.min(l.maxZoom,k.value+t));k.value=Math.round(n*100)/100},H=e=>{!l.pannable||e.button!==0||e.target.closest(`.c-orgchart__node, .c-orgchart__controls`)||(M.value=!0,N.value=e.clientX-A.value,P.value=e.clientY-j.value)},U=e=>{M.value&&(A.value=e.clientX-N.value,j.value=e.clientY-P.value)},W=()=>{M.value=!1},G=()=>{k.value=Math.min(l.maxZoom,k.value+.1)},K=()=>{k.value=Math.max(l.minZoom,k.value-.1)},q=()=>{k.value=Math.max(l.minZoom,Math.min(l.maxZoom,l.initialZoom)),A.value=0,j.value=0},J=async()=>{await f();let e=b.value,t=S.value?.firstElementChild;if(O||!e||!t||!e.clientWidth||(E.value=!0,k.value=Math.max(l.minZoom,Math.min(l.maxZoom,1,(e.clientWidth-48)/Math.max(t.scrollWidth,1),(e.clientHeight-64)/Math.max(t.scrollHeight,1))),A.value=0,j.value=0,await f(),O))return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();A.value=n.left+n.width/2-r.left-r.width/2,j.value=n.top+24-r.top,await f(),E.value=!1};_(()=>{l.fitOnInit&&J(),typeof ResizeObserver<`u`&&(D=new ResizeObserver(()=>{l.fitOnInit&&J()}),b.value&&D.observe(b.value))}),w([()=>l.data,()=>l.direction],()=>{l.fitOnInit&&J()}),g(()=>{O=!0,D?.disconnect()});let Y=e=>d(`node-click`,e),X=e=>d(`node-expand`,e),Z=e=>d(`node-collapse`,e);return t({zoomIn:G,zoomOut:K,resetView:q,fitView:J,zoom:k}),(e,t)=>(v(),a(`div`,{ref_key:`containerRef`,ref:b,class:p([`c-orgchart`,[`c-orgchart--${l.direction}`,`c-orgchart--line-${l.lineStyle}`]]),style:h(I.value),onWheel:V,onMousedown:H,onMousemove:U,onMouseup:W,onMouseleave:W},[o(`div`,{ref_key:`viewportRef`,ref:S,class:`c-orgchart__viewport`,style:h(L.value)},[c(R,{node:l.data,collapsible:l.collapsible,onNodeClick:Y,onNodeExpand:X,onNodeCollapse:Z},s({_:2},[e.$slots.node?{name:`node`,fn:T(t=>[x(e.$slots,`node`,m(u(t)),void 0,!0)]),key:`0`}:void 0]),1032,[`node`,`collapsible`])],4),i(` 缩放控制 `),l.zoomable?(v(),a(`div`,z,[o(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`放大`,onClick:G},` + `),o(`span`,B,C(F.value)+`%`,1),o(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`缩小`,onClick:K},` − `),o(`button`,{type:`button`,class:`c-orgchart__control-btn`,title:`重置`,onClick:q},` ⟳ `)])):i(`v-if`,!0)],38))}}),[[`__scopeId`,`data-v-22a61058`]]);export{V as t};
@@ -1 +1 @@
1
- const e=require(`./chunk.cjs`),t=require(`./export-helper.cjs`),n=require(`./html.cjs`);let r=require(`vue`),i=require(`qrcode`);i=e.t(i);function a(e,t,n){return new Promise((r,i)=>{let a=e.getContext(`2d`);if(!a)return i(Error(`Canvas context 不可用`));let o=new Image;o.crossOrigin=`anonymous`,o.onload=()=>{let i=Math.min(.3,Math.max(.05,t.size??.2)),s=Math.floor(n*i),c=Math.max(0,t.padding??4),l=Math.min(s/2,Math.max(0,t.borderRadius??4)),u=(e.width-s)/2,d=(e.height-s)/2;a.save();let f=u-c,p=d-c,m=s+c*2,h=l+c;a.beginPath(),a.moveTo(f+h,p),a.arcTo(f+m,p,f+m,p+m,h),a.arcTo(f+m,p+m,f,p+m,h),a.arcTo(f,p+m,f,p,h),a.arcTo(f,p,f+m,p,h),a.closePath(),a.fillStyle=t.bgColor??`#ffffff`,a.fill(),a.beginPath(),a.moveTo(u+l,d),a.arcTo(u+s,d,u+s,d+s,l),a.arcTo(u+s,d+s,u,d+s,l),a.arcTo(u,d+s,u,d,l),a.arcTo(u,d,u+s,d,l),a.closePath(),a.clip(),a.drawImage(o,u,d,s,s),a.restore(),r()},o.onerror=()=>i(Error(`Logo 加载失败: ${t.src}`)),o.src=t.src})}function o(e,t){let n=(0,r.ref)(``),o=(0,r.ref)(!1),s=(0,r.ref)(null),c=(0,r.ref)(!1),l=0,u=(0,r.computed)(()=>{if(t.logo.value){let e=t.errorCorrectionLevel.value;return e===`L`||e===`M`?`Q`:e}return t.errorCorrectionLevel.value}),d=(0,r.computed)(()=>({width:t.size.value,margin:t.margin.value,errorCorrectionLevel:u.value,color:{dark:t.color.value,light:t.bgColor.value}}));async function f(){let e=document.createElement(`canvas`),{value:n}=t.value,r=d.value,o=t.logo.value,s=t.size.value;return await i.default.toCanvas(e,n,r),o&&await a(e,o,s),e}async function p(){if(t.logo.value){let e=await f(),t=e.toDataURL(`image/png`);return`<svg xmlns="http://www.w3.org/2000/svg" width="${e.width}" height="${e.height}" viewBox="0 0 ${e.width} ${e.height}"><image href="${t}" width="100%" height="100%"/></svg>`}return i.default.toString(t.value.value,{...d.value,type:`svg`})}function m(){let t=e.value;t&&(t.getContext(`2d`)?.clearRect(0,0,t.width,t.height),t.width=0,t.height=0)}function h(){n.value=``,o.value=!1,m()}async function g(r){if(t.mode.value===`canvas`){let t=await f();if(r!==l)return;let i=e.value;if(!i)return;i.width=t.width,i.height=t.height;let a=i.getContext(`2d`);if(!a)throw Error(`Canvas context 不可用`);a.drawImage(t,0,0),n.value=``,o.value=!1;return}let i=await p();r===l&&(n.value=i,o.value=!!t.logo.value,m())}async function _(){let e=++l;if(!t.value.value){h(),s.value=null,c.value=!1;return}c.value=!0,s.value=null;try{await g(e)}catch(t){if(e!==l)return;s.value=t instanceof Error?t:Error(String(t)),h()}finally{e===l&&(c.value=!1)}}async function v(e=`png`,t=.92){if(e===`svg`){let e=await p();return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}let n=await f(),r=e===`jpeg`?`image/jpeg`:`image/png`;return n.toDataURL(r,t)}async function y(e=`qrcode`,t=`png`){let n=await v(t),r=document.createElement(`a`);r.download=`${e}.${t}`,r.href=n,document.body.appendChild(r),r.click(),r.remove()}return(0,r.watch)([t.value,t.size,t.color,t.bgColor,t.errorCorrectionLevel,t.margin,t.mode,t.logo],()=>_(),{deep:!0}),(0,r.onBeforeUnmount)(()=>{l++}),{svgHtml:n,svgTrusted:o,error:s,loading:c,render:_,toDataURL:v,download:y}}const s={class:`c-qrcode`},c=[`innerHTML`],l={key:0,class:`qrcode-label`},u=(0,r.defineComponent)({name:`C_QRCode`,__name:`index`,props:{value:{},size:{default:200},color:{default:`#000000`},bgColor:{default:`#FFFFFF`},errorCorrectionLevel:{default:`M`},margin:{default:2},mode:{default:`canvas`},logo:{default:void 0},showBorder:{type:Boolean,default:!0},label:{default:``},showLabel:{type:Boolean,default:!1}},emits:[`error`],setup(e,{expose:t,emit:i}){let a=e,u=i,d=(0,r.ref)(null),{svgHtml:f,svgTrusted:p,error:m,render:h,toDataURL:g,download:_}=o(d,{value:(0,r.toRef)(a,`value`),size:(0,r.toRef)(a,`size`),color:(0,r.toRef)(a,`color`),bgColor:(0,r.toRef)(a,`bgColor`),errorCorrectionLevel:(0,r.toRef)(a,`errorCorrectionLevel`),margin:(0,r.toRef)(a,`margin`),mode:(0,r.toRef)(a,`mode`),logo:(0,r.toRef)(a,`logo`)}),v=(0,r.computed)(()=>p.value?f.value:n.n(f.value));return(0,r.watch)(m,e=>{e&&u(`error`,e)}),(0,r.onMounted)(()=>h()),t({toDataURL:(e,t)=>g(e,t),download:(e,t)=>_(e,t),refresh:()=>h()}),(t,n)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,s,[(0,r.createElementVNode)(`div`,{class:(0,r.normalizeClass)([`qrcode-wrapper`,{"with-border":e.showBorder}])},[(0,r.withDirectives)((0,r.createElementVNode)(`canvas`,{ref_key:`canvasRef`,ref:d},null,512),[[r.vShow,e.mode===`canvas`]]),e.mode===`svg`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:0,class:`qrcode-svg`,style:(0,r.normalizeStyle)({width:`${e.size}px`,height:`${e.size}px`}),innerHTML:v.value},null,12,c)):(0,r.createCommentVNode)(`v-if`,!0)],2),e.showLabel&&e.label?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,l,(0,r.toDisplayString)(e.label),1)):(0,r.createCommentVNode)(`v-if`,!0)]))}});var d=t.t(u,[[`__scopeId`,`data-v-5539bdf6`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return d}});
1
+ const e=require(`./chunk.cjs`),t=require(`./export-helper.cjs`),n=require(`./html.cjs`);let r=require(`vue`),i=require(`qrcode`);i=e.t(i);function a(){return new DOMException(`二维码任务已取消`,`AbortError`)}function o(e,t,n,r,i){let a=Math.min(.3,Math.max(.05,r.size??.2)),o=Math.floor(i*a),s=Math.max(0,r.padding??4),c=Math.min(o/2,Math.max(0,r.borderRadius??4)),l=(e.width-o)/2,u=(e.height-o)/2,d=l-s,f=u-s,p=o+s*2,m=c+s;t.save();try{t.beginPath(),t.moveTo(d+m,f),t.arcTo(d+p,f,d+p,f+p,m),t.arcTo(d+p,f+p,d,f+p,m),t.arcTo(d,f+p,d,f,m),t.arcTo(d,f,d+p,f,m),t.closePath(),t.fillStyle=r.bgColor??`#ffffff`,t.fill(),t.beginPath(),t.moveTo(l+c,u),t.arcTo(l+o,u,l+o,u+o,c),t.arcTo(l+o,u+o,l,u+o,c),t.arcTo(l,u+o,l,u,c),t.arcTo(l,u,l+o,u,c),t.closePath(),t.clip(),t.drawImage(n,l,u,o,o)}finally{t.restore()}}function s(e,t,n,r){return new Promise((i,s)=>{if(r.aborted)return s(a());let c=e.getContext(`2d`);if(!c)return s(Error(`Canvas context 不可用`));let l=new Image;l.crossOrigin=`anonymous`;let u=!1,d=()=>{l.onload=null,l.onerror=null,r.removeEventListener(`abort`,p),l.src=``},f=e=>{u||(u=!0,d(),e===void 0?i():s(e))},p=()=>f(a());if(l.onload=()=>{if(!u){if(r.aborted)return p();try{o(e,c,l,t,n),f()}catch(e){f(e)}}},l.onerror=()=>f(Error(`Logo 加载失败: ${t.src}`)),r.addEventListener(`abort`,p,{once:!0}),r.aborted)p();else try{l.src=t.src}catch(e){f(e)}})}function c(e,t){let n=(0,r.ref)(``),o=(0,r.ref)(!1),c=(0,r.ref)(null),l=(0,r.ref)(!1),u=0,d=!1,f,p=new Set;function m(){if(d)throw a();let e=new AbortController;return p.add(e),e}function h(e){if(d||e.aborted)throw a()}let g=(0,r.computed)(()=>{if(t.logo.value){let e=t.errorCorrectionLevel.value;return e===`L`||e===`M`?`Q`:e}return t.errorCorrectionLevel.value}),_=(0,r.computed)(()=>({width:t.size.value,margin:t.margin.value,errorCorrectionLevel:g.value,color:{dark:t.color.value,light:t.bgColor.value}}));function v(){let e=t.logo.value;return{value:t.value.value,settings:_.value,size:t.size.value,mode:t.mode.value,logo:e?{...e}:void 0}}async function y(e,t){h(t);let n=document.createElement(`canvas`);return await i.default.toCanvas(n,e.value,e.settings),h(t),e.logo&&await s(n,e.logo,e.size,t),h(t),n}async function b(e,t){if(e.logo){let n=await y(e,t),r=n.toDataURL(`image/png`);return`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" viewBox="0 0 ${n.width} ${n.height}"><image href="${r}" width="100%" height="100%"/></svg>`}let n=await i.default.toString(e.value,{...e.settings,type:`svg`});return h(t),n}function x(){let t=e.value;t&&(t.getContext(`2d`)?.clearRect(0,0,t.width,t.height),t.width=0,t.height=0)}function S(){n.value=``,o.value=!1,x()}async function C(t,r,i){if(r.mode===`canvas`){let a=await y(r,i);if(t!==u)return;let s=e.value;if(!s)return;s.width=a.width,s.height=a.height;let c=s.getContext(`2d`);if(!c)throw Error(`Canvas context 不可用`);c.drawImage(a,0,0),n.value=``,o.value=!1;return}let a=await b(r,i);t===u&&(n.value=a,o.value=!!r.logo,x())}async function w(){if(d)return;let e=++u;if(f?.abort(),f=void 0,!t.value.value){S(),c.value=null,l.value=!1;return}let n=m();f=n;let r=v();l.value=!0,c.value=null;try{await C(e,r,n.signal)}catch(t){if(e!==u)return;c.value=t instanceof Error?t:Error(String(t)),S()}finally{p.delete(n),f===n&&(f=void 0),e===u&&(l.value=!1)}}async function T(e=`png`,t=.92){let n=m(),r=v();try{if(e===`svg`){let e=await b(r,n.signal);return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}let i=await y(r,n.signal),a=e===`jpeg`?`image/jpeg`:`image/png`;return i.toDataURL(a,t)}finally{p.delete(n)}}async function E(e=`qrcode`,t=`png`){let n=await T(t);if(d)throw a();let r=document.createElement(`a`);r.download=`${e}.${t}`,r.href=n,document.body.appendChild(r),r.click(),r.remove()}return(0,r.watch)([t.value,t.size,t.color,t.bgColor,t.errorCorrectionLevel,t.margin,t.mode,t.logo],()=>w(),{deep:!0}),(0,r.onBeforeUnmount)(()=>{d=!0,u++,p.forEach(e=>e.abort()),p.clear(),f=void 0,l.value=!1}),{svgHtml:n,svgTrusted:o,error:c,loading:l,render:w,toDataURL:T,download:E}}const l={class:`c-qrcode`},u=[`innerHTML`],d={key:0,class:`qrcode-label`},f=(0,r.defineComponent)({name:`C_QRCode`,__name:`index`,props:{value:{},size:{default:200},color:{default:`#000000`},bgColor:{default:`#FFFFFF`},errorCorrectionLevel:{default:`M`},margin:{default:2},mode:{default:`canvas`},logo:{default:void 0},showBorder:{type:Boolean,default:!0},label:{default:``},showLabel:{type:Boolean,default:!1}},emits:[`error`],setup(e,{expose:t,emit:i}){let a=e,o=i,s=(0,r.ref)(null),{svgHtml:f,svgTrusted:p,error:m,render:h,toDataURL:g,download:_}=c(s,{value:(0,r.toRef)(a,`value`),size:(0,r.toRef)(a,`size`),color:(0,r.toRef)(a,`color`),bgColor:(0,r.toRef)(a,`bgColor`),errorCorrectionLevel:(0,r.toRef)(a,`errorCorrectionLevel`),margin:(0,r.toRef)(a,`margin`),mode:(0,r.toRef)(a,`mode`),logo:(0,r.toRef)(a,`logo`)}),v=(0,r.computed)(()=>p.value?f.value:n.n(f.value));return(0,r.watch)(m,e=>{e&&o(`error`,e)}),(0,r.onMounted)(()=>h()),t({toDataURL:(e,t)=>g(e,t),download:(e,t)=>_(e,t),refresh:()=>h()}),(t,n)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,l,[(0,r.createElementVNode)(`div`,{class:(0,r.normalizeClass)([`qrcode-wrapper`,{"with-border":e.showBorder}])},[(0,r.withDirectives)((0,r.createElementVNode)(`canvas`,{ref_key:`canvasRef`,ref:s},null,512),[[r.vShow,e.mode===`canvas`]]),e.mode===`svg`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:0,class:`qrcode-svg`,style:(0,r.normalizeStyle)({width:`${e.size}px`,height:`${e.size}px`}),innerHTML:v.value},null,12,u)):(0,r.createCommentVNode)(`v-if`,!0)],2),e.showLabel&&e.label?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,d,(0,r.toDisplayString)(e.label),1)):(0,r.createCommentVNode)(`v-if`,!0)]))}});var p=t.t(f,[[`__scopeId`,`data-v-5539bdf6`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return p}});
package/dist/C_QRCode2.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./export-helper.js";import{n as t}from"./html.js";import{computed as n,createCommentVNode as r,createElementBlock as i,createElementVNode as a,defineComponent as o,normalizeClass as s,normalizeStyle as c,onBeforeUnmount as l,onMounted as u,openBlock as d,ref as f,toDisplayString as p,toRef as m,vShow as h,watch as g,withDirectives as _}from"vue";import v from"qrcode";function y(e,t,n){return new Promise((r,i)=>{let a=e.getContext(`2d`);if(!a)return i(Error(`Canvas context 不可用`));let o=new Image;o.crossOrigin=`anonymous`,o.onload=()=>{let i=Math.min(.3,Math.max(.05,t.size??.2)),s=Math.floor(n*i),c=Math.max(0,t.padding??4),l=Math.min(s/2,Math.max(0,t.borderRadius??4)),u=(e.width-s)/2,d=(e.height-s)/2;a.save();let f=u-c,p=d-c,m=s+c*2,h=l+c;a.beginPath(),a.moveTo(f+h,p),a.arcTo(f+m,p,f+m,p+m,h),a.arcTo(f+m,p+m,f,p+m,h),a.arcTo(f,p+m,f,p,h),a.arcTo(f,p,f+m,p,h),a.closePath(),a.fillStyle=t.bgColor??`#ffffff`,a.fill(),a.beginPath(),a.moveTo(u+l,d),a.arcTo(u+s,d,u+s,d+s,l),a.arcTo(u+s,d+s,u,d+s,l),a.arcTo(u,d+s,u,d,l),a.arcTo(u,d,u+s,d,l),a.closePath(),a.clip(),a.drawImage(o,u,d,s,s),a.restore(),r()},o.onerror=()=>i(Error(`Logo 加载失败: ${t.src}`)),o.src=t.src})}function b(e,t){let r=f(``),i=f(!1),a=f(null),o=f(!1),s=0,c=n(()=>{if(t.logo.value){let e=t.errorCorrectionLevel.value;return e===`L`||e===`M`?`Q`:e}return t.errorCorrectionLevel.value}),u=n(()=>({width:t.size.value,margin:t.margin.value,errorCorrectionLevel:c.value,color:{dark:t.color.value,light:t.bgColor.value}}));async function d(){let e=document.createElement(`canvas`),{value:n}=t.value,r=u.value,i=t.logo.value,a=t.size.value;return await v.toCanvas(e,n,r),i&&await y(e,i,a),e}async function p(){if(t.logo.value){let e=await d(),t=e.toDataURL(`image/png`);return`<svg xmlns="http://www.w3.org/2000/svg" width="${e.width}" height="${e.height}" viewBox="0 0 ${e.width} ${e.height}"><image href="${t}" width="100%" height="100%"/></svg>`}return v.toString(t.value.value,{...u.value,type:`svg`})}function m(){let t=e.value;t&&(t.getContext(`2d`)?.clearRect(0,0,t.width,t.height),t.width=0,t.height=0)}function h(){r.value=``,i.value=!1,m()}async function _(n){if(t.mode.value===`canvas`){let t=await d();if(n!==s)return;let a=e.value;if(!a)return;a.width=t.width,a.height=t.height;let o=a.getContext(`2d`);if(!o)throw Error(`Canvas context 不可用`);o.drawImage(t,0,0),r.value=``,i.value=!1;return}let a=await p();n===s&&(r.value=a,i.value=!!t.logo.value,m())}async function b(){let e=++s;if(!t.value.value){h(),a.value=null,o.value=!1;return}o.value=!0,a.value=null;try{await _(e)}catch(t){if(e!==s)return;a.value=t instanceof Error?t:Error(String(t)),h()}finally{e===s&&(o.value=!1)}}async function x(e=`png`,t=.92){if(e===`svg`){let e=await p();return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}let n=await d(),r=e===`jpeg`?`image/jpeg`:`image/png`;return n.toDataURL(r,t)}async function S(e=`qrcode`,t=`png`){let n=await x(t),r=document.createElement(`a`);r.download=`${e}.${t}`,r.href=n,document.body.appendChild(r),r.click(),r.remove()}return g([t.value,t.size,t.color,t.bgColor,t.errorCorrectionLevel,t.margin,t.mode,t.logo],()=>b(),{deep:!0}),l(()=>{s++}),{svgHtml:r,svgTrusted:i,error:a,loading:o,render:b,toDataURL:x,download:S}}const x={class:`c-qrcode`},S=[`innerHTML`],C={key:0,class:`qrcode-label`};var w=e(o({name:`C_QRCode`,__name:`index`,props:{value:{},size:{default:200},color:{default:`#000000`},bgColor:{default:`#FFFFFF`},errorCorrectionLevel:{default:`M`},margin:{default:2},mode:{default:`canvas`},logo:{default:void 0},showBorder:{type:Boolean,default:!0},label:{default:``},showLabel:{type:Boolean,default:!1}},emits:[`error`],setup(e,{expose:o,emit:l}){let v=e,y=l,w=f(null),{svgHtml:T,svgTrusted:E,error:D,render:O,toDataURL:k,download:A}=b(w,{value:m(v,`value`),size:m(v,`size`),color:m(v,`color`),bgColor:m(v,`bgColor`),errorCorrectionLevel:m(v,`errorCorrectionLevel`),margin:m(v,`margin`),mode:m(v,`mode`),logo:m(v,`logo`)}),j=n(()=>E.value?T.value:t(T.value));return g(D,e=>{e&&y(`error`,e)}),u(()=>O()),o({toDataURL:(e,t)=>k(e,t),download:(e,t)=>A(e,t),refresh:()=>O()}),(t,n)=>(d(),i(`div`,x,[a(`div`,{class:s([`qrcode-wrapper`,{"with-border":e.showBorder}])},[_(a(`canvas`,{ref_key:`canvasRef`,ref:w},null,512),[[h,e.mode===`canvas`]]),e.mode===`svg`?(d(),i(`div`,{key:0,class:`qrcode-svg`,style:c({width:`${e.size}px`,height:`${e.size}px`}),innerHTML:j.value},null,12,S)):r(`v-if`,!0)],2),e.showLabel&&e.label?(d(),i(`div`,C,p(e.label),1)):r(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-5539bdf6`]]);export{b as n,w as t};
1
+ import{t as e}from"./export-helper.js";import{n as t}from"./html.js";import{computed as n,createCommentVNode as r,createElementBlock as i,createElementVNode as a,defineComponent as o,normalizeClass as s,normalizeStyle as c,onBeforeUnmount as l,onMounted as u,openBlock as d,ref as f,toDisplayString as p,toRef as m,vShow as h,watch as g,withDirectives as _}from"vue";import v from"qrcode";function y(){return new DOMException(`二维码任务已取消`,`AbortError`)}function b(e,t,n,r,i){let a=Math.min(.3,Math.max(.05,r.size??.2)),o=Math.floor(i*a),s=Math.max(0,r.padding??4),c=Math.min(o/2,Math.max(0,r.borderRadius??4)),l=(e.width-o)/2,u=(e.height-o)/2,d=l-s,f=u-s,p=o+s*2,m=c+s;t.save();try{t.beginPath(),t.moveTo(d+m,f),t.arcTo(d+p,f,d+p,f+p,m),t.arcTo(d+p,f+p,d,f+p,m),t.arcTo(d,f+p,d,f,m),t.arcTo(d,f,d+p,f,m),t.closePath(),t.fillStyle=r.bgColor??`#ffffff`,t.fill(),t.beginPath(),t.moveTo(l+c,u),t.arcTo(l+o,u,l+o,u+o,c),t.arcTo(l+o,u+o,l,u+o,c),t.arcTo(l,u+o,l,u,c),t.arcTo(l,u,l+o,u,c),t.closePath(),t.clip(),t.drawImage(n,l,u,o,o)}finally{t.restore()}}function x(e,t,n,r){return new Promise((i,a)=>{if(r.aborted)return a(y());let o=e.getContext(`2d`);if(!o)return a(Error(`Canvas context 不可用`));let s=new Image;s.crossOrigin=`anonymous`;let c=!1,l=()=>{s.onload=null,s.onerror=null,r.removeEventListener(`abort`,d),s.src=``},u=e=>{c||(c=!0,l(),e===void 0?i():a(e))},d=()=>u(y());if(s.onload=()=>{if(!c){if(r.aborted)return d();try{b(e,o,s,t,n),u()}catch(e){u(e)}}},s.onerror=()=>u(Error(`Logo 加载失败: ${t.src}`)),r.addEventListener(`abort`,d,{once:!0}),r.aborted)d();else try{s.src=t.src}catch(e){u(e)}})}function S(e,t){let r=f(``),i=f(!1),a=f(null),o=f(!1),s=0,c=!1,u,d=new Set;function p(){if(c)throw y();let e=new AbortController;return d.add(e),e}function m(e){if(c||e.aborted)throw y()}let h=n(()=>{if(t.logo.value){let e=t.errorCorrectionLevel.value;return e===`L`||e===`M`?`Q`:e}return t.errorCorrectionLevel.value}),_=n(()=>({width:t.size.value,margin:t.margin.value,errorCorrectionLevel:h.value,color:{dark:t.color.value,light:t.bgColor.value}}));function b(){let e=t.logo.value;return{value:t.value.value,settings:_.value,size:t.size.value,mode:t.mode.value,logo:e?{...e}:void 0}}async function S(e,t){m(t);let n=document.createElement(`canvas`);return await v.toCanvas(n,e.value,e.settings),m(t),e.logo&&await x(n,e.logo,e.size,t),m(t),n}async function C(e,t){if(e.logo){let n=await S(e,t),r=n.toDataURL(`image/png`);return`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" viewBox="0 0 ${n.width} ${n.height}"><image href="${r}" width="100%" height="100%"/></svg>`}let n=await v.toString(e.value,{...e.settings,type:`svg`});return m(t),n}function w(){let t=e.value;t&&(t.getContext(`2d`)?.clearRect(0,0,t.width,t.height),t.width=0,t.height=0)}function T(){r.value=``,i.value=!1,w()}async function E(t,n,a){if(n.mode===`canvas`){let o=await S(n,a);if(t!==s)return;let c=e.value;if(!c)return;c.width=o.width,c.height=o.height;let l=c.getContext(`2d`);if(!l)throw Error(`Canvas context 不可用`);l.drawImage(o,0,0),r.value=``,i.value=!1;return}let o=await C(n,a);t===s&&(r.value=o,i.value=!!n.logo,w())}async function D(){if(c)return;let e=++s;if(u?.abort(),u=void 0,!t.value.value){T(),a.value=null,o.value=!1;return}let n=p();u=n;let r=b();o.value=!0,a.value=null;try{await E(e,r,n.signal)}catch(t){if(e!==s)return;a.value=t instanceof Error?t:Error(String(t)),T()}finally{d.delete(n),u===n&&(u=void 0),e===s&&(o.value=!1)}}async function O(e=`png`,t=.92){let n=p(),r=b();try{if(e===`svg`){let e=await C(r,n.signal);return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}let i=await S(r,n.signal),a=e===`jpeg`?`image/jpeg`:`image/png`;return i.toDataURL(a,t)}finally{d.delete(n)}}async function k(e=`qrcode`,t=`png`){let n=await O(t);if(c)throw y();let r=document.createElement(`a`);r.download=`${e}.${t}`,r.href=n,document.body.appendChild(r),r.click(),r.remove()}return g([t.value,t.size,t.color,t.bgColor,t.errorCorrectionLevel,t.margin,t.mode,t.logo],()=>D(),{deep:!0}),l(()=>{c=!0,s++,d.forEach(e=>e.abort()),d.clear(),u=void 0,o.value=!1}),{svgHtml:r,svgTrusted:i,error:a,loading:o,render:D,toDataURL:O,download:k}}const C={class:`c-qrcode`},w=[`innerHTML`],T={key:0,class:`qrcode-label`};var E=e(o({name:`C_QRCode`,__name:`index`,props:{value:{},size:{default:200},color:{default:`#000000`},bgColor:{default:`#FFFFFF`},errorCorrectionLevel:{default:`M`},margin:{default:2},mode:{default:`canvas`},logo:{default:void 0},showBorder:{type:Boolean,default:!0},label:{default:``},showLabel:{type:Boolean,default:!1}},emits:[`error`],setup(e,{expose:o,emit:l}){let v=e,y=l,b=f(null),{svgHtml:x,svgTrusted:E,error:D,render:O,toDataURL:k,download:A}=S(b,{value:m(v,`value`),size:m(v,`size`),color:m(v,`color`),bgColor:m(v,`bgColor`),errorCorrectionLevel:m(v,`errorCorrectionLevel`),margin:m(v,`margin`),mode:m(v,`mode`),logo:m(v,`logo`)}),j=n(()=>E.value?x.value:t(x.value));return g(D,e=>{e&&y(`error`,e)}),u(()=>O()),o({toDataURL:(e,t)=>k(e,t),download:(e,t)=>A(e,t),refresh:()=>O()}),(t,n)=>(d(),i(`div`,C,[a(`div`,{class:s([`qrcode-wrapper`,{"with-border":e.showBorder}])},[_(a(`canvas`,{ref_key:`canvasRef`,ref:b},null,512),[[h,e.mode===`canvas`]]),e.mode===`svg`?(d(),i(`div`,{key:0,class:`qrcode-svg`,style:c({width:`${e.size}px`,height:`${e.size}px`}),innerHTML:j.value},null,12,w)):r(`v-if`,!0)],2),e.showLabel&&e.label?(d(),i(`div`,T,p(e.label),1)):r(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-5539bdf6`]]);export{S as n,E as t};
@@ -1,13 +1,13 @@
1
1
  :root{--c-primary: var(--primary-color, #2080f0);--c-primary-hover: var(--primary-color-hover, #4098fc);--c-primary-pressed: var(--primary-color-pressed, #1060c9);--c-success: var(--success-color, #18a058);--c-warning: var(--warning-color, #f0a020);--c-error: var(--error-color, #d03050);--c-info: var(--info-color, #2080f0);--c-bg-body: var(--body-color, #ffffff);--c-bg-card: var(--card-color, #ffffff);--c-bg-surface: var(--popover-color, #ffffff);--c-text-1: var(--text-color-1, #262626);--c-text-2: var(--text-color-2, #525252);--c-text-3: var(--text-color-3, #a3a3a3);--c-text-4: var(--text-color-4, #c0c0c0);--c-border: var(--border-color, #e5e7eb);--c-radius-sm: var(--border-radius-small, 4px);--c-radius: var(--border-radius, 6px);--c-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);--c-transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);--c-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);--c-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);--c-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1)}
2
2
 
3
3
  /* 电子签名组件样式 */
4
- .c-signature[data-v-66ce1727] {
4
+ .c-signature[data-v-4ad3c383] {
5
5
  display: flex;
6
6
  flex-direction: column;
7
7
  gap: 12px;
8
8
  width: 100%;
9
9
  }
10
- .c-signature .signature-toolbar[data-v-66ce1727] {
10
+ .c-signature .signature-toolbar[data-v-4ad3c383] {
11
11
  display: flex;
12
12
  align-items: center;
13
13
  gap: 12px;
@@ -17,29 +17,29 @@
17
17
  border-radius: var(--c-radius, 6px);
18
18
  flex-wrap: wrap;
19
19
  }
20
- .c-signature .signature-toolbar .toolbar-section[data-v-66ce1727] {
20
+ .c-signature .signature-toolbar .toolbar-section[data-v-4ad3c383] {
21
21
  display: flex;
22
22
  align-items: center;
23
23
  gap: 8px;
24
24
  }
25
- .c-signature .signature-toolbar .toolbar-section.divider[data-v-66ce1727] {
25
+ .c-signature .signature-toolbar .toolbar-section.divider[data-v-4ad3c383] {
26
26
  width: 1px;
27
27
  height: 24px;
28
28
  background: var(--c-border, #e1e4e8);
29
29
  margin: 0 4px;
30
30
  }
31
- .c-signature .signature-toolbar .toolbar-section .section-label[data-v-66ce1727] {
31
+ .c-signature .signature-toolbar .toolbar-section .section-label[data-v-4ad3c383] {
32
32
  font-size: 13px;
33
33
  color: var(--c-text-3, #999);
34
34
  font-weight: 500;
35
35
  white-space: nowrap;
36
36
  flex-shrink: 0;
37
37
  }
38
- .c-signature .signature-toolbar .toolbar-section .n-color-picker[data-v-66ce1727] {
38
+ .c-signature .signature-toolbar .toolbar-section .n-color-picker[data-v-4ad3c383] {
39
39
  width: 90px !important;
40
40
  flex-shrink: 0;
41
41
  }
42
- .c-signature .signature-canvas-wrapper[data-v-66ce1727] {
42
+ .c-signature .signature-canvas-wrapper[data-v-4ad3c383] {
43
43
  position: relative;
44
44
  border: 1px solid var(--c-border, #e1e4e8);
45
45
  border-radius: var(--c-radius, 6px);
@@ -47,28 +47,28 @@
47
47
  background: var(--c-bg, #fff);
48
48
  transition: border-color 0.3s;
49
49
  }
50
- .c-signature .signature-canvas-wrapper[data-v-66ce1727]:hover {
50
+ .c-signature .signature-canvas-wrapper[data-v-4ad3c383]:hover {
51
51
  border-color: var(--c-primary, #409eff);
52
52
  }
53
- .c-signature .signature-canvas-wrapper.disabled[data-v-66ce1727] {
53
+ .c-signature .signature-canvas-wrapper.disabled[data-v-4ad3c383] {
54
54
  opacity: 0.6;
55
55
  cursor: not-allowed;
56
56
  border-color: var(--c-border, #e1e4e8);
57
57
  }
58
- .c-signature .signature-canvas-wrapper.readonly[data-v-66ce1727] {
58
+ .c-signature .signature-canvas-wrapper.readonly[data-v-4ad3c383] {
59
59
  cursor: default;
60
60
  }
61
- .c-signature .signature-canvas-wrapper .signature-canvas[data-v-66ce1727] {
61
+ .c-signature .signature-canvas-wrapper .signature-canvas[data-v-4ad3c383] {
62
62
  display: block;
63
63
  width: 100%;
64
64
  height: 100%;
65
65
  cursor: crosshair;
66
66
  touch-action: none;
67
67
  }
68
- .c-signature .signature-canvas-wrapper .signature-canvas.disabled[data-v-66ce1727], .c-signature .signature-canvas-wrapper .signature-canvas.readonly[data-v-66ce1727] {
68
+ .c-signature .signature-canvas-wrapper .signature-canvas.disabled[data-v-4ad3c383], .c-signature .signature-canvas-wrapper .signature-canvas.readonly[data-v-4ad3c383] {
69
69
  cursor: not-allowed;
70
70
  }
71
- .c-signature .signature-canvas-wrapper .canvas-placeholder[data-v-66ce1727] {
71
+ .c-signature .signature-canvas-wrapper .canvas-placeholder[data-v-4ad3c383] {
72
72
  position: absolute;
73
73
  top: 50%;
74
74
  left: 50%;
@@ -78,11 +78,11 @@
78
78
  pointer-events: none;
79
79
  user-select: none;
80
80
  }
81
- .c-signature .signature-actions[data-v-66ce1727] {
81
+ .c-signature .signature-actions[data-v-4ad3c383] {
82
82
  display: flex;
83
83
  justify-content: flex-end;
84
84
  gap: 8px;
85
85
  }
86
86
 
87
87
  /* layer: default */
88
- .px[data-v-66ce1727]{padding-left:1rem;padding-right:1rem;}
88
+ .px[data-v-4ad3c383]{padding-left:1rem;padding-right:1rem;}
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);function i(e){let{canvasRef:t,penConfig:r,mode:i,disabled:a,backgroundImage:o,importedImage:s,onStrokeComplete:c,onDrawStart:l,onDrawing:u}=e,d=(0,n.ref)(!1),f=(0,n.ref)([]),p=null,m=()=>{let e=t.value;if(!e||(p=e.getContext(`2d`,{willReadFrequently:!0}),!p))return;let n=window.devicePixelRatio||1,r=e.getBoundingClientRect();e.width=r.width*n,e.height=r.height*n,p.scale(n,n),p.lineCap=`round`,p.lineJoin=`round`},h=e=>{let n=t.value;if(!n)return{x:0,y:0};let r=n.getBoundingClientRect(),i,a;if(`touches`in e&&e.touches.length>0)({clientX:i,clientY:a}=e.touches[0]);else if(`clientX`in e)({clientX:i,clientY:a}=e);else return{x:0,y:0};return{x:i-r.left,y:a-r.top,timestamp:Date.now()}},g=(e,t,n,r=!1)=>{p&&(p.save(),r?(p.globalCompositeOperation=`destination-out`,p.lineWidth=20):(p.globalCompositeOperation=`source-over`,p.strokeStyle=n.color,p.lineWidth=n.width,p.globalAlpha=n.opacity),p.beginPath(),p.moveTo(e.x,e.y),p.lineTo(t.x,t.y),p.stroke(),p.restore())},_=e=>{if(a.value)return;e.preventDefault(),d.value=!0,f.value=[];let t=h(e);f.value.push(t),l()},v=e=>{if(!d.value||a.value)return;e.preventDefault();let t=h(e),n=f.value[f.value.length-1];n&&g(n,t,r.value,i.value===`eraser`),f.value.push(t),u(t)},y=e=>{!d.value||a.value||(e.preventDefault(),d.value=!1,f.value.length>0&&(c({points:[...f.value],color:r.value.color,width:r.value.width,opacity:r.value.opacity,mode:i.value}),f.value=[]))};return{isDrawing:(0,n.readonly)(d),initCanvas:m,bindEvents:()=>{let e=t.value;e&&(e.addEventListener(`mousedown`,_),e.addEventListener(`mousemove`,v),e.addEventListener(`mouseup`,y),e.addEventListener(`mouseleave`,y),e.addEventListener(`touchstart`,_,{passive:!1}),e.addEventListener(`touchmove`,v,{passive:!1}),e.addEventListener(`touchend`,y),e.addEventListener(`touchcancel`,y))},unbindEvents:()=>{let e=t.value;e&&(e.removeEventListener(`mousedown`,_),e.removeEventListener(`mousemove`,v),e.removeEventListener(`mouseup`,y),e.removeEventListener(`mouseleave`,y),e.removeEventListener(`touchstart`,_),e.removeEventListener(`touchmove`,v),e.removeEventListener(`touchend`,y),e.removeEventListener(`touchcancel`,y))},redrawStrokes:e=>{if(!p||!t.value)return;let n=t.value,{width:r,height:i}=n.getBoundingClientRect();p.clearRect(0,0,n.width,n.height),o?.value&&p.drawImage(o.value,0,0,r,i),s?.value&&p.drawImage(s.value,0,0,r,i),e.forEach(e=>{for(let t=1;t<e.points.length;t++)g(e.points[t-1],e.points[t],{color:e.color,width:e.width,opacity:e.opacity},e.mode===`eraser`)})},clearCanvas:()=>{!p||!t.value||p.clearRect(0,0,t.value.width,t.value.height)}}}const a=e=>e.map(e=>({...e,points:e.points.map(e=>({...e}))}));function o(e={}){let{onChange:t}=e,r=Math.max(2,Math.floor(e.maxHistory??50)),i=(0,n.ref)([]),o=(0,n.ref)([]),s=(0,n.ref)(-1),c=(0,n.computed)(()=>s.value>0),l=(0,n.computed)(()=>s.value<o.value.length-1),u=e=>{i.value.push(a([e])[0]),d()},d=()=>{o.value=o.value.slice(0,s.value+1),o.value.push(a(i.value)),s.value++,o.value.length>r&&(o.value.shift(),s.value--),t?.(a(i.value))},f=()=>c.value?(s.value--,i.value=a(o.value[s.value]),t?.(a(i.value)),!0):!1,p=()=>l.value?(s.value++,i.value=a(o.value[s.value]),t?.(a(i.value)),!0):!1,m=()=>{i.value=[],o.value=[[]],s.value=0,t?.([])},h=e=>{i.value=a(e),o.value=[a(e)],s.value=0,t?.(a(i.value))},g=(0,n.computed)(()=>i.value.length===0);return o.value=[[]],s.value=0,{strokes:(0,n.readonly)(i),canUndo:(0,n.readonly)(c),canRedo:(0,n.readonly)(l),isEmpty:(0,n.readonly)(g),addStroke:u,undo:f,redo:p,clear:m,loadData:h}}function s(e){let{canvasRef:t,watermark:n}=e,r=(e,t,n,r)=>{let i={"top-left":{x:10,y:n+10},"top-right":{x:e.width-t-10,y:n+10},"bottom-left":{x:10,y:e.height-10},"bottom-right":{x:e.width-t-10,y:e.height-10}};return i[r]||i[`bottom-right`]},i=(e,t)=>{let i=e.getContext(`2d`);if(!i||!n?.value)return;let a={fontSize:n.value.fontSize||12,color:n.value.color||`#999999`,position:n.value.position||`bottom-right`};i.save(),i.font=`${a.fontSize}px Arial`,i.fillStyle=a.color,i.textBaseline=`bottom`;let o=i.measureText(t).width,{x:s,y:c}=r(e,o,a.fontSize,a.position);i.fillText(t,s,c),i.restore()},a=(e,t,n)=>{let r=document.createElement(`canvas`);r.width=e.width,r.height=e.height;let i=r.getContext(`2d`);if(!i)throw Error(`无法创建临时 Canvas`);return t&&(i.fillStyle=n,i.fillRect(0,0,r.width,r.height)),i.drawImage(e,0,0),{canvas:r,ctx:i}},o=(e,t)=>{let{includeBackground:r=!1,backgroundColor:o=`#FFFFFF`,includeWatermark:s=!1}=t,{canvas:c}=a(e,r,o);return s&&n?.value?.text&&i(c,n.value.text),c},s=(e,t)=>new Promise((n,r)=>{e.toBlob(e=>e?n(e):r(Error(`导出失败`)),`image/png`,t)}),c=e=>{let t=e.getContext(`2d`);if(!t)return!0;let{data:n}=t.getImageData(0,0,e.width,e.height);return!n.some(e=>e!==0)},l=async(e={})=>{let n=t.value;if(!n)throw Error(`Canvas 未初始化`);if(c(n))throw Error(`签名为空,请先签名后再导出`);let{format:r=`png`,quality:i=.92}=e,a=o(n,{...e,includeBackground:e.includeBackground??r===`jpeg`});if(r===`blob`)return s(a,i);if(r===`svg`){let e=a.toDataURL(`image/png`),t=`<svg xmlns="http://www.w3.org/2000/svg" width="${a.width}" height="${a.height}" viewBox="0 0 ${a.width} ${a.height}"><image href="${e}" width="100%" height="100%"/></svg>`;return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`}let l=r===`jpeg`?`image/jpeg`:`image/png`;return a.toDataURL(l,i)};return{exportSignature:l,download:async(e=`signature`,t={})=>{let n=t.format||`png`,r=await l({...t,format:n});if(r instanceof Blob){let t=URL.createObjectURL(r),i=document.createElement(`a`);i.href=t,i.download=`${e}.${n===`blob`?`png`:n}`,document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(t),1e3)}else if(typeof r==`string`){let t=document.createElement(`a`);t.href=r,t.download=`${e}.${n}`,document.body.appendChild(t),t.click(),t.remove()}},loadImage:async e=>{let n=t.value;if(!n)throw Error(`Canvas 未初始化`);let r=n.getContext(`2d`);if(!r)throw Error(`无法获取 Canvas 上下文`);return new Promise((t,i)=>{let a=new Image;a.crossOrigin=`anonymous`,a.onload=()=>{r.clearRect(0,0,n.width,n.height),r.drawImage(a,0,0,n.width,n.height),t()},a.onerror=()=>i(Error(`图片加载失败: ${e}`)),a.src=e})}}}const c={color:`#000000`,width:2,opacity:1},l={show:!1,text:``,fontSize:12,color:`#999999`,position:`bottom-right`},u=[`#000000`,`#FF0000`,`#0000FF`,`#00AA00`,`#FF6600`,`#9900FF`],d={class:`c-signature`},f={key:0,class:`signature-toolbar`},p={class:`toolbar-section`},m={key:0,class:`toolbar-section`},h={key:1,class:`toolbar-section`},g={class:`toolbar-section`},_={class:`toolbar-section`},v={key:0,class:`canvas-placeholder`},y=(0,n.defineComponent)({name:`C_Signature`,__name:`index`,props:{width:{default:`100%`},height:{default:300},penConfig:{},eraserConfig:{},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},backgroundImage:{},backgroundColor:{},watermark:{},showToolbar:{type:Boolean,default:!0},maxHistory:{default:50}},emits:[`start-draw`,`drawing`,`end-draw`,`clear`,`undo`,`redo`,`change`,`error`],setup(t,{expose:a,emit:y}){let b=t,x=y,S=(0,n.ref)(null),C=(0,n.ref)(null),w=(0,n.shallowRef)(null),T=(0,n.shallowRef)(null),E=(0,n.computed)(()=>b.disabled||b.readonly),D=(0,n.ref)(`pen`),O=(0,n.reactive)({...c,...b.penConfig}),k=(0,n.reactive)({...l,...b.watermark}),{strokes:A,canUndo:j,canRedo:M,isEmpty:N,addStroke:P,undo:F,redo:I,clear:L,loadData:R}=o({maxHistory:b.maxHistory,onChange:e=>{B.redrawStrokes(e),x(`change`,e)}}),z=(0,n.computed)(()=>N.value&&!T.value),B=i({canvasRef:S,penConfig:(0,n.toRef)(O),mode:D,disabled:E,backgroundImage:w,importedImage:T,onStrokeComplete:e=>{P(e),x(`end-draw`,e)},onDrawStart:()=>x(`start-draw`),onDrawing:e=>x(`drawing`,e)}),V=s({canvasRef:S,watermark:(0,n.toRef)(k)}),H=()=>{let e=F();return e&&x(`undo`),e},U=()=>{let e=I();return e&&x(`redo`),e},W=()=>{T.value=null,L(),x(`clear`)},G=async e=>V.exportSignature(e),K=async(e,t)=>V.download(e,t);function q(e){return new Promise((t,n)=>{let r=new Image;r.crossOrigin=`anonymous`,r.onload=()=>t(r),r.onerror=()=>n(Error(`签名图片加载失败`)),r.src=e})}let J=0;async function Y(e){let t=++J;if(!e){w.value=null,B.redrawStrokes(A.value);return}let n=await q(e);t===J&&(w.value=n,B.redrawStrokes(A.value))}let X=async e=>{T.value=await q(e),L()},Z=()=>A.value.map(e=>({...e,points:e.points.map(e=>({...e}))})),ee=e=>{T.value=null,R(e)},te=()=>z.value;(0,n.onMounted)(()=>{B.initCanvas(),B.bindEvents(),typeof ResizeObserver<`u`&&C.value&&(Q=new ResizeObserver(()=>{B.initCanvas(),B.redrawStrokes(A.value)}),Q.observe(C.value)),Y(b.backgroundImage).catch($)});let Q=null;function $(e){x(`error`,e instanceof Error?e:Error(String(e)))}return(0,n.watch)(()=>b.backgroundImage,e=>{Y(e).catch($)}),(0,n.onUnmounted)(()=>{J++,Q?.disconnect(),B.unbindEvents()}),a({clear:W,undo:H,redo:U,export:G,download:K,loadImage:X,getSignatureData:Z,loadSignatureData:ee,isEmpty:te}),(i,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[t.showToolbar?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,f,[(0,n.createElementVNode)(`div`,p,[(0,n.createVNode)((0,n.unref)(r.NButtonGroup),null,{default:(0,n.withCtx)(()=>[(0,n.createVNode)((0,n.unref)(r.NButton),{type:D.value===`pen`?`primary`:`default`,size:`small`,disabled:E.value,onClick:a[0]||=e=>D.value=`pen`},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:draw`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[4]||=(0,n.createTextVNode)(` 画笔 `,-1)]),_:1},8,[`type`,`disabled`]),(0,n.createVNode)((0,n.unref)(r.NButton),{type:D.value===`eraser`?`primary`:`default`,size:`small`,disabled:E.value,onClick:a[1]||=e=>D.value=`eraser`},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:eraser`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[5]||=(0,n.createTextVNode)(` 橡皮擦 `,-1)]),_:1},8,[`type`,`disabled`])]),_:1})]),a[11]||=(0,n.createElementVNode)(`div`,{class:`toolbar-section divider`},null,-1),D.value===`pen`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,m,[a[6]||=(0,n.createElementVNode)(`span`,{class:`section-label`},`颜色`,-1),(0,n.createVNode)((0,n.unref)(r.NColorPicker),{value:O.color,"onUpdate:value":a[2]||=e=>O.color=e,"show-alpha":!1,disabled:E.value,size:`small`,swatches:(0,n.unref)(u)},null,8,[`value`,`disabled`,`swatches`])])):(0,n.createCommentVNode)(`v-if`,!0),D.value===`pen`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,h,[a[7]||=(0,n.createElementVNode)(`span`,{class:`section-label`},`粗细`,-1),(0,n.createVNode)((0,n.unref)(r.NInputNumber),{value:O.width,"onUpdate:value":a[3]||=e=>O.width=e,min:1,max:20,disabled:E.value,size:`small`,style:{width:`80px`}},null,8,[`value`,`disabled`])])):(0,n.createCommentVNode)(`v-if`,!0),a[12]||=(0,n.createElementVNode)(`div`,{class:`toolbar-section divider`},null,-1),(0,n.createElementVNode)(`div`,g,[(0,n.createVNode)((0,n.unref)(r.NButton),{size:`small`,disabled:E.value||!(0,n.unref)(j),onClick:H},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:undo`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[8]||=(0,n.createTextVNode)(` 撤销 `,-1)]),_:1},8,[`disabled`]),(0,n.createVNode)((0,n.unref)(r.NButton),{size:`small`,disabled:E.value||!(0,n.unref)(M),onClick:U},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:redo`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[9]||=(0,n.createTextVNode)(` 重做 `,-1)]),_:1},8,[`disabled`])]),a[13]||=(0,n.createElementVNode)(`div`,{class:`toolbar-section divider`},null,-1),(0,n.createElementVNode)(`div`,_,[(0,n.createVNode)((0,n.unref)(r.NButton),{size:`small`,type:`error`,disabled:E.value||z.value,onClick:W},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:delete-outline`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[10]||=(0,n.createTextVNode)(` 清空 `,-1)]),_:1},8,[`disabled`])])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,{ref_key:`canvasWrapperRef`,ref:C,class:(0,n.normalizeClass)([`signature-canvas-wrapper`,{disabled:t.disabled,readonly:t.readonly}]),style:(0,n.normalizeStyle)({width:typeof t.width==`number`?`${t.width}px`:t.width,height:typeof t.height==`number`?`${t.height}px`:t.height,backgroundColor:t.backgroundColor||`transparent`})},[(0,n.createElementVNode)(`canvas`,{ref_key:`canvasRef`,ref:S,class:(0,n.normalizeClass)([`signature-canvas`,{disabled:t.disabled,readonly:t.readonly}])},null,2),z.value&&!t.disabled&&!t.readonly?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,v,` 请在此处签名 `)):(0,n.createCommentVNode)(`v-if`,!0)],6)]))}});var b=t.t(y,[[`__scopeId`,`data-v-66ce1727`]]);Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return b}});
1
+ require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);function i(e){let{canvasRef:t,penConfig:r,mode:i,disabled:a,backgroundImage:o,importedImage:s,onStrokeComplete:c,onDrawStart:l,onDrawing:u}=e,d=(0,n.ref)(!1),f=(0,n.ref)([]),p=null,m=()=>{let e=t.value;if(!e||(p=e.getContext(`2d`,{willReadFrequently:!0}),!p))return;let n=window.devicePixelRatio||1,r=e.getBoundingClientRect();e.width=r.width*n,e.height=r.height*n,p.scale(n,n),p.lineCap=`round`,p.lineJoin=`round`},h=e=>{let n=t.value;if(!n)return{x:0,y:0};let r=n.getBoundingClientRect(),i,a;if(`touches`in e&&e.touches.length>0)({clientX:i,clientY:a}=e.touches[0]);else if(`clientX`in e)({clientX:i,clientY:a}=e);else return{x:0,y:0};return{x:i-r.left,y:a-r.top,timestamp:Date.now()}},g=(e,t,n,r=!1)=>{p&&(p.save(),r?(p.globalCompositeOperation=`destination-out`,p.lineWidth=20):(p.globalCompositeOperation=`source-over`,p.strokeStyle=n.color,p.lineWidth=n.width,p.globalAlpha=n.opacity),p.beginPath(),p.moveTo(e.x,e.y),p.lineTo(t.x,t.y),p.stroke(),p.restore())},_=e=>{if(a.value)return;e.preventDefault(),d.value=!0,f.value=[];let t=h(e);f.value.push(t),l()},v=e=>{if(!d.value||a.value)return;e.preventDefault();let t=h(e),n=f.value[f.value.length-1];n&&g(n,t,r.value,i.value===`eraser`),f.value.push(t),u(t)},y=e=>{!d.value||a.value||(e.preventDefault(),d.value=!1,f.value.length>0&&(c({points:[...f.value],color:r.value.color,width:r.value.width,opacity:r.value.opacity,mode:i.value}),f.value=[]))};return{isDrawing:(0,n.readonly)(d),initCanvas:m,bindEvents:()=>{let e=t.value;e&&(e.addEventListener(`mousedown`,_),e.addEventListener(`mousemove`,v),e.addEventListener(`mouseup`,y),e.addEventListener(`mouseleave`,y),e.addEventListener(`touchstart`,_,{passive:!1}),e.addEventListener(`touchmove`,v,{passive:!1}),e.addEventListener(`touchend`,y),e.addEventListener(`touchcancel`,y))},unbindEvents:()=>{let e=t.value;e&&(e.removeEventListener(`mousedown`,_),e.removeEventListener(`mousemove`,v),e.removeEventListener(`mouseup`,y),e.removeEventListener(`mouseleave`,y),e.removeEventListener(`touchstart`,_),e.removeEventListener(`touchmove`,v),e.removeEventListener(`touchend`,y),e.removeEventListener(`touchcancel`,y))},redrawStrokes:e=>{if(!p||!t.value)return;let n=t.value,{width:r,height:i}=n.getBoundingClientRect();p.clearRect(0,0,n.width,n.height),o?.value&&p.drawImage(o.value,0,0,r,i),s?.value&&p.drawImage(s.value,0,0,r,i),e.forEach(e=>{for(let t=1;t<e.points.length;t++)g(e.points[t-1],e.points[t],{color:e.color,width:e.width,opacity:e.opacity},e.mode===`eraser`)})},clearCanvas:()=>{!p||!t.value||p.clearRect(0,0,t.value.width,t.value.height)}}}const a=e=>e.map(e=>({...e,points:e.points.map(e=>({...e}))}));function o(e={}){let{onChange:t}=e,r=Math.max(2,Math.floor(e.maxHistory??50)),i=(0,n.ref)([]),o=(0,n.ref)([]),s=(0,n.ref)(-1),c=(0,n.computed)(()=>s.value>0),l=(0,n.computed)(()=>s.value<o.value.length-1),u=e=>{i.value.push(a([e])[0]),d()},d=()=>{o.value=o.value.slice(0,s.value+1),o.value.push(a(i.value)),s.value++,o.value.length>r&&(o.value.shift(),s.value--),t?.(a(i.value))},f=()=>c.value?(s.value--,i.value=a(o.value[s.value]),t?.(a(i.value)),!0):!1,p=()=>l.value?(s.value++,i.value=a(o.value[s.value]),t?.(a(i.value)),!0):!1,m=()=>{i.value=[],o.value=[[]],s.value=0,t?.([])},h=e=>{i.value=a(e),o.value=[a(e)],s.value=0,t?.(a(i.value))},g=(0,n.computed)(()=>i.value.length===0);return o.value=[[]],s.value=0,{strokes:(0,n.readonly)(i),canUndo:(0,n.readonly)(c),canRedo:(0,n.readonly)(l),isEmpty:(0,n.readonly)(g),addStroke:u,undo:f,redo:p,clear:m,loadData:h}}function s(e){let{canvasRef:t,watermark:n}=e,r=(e,t,n,r)=>{let i={"top-left":{x:10,y:n+10},"top-right":{x:e.width-t-10,y:n+10},"bottom-left":{x:10,y:e.height-10},"bottom-right":{x:e.width-t-10,y:e.height-10}};return i[r]||i[`bottom-right`]},i=(e,t)=>{let i=e.getContext(`2d`);if(!i||!n?.value)return;let a={fontSize:n.value.fontSize||12,color:n.value.color||`#999999`,position:n.value.position||`bottom-right`};i.save(),i.font=`${a.fontSize}px Arial`,i.fillStyle=a.color,i.textBaseline=`bottom`;let o=i.measureText(t).width,{x:s,y:c}=r(e,o,a.fontSize,a.position);i.fillText(t,s,c),i.restore()},a=(e,t,n)=>{let r=document.createElement(`canvas`);r.width=e.width,r.height=e.height;let i=r.getContext(`2d`);if(!i)throw Error(`无法创建临时 Canvas`);return t&&(i.fillStyle=n,i.fillRect(0,0,r.width,r.height)),i.drawImage(e,0,0),{canvas:r,ctx:i}},o=(e,t)=>{let{includeBackground:r=!1,backgroundColor:o=`#FFFFFF`,includeWatermark:s=!1}=t,{canvas:c}=a(e,r,o);return s&&n?.value?.text&&i(c,n.value.text),c},s=(e,t)=>new Promise((n,r)=>{e.toBlob(e=>e?n(e):r(Error(`导出失败`)),`image/png`,t)}),c=e=>{let t=e.getContext(`2d`);if(!t)return!0;let{data:n}=t.getImageData(0,0,e.width,e.height);return!n.some(e=>e!==0)},l=async(e={})=>{let n=t.value;if(!n)throw Error(`Canvas 未初始化`);if(c(n))throw Error(`签名为空,请先签名后再导出`);let{format:r=`png`,quality:i=.92}=e,a=o(n,{...e,includeBackground:e.includeBackground??r===`jpeg`});if(r===`blob`)return s(a,i);if(r===`svg`){let e=a.toDataURL(`image/png`),t=`<svg xmlns="http://www.w3.org/2000/svg" width="${a.width}" height="${a.height}" viewBox="0 0 ${a.width} ${a.height}"><image href="${e}" width="100%" height="100%"/></svg>`;return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`}let l=r===`jpeg`?`image/jpeg`:`image/png`;return a.toDataURL(l,i)};return{exportSignature:l,download:async(e=`signature`,t={})=>{let n=t.format||`png`,r=await l({...t,format:n});if(r instanceof Blob){let t=URL.createObjectURL(r),i=document.createElement(`a`);i.href=t,i.download=`${e}.${n===`blob`?`png`:n}`,document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(t),1e3)}else if(typeof r==`string`){let t=document.createElement(`a`);t.href=r,t.download=`${e}.${n}`,document.body.appendChild(t),t.click(),t.remove()}},loadImage:async e=>{let n=t.value;if(!n)throw Error(`Canvas 未初始化`);let r=n.getContext(`2d`);if(!r)throw Error(`无法获取 Canvas 上下文`);return new Promise((t,i)=>{let a=new Image;a.crossOrigin=`anonymous`,a.onload=()=>{r.clearRect(0,0,n.width,n.height),r.drawImage(a,0,0,n.width,n.height),t()},a.onerror=()=>i(Error(`图片加载失败: ${e}`)),a.src=e})}}}const c={color:`#000000`,width:2,opacity:1},l={show:!1,text:``,fontSize:12,color:`#999999`,position:`bottom-right`},u=[`#000000`,`#FF0000`,`#0000FF`,`#00AA00`,`#FF6600`,`#9900FF`],d={class:`c-signature`},f={key:0,class:`signature-toolbar`},p={class:`toolbar-section`},m={key:0,class:`toolbar-section`},h={key:1,class:`toolbar-section`},g={class:`toolbar-section`},_={class:`toolbar-section`},v={key:0,class:`canvas-placeholder`},y=(0,n.defineComponent)({name:`C_Signature`,__name:`index`,props:{width:{default:`100%`},height:{default:300},penConfig:{},eraserConfig:{},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},backgroundImage:{},backgroundColor:{},watermark:{},showToolbar:{type:Boolean,default:!0},maxHistory:{default:50}},emits:[`start-draw`,`drawing`,`end-draw`,`clear`,`undo`,`redo`,`change`,`error`],setup(t,{expose:a,emit:y}){let b=t,x=y,S=(0,n.ref)(null),C=(0,n.ref)(null),w=(0,n.shallowRef)(null),T=(0,n.shallowRef)(null),E=(0,n.computed)(()=>b.disabled||b.readonly),D=0,O=!1,k=(0,n.ref)(`pen`),A=(0,n.reactive)({...c,...b.penConfig}),j=(0,n.reactive)({...l,...b.watermark}),{strokes:M,canUndo:N,canRedo:P,isEmpty:ee,addStroke:te,undo:F,redo:I,clear:L,loadData:R}=o({maxHistory:b.maxHistory,onChange:e=>{B.redrawStrokes(e),x(`change`,e)}}),z=(0,n.computed)(()=>ee.value&&!T.value),B=i({canvasRef:S,penConfig:(0,n.toRef)(A),mode:k,disabled:E,backgroundImage:w,importedImage:T,onStrokeComplete:e=>{te(e),x(`end-draw`,e)},onDrawStart:()=>x(`start-draw`),onDrawing:e=>x(`drawing`,e)}),V=s({canvasRef:S,watermark:(0,n.toRef)(j)}),H=()=>{let e=F();return e&&x(`undo`),e},U=()=>{let e=I();return e&&x(`redo`),e},W=()=>{D++,T.value=null,L(),x(`clear`)},G=async e=>V.exportSignature(e),K=async(e,t)=>V.download(e,t);function q(e){return new Promise((t,n)=>{let r=new Image;r.crossOrigin=`anonymous`,r.onload=()=>t(r),r.onerror=()=>n(Error(`签名图片加载失败`)),r.src=e})}let J=0;async function Y(e){let t=++J;if(!e){w.value=null,B.redrawStrokes(M.value);return}try{let n=await q(e);if(O||t!==J)return;w.value=n,B.redrawStrokes(M.value)}catch(e){if(!O&&t===J)throw e}}let X=async e=>{if(O)return;let t=++D,n=await q(e);O||t!==D||(T.value=n,L())},Z=()=>M.value.map(e=>({...e,points:e.points.map(e=>({...e}))})),ne=e=>{D++,T.value=null,R(e)},re=()=>z.value;(0,n.onMounted)(()=>{B.initCanvas(),B.bindEvents(),typeof ResizeObserver<`u`&&C.value&&(Q=new ResizeObserver(()=>{B.initCanvas(),B.redrawStrokes(M.value)}),Q.observe(C.value)),Y(b.backgroundImage).catch($)});let Q=null;function $(e){x(`error`,e instanceof Error?e:Error(String(e)))}return(0,n.watch)(()=>b.backgroundImage,e=>{Y(e).catch($)}),(0,n.onUnmounted)(()=>{O=!0,D++,J++,Q?.disconnect(),B.unbindEvents()}),a({clear:W,undo:H,redo:U,export:G,download:K,loadImage:X,getSignatureData:Z,loadSignatureData:ne,isEmpty:re}),(i,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[t.showToolbar?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,f,[(0,n.createElementVNode)(`div`,p,[(0,n.createVNode)((0,n.unref)(r.NButtonGroup),null,{default:(0,n.withCtx)(()=>[(0,n.createVNode)((0,n.unref)(r.NButton),{type:k.value===`pen`?`primary`:`default`,size:`small`,disabled:E.value,onClick:a[0]||=e=>k.value=`pen`},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:draw`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[4]||=(0,n.createTextVNode)(` 画笔 `,-1)]),_:1},8,[`type`,`disabled`]),(0,n.createVNode)((0,n.unref)(r.NButton),{type:k.value===`eraser`?`primary`:`default`,size:`small`,disabled:E.value,onClick:a[1]||=e=>k.value=`eraser`},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:eraser`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[5]||=(0,n.createTextVNode)(` 橡皮擦 `,-1)]),_:1},8,[`type`,`disabled`])]),_:1})]),a[11]||=(0,n.createElementVNode)(`div`,{class:`toolbar-section divider`},null,-1),k.value===`pen`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,m,[a[6]||=(0,n.createElementVNode)(`span`,{class:`section-label`},`颜色`,-1),(0,n.createVNode)((0,n.unref)(r.NColorPicker),{value:A.color,"onUpdate:value":a[2]||=e=>A.color=e,"show-alpha":!1,disabled:E.value,size:`small`,swatches:(0,n.unref)(u)},null,8,[`value`,`disabled`,`swatches`])])):(0,n.createCommentVNode)(`v-if`,!0),k.value===`pen`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,h,[a[7]||=(0,n.createElementVNode)(`span`,{class:`section-label`},`粗细`,-1),(0,n.createVNode)((0,n.unref)(r.NInputNumber),{value:A.width,"onUpdate:value":a[3]||=e=>A.width=e,min:1,max:20,disabled:E.value,size:`small`,style:{width:`80px`}},null,8,[`value`,`disabled`])])):(0,n.createCommentVNode)(`v-if`,!0),a[12]||=(0,n.createElementVNode)(`div`,{class:`toolbar-section divider`},null,-1),(0,n.createElementVNode)(`div`,g,[(0,n.createVNode)((0,n.unref)(r.NButton),{size:`small`,disabled:E.value||!(0,n.unref)(N),onClick:H},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:undo`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[8]||=(0,n.createTextVNode)(` 撤销 `,-1)]),_:1},8,[`disabled`]),(0,n.createVNode)((0,n.unref)(r.NButton),{size:`small`,disabled:E.value||!(0,n.unref)(P),onClick:U},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:redo`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[9]||=(0,n.createTextVNode)(` 重做 `,-1)]),_:1},8,[`disabled`])]),a[13]||=(0,n.createElementVNode)(`div`,{class:`toolbar-section divider`},null,-1),(0,n.createElementVNode)(`div`,_,[(0,n.createVNode)((0,n.unref)(r.NButton),{size:`small`,type:`error`,disabled:E.value||z.value,onClick:W},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:delete-outline`,size:16,color:`currentColor`})]),default:(0,n.withCtx)(()=>[a[10]||=(0,n.createTextVNode)(` 清空 `,-1)]),_:1},8,[`disabled`])])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,{ref_key:`canvasWrapperRef`,ref:C,class:(0,n.normalizeClass)([`signature-canvas-wrapper`,{disabled:t.disabled,readonly:t.readonly}]),style:(0,n.normalizeStyle)({width:typeof t.width==`number`?`${t.width}px`:t.width,height:typeof t.height==`number`?`${t.height}px`:t.height,backgroundColor:t.backgroundColor||`transparent`})},[(0,n.createElementVNode)(`canvas`,{ref_key:`canvasRef`,ref:S,class:(0,n.normalizeClass)([`signature-canvas`,{disabled:t.disabled,readonly:t.readonly}])},null,2),z.value&&!t.disabled&&!t.readonly?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,v,` 请在此处签名 `)):(0,n.createCommentVNode)(`v-if`,!0)],6)]))}});var b=t.t(y,[[`__scopeId`,`data-v-4ad3c383`]]);Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return b}});