3 lines
14 KiB
JavaScript
3 lines
14 KiB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ReportPage-fzVH-d9u.js","./vendor-element-B5S5pUKo.js","./vendor-vue-CVxSw_oJ.js","./vendor-misc-BeoNyvBp.js","./vendor-element-C68yOrAy.css","./email-px7YBG2O.js","./tasks-Bep0SUyu.js","./system-ZDPnxnIu.js","./MetricGrid-BnihYB_8.js","./MetricGrid-yP_dkP6X.css","./vendor-axios-B9ygI19o.js","./ReportPage-BCQBCnjY.css","./UsersPage-DJZUCpfb.js","./users-te9ySk34.js","./UsersPage-BNDnhJe0.css","./FeedbacksPage-BAnFKHSL.js","./FeedbacksPage-mrXjCiV2.css","./LogsPage-DFPeq0bL.js","./LogsPage-D1bozCEo.css","./AnnouncementsPage-C6UgwLIT.js","./AnnouncementsPage-DOwZaaOu.css","./EmailPage-CATruPK6.js","./EmailPage-BmPCDPYC.css","./SecurityPage-xwMQfhuh.js","./SecurityPage-DN76ndc_.css","./SystemPage-D3eBPCNe.js","./SystemPage-BhhEz4Qz.css","./SettingsPage-DRqlQLxJ.js","./SettingsPage-BAa-Qu3q.css"])))=>i.map(i=>d[i]);
|
|
import{aj as h,D as S,q as y,ax as Se,ay as ke,r as O,c as Z,o as Te,R as Ae,E as i,G as ee,L as _,t as m,n as I,K as te,a3 as ne,H as ae,J as C,I as se,az as Pe,p as $,aA as Re,aB as Le,as as xe}from"./vendor-vue-CVxSw_oJ.js";import{E as ie,a as le,d as Ne,u as Oe,c as Ce,l as Be,b as De,m as Me,e as Ve,t as Ie,s as Fe,i as Ke,z as $e}from"./vendor-element-B5S5pUKo.js";import{a as qe}from"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))s(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&s(l)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();const ue=(e,t)=>{const n=e.__vccOpts||e;for(const[s,a]of t)n[s]=a;return n},Ue={};function Ge(e,t){const n=h("RouterView");return y(),S(n)}const je=ue(Ue,[["render",Ge]]),He="modulepreload",Ye=function(e,t){return new URL(e,t).href},oe={},k=function(t,n,s){let a=Promise.resolve();if(n&&n.length>0){let T=function(f){return Promise.all(f.map(g=>Promise.resolve(g).then(w=>({status:"fulfilled",value:w}),w=>({status:"rejected",reason:w}))))};const l=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),v=r?.nonce||r?.getAttribute("nonce");a=T(n.map(f=>{if(f=Ye(f,s),f in oe)return;oe[f]=!0;const g=f.endsWith(".css"),w=g?'[rel="stylesheet"]':"";if(s)for(let A=l.length-1;A>=0;A--){const E=l[A];if(E.href===f&&(!g||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${f}"]${w}`))return;const b=document.createElement("link");if(b.rel=g?"stylesheet":He,g||(b.as="script"),b.crossOrigin="",b.href=f,v&&b.setAttribute("nonce",v),document.head.appendChild(b),g)return new Promise((A,E)=>{b.addEventListener("load",A),b.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${f}`)))})}))}function o(l){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=l,window.dispatchEvent(r),!r.defaultPrevented)throw l}return a.then(l=>{for(const r of l||[])r.status==="rejected"&&o(r.reason);return t().catch(o)})};let re="",ce=0;const ze=new Set([408,425,429,500,502,503,504]),We=1,Je=300;function B(e,t,n=1500){const s=Date.now();e===re&&s-ce<n||(re=e,ce=s,le.error(t))}function Xe(e){const t=String(e).replace(/([.*+?^${}()|[\]\\])/g,"\\$1"),n=document.cookie.match(new RegExp(`(?:^|; )${t}=([^;]*)`));return n?decodeURIComponent(n[1]):""}function Qe(e){return["GET","HEAD","OPTIONS"].includes(String(e||"GET").toUpperCase())}function Ze(e){const t=e?.config;if(!t||t.__no_retry||!Qe(t.method)||Number(t.__retry_count||0)>=We)return!1;const s=String(e?.code||"");if(s==="ECONNABORTED"||s==="ERR_NETWORK")return!0;const a=Number(e?.response?.status||0);return ze.has(a)}function et(e){return new Promise(t=>{window.setTimeout(t,Math.max(0,Number(e||0)))})}async function tt(e,t){const n=e?.config||{},s=Number(n.__retry_count||0);n.__retry_count=s+1;const a=Je*(s+1);return await et(a),t.request(n)}const p=qe.create({baseURL:"/yuyx/api",timeout:3e4,withCredentials:!0});let D=null;async function nt(){return D||(D=ie.prompt("请输入管理员密码进行二次确认","安全确认",{inputType:"password",inputPlaceholder:"管理员密码",confirmButtonText:"确认",cancelButtonText:"取消",inputValidator:e=>!!String(e||"").trim(),inputErrorMessage:"密码不能为空"}).then(async e=>{const t=String(e.value||"").trim();await p.post("/admin/reauth",{password:t}),le.success("已通过安全确认")}).finally(()=>{D=null}),D)}p.interceptors.request.use(e=>{const t=String(e?.method||"GET").toUpperCase();if(!["GET","HEAD","OPTIONS"].includes(t)){const n=Xe("csrf_token");n&&(e.headers=e.headers||{},e.headers["X-CSRF-Token"]=n)}return e});p.interceptors.response.use(e=>e,async e=>{const t=e?.response?.status,n=e?.response?.data,s=n?.error||n?.message||e?.message||"请求失败",a=!!e?.config?.__silent;if(n?.code==="reauth_required"&&e?.config&&!e.config.__reauth_retry)try{return e.config.__reauth_retry=!0,await nt(),p.request(e.config)}catch{return Promise.reject(e)}return Ze(e)?tt(e,p):(t===401?(a||B("401",s,3e3),(window.location?.pathname||"").startsWith("/yuyx")||(window.location.href="/yuyx")):t===403?a||B("403",s,5e3):t?a||B(`http:${t}:${s}`,s):e?.code==="ECONNABORTED"?a||B("timeout","请求超时",3e3):a||B(`net:${s}`,s,3e3),Promise.reject(e))});function de(e,t=0){let n=!1,s=null,a=0,o=null;async function l(v={}){const T=!!v?.force,f=Date.now();return!T&&n&&f<a?s:(!T&&o||(o=Promise.resolve().then(()=>e()).then(g=>{s=g,n=!0;const w=Math.max(0,Number(t)||0);return a=Date.now()+w,g}).finally(()=>{o=null})),o)}function r(){n=!1,s=null,a=0,o=null}return{run:l,clear:r}}const at=1e4,fe=de(async()=>{const{data:e}=await p.get("/feedbacks",{params:{limit:1,offset:0}});return e?.stats},at);async function Ut(e=""){const{data:t}=await p.get("/feedbacks",{params:e?{status:e}:{}});return t}async function st(e={}){return fe.run(e)}function q(){fe.clear()}async function Gt(e,t){const{data:n}=await p.post(`/feedbacks/${e}/reply`,{reply:t});return q(),n}async function jt(e){const{data:t}=await p.post(`/feedbacks/${e}/close`);return q(),t}async function Ht(e){const{data:t}=await p.delete(`/feedbacks/${e}`);return q(),t}const ot=15e3,rt=de(async()=>{const{data:e}=await p.get("/stats");return e},ot);async function ct(e={}){return rt.run(e)}async function it(e={},t={}){const{data:n}=await p.get("/kdocs/status",{params:e,...t});return n}async function Yt(e={}){const t={force:!0,...e},{data:n}=await p.post("/kdocs/qr",t);return n}async function zt(){const{data:e}=await p.post("/kdocs/clear-login",{});return e}const U="admin:kdocs:status:v1",me=300*1e3;let P=null,L=0,R=null;function G(){return Date.now()}function F(e){return!e||typeof e!="object"?{}:e}function lt(){try{const e=window.sessionStorage.getItem(U);if(!e)return null;const t=JSON.parse(e);if(!t||typeof t!="object")return null;const n=Number(t.updated_at||0),s=F(t.status);return n?{status:s,updatedAt:n}:null}catch{return null}}function ut(e,t){try{window.sessionStorage.setItem(U,JSON.stringify({status:F(e),updated_at:Number(t||G())}))}catch{}}function dt(){if(P!==null)return;const e=lt();e&&(P=e.status,L=e.updatedAt)}function pe(e){return P=F(e),L=G(),ut(P,L),P}function ft(e){if(P===null||!L)return!1;const t=Number(e);return!Number.isFinite(t)||t<0?!0:G()-L<=t}function mt(e={}){dt();const t=e.maxAgeMs??me;return ft(t)?F(P):null}function Wt(e){return pe(e)}function pt(){P=null,L=0,R=null;try{window.sessionStorage.removeItem(U)}catch{}}async function _t(e={}){const{force:t=!1,maxAgeMs:n=me,silent:s=!0,live:a=0}=e;if(!t){const r=mt({maxAgeMs:n});if(r)return r}return R||(R=it(a?{live:1}:{},{__silent:!!s,__no_retry:!0,timeout:8e3}).then(r=>pe(r||{})).finally(()=>{R=null}),R)}const ht={class:"menu-label"},yt={key:1,class:"menu-label"},gt={class:"header-left"},bt={class:"header-right"},vt={class:"admin-name"},wt={class:"main-shell"},Et={class:"menu-label"},St={key:1,class:"menu-label"},kt=6e4,Tt=18e4,At={__name:"AdminLayout",setup(e){const t=Se(),n=ke(),s=O({}),a=Z(()=>s.value?.admin_username||"");async function o(d={}){s.value=await ct(d)}const l=O(!1),r=O(0);let v=null;async function T(d=null){if(d&&typeof d=="object"){Object.prototype.hasOwnProperty.call(d,"pendingFeedbacks")&&(r.value=Number(d.pendingFeedbacks||0));return}if(!l.value){l.value=!0;try{const c=await st();r.value=Number(c?.pending||0)}finally{l.value=!1}}}function f(){return typeof document>"u"?!1:document.visibilityState==="hidden"}function g(){return f()?Tt:kt}function w(){v&&(window.clearTimeout(v),v=null)}function b(){w(),v=window.setTimeout(async()=>{v=null,await T().catch(()=>{}),b()},g())}function A(){b()}$("refreshStats",o),$("adminStats",s),$("refreshNavBadges",T);const E=O(!1),x=O(!1);let M;function K(){E.value=!!M?.matches,E.value||(x.value=!1)}Te(async()=>{M=window.matchMedia("(max-width: 768px)"),M.addEventListener?.("change",K),K(),_t({maxAgeMs:6e4,silent:!0}).catch(()=>{}),await o(),await T(),b(),window.addEventListener("visibilitychange",A)}),Ae(()=>{M?.removeEventListener?.("change",K),w(),window.removeEventListener("visibilitychange",A)});const j=[{path:"/reports",label:"报表",icon:Ne},{path:"/users",label:"用户",icon:Oe},{path:"/feedbacks",label:"反馈",icon:Ce,badgeKey:"feedbacks"},{path:"/logs",label:"任务日志",icon:Be},{path:"/announcements",label:"公告",icon:De},{path:"/email",label:"邮件",icon:Me},{path:"/security",label:"安全防护",icon:Ve},{path:"/system",label:"系统配置",icon:Ie},{path:"/settings",label:"设置",icon:Fe}],H=Z(()=>t.path);function V(d){return d?.badgeKey&&d.badgeKey==="feedbacks"?Number(r.value||0):0}async function _e(){let d=!1;try{await ie.confirm("确定退出管理员登录吗?","退出登录",{confirmButtonText:"退出",cancelButtonText:"取消",type:"warning"}),d=!0}catch(c){const N=String(c||"").toLowerCase();if(N==="cancel"||N==="close")return;try{d=window.confirm("确定退出管理员登录吗?")}catch{d=!1}}if(d)try{await p.post("/logout")}finally{pt(),window.location.href="/yuyx"}}async function Y(d){await n.push(d),x.value=!1}return(d,c)=>{const N=h("el-icon"),z=h("el-badge"),W=h("el-menu-item"),J=h("el-menu"),he=h("el-aside"),X=h("el-button"),ye=h("el-header"),ge=h("RouterView"),be=h("el-skeleton"),ve=h("el-card"),we=h("el-main"),Q=h("el-container"),Ee=h("el-drawer");return y(),S(Q,{class:"layout-root"},{default:i(()=>[E.value?ee("",!0):(y(),S(he,{key:0,width:"220px",class:"layout-aside"},{default:i(()=>[c[2]||(c[2]=m("div",{class:"brand"},[m("div",{class:"brand-title"},"后台管理"),m("div",{class:"brand-sub app-muted"},"知识管理平台")],-1)),_(J,{"default-active":H.value,class:"aside-menu",router:"",onSelect:Y},{default:i(()=>[(y(),I(te,null,ne(j,u=>_(W,{key:u.path,index:u.path},{default:i(()=>[_(N,null,{default:i(()=>[(y(),S(ae(u.icon)))]),_:2},1024),V(u)>0?(y(),S(z,{key:0,value:V(u),max:99,class:"menu-badge"},{default:i(()=>[m("span",ht,C(u.label),1)]),_:2},1032,["value"])):(y(),I("span",yt,C(u.label),1))]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1})),_(Q,null,{default:i(()=>[_(ye,{class:"layout-header"},{default:i(()=>[m("div",gt,[E.value?(y(),S(X,{key:0,text:"",class:"header-menu-btn",onClick:c[0]||(c[0]=u=>x.value=!0)},{default:i(()=>[...c[3]||(c[3]=[se(" 菜单 ",-1)])]),_:1})):ee("",!0),c[4]||(c[4]=m("div",{class:"header-title"},"后台管理系统",-1))]),m("div",bt,[m("div",vt,[c[5]||(c[5]=m("span",{class:"app-muted"},"管理员",-1)),m("strong",null,C(a.value||"-"),1)]),_(X,{type:"primary",plain:"",class:"logout-btn",onClick:_e},{default:i(()=>[...c[6]||(c[6]=[se("退出",-1)])]),_:1})])]),_:1}),_(we,{class:"layout-main"},{default:i(()=>[m("div",wt,[(y(),S(Pe,null,{default:i(()=>[_(ge)]),fallback:i(()=>[_(ve,{shadow:"never","body-style":{padding:"16px"},class:"fallback-card"},{default:i(()=>[_(be,{rows:5,animated:""})]),_:1})]),_:1}))])]),_:1})]),_:1}),_(Ee,{modelValue:x.value,"onUpdate:modelValue":c[1]||(c[1]=u=>x.value=u),size:"min(82vw, 280px)",direction:"ltr","with-header":!1},{default:i(()=>[c[7]||(c[7]=m("div",{class:"drawer-brand"},[m("div",{class:"brand-title"},"后台管理"),m("div",{class:"brand-sub app-muted"},"知识管理平台")],-1)),_(J,{"default-active":H.value,class:"aside-menu",router:"",onSelect:Y},{default:i(()=>[(y(),I(te,null,ne(j,u=>_(W,{key:u.path,index:u.path},{default:i(()=>[_(N,null,{default:i(()=>[(y(),S(ae(u.icon)))]),_:2},1024),V(u)>0?(y(),S(z,{key:0,value:V(u),max:99,class:"menu-badge"},{default:i(()=>[m("span",Et,C(u.label),1)]),_:2},1032,["value"])):(y(),I("span",St,C(u.label),1))]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1},8,["modelValue"])]),_:1})}}},Pt=ue(At,[["__scopeId","data-v-c6ed865d"]]),Rt=()=>k(()=>import("./ReportPage-fzVH-d9u.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),Lt=()=>k(()=>import("./UsersPage-DJZUCpfb.js"),__vite__mapDeps([12,13,1,2,3,4,10,14]),import.meta.url),xt=()=>k(()=>import("./FeedbacksPage-BAnFKHSL.js"),__vite__mapDeps([15,8,2,9,1,3,4,10,16]),import.meta.url),Nt=()=>k(()=>import("./LogsPage-DFPeq0bL.js"),__vite__mapDeps([17,13,6,1,2,3,4,10,18]),import.meta.url),Ot=()=>k(()=>import("./AnnouncementsPage-C6UgwLIT.js"),__vite__mapDeps([19,1,2,3,4,10,20]),import.meta.url),Ct=()=>k(()=>import("./EmailPage-CATruPK6.js"),__vite__mapDeps([21,5,8,2,9,1,3,4,10,22]),import.meta.url),Bt=()=>k(()=>import("./SecurityPage-xwMQfhuh.js"),__vite__mapDeps([23,8,2,9,1,3,4,10,24]),import.meta.url),Dt=()=>k(()=>import("./SystemPage-D3eBPCNe.js"),__vite__mapDeps([25,7,1,2,3,4,10,26]),import.meta.url),Mt=()=>k(()=>import("./SettingsPage-DRqlQLxJ.js"),__vite__mapDeps([27,1,2,3,4,10,28]),import.meta.url),Vt=[{path:"/",component:Pt,children:[{path:"",redirect:"/reports"},{path:"/pending",redirect:"/reports"},{path:"/stats",redirect:"/reports"},{path:"/reports",name:"reports",component:Rt},{path:"/users",name:"users",component:Lt},{path:"/feedbacks",name:"feedbacks",component:xt},{path:"/logs",name:"logs",component:Nt},{path:"/announcements",name:"announcements",component:Ot},{path:"/email",name:"email",component:Ct},{path:"/security",name:"security",component:Bt},{path:"/system",name:"system",component:Dt},{path:"/settings",name:"settings",component:Mt}]}],It=Re({history:Le(),routes:Vt});xe(je).use(It).use(Ke,{locale:$e}).mount("#app");export{ue as _,p as a,Ut as b,de as c,jt as d,Ht as e,st as f,mt as g,Yt as h,zt as i,it as j,_t as p,Gt as r,Wt as u};
|