PageSourceSearch

https://asiacoach-zs7dipvk.manus.space/assets/AdminOperations-BTs93aSM.js

js asiacoach-zs7dipvk.manus.space collected 2026-10-03 05:00:22 UTC 24,421 bytes, 7 lines download raw bytes

1import{b as p,j as s}from"./react-core-vendor-BYU1lc6_.js";import{c as f,t as o,B as h}from"./index-tz1if3Qb.js";import{I}from"./input-D3THlcXi.js";import{b as Y,R as V,t as m,B as G,C as J,X as W,d as Z}from"./react-dom-vendor-DP7iwX5j.js";import{L as ss}from"./router-vendor-C6WQLFPl.js";import{I as es,T as ts,ac as as,O as ns,ad as F,l as is,a4 as cs}from"./icons-vendor-2DcWnZLX.js";import"./ui-vendor-Ca4nMe5D.js";import"./charts-vendor-Sd7wU2Xd.js";import"./dialog-DLHI93Z9.js";const rs={light:"",dark:".dark"},K=p.createContext(null);function ls(){const i=p.useContext(K);if(!i)throw new Error("useChart must be used within a <ChartContainer />");return i}function os({id:i,className:t,children:c,config:n,...l}){const A=p.useId(),d=`chart-${i||A.replace(/:/g,"")}`;return s.jsx(K.Provider,{"data-loc":"client/src/components/ui/chart.tsx:51",value:{config:n},children:s.jsxs("div",{"data-loc":"client/src/components/ui/chart.tsx:52","data-slot":"chart","data-chart":d,className:f("[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",t),...l,children:[s.jsx(ds,{"data-loc":"client/src/components/ui/chart.tsx:61",id:d,config:n}),s.jsx(V,{"data-loc":"client/src/components/ui/chart.tsx:62",children:c})]})})}const ds=({id:i,config:t})=>{const c=Object.entries(t).filter(([,n])=>n.theme||n.color);return c.length?s.jsx("style",{"data-loc":"client/src/components/ui/chart.tsx:80",dangerouslySetInnerHTML:{__html:Object.entries(rs).map(([n,l])=>`
2${l} [data-chart=${i}] {
3${c.map(([A,d])=>{const x=d.theme?.[n]||d.color;return x?`  --color-${A}: ${x};`:null}).join(`
4`)}
5}
6`).join(`
7`)}}):null},ms=Y;function ps({active:i,payload:t,className:c,indicator:n="dot",hideLabel:l=!1,hideIndicator:A=!1,label:d,labelFormatter:x,labelClassName:O,formatter:w,color:_,nameKey:L,labelKey:r}){const{config:g}=ls(),C=p.useMemo(()=>{if(l||!t?.length)return null;const[a]=t,b=`${r||a?.dataKey||a?.name||"value"}`,N=z(g,a,b),u=!r&&typeof d=="string"?g[d]?.label||d:N?.label;return x?s.jsx("div",{"data-loc":"client/src/components/ui/chart.tsx:144",className:f("font-medium",O),children:x(u,t)}):u?s.jsx("div",{"data-loc":"client/src/components/ui/chart.tsx:154",className:f("font-medium",O),children:u}):null},[d,x,t,l,O,g,r]);if(!i||!t?.length)return null;const j=t.length===1&&n!=="dot";return s.jsxs("div",{"data-loc":"client/src/components/ui/chart.tsx:172",className:f("border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl",c),children:[j?null:C,s.jsx("div",{"data-loc":"client/src/components/ui/chart.tsx:179",className:"grid gap-1.5",children:t.filter(a=>a.type!=="none").map((a,b)=>{const N=`${L||a.name||a.dataKey||"value"}`,u=z(g,a,N),S=_||a.payload.fill||a.color;return s.jsx("div",{"data-loc":"client/src/components/ui/chart.tsx:188",className:f("[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",n==="dot"&&"items-center"),children:w&&a?.value!==void 0&&a.name?w(a.value,a.name,a,b,a.payload):s.jsxs(s.Fragment,{children:[u?.icon?s.jsx(u.icon,{"data-loc":"client/src/components/ui/chart.tsx:200"}):!A&&s.jsx("div",{"data-loc":"client/src/components/ui/chart.tsx:203",className:f("shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",{"h-2.5 w-2.5":n==="dot","w-1":n==="line","w-0 border-[1.5px] border-dashed bg-transparent":n==="dashed","my-0.5":j&&n==="dashed"}),style:{"--color-bg":S,"--color-border":S}}),s.jsxs("div",{"data-loc":"client/src/components/ui/chart.tsx:223",className:f("flex flex-1 justify-between leading-none",j?"items-end":"items-center"),children:[s.jsxs("div",{"data-loc":"client/src/components/ui/chart.tsx:229",className:"grid gap-1.5",children:[j?C:null,s.jsx("span",{"data-loc":"client/src/components/ui/chart.tsx:231",className:"text-muted-foreground",children:u?.label||a.name})]}),a.value&&s.jsx("span",{"data-loc":"client/src/components/ui/chart.tsx:236",className:"text-foreground font-mono font-medium tabular-nums",children:a.value.toLocaleStr
7ing()})]})]})},a.dataKey)})})]})}function z(i,t,c){if(typeof t!="object"||t===null)return;const n="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0;let l=c;return c in t&&typeof t[c]=="string"?l=t[c]:n&&c in n&&typeof n[c]=="string"&&(l=n[c]),l in i?i[l]:i[c]}const xs={inquiry:"상담 문의",qna:"Q&A",case_submission:"기업 사례 제출",cobe_registration:"COBE 신청",chatbot_conversation:"챗봇 상담"},D={candidate:"검토 대기",approved:"삭제 승인",purged:"삭제 완료",dismissed:"보류"},gs={inquiry:"상담 문의",qna:"Q&A",enrollment:"수강 신청",conversion:"전환"},us={faq_consult:"FAQ 상담 연결",sns_youtube:"YouTube 이동",sns_instagram:"Instagram 이동"},hs={rate:{label:"전환율",color:"var(--color-secondary)"}};function k(i){return i?new Date(i).toLocaleString("ko-KR",{dateStyle:"medium",timeStyle:"short"}):"-"}function Cs(){const i=o.useUtils(),[t,c]=p.useState("candidate"),[n,l]=p.useState({}),[A,d]=p.useState("주간 공개 경로 점검"),[x,O]=p.useState(""),[w,_]=p.useState("needs_review"),[L,r]=p.useState(""),{data:g,isLoading:C}=o.operations.retentionSummary.useQuery(),{data:j,isLoading:a}=o.operations.retentionReviews.useQuery({status:t,limit:100}),{data:b,isLoading:N}=o.operations.operationalEvents.useQuery({limit:30}),{data:u,isLoading:S}=o.operations.dailyMetrics.useQuery({limit:30}),{data:M,isLoading:R}=o.operations.faqConversionTrend.useQuery({days:14}),{data:Q,isLoading:U}=o.operations.accessibilityAudits.useQuery({limit:10}),y=async()=>{await Promise.all([i.operations.retentionSummary.invalidate(),i.operations.retentionReviews.invalidate(),i.operations.operationalEvents.invalidate(),i.operations.dailyMetrics.invalidate(),i.operations.accessibilityAudits.invalidate()])},T=o.operations.runRetentionScan.useMutation({onSuccess:async e=>{const v=`점검을 완료했습니다. 새 후보 ${e.created}건을 등록했습니다.`;m.success(v),r(v),await y()},onError:()=>{const e="보유기간 점검을 완료하지 못했습니다. 잠시 후 다시 시도해 주세요.";m.error(e),r(e)}}),$=o.operations.approveRetentionPurge.useMutation({onSuccess:async()=>{const e="삭제를 승인했습니다. 실제 삭제를 한 번 더 실행해 주세요.";m.success(e),r(e),await y()},onError:()=>{const e="삭제 승인을 완료하지 못했습니다. 잠시 후 다시 시도해 주세요.";m.error(e),r(e)}}),B=o.operations.dismissRetentionReview.useMutation({onSuccess:async()=>{const e="삭제 검토를 보류했습니다.";m.success(e),r(e),await y()},onError:()=>{const e="보류 처리를 완료하지 못했습니다. 잠시 후 다시 시도해 주세요.";m.error(e),r(e)}}),q=o.operations.executeApprovedPurge.useMutation({onSuccess:async()=>{const e="승인된 개인정보 기록을 삭제했습니다.";m.success(e),r(e),await y()},onError:()=>{const e="승인된 개인정보 기록을 삭제하지 못했습니다. 잠시 후 다시 시도해 주세요.";m.error(e),r(e)}}),E=o.operations.rebuildDailyMetrics.useMutation({onSuccess:async()=>{const e="일별 운영 지표를 재집계했습니다.";m.success(e),r(e),await y()},onError:()=>{const e="일별 운영 지표 재집계에 실패했습니다. 잠시 후 다시 시도해 주세요.";m.error(e),r(e)}}),P=o.operations.recordAccessibilityAudit.useMutation({onSuccess:async()=>{const e="접근성 점검 이력을 기록했습니다.";m.success(e),r(e),O(""),await y()},onError:()=>{const e="접근성 점검 이력을 기록하지 못했습니다. 잠시 후 다시 시도해 주세요.";m.error(e),r(e)}}),H=p.useMemo(()=>[{key:"candidate",label:"검토 대기",count:g?.candidate??0,icon:es,tone:"text-amber-700 bg-amber-50"},{key:"approved",label:"삭제 승인",count:g?.approved??0,icon:ts,tone:"text-orange-700 bg-orange-50"},{key:"purged",label:"삭제 완료",count:g?.purged??0,icon:as,tone:"text-emerald-700 bg-emerald-50"},{key:"dismissed",label:"보류",count:g?.dismissed??0,icon:ns,tone:"text-slate-700 bg-slate-100"}],[g]);return s.jsx("main",{"data-loc":"client/src/pages/AdminOperations.tsx:108",className:"min-h-screen bg-slate-50",children:s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:109",className:"max-w-7xl mx-auto px-4 py-8 md:px-8",children:[s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:110",className:"flex flex-col gap-4 md:flex-row md:items-start md:justify-between",children:[s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:111",children:[s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:112",className:"text-sm font-semibold text-primary",children:"OPERATIONS & PRIVACY"}),s.jsx("h1",{"data-loc":"client/src/pages/AdminOperations.tsx:113",className:"mt-1 text-3xl font-bold tracking-tight text-slate-950",children:"운영·보유기간 관리"}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:114",className:"mt-2 max-w-2xl text-sm leading-6 text-slate-600",children:"자동 점검은 만료 후보만 등록합니다. 실제 삭제는 검토, 승인, 실행의 세 단계를 거쳐야 하며 모든 동작은 운영 이벤트로 남습니다."})]}),s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:116",className:"flex flex-wrap gap-2",children:[s.jsx(ss,{"data-loc":"client/src/pages/AdminOperations.tsx:117",href:"/admin",children:s.jsx(h,{"data-loc":"client/src/pages/AdminOperations.tsx:117",variant:"outline",children:"관리자 홈"})}),s.jsxs(h,{"data-loc":"client/src/pages/AdminOperations.tsx:118",onClick:()=>T.mutate(),disabled:T.isPending,children:[s.jsx(F,{"data-loc":"client/src/pages/AdminOperations.tsx:119",className:`mr-2 h-4 w-4 ${T.isPending?"animate-spin":""}`}),"지금 점검 실행"]}),s.jsxs(h,{"data-loc":"client/src/pages/AdminOperations.tsx:121",variant:"outline",onClick:()=>E.mutate(),disabled:E.isPending,children:[s.jsx(F,{"data-loc":"client/src/pages/AdminOperations.tsx:122",className:`mr-2 h-4 w-4 ${E.isPending?"animate-spin":""}`}),"지표 재집계"]})]})]}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:126",className:"sr-only",role:"status","aria-live":"polite",children:L}),s.jsx("section",{"data-loc":"client/src/pages/AdminOperations.tsx:128",className:"mt-8 grid gap-3 sm:grid-cols-2 xl:grid-cols-4","aria-label":"보유기간 검토 í
7˜„황","aria-busy":C,children:H.map(e=>{const v=e.icon;return s.jsxs("button",{"data-loc":"client/src/pages/AdminOperations.tsx:131",onClick:()=>c(e.key),className:`rounded-2xl p-5 text-left transition hover:-translate-y-0.5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary ${e.tone}`,children:[s.jsx(v,{"data-loc":"client/src/pages/AdminOperations.tsx:132",className:"h-5 w-5","aria-hidden":"true"}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:133",className:"mt-4 text-3xl font-bold",children:C?"-":e.count}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:134",className:"mt-1 text-sm font-medium",children:e.label})]},e.key)})}),s.jsxs("section",{"data-loc":"client/src/pages/AdminOperations.tsx:139",className:"mt-8 rounded-2xl border bg-white shadow-sm",children:[s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:140",className:"flex flex-col gap-3 border-b px-5 py-4 md:flex-row md:items-center md:justify-between",children:[s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:141",children:[s.jsx("h2",{"data-loc":"client/src/pages/AdminOperations.tsx:142",className:"font-semibold text-slate-950",children:"보유기간 검토 큐"}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:143",className:"mt-1 text-xs text-slate-500",children:"선택한 상태의 최대 100개 기록을 표시합니다."})]}),s.jsx("div",{"data-loc":"client/src/pages/AdminOperations.tsx:145",className:"flex flex-wrap gap-2","aria-label":"검토 상태 필터",children:["candidate","approved","purged","dismissed"].map(e=>s.jsx(h,{"data-loc":"client/src/pages/AdminOperations.tsx:146",size:"sm",variant:t===e?"default":"outline",onClick:()=>c(e),children:D[e]},e))})]}),s.jsx("div",{"data-loc":"client/src/pages/AdminOperations.tsx:149",className:"divide-y","aria-busy":a,"aria-live":"polite",children:a?s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:150",className:"px-5 py-10 text-sm text-slate-500",children:"기록을 불러오는 중입니다."}):j?.length?j.map(e=>s.jsx("article",{"data-loc":"client/src/pages/AdminOperations.tsx:151",className:"p-5",children:s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:152",className:"flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",children:[s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:153",children:[s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:154",className:"flex flex-wrap items-center gap-2",children:[s.jsx("span",{"data-loc":"client/src/pages/AdminOperations.tsx:155",className:"rounded-full bg-slate-100 px-2.5 py-1 text-xs font-semibold text-slate-700",children:xs[e.sourceType]}),s.jsxs("span",{"data-loc":"client/src/pages/AdminOperations.tsx:156",className:"text-xs font-medium text-slate-500",children:["#",e.sourceId]}),s.jsxs("span",{"data-loc":"client/src/pages/AdminOperations.tsx:157",className:"text-xs text-slate-500",children:["만료 기준: ",k(e.retentionDeadline)]})]}),s.jsxs("p",{"data-loc":"client/src/pages/AdminOperations.tsx:159",className:"mt-2 text-sm text-slate-600",children:["탐지: ",k(e.detectedAt)," · 상태: ",s.jsx("strong",{"data-loc":"client/src/pages/AdminOperations.tsx:159",className:"text-slate-900",children:D[e.status]})]}),e.reviewNote?s.jsxs("p",{"data-loc":"client/src/pages/AdminOperations.tsx:160",className:"mt-1 text-sm text-slate-600",children:["검토 메모: ",e.reviewNote]}):null]}),e.status==="candidate"?s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:162",className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:[s.jsx(I,{"data-loc":"client/src/pages/AdminOperations.tsx:163",value:n[e.id]??"",onChange:v=>l(X=>({...X,[e.id]:v.target.value})),placeholder:"보류 사유 또는 승인 메모 (선택)",className:"sm:w-64",maxLength:500}),s.jsx(h,{"data-loc":"client/src/pages/AdminOperations.tsx:164",size:"sm",variant:"outline",onClick:()=>B.mutate({reviewId:e.id,note:n[e.id]?.trim()||"관리자 검토 후 보류"}),disabled:B.isPending,children:"보류"}),s.jsxs(h,{"data-loc":"client/src/pages/AdminOperations.tsx:165",size:"sm",onClick:()=>$.mutate({reviewId:e.id,note:n[e.id]?.trim()||void 0}),disabled:$.isPending,children:[s.jsx(is,{"data-loc":"client/src/pages/AdminOperations.tsx:165",className:"mr-1.5 h-4 w-4"}),"삭제 승인"]}
7)]}):e.status==="approved"?s.jsxs(h,{"data-loc":"client/src/pages/AdminOperations.tsx:166",size:"sm",variant:"destructive",onClick:()=>q.mutate({reviewId:e.id}),disabled:q.isPending,children:[s.jsx(cs,{"data-loc":"client/src/pages/AdminOperations.tsx:166",className:"mr-1.5 h-4 w-4"}),"실제 삭제 실행"]}):null]})},e.id)):s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:169",className:"px-5 py-10 text-sm text-slate-500",children:"해당 상태의 검토 기록이 없습니다."})})]}),s.jsxs("section",{"data-loc":"client/src/pages/AdminOperations.tsx:173",className:"mt-8 rounded-2xl border bg-white shadow-sm",children:[s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:174",className:"border-b px-5 py-4",children:[s.jsx("h2",{"data-loc":"client/src/pages/AdminOperations.tsx:174",className:"font-semibold text-slate-950",children:"최근 운영 이벤트"}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:174",className:"mt-1 text-xs text-slate-500",children:"공개 입력 차단, 점검 실행, 승인·삭제 상태 변경을 기록합니다."})]}),s.jsx("div",{"data-loc":"client/src/pages/AdminOperations.tsx:175",className:"divide-y","aria-busy":N,"aria-live":"polite",children:N?s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:176",className:"px-5 py-8 text-sm text-slate-500",children:"이벤트를 불러오는 중입니다."}):b?.length?b.map(e=>s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:176",className:"flex gap-3 px-5 py-4",children:[s.jsx("span",{"data-loc":"client/src/pages/AdminOperations.tsx:176",className:`mt-1 h-2.5 w-2.5 shrink-0 rounded-full ${e.severity==="critical"?"bg-red-500":e.severity==="warning"?"bg-amber-500":"bg-emerald-500"}`,"aria-label":e.severity}),s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:176",children:[s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:176",className:"text-sm text-slate-800",children:e.message}),s.jsxs("p",{"data-loc":"client/src/pages/AdminOperations.tsx:176",className:"mt-1 text-xs text-slate-500",children:[e.eventType," · ",k(e.createdAt)]})]})]},e.id)):s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:176",className:"px-5 py-8 text-sm text-slate-500",children:"기록된 운영 이벤트가 없습니다."})})]}),s.jsxs("section",{"data-loc":"client/src/pages/AdminOperations.tsx:180",className:"mt-8 grid gap-5 lg:grid-cols-2","aria-label":"접근성 및 지표 운영 기준",children:[s.jsxs("article",{"data-loc":"client/src/pages/AdminOperations.tsx:181",className:"rounded-2xl border bg-white p-5 shadow-sm",children:[s.jsx("h2",{"data-loc":"client/src/pages/AdminOperations.tsx:182",className:"font-semibold text-slate-950",children:"주간 접근성 점검"}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:183",className:"mt-1 text-sm text-slate-600",children:"홈, 과정, 상담, Q&A, 사례 제출 경로를 키보드와 보조기기 관점에서 점검합니다."}),s.jsxs("ul",{"data-loc":"client/src/pages/AdminOperations.tsx:184",className:"mt-4 space-y-2 text-sm text-slate-700",children:[s.jsx("li",{"data-loc":"client/src/pages/AdminOperations.tsx:185",children:"• 키보드 포커스와 메뉴·폼 이동이 가능한지"}),s.jsx("li",{"data-loc":"client/src/pages/AdminOperations.tsx:186",children:"• 필수 입력 오류가 텍스트로 안내되는지"}),s.jsx("li",{"data-loc":"client/src/pages/AdminOperations.tsx:187",children:"• 이미지 대체 텍스트와 자동 전환 정지 제어가 있는지"})]}),s.jsx("div",{"data-loc":"client/src/pages/AdminOperations.tsx:189",className:"mt-4 rounded-xl bg-slate-50 p-3","aria-live":"polite",children:U?s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:190",className:"text-sm text-slate-500",children:"점검 이력을 불러오는 중입니다."}):Q?.length?s.jsx("ul",{"data-loc":"client/src/pages/AdminOperations.tsx:190",className:"space-y-2 text-sm text-slate-700",children:Q.slice(0,3).map(e=>s.jsxs("li",{"data-loc":"client/src/pages/AdminOperations.tsx:190",children:[e.scope," · ",e.status," · ",k(e.reviewedAt)]},e.id))}):s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:190",className:"text-sm text-slate-500",children:"아직 기록된 접근성 점검 이력이 없습니다. 체크리스트 점검 후 결과를 등록해 주세요."})}),s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:192",className:"mt-4 space-y-2 rounded-xl border border-slate-200 p-3",children:[s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:193",className:"text-xs font-semibold text-slate-700",children:"점검 결과 기록"}),s.jsx(I,{"data-loc":"client/src/pages/AdminOperations.tsx:194",value:A,onChange:e=>d(e.target.value),"aria-label":"점검 범위",maxLength:100}),s.jsx(I,{"data-loc":"client/src/pages/AdminOperations.tsx:195",value:x,onChange:e=>O(e.target.value),"aria-label":"점검 요약",placeholder:"예: 키보드 이동과 오류 안내를 확인했습니다.",maxLength:500}),s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:196",className:"flex flex-wrap gap-2",children:[["passed","
7needs_review","failed"].map(e=>s.jsx(h,{"data-loc":"client/src/pages/AdminOperations.tsx:197",type:"button",size:"sm",variant:w===e?"default":"outline",onClick:()=>_(e),children:e==="passed"?"통과":e==="needs_review"?"검토 필요":"실패"},e)),s.jsx(h,{"data-loc":"client/src/pages/AdminOperations.tsx:198",type:"button",size:"sm",disabled:x.trim().length<5||P.isPending,onClick:()=>P.mutate({scope:A.trim(),status:w,summary:x.trim()}),children:P.isPending?"기록 중":"점검 기록 저장"})]})]})]}),s.jsxs("article",{"data-loc":"client/src/pages/AdminOperations.tsx:202",className:"rounded-2xl border bg-white p-5 shadow-sm",children:[s.jsx("h2",{"data-loc":"client/src/pages/AdminOperations.tsx:203",className:"font-semibold text-slate-950",children:"개인정보 최소화 운영 지표"}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:204",className:"mt-1 text-sm text-slate-600",children:"일자·유형·상태·건수·평균 응답시간만 집계합니다. 이름, 이메일, IP, 문의 원문은 지표에 저장하지 않습니다."}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:205",className:"mt-4 text-xs text-slate-500",children:"상담·Q&A·수강 신청의 업무량과 FAQ·SNS 상담 전환을 확인하는 용도로만 사용합니다."}),s.jsx("div",{"data-loc":"client/src/pages/AdminOperations.tsx:206",className:"mt-4 rounded-xl bg-slate-50 p-3","aria-live":"polite",children:S?s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:207",className:"text-sm text-slate-500",children:"일별 집계를 불러오는 중입니다."}):u?.length?s.jsx("ul",{"data-loc":"client/src/pages/AdminOperations.tsx:207",className:"space-y-2 text-sm text-slate-700",children:u.slice(0,5).map(e=>s.jsxs("li",{"data-loc":"client/src/pages/AdminOperations.tsx:207",className:"flex justify-between gap-3",children:[s.jsxs("span",{"data-loc":"client/src/pages/AdminOperations.tsx:207",children:[String(e.metricDate)," · ",gs[e.metricType]??e.metricType," · ",us[e.status]??e.status]}),s.jsxs("strong",{"data-loc":"client/src/pages/AdminOperations.tsx:207",children:[e.count,"건"]})]},e.id))}):s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:207",className:"text-sm text-slate-500",children:"아직 집계된 지표가 없습니다. 다음 일일 재집계 후 최근 현황이 표시됩니다."})}),s.jsxs("div",{"data-loc":"client/src/pages/AdminOperations.tsx:209",className:"mt-4 rounded-xl border border-slate-200 p-3","aria-busy":R,children:[s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:210",className:"text-xs font-semibold text-slate-700",children:"FAQ 상담 전환율"}),s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:211",className:"mt-1 text-xs text-slate-500",children:"FAQ 상담 연결 클릭 대비 실제 문의 접수 비율입니다. 개인 식별정보는 저장하지 않습니다."}),R?s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:212",className:"mt-4 text-sm text-slate-500",children:"전환율을 불러오는 중입니다."}):M?.length?s.jsx(os,{"data-loc":"client/src/pages/AdminOperations.tsx:212",config:hs,className:"mt-3 h-44 w-full",children:s.jsxs(G,{"data-loc":"client/src/pages/AdminOperations.tsx:212",accessibilityLayer:!0,data:M,children:[s.jsx(J,{"data-loc":"client/src/pages/AdminOperations.tsx:212",vertical:!1}),s.jsx(W,{"data-loc":"client/src/pages/AdminOperations.tsx:212",dataKey:"date",tickLine:!1,axisLine:!1,tickFormatter:e=>String(e).slice(5)}),s.jsx(ms,{"data-loc":"client/src/pages/AdminOperations.tsx:212",content:s.jsx(ps,{"data-loc":"client/src/pages/AdminOperations.tsx:212",formatter:e=>`${e}%`})}),s.jsx(Z,{"data-loc":"client/src/pages/AdminOperations.tsx:212",dataKey:"rate",fill:"var(--color-rate)",radius:4})]})}):s.jsx("p",{"data-loc":"client/src/pages/AdminOperations.tsx:212",className:"mt-4 text-sm text-slate-500",children:"아직 FAQ에서 접수된 문의가 없어 전환율을 표시할 수 없습니다."})]})]})]})]})})}export{Cs 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.