PageSourceSearch

https://nekowa.com/assets/LaborReceiptDetailPage-DLFwFB-m.js

js nekowa.com collected 2026-09-24 14:49:07 UTC 28,341 bytes, 1 lines download raw bytes

1import{V as v,bI as ee,i as A,j as e,C as D,T as se,bK as te}from"./index-Ci3s9Vyp.js";import{E as re}from"./EmptyState-DnRCpYKD.js";import{r as i,u as ae,c as ie}from"./react-DBTFCQ9V.js";import{m as ne,F as de,j as E}from"./firebase-DUmv6NEE.js";import{p as ce,g as le}from"./laborReceiptPdfImages-Bxhep7k9.js";import{I as k}from"./ImagePreview-CTY-7vV4.js";import{C as xe}from"./CreditBalanceBadge-CF_QKFBD.js";import{R as oe}from"./CreditConfirmDialogs-BtQyoS6P.js";import{S as me,g as pe}from"./laborReceiptStatus-CnZhXQse.js";import{I as ge}from"./incomeTypes-rSvOMh9w.js";import{a as ue,f as ve}from"./format-CdRYU-v6.js";import{n as T,w as he,q as w,aG as P,G as je,ac as C,a2 as be,s as $,R as B,ae as _,T as z,o as Ne,F as S,j as fe,f as ye,u as ke,k as we,x as Ce,X as M}from"./utils-DRBGurlB.js";import"./FileSaver.min-4ypyifxH.js";const Me=()=>{const F=i.useId(),m=ae(),{id:p}=ie(),[s,O]=i.useState(null),[V,R]=i.useState(!0),[L,n]=i.useState(null),[l,g]=i.useState(null),[G,H]=i.useState(""),[X,x]=i.useState(!1),[U,h]=i.useState(""),[q,b]=i.useState(!1),[Re,Le]=i.useState(!1),[K,j]=i.useState(!1),[d,W]=i.useState(null);i.useEffect(()=>{window.scrollTo(0,0)},[]),i.useEffect(()=>{if(!p){m("/labor-receipts");return}const t=v();if(!t){R(!1);return}(async()=>{try{const c=await te(t);c&&H(c.name||"")}catch(c){console.error("Error loading company name:",c)}})();const a=ee(t),o=ne(a,p),y=de(o,c=>{c.exists()?O({id:c.id,...c.data()}):(n({type:"error",message:"找不到此勞報單"}),m("/labor-receipts")),R(!1)},c=>{console.error("Error fetching receipt:",c),n({type:"error",message:"載入失敗"}),R(!1)});return()=>y()},[p,m]),i.useEffect(()=>{const t=v();if(!p||!t||!s||!!!(s.idFrontUrl||s.idBackUrl||s.bankbookUrl||s.signatureUrl))return;let a=!0;return(async()=>{try{const y=await E(A(),"getReceiptFileUrls")({companyId:t,receiptId:p});a&&W(y.data)}catch(o){console.warn("取得勞報單圖片短期 URL 失敗",o)}})(),()=>{a=!1}},[p,s==null?void 0:s.idFrontUrl,s==null?void 0:s.idBackUrl,s==null?void 0:s.bankbookUrl,s==null?void 0:s.signatureUrl]);const Y=async()=>{if(s!=null&&s.id){g("void");try{const t=A();await E(t,"voidLaborReceipt")({companyId:v(),receiptId:s.id,reason:U}),n({type:"success",message:"勞報單已作廢"}),x(!1),h("")}catch(t){console.error("Error voiding receipt:",t),n({type:"error",message:t.message||"作廢失敗"})}finally{g(null)}}},I=()=>{var r,a;return s!=null&&s.tokenExpiresAt?(((a=(r=s.tokenExpiresAt)==null?void 0:r.toDate)==null?void 0:a.call(r))||new Date(s.tokenExpiresAt))<new Date:!0},J=async()=>{if(!s)return;if(!s.signingToken||!s.tokenExpiresAt){n({type:"error",message:"簽署連結不存在,請重新發送確認信"});return}if(I()){n({type:"error",message:"簽署連結已過期,請重新發送確認信"});return}const t=v(),a=`${window.location.origin}/sign/${t}/${s.id}/${s.signingToken}`;try{await navigator.clipboard.writeText(a),n({type:"success",message:"簽署連結已複製到剪貼簿"})}catch(o){console.error("Failed to copy:",o),window.prompt("請手動複製簽署連結:",a)}},Q=async()=>{var t;if(s!=null&&s.id){g("resend");try{const r=A(),c=(await E(r,"resendLaborReceiptEmail")({companyId:v(),receiptId:s.id})).data.wasFree?"郵件已重新發送(首次重發免費)":"郵件已重新發送";n({type:"success",message:c}),j(!1)}catch(r){console.error("Error resending email:",r);const a=r.message||((t=r.details)==null?void 0:t.message)||"";throw a.includes("INSUFFICIENT_CREDITS")?n({type:"error",message:"點數不足,請先儲值後再重發"}):a.includes("OPERATION_IN_PROGRESS")?n({type:"error",message:"操作進行中,請稍後再試"}):n({type:"error",message:a||"發送失敗"}),r}finally{g(null)}}},Z=async()=>{if(s){g("pdfCopy");try{const t=await ce(s,v());await le(t,G),n({type:"success",message:"PDF 副本已下載"})}catch(t){console.error("Error generating PDF copy:",t),n({type:"error",message:"PDF 生成失敗"})}finally{g(null)}}},u=t=>ve(t),N=t=>ue(t,{symbol:!1});if(V)return e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx("div",{className:"w-8 h-8 border-4 border-[var(--accent)]/30 border-t-[var(--accent)] rounded-full animate-spin"})});if(!s)return e.jsx(re,{icon:T,title:e.jsx(e.Fragment,{children:"找不到此勞報單"}),className:"h-full"});const f=me[pe(s)];return e.jsxs("div",{className:"p-6 max-w-4xl mx-auto",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4 mb-6",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("button",{onClick:()=>m("/labor-receipts"),className:"p-2 text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-card-alt)] rounded-lg transition-colors",children:e.jsx(he,{size:20})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:"勞報單詳情"}),e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded-full ${f.bgColor} ${f.color}`,children:[f.icon(16),f.label]})]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)] font-mono mt-1",children:s.serialNumber})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(xe,{}),(s.status==="pending"||s.status==="expired")&&e.jsxs(e.Fragment,{children:[s.status==="expired"||I()?e.jsxs("button",{onClick:()=>j(!0),disabled:l==="resend",className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-orange-500 rounded-lg hover:bg-orange-600 transition-colors disabled:opacity-50",children:[l==="resend"?e.jsx(w,{size:16,className:"animate-spin"}):e.jsx(P,{size:16}),"重新發送"]}):e.jsxs("button",{onClick:J,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--text-secondary)] bg-[var(--bg-card)] border border-[var(--border)] rounded-lg hover:bg-[var(--bg-card-alt)] transition-colors",children:[e.jsx(je,{size:16}),"取得連結"]}),e.jsxs("button",{onClick:()=>x(!0),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--error)] bg-[var(--error)]/10 border border-[var(--error)]/25 rounded-lg hover:border-[var(--error)]/70 transition-colors",children:[e.jsx(C,{size:16}),"作廢"]})]}),s.status==="completed"&&e.jsxs("button",{onClick:Z,disabled:l==="pdfCopy",className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-green-500 rounded-lg hover:bg-green-600 transition-colors disabled:opacity-50",children:[l==="pdfCopy"?e.jsx(w,{size:16,className:"animate-spin"}):e.jsx(be,{size:16}),"下載 PDF 副本"]}),s.status==="completed"&&s.auditLog&&e.jsxs("button",{onClick:()=>b(!0),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--text-secondary)] bg-[var(--bg-card)] border border-[var(--border)] rounded-lg hover:bg-[var(--bg-card-alt)] transition-colors",children:[e.jsx($,{size:16}),"審計日誌"]}),s.status==="draft"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:()=>m(`/labor-receipts/${s.id}/edit`),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--text-secondary)] bg-[var(--bg-card)] border border-[var(--border)] rounded-lg hover:bg-[var(--bg-card-alt)] transition-colors",children:[e.jsx(B,{size:16}),"編輯"]}),e.jsxs("button",{onClick:()=>x(!0),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--error)] bg-[var(--error)]/10 border border-[var(--error)]/25 rounded-lg hover:border-[var(--error)]/70 transition-colors",children:[e.jsx(C,{size:16}),"作廢"]})]}),s.status==="rejected"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:()=>m(`/labor-receipts/${s.id}/edit`),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--text-secondary)] bg-[var(--bg-card)] border border-[var(--border)] rounded-lg hover:bg-[var(--bg-card-alt)] transition-colors",children:[e.jsx(B,{size:16}),"編輯"]}),e.jsxs("button",{onClick:()=>j(!0),disabled:l==="resend",className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-orange-500 rounded-lg hover:bg-orange-600 transition-colors disabled:opacity-50",children:[l==="resend"?e.jsx(w,{size:16,className:"animate-spin"}):e.jsx(_,{size:16}),"重新發送"]})]}),s.status==="send_failed"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:()=>j(!0),disabled:l==="resend",className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-orange-500 rounded-lg hover:bg-orange-600 transition-colors disabled:opacity-50",children:[l==="resend"?e.jsx(w,{size:16,className:"animate-spin"}):e.jsx(_,{size:16}),"重新發送"]}),e.jsxs("button",{onClick:()=>x(!0),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--error)] bg-[var(--error)]/10 border border-[var(--error)]/25 rounded-lg hover:border-[var(--error)]/70 transition-colors",children:[e.jsx(C,{size:16}),"作廢"]})]})]})]}),s.status==="send_failed"&&s.lastSendError&&e.jsxs("div",{className:"flex items-start gap-3 p-4 mb-6 bg-red-500/10 border border-red-500/20 rounded-xl",children:[e.jsx(z,{size:18,className:"text-red-500 mt-0.5 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:"郵件發送失敗"}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mt-1",children:s.lastSendError})]})]}),s.status==="signed"&&s.processingError&&e.jsxs("div",{className:"flex items-start gap-3 p-4 mb-6 bg-yellow-500/10 border border-yellow-500/20 rounded-xl",children:[e.jsx(z,{size:18,className:"text-yellow-500 mt-0.5 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:"簽署後處理失敗"}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mt-1",children:s.processingError})]})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(Ne,{size:20}),"簽署人資訊"]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"電子郵件"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.signerEmail})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"姓名"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.signerName||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"國籍"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.signerNationality||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"身分證字號"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1 font-mono",children:s.signerIdNumber||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"聯絡電話"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.signerPhone||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"填寫模式"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.fillingMode==="signer_fill"?"由所得人填寫":"由公司方填寫"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"現居地址"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.signerAddress||"-"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"戶籍地址"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.signerRegAddress||"-"})]})]})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(S,{size:20}),"勞務內容"]}),e.jsxs("div",{className:"grid grid-cols-2 gap-x-6 gap-y-3",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"勞務內容描述"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1 whitespace-pre-wrap",children:s.serviceDescription})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"勞務期間"}),e.jsxs("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:[s.servicePeriodStart," ~ ",s.servicePeriodEnd]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"所得類別"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:ge[s.incomeType]||s.incomeType})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"匯款日期"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.paymentDate||"-"})]})]})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(fe,{size:20}),"勞務金額"]}),e.jsxs("div",{className:"bg-[var(--bg-page)] rounded-lg p-4 space-y-3",children:[e.jsxs("div",{className:"flex justify-between items-center text-sm",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"付款金額"}),e.jsxs("span",{className:"font-medium text-[var(--text-primary)]",children:["$",N(s.paymentAmount)]})]}),e.jsxs("div",{className:"flex justify-between items-center text-sm",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"代扣所得稅"}),e.jsxs("span",{className:"text-red-500",children:["-$",N(s.withholdingTax)]})]}),e.jsxs("div",{className:"flex justify-between items-center text-sm",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"二代健保"}),e.jsxs("span",{className:"text-red-500",children:["-$",N(s.healthInsurance)]})]}),e.jsxs("div",{className:"border-t border-[var(--border)] pt-3 flex justify-between items-center",children:[e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:"實際付款金額"}),e.jsxs("span",{className:"text-xl font-bold text-[var(--accent)]",children:["$",N(s.netAmount)]})]})]})]}),(s.bankName||s.bankAccountNumber)&&e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(ye,{size:20}),"付款資料"]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"銀行名稱"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.bankName||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"銀行代碼"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1 font-mono",children:s.bankCode||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"分行名稱"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.bankBranch||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"帳號"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1 font-mono",children:s.bankAccountNumber||"-"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"戶名"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.bankAccountName||"-"})]})]})]}),s.note
1&&e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(S,{size:20}),"備註"]}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] whitespace-pre-wrap",children:s.note})]}),(s.idFrontUrl||s.idBackUrl||s.bankbookUrl||s.signatureUrl)&&e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(ke,{size:20}),"證件與簽名"]}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-4",children:[s.idFrontUrl&&e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider mb-2 block",children:"身分證正面"}),e.jsx(k,{src:(d==null?void 0:d.idFrontUrl)??s.idFrontUrl,alt:"身分證正面",aspectRatio:"video"})]}),s.idBackUrl&&e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider mb-2 block",children:"身分證反面"}),e.jsx(k,{src:(d==null?void 0:d.idBackUrl)??s.idBackUrl,alt:"身分證反面",aspectRatio:"video"})]}),s.bankbookUrl&&e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider mb-2 block",children:"存摺封面"}),e.jsx(k,{src:(d==null?void 0:d.bankbookUrl)??s.bankbookUrl,alt:"存摺封面",aspectRatio:"video"})]}),s.signatureUrl&&e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider mb-2 block",children:"簽名"}),e.jsx(k,{src:(d==null?void 0:d.signatureUrl)??s.signatureUrl,alt:"簽名",aspectRatio:"video",className:"bg-white"})]})]})]}),s.status==="completed"&&s.signedAt&&e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx($,{size:20}),"簽署資訊"]}),s.auditLog&&e.jsx("button",{onClick:()=>b(!0),className:"text-sm text-[var(--accent)] hover:underline",children:"查看完整審計日誌"})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"簽署時間"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:u(s.signedAt)})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"簽署人 UID"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1 font-mono text-xs",children:s.signedByUid||"-"})]}),s.pdfHash&&e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"PDF 雜湊值 (SHA-256)"}),e.jsx("p",{className:"text-xs text-[var(--text-primary)] mt-1 font-mono break-all",children:s.pdfHash})]})]})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border)] rounded-xl p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(we,{size:20}),"時間軸"]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full bg-[var(--success)]/15 flex items-center justify-center flex-shrink-0",children:e.jsx(S,{size:14,className:"text-[var(--success)]"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:"建立勞報單"}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:u(s.createdAt)})]})]}),s.emailSentAt&&e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full bg-[var(--accent)]/15 flex items-center justify-center flex-shrink-0",children:e.jsx(P,{size:14,className:"text-[var(--accent)]"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:"發送確認信"}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:u(s.emailSentAt)})]})]}),s.signedAt&&e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full bg-[var(--id-purple)]/15 flex items-center justify-center flex-shrink-0",children:e.jsx(Ce,{size:14,className:"text-[var(--id-purple)]"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:"完成簽署"}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:u(s.signedAt)})]})]}),s.rejectedAt&&e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full bg-[var(--id-orange)]/15 flex items-center justify-center flex-shrink-0",children:e.jsx(T,{size:14,className:"text-[var(--id-orange)]"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:"駁回"}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:u(s.rejectedAt)}),s.rejectionCategory&&e.jsxs("p",{className:"text-xs text-[var(--text-secondary)] mt-1",children:["類型:",s.rejectionCategory==="personal_info"?"個人資訊有誤":s.rejectionCategory==="amount"?"金額有誤":s.rejectionCategory==="service"?"勞務內容有誤":"其他"]}),s.rejectionReason&&e.jsxs("p",{className:"text-xs text-[var(--text-secondary)] mt-0.5",children:["補充:",s.rejectionReason]})]})]}),s.voidedAt&&e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full bg-[var(--error)]/15 flex items-center justify-center flex-shrink-0",children:e.jsx(C,{size:14,className:"text-[var(--error)]"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:"作廢"}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:u(s.voidedAt)}),s.voidReason&&e.jsxs("p",{className:"text-xs text-[var(--text-secondary)] mt-1",children:["原因:",s.voidReason]})]})]})]})]})]}),e.jsx(D,{isOpen:X,onClose:()=>{x(!1),h("")},children:e.jsxs("div",{className:"bg-[var(--bg-card)] rounded-2xl p-6 border border-[var(--border)]",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:"作廢勞報單"}),e.jsx("button",{onClick:()=>{x(!1),h("")},className:"p-1 text-[var(--text-muted)] hover:text-[var(--text-primary)] rounded-lg transition-colors",children:e.jsx(M,{size:20})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-sm text-[var(--text-secondary)]",children:["確定要作廢此勞報單嗎?此操作",e.jsx("strong",{children:"不可逆"}),"。"]}),s.status!=="draft"&&e.jsxs("div",{className:"flex items-start gap-2 p-3 bg-amber-500/10 rounded-lg border border-amber-500/20",children:[e.jsx(z,{size:16,className:"text-amber-500 flex-shrink-0 mt-0.5"}),e.jsxs("div",{className:"text-xs text-[var(--text-secondary)] space-y-1",children:[e.jsxs("p",{children:["已扣除的點數",e.jsx("strong",{className:"text-[var(--text-primary)]",children:"不予退é‚
1„"})]}),(s.status==="pending"||s.status==="rejected")&&e.jsx("p",{children:"簽署連結將立即失效"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:`${F}-0`,className:"block text-sm font-medium text-[var(--text-primary)] mb-1",children:"作廢原因(選填)"}),e.jsx("textarea",{id:`${F}-0`,value:U,onChange:t=>h(t.target.value),placeholder:"請輸入作廢原因...",className:"w-full px-3 py-2 text-sm bg-[var(--bg-page)] border border-[var(--border)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--accent)]/50 resize-none",rows:3})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{onClick:()=>{x(!1),h("")},className:"px-4 py-2 text-sm font-medium text-[var(--text-secondary)] bg-[var(--bg-card-alt)] rounded-lg hover:bg-[var(--border)] transition-colors",children:"取消"}),e.jsx("button",{onClick:Y,disabled:l==="void",className:"px-4 py-2 text-sm font-medium text-white bg-red-500 rounded-lg hover:bg-red-600 transition-colors disabled:opacity-50",children:l==="void"?"處理中...":"確認作廢"})]})]})]})}),e.jsx(D,{isOpen:q,onClose:()=>b(!1),maxWidth:"max-w-2xl",children:e.jsxs("div",{className:"bg-[var(--bg-card)] rounded-2xl p-6 border border-[var(--border)]",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:"審計日誌"}),e.jsx("button",{onClick:()=>b(!1),className:"p-1 text-[var(--text-muted)] hover:text-[var(--text-primary)] rounded-lg transition-colors",children:e.jsx(M,{size:20})})]}),(s==null?void 0:s.auditLog)&&e.jsx("div",{className:"space-y-4 max-h-[60vh] overflow-y-auto",children:e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"簽署人 Email"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.auditLog.signerEmail})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"簽署人 UID"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1 font-mono text-xs",children:s.auditLog.signerUid})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"IP 位址"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1 font-mono",children:s.auditLog.ipAddress})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"時區"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.auditLog.timezone})]}),s.auditLog.geoLocation&&e.jsxs("div",{className:"col-span-2",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"地理位置"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:[s.auditLog.geoLocation.city,s.auditLog.geoLocation.region,s.auditLog.geoLocation.country].filter(Boolean).join(", ")})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"User Agent"}),e.jsx("p",{className:"text-xs text-[var(--text-primary)] mt-1 font-mono break-all",children:s.auditLog.userAgent})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"螢幕解析度"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.auditLog.screenResolution||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"平台"}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:s.auditLog.platform||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"簽名耗時"}),e.jsxs("p",{className:"text-sm text-[var(--text-primary)] mt-1",children:[s.auditLog.signatureDuration," 秒"]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)] uppercase tracking-wider",children:"Session ID"}),e.jsx("p",{className:"text-xs text-[var(--text-primary)] mt-1 font-mono",children:s.auditLog.sessionId})]})]})})]})}),e.jsx(oe,{isOpen:K,onClose:()=>j(!1),onConfirm:Q,signerEmail:s.signerEmail||"",serialNumber:s.seri
1alNumber||"",resendCount:s.resendCount||0}),L&&e.jsx(se,{message:L.message,type:L.type,onClose:()=>n(null)})]})};export{Me 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.