@robot-admin/naive-ui-components 0.12.1 → 0.13.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 (254) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +60 -1
  3. package/README_EN.md +59 -0
  4. package/dist/C_ActionBar.css +60 -60
  5. package/dist/C_ActionBar2.cjs +1 -1
  6. package/dist/C_ActionBar2.js +1 -1
  7. package/dist/C_AntV.css +49 -49
  8. package/dist/C_AntV2.cjs +3 -3
  9. package/dist/C_AntV2.js +3 -3
  10. package/dist/C_AudioPlayer.css +81 -66
  11. package/dist/C_AudioPlayer2.cjs +1 -1
  12. package/dist/C_AudioPlayer2.js +1 -1
  13. package/dist/C_AvatarGroup.css +40 -25
  14. package/dist/C_AvatarGroup2.cjs +1 -1
  15. package/dist/C_AvatarGroup2.js +1 -1
  16. package/dist/C_Barcode.css +6 -6
  17. package/dist/C_Barcode2.cjs +1 -1
  18. package/dist/C_Barcode2.js +1 -1
  19. package/dist/C_Breadcrumb.css +14 -14
  20. package/dist/C_Breadcrumb2.cjs +1 -1
  21. package/dist/C_Breadcrumb2.js +1 -1
  22. package/dist/C_Captcha.css +50 -50
  23. package/dist/C_Captcha2.cjs +1 -1
  24. package/dist/C_Captcha2.js +1 -1
  25. package/dist/C_Cascade.css +2 -2
  26. package/dist/C_Cascade2.cjs +1 -1
  27. package/dist/C_Cascade2.js +1 -1
  28. package/dist/C_Chat.css +96 -78
  29. package/dist/C_Chat2.cjs +1 -1
  30. package/dist/C_Chat2.js +1 -1
  31. package/dist/C_City.css +52 -28
  32. package/dist/C_City2.cjs +1 -1
  33. package/dist/C_City2.js +1 -1
  34. package/dist/C_Code.css +48 -42
  35. package/dist/C_Code2.cjs +1 -1
  36. package/dist/C_Code2.js +1 -1
  37. package/dist/C_CollapsePanel.css +14 -14
  38. package/dist/C_CollapsePanel2.cjs +1 -1
  39. package/dist/C_CollapsePanel2.js +1 -1
  40. package/dist/C_ContextMenu.css +14 -14
  41. package/dist/C_ContextMenu2.cjs +1 -1
  42. package/dist/C_ContextMenu2.js +1 -1
  43. package/dist/C_Cron.css +94 -55
  44. package/dist/C_Cron2.cjs +1 -1
  45. package/dist/C_Cron2.js +1 -1
  46. package/dist/C_Date2.cjs +1 -1
  47. package/dist/C_Date2.js +1 -1
  48. package/dist/C_Draggable.css +48 -48
  49. package/dist/C_Draggable2.cjs +1 -1
  50. package/dist/C_Draggable2.js +1 -1
  51. package/dist/C_Editor.css +13 -14
  52. package/dist/C_Editor2.cjs +1 -1
  53. package/dist/C_Editor2.js +1 -1
  54. package/dist/C_FilePreview.css +18 -18
  55. package/dist/C_FilePreview2.cjs +1 -1
  56. package/dist/C_FilePreview2.js +1 -1
  57. package/dist/C_Form.base.css +36 -36
  58. package/dist/C_Form.css +49 -50
  59. package/dist/C_Form2.cjs +1 -1
  60. package/dist/C_Form2.js +1 -1
  61. package/dist/C_FormModal.css +8 -8
  62. package/dist/C_FormModal2.cjs +1 -1
  63. package/dist/C_FormModal2.js +1 -1
  64. package/dist/C_FormSearch.css +45 -45
  65. package/dist/C_FormSearch2.cjs +1 -1
  66. package/dist/C_FormSearch2.js +1 -1
  67. package/dist/C_FormulaEditor.css +94 -55
  68. package/dist/C_FormulaEditor2.cjs +2 -2
  69. package/dist/C_FormulaEditor2.js +2 -2
  70. package/dist/C_FullCalendar.css +8 -1
  71. package/dist/C_FullCalendar2.cjs +1 -1
  72. package/dist/C_FullCalendar2.js +1 -1
  73. package/dist/C_GlobalSearch2.cjs +1 -1
  74. package/dist/C_GlobalSearch2.js +1 -1
  75. package/dist/C_Guide.css +137 -14
  76. package/dist/C_Guide.d.cts +2 -2
  77. package/dist/C_Guide.d.ts +2 -2
  78. package/dist/C_Guide2.cjs +1 -1
  79. package/dist/C_Guide2.js +1 -1
  80. package/dist/C_Icon.css +14 -14
  81. package/dist/C_Icon2.cjs +1 -1
  82. package/dist/C_Icon2.js +1 -1
  83. package/dist/C_ImageCropper.css +22 -22
  84. package/dist/C_ImageCropper2.cjs +1 -1
  85. package/dist/C_ImageCropper2.js +1 -1
  86. package/dist/C_Language.css +14 -14
  87. package/dist/C_Language2.cjs +1 -1
  88. package/dist/C_Language2.js +1 -1
  89. package/dist/C_Login.css +134 -134
  90. package/dist/C_Login2.cjs +1 -1
  91. package/dist/C_Login2.js +1 -1
  92. package/dist/C_Map.css +3 -3
  93. package/dist/C_Map2.cjs +1 -1
  94. package/dist/C_Map2.js +1 -1
  95. package/dist/C_Markdown.css +35 -35
  96. package/dist/C_Markdown2.cjs +1 -1
  97. package/dist/C_Markdown2.js +1 -1
  98. package/dist/C_Menu2.cjs +1 -1
  99. package/dist/C_Menu2.js +1 -1
  100. package/dist/C_NotificationCenter.css +30 -30
  101. package/dist/C_NotificationCenter2.cjs +1 -1
  102. package/dist/C_NotificationCenter2.js +1 -1
  103. package/dist/C_OrgChart.css +4 -0
  104. package/dist/C_OrgChart2.cjs +1 -1
  105. package/dist/C_OrgChart2.js +1 -1
  106. package/dist/C_Progress2.cjs +1 -1
  107. package/dist/C_Progress2.js +1 -1
  108. package/dist/C_QRCode.css +8 -8
  109. package/dist/C_QRCode2.cjs +1 -1
  110. package/dist/C_QRCode2.js +1 -1
  111. package/dist/C_Signature.css +14 -14
  112. package/dist/C_Signature2.cjs +1 -1
  113. package/dist/C_Signature2.js +1 -1
  114. package/dist/C_Skeleton2.cjs +1 -1
  115. package/dist/C_Skeleton2.js +1 -1
  116. package/dist/C_SplitPane.css +39 -39
  117. package/dist/C_SplitPane2.cjs +1 -1
  118. package/dist/C_SplitPane2.js +1 -1
  119. package/dist/C_Steps.css +48 -38
  120. package/dist/C_Steps2.cjs +1 -1
  121. package/dist/C_Steps2.js +1 -1
  122. package/dist/C_Table.base.css +160 -160
  123. package/dist/C_Table.css +173 -174
  124. package/dist/C_TagsView.css +52 -52
  125. package/dist/C_TagsView2.cjs +1 -1
  126. package/dist/C_TagsView2.js +1 -1
  127. package/dist/C_Theme.css +14 -14
  128. package/dist/C_Theme2.cjs +1 -1
  129. package/dist/C_Theme2.js +1 -1
  130. package/dist/C_Time.css +4 -4
  131. package/dist/C_Time2.cjs +1 -1
  132. package/dist/C_Time2.js +1 -1
  133. package/dist/C_Timeline.css +76 -58
  134. package/dist/C_Timeline2.cjs +1 -1
  135. package/dist/C_Timeline2.js +1 -1
  136. package/dist/C_Transfer.css +51 -51
  137. package/dist/C_Transfer2.cjs +1 -1
  138. package/dist/C_Transfer2.js +1 -1
  139. package/dist/C_Tree.css +35 -32
  140. package/dist/C_Tree2.cjs +1 -1
  141. package/dist/C_Tree2.js +1 -1
  142. package/dist/C_Upload.css +53 -50
  143. package/dist/C_Upload2.cjs +1 -1
  144. package/dist/C_Upload2.js +1 -1
  145. package/dist/C_VideoPlayer.css +17 -13
  146. package/dist/C_VideoPlayer2.cjs +2 -2
  147. package/dist/C_VideoPlayer2.js +2 -2
  148. package/dist/C_VtableGantt.css +19 -19
  149. package/dist/C_VtableGantt2.cjs +1 -1
  150. package/dist/C_VtableGantt2.js +1 -1
  151. package/dist/C_WaterFall.css +19 -15
  152. package/dist/C_WaterFall2.cjs +1 -1
  153. package/dist/C_WaterFall2.js +1 -1
  154. package/dist/C_WorkFlow.css +123 -123
  155. package/dist/C_WorkFlow2.cjs +1 -1
  156. package/dist/C_WorkFlow2.js +1 -1
  157. package/dist/constants.d.cts +3 -3
  158. package/dist/constants.d.ts +3 -3
  159. package/dist/constants2.d.cts +2 -2
  160. package/dist/constants2.d.ts +2 -2
  161. package/dist/constants3.d.cts +12 -8
  162. package/dist/constants3.d.ts +12 -8
  163. package/dist/constants4.d.cts +9 -9
  164. package/dist/constants4.d.ts +9 -9
  165. package/dist/constants5.d.cts +4 -4
  166. package/dist/constants5.d.ts +4 -4
  167. package/dist/data.d.cts +11 -11
  168. package/dist/data.d.ts +11 -11
  169. package/dist/data2.cjs +1 -1
  170. package/dist/data2.js +1 -1
  171. package/dist/index.cjs +1 -1
  172. package/dist/index.d.cts +2 -3
  173. package/dist/index.d.ts +2 -2
  174. package/dist/index.js +1 -1
  175. package/dist/index.vue.d.cts +7 -5
  176. package/dist/index.vue.d.ts +7 -5
  177. package/dist/index10.vue.d.cts +2 -2
  178. package/dist/index10.vue.d.ts +2 -2
  179. package/dist/index11.vue.d.cts +2 -2
  180. package/dist/index11.vue.d.ts +5 -5
  181. package/dist/index12.vue.d.cts +5 -5
  182. package/dist/index12.vue.d.ts +2 -2
  183. package/dist/index13.vue.d.cts +2 -2
  184. package/dist/index13.vue.d.ts +35 -9
  185. package/dist/index14.vue.d.cts +35 -9
  186. package/dist/index14.vue.d.ts +15 -48
  187. package/dist/index15.vue.d.cts +15 -48
  188. package/dist/index17.vue.d.ts +4 -4
  189. package/dist/index18.vue.d.cts +4 -4
  190. package/dist/index18.vue.d.ts +2 -2
  191. package/dist/index19.vue.d.cts +2 -2
  192. package/dist/index19.vue.d.ts +2 -2
  193. package/dist/index2.vue.d.cts +3 -3
  194. package/dist/index2.vue.d.ts +3 -3
  195. package/dist/index20.vue.d.cts +2 -2
  196. package/dist/index20.vue.d.ts +2 -2
  197. package/dist/index21.vue.d.cts +3 -3
  198. package/dist/index21.vue.d.ts +3 -3
  199. package/dist/index22.vue.d.cts +1 -1
  200. package/dist/index22.vue.d.ts +1 -1
  201. package/dist/index24.vue.d.cts +3 -3
  202. package/dist/index24.vue.d.ts +3 -3
  203. package/dist/index26.vue.d.cts +1 -1
  204. package/dist/index26.vue.d.ts +1 -1
  205. package/dist/index27.vue.d.cts +1 -1
  206. package/dist/index27.vue.d.ts +1 -1
  207. package/dist/index3.vue.d.cts +8 -8
  208. package/dist/index3.vue.d.ts +8 -8
  209. package/dist/index4.vue.d.cts +2 -2
  210. package/dist/index6.vue.d.ts +1 -1
  211. package/dist/index7.vue.d.cts +1 -1
  212. package/dist/index8.vue.d.ts +3 -3
  213. package/dist/index9.vue.d.cts +3 -3
  214. package/dist/index9.vue.d.ts +2 -2
  215. package/dist/mapUtils.d.cts +4 -4
  216. package/dist/mapUtils.d.ts +4 -4
  217. package/dist/style.css +1698 -1365
  218. package/dist/useCalendarEvents.d.cts +23 -18
  219. package/dist/useCalendarEvents.d.ts +23 -18
  220. package/dist/useCollapsePanel.d.cts +1 -0
  221. package/dist/useCollapsePanel.d.ts +1 -0
  222. package/dist/useCropperCore.d.cts +32 -17
  223. package/dist/useCropperCore.d.ts +32 -17
  224. package/dist/useDraggableLayout.d.cts +3 -3
  225. package/dist/useDraggableLayout.d.ts +3 -3
  226. package/dist/useDynamicFormState.d.cts +5 -0
  227. package/dist/useDynamicFormState.d.ts +5 -0
  228. package/dist/useEdgeInteraction.d.cts +19 -19
  229. package/dist/useEdgeInteraction.d.ts +19 -19
  230. package/dist/useFullscreen.d.cts +6 -6
  231. package/dist/useFullscreen.d.ts +6 -6
  232. package/dist/useInfiniteScroll.d.cts +2 -2
  233. package/dist/useInfiniteScroll.d.ts +2 -2
  234. package/dist/useQRCode.d.cts +6 -5
  235. package/dist/useQRCode.d.ts +6 -5
  236. package/dist/useSearchState.d.cts +7 -7
  237. package/dist/useSearchState.d.ts +7 -7
  238. package/dist/useSignatureHistory.d.cts +16 -8
  239. package/dist/useSignatureHistory.d.ts +16 -8
  240. package/dist/useSplitResize.d.cts +4 -4
  241. package/dist/useSplitResize.d.ts +4 -4
  242. package/dist/useTableQuery.cjs +3 -3
  243. package/dist/useTableQuery.d.cts +2 -5
  244. package/dist/useTableQuery.d.ts +2 -5
  245. package/dist/useTableQuery.js +3 -3
  246. package/dist/useTimeSelection.d.cts +5 -2
  247. package/dist/useTimeSelection.d.ts +5 -2
  248. package/dist/useTreeOperations.d.cts +6 -6
  249. package/dist/useTreeOperations.d.ts +6 -6
  250. package/dist/useWorkflowValidation.d.cts +4 -2
  251. package/dist/useWorkflowValidation.d.ts +4 -2
  252. package/dist/verification.d.cts +3 -3
  253. package/dist/verification.d.ts +3 -3
  254. package/package.json +4 -3
