Files
zsglpt/static/app/assets/user-Bl59IefW.js
yuyx 7007f5f6f5 feat: 完成 Passkey 能力与前后台加载优化
更新说明:\n1. 新增用户端与管理员端 Passkey 登录/注册/设备管理(最多3台,支持设备备注、删除设备)。\n2. 修复 Passkey 注册与登录流程中的浏览器/证书/CSRF相关问题,增强错误提示。\n3. 前台登录页改为独立入口,首屏仅加载必要资源,其他页面按需加载。\n4. 系统配置页改为静默获取金山文档状态,避免首屏阻塞,并优化状态展示为“检测中/已登录/未登录/异常”。\n5. 补充后端接口与页面渲染适配,修复多入口下样式依赖注入问题。\n6. 同步更新前后台构建产物与相关静态资源。
2026-02-15 23:51:46 +08:00

2 lines
15 KiB
JavaScript

import{J as z,Q as F,h as b,V as be,L as q,W as le,g as Q,K as U,X as De,ae as de,A as N,S as fe,c as x,o as g,s as w,k as P,j as B,l as L,n as S,C as t,w as me,O as te,a3 as he,p as ne,af as pe,B as M,F as ge,x as ke,t as $,D as _,U as ye,M as Ge,a2 as ze,a4 as $e,E as Ke,i as Ue,m as Me,q as je,N as ve,ag as Re}from"./vendor-vue-DxN60LNb.js";import{an as qe,ao as Qe,ap as We,aq as Ce,ar as Xe,q as Ye,s as K,v as T,Y as Ve,as as He,M as J,ak as oe,ah as W,Q as Z,af as Se,X as ee,ai as ie,F as H,_ as X,u as Y,b as Ie,t as R,d as xe,B as Le,y as j,D as Je,A,Z as Ze}from"./el-button-DWxIvzz-.js";import{A as ea,r as se,U as O,C as D,k as ue,B as aa,I as ae,t as la,p as Ee}from"./http-CdvgQxJu.js";import{g as ta,c as na,h as oa,j as ia}from"./el-alert-DB2IQLpH.js";import{r as sa}from"./el-overlay-C_JJBVfE.js";var ua="[object Object]",ra=Function.prototype,ca=Object.prototype,Be=ra.toString,da=ca.hasOwnProperty,va=Be.call(Object);function ba(e){if(!qe(e)||Qe(e)!=ua)return!1;var a=ta(e);if(a===null)return!0;var o=da.call(a,"constructor")&&a.constructor;return typeof o=="function"&&o instanceof o&&Be.call(o)==va}function fa(e,a,o){var l=-1,u=e.length;a<0&&(a=-a>u?0:u+a),o=o>u?u:o,o<0&&(o+=u),u=a>o?0:o-a>>>0,a>>>=0;for(var v=Array(u);++l<u;)v[l]=e[l+a];return v}function ma(e){var a=e==null?0:e.length;return a?e[a-1]:void 0}function ha(e,a){return a.length<2?e:We(e,fa(a,0,-1))}function pa(e,a){return a=Ce(a,e),e=ha(e,a),e==null||delete e[Xe(ma(a))]}function ga(e){return ba(e)?void 0:e}var ka=1,ya=2,Ca=4,Va=ea(function(e,a){var o={};if(e==null)return o;var l=!1;a=Ye(a,function(v){return v=Ce(v,e),l||(l=v.length>1),v}),na(e,oa(e),o),l&&(o=ia(o,ka|ya|Ca,ga));for(var u=a.length;u--;)pa(o,a[u]);return o});const we={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:{type:Boolean,default:void 0},checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Ve,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},ariaLabel:String,...se(["ariaControls"])},_e={[O]:e=>z(e)||K(e)||T(e),change:e=>z(e)||K(e)||T(e)},G=Symbol("checkboxGroupContextKey"),Sa=({model:e,isChecked:a})=>{const o=F(G,void 0),l=F(He,void 0),u=b(()=>{var s,r;const f=(s=o?.max)==null?void 0:s.value,y=(r=o?.min)==null?void 0:r.value;return!J(f)&&e.value.length>=f&&!a.value||!J(y)&&e.value.length<=y&&a.value});return{isDisabled:oe(b(()=>{var s,r;return o===void 0?(s=l?.disabled)!=null?s:u.value:((r=o.disabled)==null?void 0:r.value)||u.value})),isLimitDisabled:u}},Ia=(e,{model:a,isLimitExceeded:o,hasOwnLabel:l,isDisabled:u,isLabeledByFormItem:v})=>{const s=F(G,void 0),{formItem:r}=W(),{emit:f}=be();function y(k){var i,d,p,m;return[!0,e.trueValue,e.trueLabel].includes(k)?(d=(i=e.trueValue)!=null?i:e.trueLabel)!=null?d:!0:(m=(p=e.falseValue)!=null?p:e.falseLabel)!=null?m:!1}function c(k,i){f(D,y(k),i)}function C(k){if(o.value)return;const i=k.target;f(D,y(i.checked),k)}async function V(k){o.value||!l.value&&!u.value&&v.value&&(k.composedPath().some(p=>p.tagName==="LABEL")||(a.value=y([!1,e.falseValue,e.falseLabel].includes(a.value)),await le(),c(a.value,k)))}const h=b(()=>s?.validateEvent||e.validateEvent);return q(()=>e.modelValue,()=>{h.value&&r?.validate("change").catch(k=>ue())}),{handleChange:C,onClickRoot:V}},xa=e=>{const a=Q(!1),{emit:o}=be(),l=F(G,void 0),u=b(()=>J(l)===!1),v=Q(!1),s=b({get(){var r,f;return u.value?(r=l?.modelValue)==null?void 0:r.value:(f=e.modelValue)!=null?f:a.value},set(r){var f,y;u.value&&U(r)?(v.value=((f=l?.max)==null?void 0:f.value)!==void 0&&r.length>l?.max.value&&r.length>s.value.length,v.value===!1&&((y=l?.changeEvent)==null||y.call(l,r))):(o(O,r),a.value=r)}});return{model:s,isGroup:u,isLimitExceeded:v}},La=(e,a,{model:o})=>{const l=F(G,void 0),u=Q(!1),v=b(()=>Z(e.value)?e.label:e.value),s=b(()=>{const c=o.value;return T(c)?c:U(c)?De(v.value)?c.map(de).some(C=>Se(C,v.value)):c.map(de).includes(v.value):c!=null?c===e.trueValue||c===e.trueLabel:!!c}),r=ee(b(()=>{var c;return(c=l?.size)==null?void 0:c.value}),{prop:!0}),f=ee(b(()=>{var c;return(c=l?.size)==null?void 0:c.value})),y=b(()=>!!a.default||!Z(v.value));return{checkboxButtonSize:r,isChecked:s,isFocused:u,checkboxSize:f,hasOwnLabel:y,actualValue:v}},Ne=(e,a)=>{const{formItem:o}=W(),{model:l,isGroup:u,isLimitExceeded:v}=xa(e),{isFocused:s,isChecked:r,checkboxButtonSize:f,checkboxSize:y,hasOwnLabel:c,actualValue:C}=La(e,a,{model:l}),{isDisabled:V}=Sa({model:l,isChecked:r}),{inputId:h,isLabeledByFormItem:k}=ie(e,{formItemContext:o,disableIdGeneration:c,disableIdManagement:u}),{handleChange:i,onClickRoot:d}=Ia(e,{model:l,isLimitExceeded:v,hasOwnLabel:c,isDisabled:V,isLabeledByFormItem:k});return(()=>{function m(){var E,n;U(l.value)&&!l.value.includes(C.value)?l.value.push(C.value):l.value=(n=(E=e.trueValue)!=null?E:e.trueLabel)!=null?n:!0}e.checked&&m()})(),H({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},b(()=>u.value&&Z(e.value))),H({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},b(()=>!!e.trueLabel)),H({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},b(()=>!!e.falseLabel)),{inputId:h,isLabeledByFormItem:k,isChecked:r,isDisabled:V,isFocused:s,checkboxButtonSize:f,checkboxSize:y,hasOwnLabel:c,model:l,actualValue:C,handleChange:i,onClickRoot:d}},Ea=N({name:"ElCheckbox"}),Ba=N({...Ea,props:we,emits:_e,setup(e){const a=e,o=fe(),{inputId:l,isLabeledByFormItem:u,isChecked:v,isDisabled:s,isFocused:r,checkboxSize:f,hasOwnLabel:y,model:c,actualValue:C,handleChange:V,onClickRoot:h}=Ne(a,o),k=b(()=>{var m,E,n,I;return a.trueValue||a.falseValue||a.trueLabel||a.falseLabel?{"true-value":(E=(m=a.trueValue)!=null?m:a.trueLabel)!=null?E:!0,"false-value":(I=(n=a.falseValue)!=null?n:a.falseLabel)!=null?I:!1}:{value:C.value}}),i=Y("checkbox"),d=b(()=>[i.b(),i.m(f.value),i.is("disabled",s.value),i.is("bordered",a.border),i.is("checked",v.value)]),p=b(()=>[i.e("input"),i.is("disabled",s.value),i.is("checked",v.value),i.is("indeterminate",a.indeterminate),i.is("focus",r.value)]);return(m,E)=>(g(),x(_(!t(y)&&t(u)?"span":"label"),{for:!t(y)&&t(u)?null:t(l),class:S(t(d)),"aria-controls":m.indeterminate?m.ariaControls:null,"aria-checked":m.indeterminate?"mixed":void 0,"aria-label":m.ariaLabel,onClick:t(h)},{default:w(()=>[P("span",{class:S(t(p))},[me(P("input",te({id:t(l),"onUpdate:modelValue":n=>he(c)?c.value=n:null,class:t(i).e("original"),type:"checkbox",indeterminate:m.indeterminate,name:m.name,tabindex:m.tabindex,disabled:t(s)},t(k),{onChange:t(V),onFocus:n=>r.value=!0,onBlur:n=>r.value=!1,onClick:ne(()=>{},["stop"])}),null,16,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","onChange","onFocus","onBlur","onClick"]),[[pe,t(c)]]),P("span",{class:S(t(i).e("inner"))},null,2)],2),t(y)?(g(),B("span",{key:0,class:S(t(i).e("label"))},[M(m.$slots,"default"),m.$slots.default?L("v-if",!0):(g(),B(ge,{key:0},[ke($(m.label),1)],64))],2)):L("v-if",!0)]),_:3},8,["for","class","aria-controls","aria-checked","aria-label","onClick"]))}});var Pe=X(Ba,[["__file","checkbox.vue"]]);const wa=N({name:"ElCheckboxButton"}),_a=N({...wa,props:we,emits:_e,setup(e){const a=e,o=fe(),{isFocused:l,isChecked:u,isDisabled:v,checkboxButtonSize:s,model:r,actualValue:f,handleChange:y}=Ne(a,o),c=b(()=>{var i,d,p,m;return a.trueValue||a.falseValue||a.trueLabel||a.falseLabel?{"true-value":(d=(i=a.trueValue)!=null?i:a.trueLabel)!=null?d:!0,"false-value":(m=(p=a.falseValue)!=null?p:a.falseLabel)!=null?m:!1}:{value:f.value}}),C=F(G,void 0),V=Y("checkbox"),h=b(()=>{var i,d,p,m;const E=(d=(i=C?.fill)==null?void 0:i.value)!=null?d:"";return{backgroundColor:E,borderColor:E,color:(m=(p=C?.textColor)==null?void 0:p.value)!=null?m:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),k=b(()=>[V.b("button"),V.bm("button",s.value),V.is("disabled",v.value),V.is("checked",u.value),V.is("focus",l.value)]);return(i,d)=>(g(),B("label",{class:S(t(k))},[me(P("input",te({"onUpdate:modelValue":p=>he(r)?r.value=p:null,class:t(V).be("button","original"),type:"checkbox",name:i.name,tabindex:i.tabindex,disabled:t(v)},t(c),{onChange:t(y),onFocus:p=>l.value=!0,onBlur:p=>l.value=!1,onClick:ne(()=>{},["stop"])}),null,16,["onUpdate:modelValue","name","tabindex","disabled","onChange","onFocus","onBlur","onClick"]),[[pe,t(r)]]),i.$slots.default||i.label?(g(),B("span",{key:0,class:S(t(V).be("button","inner")),style:ye(t(u)?t(h):void 0)},[M(i.$slots,"default",{},()=>[ke($(i.label),1)])],6)):L("v-if",!0)],2))}});var re=X(_a,[["__file","checkbox-button.vue"]]);const Na=Ie({modelValue:{type:R(Array),default:()=>[]},disabled:{type:Boolean,default:void 0},min:Number,max:Number,size:Ve,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},options:{type:R(Array)},props:{type:R(Object),default:()=>Te},type:{type:String,values:["checkbox","button"],default:"checkbox"},...se(["ariaLabel"])}),Pa={[O]:e=>U(e),change:e=>U(e)},Te={label:"label",value:"value",disabled:"disabled"},Ta=N({name:"ElCheckboxGroup"}),Oa=N({...Ta,props:Na,emits:Pa,setup(e,{emit:a}){const o=e,l=Y("checkbox"),u=oe(),{formItem:v}=W(),{inputId:s,isLabeledByFormItem:r}=ie(o,{formItemContext:v}),f=async h=>{a(O,h),await le(),a(D,h)},y=b({get(){return o.modelValue},set(h){f(h)}}),c=b(()=>({...Te,...o.props})),C=h=>{const{label:k,value:i,disabled:d}=c.value,p={label:h[k],value:h[i],disabled:h[d]};return{...Va(h,[k,i,d]),...p}},V=b(()=>o.type==="button"?re:Pe);return Ge(G,{...aa(ze(o),["size","min","max","validateEvent","fill","textColor"]),disabled:u,modelValue:y,changeEvent:f}),q(()=>o.modelValue,(h,k)=>{o.validateEvent&&!Se(h,k)&&v?.validate("change").catch(i=>ue())}),(h,k)=>{var i;return g(),x(_(h.tag),{id:t(s),class:S(t(l).b("group")),role:"group","aria-label":t(r)?void 0:h.ariaLabel||"checkbox-group","aria-labelledby":t(r)?(i=t(v))==null?void 0:i.labelId:void 0},{default:w(()=>[M(h.$slots,"default",{},()=>[(g(!0),B(ge,null,$e(h.options,(d,p)=>(g(),x(_(t(V)),te({key:p},C(d)),null,16))),128))])]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Oe=X(Oa,[["__file","checkbox-group.vue"]]);const Qa=xe(Pe,{CheckboxButton:re,CheckboxGroup:Oe});Le(re);const Wa=Le(Oe),Aa=Ie({modelValue:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:void 0},loading:Boolean,size:{type:String,validator:sa},width:{type:[String,Number],default:""},inlinePrompt:Boolean,inactiveActionIcon:{type:j},activeActionIcon:{type:j},activeIcon:{type:j},inactiveIcon:{type:j},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:R(Function)},id:String,tabindex:{type:[String,Number]},...se(["ariaLabel"])}),Fa={[O]:e=>T(e)||z(e)||K(e),[D]:e=>T(e)||z(e)||K(e),[ae]:e=>T(e)||z(e)||K(e)},Ae="ElSwitch",Da=N({name:Ae}),Ga=N({...Da,props:Aa,emits:Fa,setup(e,{expose:a,emit:o}){const l=e,{formItem:u}=W(),v=ee(),s=Y("switch"),{inputId:r}=ie(l,{formItemContext:u}),f=oe(b(()=>{if(l.loading)return!0})),y=Q(l.modelValue!==!1),c=Ke(),C=b(()=>[s.b(),s.m(v.value),s.is("disabled",f.value),s.is("checked",d.value)]),V=b(()=>[s.e("label"),s.em("label","left"),s.is("active",!d.value)]),h=b(()=>[s.e("label"),s.em("label","right"),s.is("active",d.value)]),k=b(()=>({width:Je(l.width)}));q(()=>l.modelValue,()=>{y.value=!0});const i=b(()=>y.value?l.modelValue:!1),d=b(()=>i.value===l.activeValue);[l.activeValue,l.inactiveValue].includes(i.value)||(o(O,l.inactiveValue),o(D,l.inactiveValue),o(ae,l.inactiveValue)),q(d,n=>{var I;c.value.checked=n,l.validateEvent&&((I=u?.validate)==null||I.call(u,"change").catch(Fe=>ue()))});const p=()=>{const n=d.value?l.inactiveValue:l.activeValue;o(O,n),o(D,n),o(ae,n),le(()=>{c.value.checked=d.value})},m=()=>{if(f.value)return;const{beforeChange:n}=l;if(!n){p();return}const I=n();[ve(I),T(I)].includes(!0)||la(Ae,"beforeChange must return type `Promise<boolean>` or `boolean`"),ve(I)?I.then(ce=>{ce&&p()}).catch(ce=>{}):I&&p()},E=()=>{var n,I;(I=(n=c.value)==null?void 0:n.focus)==null||I.call(n)};return Ue(()=>{c.value.checked=d.value}),a({focus:E,checked:d}),(n,I)=>(g(),B("div",{class:S(t(C)),onClick:ne(m,["prevent"])},[P("input",{id:t(r),ref_key:"input",ref:c,class:S(t(s).e("input")),type:"checkbox",role:"switch","aria-checked":t(d),"aria-disabled":t(f),"aria-label":n.ariaLabel,name:n.name,"true-value":n.activeValue,"false-value":n.inactiveValue,disabled:t(f),tabindex:n.tabindex,onChange:p,onKeydown:Me(m,["enter"])},null,42,["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex","onKeydown"]),!n.inlinePrompt&&(n.inactiveIcon||n.inactiveText)?(g(),B("span",{key:0,class:S(t(V))},[n.inactiveIcon?(g(),x(t(A),{key:0},{default:w(()=>[(g(),x(_(n.inactiveIcon)))]),_:1})):L("v-if",!0),!n.inactiveIcon&&n.inactiveText?(g(),B("span",{key:1,"aria-hidden":t(d)},$(n.inactiveText),9,["aria-hidden"])):L("v-if",!0)],2)):L("v-if",!0),P("span",{class:S(t(s).e("core")),style:ye(t(k))},[n.inlinePrompt?(g(),B("div",{key:0,class:S(t(s).e("inner"))},[n.activeIcon||n.inactiveIcon?(g(),x(t(A),{key:0,class:S(t(s).is("icon"))},{default:w(()=>[(g(),x(_(t(d)?n.activeIcon:n.inactiveIcon)))]),_:1},8,["class"])):n.activeText||n.inactiveText?(g(),B("span",{key:1,class:S(t(s).is("text")),"aria-hidden":!t(d)},$(t(d)?n.activeText:n.inactiveText),11,["aria-hidden"])):L("v-if",!0)],2)):L("v-if",!0),P("div",{class:S(t(s).e("action"))},[n.loading?(g(),x(t(A),{key:0,class:S(t(s).is("loading"))},{default:w(()=>[je(t(Ze))]),_:1},8,["class"])):t(d)?M(n.$slots,"active-action",{key:1},()=>[n.activeActionIcon?(g(),x(t(A),{key:0},{default:w(()=>[(g(),x(_(n.activeActionIcon)))]),_:1})):L("v-if",!0)]):t(d)?L("v-if",!0):M(n.$slots,"inactive-action",{key:2},()=>[n.inactiveActionIcon?(g(),x(t(A),{key:0},{default:w(()=>[(g(),x(_(n.inactiveActionIcon)))]),_:1})):L("v-if",!0)])],2)],6),!n.inlinePrompt&&(n.activeIcon||n.activeText)?(g(),B("span",{key:1,class:S(t(h))},[n.activeIcon?(g(),x(t(A),{key:0},{default:w(()=>[(g(),x(_(n.activeIcon)))]),_:1})):L("v-if",!0),!n.activeIcon&&n.activeText?(g(),B("span",{key:1,"aria-hidden":!t(d)},$(n.activeText),9,["aria-hidden"])):L("v-if",!0)],2)):L("v-if",!0)],10,["onClick"]))}});var za=X(Ga,[["__file","switch.vue"]]);const Xa=xe(za);async function $a(){const{data:e}=await Ee.get("/user/vip");return e}async function Ka(){const{data:e}=await Ee.post("/logout",{});return e}const Ya=Re("user",{state:()=>({vipInfo:null,loading:!1}),getters:{username:e=>e.vipInfo?.username||"",isVip:e=>!!e.vipInfo?.is_vip,vipDaysLeft:e=>Number(e.vipInfo?.days_left||0),vipExpireTime:e=>e.vipInfo?.expire_time||""},actions:{async refreshVipInfo(){this.loading=!0;try{this.vipInfo=await $a()}finally{this.loading=!1}},async logout(){try{await Ka()}catch{}}}});export{Wa as E,Qa as a,Xa as b,ba as i,Va as o,Ya as u};