PageSourceSearch

https://smartkintai.ai/assets/Punch-BqDaMQbQ.js

js smartkintai.ai collected 2026-10-05 15:05:53 UTC 24,943 bytes, 1 lines download raw bytes

1import{d as Ue,r as h,a as ge,c as Ie,o as je,b as Ke,e as b,f as i,g as c,t as k,w as d,h as Je,i as $,j as W,u as N,m as qe,F as Pe,k as He,l as Qe,n as ae,p as Ye,q as Ze,E as v,s as y,v as Xe,x as et,y as tt,z as at,A as I,B as st,C as nt,D as ot,G as it,H as lt,I as rt,J as ct,K as ut,L as dt,M as pt}from"./index-C6DB0I7I.js";import{a as mt}from"./index-D5lHaTRS.js";import{e as gt}from"./auth-jgLYqy-7.js";import{e as vt,g as ft,u as ht}from"./punch-BxPxL5IN.js";import{e as G}from"./employeeClient-DfmVny7z.js";import{g as yt}from"./schedules-CTFT7y1f.js";import{g as Te}from"./jstDate-CPejOz6u.js";import{E as wt,C as _t}from"./EmployeeSideMenu-CPND92bi.js";import{_ as bt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./authApi-gU8Bzwv7.js";import"./client-CRttDGue.js";const kt=async o=>(await G.get(`/employees/tenant/${o}`)).data.data,St=async()=>(await G.get("/employees/push/vapid-key")).data.data,It=async(o,u)=>{await G.post("/employees/push/subscribe",{subscription:o.toJSON(),deviceName:u})},Pt=async o=>{await G.post("/employees/push/unsubscribe",{endpoint:o})},Ce=async()=>(await G.get("/employees/push/subscriptions")).data.data,Tt=async o=>{await G.delete(`/employees/push/subscriptions/${o}`)},Ct=async o=>{const _=new TextEncoder().encode(o),f=await crypto.subtle.digest("SHA-256",_);return Array.from(new Uint8Array(f)).map(p=>p.toString(16).padStart(2,"0")).join("")},Et=()=>{try{const o=document.createElement("canvas"),u=o.getContext("2d");return u?(o.width=200,o.height=50,u.textBaseline="top",u.font="14px Arial",u.fillStyle="#f60",u.fillRect(125,1,62,20),u.fillStyle="#069",u.fillText("TimeCard FP",2,15),u.fillStyle="rgba(102, 204, 0, 0.7)",u.fillText("TimeCard FP",4,17),o.toDataURL()):""}catch{return""}},xt=()=>{try{const o=document.createElement("canvas"),u=o.getContext("webgl")||o.getContext("experimental-webgl");if(!u)return"";const _=u.getExtension("WEBGL_debug_renderer_info");if(!_)return"";const f=u.getParameter(_.UNMASKED_VENDOR_WEBGL),T=u.getParameter(_.UNMASKED_RENDERER_WEBGL);return`${f}~${T}`}catch{return""}},Nt=()=>{const o=["monospace","sans-serif","serif"],u=["Arial","Verdana","Helvetica","Times New Roman","Georgia","Courier New","Trebuchet MS","Impact","Comic Sans MS","Meiryo","MS Gothic","Yu Gothic","Hiragino Sans"],_="mmmmmmmmmmlli",f="72px",p=document.createElement("canvas").getContext("2d");if(!p)return"";const L=[];for(const E of u){let x=!1;for(const D of o){p.font=`${f} ${D}`;const V=p.measureText(_).width;p.font=`${f} '${E}', ${D}`;const O=p.measureText(_).width;if(V!==O){x=!0;break}}x&&L.push(E)}return L.join(",")},Lt=async()=>{const o=[],u=navigator.userAgent,_=`${screen.width}x${screen.height}x${screen.colorDepth}`,f=Intl.DateTimeFormat().resolvedOptions().timeZone,T=navigator.language,p=navigator.platform,L=navigator.cookieEnabled,E=navigator.doNotTrack==="1";o.push(u),o.push(_),o.push(f),o.push(T),o.push(p),o.push(String(L)),o.push(String(E));const x=Et();o.push(x);const D=xt();o.push(D);const V=Nt();o.push(V),o.push(String(navigator.hardwareConcurrency||0)),o.push(String(navigator.deviceMemory||0)),o.push(String(navigator.maxTouchPoints||0));const O=o.join("|||");return{fingerprint:(await Ct(O)).substring(0,64),userAgent:u,screenResolution:_,timezone:f,language:T,platform:p,cookiesEnabled:L,doNotTrack:E}},Mt={class:"punch-container"},Rt={key:0,class:"login-screen"},$t={class:"login-card"},Dt={class:"login-header"},At={class:"company-name"},Vt={class:"login-help-links"},Ot={key:1,class:"punch-screen"},Ft={class:"punch-header"},zt={class:"header-info"},Wt={class:"header-date"},Gt={class:"current-time"},Bt={class:"time"},Ut={key:0,class:"today-schedule"},jt={class:"today-schedule__time"},Kt={class:"punch-buttons-main"},Jt={class:"btn-text"},qt={class:"btn-text"},Ht={class:"punch-buttons-sub"},Qt={class:"btn-text"},Yt={class:"today-records"},Zt={key:0,class:"records-list"},Xt={class:"record-main"},ea={class:"record-time"},ta={key:0,class:"record-gps"},aa={class:"gps-coords"},sa={key:1,class:"empty-punch-state"},na={class:"push-notification-section"},oa={class:"section-header"},ia={key:0,class:"push-warning"},la={key:1,class:"push-warning"},ra={key:2,class:"push-warning"},ca={key:3,class:"push-controls"},Ee="punch_last_employee_code",ua=3e3,da=3e4,pa=Ue({__name:"Punch",setup(o){const u=Ze(),_=Xe(),f=h(!1),T=h(!1),p=h(null),L=h(),E=h(!1),x=h(""),D=h(""),V=h(""),O=h(window.innerWidth<=768);let J=null;const P=ge({employeeCode:localStorage.getItem(Ee)||"",password:""}),B=ge({id:"",employeeCode:"",fullName:"",companyName:"",departmentName:"",tenantId:""}),S=ge({enabled:!1,strictMode:!1,allowOutsidePunch:!0}),C=h([]),q=h(null),H=h(!1),M=h(!1),se=h(!1),m=h("default"),Q=h(!1),ne=h(!1);let F=null;const l=h(""),xe=async()=>{const t=Ye();if(t)try{const n=await mt.get(`/api/public/tenant/by-subdomain/${t}`);if(n.data.success){l.value=n.data.data.id,x.value=n.data.data.companyName;return}}catch{}const e=u.query.tenant||u.query.tenantId;if(e&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)){l.value=e;return}const s=localStorage.getItem("pwa_tenant_id");if(s){l.value=s;return}l.value||v({type:"error",message:"テナントIDが指定されていません。URLを確認してください。",duration:3e3})},ve=()=>{const t=Te();D.value=t.toLocaleTimeString("ja-JP",{hour:"2-digit",minute:"2-digit",second:"2-digit"}),V.value=t.toLocaleDateString("ja-JP",{year:"numeric",month:"long",day:"numeric",weekday:"long"})},oe=()=>{O.value=window.innerWidth<=768},Ne=async()=>{const t=localStorage.getItem(`punch_session_${l.value}`);if(!localStorage.getItem("employees_accessToken")){localStorage.removeItem(`punch_session_${l.value}`),localStorage.removeItem(`punch_gps_settings_${l.value}`);return}if(t)try{const a=JSON.parse(t);Object.assign(B,a),f.value=!0;const s=localStorage.getItem(`punch_gps_settings_${l.value}`);if(s){const n=JSON.parse(s);S.enabled=n.enabled??!1,S.strictMode=n.strictMode??!1,S.allowOutsidePunch=n.allowOutsidePunch??!0}await j()}catch{localStorage.removeItem(`punch_session_${l.value}`),localStorage.removeItem(`punch_gps_settings_${l.value}`),localStorage.removeItem("employees_accessToken")}},Le=async()=>
1{if(!l.value){v({type:"error",message:"テナントIDが指定されていません",duration:3e3});return}try{const t=await kt(l.value);x.value=t.companyName}catch{x.value="テナント情報取得失敗"}},ie=async()=>{var t,e;if(!P.employeeCode||!P.password){v({type:"warning",message:"社員コードとパスワードを入力してください",duration:3e3});return}if(!l.value){v({type:"error",message:"テナントIDが指定されていません",duration:3e3});return}T.value=!0;try{const a=await gt({tenantId:l.value,employeeCode:P.employeeCode,password:P.password});localStorage.removeItem("tenant-admin_accessToken"),localStorage.removeItem("tenant-admin_refreshToken"),localStorage.removeItem("saas-admin_accessToken"),localStorage.removeItem("saas-admin_refreshToken"),localStorage.removeItem("accessToken"),localStorage.removeItem("refreshToken"),localStorage.removeItem("employees_accessToken"),localStorage.removeItem("current_role"),localStorage.setItem(Ee,P.employeeCode),localStorage.setItem("employees_accessToken",a.token),a.refreshToken&&localStorage.setItem("employees_refreshToken",a.refreshToken),localStorage.setItem("current_role","employees");const s=a.employee;Object.assign(B,{id:s.id,employeeCode:s.employeeCode,fullName:s.fullName,companyName:s.companyName,departmentName:s.departmentName,tenantId:s.tenantId}),localStorage.setItem(`punch_session_${l.value}`,JSON.stringify(B));const g=window.location.hostname.match(/^([^.]+)\./),w=g&&g[1]!=="www"&&g[1]!=="smartkintai"?g[1]:void 0;if(ut({tenantId:l.value,companyName:s.companyName,subdomain:w}),dt({tenantId:l.value,companyName:s.companyName,subdomain:w}),(e=(t=a.tenantSettings)==null?void 0:t.timecardSettings)!=null&&e.gpsValidation){const A=a.tenantSettings.timecardSettings.gpsValidation;S.enabled=A.enabled??!1,S.strictMode=A.strictMode??!1,S.allowOutsidePunch=A.allowOutsidePunch??!0,localStorage.setItem(`punch_gps_settings_${l.value}`,JSON.stringify(S))}f.value=!0,v({type:"success",message:"ログインしました",duration:3e3}),P.employeeCode="",P.password="";const z=u.query.redirect;if(z&&z.startsWith("/")&&!z.startsWith("//")){_.push(z);return}if(await j(),fe(),M.value){try{await re()}catch{}await ce()}a.requirePasswordChange&&(v({type:"warning",message:"初回ログインのため、パスワードを変更してください",duration:3e3}),E.value=!0)}catch(a){v({type:"error",message:a.message||"ログインに失敗しました",duration:3e3})}finally{T.value=!1}},Me=()=>{_.push({name:"EmployeeResetPassword",query:l.value?{tenantId:l.value}:void 0})},Re=()=>{localStorage.removeItem(`punch_gps_settings_${l.value}`),localStorage.removeItem(`push_notification_status_${l.value}`),pt(),S.enabled=!1,S.strictMode=!1,S.allowOutsidePunch=!0,f.value=!1,C.value=[]},le=()=>new Promise(t=>{if(!navigator.geolocation){v({type:"warning",message:"このブラウザは位置情報に対応していません。GPS情報なしで打刻します。",duration:5e3}),t(null);return}navigator.geolocation.getCurrentPosition(e=>{t({latitude:e.coords.latitude,longitude:e.coords.longitude})},e=>{let a="GPS取得エラー: ";switch(e.code){case e.PERMISSION_DENIED:a+="位置情報の使用が拒否されました。ブラウザの設定で位置情報の使用を許可してください。";break;case e.POSITION_UNAVAILABLE:a+="位置情報を取得できませんでした。GPS信号が弱い可能性があります。";break;case e.TIMEOUT:a+="位置情報の取得がタイムアウトしました。もう一度お試しください。";break;default:a+=e.message||"不明なエラーが発生しました。"}v({type:"warning",message:a+" GPS情報なしで打刻します。",duration:8e3}),t(null)},{enableHighAccuracy:!0,timeout:5e3,maximumAge:3e4})}),Y=async t=>{p.value=t;try{const e=(t==="clock-in"||t==="clock-out")&&S.enabled,[a,{fingerprint:s}]=await Promise.all([e?le():Promise.resolve(null),Lt()]);let n,g;if(e){if(a)n=a.latitude,g=a.longitude;else if(S.strictMode){v({type:"error",message:"位置情報の取得が必須です。GPS設定を確認してください。",duration:3e3}),p.value=null;return}}const w=await vt({tenantId:l.value,employeeId:B.id,type:t,latitude:n,longitude:g,deviceFingerprint:s,userAgent:navigator.userAgent});await j(),w.warning?v({type:"warning",message:`${ue(t)}
1を記録しました(警告: ${w.warning})`,duration:8e3}):v({type:"success",message:`${ue(t)}を記録しました`,duration:5e3})}catch(e){v({type:"error",message:e.message||"打刻に失敗しました",duration:3e3})}finally{p.value=null}},U=h(null),$e=async()=>{try{const t=Te(),e=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0"),n=`${e}-${a}-${s}`,g=await yt(n,n),w=(g==null?void 0:g.data)??g??[];U.value=w.length>0?w[0]:null}catch{U.value=null}},j=async()=>{var t,e;try{const a=await ft(l.value,B.id);C.value=a.records,q.value=a.timeRecordId||null}catch(a){(((t=a.response)==null?void 0:t.status)===401||((e=a.response)==null?void 0:e.status)===403)&&(localStorage.removeItem(`punch_session_${l.value}`),localStorage.removeItem(`punch_gps_settings_${l.value}`),localStorage.removeItem("employees_accessToken"),f.value=!1,v({type:"warning",message:"セッションが切れました。再度ログインしてください",duration:3e3})),C.value=[],q.value=null}},De=async(t,e)=>{if(!(!q.value||H.value)){H.value=!0;try{const a={timeRecordId:q.value};t==="clock-in"?a.isRemoteClockIn=e:a.isRemoteClockOut=e,await ht(a),C.value.find(n=>n.type===t)&&(C.value=C.value.map(n=>n.type===t?{...n,isRemote:e}:n))}catch(a){v({type:"error",message:a.message||"在宅フラグの更新に失敗しました",duration:3e3}),await j()}finally{H.value=!1}}},Ae=()=>{v({type:"success",message:"パスワードを変更しました",duration:3e3})},re=async()=>{try{const t=await navigator.serviceWorker.getRegistration();if(t){const e=t.installing||t.waiting||t.active;return t}try{const e=await navigator.serviceWorker.register("/sw.js",{scope:"/"}),a=new Promise((s,n)=>setTimeout(()=>n(new Error("Service Worker ready timeout (10s)")),1e4));return await Promise.race([navigator.serviceWorker.ready,a]),e}catch(e){throw e.message.includes("404")||e.message.includes("not found"),e}}catch(t){throw t}},fe=()=>{const t="serviceWorker"in navigator&&"PushManager"in window&&"Notification"in window,e=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,a=window.matchMedia("(display-mode: standalone)").matches||window.navigator.standalone===!0;if(e&&!a){se.value=!0,M.value=!1;return}se.value=!1,M.value=t},ce=async()=>{if(!M.value){m.value="not-supported";return}if(Notification.permission==="denied"){m.value="permission-denied";return}const t=`push_notification_status_${l.value}`;try{const a=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(a)F=a,m.value="enabled",localStorage.setItem(t,"enabled");else try{const s=await Ce();s&&s.length>0?(m.value="enabled",localStorage.setItem(t,"enabled")):(m.value=Notification.permission==="granted"?"disabled":"default",localStorage.removeItem(t))}catch{localStorage.getItem(t)==="enabled"?m.value="enabled":m.value=Notification.permission==="granted"?"disabled":"default"}}catch{localStorage.getItem(t)==="enabled"?m.value="enabled":m.value="disabled"}},Ve=async()=>{var t,e;if(!M.value){v({type:"error",message:"お使いのブラウザはプッシュ通知に対応していません",duration:3e3});return}Q.value=!0;try{if(await Notification.requestPermission()!=="granted"){m.value="permission-denied",v({type:"warning",message:"プッシュ通知が拒否されました",duration:3e3}),Q.value=!1;return}const s=await re();if(!s)throw new Error("Service Worker registration failed");const{publicKey:n}=await St(),g=await s.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:Fe(n)});F=g,await It(g,"打刻端末"),m.value="enabled",localStorage.setItem(`push_notification_status_${l.value}`,"enabled"),v({type:"success",message:"プッシュ通知を有効にしました",duration:3e3})}catch(a){a.stack;let s="プッシュ通知の有効化に失敗しました";(e=(t=a.response)==null?void 0:t.data)!=null&&e.message?s=a.response.data.message:a.message&&(s=a.message),v({type:"error",message:s,duration:3e3}),m.value="disabled"}finally{Q.value=!1}},Oe=async()=>{ne.value=!0;try{if(F)await Pt(F.endpoint),await F.unsubscribe(),F=null;else{const t=await Ce();for(const e of t)await Tt(e.id);try{const a=await(await navigator.serviceWorker.ready).pushManager.getSubscription();a&&await a.unsubscribe()}catch{}}m.value="disabled",localStorage.removeItem(`push_notification_status_${l.value}`),v({type:"success",message:"プッシュ通知を無効にしました",duration:3e3})}catch(t){v({type:"error",message:t.message||"プッシュ通知の無効化に失敗しました",duration:3e3})}finally{ne.value=!1}},Fe=t=>{const e="=".repeat((4-t.length%4)%4),a=(t+e).replace(/-/g,"+").replace(/_/g,"/"),s=window.atob(a),n=new Uint8Array(s.length);for(let g=0;g<s.length;++g)n[g]=s.charCodeAt(g);return n},R=t=>C.value.some(e=>e.type===t),Z=Ie(()=>{const t=C.value.filter(a=>a.type==="break-start"),e=C.value.filter(a=>a.type==="break-end");return t.length>e.length}),he={"clock-in":0,"break-start":1,"break-end":2,"clock-out":3},ye=Ie(()=>[...C.value].sort((t,e)=>{const a=he[t.type]??99,s=he[e.type]??99;return a!==s?a-s:new Date(t.timestamp).getTime()-new Date(e.timestamp).getTime()})),ue=t=>({"clock-in":"出勤","clock-out":"退勤","break-start":"休始","break-end":"休終"})[t]||t,ze=t=>t.replace("-","_"),We=t=>new Date(t).toLocaleTimeString("ja-JP",{hour:"2-digit",minute:"2-digit"});let de=0,X=Date.now(),pe=null;const K=async()=>{const t=Date.now();if(!(t-de<ua)&&f.value){de=t,X=t;
1try{await j(),await le(),M.value&&await ce()}catch{}}},we=()=>{document.visibilityState==="visible"?K():X=Date.now()},_e=()=>{K()},be=t=>{t.persisted&&K()},ee=()=>{const t=Date.now();t-X>da&&f.value&&K(),X=t},Ge=()=>{document.visibilityState==="visible"&&f.value&&Date.now()-de>3e5&&K()};return je(async()=>{if(ve(),J=window.setInterval(ve,1e3),window.addEventListener("resize",oe),oe(),document.addEventListener("visibilitychange",we),window.addEventListener("focus",_e),window.addEventListener("pageshow",be),document.addEventListener("touchstart",ee,{passive:!0}),document.addEventListener("click",ee),pe=window.setInterval(Ge,6e4),await xe(),!!l.value&&(localStorage.setItem("pwa_tenant_id",l.value),await Le(),await Ne(),f.value&&(await $e(),await le(),fe(),M.value))){try{await re()}catch{}await ce()}}),Ke(()=>{J&&clearInterval(J),pe&&clearInterval(pe),window.removeEventListener("resize",oe),document.removeEventListener("visibilitychange",we),window.removeEventListener("focus",_e),window.removeEventListener("pageshow",be),document.removeEventListener("touchstart",ee),document.removeEventListener("click",ee)}),(t,e)=>{var ke,Se;const a=$("el-input"),s=$("el-form-item"),n=$("el-button"),g=$("el-form"),w=$("el-icon"),z=$("el-checkbox"),A=$("el-tag"),me=$("el-alert");return y(),b("div",Mt,[f.value?(y(),b("div",Ot,[i("div",Ft,[c(n,{class:"menu-button",icon:N(qe),circle:"",onClick:e[2]||(e[2]=r=>{var te;return(te=L.value)==null?void 0:te.open()})},null,8,["icon"]),i("div",zt,[i("h2",Wt,k(V.value),1)]),e[11]||(e[11]=i("div",{style:{width:"40px"}},null,-1))]),i("div",Gt,[i("h1",Bt,k(D.value),1)]),U.value?(y(),b("div",Ut,[e[12]||(e[12]=i("span",{class:"today-schedule__label"},"本日の予定",-1)),i("span",jt,k((ke=U.value.clockIn)==null?void 0:ke.slice(0,5))+" 〜 "+k((Se=U.value.clockOut)==null?void 0:Se.slice(0,5)),1)])):W("",!0),i("div",Kt,[c(n,{type:"success",size:"large",class:"punch-btn punch-in",loading:p.value==="clock-in",disabled:p.value!==null||R("clock-in"),onClick:e[3]||(e[3]=r=>Y("clock-in"))},{default:d(()=>[c(w,{class:"btn-icon"},{default:d(()=>[c(N(st))]),_:1}),i("span",Jt,k(R("clock-in")?"出勤済":"出勤"),1)]),_:1},8,["loading","disabled"]),c(n,{type:"danger",size:"large",class:"punch-btn punch-out",loading:p.value==="clock-out",disabled:p.value!==null||R("clock-out")||!R("clock-in")||Z.value,onClick:e[4]||(e[4]=r=>Y("clock-out"))},{default:d(()=>[c(w,{class:"btn-icon"},{default:d(()=>[c(N(nt))]),_:1}),i("span",qt,k(R("clock-out")?"退勤済":"退勤"),1)]),_:1},8,["loading","disabled"])]),i("div",Ht,[c(n,{type:"warning",size:"large",class:"punch-btn break-start",loading:p.value==="break-start",disabled:p.value!==null||Z.value||!R("clock-in")||R("clock-out"),onClick:e[5]||(e[5]=r=>Y("break-start"))},{default:d(()=>[c(w,{class:"btn-icon"},{default:d(()=>[c(N(ot))]),_:1}),i("span",Qt,k(Z.value?"休憩中":"休始"),1)]),_:1},8,["loading","disabled"]),c(n,{type:"info",size:"large",class:"punch-btn break-end",loading:p.value==="break-end",disabled:p.value!==null||!Z.value||R("clock-out"),onClick:e[6]||(e[6]=r=>Y("break-end"))},{default:d(()=>[c(w,{class:"btn-icon"},{default:d(()=>[c(N(it))]),_:1}),e[13]||(e[13]=i("span",{class:"btn-text"},"休終",-1))]),_:1},8,["loading","disabled"])]),i("div",Yt,[e[16]||(e[16]=i("h4",null,"本日の打刻",-1)),ye.value.length>0?(y(),b("div",Zt,[(y(!0),b(Pe,null,He(ye.value,(r,te)=>(y(),b("div",{key:te,class:"record-item"},[i("div",Xt,[i("span",{class:lt(["record-type",ze(r.type)])},k(ue(r.type)),3),i("span",ea,k(We(r.rawTimestamp??r.timestamp)),1),r.type==="clock-in"||r.type==="clock-out"?(y(),b(Pe,{key:0},[c(z,{"model-value":r.isRemote||!1,disabled:H.value,size:"small",class:"remote-checkbox",onChange:Be=>De(r.type,Be)},{default:d(()=>[...e[14]||(e[14]=[I(" 在宅 ",-1)])]),_:1},8,["model-value","disabled","onChange"]),r.gpsValidation&&r.gpsValidation.locationType!=="none"||!r.gpsValidation&&r.latitude?(y(),ae(A,{key:0,type:r.gpsValidation?r.gpsValidation.isValid?"success":"warning":"info",size:"small",class:"gps-inline-tag"},{default:d(()=>[I(k(r.gpsValidation?r.gpsValidation.isValid?"GPS範囲内":"GPS範囲外":"GPS取得済"),1)]),_:2},1032,["type"])):W("",!0)],64)):W("",!0)]),S.enabled&&r.latitude&&r.longitude?(y(),b("div",ta,[c(w,null,{default:d(()=>[c(N(rt))]),_:1}),i("span",aa,k(r.latitude.toFixed(4))+", "+k(r.longitude.toFixed(4)),1)])):W("",!0)]))),128))])):(y(),b("div",sa,[...e[15]||(e[15]=[Qe('<div class="alarm-icon" data-v-56867795><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="80" height="80" data-v-56867795><path d="M50 10 C35 10 25 25 25 40 L25 55 L20 65 L80 65 L75 55 L75 40 C75 25 65 10 50 10 Z" fill="#ef4444" stroke="#dc2626" stroke-width="2" data-v-56867795></path><circle cx="50" cy="75" r="8" fill="#ef4444" stroke="#dc2626" stroke-width="2" data-v-56867795></circle><path d="M45 8 Q50 3 55 8" fill="none" stroke="#dc2626" stroke-width="3" stroke-linecap="round" data-v-56867795></path><path d="M15 35 Q10 40 15 45" fill="none" stroke="#f87171" stroke-width="2" stroke-linecap="round" data-v-56867795></path><path d="M10 30 Q3 40 10 50" fill="none" stroke="#fca5a5" stroke-width="2" stroke-linecap="round" data-v-56867795></path><path d="M85 35 Q90 40 85 45" fill="none" stroke="#f87171" stroke-width="2" stroke-linecap="round" data-v-56867795></path><path d="M90 30 Q97 40 90 50" fill="none" stroke="#fca5a5" stroke-width="2" stroke-linecap="round" data-v-56867795></path></svg></div><p class="empty-description" data-v-56867795>本日の打刻はまだありません</p>',2)])]))]),i("div",na,[i("div",oa,[e[17]||(e[17]=i("h4",null,"申請承認通知",-1)),m.value?(y(),ae(A,{key:0,t
1ype:m.value==="enabled"?"success":"info",size:"small"},{default:d(()=>[I(k(m.value==="enabled"?"有効":m.value==="disabled"?"無効":m.value==="permission-denied"?"許可拒否":"未対応"),1)]),_:1},8,["type"])):W("",!0)]),se.value?(y(),b("div",ia,[c(me,{type:"info",closable:!1,"show-icon":""},{title:d(()=>[...e[18]||(e[18]=[I(" iOSでプッシュ通知を利用するには ",-1)])]),default:d(()=>[e[19]||(e[19]=i("p",{style:{"margin-top":"8px","font-size":"13px"}},[I(" Safariの共有ボタン "),i("span",{style:{"font-size":"16px"}},"⎙"),I(" →「ホーム画面に追加」をタップして、アプリをインストールしてください。 ")],-1))]),_:1})])):M.value?m.value==="permission-denied"?(y(),b("div",ra,[c(me,{type:"error",closable:!1,"show-icon":""},{title:d(()=>[...e[21]||(e[21]=[I(" プッシュ通知が拒否されています ",-1)])]),default:d(()=>[e[22]||(e[22]=i("p",{style:{"margin-top":"8px","font-size":"13px"}}," ブラウザの設定から通知を許可してください ",-1))]),_:1})])):(y(),b("div",ca,[e[25]||(e[25]=i("p",{class:"push-description"}," 申請が承認されたときにプッシュ通知を受け取ります ",-1)),m.value==="disabled"||m.value==="default"?(y(),ae(n,{key:0,type:"primary",size:"default",loading:Q.value,onClick:Ve},{default:d(()=>[c(w,{style:{"margin-right":"6px"}},{default:d(()=>[c(N(ct))]),_:1}),e[23]||(e[23]=I(" 通知を有効にする ",-1))]),_:1},8,["loading"])):m.value==="enabled"?(y(),ae(n,{key:1,type:"danger",plain:"",size:"default",loading:ne.value,onClick:Oe},{default:d(()=>[...e[24]||(e[24]=[I(" 通知を無効にする ",-1)])]),_:1},8,["loading"])):W("",!0)])):(y(),b("div",la,[c(me,{type:"warning",closable:!1,"show-icon":""},{title:d(()=>[...e[20]||(e[20]=[I(" お使いのブラウザはプッシュ通知に対応していません ",-1)])]),_:1})]))]),c(wt,{ref_key:"sideMenuRef",ref:L,"show-header":!1,onLogout:Re},null,512),c(_t,{modelValue:E.value,"onUpdate:modelValue":e[7]||(e[7]=r=>E.value=r),"tenant-id":l.value,"is-mobile":O.value,onSuccess:Ae},null,8,["modelValue","tenant-id","is-mobile"]),e[26]||(e[26]=i("div",{class:"punch-footer"},[i("p",{class:"copyright"},"© 2026 SmartKintai - 勤怠管理システム")],-1))])):(y(),b("div",Rt,[i("div",$t,[i("div",Dt,[e[8]||(e[8]=i("h1",null,"Smart勤怠 打刻システム",-1)),i("p",At,k(x.value||"ログイン中..."),1)]),c(g,{onSubmit:Je(ie,["prevent"]),class:"login-form"},{default:d(()=>[c(s,null,{default:d(()=>[c(a,{modelValue:P.employeeCode,"onUpdate:modelValue":e[0]||(e[0]=r=>P.employeeCode=r),placeholder:"社員コード",size:"large","prefix-icon":N(et),clearable:""},null,8,["modelValue","prefix-icon"])]),_:1}),c(s,null,{default:d(()=>[c(a,{modelValue:P.password,"onUpdate:modelValue":e[1]||(e[1]=r=>P.password=r),type:"password",placeholder:"パスワード",size:"large","prefix-icon":N(at),"show-password":"",onKeyup:tt(ie,["enter"])},null,8,["modelValue","prefix-icon"])]),_:1}),c(n,{type:"primary",size:"large",loading:T.value,onClick:ie,class:"login-button"},{default:d(()=>[...e[9]||(e[9]=[I(" ログイン ",-1)])]),_:1},8,["loading"]),i("div",Vt,[c(n,{link:"",type:"primary",onClick:Me},{default:d(()=>[...e[10]||(e[10]=[I(" パスワードを忘れた場合 ",-1)])]),_:1})])]),_:1})])]))])}}}),Ia=bt(pa,[["__scopeId","data-v-56867795"]]);export{Ia 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.