import{a as e,n as t,t as n}from"./jsx-runtime-CutOxEx1.js";import{l as r}from"./chunk-6CSD65Y2-BjfinoX-.js";import{r as i}from"./authSession-Dulxhbeq.js";import{r as a}from"./norm-f7iXVy-b.js";import{t as o}from"./download-BtyQsy17.js";import{t as s}from"./loader-2-PLD5ZZNj.js";import{t as c}from"./rotate-ccw-CWKCobgh.js";import{t as l}from"./send-D2dk6kZF.js";import{t as u}from"./HrShell-ToXdRH2L.js";import{t as d}from"./EditorialMarkdown-DmwukgX6.js";import{t as f}from"./useUniversalAgent-_PiDQGeH.js";import{PrefetchCard as p,ToolStepsView as m,TurnView as h}from"./AiUniversalToolPage-6vWxurMC.js";var g=e(t(),1),_=n(),v=`aiq:hr-jd-editor`,y=/(竞品|竞对|同行|市场|参考|公开岗位|别人怎么写|怎么写|薪资|招聘网站|boss|boss直聘|猎聘|拉勾|脉脉|智联|前程无忧|历史|过去|以前|发布过|相似岗位|公司名称|岗位名称|精确|模糊)/i,b=[{label:`从 0 写 JD`,text:`我要从 0 写一个 JD。请先问我最关键的用人部门需求，不要直接编。`},{label:`优化现有 JD`,text:`我有一版 JD 草稿，请帮我发现问题、补齐职责要求、筛选关键词、卖点和合规提醒。`},{label:`参考竞品岗位`,text:`请参考同类公司公开招聘岗位的写法，帮我判断这个岗位应该怎么写更有吸引力。`},{label:`查历史相似岗位`,text:`请先按公司名称和岗位名称查找过去发布过的相似岗位，精确没有结果再做模糊匹配，然后再帮我写 JD。`}],x=e=>[`你在 HR 工作台的写JD功能中服务招聘负责人。`,`工作方式：用对话启发用户把用人部门真实需求讲清楚。信息不足时先问 3-5 个最关键问题；信息足够时直接产出可发布 JD。`,`JD 产物必须包含：岗位定位、主要职责、任职要求、加分项、筛选关键词、面试验证点、职位卖点、合规提醒、目标候选人画像。`,`不要编造地点、薪资、福利、汇报线、工作时间、HC、团队规模、公司亮点。用户没有提供时不写，或标为需要确认。`,`涉及年龄、性别、婚育、民族、宗教、健康、籍贯等限制时必须改成合法且可验证的胜任力表达。`,`当用户要求参考竞品、市场写法、公开岗位或某家公司岗位时，可以检索公开招聘信息；只总结对 JD 有用的职责、门槛、关键词、卖点和风险，不展示底层工具或供应商名称。`,`当用户要求查过去发布过的相似岗位时，优先用公司名称+岗位名称做精确查找；精确无结果再按岗位同义词、职级、城市和业务线做模糊查找。没有足够结果时明确说明，不要假装查到。`,`输出给 HR 看，语言要直接、可执行、便于复制到招聘系统；如果给出竞品参考，要说明哪些可借鉴、哪些不建议照抄。`,`本轮用户输入：${e}`].join(`

`),S=(e,t)=>{let n=new Blob([t],{type:`text/plain;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e.endsWith(`.txt`)?e:`${e}.txt`,document.body.appendChild(i),i.click(),document.body.removeChild(i),window.setTimeout(()=>URL.revokeObjectURL(r),1e3)};function C(){let e=r(),[t,n]=(0,g.useState)(!0),[C,w]=(0,g.useState)(``),{state:T,submit:E,cancel:D,reset:O,confirmPlan:k}=f({stateKey:v,taskLabel:`HR JD 写作`,taskPath:`/hr/jd-editor`,persistConversation:!1}),A=T.turns.length>0||!!T.streamPrefetch||T.streamSteps.length>0||T.streaming,j=C.trim().length>=2&&!T.streaming,M=(0,g.useMemo)(()=>T.turns.map(e=>{let t=e.role===`user`?`HR`:`Aiq`,n=a(e.finalText||e.content||``);return n?`## ${t}\n${n}`:``}).filter(Boolean).join(`

`),[T.turns]);(0,g.useEffect)(()=>{let t=!0;return(async()=>{let r=await i();if(t){if(!r?.token){e(`/auth?returnTo=%2Fhr%2Fjd-editor`);return}n(!1)}})(),()=>{t=!1}},[e]);let N=async e=>{let t=a(e||C);if(t.length<2||T.streaming)return;w(``);let n=y.test(t);await E({userInput:t,phase:`execute`,context:x(t),disabledTools:n?[]:[`web_search`,`job_search_map`,`company_salary_data`],inferenceMode:`normal`})};return t?(0,_.jsx)(u,{children:(0,_.jsx)(`p`,{className:`hr-page-sub`,children:`正在加载...`})}):(0,_.jsxs)(u,{children:[(0,_.jsxs)(`div`,{className:`hr-page-header`,children:[(0,_.jsx)(`h1`,{className:`hr-page-title`,children:`写JD`}),(0,_.jsx)(`p`,{className:`hr-page-sub`,children:`用对话把用人部门需求问清楚，再生成可发布 JD；需要参考竞品岗位、公开招聘写法或历史相似岗位时，直接在对话里说明。`})]}),(0,_.jsx)(`div`,{className:`hr-jd-ai-layout`,children:(0,_.jsxs)(`section`,{className:`hr-jd-workspace`,children:[(0,_.jsxs)(`div`,{className:`hr-jd-command-bar`,children:[(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h3`,{className:`hr-summary-title`,children:`选择一个起点`}),(0,_.jsx)(`p`,{className:`hr-inline-note`,children:`先选起点，或直接在下方输入岗位需求。`})]}),(0,_.jsxs)(`div`,{className:`hr-aiq-actions`,children:[(0,_.jsxs)(`button`,{type:`button`,className:`hr-btn-ghost`,onClick:O,disabled:T.streaming||!A,children:[(0,_.jsx)(c,{size:14}),` 新建对话`]}),(0,_.jsxs)(`button`,{type:`button`,className:`hr-btn-ghost`,onClick:()=>S(`hr-jd-aiq-${Date.now()}`,M),disabled:!M.trim(),children:[(0,_.jsx)(o,{size:14}),` 下载记录`]})]})]}),(0,_.jsx)(`div`,{className:`hr-jd-prompt-list`,children:b.map(e=>(0,_.jsx)(`button`,{type:`button`,className:`hr-jd-prompt-btn`,onClick:()=>void N(e.text),disabled:T.streaming,children:e.label},e.label))}),(0,_.jsxs)(`div`,{className:`hr-jd-context-note`,children:[(0,_.jsx)(`span`,{children:`写新 JD`}),(0,_.jsx)(`span`,{children:`优化旧 JD`}),(0,_.jsx)(`span`,{children:`参考竞品岗位`}),(0,_.jsx)(`span`,{children:`查历史相似岗位`})]}),(0,_.jsxs)(`div`,{className:`hr-aiq-panel`,children:[A?(0,_.jsxs)(`div`,{className:`hr-aiq-window`,children:[T.turns.map(e=>(0,_.jsx)(h,{turn:e,disabled:T.streaming,onConfirm:e=>{k(e)},onCorrect:()=>{}},e.id)),T.streamPrefetch?(0,_.jsx)(p,{prefetch:T.streamPrefetch}):null,T.streamSteps.length?(0,_.jsx)(m,{steps:T.streamSteps}):null,T.streaming?(0,_.jsxs)(`div`,{className:`rc-ai-turn hr-aiq-stream`,children:[(0,_.jsxs)(`div`,{className:`rc-ai-label`,children:[(0,_.jsx)(`span`,{className:`rc-ai-label-dot`}),(0,_.jsx)(`span`,{children:`Aiq`})]}),T.streamText?(0,_.jsx)(d,{text:T.streamText,className:`rc-final-md`}):(0,_.jsxs)(`div`,{className:`hr-inline-note`,children:[(0,_.jsx)(s,{size:14,className:`hr-upload-status-icon--spin`}),` 正在整理...`]})]}):null]}):(0,_.jsxs)(`div`,{className:`hr-jd-empty`,children:[(0,_.jsx)(`h3`,{className:`hr-summary-title`,children:`先说岗位目标`}),(0,_.jsx)(`p`,{className:`hr-page-sub`,children:`例如：业务为什么要招、这个人来了要解决什么问题、必须会什么、哪些条件可以放宽。`})]}),T.error?(0,_.jsx)(`p`,{className:`hr-error`,children:T.error}):null,(0,_.jsxs)(`div`,{className:`hr-aiq-composer`,children:[(0,_.jsx)(`textarea`,{className:`hr-textarea`,rows:4,value:C,onChange:e=>w(e.target.value),onKeyDown:e=>{e.key!==`Enter`||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),N())},placeholder:`例如：帮我写一个销售总监 JD，团队要从 20 人扩到 60 人；或者：参考字节/阿里同类岗位，帮我优化这版 JD。`,disabled:T.streaming}),(0,_.jsxs)(`div`,{className:`hr-aiq-actions`,children:[T.streaming?(0,_.jsx)(`button`,{type:`button`,className:`hr-btn-ghost`,onClick:D,children:`停止`}):null,(0,_.jsxs)(`button`,{type:`button`,className:`hr-btn-primary`,onClick:()=>void N(),disabled:!j,children:[T.streaming?(0,_.jsx)(s,{size:14,className:`hr-upload-status-icon--spin`}):(0,_.jsx)(l,{size:14}),`发送`]})]})]})]})]})})]})}export{C as default};