PageSourceSearch

https://www.corezzle.com/_nuxt/BZqWt_-L.js

js corezzle.com collected 2026-10-08 06:45:31 UTC 10,898 bytes, 1 lines download raw bytes

1import{_ as S,c as _,a as s,m as b,p as y,b as u,t as o,s as m,F as g,q as p,d as v,U as k,bb as D,y as A,r as E,o as d}from"./DNWdprDe.js";import{l as T,g as C,a as M}from"./tWkiuuYN.js";const w={START_WORK:"WORKING",BREAK_END:"WORKING",BREAK_START:"ON_BREAK",UNAVAILABLE:"UNAVAILABLE",END_WORK:"FINISHED"},N={name:"StaffStatus",data(){return{currentStatus:"OFFLINE",logs:[],historyLogs:[],expandedDays:[],loading:!1,now:Date.now(),clockInterval:null,errorConfirm:{showErrorMessage:!1,warnMessage:"",customClass:"",time:3e3}}},created(){},async mounted(){await this.loadStatus(),this.clockInterval=D(()=>{this.now=Date.now()},1e3)},beforeUnmount(){this.clockInterval&&clearInterval(this.clockInterval)},computed:{statusClass(){return"status-"+this.currentStatus.toLowerCase()},isActiveStatus(){return["WORKING","ON_BREAK","UNAVAILABLE"].includes(this.currentStatus)},username(){return this.$store.getters.getUser||""},greeting(){const t=new Date(this.now).getHours();return t<12?this.$t("staff_status.greeting_morning"):t<18?this.$t("staff_status.greeting_afternoon"):this.$t("staff_status.greeting_evening")},todayLabel(){return new Date(this.now).toLocaleDateString(this.$i18n.locale,{day:"numeric",month:"long",year:"numeric",weekday:"long"})},sortedLogs(){return[...this.logs].sort((t,a)=>new Date(t.created_at)-new Date(a.created_at))},sessionTimer(){const t=this.sortedLogs[this.sortedLogs.length-1];if(!t)return"00:00:00";const a=Math.max(0,this.now-new Date(t.created_at).getTime()),n=Math.floor(a/1e3),c=Math.floor(n/3600).toString().padStart(2,"0"),r=Math.floor(n%3600/60).toString().padStart(2,"0"),e=(n%60).toString().padStart(2,"0");return`${c}:${r}:${e}`},historyDays(){const t=[];for(let a=1;a<=3;a++){const n=new Date(this.now);n.setHours(0,0,0,0),n.setDate(n.getDate()-a);const c=this.dateKey(n),r=this.historyLogs.filter(e=>this.dateKey(new Date(e.created_at))===c).sort((e,l)=>new Date(e.created_at)-new Date(l.created_at));t.push({key:c,label:n.toLocaleDateString(this.$i18n.locale,{weekday:"long",day:"numeric",month:"long"}),isYesterday:a===1,logs:r,stats:r.length?this.computeDayStats(r):null})}return t},todayStats(){const t=this.sortedLogs;if(t.length===0)return null;let a=0,n=0,c=0,r=null,e=null;for(const h of t){const i=new Date(h.created_at).getTime();r!==null&&(e==="WORKING"?a+=i-r:e==="ON_BREAK"&&(n+=i-r)),h.event==="BREAK_START"&&c++,r=i,e=w[h.event]||"OFFLINE"}e==="WORKING"?a+=Math.max(0,this.now-r):e==="ON_BREAK"&&(n+=Math.max(0,this.now-r));const l=t.find(h=>h.event==="START_WORK");return{workMs:a,breakMs:n,breakCount:c,startTime:l?this.formatTime(l.created_at):"—"}},availableActions(){const t={event:"START_WORK",key:"start_work",class:"btn-start",icon:["fas","play"]},a={event:"START_WORK",key:"resume_work",class:"btn-start",icon:["fas","play"]},n={event:"BREAK_START",key:"break_start",class:"btn-break",icon:["fas","mug-hot"]},c={event:"BREAK_END",key:"break_end",class:"btn-start",icon:["fas","arrow-rotate-left"]},r={event:"UNAVAILABLE",key:"unavailable",class:"btn-unavailable",icon:["fas","ban"]},e={event:"END_WORK",key:"end_work",class:"btn-end",icon:["fas","power-off"]};switch(this.currentStatus){case"WORKING":return[n,r,e];case"ON_BREAK":return[c,e];case"UNAVAILABLE":return[a,e];case"FINISHED":case"OFFLINE":default:return[t]}}},methods:{async loadStatus(){const[t,a]=await Promise.all([C(),M(3)]);t&&Array.isArray(t.logs)&&(this.logs=t.logs,this.currentStatus=t.current_status||"OFFLINE"),a&&Array.isArray(a.logs)&&(this.historyLogs=a.logs)},toggleDay(t){this.expandedDays.includes(t)?this.expandedDays=this.expandedDays.filter(a=>a!==t):this.expandedDays=[...this.expandedDays,t]},dateKey(t){const a=t.getFullYear(),n=(t.getMonth()+1).toString().padStart(2,"0"),c=t.getDate().toString().padStart(2,"0");return`${a}-${n}-${c}`},computeDayStats(t){let a=0,n=0,c=null,r=null;for(const e of t){const l=new Date(e.created_at).getTime();c!==null&&(r==="WORKING"?a+=l-c:r==="ON_BREAK"&&(n+=l-c)),c=l,r=w[e.event]||"OFFLINE"}return{workMs:a,breakMs:n,startTime:this.formatTime(t[0].created_at),endTime:this.formatTime(t[t.length-1].created_at)}},async handleEvent(t){if(this.loading)return;this.loading=!0;const a=await T(t);if(this.loading=!1,a?.name==="AxiosError"||a?.code==="ERR_BAD_REQUEST"){const c=await k(a?.response?.data?.code,a?.response?.data?.message,this.$te,this.$t);this.errorMessage(!0,c,"error",6e3);return}const n=await k(a?.code,a?.message,this.$te,this.$t);this.errorMessage(!0,n,"success",4e3),await this.loadStatus()},formatTime(t){if(!t||Number.isNaN(new Date(t).getTime()))return"";const a=new Date(t),n=a.getHours().toString().padStart(2,"0"),c=a.getMinutes().toString().padStart(2,"0");return`${n}:${c}`},formatDuration(t){const a=Math.floor(t/6e4),n=Math.floor(a/60),c=a%60;return n>0?`${n}${this.$t("staff_status.hour_short")} ${c}${this.$t("staff_status.minute_short")}`:`${c}${this.$t("staff_status.minute_short")}`},errorMessage(t,a,n,c=3e3){this.errorConfirm.showErrorMessage=t,this.errorConfirm.warnMessage=a,this.errorConfirm.customClass=n,this.errorConfirm.time=c},closeErrorMessage(){this.errorConfirm.showErrorMessage=!1,this.errorConfirm.warnMessage="",this.errorConfirm.customClass=""}}},R={class:"blok-section"},L={class:"draft-section"},I={class:"blok blok-md-12",id:"drag_div"},K={class:"sub-header"},O={class:"status-page"},B={class:"hero-greeting"},$={class:"greeting"},F={class:"date"},W={class:"hero-status"},U={class:"hero-status-text"},V={class:"label"},G={class:"value"},H={key:0,class:"session-timer"},x={class:"timer-label"},Y={class:"timer-value"},q={class:"hero-hint"},z={class:"actions"},P=["disabled","onClick"],Q={key:0,class:"stats-grid"},j={class:"stat-card"},J={class:"stat-icon icon-start"},X={class:"stat-text"},Z={class:"stat-value"},tt={class:"stat-label"},st={class:"stat-card"},et={class:"stat-icon icon-work"},at={class:"stat-text"},ot={class:"stat-value"},nt={class:"stat-label"},rt={class:"stat-card"},it={class:"stat-icon icon-break"},ct={class:"stat-text"},lt={class:"stat-value"},dt={class:"stat-label"},_t={class:"stat-card"},ut={class:"stat-icon icon-count"},ht={class:"stat-text"},ft={class:"stat-value"},mt={class:"stat-label"},gt={class:"timeline-section"},yt={key:0,class:"timeline-empty"},vt={class:"empty-icon"},pt={class:"empty-title"},kt={class:"empty-hint"},wt={key:1,class:"timeline"},St={class:"time"},bt={class:"event-label"},Dt={class:"history-section"},At=["disabled","onClick"],Et={class:"history-day-title"},Tt={class:"history-date"},Ct={key:0,class:"history-badge"},Mt={class:"history-day-meta"},Nt={class:"meta-chip chip-range"},Rt={class:"meta-chip chip-work"},Lt={class:"meta-chip chip-break"},It={key:1,class:"meta-chip chip-empty"},Kt={key:0,class:"timeline history-timeline"},Ot={class:"time"},Bt={class:"event-label"};function $t(t,a,n,c,r,e){const l=E("font-awesome-icon"),h=A;return d(),_(g,null,[s("div",R,[s("div",L,[s("div",I,[s("div",K,[s("div",null,[u(l,{class:"icon",icon:["fas","user-clock"]}),s("span",null,o(t.$t("staff_status.title")),1)])]),s("div",O,[s("div",{class:m(["hero",e.statusClass])},[s("div",B,[s("span",$,o(e.greeting)+", "+o(e.username)+" 👋",1),s("span",F,o(e.todayLabel),1)]),s("div",W,[s("span",{class:m(["dot",{pulsing:e.isActiveStatus}])},null,2),s("div",U,[s("span",V,o(t.$t("staff_status.current_status")),1),s("strong",G,o(t.$t("staff_status.status_"+r.currentStatus.toLowerCase())),1)]),e.isActiveStatus?(d(),_("div",H,[s("span",x,o(t.$t("staff_status.session_duration")),1),s("span",Y,o(e.sessionTimer),1)])):y("",!0)]),s("p",q,o(t.$t("staff_status.hint_"+r.currentStatus.toLowerCase())),1),s("div",z,[(d(!0),_(g,null,p(e.availableActions,i=>(d(),_("button",{key:i.event,class:m(["status-btn",i.class]),disabled:r.loading,onClick:f=>e.handleEvent(i.event)},[u(l,{icon:i.icon,class:"btn-icon"},null,8,["icon"]),s("span",null,o(t.$t("staff_status."+i.key)),1)],10,P))),128))])],2),e.todayStats?(d(),_("div",Q,[s("div",j,[s("span",J,[u(l,{icon:["fas","flag-checkered"]})]),s("div",X,[s("strong",Z,o(e.todayStats.startTime),1),s("span",tt,o(t.$t("staff_status.stat_start_time")),1)])]),s("div",st,[s("span",et,[u(l,{icon:["fas","briefcase"]})]),s("div",at,[s("strong",ot,o(e.formatDuration(e.todayStats.workMs)),1),s("span",nt,o(t.$t("staff_status.stat_total_work")),1)])]),s("div",rt,[s("span",it,[u(l,{icon:["fas","mug-hot"]})]),s("div",ct,[s("strong",lt,o(e.formatDuration(e.todayStats.breakMs)),1),s("span",dt,o(t.$t("staff_status.stat_total_break")),1)])]),s("div",_t,[s("span",ut,[u(l,{icon:["fas","hashtag"]})]),s("div",ht,[s("strong",ft,o(e.todayStats.breakCount),1),s("span",mt,o(t.$t("staff_status.stat_break_count")),1)])])])):y("",!0),s("div",gt,[
1s("h4",null,[u(l,{icon:["fas","timeline"],class:"timeline-title-icon"}),v(" "+o(t.$t("staff_status.today_timeline")),1)]),r.logs.length===0?(d(),_("div",yt,[s("span",vt,[u(l,{icon:["fas","sun"]})]),s("p",pt,o(t.$t("staff_status.no_records")),1),s("p",kt,o(t.$t("staff_status.no_records_hint")),1)])):(d(),_("ul",wt,[(d(!0),_(g,null,p(e.sortedLogs,i=>(d(),_("li",{key:i.id,class:"timeline-item"},[s("span",St,o(e.formatTime(i.created_at)),1),s("span",{class:m(["event-dot","status-"+(i.status||"").toLowerCase()])},null,2),s("span",bt,o(t.$t("staff_status.event_"+i.event.toLowerCase())),1)]))),128))]))]),s("div",Dt,[s("h4",null,[u(l,{icon:["fas","calendar-days"],class:"timeline-title-icon"}),v(" "+o(t.$t("staff_status.history_title")),1)]),(d(!0),_(g,null,p(e.historyDays,i=>(d(),_("div",{key:i.key,class:m(["history-day",{expanded:r.expandedDays.includes(i.key)}])},[s("button",{class:"history-day-header",type:"button",disabled:i.logs.length===0,onClick:f=>e.toggleDay(i.key)},[s("div",Et,[s("strong",Tt,o(i.label),1),i.isYesterday?(d(),_("span",Ct,o(t.$t("staff_status.yesterday")),1)):y("",!0)]),s("div",Mt,[i.stats?(d(),_(g,{key:0},[s("span",Nt,[u(l,{icon:["fas","clock"]}),v(" "+o(i.stats.startTime)+" – "+o(i.stats.endTime),1)]),s("span",Rt,[u(l,{icon:["fas","briefcase"]}),v(" "+o(e.formatDuration(i.stats.workMs)),1)]),s("span",Lt,[u(l,{icon:["fas","mug-hot"]}),v(" "+o(e.formatDuration(i.stats.breakMs)),1)]),u(l,{icon:["fas","chevron-down"],class:"chevron"})],64)):(d(),_("span",It,o(t.$t("staff_status.no_activity")),1))])],8,At),r.expandedDays.includes(i.key)?(d(),_("ul",Kt,[(d(!0),_(g,null,p(i.logs,f=>(d(),_("li",{key:f.id,class:"timeline-item"},[s("span",Ot,o(e.formatTime(f.created_at)),1),s("span",{class:m(["event-dot","status-"+(f.status||"").toLowerCase()])},null,2),s("span",Bt,o(t.$t("staff_status.event_"+f.event.toLowerCase())),1)]))),128))])):y("",!0)],2))),128))])])])])]),r.errorConfirm.showErrorMessage?(d(),b(h,{key:0,customClass:r.errorConfirm.customClass,"warn-message":r.errorConfirm.warnMessage,timeOut:r.errorConfirm.time,onClose:e.closeErrorMessage},null,8,["customClass","warn-message","timeOut","onClose"])):y("",!0)],64)}const Ut=S(N,[["render",$t],["__scopeId","data-v-5313e9b1"]]);export{Ut as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.