PageSourceSearch

https://cert-web-sand.vercel.app/assets/JobDetailPage-DN5CzV-l.js

js cert-web-sand.vercel.app collected 2026-10-03 06:22:52 UTC 11,150 bytes, 3 lines download raw bytes

1import{u as f,a2 as g,j as e,B as i}from"./index-DNWw9vL6.js";import{r as c,N,a0 as v,q as w,a9 as y,Z as k,$ as C,i as S,aj as A,a1 as _,aa as R,ab as q,ac as $,ad as B,ae as D,a6 as E,ak as L,al as M,am as J,W as P,V as T,t as b}from"./vendor-ui-BEzN-rtg.js";import{C as t,a as l}from"./card-DqqNoQLy.js";import{B as F}from"./badge-CAn3Rvbr.js";import{S as r}from"./skeleton-D4qHMoUI.js";import"./vendor-react-qkC6yhPU.js";function Z({id:o}){const n=f(),[s,x]=c.useState(null),[j,m]=c.useState(!0),d=c.useCallback(async()=>{m(!0),x(null);try{const a=await g(parseInt(o));x(a)}catch(a){console.error("Failed to fetch job detail:",a)}finally{m(!1)}},[o]);if(c.useEffect(()=>{d()},[d]),j)return e.jsxs("div",{className:"container mx-auto px-4 py-8 space-y-8",children:[e.jsx(r,{className:"h-10 w-32 rounded-lg bg-slate-800"}),e.jsx(r,{className:"h-64 w-full rounded-[2.5rem] bg-slate-900"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-8",children:[e.jsx(r,{className:"h-48 w-full rounded-2xl bg-slate-900"}),e.jsx(r,{className:"h-48 w-full rounded-2xl bg-slate-900"})]}),e.jsx(r,{className:"h-96 w-full rounded-2xl bg-slate-900"})]})]});if(!s)return e.jsxs("div",{className:"text-center py-20 text-white",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"직무 정보를 찾을 수 없습니다."}),e.jsx("p",{className:"text-slate-400 mt-2 text-sm",children:"일시적인 오류일 수 있습니다. 다시 시도해 보세요."}),e.jsxs("div",{className:"flex flex-wrap gap-3 justify-center mt-6",children:[e.jsx(i,{onClick:()=>d(),variant:"outline",className:"border-slate-600 text-slate-300",children:"다시 시도"}),e.jsx(i,{onClick:()=>n.navigate("/jobs"),variant:"ghost",children:"목록으로 돌아가기"})]})]});const p=[{subject:"보상",A:s.reward||0,fullMark:100},{subject:"안정성",A:s.stability||0,fullMark:100},{subject:"발전",A:s.development||0,fullMark:100},{subject:"환경",A:s.condition||0,fullMark:100},{subject:"전문성",A:s.professionalism||0,fullMark:100},{subject:"평등",A:s.equality||0,fullMark:100}],u=async()=>{const a={title:`CertFinder - ${s.job_name} 분석 리포트`,text:`${s.job_name}의 연봉, 전망, 자격증 정보를 확인하세요!`,url:window.location.href};try{navigator.share?(await navigator.share(a),b.success("리포트가 공유되었습니다.")):(await navigator.clipboard.writeText(window.location.href),b.success("링크가 클립보드에 복사되었습니다."))}catch(h){console.error("Share failed:",h)}};return e.jsxs("div",{className:"container mx-auto px-4 py-8 space-y-8 max-w-7xl animate-in fade-in duration-500",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(i,{variant:"ghost",size:"sm",onClick:()=>n.navigate("/jobs"),className:"text-slate-400 hover:text-white",children:[e.jsx(N,{className:"w-4 h-4 mr-1"})," 목록으로"]}),e.jsx("div",{className:"h-4 w-px bg-slate-800"}),e.jsx("span",{className:"text-sm font-bold text-slate-500 uppercase tracking-widest",children:"Job Analytics Report"})]}),e.jsxs("div",{className:"relative rounded-[2.5rem] bg-slate-900 border border-slate-800 overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 right-0 w-[50%] h-full bg-gradient-to-l from-blue-600/10 via-indigo-600/5 to-transparent pointer-events-none"}),e.jsx("div",{className:"p-8 md:p-16 relative z-10",children:e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"p-4 rounded-2xl bg-blue-600/10 border border-blue-500/20 w-fit",children:e.jsx(v,{className:"w-10 h-10 text-blue-400"})}),e.jsx("div",{className:"space-y-2",children:e.jsx("h1",{className:"text-4xl md:text-5xl font-black text-white tracking-tight",children:s.job_name})})]})})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8",children:[e.jsxs("div",{className:"lg:col-span-8 space-y-8",children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-8",children:[e.jsx(t,{className:"bg-slate-900/50 border-slate-800 hover:border-slate-700 transition-colors",children:e.jsxs(l,{className:"p-8 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3 text-emerald-400 font-bold text-sm",children:[e.jsx(w,{className:"w-5 h-5"})," 직업 전망"]}),e.jsx("p",{className:"text-slate-300 text-sm leading-snug font-medium whitespace-pre-line",children:s.outlook_summary||"전망 정보 분석 중입니다."})]})}),e.jsx(t,{className:"bg-slate-900/50 border-slate-800 hover:border-slate-700 transition-colors",children:e.jsxs(l,{className:"p-8",children:[e.jsxs("div",{className:"flex items-center gap-3 text-amber-500 font-bold text-sm mb-4",children:[e.jsx(y,{className:"w-5 h-5"})," 임금 정보"]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-6 items-start justify-between sm:gap-8",children:[e.jsx("div",{className:"flex-1 min-w-0 
1w-full sm:min-w-0",children:e.jsx("p",{className:"text-slate-300 text-sm leading-relaxed break-words",children:(()=>{const a=s.salary_info??s.entry_salary??null;return a?.trim()?/임금수준은|하위\s*\(|평균\s*\(|상위\s*\(/.test(a)?a:`${s.job_name}의 임금수준은 ${a} 등으로 조회된다. (자료: 워크넷 직업정보)`:`${s.job_name}의 임금 정보: 협의. (자료: 워크넷 직업정보)`})()})}),e.jsxs("div",{className:"flex flex-col items-center sm:items-end shrink-0 space-y-1 sm:pl-4",children:[e.jsx("div",{className:"text-[10px] font-bold text-slate-500 uppercase tracking-widest",children:"Stability Score"}),e.jsxs("div",{className:"text-2xl font-black text-blue-400",children:[s.stability??0,"/100"]})]})]})]})})]}),e.jsx(t,{className:"bg-slate-900/50 border-slate-800 hover:border-blue-500/30 hover:bg-blue-500/5 transition-all group",children:e.jsxs(l,{className:"p-8 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3 text-slate-400 font-bold text-sm",children:[e.jsx(k,{className:"w-5 h-5 text-blue-400"})," 취업 방법 및 경로"]}),e.jsx("div",{className:"bg-black/20 p-6 rounded-2xl border border-white/5",children:e.jsx("p",{className:"text-slate-300 text-sm leading-snug font-medium whitespace-pre-line",children:s.employment_path?.replace(/ - /g,`
2- `).replace(/^- /g,"- ")||"취업 정보가 곧 업데이트됩니다."})})]})}),e.jsx(t,{className:"bg-slate-900/50 border-slate-800 hover:border-blue-500/30 hover:bg-blue-500/5 transition-all group",children:e.jsxs(l,{className:"p-8 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3 text-slate-400 font-bold text-sm",children:[e.jsx(C,{className:"w-5 h-5 text-blue-400"})," 핵심 적성 및 역량"]}),e.jsx("div",{className:"bg-black/20 p-6 rounded-2xl border border-white/5",children:e.jsx("p",{className:"text-slate-300 text-sm leading-snug font-medium whitespace-pre-line text-justify",children:s.aptitude?.replace(/ - /g,`
3- `).replace(/^- /g,"- ")||"상세 역량 정보 분석 중입니다."})})]})}),e.jsxs("section",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-slate-800 pb-4",children:[e.jsxs("h3",{className:"text-xl font-bold text-white flex items-center gap-3",children:[e.jsx(S,{className:"w-6 h-6 text-yellow-500"}),"관련 핵심 자격증"]}),e.jsxs(F,{variant:"outline",className:"border-slate-800 text-slate-500 font-medium",children:[s.qualifications?.length||0,"개 추천"]})]}),s.qualifications&&s.qualifications.length>0?e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:s.qualifications.map(a=>e.jsx(t,{onClick:()=>n.navigate(`/certs/${a.qual_id}`),className:"bg-slate-900 border-slate-800 hover:border-blue-500/50 hover:bg-slate-800/50 cursor-pointer transition-all group",children:e.jsxs(l,{className:"p-6 flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-white font-bold group-hover:text-blue-400 transition-colors",children:a.qual_name}),e.jsxs("div",{className:"text-[10px] text-slate-500 font-bold",children:[a.qual_type,", ",a.main_field]})]}),e.jsx(A,{className:"w-4 h-4 text-slate-600 group-hover:text-blue-400 transition-colors"})]})},a.qual_id))}):e.jsx("div",{className:"bg-slate-900/40 border border-slate-800 border-dashed rounded-2xl p-12 text-center text-slate-500 italic",children:"관련 자격증 정보를 분석하고 있습니다."})]})]}),e.jsx("div",{className:"lg:col-span-4 space-y-8",children:e.jsxs(t,{className:"relative bg-slate-900/50 border-slate-800 md:sticky md:top-24 overflow-hidden",children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-px bg-gradient-to-r from-blue-500 to-indigo-600 opacity-60"}),e.jsxs(l,{className:"p-8 space-y-8",children:[e.jsxs("div",{className:"space-y-1 text-center",children:[e.jsx("h3",{className:"text-xl font-bold text-white uppercase tracking-tight",children:"직무 특성 레이더"}),e.jsx("p",{className:"text-[10px] text-slate-500 font-bold tracking-widest",children:"CHARACTERISTIC SCALE 0-100"})]}),e.jsx("div",{className:"aspect-square relative",children:e.jsx(_,{width:"100%",height:"100%",children:e.jsxs(R,{cx:"50%",cy:"50%",outerRadius:"70%",data:p,children:[e.jsx(q,{stroke:"#1e293b",strokeDasharray:"3 3"}),e.jsx($,{dataKey:"subject",tick:{fill:"#64748b",fontSize:10,fontWeight:700}}),e.jsx(B,{name:"점수",dataKey:"A",stroke:"#3b82f6",fill:"#3b82f6",fillOpacity:.6}
3),e.jsx(D,{domain:[0,100],tick:!1,axisLine:!1}),e.jsx(E,{contentStyle:{backgroundColor:"#0f172a",border:"1px solid #1e293b",borderRadius:"8px"},itemStyle:{color:"#3b82f6"}})]})})}),e.jsxs("div",{className:"space-y-4 pt-4 border-t border-slate-800",children:[e.jsxs("div",{className:"flex justify-between items-center group",children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-400 text-xs font-bold",children:[e.jsx(L,{className:"w-4 h-4 text-blue-500"})," 발전 가능성"]}),e.jsxs("div",{className:"text-white font-black",children:[s.development,"%"]})]}),e.jsxs("div",{className:"flex justify-between items-center group",children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-400 text-xs font-bold",children:[e.jsx(M,{className:"w-4 h-4 text-amber-500"})," 안정성 지수"]}),e.jsxs("div",{className:"text-white font-black",children:[s.stability??0,"%"]})]}),e.jsxs("div",{className:"flex justify-between items-center group",children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-400 text-xs font-bold",children:[e.jsx(J,{className:"w-4 h-4 text-emerald-500"})," 전문성 지수"]}),e.jsxs("div",{className:"text-white font-black",children:[s.professionalism,"%"]})]}),e.jsxs("div",{className:"flex justify-between items-center group",children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-400 text-xs font-bold",children:[e.jsx(P,{className:"w-4 h-4 text-slate-400"})," 고용 평등성"]}),e.jsxs("div",{className:"text-white font-black",children:[s.equality,"%"]})]})]}),e.jsxs(i,{onClick:u,className:"w-full h-14 bg-slate-800 hover:bg-slate-700 text-white font-bold rounded-xl mt-6 flex items-center justify-center gap-2",children:[e.jsx(T,{className:"w-5 h-5"}),"리포트 공유하기"]})]})]})})]})]})}export{Z as JobDetailPage};

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.