2 lines
6.9 KiB
JavaScript
2 lines
6.9 KiB
JavaScript
import{_ as ee}from"./_plugin-vue_export-helper-af00840d.js";/* empty css *//* empty css */import{u as te,r as g,A as M,o as se,b as oe,c as d,d as t,e as s,f as a,F as R,B as V,s as v,C as y,t as u,h as S,D as ae,i as ne,G as le,E as ie,H as z,I as re,J as de,l as i,m as r,n as ce,K as h,L as I,M as ue,N as _e,O as me,P as T,p as fe,Q as pe,T as ve,R as he,S as we,U as ge,z as ye}from"./index-cb898b04.js";import{i as be,c as ke}from"./websocket-9a0b24f7.js";import"./jobs-6be64b92.js";const Ce={class:"app-layout"},Me={class:"sidebar-header"},Se={class:"logo-icon"},Ie={class:"sidebar-menu"},xe={class:"menu-text"},De={key:0,class:"sidebar-footer"},Ee={key:1,class:"sidebar-footer"},Ae={class:"layout-main"},Ne={class:"layout-header"},Be={class:"header-left"},Le={class:"breadcrumb"},Re={class:"breadcrumb-item"},Ve={class:"header-right"},ze={key:0,class:"badge"},Te={class:"avatar-button"},Ue={class:"avatar"},Fe={class:"user-info"},We={class:"user-name"},He={class:"user-role"},Oe={class:"layout-content"},$e={class:"content-wrapper"},Je={class:"notification-list"},Pe={key:0,class:"empty-state"},je={key:1},qe={class:"notification-content"},Ge={class:"notification-title"},Ke={class:"notification-message"},Qe={class:"notification-time"},Xe={class:"notification-actions"},Ye={class:"notification-footer"},Ze={__name:"MainLayout",setup(et){const k=ae(),x=ne(),m=te(),f=g(!1),p=g(!1),b=g(!1),_=g([]),w=g(0),U=M(()=>k),F=M(()=>{var e;return(m.userName||((e=m.user)==null?void 0:e.username)||"U").charAt(0).toUpperCase()}),W=M(()=>{const o=[{name:"Home",path:"/home",meta:{title:"首頁",icon:"House",showInMenu:!0}},{name:"Upload",path:"/upload",meta:{title:"檔案上傳",icon:"Upload",showInMenu:!0}},{name:"Jobs",path:"/jobs",meta:{title:"任務列表",icon:"List",showInMenu:!0}},{name:"History",path:"/history",meta:{title:"歷史記錄",icon:"Clock",showInMenu:!0}}];return m.isAdmin&&o.push({name:"Admin",path:"/admin",meta:{title:"管理後台",icon:"Setting",showInMenu:!0,requiresAdmin:!0}}),o.filter(e=>e.meta.showInMenu)}),H=o=>k.path===o||k.path.startsWith(o+"/"),D=()=>{f.value=!f.value,localStorage.setItem("sidebarCollapsed",f.value.toString())},O=()=>{p.value=!p.value},E=()=>{p.value=!1},$=()=>{window.innerWidth<=768&&E()},J=()=>{b.value=!0,A()},P=async o=>{switch(o){case"profile":x.push("/profile");break;case"logout":try{await le.confirm("確定要登出嗎?","確認登出",{confirmButtonText:"確定",cancelButtonText:"取消",type:"warning"}),await m.logout(),ke(),x.push("/login")}catch(e){e!=="cancel"&&console.error("登出錯誤:",e)}break}},A=async()=>{try{_.value=[{id:1,type:"success",title:"翻譯完成",message:"檔案「文件.docx」翻譯完成",created_at:new Date().toISOString(),read:!1},{id:2,type:"warning",title:"系統維護通知",message:"系統將於今晚 23:00 進行維護",created_at:new Date(Date.now()-36e5).toISOString(),read:!0}],w.value=_.value.filter(o=>!o.read).length}catch(o){console.error("載入通知失敗:",o)}},j=o=>{const e=_.value.find(l=>l.id===o);e&&(e.read=!0,w.value=_.value.filter(l=>!l.read).length)},q=()=>{_.value.forEach(o=>{o.read=!0}),w.value=0,he.success("所有通知已標記為已讀")},G=o=>({success:"SuccessFilled",warning:"WarningFilled",error:"CircleCloseFilled",info:"InfoFilled"})[o]||"InfoFilled",K=o=>{const e=new Date,l=new Date(o),c=e-l;return c<6e4?"剛剛":c<36e5?`${Math.floor(c/6e4)} 分鐘前`:c<864e5?`${Math.floor(c/36e5)} 小時前`:l.toLocaleDateString("zh-TW")},N=()=>{window.innerWidth>768&&(p.value=!1)};return se(()=>{const o=localStorage.getItem("sidebarCollapsed");o!==null&&(f.value=o==="true"),be(),A(),window.addEventListener("resize",N)}),oe(()=>{window.removeEventListener("resize",N)}),(o,e)=>{var L;const l=ie,c=z("router-link"),B=we,Q=ge,X=re,Y=z("router-view"),C=ye,Z=de;return i(),d("div",Ce,[t("aside",{class:y(["layout-sidebar",{collapsed:f.value,"mobile-show":p.value}])},[t("div",Me,[s(c,{to:"/home",class:"logo"},{default:a(()=>[t("div",Se,[s(l,null,{default:a(()=>[s(r(ce))]),_:1})]),e[2]||(e[2]=t("div",{class:"logo-text"},"PANJIT 翻譯系統",-1))]),_:1})]),t("nav",Ie,[(i(!0),d(R,null,V(W.value,n=>(i(),h(c,{key:n.name,to:n.path,class:y(["menu-item",{active:H(n.path)}]),onClick:$},{default:a(()=>[s(l,{class:"menu-icon"},{default:a(()=>[(i(),h(I(n.meta.icon)))]),_:2},1024),t("span",xe,u(n.meta.title),1)]),_:2},1032,["to","class"]))),128))]),f.value?(i(),d("div",Ee,[t("button",{class:"collapse-toggle",onClick:D},[s(l,null,{default:a(()=>[s(r(_e))]),_:1})])])):(i(),d("div",De,[t("button",{class:"collapse-toggle",onClick:D},[s(l,null,{default:a(()=>[s(r(ue))]),_:1}),e[3]||(e[3]=v(" 收合側邊欄 ",-1))])]))],2),t("div",{class:y(["mobile-mask",{show:p.value}]),onClick:E},null,2),t("main",Ae,[t("header",Ne,[t("div",Be,[t("button",{class:"menu-toggle",onClick:O},[s(l,null,{default:a(()=>[s(r(me))]),_:1})]),t("nav",Le,[t("span",Re,u(((L=U.value.meta)==null?void 0:L.title)||"首頁"),1)])]),t("div",Ve,[t("div",{class:"notification-bell",onClick:J},[s(l,null,{default:a(()=>[s(r(T))]),_:1}),w.value>0?(i(),d("div",ze)):S("",!0)]),s(X,{class:"user-avatar",onCommand:P},{dropdown:a(()=>[s(Q,null,{default:a(()=>[s(B,{command:"profile"},{default:a(()=>[s(l,null,{default:a(()=>[s(r(fe))]),_:1}),e[4]||(e[4]=v(" 個人設定 ",-1))]),_:1}),s(B,{command:"logout",divided:""},{default:a(()=>[s(l,null,{default:a(()=>[s(r(pe))]),_:1}),e[5]||(e[5]=v(" 登出 ",-1))]),_:1})]),_:1})]),default:a(()=>[t("div",Te,[t("div",Ue,u(F.value),1),t("div",Fe,[t("div",We,u(r(m).userName),1),t("div",He,u(r(m).isAdmin?"管理員":"使用者"),1)])])]),_:1})])]),t("div",Oe,[t("div",$e,[s(Y,null,{default:a(({Component:n})=>[s(ve,{name:"fade",mode:"out-in"},{default:a(()=>[(i(),h(I(n)))]),_:2},1024)]),_:1})])])]),s(Z,{modelValue:b.value,"onUpdate:modelValue":e[1]||(e[1]=n=>b.value=n),title:"系統通知",direction:"rtl",size:"400px"},{footer:a(()=>[t("div",Ye,[w.value>0?(i(),h(C,{key:0,onClick:q},{default:a(()=>[...e[9]||(e[9]=[v(" 全部標記已讀 ",-1)])]),_:1})):S("",!0),s(C,{type:"primary",onClick:e[0]||(e[0]=n=>b.value=!1)},{default:a(()=>[...e[10]||(e[10]=[v(" 關閉 ",-1)])]),_:1})])]),default:a(()=>[t("div",Je,[_.value.length===0?(i(),d("div",Pe,[s(l,{class:"empty-icon"},{default:a(()=>[s(r(T))]),_:1}),e[6]||(e[6]=t("div",{class:"empty-title"},"暂无通知",-1)),e[7]||(e[7]=t("div",{class:"empty-description"},"您目前没有未读通知",-1))])):(i(),d("div",je,[(i(!0),d(R,null,V(_.value,n=>(i(),d("div",{key:n.id,class:y(["notification-item",{unread:!n.read}])},[t("div",{class:y(["notification-icon",n.type])},[s(l,null,{default:a(()=>[(i(),h(I(G(n.type))))]),_:2},1024)],2),t("div",qe,[t("div",Ge,u(n.title),1),t("div",Ke,u(n.message),1),t("div",Qe,u(K(n.created_at)),1)]),t("div",Xe,[n.read?S("",!0):(i(),h(C,{key:0,type:"text",size:"small",onClick:tt=>j(n.id)},{default:a(()=>[...e[8]||(e[8]=[v(" 標記已讀 ",-1)])]),_:2},1032,["onClick"]))])],2))),128))]))])]),_:1},8,["modelValue"])])}}},rt=ee(Ze,[["__scopeId","data-v-2d4958cc"]]);export{rt as default};
|