package/dist/C_Login2.cjs CHANGED
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`),n=require(`./C_Captcha2.cjs`),r=require(`./storage.cjs`),i=require(`./C_QRCode2.cjs`);let a=require(`vue`),o=require(`naive-ui`);const s=[{key:`github`,label:`GitHub`,icon:`mdi:github`},{key:`wechat`,label:`微信`,icon:`mdi:wechat`},{key:`qq`,label:`QQ`,icon:`mdi:qqchat`}],c={passwordLogin:!0,captchaLogin:!0,qrcodeLogin:!0,socialLogin:!0,register:!0,captchaVerify:!0,rememberMe:!0,forgotPassword:!0},ee={class:`c-login-panel`},l={class:`c-login__header`},te={key:0,class:`c-login__logo`},ne={class:`c-login__title`},re={key:0,class:`c-login__subtitle`},u={key:1,class:`c-login__subtitle c-login__subtitle--register`},d={key:0,class:`c-login__aux-row`},f={class:`c-login__code-row`},p={key:0,class:`c-login__captcha-wrap`},ie={key:3,class:`c-login__qr-panel`},ae={class:`c-login__qr-frame`},oe={key:1,class:`c-login__qr-placeholder`},m={key:2,class:`c-login__qr-scan-line`},h={class:`c-login__qr-hint`},g={class:`c-login__code-row`},_={key:7,class:`c-login__mode-switch`},v={class:`c-login__social-row`},y={key:9,class:`c-login__register-row`},b=(0,a.defineComponent)({__name:`index`,props:{title:{default:`欢迎回来`},subtitle:{},logoIcon:{},features:{},socialProviders:{},qrcodeUrl:{},storageKey:{default:`c_login_remember`},loading:{type:Boolean,default:!1},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`],setup(t,{expose:b,emit:x}){let S=(e,t)=>{let n=globalThis.$t;return n?.(e,t,`robot_admin`)??t},C=(e,t,n)=>[{required:!0,message:`${e}不能为空`,trigger:`blur`},{validator:(e,n)=>!n||typeof n==`string`&&t.test(n),message:n,trigger:`blur`}],w=/^(?:(?:\+|00)86)?1[3-9]\d{9}$/,T=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{6,20}$/,E=t,D=x,O=(0,a.computed)(()=>({...E,features:{...c,...E.features},socialProviders:E.socialProviders??s})),k=(0,a.computed)(()=>O.value.features),A=(0,a.computed)(()=>O.value.socialProviders),j=(0,a.ref)(`password`),M=(0,a.ref)(null),N=(0,a.reactive)({username:E.defaultUsername??``,password:E.defaultPassword??``}),se={username:[{required:!0,message:S(`cl_username_rule`,`请输入用户名`),trigger:`blur`}],password:[{required:!0,message:S(`cl_password_rule`,`请输入密码`),trigger:`blur`}]},P=(0,a.ref)(!1);(0,a.watch)(P,e=>{e?r.i(E.storageKey,{username:N.username}):r.r(E.storageKey)}),(0,a.onMounted)(()=>{let e=r.t(E.storageKey);typeof e?.username==`string`&&(N.username=e.username,P.value=!0)});let F=async()=>{try{await M.value?.validate()}catch{return}D(`submit`,{...N,...H.value?{captchaToken:U.value,captchaTimestamp:W.value,captchaType:G.value,captchaVerifiedBy:K.value}:{}})},I=(0,a.ref)(null),L=(0,a.reactive)({account:``,code:``}),R=(0,a.ref)(0),z=null,B={account:C(`手机号`,w,`手机号格式错误`),code:[{required:!0,message:S(`cl_code_rule`,`请输入验证码`),trigger:`blur`}]},V=(0,a.ref)(),H=(0,a.ref)(!1),U=(0,a.ref)(``),W=(0,a.ref)(0),G=(0,a.ref)(`puzzle-captcha`),K=(0,a.ref)(),ce=e=>{H.value=!0,U.value=e.token,W.value=e.timestamp,G.value=e.type,K.value=e.verifiedBy},le=()=>{H.value=!1},ue=e=>{H.value=e,e||(U.value=``,W.value=0,G.value=`puzzle-captcha`,K.value=void 0)},de=()=>{H.value=!1,U.value=``,W.value=0,G.value=`puzzle-captcha`,K.value=void 0,V.value?.reset()},q=async()=>{try{await I.value?.validate()}catch{return}k.value.captchaVerify&&!H.value||D(`captcha-submit`,{...L})},fe=()=>{L.account&&(D(`send-code`,L.account),z&&=(clearInterval(z),null),R.value=60,z=setInterval(()=>{R.value--,R.value<=0&&(clearInterval(z),z=null)},1e3))},J=(0,a.computed)(()=>E.qrcodeUrl?.trim()??``),pe=()=>{D(`qrcode-refresh`)},Y=(0,a.ref)(null),X=(0,a.reactive)({phone:``,code:``,password:``,confirmPassword:``}),Z=(0,a.ref)(0),Q=null,me={phone:C(`手机号`,w,`手机号格式错误`),code:[{required:!0,message:S(`cl_code_rule`,`请输入验证码`),trigger:`blur`}],password:C(`密码`,T,`密码必须包含大小写字母和数字,长度6-20位`),confirmPassword:[{required:!0,message:S(`cl_confirm_pw_rule`,`请再次输入密码`),trigger:`blur`},{validator:(e,t)=>t===X.password?!0:Error(S(`cl_pw_mismatch`,`两次密码输入不一致`)),trigger:`blur`}]},he=()=>{X.phone&&(D(`register-send-code`,X.phone),Q&&=(clearInterval(Q),null),Z.value=60,Q=setInterval(()=>{Z.value--,Z.value<=0&&(clearInterval(Q),Q=null)},1e3))},$=async()=>{try{await Y.value?.validate()}catch{return}D(`register-submit`,{...X})};return(0,a.onUnmounted)(()=>{z&&=(clearInterval(z),null),Q&&=(clearInterval(Q),null)}),b({resetCaptcha:de}),(t,r)=>{let s=o.NInput,c=o.NFormItem,b=o.NCheckbox,x=o.NText,C=o.NForm,w=o.NButton,T=o.NDivider,z=o.NTooltip;return(0,a.openBlock)(),(0,a.createElementBlock)(`div`,ee,[(0,a.createCommentVNode)(` ===== Logo / 标题区 ===== `),(0,a.createElementVNode)(`div`,l,[(0,a.renderSlot)(t.$slots,`logo`,{},()=>[O.value.logoIcon?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,te,[(0,a.createVNode)(e.t,{name:O.value.logoIcon,size:36,class:`c-login__logo-icon`},null,8,[`name`])])):(0,a.createCommentVNode)(`v-if`,!0)],!0),(0,a.createElementVNode)(`h2`,ne,(0,a.toDisplayString)(O.value.title),1),O.value.subtitle&&j.value!==`register`?((0,a.openBlock)(),(0,a.createElementBlock)(`p`,re,(0,a.toDisplayString)(O.value.subtitle),1)):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` 注册视图的副标题 `),j.value===`register`?((0,a.openBlock)(),(0,a.createElementBlock)(`p`,u,(0,a.toDisplayString)(S(`cl_register`,`注册账号`)),1)):(0,a.createCommentVNode)(`v-if`,!0)]),(0,a.createCommentVNode)(` ===== 密码登录表单(默认视图) ===== `),(0,a.withDirectives)((0,a.createVNode)(C,{ref_key:`passwordFormRef`,ref:M,model:N,rules:se,class:`c-login__form`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(c,{path:`username`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:N.username,"onUpdate:value":r[0]||=e=>N.username=e,placeholder:S(`cl_username_ph`,`请输入用户名`),clearable:``},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:account-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`password`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:N.password,"onUpdate:value":r[1]||=e=>N.password=e,type:`password`,"show-password-on":`click`,placeholder:S(`cl_password_ph`,`请输入密码`),clearable:``,onKeyup:(0,a.withKeys)(F,[`enter`])},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createCommentVNode)(` 记住我 + 忘记密码 `),k.value.rememberMe||k.value.forgotPassword?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,d,[k.value.rememberMe?((0,a.openBlock)(),(0,a.createBlock)(b,{key:0,checked:P.value,"onUpdate:checked":r[2]||=e=>P.value=e,class:`c-login__remember`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_remember`,`记住我`)),1)]),_:1},8,[`checked`])):(0,a.createCommentVNode)(`v-if`,!0),k.value.forgotPassword?((0,a.openBlock)(),(0,a.createBlock)(x,{key:1,class:`c-login__forgot`,onClick:r[3]||=e=>D(`forgot-password`)},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_forgot`,`忘记密码?`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0)])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`model`]),[[a.vShow,j.value===`password`]]),(0,a.createCommentVNode)(` ===== 验证码登录表单 ===== `),(0,a.withDirectives)((0,a.createVNode)(C,{ref_key:`captchaFormRef`,ref:I,model:L,rules:B,class:`c-login__form`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(c,{path:`account`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:L.account,"onUpdate:value":r[4]||=e=>L.account=e,placeholder:S(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`code`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,f,[(0,a.createVNode)(s,{value:L.code,"onUpdate:value":r[5]||=e=>L.code=e,placeholder:S(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`,onKeyup:(0,a.withKeys)(q,[`enter`])},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),(0,a.createVNode)(w,{disabled:R.value>0||!L.account,class:`c-login__send-code-btn`,onClick:fe},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(R.value>0?`${R.value}s ${S(`cl_resend`,`后重发`)}`:S(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1},8,[`model`]),[[a.vShow,j.value===`captcha`]]),(0,a.createCommentVNode)(` ===== 人机验证拼图(仅密码登录模式) ===== `),k.value.captchaVerify&&j.value===`password`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,p,[(0,a.createVNode)(n.t,{ref_key:`captchaRef`,ref:V,theme:`dark`,provider:E.captchaProvider,"challenge-url":E.captchaChallengeUrl,verifier:E.captchaVerifier,"require-server-verification":E.requireCaptchaServerVerification,"verification-timeout":E.captchaVerificationTimeout,onSuccess:ce,onFail:le,onChange:ue,onVisibleChange:r[6]||=e=>D(`captcha-visible-change`,e)},null,8,[`provider`,`challenge-url`,`verifier`,`require-server-verification`,`verification-timeout`])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 登录按钮(密码和验证码模式) ===== `),j.value===`password`||j.value===`captcha`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:1,type:`primary`,block:``,loading:E.loading,disabled:j.value===`password`&&k.value.captchaVerify&&!H.value,class:`c-login__submit-btn`,onClick:r[7]||=e=>j.value===`password`?F():q()},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(j.value===`password`&&k.value.captchaVerify&&!H.value?S(`cl_verify_first`,`请先完成人机验证`):S(`cl_login_btn`,`登 录`)),1)]),_:1},8,[`loading`,`disabled`])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 返回按钮(验证码子视图) ===== `),j.value===`captcha`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:2,block:``,class:`c-login__back-btn`,onClick:r[8]||=e=>j.value=`password`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_back`,`返回`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 扫码登录面板 ===== `),j.value===`qrcode`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,ie,[(0,a.createElementVNode)(`div`,ae,[J.value?((0,a.openBlock)(),(0,a.createBlock)(i.t,{key:0,value:J.value,size:148,margin:1,"show-border":!1,color:`#ffffff`,"bg-color":`#000000`,"error-correction-level":`M`},null,8,[`value`])):((0,a.openBlock)(),(0,a.createElementBlock)(`div`,oe,(0,a.toDisplayString)(S(`cl_qr_missing`,`请配置二维码地址`)),1)),J.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,m)):(0,a.createCommentVNode)(`v-if`,!0),r[18]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--tl`},null,-1),r[19]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--tr`},null,-1),r[20]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--bl`},null,-1),r[21]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--br`},null,-1)]),(0,a.createElementVNode)(`p`,h,[(0,a.createVNode)(e.t,{name:`mdi:cellphone-check`,size:13}),(0,a.createTextVNode)(` `+(0,a.toDisplayString)(S(`cl_qr_hint`,`打开手机扫码后点击「确认」即可登录`)),1)]),(0,a.createVNode)(w,{text:``,size:`tiny`,class:`c-login__qr-refresh`,onClick:pe},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:refresh`,size:12})]),default:(0,a.withCtx)(()=>[(0,a.createTextVNode)(` `+(0,a.toDisplayString)(S(`cl_qr_refresh`,`二维码已失效?点击刷新`)),1)]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 返回按钮(扫码子视图,在二维码下方) ===== `),j.value===`qrcode`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:4,block:``,class:`c-login__back-btn`,onClick:r[9]||=e=>j.value=`password`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_back`,`返回`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 注册表单 ===== `),(0,a.withDirectives)((0,a.createVNode)(C,{ref_key:`registerFormRef`,ref:Y,model:X,rules:me,class:`c-login__form`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(c,{path:`phone`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:X.phone,"onUpdate:value":r[10]||=e=>X.phone=e,placeholder:S(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`code`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,g,[(0,a.createVNode)(s,{value:X.code,"onUpdate:value":r[11]||=e=>X.code=e,placeholder:S(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),(0,a.createVNode)(w,{disabled:Z.value>0||!X.phone,class:`c-login__send-code-btn`,onClick:he},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(Z.value>0?`${Z.value}s ${S(`cl_resend`,`后重发`)}`:S(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1}),(0,a.createVNode)(c,{path:`password`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:X.password,"onUpdate:value":r[12]||=e=>X.password=e,type:`password`,"show-password-on":`click`,placeholder:S(`cl_password_ph`,`请输入密码`)},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`confirmPassword`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:X.confirmPassword,"onUpdate:value":r[13]||=e=>X.confirmPassword=e,type:`password`,"show-password-on":`click`,placeholder:S(`cl_confirm_pw_ph`,`请再次输入密码`),onKeyup:(0,a.withKeys)($,[`enter`])},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:lock-check-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1})]),_:1},8,[`model`]),[[a.vShow,j.value===`register`]]),(0,a.createCommentVNode)(` ===== 注册确认按钮 ===== `),j.value===`register`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:5,type:`primary`,block:``,loading:E.loading,class:`c-login__submit-btn`,onClick:$},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_confirm`,`确认`)),1)]),_:1},8,[`loading`])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 注册视图返回按钮 ===== `),j.value===`register`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:6,block:``,class:`c-login__back-btn`,onClick:r[14]||=e=>j.value=`password`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_back`,`返回`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 登录方式切换(仅密码登录默认视图显示) ===== `),j.value===`password`&&(k.value.captchaLogin||k.value.qrcodeLogin)?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,_,[k.value.captchaLogin?((0,a.openBlock)(),(0,a.createBlock)(w,{key:0,class:`c-login__mode-btn`,size:`small`,onClick:r[15]||=e=>j.value=`captcha`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_captcha_login`,`验证码登录`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),k.value.qrcodeLogin?((0,a.openBlock)(),(0,a.createBlock)(w,{key:1,class:`c-login__mode-btn`,size:`small`,onClick:r[16]||=e=>j.value=`qrcode`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_qr_login`,`扫码登录`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0)])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 其他登录方式(仅密码登录默认视图显示) ===== `),j.value===`password`&&k.value.socialLogin&&A.value.length?((0,a.openBlock)(),(0,a.createElementBlock)(a.Fragment,{key:8},[(0,a.createVNode)(T,{class:`c-login__divider`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_social_login`,`其他账号登录`)),1)]),_:1}),(0,a.createElementVNode)(`div`,v,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(A.value,t=>((0,a.openBlock)(),(0,a.createBlock)(z,{key:t.key,trigger:`hover`,placement:`top`},{trigger:(0,a.withCtx)(()=>[(0,a.createVNode)(w,{circle:``,class:`c-login__social-btn`,onClick:e=>D(`social-login`,t.key)},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:t.icon,size:16},null,8,[`name`])]),_:2},1032,[`onClick`])]),default:(0,a.withCtx)(()=>[(0,a.createTextVNode)(` `+(0,a.toDisplayString)(t.label),1)]),_:2},1024))),128))])],64)):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 注册入口(仅密码登录默认视图显示) ===== `),j.value===`password`&&k.value.register?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,y,[(0,a.createVNode)(x,{class:`c-login__register-hint`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_no_account`,`还没有账号?`)),1)]),_:1}),(0,a.createVNode)(x,{class:`c-login__register-link`,onClick:r[17]||=e=>j.value=`register`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_register`,`注册账号`)),1)]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0)])}}});var x=t.t(b,[[`__scopeId`,`data-v-168f3b3f`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return x}});
1
+ require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`),n=require(`./C_Captcha2.cjs`),r=require(`./storage.cjs`),i=require(`./C_QRCode2.cjs`);let a=require(`vue`),o=require(`naive-ui`);const s=[{key:`github`,label:`GitHub`,icon:`mdi:github`},{key:`wechat`,label:`微信`,icon:`mdi:wechat`},{key:`qq`,label:`QQ`,icon:`mdi:qqchat`}],c={passwordLogin:!0,captchaLogin:!0,qrcodeLogin:!0,socialLogin:!0,register:!0,captchaVerify:!0,rememberMe:!0,forgotPassword:!0},ee={class:`c-login-panel`},l={class:`c-login__header`},te={key:0,class:`c-login__logo`},ne={class:`c-login__title`},re={key:0,class:`c-login__subtitle`},u={key:1,class:`c-login__subtitle c-login__subtitle--register`},d={key:0,class:`c-login__aux-row`},f={class:`c-login__code-row`},p={key:0,class:`c-login__captcha-wrap`},ie={key:3,class:`c-login__qr-panel`},ae={class:`c-login__qr-frame`},oe={key:1,class:`c-login__qr-placeholder`},m={key:2,class:`c-login__qr-scan-line`},h={class:`c-login__qr-hint`},g={class:`c-login__code-row`},_={key:7,class:`c-login__mode-switch`},v={class:`c-login__social-row`},y={key:9,class:`c-login__register-row`},b=(0,a.defineComponent)({__name:`index`,props:{title:{default:`欢迎回来`},subtitle:{},logoIcon:{},features:{},socialProviders:{},qrcodeUrl:{},storageKey:{default:`c_login_remember`},loading:{type:Boolean,default:!1},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`],setup(t,{expose:b,emit:x}){let S=(e,t)=>{let n=globalThis.$t;return n?.(e,t,`robot_admin`)??t},C=(e,t,n)=>[{required:!0,message:`${e}不能为空`,trigger:`blur`},{validator:(e,n)=>!n||typeof n==`string`&&t.test(n),message:n,trigger:`blur`}],w=/^(?:(?:\+|00)86)?1[3-9]\d{9}$/,T=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{6,20}$/,E=t,D=x,O=(0,a.computed)(()=>({...E,features:{...c,...E.features},socialProviders:E.socialProviders??s})),k=(0,a.computed)(()=>O.value.features),A=(0,a.computed)(()=>O.value.socialProviders),j=(0,a.ref)(`password`),M=(0,a.ref)(null),N=(0,a.reactive)({username:E.defaultUsername??``,password:E.defaultPassword??``}),se={username:[{required:!0,message:S(`cl_username_rule`,`请输入用户名`),trigger:`blur`}],password:[{required:!0,message:S(`cl_password_rule`,`请输入密码`),trigger:`blur`}]},P=(0,a.ref)(!1);(0,a.watch)([P,()=>N.username],([e])=>{e?r.i(E.storageKey,{username:N.username}):r.r(E.storageKey)}),(0,a.onMounted)(()=>{let e=r.t(E.storageKey);typeof e?.username==`string`&&(N.username=e.username,P.value=!0)});let F=async()=>{try{await M.value?.validate()}catch{return}D(`submit`,{...N,...H.value?{captchaToken:U.value,captchaTimestamp:W.value,captchaType:G.value,captchaVerifiedBy:K.value}:{}})},I=(0,a.ref)(null),L=(0,a.reactive)({account:``,code:``}),R=(0,a.ref)(0),z=null,B={account:C(`手机号`,w,`手机号格式错误`),code:[{required:!0,message:S(`cl_code_rule`,`请输入验证码`),trigger:`blur`}]},V=(0,a.ref)(),H=(0,a.ref)(!1),U=(0,a.ref)(``),W=(0,a.ref)(0),G=(0,a.ref)(`puzzle-captcha`),K=(0,a.ref)(),ce=e=>{H.value=!0,U.value=e.token,W.value=e.timestamp,G.value=e.type,K.value=e.verifiedBy},le=()=>{H.value=!1},ue=e=>{H.value=e,e||(U.value=``,W.value=0,G.value=`puzzle-captcha`,K.value=void 0)},de=()=>{H.value=!1,U.value=``,W.value=0,G.value=`puzzle-captcha`,K.value=void 0,V.value?.reset()},q=async()=>{try{await I.value?.validate()}catch{return}k.value.captchaVerify&&!H.value||D(`captcha-submit`,{...L})},fe=()=>{let e=L.account.trim();R.value>0||!w.test(e)||(D(`send-code`,e),z&&=(clearInterval(z),null),R.value=60,z=setInterval(()=>{R.value--,R.value<=0&&(clearInterval(z),z=null)},1e3))},J=(0,a.computed)(()=>E.qrcodeUrl?.trim()??``),pe=()=>{D(`qrcode-refresh`)},Y=(0,a.ref)(null),X=(0,a.reactive)({phone:``,code:``,password:``,confirmPassword:``}),Z=(0,a.ref)(0),Q=null,me={phone:C(`手机号`,w,`手机号格式错误`),code:[{required:!0,message:S(`cl_code_rule`,`请输入验证码`),trigger:`blur`}],password:C(`密码`,T,`密码必须包含大小写字母和数字,长度6-20位`),confirmPassword:[{required:!0,message:S(`cl_confirm_pw_rule`,`请再次输入密码`),trigger:`blur`},{validator:(e,t)=>t===X.password?!0:Error(S(`cl_pw_mismatch`,`两次密码输入不一致`)),trigger:`blur`}]},he=()=>{let e=X.phone.trim();Z.value>0||!w.test(e)||(D(`register-send-code`,e),Q&&=(clearInterval(Q),null),Z.value=60,Q=setInterval(()=>{Z.value--,Z.value<=0&&(clearInterval(Q),Q=null)},1e3))},$=async()=>{try{await Y.value?.validate()}catch{return}D(`register-submit`,{...X})};return(0,a.onUnmounted)(()=>{z&&=(clearInterval(z),null),Q&&=(clearInterval(Q),null)}),b({resetCaptcha:de}),(t,r)=>{let s=o.NInput,c=o.NFormItem,b=o.NCheckbox,x=o.NText,C=o.NForm,w=o.NButton,T=o.NDivider,z=o.NTooltip;return(0,a.openBlock)(),(0,a.createElementBlock)(`div`,ee,[(0,a.createCommentVNode)(` ===== Logo / 标题区 ===== `),(0,a.createElementVNode)(`div`,l,[(0,a.renderSlot)(t.$slots,`logo`,{},()=>[O.value.logoIcon?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,te,[(0,a.createVNode)(e.t,{name:O.value.logoIcon,size:36,class:`c-login__logo-icon`},null,8,[`name`])])):(0,a.createCommentVNode)(`v-if`,!0)],!0),(0,a.createElementVNode)(`h2`,ne,(0,a.toDisplayString)(O.value.title),1),O.value.subtitle&&j.value!==`register`?((0,a.openBlock)(),(0,a.createElementBlock)(`p`,re,(0,a.toDisplayString)(O.value.subtitle),1)):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` 注册视图的副标题 `),j.value===`register`?((0,a.openBlock)(),(0,a.createElementBlock)(`p`,u,(0,a.toDisplayString)(S(`cl_register`,`注册账号`)),1)):(0,a.createCommentVNode)(`v-if`,!0)]),(0,a.createCommentVNode)(` ===== 密码登录表单(默认视图) ===== `),(0,a.withDirectives)((0,a.createVNode)(C,{ref_key:`passwordFormRef`,ref:M,model:N,rules:se,class:`c-login__form`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(c,{path:`username`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:N.username,"onUpdate:value":r[0]||=e=>N.username=e,placeholder:S(`cl_username_ph`,`请输入用户名`),clearable:``},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:account-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`password`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:N.password,"onUpdate:value":r[1]||=e=>N.password=e,type:`password`,"show-password-on":`click`,placeholder:S(`cl_password_ph`,`请输入密码`),clearable:``,onKeyup:(0,a.withKeys)(F,[`enter`])},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createCommentVNode)(` 记住我 + 忘记密码 `),k.value.rememberMe||k.value.forgotPassword?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,d,[k.value.rememberMe?((0,a.openBlock)(),(0,a.createBlock)(b,{key:0,checked:P.value,"onUpdate:checked":r[2]||=e=>P.value=e,class:`c-login__remember`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_remember`,`记住我`)),1)]),_:1},8,[`checked`])):(0,a.createCommentVNode)(`v-if`,!0),k.value.forgotPassword?((0,a.openBlock)(),(0,a.createBlock)(x,{key:1,class:`c-login__forgot`,onClick:r[3]||=e=>D(`forgot-password`)},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_forgot`,`忘记密码?`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0)])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`model`]),[[a.vShow,j.value===`password`]]),(0,a.createCommentVNode)(` ===== 验证码登录表单 ===== `),(0,a.withDirectives)((0,a.createVNode)(C,{ref_key:`captchaFormRef`,ref:I,model:L,rules:B,class:`c-login__form`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(c,{path:`account`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:L.account,"onUpdate:value":r[4]||=e=>L.account=e,placeholder:S(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`code`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,f,[(0,a.createVNode)(s,{value:L.code,"onUpdate:value":r[5]||=e=>L.code=e,placeholder:S(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`,onKeyup:(0,a.withKeys)(q,[`enter`])},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),(0,a.createVNode)(w,{disabled:R.value>0||!L.account,class:`c-login__send-code-btn`,onClick:fe},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(R.value>0?`${R.value}s ${S(`cl_resend`,`后重发`)}`:S(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1},8,[`model`]),[[a.vShow,j.value===`captcha`]]),(0,a.createCommentVNode)(` ===== 人机验证拼图(仅密码登录模式) ===== `),k.value.captchaVerify&&j.value===`password`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,p,[(0,a.createVNode)(n.t,{ref_key:`captchaRef`,ref:V,theme:`dark`,provider:E.captchaProvider,"challenge-url":E.captchaChallengeUrl,verifier:E.captchaVerifier,"require-server-verification":E.requireCaptchaServerVerification,"verification-timeout":E.captchaVerificationTimeout,onSuccess:ce,onFail:le,onChange:ue,onVisibleChange:r[6]||=e=>D(`captcha-visible-change`,e)},null,8,[`provider`,`challenge-url`,`verifier`,`require-server-verification`,`verification-timeout`])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 登录按钮(密码和验证码模式) ===== `),j.value===`password`||j.value===`captcha`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:1,type:`primary`,block:``,loading:E.loading,disabled:j.value===`password`&&k.value.captchaVerify&&!H.value,class:`c-login__submit-btn`,onClick:r[7]||=e=>j.value===`password`?F():q()},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(j.value===`password`&&k.value.captchaVerify&&!H.value?S(`cl_verify_first`,`请先完成人机验证`):S(`cl_login_btn`,`登 录`)),1)]),_:1},8,[`loading`,`disabled`])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 返回按钮(验证码子视图) ===== `),j.value===`captcha`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:2,block:``,class:`c-login__back-btn`,onClick:r[8]||=e=>j.value=`password`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_back`,`返回`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 扫码登录面板 ===== `),j.value===`qrcode`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,ie,[(0,a.createElementVNode)(`div`,ae,[J.value?((0,a.openBlock)(),(0,a.createBlock)(i.t,{key:0,value:J.value,size:148,margin:1,"show-border":!1,color:`#ffffff`,"bg-color":`#000000`,"error-correction-level":`M`},null,8,[`value`])):((0,a.openBlock)(),(0,a.createElementBlock)(`div`,oe,(0,a.toDisplayString)(S(`cl_qr_missing`,`请配置二维码地址`)),1)),J.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,m)):(0,a.createCommentVNode)(`v-if`,!0),r[18]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--tl`},null,-1),r[19]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--tr`},null,-1),r[20]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--bl`},null,-1),r[21]||=(0,a.createElementVNode)(`div`,{class:`c-login__qr-corner c-login__qr-corner--br`},null,-1)]),(0,a.createElementVNode)(`p`,h,[(0,a.createVNode)(e.t,{name:`mdi:cellphone-check`,size:13}),(0,a.createTextVNode)(` `+(0,a.toDisplayString)(S(`cl_qr_hint`,`打开手机扫码后点击「确认」即可登录`)),1)]),(0,a.createVNode)(w,{text:``,size:`tiny`,class:`c-login__qr-refresh`,onClick:pe},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:refresh`,size:12})]),default:(0,a.withCtx)(()=>[(0,a.createTextVNode)(` `+(0,a.toDisplayString)(S(`cl_qr_refresh`,`二维码已失效?点击刷新`)),1)]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 返回按钮(扫码子视图,在二维码下方) ===== `),j.value===`qrcode`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:4,block:``,class:`c-login__back-btn`,onClick:r[9]||=e=>j.value=`password`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_back`,`返回`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 注册表单 ===== `),(0,a.withDirectives)((0,a.createVNode)(C,{ref_key:`registerFormRef`,ref:Y,model:X,rules:me,class:`c-login__form`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(c,{path:`phone`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:X.phone,"onUpdate:value":r[10]||=e=>X.phone=e,placeholder:S(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`code`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,g,[(0,a.createVNode)(s,{value:X.code,"onUpdate:value":r[11]||=e=>X.code=e,placeholder:S(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),(0,a.createVNode)(w,{disabled:Z.value>0||!X.phone,class:`c-login__send-code-btn`,onClick:he},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(Z.value>0?`${Z.value}s ${S(`cl_resend`,`后重发`)}`:S(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1}),(0,a.createVNode)(c,{path:`password`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:X.password,"onUpdate:value":r[12]||=e=>X.password=e,type:`password`,"show-password-on":`click`,placeholder:S(`cl_password_ph`,`请输入密码`)},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),(0,a.createVNode)(c,{path:`confirmPassword`,class:`c-login__form-item`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)(s,{value:X.confirmPassword,"onUpdate:value":r[13]||=e=>X.confirmPassword=e,type:`password`,"show-password-on":`click`,placeholder:S(`cl_confirm_pw_ph`,`请再次输入密码`),onKeyup:(0,a.withKeys)($,[`enter`])},{prefix:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:`mdi:lock-check-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1})]),_:1},8,[`model`]),[[a.vShow,j.value===`register`]]),(0,a.createCommentVNode)(` ===== 注册确认按钮 ===== `),j.value===`register`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:5,type:`primary`,block:``,loading:E.loading,class:`c-login__submit-btn`,onClick:$},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_confirm`,`确认`)),1)]),_:1},8,[`loading`])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 注册视图返回按钮 ===== `),j.value===`register`?((0,a.openBlock)(),(0,a.createBlock)(w,{key:6,block:``,class:`c-login__back-btn`,onClick:r[14]||=e=>j.value=`password`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_back`,`返回`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 登录方式切换(仅密码登录默认视图显示) ===== `),j.value===`password`&&(k.value.captchaLogin||k.value.qrcodeLogin)?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,_,[k.value.captchaLogin?((0,a.openBlock)(),(0,a.createBlock)(w,{key:0,class:`c-login__mode-btn`,size:`small`,onClick:r[15]||=e=>j.value=`captcha`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_captcha_login`,`验证码登录`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0),k.value.qrcodeLogin?((0,a.openBlock)(),(0,a.createBlock)(w,{key:1,class:`c-login__mode-btn`,size:`small`,onClick:r[16]||=e=>j.value=`qrcode`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_qr_login`,`扫码登录`)),1)]),_:1})):(0,a.createCommentVNode)(`v-if`,!0)])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 其他登录方式(仅密码登录默认视图显示) ===== `),j.value===`password`&&k.value.socialLogin&&A.value.length?((0,a.openBlock)(),(0,a.createElementBlock)(a.Fragment,{key:8},[(0,a.createVNode)(T,{class:`c-login__divider`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_social_login`,`其他账号登录`)),1)]),_:1}),(0,a.createElementVNode)(`div`,v,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(A.value,t=>((0,a.openBlock)(),(0,a.createBlock)(z,{key:t.key,trigger:`hover`,placement:`top`},{trigger:(0,a.withCtx)(()=>[(0,a.createVNode)(w,{circle:``,class:`c-login__social-btn`,onClick:e=>D(`social-login`,t.key)},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(e.t,{name:t.icon,size:16},null,8,[`name`])]),_:2},1032,[`onClick`])]),default:(0,a.withCtx)(()=>[(0,a.createTextVNode)(` `+(0,a.toDisplayString)(t.label),1)]),_:2},1024))),128))])],64)):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` ===== 注册入口(仅密码登录默认视图显示) ===== `),j.value===`password`&&k.value.register?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,y,[(0,a.createVNode)(x,{class:`c-login__register-hint`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_no_account`,`还没有账号?`)),1)]),_:1}),(0,a.createVNode)(x,{class:`c-login__register-link`,onClick:r[17]||=e=>j.value=`register`},{default:(0,a.withCtx)(()=>[(0,a.createTextVNode)((0,a.toDisplayString)(S(`cl_register`,`注册账号`)),1)]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0)])}}});var x=t.t(b,[[`__scopeId`,`data-v-73103033`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return x}});
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 te,computed as o,createBlock as s,createCommentVNode as c,createElementBlock as l,createElementVNode as u,createTextVNode as d,createVNode as f,defineComponent as p,onMounted as m,onUnmounted as h,openBlock as g,reactive as _,ref as v,renderList as ne,renderSlot as re,resolveComponent as ie,toDisplayString as y,vShow as b,watch as ae,withCtx as x,withDirectives as S,withKeys as C}from"vue";import{NButton as oe,NCheckbox as se,NDivider as ce,NForm as le,NFormItem as ue,NInput as de,NText as fe,NTooltip as pe}from"naive-ui";const w=[{key:`github`,label:`GitHub`,icon:`mdi:github`},{key:`wechat`,label:`微信`,icon:`mdi:wechat`},{key:`qq`,label:`QQ`,icon:`mdi:qqchat`}],T={passwordLogin:!0,captchaLogin:!0,qrcodeLogin:!0,socialLogin:!0,register:!0,captchaVerify:!0,rememberMe:!0,forgotPassword:!0},me={class:`c-login-panel`},he={class:`c-login__header`},ge={key:0,class:`c-login__logo`},_e={class:`c-login__title`},ve={key:0,class:`c-login__subtitle`},ye={key:1,class:`c-login__subtitle c-login__subtitle--register`},be={key:0,class:`c-login__aux-row`},xe={class:`c-login__code-row`},Se={key:0,class:`c-login__captcha-wrap`},Ce={key:3,class:`c-login__qr-panel`},we={class:`c-login__qr-frame`},Te={key:1,class:`c-login__qr-placeholder`},Ee={key:2,class:`c-login__qr-scan-line`},De={class:`c-login__qr-hint`},Oe={class:`c-login__code-row`},ke={key:7,class:`c-login__mode-switch`},Ae={class:`c-login__social-row`},je={key:9,class:`c-login__register-row`};var E=t(p({__name:`index`,props:{title:{default:`欢迎回来`},subtitle:{},logoIcon:{},features:{},socialProviders:{},qrcodeUrl:{},storageKey:{default:`c_login_remember`},loading:{type:Boolean,default:!1},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`],setup(t,{expose:p,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}$/,Me=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{6,20}$/,k=t,A=ie,j=o(()=>({...k,features:{...T,...k.features},socialProviders:k.socialProviders??w})),M=o(()=>j.value.features),N=o(()=>j.value.socialProviders),P=v(`password`),Ne=v(null),F=_({username:k.defaultUsername??``,password:k.defaultPassword??``}),Pe={username:[{required:!0,message:E(`cl_username_rule`,`请输入用户名`),trigger:`blur`}],password:[{required:!0,message:E(`cl_password_rule`,`请输入密码`),trigger:`blur`}]},I=v(!1);ae(I,e=>{e?r(k.storageKey,{username:F.username}):i(k.storageKey)}),m(()=>{let e=a(k.storageKey);typeof e?.username==`string`&&(F.username=e.username,I.value=!0)});let L=async()=>{try{await Ne.value?.validate()}catch{return}A(`submit`,{...F,...U.value?{captchaToken:W.value,captchaTimestamp:G.value,captchaType:K.value,captchaVerifiedBy:q.value}:{}})},R=v(null),z=_({account:``,code:``}),B=v(0),V=null,Fe={account:D(`手机号`,O,`手机号格式错误`),code:[{required:!0,message:E(`cl_code_rule`,`请输入验证码`),trigger:`blur`}]},H=v(),U=v(!1),W=v(``),G=v(0),K=v(`puzzle-captcha`),q=v(),Ie=e=>{U.value=!0,W.value=e.token,G.value=e.timestamp,K.value=e.type,q.value=e.verifiedBy},Le=()=>{U.value=!1},Re=e=>{U.value=e,e||(W.value=``,G.value=0,K.value=`puzzle-captcha`,q.value=void 0)},ze=()=>{U.value=!1,W.value=``,G.value=0,K.value=`puzzle-captcha`,q.value=void 0,H.value?.reset()},J=async()=>{try{await R.value?.validate()}catch{return}M.value.captchaVerify&&!U.value||A(`captcha-submit`,{...z})},Be=()=>{z.account&&(A(`send-code`,z.account),V&&=(clearInterval(V),null),B.value=60,V=setInterval(()=>{B.value--,B.value<=0&&(clearInterval(V),V=null)},1e3))},Y=o(()=>k.qrcodeUrl?.trim()??``),Ve=()=>{A(`qrcode-refresh`)},X=v(null),Z=_({phone:``,code:``,password:``,confirmPassword:``}),Q=v(0),$=null,He={phone:D(`手机号`,O,`手机号格式错误`),code:[{required:!0,message:E(`cl_code_rule`,`请输入验证码`),trigger:`blur`}],password:D(`密码`,Me,`密码必须包含大小写字母和数字,长度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`}]},Ue=()=>{Z.phone&&(A(`register-send-code`,Z.phone),$&&=(clearInterval($),null),Q.value=60,$=setInterval(()=>{Q.value--,Q.value<=0&&(clearInterval($),$=null)},1e3))},We=async()=>{try{await X.value?.validate()}catch{return}A(`register-submit`,{...Z})};return h(()=>{V&&=(clearInterval(V),null),$&&=(clearInterval($),null)}),p({resetCaptcha:ze}),(t,r)=>{let i=de,a=ue,o=se,p=fe,m=le,h=oe,_=ce,v=pe;return g(),l(`div`,me,[c(` ===== Logo / 标题区 ===== `),u(`div`,he,[re(t.$slots,`logo`,{},()=>[j.value.logoIcon?(g(),l(`div`,ge,[f(e,{name:j.value.logoIcon,size:36,class:`c-login__logo-icon`},null,8,[`name`])])):c(`v-if`,!0)],!0),u(`h2`,_e,y(j.value.title),1),j.value.subtitle&&P.value!==`register`?(g(),l(`p`,ve,y(j.value.subtitle),1)):c(`v-if`,!0),c(` 注册视图的副标题 `),P.value===`register`?(g(),l(`p`,ye,y(E(`cl_register`,`注册账号`)),1)):c(`v-if`,!0)]),c(` ===== 密码登录表单(默认视图) ===== `),S(f(m,{ref_key:`passwordFormRef`,ref:Ne,model:F,rules:Pe,class:`c-login__form`},{default:x(()=>[f(a,{path:`username`,class:`c-login__form-item`},{default:x(()=>[f(i,{value:F.username,"onUpdate:value":r[0]||=e=>F.username=e,placeholder:E(`cl_username_ph`,`请输入用户名`),clearable:``},{prefix:x(()=>[f(e,{name:`mdi:account-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),f(a,{path:`password`,class:`c-login__form-item`},{default:x(()=>[f(i,{value:F.password,"onUpdate:value":r[1]||=e=>F.password=e,type:`password`,"show-password-on":`click`,placeholder:E(`cl_password_ph`,`请输入密码`),clearable:``,onKeyup:C(L,[`enter`])},{prefix:x(()=>[f(e,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),c(` 记住我 + 忘记密码 `),M.value.rememberMe||M.value.forgotPassword?(g(),l(`div`,be,[M.value.rememberMe?(g(),s(o,{key:0,checked:I.value,"onUpdate:checked":r[2]||=e=>I.value=e,class:`c-login__remember`},{default:x(()=>[d(y(E(`cl_remember`,`记住我`)),1)]),_:1},8,[`checked`])):c(`v-if`,!0),M.value.forgotPassword?(g(),s(p,{key:1,class:`c-login__forgot`,onClick:r[3]||=e=>A(`forgot-password`)},{default:x(()=>[d(y(E(`cl_forgot`,`忘记密码?`)),1)]),_:1})):c(`v-if`,!0)])):c(`v-if`,!0)]),_:1},8,[`model`]),[[b,P.value===`password`]]),c(` ===== 验证码登录表单 ===== `),S(f(m,{ref_key:`captchaFormRef`,ref:R,model:z,rules:Fe,class:`c-login__form`},{default:x(()=>[f(a,{path:`account`,class:`c-login__form-item`},{default:x(()=>[f(i,{value:z.account,"onUpdate:value":r[4]||=e=>z.account=e,placeholder:E(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:x(()=>[f(e,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),f(a,{path:`code`,class:`c-login__form-item`},{default:x(()=>[u(`div`,xe,[f(i,{value:z.code,"onUpdate:value":r[5]||=e=>z.code=e,placeholder:E(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`,onKeyup:C(J,[`enter`])},{prefix:x(()=>[f(e,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),f(h,{disabled:B.value>0||!z.account,class:`c-login__send-code-btn`,onClick:Be},{default:x(()=>[d(y(B.value>0?`${B.value}s ${E(`cl_resend`,`后重发`)}`:E(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1},8,[`model`]),[[b,P.value===`captcha`]]),c(` ===== 人机验证拼图(仅密码登录模式) ===== `),M.value.captchaVerify&&P.value===`password`?(g(),l(`div`,Se,[f(n,{ref_key:`captchaRef`,ref:H,theme:`dark`,provider:k.captchaProvider,"challenge-url":k.captchaChallengeUrl,verifier:k.captchaVerifier,"require-server-verification":k.requireCaptchaServerVerification,"verification-timeout":k.captchaVerificationTimeout,onSuccess:Ie,onFail:Le,onChange:Re,onVisibleChange:r[6]||=e=>A(`captcha-visible-change`,e)},null,8,[`provider`,`challenge-url`,`verifier`,`require-server-verification`,`verification-timeout`])])):c(`v-if`,!0),c(` ===== 登录按钮(密码和验证码模式) ===== `),P.value===`password`||P.value===`captcha`?(g(),s(h,{key:1,type:`primary`,block:``,loading:k.loading,disabled:P.value===`password`&&M.value.captchaVerify&&!U.value,class:`c-login__submit-btn`,onClick:r[7]||=e=>P.value===`password`?L():J()},{default:x(()=>[d(y(P.value===`password`&&M.value.captchaVerify&&!U.value?E(`cl_verify_first`,`请先完成人机验证`):E(`cl_login_btn`,`登 录`)),1)]),_:1},8,[`loading`,`disabled`])):c(`v-if`,!0),c(` ===== 返回按钮(验证码子视图) ===== `),P.value===`captcha`?(g(),s(h,{key:2,block:``,class:`c-login__back-btn`,onClick:r[8]||=e=>P.value=`password`},{default:x(()=>[d(y(E(`cl_back`,`返回`)),1)]),_:1})):c(`v-if`,!0),c(` ===== 扫码登录面板 ===== `),P.value===`qrcode`?(g(),l(`div`,Ce,[u(`div`,we,[Y.value?(g(),s(ee,{key:0,value:Y.value,size:148,margin:1,"show-border":!1,color:`#ffffff`,"bg-color":`#000000`,"error-correction-level":`M`},null,8,[`value`])):(g(),l(`div`,Te,y(E(`cl_qr_missing`,`请配置二维码地址`)),1)),Y.value?(g(),l(`div`,Ee)):c(`v-if`,!0),r[18]||=u(`div`,{class:`c-login__qr-corner c-login__qr-corner--tl`},null,-1),r[19]||=u(`div`,{class:`c-login__qr-corner c-login__qr-corner--tr`},null,-1),r[20]||=u(`div`,{class:`c-login__qr-corner c-login__qr-corner--bl`},null,-1),r[21]||=u(`div`,{class:`c-login__qr-corner c-login__qr-corner--br`},null,-1)]),u(`p`,De,[f(e,{name:`mdi:cellphone-check`,size:13}),d(` `+y(E(`cl_qr_hint`,`打开手机扫码后点击「确认」即可登录`)),1)]),f(h,{text:``,size:`tiny`,class:`c-login__qr-refresh`,onClick:Ve},{icon:x(()=>[f(e,{name:`mdi:refresh`,size:12})]),default:x(()=>[d(` `+y(E(`cl_qr_refresh`,`二维码已失效?点击刷新`)),1)]),_:1})])):c(`v-if`,!0),c(` ===== 返回按钮(扫码子视图,在二维码下方) ===== `),P.value===`qrcode`?(g(),s(h,{key:4,block:``,class:`c-login__back-btn`,onClick:r[9]||=e=>P.value=`password`},{default:x(()=>[d(y(E(`cl_back`,`返回`)),1)]),_:1})):c(`v-if`,!0),c(` ===== 注册表单 ===== `),S(f(m,{ref_key:`registerFormRef`,ref:X,model:Z,rules:He,class:`c-login__form`},{default:x(()=>[f(a,{path:`phone`,class:`c-login__form-item`},{default:x(()=>[f(i,{value:Z.phone,"onUpdate:value":r[10]||=e=>Z.phone=e,placeholder:E(`cl_phone_ph`,`请输入手机号`),clearable:``,maxlength:`11`},{prefix:x(()=>[f(e,{name:`mdi:cellphone`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),f(a,{path:`code`,class:`c-login__form-item`},{default:x(()=>[u(`div`,Oe,[f(i,{value:Z.code,"onUpdate:value":r[11]||=e=>Z.code=e,placeholder:E(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`},{prefix:x(()=>[f(e,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),f(h,{disabled:Q.value>0||!Z.phone,class:`c-login__send-code-btn`,onClick:Ue},{default:x(()=>[d(y(Q.value>0?`${Q.value}s ${E(`cl_resend`,`后重发`)}`:E(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1}),f(a,{path:`password`,class:`c-login__form-item`},{default:x(()=>[f(i,{value:Z.password,"onUpdate:value":r[12]||=e=>Z.password=e,type:`password`,"show-password-on":`click`,placeholder:E(`cl_password_ph`,`请输入密码`)},{prefix:x(()=>[f(e,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),f(a,{path:`confirmPassword`,class:`c-login__form-item`},{default:x(()=>[f(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:C(We,[`enter`])},{prefix:x(()=>[f(e,{name:`mdi:lock-check-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1})]),_:1},8,[`model`]),[[b,P.value===`register`]]),c(` ===== 注册确认按钮 ===== `),P.value===`register`?(g(),s(h,{key:5,type:`primary`,block:``,loading:k.loading,class:`c-login__submit-btn`,onClick:We},{default:x(()=>[d(y(E(`cl_confirm`,`确认`)),1)]),_:1},8,[`loading`])):c(`v-if`,!0),c(` ===== 注册视图返回按钮 ===== `),P.value===`register`?(g(),s(h,{key:6,block:``,class:`c-login__back-btn`,onClick:r[14]||=e=>P.value=`password`},{default:x(()=>[d(y(E(`cl_back`,`返回`)),1)]),_:1})):c(`v-if`,!0),c(` ===== 登录方式切换(仅密码登录默认视图显示) ===== `),P.value===`password`&&(M.value.captchaLogin||M.value.qrcodeLogin)?(g(),l(`div`,ke,[M.value.captchaLogin?(g(),s(h,{key:0,class:`c-login__mode-btn`,size:`small`,onClick:r[15]||=e=>P.value=`captcha`},{default:x(()=>[d(y(E(`cl_captcha_login`,`验证码登录`)),1)]),_:1})):c(`v-if`,!0),M.value.qrcodeLogin?(g(),s(h,{key:1,class:`c-login__mode-btn`,size:`small`,onClick:r[16]||=e=>P.value=`qrcode`},{default:x(()=>[d(y(E(`cl_qr_login`,`扫码登录`)),1)]),_:1})):c(`v-if`,!0)])):c(`v-if`,!0),c(` ===== 其他登录方式(仅密码登录默认视图显示) ===== `),P.value===`password`&&M.value.socialLogin&&N.value.length?(g(),l(te,{key:8},[f(_,{class:`c-login__divider`},{default:x(()=>[d(y(E(`cl_social_login`,`其他账号登录`)),1)]),_:1}),u(`div`,Ae,[(g(!0),l(te,null,ne(N.value,t=>(g(),s(v,{key:t.key,trigger:`hover`,placement:`top`},{trigger:x(()=>[f(h,{circle:``,class:`c-login__social-btn`,onClick:e=>A(`social-login`,t.key)},{icon:x(()=>[f(e,{name:t.icon,size:16},null,8,[`name`])]),_:2},1032,[`onClick`])]),default:x(()=>[d(` `+y(t.label),1)]),_:2},1024))),128))])],64)):c(`v-if`,!0),c(` ===== 注册入口(仅密码登录默认视图显示) ===== `),P.value===`password`&&M.value.register?(g(),l(`div`,je,[f(p,{class:`c-login__register-hint`},{default:x(()=>[d(y(E(`cl_no_account`,`还没有账号?`)),1)]),_:1}),f(p,{class:`c-login__register-link`,onClick:r[17]||=e=>P.value=`register`},{default:x(()=>[d(y(E(`cl_register`,`注册账号`)),1)]),_:1})])):c(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-168f3b3f`]]);export{T as n,w as r,E 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{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},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`],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),Me=s(()=>M.value.socialProviders),P=y(`password`),F=y(null),I=v({username:A.defaultUsername??``,password:A.defaultPassword??``}),Ne={username:[{required:!0,message:D(`cl_username_rule`,`请输入用户名`),trigger:`blur`}],password:[{required:!0,message:D(`cl_password_rule`,`请输入密码`),trigger:`blur`}]},L=y(!1);ie([L,()=>I.username],([e])=>{e?r(A.storageKey,{username:I.username}):i(A.storageKey)}),h(()=>{let e=a(A.storageKey);typeof e?.username==`string`&&(I.username=e.username,L.value=!0)});let R=async()=>{try{await F.value?.validate()}catch{return}j(`submit`,{...I,...W.value?{captchaToken:G.value,captchaTimestamp:K.value,captchaType:q.value,captchaVerifiedBy:J.value}:{}})},z=y(null),B=v({account:``,code:``}),V=y(0),H=null,Pe={account:O(`手机号`,k,`手机号格式错误`),code:[{required:!0,message:D(`cl_code_rule`,`请输入验证码`),trigger:`blur`}]},U=y(),W=y(!1),G=y(``),K=y(0),q=y(`puzzle-captcha`),J=y(),Fe=e=>{W.value=!0,G.value=e.token,K.value=e.timestamp,q.value=e.type,J.value=e.verifiedBy},Ie=()=>{W.value=!1},Le=e=>{W.value=e,e||(G.value=``,K.value=0,q.value=`puzzle-captcha`,J.value=void 0)},Re=()=>{W.value=!1,G.value=``,K.value=0,q.value=`puzzle-captcha`,J.value=void 0,U.value?.reset()},Y=async()=>{try{await z.value?.validate()}catch{return}N.value.captchaVerify&&!W.value||j(`captcha-submit`,{...B})},ze=()=>{let e=B.account.trim();V.value>0||!k.test(e)||(j(`send-code`,e),H&&=(clearInterval(H),null),V.value=60,H=setInterval(()=>{V.value--,V.value<=0&&(clearInterval(H),H=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(()=>{H&&=(clearInterval(H),null),$&&=(clearInterval($),null)}),m({resetCaptcha:Re}),(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&&P.value!==`register`?(_(),u(`p`,_e,b(M.value.subtitle),1)):l(`v-if`,!0),l(` 注册视图的副标题 `),P.value===`register`?(_(),u(`p`,ve,b(D(`cl_register`,`注册账号`)),1)):l(`v-if`,!0)]),l(` ===== 密码登录表单(默认视图) ===== `),C(p(h,{ref_key:`passwordFormRef`,ref:F,model:I,rules:Ne,class:`c-login__form`},{default:S(()=>[p(a,{path:`username`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:I.username,"onUpdate:value":r[0]||=e=>I.username=e,placeholder:D(`cl_username_ph`,`请输入用户名`),clearable:``},{prefix:S(()=>[p(e,{name:`mdi:account-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),p(a,{path:`password`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:I.password,"onUpdate:value":r[1]||=e=>I.password=e,type:`password`,"show-password-on":`click`,placeholder:D(`cl_password_ph`,`请输入密码`),clearable:``,onKeyup:w(R,[`enter`])},{prefix:S(()=>[p(e,{name:`mdi:lock-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`])]),_:1}),l(` 记住我 + 忘记密码 `),N.value.rememberMe||N.value.forgotPassword?(_(),u(`div`,ye,[N.value.rememberMe?(_(),c(s,{key:0,checked:L.value,"onUpdate:checked":r[2]||=e=>L.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)]),_:1},8,[`model`]),[[x,P.value===`password`]]),l(` ===== 验证码登录表单 ===== `),C(p(h,{ref_key:`captchaFormRef`,ref:z,model:B,rules:Pe,class:`c-login__form`},{default:S(()=>[p(a,{path:`account`,class:`c-login__form-item`},{default:S(()=>[p(i,{value:B.account,"onUpdate:value":r[4]||=e=>B.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:B.code,"onUpdate:value":r[5]||=e=>B.code=e,placeholder:D(`cl_code_ph`,`请输入验证码`),clearable:``,class:`c-login__code-input`,onKeyup:w(Y,[`enter`])},{prefix:S(()=>[p(e,{name:`mdi:shield-key-outline`,size:16,class:`c-login__input-icon`})]),_:1},8,[`value`,`placeholder`]),p(g,{disabled:V.value>0||!B.account,class:`c-login__send-code-btn`,onClick:ze},{default:S(()=>[f(b(V.value>0?`${V.value}s ${D(`cl_resend`,`后重发`)}`:D(`cl_get_code`,`获取验证码`)),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1},8,[`model`]),[[x,P.value===`captcha`]]),l(` ===== 人机验证拼图(仅密码登录模式) ===== `),N.value.captchaVerify&&P.value===`password`?(_(),u(`div`,xe,[p(n,{ref_key:`captchaRef`,ref:U,theme:`dark`,provider:A.captchaProvider,"challenge-url":A.captchaChallengeUrl,verifier:A.captchaVerifier,"require-server-verification":A.requireCaptchaServerVerification,"verification-timeout":A.captchaVerificationTimeout,onSuccess:Fe,onFail:Ie,onChange:Le,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(` ===== 登录按钮(密码和验证码模式) ===== `),P.value===`password`||P.value===`captcha`?(_(),c(g,{key:1,type:`primary`,block:``,loading:A.loading,disabled:P.value===`password`&&N.value.captchaVerify&&!W.value,class:`c-login__submit-btn`,onClick:r[7]||=e=>P.value===`password`?R():Y()},{default:S(()=>[f(b(P.value===`password`&&N.value.captchaVerify&&!W.value?D(`cl_verify_first`,`请先完成人机验证`):D(`cl_login_btn`,`登 录`)),1)]),_:1},8,[`loading`,`disabled`])):l(`v-if`,!0),l(` ===== 返回按钮(验证码子视图) ===== `),P.value===`captcha`?(_(),c(g,{key:2,block:``,class:`c-login__back-btn`,onClick:r[8]||=e=>P.value=`password`},{default:S(()=>[f(b(D(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 扫码登录面板 ===== `),P.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(` ===== 返回按钮(扫码子视图,在二维码下方) ===== `),P.value===`qrcode`?(_(),c(g,{key:4,block:``,class:`c-login__back-btn`,onClick:r[9]||=e=>P.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,P.value===`register`]]),l(` ===== 注册确认按钮 ===== `),P.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(` ===== 注册视图返回按钮 ===== `),P.value===`register`?(_(),c(g,{key:6,block:``,class:`c-login__back-btn`,onClick:r[14]||=e=>P.value=`password`},{default:S(()=>[f(b(D(`cl_back`,`返回`)),1)]),_:1})):l(`v-if`,!0),l(` ===== 登录方式切换(仅密码登录默认视图显示) ===== `),P.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=>P.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=>P.value=`qrcode`},{default:S(()=>[f(b(D(`cl_qr_login`,`扫码登录`)),1)]),_:1})):l(`v-if`,!0)])):l(`v-if`,!0),l(` ===== 其他登录方式(仅密码登录默认视图显示) ===== `),P.value===`password`&&N.value.socialLogin&&Me.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(Me.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(` ===== 注册入口(仅密码登录默认视图显示) ===== `),P.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=>P.value=`register`},{default:S(()=>[f(b(D(`cl_register`,`注册账号`)),1)]),_:1})])):l(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-73103033`]]);export{E as n,T as r,D as t};
package/dist/C_Map.css CHANGED
@@ -660,7 +660,7 @@ svg.leaflet-image-layer.leaflet-interactive path {
660
660
  }
661
661
  }
662
662
 
663
- /* unplugin-vue-components disabled */.c-map[data-v-55f6be95] {
663
+ /* unplugin-vue-components disabled */.c-map[data-v-4f3f367e] {
664
664
  position: relative;
665
665
  width: 100%;
666
666
  min-height: 300px;
@@ -668,13 +668,13 @@ svg.leaflet-image-layer.leaflet-interactive path {
668
668
  border-radius: var(--c-radius-sm, 4px);
669
669
  overflow: hidden;
670
670
  }
671
- .c-map .map-container[data-v-55f6be95] {
671
+ .c-map .map-container[data-v-4f3f367e] {
672
672
  width: 100%;
673
673
  height: 100%;
674
674
  border-radius: inherit;
675
675
  overflow: hidden;
676
676
  }
677
- .c-map .map-loading[data-v-55f6be95] {
677
+ .c-map .map-loading[data-v-4f3f367e] {
678
678
  position: absolute;
679
679
  top: 0;
680
680
  left: 0;
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({reset:!0,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-55f6be95`]]);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;!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-4f3f367e`]]);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({reset:!0,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-55f6be95`]]);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;!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-4f3f367e`]]);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};
@@ -897,7 +897,7 @@
897
897
  opacity: 0.6;
898
898
  }
899
899
  /* unplugin-vue-components disabled *//* C_Markdown 组件样式文件 */
900
- .c-markdown-wrapper[data-v-c27723d0] {
900
+ .c-markdown-wrapper[data-v-3ae0ff30] {
901
901
  --c-markdown-dark-icon-color: #ffffff;
902
902
  --c-markdown-dark-hover-bg: rgba(255, 255, 255, 0.08);
903
903
  --c-markdown-dark-active-bg: rgba(255, 255, 255, 0.12);
@@ -906,108 +906,108 @@
906
906
  --c-markdown-dark-scrollbar-hover: rgba(255, 255, 255, 0.3);
907
907
  position: relative;
908
908
  }
909
- .c-markdown-wrapper[data-v-c27723d0] .md-editor {
909
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor {
910
910
  border-radius: 6px;
911
911
  border: 1px solid var(--c-border);
912
912
  background-color: var(--c-bg-card);
913
913
  }
914
- .c-markdown-wrapper[data-v-c27723d0] .md-editor:hover {
914
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor:hover {
915
915
  border-color: var(--c-primary);
916
916
  }
917
- .c-markdown-wrapper[data-v-c27723d0] .md-editor:focus-within {
917
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor:focus-within {
918
918
  border-color: var(--c-primary);
919
919
  box-shadow: 0 0 0 2px var(--c-primary-opacity, rgba(24, 160, 88, 0.2));
920
920
  }
921
- .c-markdown-wrapper[data-v-c27723d0] .md-editor {
921
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor {
922
922
  /* 禁用状态样式 */
923
923
  }
924
- .c-markdown-wrapper[data-v-c27723d0] .md-editor.md-editor-disabled {
924
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor.md-editor-disabled {
925
925
  background-color: var(--c-bg-disabled, #fafafc);
926
926
  cursor: not-allowed;
927
927
  }
928
- .c-markdown-wrapper[data-v-c27723d0] .md-editor.md-editor-disabled .md-editor-input {
928
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor.md-editor-disabled .md-editor-input {
929
929
  cursor: not-allowed;
930
930
  }
931
- .c-markdown-wrapper[data-v-c27723d0] .md-editor .md-editor-toolbar-wrapper {
931
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor .md-editor-toolbar-wrapper {
932
932
  background-color: var(--c-bg-card);
933
933
  border-bottom: 1px solid var(--c-border);
934
934
  }
935
- .c-markdown-wrapper[data-v-c27723d0] .md-editor .md-editor-input-wrapper {
935
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor .md-editor-input-wrapper {
936
936
  background-color: var(--c-bg-card);
937
937
  }
938
- .c-markdown-wrapper[data-v-c27723d0] .md-editor .md-editor-input {
938
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor .md-editor-input {
939
939
  background-color: var(--c-bg-card);
940
940
  color: var(--c-text-1);
941
941
  }
942
- .c-markdown-wrapper[data-v-c27723d0] .md-editor .md-editor-input textarea {
942
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor .md-editor-input textarea {
943
943
  color: var(--c-text-1);
944
944
  caret-color: var(--c-text-1);
945
945
  }
946
- .c-markdown-wrapper[data-v-c27723d0] .md-editor .md-editor-preview-wrapper {
946
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor .md-editor-preview-wrapper {
947
947
  background-color: var(--c-bg-card);
948
948
  }
949
- .c-markdown-wrapper[data-v-c27723d0] .md-editor .md-editor-preview {
949
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor .md-editor-preview {
950
950
  background-color: var(--c-bg-card);
951
951
  color: var(--c-text-1);
952
952
  }
953
- .c-markdown-wrapper[data-v-c27723d0] .md-editor .md-editor-catalog-editor {
953
+ .c-markdown-wrapper[data-v-3ae0ff30] .md-editor .md-editor-catalog-editor {
954
954
  background-color: var(--c-bg-card);
955
955
  border-left: 1px solid var(--c-border);
956
956
  }
957
- .c-markdown-wrapper.toc-left[data-v-c27723d0] .md-editor-catalog-flat {
957
+ .c-markdown-wrapper.toc-left[data-v-3ae0ff30] .md-editor-catalog-flat {
958
958
  order: -1;
959
959
  }
960
- .c-markdown-wrapper.toc-left[data-v-c27723d0] .md-editor-catalog-flat .md-editor-catalog-editor {
960
+ .c-markdown-wrapper.toc-left[data-v-3ae0ff30] .md-editor-catalog-flat .md-editor-catalog-editor {
961
961
  border-inline-start: 0;
962
962
  border-inline-end: 1px solid var(--c-border);
963
963
  }
964
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-item {
964
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-item {
965
965
  color: var(--c-markdown-dark-icon-color);
966
966
  }
967
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-item:hover {
967
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-item:hover {
968
968
  background-color: var(--c-markdown-dark-hover-bg);
969
969
  }
970
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-item.md-editor-toolbar-active {
970
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-item.md-editor-toolbar-active {
971
971
  background-color: var(--c-markdown-dark-active-bg);
972
972
  }
973
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-item svg {
973
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-item svg {
974
974
  fill: var(--c-markdown-dark-icon-color);
975
975
  opacity: 0.9;
976
976
  }
977
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-item:hover svg {
977
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-item:hover svg {
978
978
  opacity: 1;
979
979
  }
980
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-right .md-editor-toolbar-item {
980
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-right .md-editor-toolbar-item {
981
981
  background-color: transparent;
982
982
  }
983
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-right .md-editor-toolbar-item svg {
983
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-right .md-editor-toolbar-item svg {
984
984
  fill: var(--c-markdown-dark-icon-color);
985
985
  }
986
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-toolbar-right .md-editor-toolbar-item:hover {
986
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-toolbar-right .md-editor-toolbar-item:hover {
987
987
  background-color: var(--c-markdown-dark-hover-bg);
988
988
  }
989
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-divider {
989
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-divider {
990
990
  background-color: var(--c-border);
991
991
  }
992
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-input::-webkit-scrollbar,
993
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-preview::-webkit-scrollbar {
992
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-input::-webkit-scrollbar,
993
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-preview::-webkit-scrollbar {
994
994
  width: 8px;
995
995
  height: 8px;
996
996
  }
997
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-input::-webkit-scrollbar-track,
998
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-preview::-webkit-scrollbar-track {
997
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-input::-webkit-scrollbar-track,
998
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-preview::-webkit-scrollbar-track {
999
999
  background-color: var(--c-markdown-dark-scrollbar-track);
1000
1000
  }
1001
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-input::-webkit-scrollbar-thumb,
1002
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-preview::-webkit-scrollbar-thumb {
1001
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-input::-webkit-scrollbar-thumb,
1002
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-preview::-webkit-scrollbar-thumb {
1003
1003
  background-color: var(--c-markdown-dark-scrollbar-thumb);
1004
1004
  border-radius: 4px;
1005
1005
  }
1006
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-input::-webkit-scrollbar-thumb:hover,
1007
- .c-markdown-wrapper.is-dark[data-v-c27723d0] .md-editor .md-editor-preview::-webkit-scrollbar-thumb:hover {
1006
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-input::-webkit-scrollbar-thumb:hover,
1007
+ .c-markdown-wrapper.is-dark[data-v-3ae0ff30] .md-editor .md-editor-preview::-webkit-scrollbar-thumb:hover {
1008
1008
  background-color: var(--c-markdown-dark-scrollbar-hover);
1009
1009
  }
1010
- .c-markdown-wrapper .word-count[data-v-c27723d0] {
1010
+ .c-markdown-wrapper .word-count[data-v-3ae0ff30] {
1011
1011
  position: absolute;
1012
1012
  bottom: 8px;
1013
1013
  right: 12px;
@@ -1018,6 +1018,6 @@
1018
1018
  border-radius: 4px;
1019
1019
  z-index: 10;
1020
1020
  }
1021
- .c-markdown-wrapper .word-count.exceed[data-v-c27723d0] {
1021
+ .c-markdown-wrapper .word-count.exceed[data-v-3ae0ff30] {
1022
1022
  color: var(--c-error);
1023
1023
  }
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./export-helper.cjs`),t=require(`./html.cjs`);let n=require(`vue`),r=require(`md-editor-v3`);const i=(0,n.defineComponent)({name:`C_Markdown`,__name:`index`,props:{modelValue:{default:``},editorId:{},height:{default:`400px`},disabled:{type:Boolean,default:!1},placeholder:{default:`请输入 Markdown 内容...`},mode:{default:`editable`},toolbar:{},uploadImageConfig:{},tocNavPosition:{default:`right`},defaultFullscreen:{type:Boolean,default:!1},autofocus:{type:Boolean,default:!1},includeLevel:{default:()=>[1,2,3,4,5,6]},leftToolbar:{default:`undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save`},rightToolbar:{default:`preview toc sync-scroll fullscreen`},maxLength:{default:5e4},showWordCount:{type:Boolean,default:!0},autoSave:{type:Boolean,default:!1},autoSaveInterval:{default:3e4},isDark:{type:Boolean,default:!1}},emits:[`update:modelValue`,`change`,`save`,`upload-image`,`fullscreen-change`,`copy-code-success`,`word-count-change`,`auto-save`,`max-length-exceeded`],setup(e,{expose:i,emit:a}){let o=r.MdEditor,s=e,c=a,l=(0,n.getCurrentInstance)(),u=(0,n.ref)(),d=(0,n.ref)(``),f=(0,n.ref)(s.modelValue),p=l?.uid??0,m=(0,n.computed)(()=>s.editorId||`c-markdown-editor-${p}`),h=(0,n.computed)(()=>s.modelValue?.length||0),g=(0,n.computed)(()=>s.disabled?`preview`:s.mode),_=(0,n.computed)(()=>{let e=s.includeLevel.filter(e=>Number.isInteger(e)&&e>=1&&e<=6);return e.length>0?Math.max(...e):6}),v=(0,n.computed)(()=>typeof l?.vnode.props?.onUploadImage==`function`),y={undo:`revoke`,redo:`next`,h:`title`,bold:`bold`,italic:`italic`,strikethrough:`strikeThrough`,quote:`quote`,ul:`unorderedList`,ol:`orderedList`,table:`table`,hr:`horizontalLine`,link:`link`,image:`image`,code:`code`,save:`save`,preview:`preview`,toc:`catalog`,fullscreen:`fullscreen`},b=(0,n.computed)(()=>{if(Array.isArray(s.toolbar))return[...s.toolbar];let e=`${s.leftToolbar} ${s.rightToolbar}`.split(/[\s|]+/).map(e=>y[e]).filter(e=>e!==void 0);return[...new Set(e)]});(0,n.onMounted)(()=>{s.showWordCount&&s.modelValue&&c(`word-count-change`,s.modelValue.length)}),(0,n.watch)(()=>s.modelValue,e=>{s.showWordCount&&c(`word-count-change`,e?.length||0)},{immediate:!0});let x=e=>{if(e.length>s.maxLength){c(`max-length-exceeded`,e.length,s.maxLength);return}f.value=e,c(`update:modelValue`,e),s.showWordCount&&c(`word-count-change`,e.length)},S=e=>{d.value=e,c(`change`,f.value,e),s.autoSave&&D(f.value)},C=async(e,t)=>{c(`save`,e,await t)},w=(e,t)=>{let n=e.filter(e=>O(e,s.uploadImageConfig?.accept)),r=s.uploadImageConfig?.multiple?n:n.slice(0,1);if(r.length===0)return;let i=new DataTransfer;r.forEach(e=>i.items.add(e)),c(`upload-image`,new Event(`upload-image`),e=>{t([{url:e.url,alt:e.desc??``,title:e.desc??``}])},i.files)},T=e=>(c(`copy-code-success`,e),e),E=null,D=e=>{E&&clearTimeout(E),E=setTimeout(()=>{c(`auto-save`,e)},s.autoSaveInterval)};(0,n.onBeforeUnmount)(()=>{E&&clearTimeout(E)}),(0,n.onMounted)(()=>{u.value?.on(`fullscreen`,e=>{c(`fullscreen-change`,e)}),s.defaultFullscreen&&u.value?.toggleFullscreen(!0)}),i({focus:()=>{u.value?.focus()},getHtml:()=>d.value,insertText:e=>{u.value?.insert(t=>({targetValue:`${t}${e}`,select:!0,deviationStart:-e.length,deviationEnd:0}))},wordCount:h});function O(e,t){return t?.trim()?t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean).some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t):t.endsWith(`/*`)?e.type.toLowerCase().startsWith(t.slice(0,-1)):e.type.toLowerCase()===t):!0}return(r,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`c-markdown-wrapper`,{"is-dark":e.isDark,"toc-left":e.tocNavPosition===`left`}])},[(0,n.createVNode)((0,n.unref)(o),{id:m.value,ref_key:`editorRef`,ref:u,"model-value":e.modelValue,height:e.height,placeholder:e.placeholder,theme:e.isDark?`dark`:`light`,preview:g.value!==`edit`,"preview-only":g.value===`preview`,"read-only":e.disabled,"auto-focus":e.autofocus,"max-length":e.maxLength,toolbars:b.value,footers:e.showWordCount?[`markdownTotal`,`=`,`scrollSwitch`]:[],"catalog-layout":`flat`,"catalog-max-depth":_.value,"no-upload-img":!v.value,sanitize:(0,n.unref)(t.t),"format-copied-text":T,"onUpdate:modelValue":x,onOnHtmlChanged:S,onOnSave:C,onOnUploadImg:w},null,8,[`id`,`model-value`,`height`,`placeholder`,`theme`,`preview`,`preview-only`,`read-only`,`auto-focus`,`max-length`,`toolbars`,`footers`,`catalog-max-depth`,`no-upload-img`,`sanitize`])],2))}});var a=e.t(i,[[`__scopeId`,`data-v-c27723d0`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
1
+ require(`./chunk.cjs`);const e=require(`./export-helper.cjs`),t=require(`./html.cjs`);let n=require(`vue`),r=require(`md-editor-v3`);const i=(0,n.defineComponent)({name:`C_Markdown`,__name:`index`,props:{modelValue:{default:``},editorId:{},height:{default:`400px`},disabled:{type:Boolean,default:!1},placeholder:{default:`请输入 Markdown 内容...`},mode:{default:`editable`},toolbar:{},uploadImageConfig:{},tocNavPosition:{default:`right`},defaultFullscreen:{type:Boolean,default:!1},autofocus:{type:Boolean,default:!1},includeLevel:{default:()=>[1,2,3,4,5,6]},leftToolbar:{default:`undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save`},rightToolbar:{default:`preview toc sync-scroll fullscreen`},maxLength:{default:5e4},showWordCount:{type:Boolean,default:!0},autoSave:{type:Boolean,default:!1},autoSaveInterval:{default:3e4},isDark:{type:Boolean,default:!1}},emits:[`update:modelValue`,`change`,`save`,`upload-image`,`fullscreen-change`,`copy-code-success`,`word-count-change`,`auto-save`,`max-length-exceeded`],setup(e,{expose:i,emit:a}){let o=r.MdEditor,s=e,c=a,l=(0,n.getCurrentInstance)(),u=(0,n.ref)(),d=(0,n.ref)(``),f=(0,n.ref)(s.modelValue),p=l?.uid??0,m=(0,n.computed)(()=>s.editorId||`c-markdown-editor-${p}`),h=(0,n.computed)(()=>s.modelValue?.length||0),g=(0,n.computed)(()=>s.disabled?`preview`:s.mode),_=(0,n.computed)(()=>{let e=s.includeLevel.filter(e=>Number.isInteger(e)&&e>=1&&e<=6);return e.length>0?Math.max(...e):6}),v=(0,n.computed)(()=>typeof l?.vnode.props?.onUploadImage==`function`),y={undo:`revoke`,redo:`next`,h:`title`,bold:`bold`,italic:`italic`,strikethrough:`strikeThrough`,quote:`quote`,ul:`unorderedList`,ol:`orderedList`,table:`table`,hr:`horizontalLine`,link:`link`,image:`image`,code:`code`,save:`save`,preview:`preview`,toc:`catalog`,fullscreen:`fullscreen`},b=(0,n.computed)(()=>{if(Array.isArray(s.toolbar))return[...s.toolbar];let e=`${s.leftToolbar} ${s.rightToolbar}`.split(/[\s|]+/).map(e=>y[e]).filter(e=>e!==void 0);return[...new Set(e)]});(0,n.watch)(()=>s.modelValue,e=>{f.value=e??``,s.showWordCount&&c(`word-count-change`,e?.length||0)},{immediate:!0});let x=e=>{if(e.length>s.maxLength){c(`max-length-exceeded`,e.length,s.maxLength);return}f.value=e,c(`update:modelValue`,e),s.showWordCount&&c(`word-count-change`,e.length)},S=e=>{let n=t.t(e);d.value=n,c(`change`,f.value,n),s.autoSave&&D(f.value)},C=async(e,n)=>{c(`save`,e,t.t(await n))},w=(e,t)=>{let n=e.filter(e=>O(e,s.uploadImageConfig?.accept)),r=s.uploadImageConfig?.multiple?n:n.slice(0,1);if(r.length===0)return;let i=new DataTransfer;r.forEach(e=>i.items.add(e)),c(`upload-image`,new Event(`upload-image`),e=>{t([{url:e.url,alt:e.desc??``,title:e.desc??``}])},i.files)},T=e=>(c(`copy-code-success`,e),e),E=null;(0,n.watch)(()=>s.autoSave,e=>{!e&&E&&(clearTimeout(E),E=null)});let D=e=>{E&&clearTimeout(E),E=setTimeout(()=>{E=null,c(`auto-save`,e)},Math.max(0,s.autoSaveInterval))};(0,n.onBeforeUnmount)(()=>{E&&clearTimeout(E)}),(0,n.onMounted)(()=>{u.value?.on(`fullscreen`,e=>{c(`fullscreen-change`,e)}),s.defaultFullscreen&&u.value?.toggleFullscreen(!0)}),i({focus:()=>{u.value?.focus()},getHtml:()=>d.value,insertText:e=>{u.value?.insert(t=>({targetValue:`${t}${e}`,select:!0,deviationStart:-e.length,deviationEnd:0}))},wordCount:h});function O(e,t){return t?.trim()?t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean).some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t):t.endsWith(`/*`)?e.type.toLowerCase().startsWith(t.slice(0,-1)):e.type.toLowerCase()===t):!0}return(r,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`c-markdown-wrapper`,{"is-dark":e.isDark,"toc-left":e.tocNavPosition===`left`}])},[(0,n.createVNode)((0,n.unref)(o),{id:m.value,ref_key:`editorRef`,ref:u,"model-value":e.modelValue,height:e.height,placeholder:e.placeholder,theme:e.isDark?`dark`:`light`,preview:g.value!==`edit`,"preview-only":g.value===`preview`,"read-only":e.disabled,"auto-focus":e.autofocus,"max-length":e.maxLength,toolbars:b.value,footers:e.showWordCount?[`markdownTotal`,`=`,`scrollSwitch`]:[],"catalog-layout":`flat`,"catalog-max-depth":_.value,"no-upload-img":!v.value,sanitize:(0,n.unref)(t.t),"format-copied-text":T,"onUpdate:modelValue":x,onOnHtmlChanged:S,onOnSave:C,onOnUploadImg:w},null,8,[`id`,`model-value`,`height`,`placeholder`,`theme`,`preview`,`preview-only`,`read-only`,`auto-focus`,`max-length`,`toolbars`,`footers`,`catalog-max-depth`,`no-upload-img`,`sanitize`])],2))}});var a=e.t(i,[[`__scopeId`,`data-v-3ae0ff30`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
@@ -1 +1 @@
1
- import{t as e}from"./export-helper.js";import{t}from"./html.js";import{computed as n,createElementBlock as r,createVNode as i,defineComponent as a,getCurrentInstance as o,normalizeClass as s,onBeforeUnmount as c,onMounted as l,openBlock as u,ref as d,unref as f,watch as p}from"vue";import{MdEditor as m}from"md-editor-v3";var h=e(a({name:`C_Markdown`,__name:`index`,props:{modelValue:{default:``},editorId:{},height:{default:`400px`},disabled:{type:Boolean,default:!1},placeholder:{default:`请输入 Markdown 内容...`},mode:{default:`editable`},toolbar:{},uploadImageConfig:{},tocNavPosition:{default:`right`},defaultFullscreen:{type:Boolean,default:!1},autofocus:{type:Boolean,default:!1},includeLevel:{default:()=>[1,2,3,4,5,6]},leftToolbar:{default:`undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save`},rightToolbar:{default:`preview toc sync-scroll fullscreen`},maxLength:{default:5e4},showWordCount:{type:Boolean,default:!0},autoSave:{type:Boolean,default:!1},autoSaveInterval:{default:3e4},isDark:{type:Boolean,default:!1}},emits:[`update:modelValue`,`change`,`save`,`upload-image`,`fullscreen-change`,`copy-code-success`,`word-count-change`,`auto-save`,`max-length-exceeded`],setup(e,{expose:a,emit:h}){let g=m,_=e,v=h,y=o(),b=d(),x=d(``),S=d(_.modelValue),C=y?.uid??0,w=n(()=>_.editorId||`c-markdown-editor-${C}`),T=n(()=>_.modelValue?.length||0),E=n(()=>_.disabled?`preview`:_.mode),D=n(()=>{let e=_.includeLevel.filter(e=>Number.isInteger(e)&&e>=1&&e<=6);return e.length>0?Math.max(...e):6}),O=n(()=>typeof y?.vnode.props?.onUploadImage==`function`),k={undo:`revoke`,redo:`next`,h:`title`,bold:`bold`,italic:`italic`,strikethrough:`strikeThrough`,quote:`quote`,ul:`unorderedList`,ol:`orderedList`,table:`table`,hr:`horizontalLine`,link:`link`,image:`image`,code:`code`,save:`save`,preview:`preview`,toc:`catalog`,fullscreen:`fullscreen`},A=n(()=>{if(Array.isArray(_.toolbar))return[..._.toolbar];let e=`${_.leftToolbar} ${_.rightToolbar}`.split(/[\s|]+/).map(e=>k[e]).filter(e=>e!==void 0);return[...new Set(e)]});l(()=>{_.showWordCount&&_.modelValue&&v(`word-count-change`,_.modelValue.length)}),p(()=>_.modelValue,e=>{_.showWordCount&&v(`word-count-change`,e?.length||0)},{immediate:!0});let j=e=>{if(e.length>_.maxLength){v(`max-length-exceeded`,e.length,_.maxLength);return}S.value=e,v(`update:modelValue`,e),_.showWordCount&&v(`word-count-change`,e.length)},M=e=>{x.value=e,v(`change`,S.value,e),_.autoSave&&L(S.value)},N=async(e,t)=>{v(`save`,e,await t)},P=(e,t)=>{let n=e.filter(e=>R(e,_.uploadImageConfig?.accept)),r=_.uploadImageConfig?.multiple?n:n.slice(0,1);if(r.length===0)return;let i=new DataTransfer;r.forEach(e=>i.items.add(e)),v(`upload-image`,new Event(`upload-image`),e=>{t([{url:e.url,alt:e.desc??``,title:e.desc??``}])},i.files)},F=e=>(v(`copy-code-success`,e),e),I=null,L=e=>{I&&clearTimeout(I),I=setTimeout(()=>{v(`auto-save`,e)},_.autoSaveInterval)};c(()=>{I&&clearTimeout(I)}),l(()=>{b.value?.on(`fullscreen`,e=>{v(`fullscreen-change`,e)}),_.defaultFullscreen&&b.value?.toggleFullscreen(!0)}),a({focus:()=>{b.value?.focus()},getHtml:()=>x.value,insertText:e=>{b.value?.insert(t=>({targetValue:`${t}${e}`,select:!0,deviationStart:-e.length,deviationEnd:0}))},wordCount:T});function R(e,t){return t?.trim()?t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean).some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t):t.endsWith(`/*`)?e.type.toLowerCase().startsWith(t.slice(0,-1)):e.type.toLowerCase()===t):!0}return(n,a)=>(u(),r(`div`,{class:s([`c-markdown-wrapper`,{"is-dark":e.isDark,"toc-left":e.tocNavPosition===`left`}])},[i(f(g),{id:w.value,ref_key:`editorRef`,ref:b,"model-value":e.modelValue,height:e.height,placeholder:e.placeholder,theme:e.isDark?`dark`:`light`,preview:E.value!==`edit`,"preview-only":E.value===`preview`,"read-only":e.disabled,"auto-focus":e.autofocus,"max-length":e.maxLength,toolbars:A.value,footers:e.showWordCount?[`markdownTotal`,`=`,`scrollSwitch`]:[],"catalog-layout":`flat`,"catalog-max-depth":D.value,"no-upload-img":!O.value,sanitize:f(t),"format-copied-text":F,"onUpdate:modelValue":j,onOnHtmlChanged:M,onOnSave:N,onOnUploadImg:P},null,8,[`id`,`model-value`,`height`,`placeholder`,`theme`,`preview`,`preview-only`,`read-only`,`auto-focus`,`max-length`,`toolbars`,`footers`,`catalog-max-depth`,`no-upload-img`,`sanitize`])],2))}}),[[`__scopeId`,`data-v-c27723d0`]]);export{h as t};
1
+ import{t as e}from"./export-helper.js";import{t}from"./html.js";import{computed as n,createElementBlock as r,createVNode as i,defineComponent as a,getCurrentInstance as o,normalizeClass as s,onBeforeUnmount as c,onMounted as l,openBlock as u,ref as d,unref as f,watch as p}from"vue";import{MdEditor as m}from"md-editor-v3";var h=e(a({name:`C_Markdown`,__name:`index`,props:{modelValue:{default:``},editorId:{},height:{default:`400px`},disabled:{type:Boolean,default:!1},placeholder:{default:`请输入 Markdown 内容...`},mode:{default:`editable`},toolbar:{},uploadImageConfig:{},tocNavPosition:{default:`right`},defaultFullscreen:{type:Boolean,default:!1},autofocus:{type:Boolean,default:!1},includeLevel:{default:()=>[1,2,3,4,5,6]},leftToolbar:{default:`undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save`},rightToolbar:{default:`preview toc sync-scroll fullscreen`},maxLength:{default:5e4},showWordCount:{type:Boolean,default:!0},autoSave:{type:Boolean,default:!1},autoSaveInterval:{default:3e4},isDark:{type:Boolean,default:!1}},emits:[`update:modelValue`,`change`,`save`,`upload-image`,`fullscreen-change`,`copy-code-success`,`word-count-change`,`auto-save`,`max-length-exceeded`],setup(e,{expose:a,emit:h}){let g=m,_=e,v=h,y=o(),b=d(),x=d(``),S=d(_.modelValue),C=y?.uid??0,w=n(()=>_.editorId||`c-markdown-editor-${C}`),T=n(()=>_.modelValue?.length||0),E=n(()=>_.disabled?`preview`:_.mode),D=n(()=>{let e=_.includeLevel.filter(e=>Number.isInteger(e)&&e>=1&&e<=6);return e.length>0?Math.max(...e):6}),O=n(()=>typeof y?.vnode.props?.onUploadImage==`function`),k={undo:`revoke`,redo:`next`,h:`title`,bold:`bold`,italic:`italic`,strikethrough:`strikeThrough`,quote:`quote`,ul:`unorderedList`,ol:`orderedList`,table:`table`,hr:`horizontalLine`,link:`link`,image:`image`,code:`code`,save:`save`,preview:`preview`,toc:`catalog`,fullscreen:`fullscreen`},A=n(()=>{if(Array.isArray(_.toolbar))return[..._.toolbar];let e=`${_.leftToolbar} ${_.rightToolbar}`.split(/[\s|]+/).map(e=>k[e]).filter(e=>e!==void 0);return[...new Set(e)]});p(()=>_.modelValue,e=>{S.value=e??``,_.showWordCount&&v(`word-count-change`,e?.length||0)},{immediate:!0});let j=e=>{if(e.length>_.maxLength){v(`max-length-exceeded`,e.length,_.maxLength);return}S.value=e,v(`update:modelValue`,e),_.showWordCount&&v(`word-count-change`,e.length)},M=e=>{let n=t(e);x.value=n,v(`change`,S.value,n),_.autoSave&&L(S.value)},N=async(e,n)=>{v(`save`,e,t(await n))},P=(e,t)=>{let n=e.filter(e=>R(e,_.uploadImageConfig?.accept)),r=_.uploadImageConfig?.multiple?n:n.slice(0,1);if(r.length===0)return;let i=new DataTransfer;r.forEach(e=>i.items.add(e)),v(`upload-image`,new Event(`upload-image`),e=>{t([{url:e.url,alt:e.desc??``,title:e.desc??``}])},i.files)},F=e=>(v(`copy-code-success`,e),e),I=null;p(()=>_.autoSave,e=>{!e&&I&&(clearTimeout(I),I=null)});let L=e=>{I&&clearTimeout(I),I=setTimeout(()=>{I=null,v(`auto-save`,e)},Math.max(0,_.autoSaveInterval))};c(()=>{I&&clearTimeout(I)}),l(()=>{b.value?.on(`fullscreen`,e=>{v(`fullscreen-change`,e)}),_.defaultFullscreen&&b.value?.toggleFullscreen(!0)}),a({focus:()=>{b.value?.focus()},getHtml:()=>x.value,insertText:e=>{b.value?.insert(t=>({targetValue:`${t}${e}`,select:!0,deviationStart:-e.length,deviationEnd:0}))},wordCount:T});function R(e,t){return t?.trim()?t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean).some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t):t.endsWith(`/*`)?e.type.toLowerCase().startsWith(t.slice(0,-1)):e.type.toLowerCase()===t):!0}return(n,a)=>(u(),r(`div`,{class:s([`c-markdown-wrapper`,{"is-dark":e.isDark,"toc-left":e.tocNavPosition===`left`}])},[i(f(g),{id:w.value,ref_key:`editorRef`,ref:b,"model-value":e.modelValue,height:e.height,placeholder:e.placeholder,theme:e.isDark?`dark`:`light`,preview:E.value!==`edit`,"preview-only":E.value===`preview`,"read-only":e.disabled,"auto-focus":e.autofocus,"max-length":e.maxLength,toolbars:A.value,footers:e.showWordCount?[`markdownTotal`,`=`,`scrollSwitch`]:[],"catalog-layout":`flat`,"catalog-max-depth":D.value,"no-upload-img":!O.value,sanitize:f(t),"format-copied-text":F,"onUpdate:modelValue":j,onOnHtmlChanged:M,onOnSave:N,onOnUploadImg:P},null,8,[`id`,`model-value`,`height`,`placeholder`,`theme`,`preview`,`preview-only`,`read-only`,`auto-focus`,`max-length`,`toolbars`,`footers`,`catalog-max-depth`,`no-upload-img`,`sanitize`])],2))}}),[[`__scopeId`,`data-v-3ae0ff30`]]);export{h as t};
package/dist/C_Menu2.cjs CHANGED
@@ -1 +1 @@
1
- require(`./chunk.cjs`);let e=require(`vue`),t=require(`naive-ui`),n=require(`@iconify/vue`);const r=e=>e.startsWith(`/`)?e:`/${e}`,i=e=>e.path?r(e.path):``,a=e=>e.meta?.title||e.name||``,o=e=>!e.meta?.hidden,s=t=>{if(t){if(typeof t==`string`)return()=>(0,e.h)(`span`,{class:`n-icon`,style:`display: inline-flex; align-items: center;`},[(0,e.h)(n.Icon,{icon:t})]);if(typeof t==`function`)return t}};function c(e,t={}){let{labelFormatter:n=e=>e,getKey:r=i,getLabel:c=a,filter:l=o,renderIcon:u=s,recursive:d=!0}=t,f=e=>e.filter(l).map(e=>{let t=e.meta?.icon||e.icon,i=d&&e.children?.length?f(e.children):void 0;return{key:r(e),label:n(c(e)),disabled:e.disabled||!1,icon:u(t),...e.type&&{type:e.type},...i?.length&&{children:i}}});return f(e)}function l(e,t=o){let n=[],r=e=>{for(let i of e)t(i)&&n.push(i),i.children?.length&&r(i.children)};return r(e),n}const u=(0,e.defineComponent)({name:`C_Menu`,__name:`index`,props:{options:{},routes:{},adapterConfig:{},labelFormatter:{},value:{},modelValue:{},expandedKeys:{},defaultExpandedKeys:{default:()=>[]},mode:{default:`vertical`},collapsed:{type:Boolean,default:!1},collapsedWidth:{default:64},collapsedIconSize:{default:22},inverted:{type:Boolean,default:!1},themeOverrides:{},indent:{default:24},rootIndent:{default:16},dropdownProps:{default:()=>({placement:`right-start`,trigger:`hover`,arrowStyle:{color:`var(--n-color)`}})}},emits:[`select`,`intent`,`update:modelValue`,`update:value`,`update:expandedKeys`],setup(n,{expose:r,emit:i}){let a=n,o=i,s=(0,e.ref)(null),l=(0,e.ref)([...a.defaultExpandedKeys]),u=(0,e.computed)({get:()=>a.expandedKeys??l.value,set:e=>{l.value=e,o(`update:expandedKeys`,e)}}),d=(0,e.computed)(()=>a.modelValue===void 0?a.value??null:a.modelValue),f=(0,e.computed)(()=>{if(a.options)return a.options;if(a.routes){let e={...a.adapterConfig,...a.labelFormatter&&{labelFormatter:a.labelFormatter}};return c(a.routes,e)}return[]}),p=(e,t,n=[])=>{for(let r of e){let e=r.children;if(e?.length){let i=[...n,r.key];if(e.some(e=>e.key===t))return i;let a=p(e,t,i);if(a.length>0)return a}}return[]},m=e=>{let t=e.split(`/`).filter(Boolean),n=new Set,r=``;return t.forEach(e=>{r+=`/${e}`,n.add(r)}),p(f.value,e).forEach(e=>n.add(e)),n},h=e=>{e&&(e!==d.value&&(o(`update:modelValue`,e),o(`update:value`,e)),o(`select`,e))},g=e=>{let t=()=>{typeof e.key==`string`&&!e.children?.length&&o(`intent`,e.key)};return{onPointerenter:t,onFocusin:t}},_=e=>{u.value=e};return r({showOption:e=>s.value?.showOption(e),menuRef:s}),(0,e.watch)(()=>d.value,t=>{if(!t)return;let n=m(t);u.value=Array.from(new Set([...u.value,...n])),(0,e.nextTick)(()=>s.value?.showOption(t))},{immediate:!0}),(r,i)=>{let a=t.NMenu;return(0,e.openBlock)(),(0,e.createBlock)(a,{ref_key:`menuRef`,ref:s,options:f.value,"expanded-keys":u.value,value:d.value,mode:n.mode,collapsed:n.collapsed,"collapsed-width":n.collapsedWidth,"collapsed-icon-size":n.collapsedIconSize,inverted:n.inverted,"theme-overrides":n.themeOverrides,"dropdown-props":n.dropdownProps,indent:n.indent,"root-indent":n.rootIndent,"node-props":g,"onUpdate:value":h,"onUpdate:expandedKeys":_},null,8,[`options`,`expanded-keys`,`value`,`mode`,`collapsed`,`collapsed-width`,`collapsed-icon-size`,`inverted`,`theme-overrides`,`dropdown-props`,`indent`,`root-indent`])}}});Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
1
+ require(`./chunk.cjs`);let e=require(`vue`),t=require(`naive-ui`),n=require(`@iconify/vue`);const r=e=>e.startsWith(`/`)?e:`/${e}`,i=e=>e.path?r(e.path):``,a=e=>e.meta?.title||e.name||``,o=e=>!e.meta?.hidden,s=t=>{if(t){if(typeof t==`string`)return()=>(0,e.h)(`span`,{class:`n-icon`,style:`display: inline-flex; align-items: center;`},[(0,e.h)(n.Icon,{icon:t})]);if(typeof t==`function`)return t}};function c(e,t={}){let{labelFormatter:n=e=>e,getKey:r=i,getLabel:c=a,filter:l=o,renderIcon:u=s,recursive:d=!0}=t,f=e=>e.filter(l).map(e=>{let t=e.meta?.icon||e.icon,i=d&&e.children?.length?f(e.children):void 0;return{key:r(e),label:n(c(e)),disabled:e.disabled||!1,icon:u(t),...e.type&&{type:e.type},...i?.length&&{children:i}}});return f(e)}function l(e,t=o){let n=[],r=e=>{for(let i of e)t(i)&&n.push(i),i.children?.length&&r(i.children)};return r(e),n}const u=(0,e.defineComponent)({name:`C_Menu`,__name:`index`,props:{options:{},routes:{},adapterConfig:{},labelFormatter:{},value:{},modelValue:{},expandedKeys:{},defaultExpandedKeys:{default:()=>[]},mode:{default:`vertical`},collapsed:{type:Boolean,default:!1},collapsedWidth:{default:64},collapsedIconSize:{default:22},inverted:{type:Boolean,default:!1},themeOverrides:{},indent:{default:24},rootIndent:{default:16},dropdownProps:{default:()=>({placement:`right-start`,trigger:`hover`,arrowStyle:{color:`var(--n-color)`}})}},emits:[`select`,`intent`,`update:modelValue`,`update:value`,`update:expandedKeys`],setup(n,{expose:r,emit:i}){let a=n,o=i,s=(0,e.ref)(null),l=(0,e.ref)([...a.defaultExpandedKeys]),u=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),d=(0,e.computed)({get:()=>a.expandedKeys??l.value,set:e=>{u(d.value,e)||(l.value=e,o(`update:expandedKeys`,e))}}),f=(0,e.computed)(()=>a.modelValue===void 0?a.value??null:a.modelValue),p=(0,e.computed)(()=>{if(a.options)return a.options;if(a.routes){let e={...a.adapterConfig,...a.labelFormatter&&{labelFormatter:a.labelFormatter}};return c(a.routes,e)}return[]}),m=(e,t,n=[])=>{for(let r of e){let e=r.children;if(e?.length){let i=typeof r.key==`string`?[...n,r.key]:n;if(e.some(e=>e.key===t))return i;let a=m(e,t,i);if(a.length>0)return a}}return[]},h=e=>{let t=e.split(`/`).filter(Boolean),n=new Set,r=``;return t.forEach(e=>{r+=`/${e}`,n.add(r)}),m(p.value,e).forEach(e=>n.add(e)),n},g=e=>{e&&(e!==f.value&&(o(`update:modelValue`,e),o(`update:value`,e)),o(`select`,e))},_=e=>{let t=()=>{typeof e.key==`string`&&!e.children?.length&&o(`intent`,e.key)};return{onPointerenter:t,onFocusin:t}},v=e=>{d.value=e};return r({showOption:e=>s.value?.showOption(e),menuRef:s}),(0,e.watch)([f,p],([t])=>{if(!t)return;let n=h(t);d.value=Array.from(new Set([...d.value,...n])),(0,e.nextTick)(()=>s.value?.showOption(t))},{immediate:!0}),(r,i)=>{let a=t.NMenu;return(0,e.openBlock)(),(0,e.createBlock)(a,{ref_key:`menuRef`,ref:s,options:p.value,"expanded-keys":d.value,value:f.value,mode:n.mode,collapsed:n.collapsed,"collapsed-width":n.collapsedWidth,"collapsed-icon-size":n.collapsedIconSize,inverted:n.inverted,"theme-overrides":n.themeOverrides,"dropdown-props":n.dropdownProps,indent:n.indent,"root-indent":n.rootIndent,"node-props":_,"onUpdate:value":g,"onUpdate:expandedKeys":v},null,8,[`options`,`expanded-keys`,`value`,`mode`,`collapsed`,`collapsed-width`,`collapsed-icon-size`,`inverted`,`theme-overrides`,`dropdown-props`,`indent`,`root-indent`])}}});Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
package/dist/C_Menu2.js CHANGED
@@ -1 +1 @@
1
- import{computed as e,createBlock as t,defineComponent as n,h as r,nextTick as i,openBlock as a,ref as o,resolveComponent as s,watch as c}from"vue";import{NMenu as l}from"naive-ui";import{Icon as u}from"@iconify/vue";const d=e=>e.startsWith(`/`)?e:`/${e}`,f=e=>e.path?d(e.path):``,p=e=>e.meta?.title||e.name||``,m=e=>!e.meta?.hidden,h=e=>{if(e){if(typeof e==`string`)return()=>r(`span`,{class:`n-icon`,style:`display: inline-flex; align-items: center;`},[r(u,{icon:e})]);if(typeof e==`function`)return e}};function g(e,t={}){let{labelFormatter:n=e=>e,getKey:r=f,getLabel:i=p,filter:a=m,renderIcon:o=h,recursive:s=!0}=t,c=e=>e.filter(a).map(e=>{let t=e.meta?.icon||e.icon,a=s&&e.children?.length?c(e.children):void 0;return{key:r(e),label:n(i(e)),disabled:e.disabled||!1,icon:o(t),...e.type&&{type:e.type},...a?.length&&{children:a}}});return c(e)}function _(e,t=m){let n=[],r=e=>{for(let i of e)t(i)&&n.push(i),i.children?.length&&r(i.children)};return r(e),n}const v=n({name:`C_Menu`,__name:`index`,props:{options:{},routes:{},adapterConfig:{},labelFormatter:{},value:{},modelValue:{},expandedKeys:{},defaultExpandedKeys:{default:()=>[]},mode:{default:`vertical`},collapsed:{type:Boolean,default:!1},collapsedWidth:{default:64},collapsedIconSize:{default:22},inverted:{type:Boolean,default:!1},themeOverrides:{},indent:{default:24},rootIndent:{default:16},dropdownProps:{default:()=>({placement:`right-start`,trigger:`hover`,arrowStyle:{color:`var(--n-color)`}})}},emits:[`select`,`intent`,`update:modelValue`,`update:value`,`update:expandedKeys`],setup(n,{expose:r,emit:s}){let u=n,d=s,f=o(null),p=o([...u.defaultExpandedKeys]),m=e({get:()=>u.expandedKeys??p.value,set:e=>{p.value=e,d(`update:expandedKeys`,e)}}),h=e(()=>u.modelValue===void 0?u.value??null:u.modelValue),_=e(()=>{if(u.options)return u.options;if(u.routes){let e={...u.adapterConfig,...u.labelFormatter&&{labelFormatter:u.labelFormatter}};return g(u.routes,e)}return[]}),v=(e,t,n=[])=>{for(let r of e){let e=r.children;if(e?.length){let i=[...n,r.key];if(e.some(e=>e.key===t))return i;let a=v(e,t,i);if(a.length>0)return a}}return[]},y=e=>{let t=e.split(`/`).filter(Boolean),n=new Set,r=``;return t.forEach(e=>{r+=`/${e}`,n.add(r)}),v(_.value,e).forEach(e=>n.add(e)),n},b=e=>{e&&(e!==h.value&&(d(`update:modelValue`,e),d(`update:value`,e)),d(`select`,e))},x=e=>{let t=()=>{typeof e.key==`string`&&!e.children?.length&&d(`intent`,e.key)};return{onPointerenter:t,onFocusin:t}},S=e=>{m.value=e};return r({showOption:e=>f.value?.showOption(e),menuRef:f}),c(()=>h.value,e=>{if(!e)return;let t=y(e);m.value=Array.from(new Set([...m.value,...t])),i(()=>f.value?.showOption(e))},{immediate:!0}),(e,r)=>{let i=l;return a(),t(i,{ref_key:`menuRef`,ref:f,options:_.value,"expanded-keys":m.value,value:h.value,mode:n.mode,collapsed:n.collapsed,"collapsed-width":n.collapsedWidth,"collapsed-icon-size":n.collapsedIconSize,inverted:n.inverted,"theme-overrides":n.themeOverrides,"dropdown-props":n.dropdownProps,indent:n.indent,"root-indent":n.rootIndent,"node-props":x,"onUpdate:value":b,"onUpdate:expandedKeys":S},null,8,[`options`,`expanded-keys`,`value`,`mode`,`collapsed`,`collapsed-width`,`collapsed-icon-size`,`inverted`,`theme-overrides`,`dropdown-props`,`indent`,`root-indent`])}}});export{g as n,_ as r,v as t};
1
+ import{computed as e,createBlock as t,defineComponent as n,h as r,nextTick as i,openBlock as a,ref as o,resolveComponent as s,watch as c}from"vue";import{NMenu as l}from"naive-ui";import{Icon as u}from"@iconify/vue";const d=e=>e.startsWith(`/`)?e:`/${e}`,f=e=>e.path?d(e.path):``,p=e=>e.meta?.title||e.name||``,m=e=>!e.meta?.hidden,h=e=>{if(e){if(typeof e==`string`)return()=>r(`span`,{class:`n-icon`,style:`display: inline-flex; align-items: center;`},[r(u,{icon:e})]);if(typeof e==`function`)return e}};function g(e,t={}){let{labelFormatter:n=e=>e,getKey:r=f,getLabel:i=p,filter:a=m,renderIcon:o=h,recursive:s=!0}=t,c=e=>e.filter(a).map(e=>{let t=e.meta?.icon||e.icon,a=s&&e.children?.length?c(e.children):void 0;return{key:r(e),label:n(i(e)),disabled:e.disabled||!1,icon:o(t),...e.type&&{type:e.type},...a?.length&&{children:a}}});return c(e)}function _(e,t=m){let n=[],r=e=>{for(let i of e)t(i)&&n.push(i),i.children?.length&&r(i.children)};return r(e),n}const v=n({name:`C_Menu`,__name:`index`,props:{options:{},routes:{},adapterConfig:{},labelFormatter:{},value:{},modelValue:{},expandedKeys:{},defaultExpandedKeys:{default:()=>[]},mode:{default:`vertical`},collapsed:{type:Boolean,default:!1},collapsedWidth:{default:64},collapsedIconSize:{default:22},inverted:{type:Boolean,default:!1},themeOverrides:{},indent:{default:24},rootIndent:{default:16},dropdownProps:{default:()=>({placement:`right-start`,trigger:`hover`,arrowStyle:{color:`var(--n-color)`}})}},emits:[`select`,`intent`,`update:modelValue`,`update:value`,`update:expandedKeys`],setup(n,{expose:r,emit:s}){let u=n,d=s,f=o(null),p=o([...u.defaultExpandedKeys]),m=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),h=e({get:()=>u.expandedKeys??p.value,set:e=>{m(h.value,e)||(p.value=e,d(`update:expandedKeys`,e))}}),_=e(()=>u.modelValue===void 0?u.value??null:u.modelValue),v=e(()=>{if(u.options)return u.options;if(u.routes){let e={...u.adapterConfig,...u.labelFormatter&&{labelFormatter:u.labelFormatter}};return g(u.routes,e)}return[]}),y=(e,t,n=[])=>{for(let r of e){let e=r.children;if(e?.length){let i=typeof r.key==`string`?[...n,r.key]:n;if(e.some(e=>e.key===t))return i;let a=y(e,t,i);if(a.length>0)return a}}return[]},b=e=>{let t=e.split(`/`).filter(Boolean),n=new Set,r=``;return t.forEach(e=>{r+=`/${e}`,n.add(r)}),y(v.value,e).forEach(e=>n.add(e)),n},x=e=>{e&&(e!==_.value&&(d(`update:modelValue`,e),d(`update:value`,e)),d(`select`,e))},S=e=>{let t=()=>{typeof e.key==`string`&&!e.children?.length&&d(`intent`,e.key)};return{onPointerenter:t,onFocusin:t}},C=e=>{h.value=e};return r({showOption:e=>f.value?.showOption(e),menuRef:f}),c([_,v],([e])=>{if(!e)return;let t=b(e);h.value=Array.from(new Set([...h.value,...t])),i(()=>f.value?.showOption(e))},{immediate:!0}),(e,r)=>{let i=l;return a(),t(i,{ref_key:`menuRef`,ref:f,options:v.value,"expanded-keys":h.value,value:_.value,mode:n.mode,collapsed:n.collapsed,"collapsed-width":n.collapsedWidth,"collapsed-icon-size":n.collapsedIconSize,inverted:n.inverted,"theme-overrides":n.themeOverrides,"dropdown-props":n.dropdownProps,indent:n.indent,"root-indent":n.rootIndent,"node-props":S,"onUpdate:value":x,"onUpdate:expandedKeys":C},null,8,[`options`,`expanded-keys`,`value`,`mode`,`collapsed`,`collapsed-width`,`collapsed-icon-size`,`inverted`,`theme-overrides`,`dropdown-props`,`indent`,`root-indent`])}}});export{g as n,_ as r,v as t};