hunter-mate 0.1.19 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/extension/background/{service-worker.20261008011501.js → service-worker.20261015181453.js} +8 -8
- package/dist/assets/extension/background/service-worker.js +8 -8
- package/dist/assets/extension/build-info.json +1 -1
- package/dist/assets/extension/content/index.js +2 -2
- package/dist/assets/extension/manifest.json +3 -3
- package/dist/assets/extension/offscreen/offscreen.html +1 -1
- package/dist/assets/extension/offscreen/offscreen.js +2 -2
- package/dist/assets/extension/package.json +1 -1
- package/dist/assets/server/chunks/{chunk-IXYSL3NT.mjs → chunk-BLXHCSZD.mjs} +8 -10
- package/dist/assets/server/chunks/{script-rule-ANR2J7E6.mjs → script-rule-ZJN6CEYX.mjs} +1 -1
- package/dist/assets/server/main.mjs +4087 -2872
- package/dist/index.js +231 -52
- package/dist/web/dist/404.html +1 -1
- package/dist/web/dist/_next/static/cIjUG1nvMEwYon0Zb8dYt/_buildManifest.js +1 -0
- package/dist/web/dist/_next/static/chunks/105-dcd8f6d5867c8995.js +32 -0
- package/dist/web/dist/_next/static/chunks/166.b263e636ff66212f.js +1 -0
- package/dist/web/dist/_next/static/chunks/1e6d5a0c.75afa2d319272f42.js +15 -0
- package/dist/web/dist/_next/static/chunks/555-e2a871b9d2eccb03.js +12 -0
- package/dist/web/dist/_next/static/chunks/589-f984bff035a1cb85.js +1 -0
- package/dist/web/dist/_next/static/chunks/671.ae431f885d6c7f0c.js +1 -0
- package/dist/web/dist/_next/static/chunks/686-9f419b70feea9470.js +1 -0
- package/dist/web/dist/_next/static/chunks/852-248884963a986600.js +1 -0
- package/dist/web/dist/_next/static/chunks/865-0ed23dd43c0832a2.js +1 -0
- package/dist/web/dist/_next/static/chunks/935-7be3e60dd8bc29d2.js +5 -0
- package/dist/web/dist/_next/static/chunks/954-fb0212fe71f60a52.js +1 -0
- package/dist/web/dist/_next/static/chunks/a7067448-e416655baf443992.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/_not-found/page-5b7249eb3c9a6cb9.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/admin/data/page-14698e9c4ddaa6d9.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/auth/verify/page-05304d5803008d61.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/companies/page-ec27ce9ab3610221.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/company/admin/page-c2584183bc4b34d1.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/entity/page-08755f96102f0565.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/jobs/page-4175a90f1b42f87d.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/layout-af39afc7866e74db.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/logs/page-be50a4e10b1a0024.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-cf445b0cb8c2cb0a.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-c7ff0d79b6a75915.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/page-bd282e1e5f0965f1.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/parselog/page-9814e75d6900a743.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/recordings/page-441016638b43c4f8.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/resource-usage/page-f6fa06bfe21bcd32.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/shared/[token]/page-c9c5042a2d07c0bc.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-f54cf2f0058035ca.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/talents/page-c0a0c250eb5f5459.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/team/insights/page-8b3934df3e292368.js +1 -0
- package/dist/web/dist/_next/static/chunks/framework-8aa939434277315a.js +1 -0
- package/dist/web/dist/_next/static/chunks/main-8a2c75d6c43385dd.js +1 -0
- package/dist/web/dist/_next/static/chunks/main-app-f496bd51a73ef9f3.js +1 -0
- package/dist/web/dist/_next/static/chunks/pages/_app-037e1cd81d653e68.js +4 -0
- package/dist/web/dist/_next/static/chunks/pages/_error-59095d3b83385d1f.js +1 -0
- package/dist/web/dist/_next/static/chunks/{webpack-cf21e951181fd345.js → webpack-54e74ccc9e9451ee.js} +1 -1
- package/dist/web/dist/_next/static/css/bd072fee69ae8474.css +3 -0
- package/dist/web/dist/admin/data.html +1 -1
- package/dist/web/dist/admin/data.txt +8 -6
- package/dist/web/dist/auth/verify.html +1 -1
- package/dist/web/dist/auth/verify.txt +8 -6
- package/dist/web/dist/companies.html +1 -1
- package/dist/web/dist/companies.txt +9 -7
- package/dist/web/dist/company/admin.html +1 -1
- package/dist/web/dist/company/admin.txt +8 -6
- package/dist/web/dist/entity.html +1 -1
- package/dist/web/dist/entity.txt +9 -7
- package/dist/web/dist/index.html +1 -1
- package/dist/web/dist/index.txt +9 -7
- package/dist/web/dist/jobs.html +1 -1
- package/dist/web/dist/jobs.txt +9 -7
- package/dist/web/dist/logs.html +1 -1
- package/dist/web/dist/logs.txt +9 -7
- package/dist/web/dist/matching/jobs/placeholder/talents.html +1 -1
- package/dist/web/dist/matching/jobs/placeholder/talents.txt +8 -6
- package/dist/web/dist/matching/portraits/placeholder/jobs.html +1 -1
- package/dist/web/dist/matching/portraits/placeholder/jobs.txt +8 -6
- package/dist/web/dist/parselog.html +1 -1
- package/dist/web/dist/parselog.txt +9 -7
- package/dist/web/dist/recordings.html +1 -1
- package/dist/web/dist/recordings.txt +9 -7
- package/dist/web/dist/resource-usage.html +1 -1
- package/dist/web/dist/resource-usage.txt +9 -7
- package/dist/web/dist/shared/placeholder.html +1 -1
- package/dist/web/dist/shared/placeholder.txt +8 -6
- package/dist/web/dist/snapshots/placeholder/agent-prompt.html +1 -1
- package/dist/web/dist/snapshots/placeholder/agent-prompt.txt +8 -6
- package/dist/web/dist/talents.html +1 -1
- package/dist/web/dist/talents.txt +8 -6
- package/dist/web/dist/team/insights.html +1 -1
- package/dist/web/dist/team/insights.txt +8 -6
- package/package.json +1 -1
- package/dist/web/dist/_next/static/9Wm8FfXwBJyMk-wYf4l81/_buildManifest.js +0 -1
- package/dist/web/dist/_next/static/chunks/166.f30be223f694f8ee.js +0 -1
- package/dist/web/dist/_next/static/chunks/1e6d5a0c.0488932e17ecdf24.js +0 -15
- package/dist/web/dist/_next/static/chunks/542-4a43545450151f1d.js +0 -1
- package/dist/web/dist/_next/static/chunks/589-5e99e548a0ee6bac.js +0 -1
- package/dist/web/dist/_next/static/chunks/670-750aa43678fb0d30.js +0 -1
- package/dist/web/dist/_next/static/chunks/671.3b8e9cc96b25b6ea.js +0 -1
- package/dist/web/dist/_next/static/chunks/686-ade57c57a1737818.js +0 -1
- package/dist/web/dist/_next/static/chunks/852-5150a7ae95a599fb.js +0 -1
- package/dist/web/dist/_next/static/chunks/935-4058f12c3d405b32.js +0 -5
- package/dist/web/dist/_next/static/chunks/a7067448-d3882c7e74c162bf.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/_not-found/page-cf5ab201496f0914.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/admin/data/page-a566c6b13c61f9d4.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/auth/verify/page-38fa28a48f76defa.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/companies/page-058047767bc162f4.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/company/admin/page-a2088b59c3820800.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/entity/page-dc9664fb628e2d08.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/jobs/page-4fb6a67d044b238d.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/layout-1feb99bf08beb3c8.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/logs/page-ccc6bb863cf77e56.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-c6714cec1ffd7c5e.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-658eca1ae5ca29dc.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/page-291cd145a56bd020.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/parselog/page-b1b7ae9483273ce0.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/recordings/page-c12948f01885099e.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/resource-usage/page-8394e96892688180.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/shared/[token]/page-e859e87f2301b120.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-f519552be54e3bdf.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/talents/page-75af05473ea322d9.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/team/insights/page-7b8769e35cd9987b.js +0 -1
- package/dist/web/dist/_next/static/chunks/framework-b3a558b17a070965.js +0 -1
- package/dist/web/dist/_next/static/chunks/main-8d45182e1c21cb95.js +0 -1
- package/dist/web/dist/_next/static/chunks/main-app-70da092dee991648.js +0 -1
- package/dist/web/dist/_next/static/chunks/pages/_app-8438560f1c1a7980.js +0 -4
- package/dist/web/dist/_next/static/chunks/pages/_error-17756f67e0a11350.js +0 -1
- package/dist/web/dist/_next/static/css/9eaf0c9cc1c24641.css +0 -3
- /package/dist/web/dist/_next/static/{9Wm8FfXwBJyMk-wYf4l81 → cIjUG1nvMEwYon0Zb8dYt}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="3d70d761-8c51-4979-afc5-44992d28c22f",e._sentryDebugIdIdentifier="sentry-dbid-3d70d761-8c51-4979-afc5-44992d28c22f")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[964],{1937:function(e,t,s){Promise.resolve().then(s.bind(s,854))},854:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return P}});var a=s(2835),l=s(635),r=s(7473),n=s(4431),i=s(8448),o=s(4518),c=s(3718);function d(e){var t;let{customer:s}=e,o=(0,r.useRouter)(),[c,d]=(0,l.useState)(null),[x,u]=(0,l.useState)(!1),[m,p]=(0,l.useState)(new Set),[b,h]=(0,l.useState)(s.id),[g,y]=(0,l.useState)(!1),[f,j]=(0,l.useState)("");(0,l.useEffect)(()=>{let e=!0;return d(null),j(""),(0,n.rd)("/customers/".concat(s.id,"/duplicates")).then(t=>{var s;e&&d(null!==(s=null==t?void 0:t.candidates)&&void 0!==s?s:[])}),()=>{e=!1}},[s.id]);let v=async()=>{let e=(null!=c?c:[]).filter(e=>!m.has(e.id)).map(e=>e.id);if(b!==s.id&&e.push(s.id),0===e.length){j("未勾选任何候选参与合并");return}y(!0);let t=!0;for(let s of e)if(!await (0,n.rd)("/customers/merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({keepId:b,removeId:s})})){t=!1;break}if(y(!1),!t){j("合并失败,请重试");return}o.replace("/companies?id=".concat(b)),o.refresh(),window.location.reload()};if(null===c||0===c.length)return null;let N=b===s.id?{canonicalName:s.canonicalName,aliases:s.aliases}:c.find(e=>e.id===b),k=c.filter(e=>!m.has(e.id)),w=N?((e,t)=>{var s,a;let l=new Set(null!==(s=e.aliases)&&void 0!==s?s:[]);for(let s of t)if(b!==s.id)for(let t of[s.canonicalName,...null!==(a=s.aliases)&&void 0!==a?a:[]])t&&t!==e.canonicalName&&l.add(t);return Array.from(l)})(N,k):[];return(0,a.jsxs)("div",{className:"mb-4 rounded-lg border border-amber-300 bg-amber-50 p-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,a.jsxs)("span",{className:"text-sm font-medium text-amber-800",children:["发现 ",c.length," 条可能重复的公司记录"]}),(0,a.jsx)("button",{onClick:()=>u(!0),disabled:g,className:"rounded bg-amber-600 px-3 py-1 text-sm text-white hover:bg-amber-700 disabled:opacity-50",children:"查看并处理"}),f?(0,a.jsx)("span",{className:"text-sm text-red-600",children:f}):null]}),x?(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30 p-2 sm:p-4",onClick:()=>u(!1),children:(0,a.jsxs)("div",{className:"flex max-h-[90vh] w-full max-w-3xl flex-col overflow-hidden rounded-lg bg-white shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 border-b border-gray-200 px-4 py-3",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold text-gray-900",children:"重复公司合并工作区"}),(0,a.jsxs)("span",{className:"text-sm text-gray-500",children:["当前 #",s.id," \xb7 ",s.canonicalName]}),(0,a.jsx)("button",{onClick:()=>u(!1),className:"ml-auto text-sm text-gray-500 hover:text-gray-700",children:"关闭"})]}),(0,a.jsxs)("div",{className:"flex-1 overflow-y-auto p-4",children:[(0,a.jsx)("div",{className:"mb-2 text-xs font-medium text-gray-500",children:"候选(勾选=重复,参与合并;合并后其交付职位与备注重指保留行)"}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("label",{className:"flex items-start gap-2 rounded-lg border p-2 ".concat(b===s.id?"border-blue-400 bg-blue-50":"border-gray-200"),children:[(0,a.jsx)("input",{type:"radio",name:"company-keep",checked:b===s.id,onChange:()=>h(s.id),title:"保留这一行"}),(0,a.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-gray-900",children:s.canonicalName}),(0,a.jsx)("span",{className:"ml-2 rounded bg-gray-100 px-1.5 py-0.5 text-xs text-gray-600",children:"当前行"}),(null===(t=s.aliases)||void 0===t?void 0:t.length)?(0,a.jsxs)("span",{className:"block truncate text-xs text-gray-500",children:["别名:",s.aliases.join("、")]}):null]})]}),c.map(e=>{var t;return(0,a.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border p-2 ".concat(b===e.id?"border-blue-400 bg-blue-50":"border-gray-200"),children:[(0,a.jsx)("input",{type:"checkbox",checked:!m.has(e.id),disabled:g,onChange:t=>{p(s=>{let a=new Set(s);return t.target.checked?a.delete(e.id):a.add(e.id),a})},title:"勾选=重复公司,参与合并"}),(0,a.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("span",{className:"text-sm font-medium text-gray-900",children:["#",e.id," ",e.canonicalName]}),(0,a.jsx)("span",{className:"ml-2 rounded bg-amber-100 px-1.5 py-0.5 text-xs text-amber-700",children:e.reason}),1===e.isCustomer?(0,a.jsx)("span",{className:"ml-1 rounded bg-amber-100 px-1.5 py-0.5 text-xs text-amber-700",children:"客户"}):null,(0,a.jsxs)("span",{className:"block truncate text-xs text-gray-500",children:[e.jobCaseCount," 个职位案件 \xb7 更新于 ",(0,i.d3)(e.updatedAt),(null===(t=e.aliases)||void 0===t?void 0:t.length)?" \xb7 别名:".concat(e.aliases.join("、")):""]})]}),(0,a.jsx)("input",{type:"radio",name:"company-keep",checked:b===e.id,onChange:()=>h(e.id),title:"保留这一行"})]},e.id)})]}),w.length?(0,a.jsxs)("div",{className:"mt-3 rounded-lg border border-gray-200 bg-gray-50 p-3",children:[(0,a.jsx)("div",{className:"text-xs font-medium text-gray-500",children:"合并后别名(预览)"}),(0,a.jsx)("div",{className:"mt-1 text-sm text-gray-800",children:w.join("、")})]}):null]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-t border-gray-200 px-4 py-3",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>void v(),disabled:g,className:"rounded bg-blue-600 px-4 py-1.5 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:["确认合并(保留 #",b,")"]}),(0,a.jsx)("span",{className:"text-xs text-gray-500",children:"保留行吸收其余行的别名/档案/联系人;被合并行走墓碑外传删除(云端同步删)"}),f?(0,a.jsx)("span",{className:"text-sm text-red-600",children:f}):null]})]})}):null]})}function x(e){var t;let s=(null===(t=e.aliases)||void 0===t?void 0:t.length)?"(别名:".concat(e.aliases.join("、"),")"):"";return"调研公司「".concat(e.canonicalName,"」").concat(s,"(hunter-mate 公司注册表 ID=").concat(e.id,")。")}function u(e,t){return["调研结果写回(每步一个键,键名用下方约定,值为中文正文、关键名词保留英文):","curl -X PATCH ".concat(e.origin,"/customers/").concat(e.id," \\")," -H 'Content-Type: application/json' \\",' -d \'{"profile":{"'.concat(t,'":{"<步骤键>":"<内容>"}}}\''),"只写你实际完成且确有依据的步骤,不确定的标注「待核实」;不要编造。写回后告知用户更新了哪些步骤。"].join("\n")}let m={bd:{title:"BD 档案(竞对分析)",button:"让 agent 调研(BD)",builder:function(e){return[x(e),"按「公司竞争对手分析与BD分步操作SOP V0.1」(bd-competitor-sop)执行调研,覆盖以下步骤:",...["第一步\xb7公司主体:集团/母公司/子公司/品牌/海外法人关系","第二步\xb7业务与竞争关系:主要产品与服务、目标客户、竞争格局","第三步\xb7近12个月海外发展与投资:新市场、建厂、并购、融资动态","第四步\xb7海外招聘信号:在招岗位、地区、规模与趋势","第五步\xb7岗位映射:海外动作对应的组织能力与关键岗位","第六步\xb7内部人才与案例资产:我司已有人才/案例与之的关联","第七步\xb7BD优先级与打法建议:是否值得跟、从哪切入"].map(e=>"- ".concat(e)),"",u(e,"bd")].join("\n")}},op:{title:"OP 档案(职位操作)",button:"让 agent 调研(OP)",builder:function(e){return[x(e),"按「寻访操作SOP V3.1」(rs-sourcing-sop)的公司调研口径执行,产出服务职位推荐与人才寻访:",...["核心业务:产品/服务是什么、卖给谁、应用场景","规模与业绩:营收/人员规模,当地业务规模","海外布局:开展业务的国家、海外团队规模与管理方式","当前招聘需求与背景:在招什么岗、为什么招","未来战略与规划:用于候选人沟通的 marketing 话术素材","对标公司名单:喜欢挖猎的对标公司,不少于 20 家,按梯队分组(给名单即可,梯队用一/二/三)","公司介绍 Hook:一段话介绍该公司(用于 Connect 模板,可编辑)","当地可挖猎公司名单:该岗位 base 地存在该岗位的公司名单,不低于 20 家"].map(e=>"- ".concat(e)),"",u(e,"op")].join("\n")}}};function p(e){return null==e||""===e?"":"string"==typeof e?e:JSON.stringify(e,null,2)}function b(e){let{customer:t,onSaved:s}=e,[r,i]=(0,l.useState)(!1),[o,c]=(0,l.useState)(!1),[d,x]=(0,l.useState)(""),[u,b]=(0,l.useState)(null),[h,g]=(0,l.useState)(""),[y,f]=(0,l.useState)(""),[j,v]=(0,l.useState)(""),[N,k]=(0,l.useState)({bd:[],op:[]}),w=async e=>{x("");let s={id:t.id,canonicalName:t.canonicalName,aliases:t.aliases,origin:window.location.origin};try{await navigator.clipboard.writeText(m[e].builder(s)),b(e),setTimeout(()=>b(null),4e3)}catch(e){var a;x("复制失败:".concat(null!==(a=null==e?void 0:e.message)&&void 0!==a?a:e))}},C=(e,t)=>k(s=>({...s,[e]:t})),S=async()=>{c(!0),x("");let e=e=>{let t={};for(let s of e){let e=s.key.trim();e&&(t[e]=function(e){let t=e.trim();if(!t)return"";try{return JSON.parse(t)}catch(t){return e}}(s.text))}return t},a=await (0,n.rd)("/customers/".concat(t.id),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:h.trim()||void 0,aliases:y.split(/[、,,]/).map(e=>e.trim()).filter(Boolean),notes:j,profile:{bd:e(N.bd),op:e(N.op)}})});if(c(!1),!a){x("保存失败,请重试");return}i(!1),s()};return(0,a.jsxs)("section",{className:"mb-4",children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-2",children:[(0,a.jsx)("h3",{className:"text-sm font-medium text-gray-800",children:"公司信息"}),r?null:(0,a.jsx)("button",{type:"button",onClick:()=>{var e,s,a,l;g(t.canonicalName),f((null!==(a=t.aliases)&&void 0!==a?a:[]).join("、")),v(null!==(l=t.notes)&&void 0!==l?l:"");let r=e=>Object.entries(null!=e?e:{}).map(e=>{let[t,s]=e;return{key:t,text:p(s)}});k({bd:r(null===(e=t.profile)||void 0===e?void 0:e.bd),op:r(null===(s=t.profile)||void 0===s?void 0:s.op)}),i(!0),x("")},className:"rounded border border-gray-300 px-2 py-0.5 text-xs text-gray-600 hover:bg-gray-50",children:"编辑"}),d?(0,a.jsx)("span",{className:"text-xs text-red-600",children:d}):null]}),r?(0,a.jsxs)("div",{className:"mb-3 space-y-2 rounded-lg border border-blue-200 bg-blue-50/50 p-3",children:[(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"text-xs text-gray-500",children:"公司名称(改名后旧名自动入别名)"}),(0,a.jsx)("input",{value:h,onChange:e=>g(e.target.value),className:"mt-0.5 w-full rounded border border-gray-300 px-2 py-1 text-sm"})]}),(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"text-xs text-gray-500",children:"别名(顿号/逗号分隔)"}),(0,a.jsx)("input",{value:y,onChange:e=>f(e.target.value),className:"mt-0.5 w-full rounded border border-gray-300 px-2 py-1 text-sm"})]}),(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"text-xs text-gray-500",children:"备注"}),(0,a.jsx)("textarea",{value:j,onChange:e=>v(e.target.value),rows:2,className:"mt-0.5 w-full rounded border border-gray-300 px-2 py-1 text-sm"})]})]}):null,(0,a.jsx)("div",{className:"space-y-3",children:["bd","op"].map(e=>{var s,l;let n=m[e],i=r?N[e]:Object.entries(null!==(l=null===(s=t.profile)||void 0===s?void 0:s[e])&&void 0!==l?l:{}).map(e=>{let[t,s]=e;return{key:t,text:p(s)}});return(0,a.jsxs)("section",{className:"rounded-lg border border-gray-200",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-gray-100 px-3 py-2",children:[(0,a.jsx)("h4",{className:"text-sm font-semibold text-gray-900",children:n.title}),r?null:(0,a.jsx)("button",{type:"button",onClick:()=>void w(e),className:"rounded bg-blue-50 px-2 py-0.5 text-xs text-blue-700 hover:bg-blue-100",children:u===e?"已复制 ✓ 请发给 agent":n.button})]}),0===i.length?(0,a.jsx)("p",{className:"px-3 py-2 text-xs text-gray-400",children:r?"暂无条目,可在下方添加":"尚未调研,点上方「".concat(n.button,"」让 agent 调研")}):(0,a.jsxs)("div",{className:r?"space-y-2 p-3":"divide-y divide-gray-50",children:[i.map((t,s)=>r?(0,a.jsxs)("div",{className:"grid grid-cols-[1fr,2fr,auto] items-start gap-2",children:[(0,a.jsx)("input",{value:t.key,placeholder:"条目名(如:核心业务)",onChange:t=>{let a=[...i];a[s]={...a[s],key:t.target.value},C(e,a)},className:"rounded border border-gray-300 px-2 py-1 text-xs"}),(0,a.jsx)("textarea",{value:t.text,placeholder:"内容(纯文本,或合法 JSON)",rows:3,onChange:t=>{let a=[...i];a[s]={...a[s],text:t.target.value},C(e,a)},className:"w-full rounded border border-gray-300 px-2 py-1 text-xs"}),(0,a.jsx)("button",{type:"button",onClick:()=>C(e,i.filter((e,t)=>t!==s)),className:"rounded border border-red-200 px-2 py-0.5 text-xs text-red-600 hover:bg-red-50",children:"删"})]},s):(0,a.jsxs)("div",{className:"px-3 py-1.5",children:[(0,a.jsx)("div",{className:"text-xs font-medium text-gray-500",children:t.key}),(0,a.jsx)("div",{className:"whitespace-pre-wrap text-sm text-gray-800",children:t.text||"—"})]},t.key)),r?(0,a.jsx)("button",{type:"button",onClick:()=>C(e,[...i,{key:"",text:""}]),className:"rounded border border-dashed border-gray-300 px-2 py-1 text-xs text-gray-500 hover:border-blue-400 hover:text-blue-600",children:"+ 添加条目"}):null]})]},e)})}),r?(0,a.jsxs)("div",{className:"mt-3 flex items-center gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>void S(),disabled:o,className:"rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:o?"保存中…":"保存"}),(0,a.jsx)("button",{type:"button",onClick:()=>i(!1),disabled:o,className:"rounded border border-gray-300 px-3 py-1 text-sm text-gray-600 hover:bg-gray-50 disabled:opacity-50",children:"取消"})]}):null]})}var h=s(5912),g=s(6119),y=s(5777),f=s(3464);function j(e){let{sources:t}=e,s=[{on:t.customer,cls:"bg-amber-100 text-amber-700",label:"客户"},{on:t.parsed,cls:"bg-blue-100 text-blue-700",label:"解析"},{on:t.resume,cls:"bg-green-100 text-green-700",label:"简历"},{on:t.hmhLocal,cls:"bg-purple-100 text-purple-700",label:"本地"}];return(0,a.jsx)("span",{className:"inline-flex flex-wrap gap-1",children:s.filter(e=>e.on).map(e=>(0,a.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat(e.cls),children:e.label},e.label))})}let v=[{key:"customer",label:"客户",cls:"bg-amber-100 text-amber-700"},{key:"parsed",label:"解析",cls:"bg-blue-100 text-blue-700"},{key:"resume",label:"简历",cls:"bg-green-100 text-green-700"},{key:"hmhLocal",label:"本地",cls:"bg-purple-100 text-purple-700"}];function N(){var e,t,s,x,u;let m=(0,r.useRouter)(),p=(0,r.useSearchParams)(),N=p.get("id")||"",k=p.get("q")||"",w=(null!==(t=p.get("oc"))&&void 0!==t?t:"1")!=="0",[C,S]=(0,l.useState)(null),[P,T]=(0,l.useState)(!1),[O,L]=(0,l.useState)(!1),[D,U]=(0,l.useState)(""),[A,E]=(0,l.useState)(!1),[_,B]=(0,l.useState)("profile"),I=p.get("src")||"",J=(0,l.useMemo)(()=>I.split(",").map(e=>e.trim()).filter(Boolean),[I]),[q,M]=(0,l.useState)({customer:0,parsed:0,resume:0,hmhLocal:0}),[H,R]=(0,l.useState)(0),{session:V}=(0,y.nu)(),z=(0,g.B)({deleteUrl:"/customers",label:"公司",onDeleted:()=>F.refresh(),currentUserId:null!==(s=null==V?void 0:V.hmUserId)&&void 0!==s?s:null}),F=(0,f.k)({fetchPage:(0,l.useCallback)(async(e,t)=>{var s,a,l,r;let i=new URLSearchParams;k&&i.set("query",k),w&&i.set("onlyCustomers","1"),J.length&&i.set("sources",J.join(",")),i.set("limit",String(t)),i.set("offset",String(e));let o=await (0,n.rd)("/customers/unified?".concat(i.toString()));return M(null!==(s=null==o?void 0:o.sourceCounts)&&void 0!==s?s:{customer:0,parsed:0,resume:0,hmhLocal:0}),R(null!==(a=null==o?void 0:o.customerCount)&&void 0!==a?a:0),{items:null!==(l=null==o?void 0:o.items)&&void 0!==l?l:[],total:null!==(r=null==o?void 0:o.total)&&void 0!==r?r:0}},[k,w,J]),pageSize:50,deps:[k,w,J]}),X=F.items,Y=F.total,G=F.loading;(0,l.useEffect)(()=>{z.prune(X.map(e=>String(e.id)))},[X,z]);let K=(0,l.useCallback)(e=>{var t,s,a;let l=new URLSearchParams(p.toString());void 0!==e.id&&(e.id?l.set("id",e.id):l.delete("id"));let r=null!==(t=e.q)&&void 0!==t?t:k;r?l.set("q",r):l.delete("q"),(null!==(s=e.oc)&&void 0!==s?s:w)?l.delete("oc"):l.set("oc","0");let n=null!==(a=e.src)&&void 0!==a?a:J;n.length?l.set("src",n.join(",")):l.delete("src"),m.replace("/companies?".concat(l.toString()))},[m,p,k,w,J]);(0,l.useEffect)(()=>{B("profile")},[N]);let Q=(0,l.useCallback)(async()=>{N&&S(await (0,n.rd)("/customers/".concat(N,"/related")))},[N]);(0,l.useEffect)(()=>{if(!N){S(null);return}T(!0),Q().then(()=>T(!1))},[N,Q]);let W=(0,l.useCallback)(async()=>{let e=null==C?void 0:C.companyProfile;if(!(null==e?void 0:e.sourceUrl))return;U("重新适配中…(浏览器编排重跑,稍候)");let t=await (0,n.rd)("/extract/adapter",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e.sourceUrl})});U(t?"已重新适配并入库 ✓":"重新适配失败(需扩展在线且页面可访问),请重试"),t&&await Q(),setTimeout(()=>U(""),6e3)},[null==C?void 0:C.companyProfile,Q]),Z=(0,l.useCallback)(async()=>{let e=null==C?void 0:C.companyProfile;if(e){U("");try{let t=await fetch("".concat((0,n.Ox)(),"/entities/company/").concat(e.id,"/repair-prompt"));if(!t.ok)throw Error("HTTP ".concat(t.status));let s=await t.json();await navigator.clipboard.writeText(s.prompt),E(!0),setTimeout(()=>E(!1),4e3)}catch(e){var t;U("复制失败:".concat(null!==(t=null==e?void 0:e.message)&&void 0!==t?t:e))}}},[null==C?void 0:C.companyProfile]),$=(0,l.useCallback)(async(e,t)=>{L(!0),await (0,n.rd)("/customers/".concat(e),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({isCustomer:t?1:0})}),F.refresh(),S(await (0,n.rd)("/customers/".concat(e,"/related"))),L(!1)},[F]),ee=(0,l.useMemo)(()=>X.map(e=>({id:String(e.id),content:(0,a.jsxs)("div",{className:"flex items-start gap-2",children:[z.checkbox(String(e.id)),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-medium text-gray-900",children:e.canonicalName}),e.activeJobCount>0?(0,a.jsxs)("span",{className:"rounded bg-emerald-100 px-1.5 py-0.5 text-xs text-emerald-700",children:["交付中 ",e.activeJobCount]}):null]}),(0,a.jsx)("div",{className:"mt-0.5",children:(0,a.jsx)(j,{sources:e.sources})}),(0,a.jsxs)("div",{className:"mt-0.5 text-xs text-gray-400",children:[e.jobCaseCount>0?"".concat(e.jobCaseCount," 个职位案件 \xb7 "):"","更新于 ",(0,i.d3)(e.updatedAt)]})]})]})})),[X,z]),et=N?P?(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):C?(0,a.jsxs)("div",{className:"h-full overflow-y-auto p-4",children:[(0,a.jsxs)("div",{className:"mb-1 flex items-center gap-3",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold text-gray-900",children:C.customer.canonicalName}),(0,a.jsx)(j,{sources:null!==(x=C.customer.sources)&&void 0!==x?x:{customer:1===C.customer.isCustomer,parsed:!1,resume:!1,hmhLocal:!1}}),(0,a.jsx)("button",{type:"button",disabled:O,onClick:()=>void $(C.customer.id,1!==C.customer.isCustomer),className:"rounded px-2 py-1 text-xs ".concat(1===C.customer.isCustomer?"bg-amber-100 text-amber-700 hover:bg-amber-200":"bg-gray-100 text-gray-600 hover:bg-gray-200"," disabled:opacity-50"),children:1===C.customer.isCustomer?"✓ 我服务的客户(点击取消)":"标注为我服务的客户"})]}),(null===(e=C.customer.aliases)||void 0===e?void 0:e.length)?(0,a.jsxs)("div",{className:"mb-2 text-xs text-gray-500",children:["别名:",C.customer.aliases.join("、")]}):null,(0,a.jsxs)("div",{className:"mb-4 text-xs text-gray-400",children:["更新于 ",(0,i.d3)(C.customer.updatedAt)]}),C.customer.notes?(0,a.jsxs)("section",{className:"mb-4",children:[(0,a.jsx)("h3",{className:"mb-1 text-sm font-medium text-gray-800",children:"备注"}),(0,a.jsx)("p",{className:"whitespace-pre-wrap text-sm text-gray-700",children:C.customer.notes})]}):null,(0,a.jsx)(d,{customer:{id:C.customer.id,canonicalName:C.customer.canonicalName,aliases:C.customer.aliases}}),C.companyProfile?(0,a.jsxs)("div",{className:"mb-4 flex flex-wrap items-center gap-2 rounded-lg border border-gray-200 bg-gray-50 px-3 py-2",children:[(0,a.jsxs)("span",{className:"text-xs text-gray-500",children:["解析档案:(",C.companyProfile.source,") ",null!==(u=C.companyProfile.name)&&void 0!==u?u:""," \xb7 更新于"," ",(0,i.d3)(C.companyProfile.updatedAt)]}),(0,a.jsx)("button",{type:"button",onClick:()=>void W(),className:"rounded border border-gray-300 bg-white px-2 py-0.5 text-xs text-gray-700 hover:bg-gray-100",children:"重新适配"}),(0,a.jsx)("button",{type:"button",onClick:()=>void Z(),className:"rounded border border-gray-300 bg-white px-2 py-0.5 text-xs text-gray-700 hover:bg-gray-100",children:A?"已复制 ✓ 请发给 agent":"解析有误让agent修复"}),D?(0,a.jsx)("span",{className:"text-xs text-gray-600",children:D}):null]}):null,(0,a.jsx)("div",{className:"mb-2 flex flex-wrap gap-1 border-b border-gray-200",children:[{key:"profile",label:"公司信息"},{key:"jobCases",label:"关联交付职位(".concat(C.jobCases.length,")")},{key:"jobPostings",label:"招聘网站解析职位(".concat(C.jobPostings.length,")")},{key:"talents",label:"相关简历(".concat(C.talents.length,")")},{key:"parseLogs",label:"录制解析(".concat(C.parseLogs.length,")")}].map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>B(e.key),className:"rounded-t px-3 py-1.5 text-sm ".concat(_===e.key?"border-b-2 border-blue-500 font-medium text-blue-600":"text-gray-500 hover:text-gray-700"),children:e.label},e.key))}),"profile"===_?(0,a.jsx)(b,{customer:C.customer,onSaved:()=>void Q()}):null,"jobCases"===_?(0,a.jsx)("section",{className:"mb-4",children:0===C.jobCases.length?(0,a.jsx)("div",{className:"text-sm text-gray-400",children:"暂无交付职位"}):(0,a.jsx)("ul",{className:"space-y-1",children:C.jobCases.map(e=>{var t;return(0,a.jsx)("li",{children:(0,a.jsx)("a",{href:"/jobs?id=".concat(e.id),className:"flex items-start gap-2 rounded border border-gray-200 bg-white px-3 py-2 text-sm hover:border-blue-300",children:(0,a.jsx)(h.dy,{title:function(e){var t,s;let a;let l=(null!==(t=e.folderPath)&&void 0!==t?t:"").split("/").filter(Boolean).filter(e=>!["job","jd","raw"].includes(e));return(a=e.title)&&!["job","jd","raw"].includes(a)?e.title:null!==(s=l.at(-1))&&void 0!==s?s:"案件 #".concat(e.id)}(e),status:e.status,hmhLocal:(null!==(t=e.folderPath)&&void 0!==t?t:"").includes("/local/clients/"),time:e.updatedAt})})},e.id)})})}):null,"jobPostings"===_?(0,a.jsx)("section",{className:"mb-4",children:0===C.jobPostings.length?(0,a.jsx)("div",{className:"text-sm text-gray-400",children:"暂无解析职位"}):(0,a.jsx)("ul",{className:"space-y-1",children:C.jobPostings.map(e=>{var t;return(0,a.jsx)("li",{className:"flex items-start gap-2 rounded border border-gray-200 bg-white px-3 py-2 text-sm",children:(0,a.jsx)(h.rY,{title:null!==(t=e.title)&&void 0!==t?t:"(无标题)",source:e.source,company:e.company,sourceUrl:e.sourceUrl,updatedAt:e.updatedAt})},e.id)})})}):null,"talents"===_?(0,a.jsx)("section",{className:"mb-4",children:0===C.talents.length?(0,a.jsx)("div",{className:"text-sm text-gray-400",children:"暂无相关简历"}):(0,a.jsx)("ul",{className:"space-y-1",children:C.talents.map(e=>{var t;return(0,a.jsx)("li",{children:(0,a.jsx)("a",{href:"/talents?id=".concat(e.id),className:"flex items-start gap-2 rounded border border-gray-200 bg-white px-3 py-2 text-sm hover:border-blue-300",children:(0,a.jsx)(h.oj,{name:null!==(t=e.name)&&void 0!==t?t:"(简历 #".concat(e.id,")"),headline:e.headline,updatedAt:e.updatedAt})})},e.id)})})}):null,"parseLogs"===_?(0,a.jsx)("section",{className:"mb-4",children:0===C.parseLogs.length?(0,a.jsx)("div",{className:"text-sm text-gray-400",children:"暂无解析记录(该公司尚未从网页解析入库)"}):(0,a.jsx)("ul",{className:"space-y-1",children:C.parseLogs.map(e=>(0,a.jsxs)("li",{className:"flex items-center gap-2 rounded border border-gray-200 bg-white px-3 py-2 text-sm",children:[(0,a.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat("ok"===e.status?"bg-emerald-100 text-emerald-700":"bg-gray-100 text-gray-500"),children:e.status}),e.hasSnapshot?(0,a.jsx)("span",{className:"rounded bg-green-50 px-1.5 py-0.5 text-xs text-green-700",children:"有快照"}):null,e.adapterVersion?(0,a.jsxs)("span",{className:"text-xs text-gray-400",children:["adapter ",e.adapterVersion]}):null,(0,a.jsxs)("span",{className:"truncate text-xs text-gray-500",title:e.sourceUrl,children:[e.domain," \xb7 session ",e.sessionId]}),(0,a.jsx)("a",{href:e.sourceUrl,target:"_blank",rel:"noreferrer",className:"ml-auto shrink-0 text-xs text-blue-500 hover:underline",children:"来源"}),(0,a.jsx)("span",{className:"shrink-0 text-xs text-gray-400",children:(0,i.d3)(e.createdAt)})]},e.id))})}):null]}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该公司"}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一家公司查看详情(客户、职位与备注)"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.m,{filterBar:(0,a.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,a.jsx)("input",{type:"text",value:k,onChange:e=>K({q:e.target.value}),placeholder:"搜索公司名/别名…",className:"w-full rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,a.jsxs)("label",{className:"flex cursor-pointer items-center gap-1.5 text-gray-600 hover:text-gray-800",children:[(0,a.jsx)("input",{type:"checkbox",checked:w,onChange:e=>K({oc:e.target.checked}),className:"accent-amber-600"}),"只看我服务的客户",(0,a.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-amber-700",children:H})]}),(0,a.jsx)("span",{className:"text-gray-300",children:"|"}),(0,a.jsx)("span",{className:"text-gray-400",children:"来源:"}),v.map(e=>{let t=J.includes(e.key);return(0,a.jsxs)("button",{type:"button",title:t?"点击取消该来源筛选":"点击按该来源过滤(可多选,同时命中)",onClick:()=>K({src:t?J.filter(t=>t!==e.key):[...J,e.key]}),className:"rounded px-1.5 py-0.5 text-xs transition ".concat(t?"".concat(e.cls," ring-1 ring-current"):"".concat(e.cls," opacity-40 hover:opacity-80")),children:[e.label," ",q[e.key]]},e.key)}),J.length?(0,a.jsx)("button",{type:"button",onClick:()=>K({src:[]}),className:"text-xs text-gray-400 hover:text-gray-600",children:"清除来源筛选"}):null,(0,a.jsxs)("span",{className:"ml-auto text-gray-400",children:["共 ",Y," 家"]})]}),z.bar(ee)]}),listPanel:(0,a.jsx)(c.L,{items:ee,selectedId:N,onSelect:e=>K({id:e}),loading:G,emptyText:w?"暂无符合筛选条件的客户(取消勾选或清除来源筛选可浏览全部)":"暂无公司数据",onLoadMore:F.loadMore,loadingMore:F.loadingMore,exhausted:F.exhausted}),detailPanel:et}),z.modal()]})}function k(){return(0,a.jsx)(l.Suspense,{fallback:(0,a.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,a.jsx)(N,{})})}var w=s(9616);function C(){var e;let[t,s]=(0,l.useState)(""),[r,i]=(0,l.useState)(""),[d,x]=(0,l.useState)(""),[u,m]=(0,l.useState)([]),[p,b]=(0,l.useState)(0),[h,g]=(0,l.useState)(!1),[y,f]=(0,l.useState)(null),[j,v]=(0,l.useState)(null),N=(0,l.useCallback)(async()=>{var e,t;g(!0);let s=new URLSearchParams;r&&s.set("q",r),d&&s.set("touched",d),s.set("limit","200");let a=await (0,n.rd)("/market/companies?".concat(s.toString()));m(null!==(e=null==a?void 0:a.items)&&void 0!==e?e:[]),b(null!==(t=null==a?void 0:a.total)&&void 0!==t?t:0),g(!1)},[r,d]);(0,l.useEffect)(()=>{let e=setTimeout(()=>i(t.trim()),300);return()=>clearTimeout(e)},[t]),(0,l.useEffect)(()=>{N()},[N]),(0,l.useEffect)(()=>{v(null),null!=y&&(0,n.rd)("/market/companies/".concat(y)).then(v)},[y]);let k=(0,l.useMemo)(()=>u.map(e=>({id:String(e.id),content:(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"truncate font-medium text-gray-900",children:e.name}),e.touched?(0,a.jsx)("span",{className:"rounded bg-emerald-100 px-1.5 py-0.5 text-[10px] text-emerald-700",children:"已操作"}):null]}),(0,a.jsxs)("div",{className:"mt-0.5 flex items-center gap-0.5",children:[e.platforms.length?e.platforms.map(e=>(0,a.jsx)(w.v,{platform:e},e)):(0,a.jsx)("span",{className:"text-[10px] text-gray-300",children:"无职位发布数据"}),(0,a.jsxs)("span",{className:"ml-1 text-[10px] text-gray-400",children:["在招 ",e.postingsCount," \xb7 ",e.source]})]})]})})),[u]);return(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 border-b border-amber-200 bg-[color:var(--brand-soft)] px-3 py-1.5",children:[(0,a.jsx)("span",{className:"text-xs font-medium text-[color:var(--brand-strong)]",children:"\uD83E\uDDED 市场公司(BD 视角:目标/对手公司在各平台的发布与操作痕迹)"}),(0,a.jsx)("span",{className:"ml-auto text-[10px] text-gray-400",children:"下方统一列表 = 客户/解析来源维度"})]}),(0,a.jsx)("div",{className:"min-h-0 flex-1",children:(0,a.jsx)(o.m,{filterBar:(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-gray-200 bg-white p-3",children:[(0,a.jsx)("input",{type:"text",value:t,onChange:e=>s(e.target.value),placeholder:"搜索公司名…",className:"w-56 rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),["","1","0"].map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>x(e),className:"rounded px-2 py-1 text-xs ".concat(d===e?"bg-[color:var(--brand-soft)] font-medium text-[color:var(--brand-strong)]":"text-gray-500 hover:bg-gray-100"),children:""===e?"全部":"1"===e?"已操作过":"未操作"},e)),(0,a.jsxs)("span",{className:"ml-auto text-xs text-gray-400",children:["共 ",p," 家"]})]}),listPanel:(0,a.jsx)(c.L,{items:k,selectedId:null!=y?String(y):void 0,onSelect:e=>f(Number(e)),loading:h,emptyText:"暂无市场公司数据"}),detailPanel:y?j?(0,a.jsxs)("div",{className:"h-full overflow-y-auto p-4",children:[(0,a.jsx)("h2",{className:"mb-1 text-lg font-semibold text-gray-900",children:null!==(e=j.profile.name)&&void 0!==e?e:"(未命名)"}),(0,a.jsx)("a",{href:j.profile.sourceUrl,target:"_blank",rel:"noreferrer",className:"mb-4 block truncate text-xs text-blue-600 hover:underline",children:j.profile.sourceUrl}),(0,a.jsxs)("section",{className:"mb-4",children:[(0,a.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:["在招职位(",j.postings.length,")"]}),0===j.postings.length?(0,a.jsx)("div",{className:"text-xs text-gray-400",children:"名下暂无职位发布(解析库 company 字段归一后自动出现)"}):(0,a.jsx)("div",{className:"space-y-1",children:j.postings.map(e=>{var t;return(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded border border-gray-100 px-2 py-1.5 text-sm",children:[(0,a.jsx)(w.v,{platform:e.source}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",children:null!==(t=e.title)&&void 0!==t?t:"(无标题)"}),(0,a.jsx)("a",{href:e.sourceUrl,target:"_blank",rel:"noreferrer",className:"text-xs text-blue-600 hover:underline",children:"打开"})]},e.id)})})]}),(0,a.jsxs)("section",{children:[(0,a.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:["对手公司(同类型在招,",j.peers.length,")"]}),0===j.peers.length?(0,a.jsx)("div",{className:"text-xs text-gray-400",children:"暂无(需要职位标题数据支撑;解析质量修复后自动点亮)"}):(0,a.jsx)("div",{className:"space-y-1",children:j.peers.map(e=>(0,a.jsxs)("button",{type:"button",onClick:()=>f(e.id),className:"flex w-full items-center gap-2 rounded border border-gray-100 px-2 py-1.5 text-left text-sm hover:bg-amber-50",children:[(0,a.jsx)("span",{className:"flex-1 truncate",children:e.name}),(0,a.jsxs)("span",{className:"text-xs text-gray-400",children:["在招 ",e.postingsCount]})]},e.id))})]})]}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"选择左侧公司查看发布与对手"})})})]})}var S=s(8801);function P(){return"bd"===(0,S.mJ)()?(0,a.jsxs)("div",{className:"flex h-full flex-col",children:[(0,a.jsx)("div",{className:"min-h-0 flex-[2] border-b border-gray-200",children:(0,a.jsx)(C,{})}),(0,a.jsx)("div",{className:"min-h-0 flex-[3] overflow-auto",children:(0,a.jsx)(k,{})})]}):(0,a.jsx)(k,{})}}},function(e){e.O(0,[670,542,400,935,744],function(){return e(e.s=1937)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a0b91d50-2038-42a4-af49-6e70d5f38b49",e._sentryDebugIdIdentifier="sentry-dbid-a0b91d50-2038-42a4-af49-6e70d5f38b49")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[290],{4792:function(e,n,t){Promise.resolve().then(t.bind(t,9418))},9418:function(e,n,t){"use strict";t.d(n,{CompanyAdminPage:function(){return i}});var r=t(2835),l=t(635),a=t(2182),s=t(5777);function i(){var e,n;let{sync:t,session:i,utoken:o,refresh:d}=(0,s.nu)(),c=(0,s.cp)(t),u=(0,s.Cd)(t,c),m=null!==(n=null===(e=(0,s.aG)(t).find(e=>e.tenantId===c))||void 0===e?void 0:e.name)&&void 0!==n?n:"",[x,f]=(0,l.useState)([]),[h,y]=(0,l.useState)([]),[b,p]=(0,l.useState)(!1),[g,v]=(0,l.useState)(null),[j,w]=(0,l.useState)(null),[N,I]=(0,l.useState)(null),[k,E]=(0,l.useState)(null),[U,S]=(0,l.useState)(null),T=(0,l.useCallback)((e,n)=>{let t=new Headers(null==n?void 0:n.headers);return t.set("Content-Type","application/json"),o&&t.set("Authorization","UTOKEN ".concat(o)),fetch("".concat((0,s.tQ)()).concat(e),{...n,headers:t})},[o]),C=(0,l.useCallback)(async()=>{if(c){p(!0),v(null);try{var e,n;let[t,r]=await Promise.all([T("/company/".concat(c,"/applications?status=pending")),T("/company/".concat(c,"/members"))]);if(!t.ok||!r.ok){v("加载失败(HTTP ".concat(t.status,"/").concat(r.status,")"));return}f(null!==(e=(await t.json()).items)&&void 0!==e?e:[]),y(null!==(n=(await r.json()).items)&&void 0!==n?n:[])}finally{p(!1)}}},[c,T]);(0,l.useEffect)(()=>{C()},[C]);let _=(0,l.useCallback)(async(e,n,t)=>{let r=await T(e,{method:"POST",body:JSON.stringify(n)}),l=await r.json().catch(()=>null);if(r.ok)return t(),!0;if(401===r.status){var d;return v("登录已过期,请在弹窗中重新登录;登录后自动继续刚才的操作"),(0,a.jr)({message:(null==l?void 0:l.message)||"登录已过期,请重新登录",oldUserId:null!==(d=null==i?void 0:i.hmUserId)&&void 0!==d?d:null,retry:async()=>{var r;let l=new Headers({"Content-Type":"application/json"}),a=null!==(r=(0,s.Xc)())&&void 0!==r?r:o;a&&l.set("Authorization","UTOKEN ".concat(a));let i=await fetch("".concat((0,s.tQ)()).concat(e),{method:"POST",headers:l,body:JSON.stringify(n)}),d=await i.json().catch(()=>null);return i.ok?(t(),!0):(v((null==d?void 0:d.message)||"操作失败(HTTP ".concat(i.status,")")),!1)}}),!1}return v((null==l?void 0:l.message)||"操作失败(HTTP ".concat(r.status,")")),!1},[T,null==i?void 0:i.hmUserId,o]),A=async(e,n)=>{I(e.id),v(null),w(null);try{await _("/company/applications/".concat(e.id,"/decide"),{action:n},()=>{w("approve"===n?"已通过 ".concat(e.email," 的加入申请"):"已拒绝 ".concat(e.email," 的申请"))})&&(await C(),await d())}finally{I(null)}},O=async(e,n)=>{E(e.hmUserId),v(null),w(null);try{await _("/company/".concat(c,"/admins"),{hmUserId:e.hmUserId,isAdmin:n},()=>w(n?"已设 ".concat(e.email," 为管理员"):"已取消 ".concat(e.email," 的管理员")))&&(await C(),await d())}finally{E(null)}},P=async e=>{E(e.hmUserId),v(null),w(null);try{await _("/company/".concat(c,"/transfer-ownership"),{hmUserId:e.hmUserId},()=>w("公司归属已转移给 ".concat(e.email,",你已成为管理员")))&&(await C(),await d())}finally{E(null),S(null)}};return c?"owner"!==u&&"admin"!==u?(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-gray-400",children:"仅公司归属者/管理员可访问企业管理"}):(0,r.jsxs)("div",{className:"h-full overflow-auto p-6",children:[(0,r.jsxs)("h2",{className:"mb-1 text-lg font-semibold text-gray-900",children:["企业管理",(0,r.jsx)("span",{className:"ml-2 text-sm font-normal text-gray-400",children:m}),(0,r.jsx)("span",{className:"ml-2 text-xs font-normal text-amber-600",children:"owner"===u?"归属者":"管理员"})]}),(0,r.jsx)("p",{className:"mb-5 text-xs text-gray-400",children:"审批加入申请、配置管理员、转移公司归属;创建者默认是归属者(管理员)"}),g&&(0,r.jsx)("div",{className:"mb-3 rounded-md bg-red-50 px-3 py-2 text-xs text-red-600",children:g}),j&&(0,r.jsx)("div",{className:"mb-3 rounded-md bg-green-50 px-3 py-2 text-xs text-green-600",children:j}),(0,r.jsxs)("section",{className:"mb-8",children:[(0,r.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-700",children:["待审批申请",x.length>0&&(0,r.jsx)("span",{className:"ml-2 rounded-full bg-red-100 px-1.5 text-xs text-red-600",children:x.length})]}),b?(0,r.jsx)("div",{className:"rounded-md border border-dashed border-gray-200 px-3 py-6 text-center text-xs text-gray-400",children:"加载中…"}):0===x.length?(0,r.jsx)("div",{className:"rounded-md border border-dashed border-gray-200 px-3 py-6 text-center text-xs text-gray-400",children:"暂无待审批申请"}):(0,r.jsx)("div",{className:"space-y-2",children:x.map(e=>(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-gray-200 bg-white px-4 py-3",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("div",{className:"truncate text-sm text-gray-800",children:e.email}),(0,r.jsxs)("div",{className:"text-xs text-gray-400",children:[new Date(e.createdAt).toLocaleString("zh-CN"),e.message?" \xb7 ".concat(e.message):""]})]}),(0,r.jsxs)("div",{className:"flex shrink-0 gap-2",children:[(0,r.jsx)("button",{onClick:()=>A(e,"approve"),disabled:N===e.id,className:"rounded-md bg-blue-600 px-3 py-1 text-xs text-white hover:bg-blue-700 disabled:opacity-50",children:N===e.id?"处理中…":"通过"}),(0,r.jsx)("button",{onClick:()=>A(e,"reject"),disabled:N===e.id,className:"rounded-md border border-gray-200 px-3 py-1 text-xs text-gray-500 hover:bg-gray-50 disabled:opacity-50",children:"拒绝"})]})]},e.id))})]}),(0,r.jsxs)("section",{children:[(0,r.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-700",children:["成员(",h.length,")"]}),(0,r.jsx)("div",{className:"overflow-hidden rounded-lg border border-gray-200 bg-white",children:h.map((e,n)=>(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3 px-4 py-2.5 ".concat(n>0?"border-t border-gray-100":""),children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("span",{className:"truncate text-sm text-gray-800",children:e.email}),(0,r.jsxs)("span",{className:"ml-2 text-xs text-gray-400",children:[new Date(e.joinedAt).toLocaleDateString("zh-CN")," 加入"]})]}),(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:["owner"===e.role&&(0,r.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-xs text-amber-700",children:"归属者"}),"admin"===e.role&&(0,r.jsx)("span",{className:"rounded bg-blue-100 px-1.5 py-0.5 text-xs text-blue-700",children:"管理员"}),"owner"===u&&"owner"!==e.role&&(0,r.jsxs)(r.Fragment,{children:["member"===e.role?(0,r.jsx)("button",{onClick:()=>O(e,!0),disabled:k===e.hmUserId,className:"rounded-md border border-gray-200 px-2 py-0.5 text-xs text-gray-500 hover:bg-gray-50 disabled:opacity-50",children:"设为管理员"}):(0,r.jsx)("button",{onClick:()=>O(e,!1),disabled:k===e.hmUserId,className:"rounded-md border border-gray-200 px-2 py-0.5 text-xs text-gray-500 hover:bg-gray-50 disabled:opacity-50",children:"取消管理员"}),U===e.hmUserId?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{onClick:()=>P(e),disabled:k===e.hmUserId,className:"rounded-md bg-amber-600 px-2 py-0.5 text-xs text-white hover:bg-amber-700 disabled:opacity-50",children:"确认转移给TA"}),(0,r.jsx)("button",{onClick:()=>S(null),className:"rounded-md border border-gray-200 px-2 py-0.5 text-xs text-gray-400",children:"取消"})]}):(0,r.jsx)("button",{onClick:()=>S(e.hmUserId),className:"rounded-md border border-amber-200 px-2 py-0.5 text-xs text-amber-600 hover:bg-amber-50",children:"转移归属"})]})]})]},e.hmUserId))}),"owner"===u&&(0,r.jsx)("p",{className:"mt-2 text-xs text-gray-400",children:"转移归属后你将成为管理员,对方成为归属者(归属权即公司归属,可随时再转)"})]})]}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-gray-400",children:"尚未选择公司——在左下角切换到公司后再进入企业管理"})}},5777:function(e,n,t){"use strict";t.d(n,{Cd:function(){return w},Xc:function(){return I},aG:function(){return v},cp:function(){return j},nu:function(){return g},tQ:function(){return N}});var r=t(635),l=t(4431),a=t(7002),s=t(529);let i=null,o=null,d=null,c=new Set;function u(){c.forEach(e=>e())}function m(e){let n=new Headers,t=(0,a.Xc)();return t&&n.set("Authorization","UTOKEN ".concat(t)),(0,l.rd)(e,{headers:n})}async function x(){let[e,n]=await Promise.all([(0,l.rd)("/auth/session"),m("/datasync/state")]),t=(null==e?void 0:e.loggedIn)&&e.token?e.token:null,r=null!=n?n:null;if(!r&&e&&t&&t!==(0,a.Xc)()?((0,a.GK)(t),r=await m("/datasync/state")):(0,a.GK)(t),!e&&!r){i=i?{...i,loadError:"本地服务无响应"}:{session:null,sync:null,utoken:(0,a.Xc)(),loadError:"本地服务无响应",refresh:f},u();return}i={session:null!=e?e:{loggedIn:!1},sync:r,utoken:(0,a.Xc)(),loadError:null,refresh:f},u()}function f(){return o||(o=x().finally(()=>{o=null}))}function h(e){return c.add(e),1===c.size&&(f(),d=setInterval(()=>void f(),6e4)),()=>{c.delete(e),0===c.size&&d&&(clearInterval(d),d=null)}}let y={session:null,sync:null,utoken:null,loadError:null,refresh:f};function b(){return null!=i?i:y}function p(){return b()}function g(){return(0,r.useSyncExternalStore)(h,b,p)}function v(e){var n;return(null!==(n=null==e?void 0:e.memberships)&&void 0!==n?n:[]).filter(e=>!e.isPersonal&&!e.leftAt)}function j(e){var n,t;let r=null!==(n=null==e?void 0:e.activeTenantId)&&void 0!==n?n:null;if(null==r)return null;let l=(null!==(t=null==e?void 0:e.memberships)&&void 0!==t?t:[]).find(e=>e.tenantId===r&&!e.leftAt);return!l||l.isPersonal?null:r}function w(e,n){var t,r;if(!n)return null;let l=(null!==(t=null==e?void 0:e.memberships)&&void 0!==t?t:[]).find(e=>e.tenantId===n&&!e.leftAt&&!e.isPersonal);return null!==(r=null==l?void 0:l.role)&&void 0!==r?r:null}function N(){return s.env.NEXT_PUBLIC_HUNTER_MATE_SERVER_URL||""}function I(){return(0,a.Xc)()}},2182:function(e,n,t){"use strict";t.d(n,{H7:function(){return c},jr:function(){return s},mn:function(){return d},nk:function(){return o},qd:function(){return i}});let r=null,l=new Set;function a(){l.forEach(e=>e())}function s(e){r=e,a()}function i(){r&&(r=null,a())}function o(){return r}function d(e){return l.add(e),()=>l.delete(e)}function c(e){if(!e)return null;try{var n,t,r,l,a;let s=e.split(".")[1],i=JSON.parse(decodeURIComponent(escape(atob(s.replace(/-/g,"+").replace(/_/g,"/"))))),o=null!==(a=null!==(l=null!==(r=null==i?void 0:null===(n=i.data)||void 0===n?void 0:n._id)&&void 0!==r?r:null==i?void 0:null===(t=i.data)||void 0===t?void 0:t.id)&&void 0!==l?l:null==i?void 0:i.sub)&&void 0!==a?a:null;return"number"==typeof o?o:null}catch(e){return null}}},4431:function(e,n,t){"use strict";t.d(n,{Ox:function(){return a},rd:function(){return o},uz:function(){return d}});var r=t(7002),l=t(529);function a(){return l.env.HUNTER_MATE_SERVER_URL||""}let s=a();function i(e){let n=(0,r.Xc)();if(!n)return e;let t=new Headers(null==e?void 0:e.headers);return t.has("Authorization")||t.set("Authorization","UTOKEN ".concat(n)),{...e,headers:t}}async function o(e,n){try{let t=await fetch("".concat(s).concat(e),{cache:"no-store",...i(n)});if(!t.ok)return null;return await t.json()}catch(e){return null}}async function d(e,n){try{let t=await fetch("".concat(s).concat(e),i({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=n?JSON.stringify(n):void 0}));if(!t.ok)return null;return await t.json()}catch(e){return null}}},7002:function(e,n,t){"use strict";t.d(n,{GK:function(){return s},Lc:function(){return i},Xc:function(){return a}});let r=null,l=new Set;function a(){return r}function s(e){e!==r&&(r=e,l.forEach(e=>e()))}function i(e){return l.add(e),()=>{l.delete(e)}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=4792)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e63aec82-621c-4850-9b20-f1911a51a963",e._sentryDebugIdIdentifier="sentry-dbid-e63aec82-621c-4850-9b20-f1911a51a963")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[303],{778:function(e,n,t){Promise.resolve().then(t.bind(t,3463))},7473:function(e,n,t){"use strict";var a=t(8321);t.o(a,"useParams")&&t.d(n,{useParams:function(){return a.useParams}}),t.o(a,"usePathname")&&t.d(n,{usePathname:function(){return a.usePathname}}),t.o(a,"useRouter")&&t.d(n,{useRouter:function(){return a.useRouter}}),t.o(a,"useSearchParams")&&t.d(n,{useSearchParams:function(){return a.useSearchParams}})},3463:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return o}});var a=t(2835),s=t(635),r=t(7473);let u={talent:"/talents",job:"/jobs",company:"/companies"};function c(){let e=(0,r.useSearchParams)();return(0,s.useEffect)(()=>{let n=e.get("type")||"talent",t=e.get("id"),a=u[n]||"/talents",s=t?"?id=".concat(encodeURIComponent(t)):"";window.location.replace("".concat(a).concat(s))},[e]),(0,a.jsx)("div",{className:"p-6 text-gray-500",children:"跳转中…"})}function o(){return(0,a.jsx)(s.Suspense,{fallback:(0,a.jsx)("div",{className:"p-6 text-gray-500",children:"跳转中…"}),children:(0,a.jsx)(c,{})})}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=778)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="80086fbc-44f5-45dd-a21b-6bfd72ba3582",e._sentryDebugIdIdentifier="sentry-dbid-80086fbc-44f5-45dd-a21b-6bfd72ba3582")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[109],{4843:function(e,t,s){Promise.resolve().then(s.bind(s,5311))},5311:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return _}});var a=s(2835),l=s(635),n=s(852),r=s(7473),d=s(4431),i=s(8448),c=s(4518),o=s(3718),x=s(6777),u=s(5912),m=s(6119),h=s(3464),b=s(5777),p=s(7002);let g=[{hours:24,label:"1 天"},{hours:72,label:"3 天"},{hours:168,label:"7 天"},{hours:720,label:"30 天"}];function y(e){var t;let s,{jobCaseId:n,onClose:r}=e,[i,c]=(0,l.useState)(null),[o,x]=(0,l.useState)("tenant"),[u,m]=(0,l.useState)(new Set),[h,b]=(0,l.useState)(168),[y,v]=(0,l.useState)(""),[j,f]=(0,l.useState)(!1),[N,k]=(0,l.useState)(null),[w,S]=(0,l.useState)(null),[C,I]=(0,l.useState)(!1);async function T(){f(!0),k(null);let e=await (0,d.uz)("/shares",{jobCaseId:n,scope:"users"===o?{type:"users",hmUserIds:Array.from(u)}:{type:"tenant"},ttlHours:h,note:y.trim()||void 0});if(f(!1),!(null==e?void 0:e.token)){k("创建失败:未登录云端账号 / 云服务不可达 / 该职位未同步上云");return}S(e)}(0,l.useEffect)(()=>{let e=()=>void(0,d.rd)("/team/members").then(e=>{c(Array.isArray(null==e?void 0:e.items)?e.items:[])});return e(),(0,p.Lc)(e)},[]);let P=w?(t=w.urlPath,"".concat(window.location.origin).concat(t)):null;return s=null===i?(0,a.jsx)("div",{className:"text-xs text-gray-400",children:"加载同事目录…(未登录云端账号时为空)"}):i.length?i.map(e=>(0,a.jsxs)("label",{className:"flex items-center gap-2 py-1 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:u.has(e.hmUserId),onChange:t=>{let s=new Set(u);t.target.checked?s.add(e.hmUserId):s.delete(e.hmUserId),m(s)}}),(0,a.jsx)("span",{children:e.name}),(0,a.jsx)("span",{className:"text-xs text-gray-400",children:e.email})]},e.hmUserId)):(0,a.jsx)("div",{className:"text-xs text-gray-400",children:"暂无公司租户同事"}),(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:r,children:(0,a.jsxs)("div",{className:"w-[520px] max-w-[92vw] rounded-lg bg-white p-5 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,a.jsxs)("h3",{className:"text-base font-semibold",children:["分享职位推荐(职位 #",n,")"]}),(0,a.jsx)("button",{onClick:r,className:"text-gray-400 hover:text-gray-600",children:"✕"})]}),w?(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"mb-2 rounded bg-emerald-50 px-3 py-2 text-sm text-emerald-800",children:["分享已创建,有效期至 ",new Date(w.expiresAt).toLocaleString()]}),(0,a.jsx)("div",{className:"mb-1 text-xs text-gray-500",children:"把链接发给同事(对方在自己本地 hm 打开):"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{readOnly:!0,value:null!=P?P:"",className:"flex-1 rounded border border-gray-300 px-2 py-1.5 font-mono text-xs",onFocus:e=>e.target.select()}),(0,a.jsx)("button",{onClick:()=>{P&&navigator.clipboard.writeText(P).then(()=>{I(!0),setTimeout(()=>I(!1),2500)})},className:"rounded bg-blue-600 px-3 py-1.5 text-xs text-white hover:bg-blue-700",children:C?"已复制 ✓":"复制"})]}),(0,a.jsx)("div",{className:"mt-4 text-right",children:(0,a.jsx)("button",{onClick:r,className:"rounded border border-gray-300 px-4 py-1.5 text-sm hover:bg-gray-50",children:"完成"})})]}):(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-1 text-xs font-medium text-gray-600",children:"分享范围"}),(0,a.jsxs)("label",{className:"mr-4 text-sm",children:[(0,a.jsx)("input",{type:"radio",checked:"tenant"===o,onChange:()=>x("tenant")})," 租户内所有同事"]}),(0,a.jsxs)("label",{className:"text-sm",children:[(0,a.jsx)("input",{type:"radio",checked:"users"===o,onChange:()=>x("users")})," 指定同事"]}),"users"===o?(0,a.jsx)("div",{className:"mt-2 max-h-36 overflow-auto rounded border border-gray-200 p-2",children:s}):null]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-1 text-xs font-medium text-gray-600",children:"有效期"}),(0,a.jsx)("select",{value:h,onChange:e=>b(Number(e.target.value)),className:"rounded border border-gray-300 px-2 py-1 text-sm",children:g.map(e=>(0,a.jsx)("option",{value:e.hours,children:e.label},e.hours))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-1 text-xs font-medium text-gray-600",children:"备注(可选,给查看者的说明)"}),(0,a.jsx)("input",{value:y,onChange:e=>v(e.target.value),maxLength:200,placeholder:"例如:这 10 位是本周重点推荐,请 op 优先跟进",className:"w-full rounded border border-gray-300 px-2 py-1.5 text-sm"})]}),N?(0,a.jsx)("div",{className:"text-xs text-red-600",children:N}):null,(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-1",children:[(0,a.jsx)("button",{onClick:r,className:"rounded border border-gray-300 px-4 py-1.5 text-sm hover:bg-gray-50",children:"取消"}),(0,a.jsx)("button",{onClick:()=>void T(),disabled:j||"users"===o&&!u.size,className:"rounded bg-blue-600 px-4 py-1.5 text-sm text-white hover:bg-blue-700 disabled:opacity-40",children:j?"创建中…":"生成分享链接"})]})]})]})})}let v=null;function j(e,t,s){return(0,d.rd)(e,{method:t,headers:{"Content-Type":"application/json"},body:null!=s?JSON.stringify(s):void 0})}let f={create:"建档",move:"阶段迁移",form:"保存表单",invite:"记录邀请",invite_approved:"批准邀请",note:"备注",delete:"移出流程"};function N(e){var t;let{jobCaseId:s}=e,[n,r]=(0,l.useState)(v),[c,o]=(0,l.useState)("recommended"),[x,m]=(0,l.useState)([]),[h,b]=(0,l.useState)({}),[g,N]=(0,l.useState)(null),[k,w]=(0,l.useState)({}),[S,C]=(0,l.useState)(!1),[I,T]=(0,l.useState)(new Set),[P,E]=(0,l.useState)(new Set),[O,A]=(0,l.useState)(null),[z,D]=(0,l.useState)(!1),[L,_]=(0,l.useState)([]),[U,F]=(0,l.useState)(s),[M,B]=(0,l.useState)(""),[q,R]=(0,l.useState)(!1),[J,H]=function(){let[e,t]=(0,l.useState)(null);return[e,(0,l.useCallback)((e,s)=>{navigator.clipboard.writeText(s).then(()=>{t(e),setTimeout(()=>t(t=>t===e?null:t),2500)})},[])]}(),[Y,G]=(0,l.useState)(!1);(0,l.useEffect)(()=>{if(v)return;let e=!0,t=()=>{v||(0,d.rd)("/recommendations/meta").then(t=>{t&&e&&(v=t,r(t))})};t();let s=(0,p.Lc)(t);return()=>{e=!1,s()}},[n]);let K=(0,l.useMemo)(()=>{var e;return null!==(e=null==n?void 0:n.stages.map(e=>e.key))&&void 0!==e?e:[]},[n]),Q=(0,l.useCallback)(async()=>{C(!0);let e=await (0,d.rd)("/job-cases/".concat(s,"/recommendations"));if(e){var t;m(e.items),b(null!==(t=e.counts)&&void 0!==t?t:{}),T(new Set)}C(!1)},[s]);(0,l.useEffect)(()=>{o("recommended"),A(null),N(null),Q()},[Q]),(0,l.useEffect)(()=>{"matched"===c&&null===g&&(async()=>{var e,t;let[a,l]=await Promise.all([(0,d.rd)("/matching/jobs/".concat(s,"/talents")),(0,d.rd)("/talent-portraits")]);N(null!=a?a:[]);let n={};for(let s of null!=l?l:[])n[s.id]=null!==(t=null===(e=s.identity)||void 0===e?void 0:e.displayName)&&void 0!==t?t:"(未命名)";w(n)})()},[c,g,s]);let V=(0,l.useCallback)(async(e,t)=>{let s=await t();(null==s?void 0:s.prompt)&&H(e,s.prompt)},[H]),W=(e,t,s)=>{let a=new Set(e);a.has(t)?a.delete(t):a.add(t),s(a)},X=async()=>{M&&(R(!0),await j("/recommendations/batch-move","POST",{ids:Array.from(I),stage:M,jobCaseId:U}),R(!1),D(!1),await Q())},Z=async()=>{for(let e of(R(!0),Array.from(P)))await j("/recommendations/adopt","POST",{matchId:e});R(!1),E(new Set),await Q()},$=async()=>{if(F(s),B(""),D(!0),!L.length){var e;let t=await (0,d.rd)("/job-cases?limit=200");_(null!==(e=null==t?void 0:t.items)&&void 0!==e?e:[])}};if(!n)return(0,a.jsx)("div",{className:"p-4 text-sm text-gray-400",children:"加载推荐流水线定义…"});let ee=[...n.stages.map(e=>{var t;return{key:e.key,label:"".concat(e.label,"(").concat(null!==(t=h[e.key])&&void 0!==t?t:0,")")}})];ee.splice(1,0,{key:"matched",label:"匹配人才(".concat(null!==(t=null==g?void 0:g.length)&&void 0!==t?t:"…",")")});let et=e=>{var t;return e?null!==(t=n.stageLabels[e])&&void 0!==t?t:e:""};return(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"mb-3 flex flex-wrap gap-1 border-b border-gray-200 pb-2",children:ee.map(e=>(0,a.jsx)("button",{onClick:()=>{o(e.key),A(null)},className:"rounded px-2.5 py-1 text-xs ".concat(c===e.key?"bg-blue-100 font-medium text-blue-800":"text-gray-500 hover:bg-gray-100"),children:e.label},e.key))}),(0,a.jsxs)("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:["recommended"===c?(0,a.jsx)("button",{onClick:()=>void V("recommend",()=>(0,d.rd)("/job-cases/".concat(s,"/recommend-prompt"))),className:"rounded bg-amber-600 px-3 py-1 text-xs text-white hover:bg-amber-700",children:"recommend"===J?"已复制 ✓ 请发给 agent":"再推荐(复制 prompt)"}):null,"matched"===c?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{onClick:()=>void V("match",()=>(0,d.rd)("/job-cases/".concat(s,"/match-prompt"))),className:"rounded bg-amber-600 px-3 py-1 text-xs text-white hover:bg-amber-700",children:"match"===J?"已复制 ✓ 请发给 agent":"打分分析推荐(复制 prompt)"}),(0,a.jsxs)("button",{onClick:()=>void Z(),disabled:!P.size||q,className:"rounded bg-emerald-600 px-3 py-1 text-xs text-white hover:bg-emerald-700 disabled:opacity-40",children:["采纳为推荐(",P.size,")"]})]}):null,"pending_invite"===c&&I.size?(0,a.jsx)("button",{onClick:()=>void V("invite",()=>j("/recommendations/invite-prompt","POST",{ids:Array.from(I)})),className:"rounded bg-sky-600 px-3 py-1 text-xs text-white hover:bg-sky-700",children:"invite"===J?"已复制 ✓ 请发给 agent":"发送邀请(".concat(I.size,")")}):null,"invited"===c&&I.size?(0,a.jsx)("button",{onClick:()=>void V("reply",()=>j("/recommendations/reply-check-prompt","POST",{ids:Array.from(I)})),className:"rounded bg-sky-600 px-3 py-1 text-xs text-white hover:bg-sky-700",children:"reply"===J?"已复制 ✓ 请发给 agent":"检查回复(".concat(I.size,")")}):null,"matched"!==c&&I.size?(0,a.jsxs)("button",{onClick:()=>void $(),className:"rounded border border-gray-300 px-3 py-1 text-xs text-gray-700 hover:bg-gray-50",children:["移动到…(",I.size,")"]}):null,I.size||P.size?(0,a.jsx)("button",{onClick:()=>{T(new Set),E(new Set)},className:"text-xs text-gray-400 hover:text-gray-600",children:"清除选择"}):null,(0,a.jsx)("button",{onClick:()=>G(!0),className:"ml-auto rounded bg-violet-600 px-3 py-1 text-xs text-white hover:bg-violet-700",children:"分享给同事"})]}),Y?(0,a.jsx)(y,{jobCaseId:s,onClose:()=>G(!1)}):null,S?(0,a.jsx)("div",{className:"py-8 text-center text-sm text-gray-400",children:"加载中…"}):"matched"===c?(0,a.jsx)(function(e){return null===e.matches?(0,a.jsx)("div",{className:"py-8 text-center text-sm text-gray-400",children:"计算匹配中…"}):e.matches.length?(0,a.jsx)("div",{className:"space-y-2",children:e.matches.map(t=>{var s,l,n,r,d,i;return(0,a.jsxs)("div",{className:"rounded border border-gray-200 bg-white p-2",children:[(0,a.jsxs)("div",{className:"flex items-start gap-2",children:[(0,a.jsx)("input",{type:"checkbox",checked:e.selected.has(t.id),onChange:()=>e.onToggle(t.id),className:"mt-1"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-medium text-gray-900",children:null!==(r=e.names[t.portraitId])&&void 0!==r?r:t.portraitId}),(0,a.jsxs)("span",{className:"rounded bg-emerald-100 px-1.5 py-0.5 text-xs text-emerald-700",children:[null!==(d=null===(s=t.scores)||void 0===s?void 0:s.overall)&&void 0!==d?d:"?","分"]}),t.humanFeedback?(0,a.jsx)("span",{className:"rounded bg-purple-100 px-1.5 py-0.5 text-xs text-purple-700",children:t.humanFeedback.isRecommended?"已采纳":"已排除"}):null]}),(0,a.jsx)("button",{onClick:()=>e.onExpand(t.id),className:"mt-0.5 text-xs text-blue-500 hover:underline",children:e.expanded===t.id?"收起":"AI 推荐理由"})]})]}),e.expanded===t.id?(0,a.jsxs)("div",{className:"mt-2 border-t border-gray-100 pt-2 text-xs text-gray-600",children:[null!==(i=null===(l=t.recommendation)||void 0===l?void 0:l.aiReason)&&void 0!==i?i:"(无推荐理由)",(null===(n=t.humanFeedback)||void 0===n?void 0:n.reason)?(0,a.jsxs)("div",{className:"mt-1 text-purple-600",children:["人工反馈:",t.humanFeedback.reason]}):null]}):null]},t.id)})}):(0,a.jsx)("div",{className:"py-8 text-center text-sm text-gray-400",children:"暂无人岗匹配数据"})},{matches:g,names:k,selected:P,onToggle:e=>W(P,e,E),expanded:O,onExpand:e=>A(O===e?null:e)}):0===x.length?(0,a.jsxs)("div",{className:"py-8 text-center text-sm text-gray-400",children:["本阶段暂无人选","recommended"===c?",点上方「再推荐」让 agent 寻访":"","pending_invite"===c?",可在人才详情「加入推荐流程」":""]}):(0,a.jsx)("div",{className:"space-y-2",children:x.map(e=>(0,a.jsx)(es,{row:e,meta:n,checked:I.has(e.id),onToggle:()=>W(I,e.id,T),expanded:O===e.id,onExpand:()=>A(O===e.id?null:e.id),onChanged:Q},e.id))}),z?(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",children:(0,a.jsxs)("div",{className:"w-96 rounded-lg bg-white p-4 shadow-xl",children:[(0,a.jsxs)("h3",{className:"mb-3 text-sm font-semibold text-gray-900",children:["批量移动(",I.size," 人)"]}),(0,a.jsxs)("label",{className:"mb-2 block text-xs text-gray-500",children:["目标职位",(0,a.jsxs)("select",{value:U,onChange:e=>F(Number(e.target.value)),className:"mt-1 w-full rounded border border-gray-300 px-2 py-1.5 text-sm",children:[L.map(e=>(0,a.jsx)("option",{value:e.id,children:e.title||e.externalId},e.id)),L.find(e=>e.id===s)?null:(0,a.jsx)("option",{value:s,children:"当前职位"})]})]}),(0,a.jsxs)("label",{className:"mb-3 block text-xs text-gray-500",children:["目标阶段(当前职位的当前阶段不可选)",(0,a.jsxs)("select",{value:M,onChange:e=>B(e.target.value),className:"mt-1 w-full rounded border border-gray-300 px-2 py-1.5 text-sm",children:[(0,a.jsx)("option",{value:"",children:"选择阶段…"}),K.filter(e=>!(U===s&&e===c)).map(e=>(0,a.jsx)("option",{value:e,children:et(e)},e))]})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)("button",{onClick:()=>D(!1),className:"rounded border border-gray-300 px-3 py-1 text-xs text-gray-600",children:"取消"}),(0,a.jsx)("button",{onClick:()=>void X(),disabled:!M||q,className:"rounded bg-blue-600 px-3 py-1 text-xs text-white hover:bg-blue-700 disabled:opacity-40",children:q?"移动中…":"确认移动"})]})]})}):null]});function es(e){var t,s,n,r,d,c,o,x,m,h,b,p,g,y,v,N,k,w;let S=e.row,C=null!==(m=e.meta.formTemplates[S.stage])&&void 0!==m?m:[],[I,T]=(0,l.useState)(!1),[P,E]=(0,l.useState)({}),[O,A]=(0,l.useState)(!1),z=async()=>{var t;let s={},a=null!==(t=S.formData)&&void 0!==t?t:{};for(let[e,t]of Object.entries(P)){let l="string"==typeof t?t.trim():t;""===l||void 0===l?e in a&&(s[e]=null):a[e]!==l&&(s[e]=l)}for(let e of Object.keys(a))e in P||(s[e]=null);await j("/recommendations/".concat(S.id),"PATCH",Object.keys(s).length?{formData:s}:{}),T(!1),await e.onChanged()};return(0,a.jsxs)("div",{className:"rounded border border-gray-200 bg-white p-2",children:[(0,a.jsxs)("div",{className:"flex items-start gap-2",children:[(0,a.jsx)("input",{type:"checkbox",checked:e.checked,onChange:e.onToggle,className:"mt-1"}),(0,a.jsx)("button",{className:"min-w-0 flex-1 text-left",onClick:e.onExpand,children:(0,a.jsx)(u.h5,{name:null!==(h=null===(t=S.snapshot)||void 0===t?void 0:t.name)&&void 0!==h?h:"(未命名)",headline:null!==(b=null===(s=S.scores)||void 0===s?void 0:s.aiReason)&&void 0!==b?b:null===(n=S.snapshot)||void 0===n?void 0:n.headline,overall:null!==(p=null===(d=S.scores)||void 0===d?void 0:null===(r=d.dimensions)||void 0===r?void 0:r.overall)&&void 0!==p?p:null,invitationChannel:null!==(g=null===(c=S.invitation)||void 0===c?void 0:c.channel)&&void 0!==g?g:null,updatedAt:S.updatedAt})}),(0,a.jsx)("button",{onClick:()=>A(!0),className:"mt-1 text-xs text-gray-300 hover:text-red-500",title:"移出流程",children:"\xd7"})]}),e.expanded?(0,a.jsxs)("div",{className:"mt-2 space-y-3 border-t border-gray-100 pt-2",children:[(0,a.jsxs)("section",{children:[(0,a.jsxs)("div",{className:"mb-1 flex items-center justify-between",children:[(0,a.jsxs)("h4",{className:"text-xs font-medium text-gray-700",children:[et(S.stage),"\xb7阶段表单"]}),I?(0,a.jsxs)("span",{className:"flex gap-2",children:[(0,a.jsx)("button",{onClick:()=>void z(),className:"rounded bg-blue-600 px-2 py-0.5 text-xs text-white",children:"保存"}),(0,a.jsx)("button",{onClick:()=>T(!1),className:"rounded border border-gray-300 px-2 py-0.5 text-xs text-gray-600",children:"取消"})]}):(0,a.jsx)("button",{onClick:()=>{var e;let t={...null!==(e=S.formData)&&void 0!==e?e:{}};for(let e of C)e.key in t||(t[e.key]="");E(t),T(!0)},className:"text-xs text-blue-500 hover:underline",children:"编辑表单"})]}),I?(0,a.jsxs)("div",{className:"space-y-1.5",children:[Object.entries(P).map(e=>{var t,s;let[l,n]=e,r=null!==(s=null===(t=C.find(e=>e.key===l))||void 0===t?void 0:t.label)&&void 0!==s?s:l;return(0,a.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,a.jsx)("span",{className:"w-40 shrink-0 truncate text-gray-500",title:r,children:r}),(0,a.jsx)("input",{value:String(null!=n?n:""),onChange:e=>E({...P,[l]:e.target.value}),className:"min-w-0 flex-1 rounded border border-gray-300 px-1.5 py-1"}),(0,a.jsx)("button",{onClick:()=>{let e={...P};delete e[l],E(e)},className:"text-gray-300 hover:text-red-500",children:"\xd7"})]},l)}),(0,a.jsx)(ea,{onAdd:(e,t)=>E({...P,[e]:t}),existing:Object.keys(P)})]}):(0,a.jsxs)("dl",{className:"space-y-1 text-xs",children:[Object.entries(null!==(y=S.formData)&&void 0!==y?y:{}).length?Object.entries(null!==(v=S.formData)&&void 0!==v?v:{}).map(e=>{var t,s;let[l,n]=e;return(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)("dt",{className:"w-40 shrink-0 truncate text-gray-500",children:null!==(s=null===(t=C.find(e=>e.key===l))||void 0===t?void 0:t.label)&&void 0!==s?s:l}),(0,a.jsx)("dd",{className:"min-w-0 flex-1 whitespace-pre-wrap text-gray-800",children:String(n)})]},l)}):(0,a.jsx)("div",{className:"text-gray-400",children:"(表单为空)"}),(null===(o=S.invitation)||void 0===o?void 0:o.sentAt)?(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)("dt",{className:"w-40 shrink-0 text-gray-500",children:"邀请发送时间"}),(0,a.jsx)("dd",{className:"text-gray-800",children:(0,i.d3)(S.invitation.sentAt)})]}):null]})]}),(0,a.jsxs)("section",{children:[(0,a.jsx)("h4",{className:"mb-1 text-xs font-medium text-gray-700",children:"操作历史"}),(0,a.jsxs)("ol",{className:"space-y-1 text-xs text-gray-500",children:[[...null!==(N=S.history)&&void 0!==N?N:[]].reverse().map((e,t)=>{var s;return(0,a.jsxs)("li",{className:"flex flex-wrap gap-x-2",children:[(0,a.jsx)("span",{className:"text-gray-400",children:(0,i.d3)(e.at)}),(0,a.jsx)("span",{className:"text-gray-700",children:null!==(s=f[e.action])&&void 0!==s?s:e.action}),e.fromStage?(0,a.jsxs)("span",{children:[et(e.fromStage)," → ",et(e.toStage)]}):null,e.note?(0,a.jsxs)("span",{className:"text-gray-500",children:["\xb7 ",e.note]}):null,(0,a.jsxs)("span",{className:"text-gray-300",children:["by ",e.by]})]},t)}),(null!==(k=S.history)&&void 0!==k?k:[]).length?null:(0,a.jsx)("li",{className:"text-gray-400",children:"(暂无)"})]})]})]}):null,O?(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",children:(0,a.jsxs)("div",{className:"w-72 rounded-lg bg-white p-4 shadow-xl",children:[(0,a.jsxs)("p",{className:"mb-3 text-sm text-gray-800",children:["把 ",null!==(w=null===(x=S.snapshot)||void 0===x?void 0:x.name)&&void 0!==w?w:"(未命名)"," 移出推荐流程?"]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)("button",{onClick:()=>A(!1),className:"rounded border border-gray-300 px-3 py-1 text-xs text-gray-600",children:"取消"}),(0,a.jsx)("button",{onClick:async()=>{await j("/recommendations/".concat(S.id),"DELETE"),A(!1),await e.onChanged()},className:"rounded bg-red-600 px-3 py-1 text-xs text-white hover:bg-red-700",children:"确认移出"})]})]})}):null]})}function ea(e){let{onAdd:t,existing:s}=e,[n,r]=(0,l.useState)(""),[d,i]=(0,l.useState)("");return(0,a.jsxs)("div",{className:"flex items-center gap-2 border-t border-dashed border-gray-200 pt-1.5 text-xs",children:[(0,a.jsx)("input",{value:n,onChange:e=>r(e.target.value),placeholder:"新字段名",className:"w-32 rounded border border-gray-300 px-1.5 py-1"}),(0,a.jsx)("input",{value:d,onChange:e=>i(e.target.value),placeholder:"内容",className:"min-w-0 flex-1 rounded border border-gray-300 px-1.5 py-1"}),(0,a.jsx)("button",{onClick:()=>{let e=n.trim();!e||s.includes(e)||(t(e,d),r(""),i(""))},className:"rounded border border-gray-300 px-2 py-1 text-gray-600 hover:bg-gray-50",children:"加一行"})]})}}var k=s(9616);let w={draft:"草稿",active:"交付中",archived:"已归档"},S=[{key:"draft",label:"草稿",cls:"bg-gray-100 text-gray-600"},{key:"active",label:"交付中",cls:"bg-emerald-100 text-emerald-700"},{key:"archived",label:"已归档",cls:"bg-gray-300 text-gray-700"}],C=[{key:"local",label:"本地",cls:"bg-purple-100 text-purple-700"},{key:"customer",label:"关联客户",cls:"bg-amber-100 text-amber-700"}];function I(e){var t,s;let a;let l=(null!==(t=e.folderPath)&&void 0!==t?t:"").split("/").filter(Boolean).filter(e=>!["job","jd","raw"].includes(e));return(a=e.title)&&!["job","jd","raw"].includes(a)?e.title:null!==(s=l.at(-1))&&void 0!==s?s:"案件 #".concat(e.id)}function T(e){let t=e.requirements;if(!t)return;let s=[t.company,t.location,t.salary].map(e=>"string"==typeof e?e.trim():"").filter(Boolean);return s.length?s.join(" \xb7 "):void 0}function P(){var e;let t=(0,r.useRouter)(),s=(0,r.useSearchParams)(),n=s.get("id"),[i,x]=(0,l.useState)({}),[p,g]=(0,l.useState)(""),[y,v]=(0,l.useState)(""),[j,f]=(0,l.useState)(null),[N,k]=(0,l.useState)(!1),w=s.get("st")||"",P=s.get("src")||"",O=(0,l.useMemo)(()=>w.split(",").map(e=>e.trim()).filter(Boolean),[w]),A=(0,l.useMemo)(()=>P.split(",").map(e=>e.trim()).filter(Boolean),[P]),[z,D]=(0,l.useState)({draft:0,active:0,archived:0}),[L,_]=(0,l.useState)({local:0,customer:0}),[U,F]=(0,l.useState)({}),[M,B]=(0,l.useState)({}),[q,R]=(0,l.useState)({}),[J,H]=(0,l.useState)(!1),[Y,G]=(0,l.useState)(""),[K,Q]=(0,l.useState)(!1),[V,W]=(0,l.useState)(null),{session:X}=(0,b.nu)(),Z=(0,m.B)({deleteUrl:"/job-cases",label:"职位",onDeleted:()=>ee.refresh(),currentUserId:null!==(e=null==X?void 0:X.hmUserId)&&void 0!==e?e:null}),$=(0,l.useMemo)(()=>Array.from(Z.selectedIds),[Z.selectedIds]),ee=(0,h.k)({fetchPage:(0,l.useCallback)(async(e,t)=>{var s,a,l,n,r;let i=new URLSearchParams;i.set("q",y),i.set("limit",String(t)),i.set("offset",String(e)),O.length&&i.set("status",O.join(",")),A.length&&i.set("srcs",A.join(","));let c=await (0,d.rd)("/job-cases?".concat(i.toString()));D(null!==(s=null==c?void 0:c.statusCounts)&&void 0!==s?s:{draft:0,active:0,archived:0}),_(null!==(a=null==c?void 0:c.srcCounts)&&void 0!==a?a:{local:0,customer:0});let o=(null!==(l=null==c?void 0:c.items)&&void 0!==l?l:[]).map(e=>e.id);return o.length&&((0,d.rd)("/recommendations/summary?ids=".concat(o.join(","))).then(e=>{e&&F(t=>({...t,...e}))}),(0,d.rd)("/job-case-postings?ids=".concat(o.join(","))).then(e=>{e&&B(t=>({...t,...e}))}),(0,d.rd)("/job-applications?ids=".concat(o.join(","))).then(e=>{e&&R(t=>({...t,...e}))})),{items:null!==(n=null==c?void 0:c.items)&&void 0!==n?n:[],total:null!==(r=null==c?void 0:c.total)&&void 0!==r?r:0}},[y,O,A]),pageSize:50,deps:[y,O,A]});(0,l.useEffect)(()=>{let e=setTimeout(()=>v(p.trim()),300);return()=>clearTimeout(e)},[p]),(0,l.useEffect)(()=>{(0,d.rd)("/customers").then(e=>{let t={};for(let s of null!=e?e:[])t[s.id]=s.canonicalName;x(t)})},[]),(0,l.useEffect)(()=>{Z.prune(ee.items.map(e=>String(e.id)))},[ee.items,Z]),(0,l.useEffect)(()=>{if(!n){f(null);return}k(!0),(0,d.rd)("/job-cases/".concat(n)).then(e=>{f(e),k(!1)})},[n]);let et=(0,l.useCallback)(e=>{var a,l;let n=new URLSearchParams(s.toString());e.id?n.set("id",e.id):n.delete("id");let r=null!==(a=e.st)&&void 0!==a?a:O;r.length?n.set("st",r.join(",")):n.delete("st");let d=null!==(l=e.src)&&void 0!==l?l:A;d.length?n.set("src",d.join(",")):n.delete("src"),t.replace("/jobs?".concat(n.toString()))},[t,s,O,A]),es=(0,l.useMemo)(()=>ee.items.map(e=>{var t,s,l;return{id:String(e.id),content:(0,a.jsxs)("div",{className:"flex items-start gap-2",children:[Z.checkbox(String(e.id)),(0,a.jsx)(u.dy,{title:null!==(t=I(e))&&void 0!==t?t:"(案件 #".concat(e.id,")"),status:e.status,hmhLocal:(null!==(s=e.folderPath)&&void 0!==s?s:"").includes("/local/clients/"),subtitle:T(e),customerName:e.customerId?null!==(l=i[e.customerId])&&void 0!==l?l:"客户 #".concat(e.customerId):"未关联客户",time:e.createdAt,stages:U[e.id],platforms:M[e.id],apps:q[e.id]})]})}}),[ee.items,i,Z,U,M,q]),ea=async()=>{let e=Number(Y),t=$.map(Number).filter(t=>t!==e);if(!e||!t.length)return;Q(!0);let s=await (0,d.rd)("/job-cases/merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetId:e,sourceIds:t})});if(Q(!1),H(!1),!s){W("合并失败(服务无响应),请重试");return}let a=Object.values(s.moved).reduce((e,t)=>e+t,0);W("已合并 ".concat(s.sourceIds.length," 个职位 → #").concat(s.targetId,",迁移 ").concat(a," 条关联")+(s.matchConflicts?",匹配冲突按高分保留 ".concat(s.matchConflicts," 处"):"")),Z.clear(),ee.refresh(),setTimeout(()=>W(null),8e3)},el=n?N?(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):j?(0,a.jsx)(E,{detail:j,customers:i}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该案件"}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一个职位案件查看详情"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.m,{filterBar:(0,a.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,a.jsx)("input",{type:"text",value:p,onChange:e=>g(e.target.value),placeholder:"搜索职位/客户/路径…",className:"w-full rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,a.jsx)("span",{className:"text-gray-400",children:"状态:"}),S.map(e=>{let t=O.includes(e.key);return(0,a.jsxs)("button",{type:"button",title:t?"点击取消该状态筛选":"点击按该状态过滤(可多选)",onClick:()=>et({st:t?O.filter(t=>t!==e.key):[...O,e.key]}),className:"rounded px-1.5 py-0.5 text-xs transition ".concat(t?"".concat(e.cls," ring-1 ring-current"):"".concat(e.cls," opacity-40 hover:opacity-80")),children:[e.label," ",z[e.key]]},e.key)}),(0,a.jsx)("span",{className:"text-gray-300",children:"|"}),(0,a.jsx)("span",{className:"text-gray-400",children:"来源:"}),C.map(e=>{let t=A.includes(e.key);return(0,a.jsxs)("button",{type:"button",title:t?"点击取消该来源筛选":"点击按该来源过滤(多选=同时命中)",onClick:()=>et({src:t?A.filter(t=>t!==e.key):[...A,e.key]}),className:"rounded px-1.5 py-0.5 text-xs transition ".concat(t?"".concat(e.cls," ring-1 ring-current"):"".concat(e.cls," opacity-40 hover:opacity-80")),children:[e.label," ",L[e.key]]},e.key)}),(O.length>0||A.length>0)&&(0,a.jsx)("button",{type:"button",onClick:()=>et({st:[],src:[]}),className:"text-xs text-gray-400 hover:text-gray-600",children:"清除筛选"}),(0,a.jsxs)("span",{className:"ml-auto text-gray-400",children:["共 ",ee.total," 个"]})]}),Z.bar(es),$.length>=2?(0,a.jsxs)("button",{type:"button",onClick:()=>{G($[0]),H(!0)},className:"mt-1 rounded bg-indigo-600 px-2.5 py-1 text-xs text-white hover:bg-indigo-700",children:["合并所选职位(",$.length,")"]}):null,V?(0,a.jsx)("div",{className:"mt-1 text-xs text-emerald-600",children:V}):null]}),listPanel:(0,a.jsx)(o.L,{items:es,selectedId:null!=n?n:void 0,onSelect:e=>et({id:e}),loading:ee.loading,emptyText:"暂无职位",onLoadMore:ee.loadMore,loadingMore:ee.loadingMore,exhausted:ee.exhausted}),detailPanel:el}),Z.modal(),J?(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",children:(0,a.jsxs)("div",{className:"w-96 rounded-lg bg-white p-4 shadow-xl",children:[(0,a.jsxs)("h3",{className:"mb-2 text-sm font-semibold text-gray-900",children:["合并职位(保留目标,其余 ",$.length-1," 个归档)"]}),(0,a.jsx)("p",{className:"mb-3 text-xs text-gray-500",children:"源职位的推荐流水/发布/简历/画像/评估/沟通记录全部迁到目标职位;同人才匹配冲突保留高分。"}),(0,a.jsx)("div",{className:"mb-3 max-h-48 space-y-1 overflow-auto",children:$.map(e=>{var t;let s=ee.items.find(t=>String(t.id)===e);return(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm text-gray-700",children:[(0,a.jsx)("input",{type:"radio",name:"merge-target",checked:Y===e,onChange:()=>G(e)}),(0,a.jsxs)("span",{className:"min-w-0 flex-1 truncate",children:["#",e," ",s?I(s):"",s?(0,a.jsxs)("span",{className:"text-xs text-gray-400",children:[" ",null!==(t=T(s))&&void 0!==t?t:""]}):null]})]},e)})}),(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>H(!1),className:"rounded border border-gray-300 px-3 py-1 text-xs text-gray-600",children:"取消"}),(0,a.jsx)("button",{type:"button",onClick:()=>void ea(),disabled:!Y||K,className:"rounded bg-indigo-600 px-3 py-1 text-xs text-white hover:bg-indigo-700 disabled:opacity-40",children:K?"合并中…":"确认合并"})]})]})}):null]})}function E(e){var t,s,n;let{detail:r,customers:d}=e,[c,o]=(0,l.useState)("info");return(0,a.jsxs)("div",{className:"h-full overflow-y-auto p-4",children:[(0,a.jsx)("h2",{className:"mb-1 text-lg font-semibold text-gray-900",children:null!==(t=r.title)&&void 0!==t?t:"案件 #".concat(r.id)}),(0,a.jsxs)("div",{className:"mb-3 text-xs text-gray-400",children:["externalId: ",r.externalId," \xb7 更新于 ",(0,i.d3)(r.updatedAt)]}),(0,a.jsx)(O,{detail:r,customers:d}),(0,a.jsx)("div",{className:"mb-4 flex gap-1 border-b border-gray-200",children:[{key:"info",label:"职位信息"},{key:"pipeline",label:"推荐流程"},{key:"publish",label:"发布管理"}].map(e=>(0,a.jsx)("button",{onClick:()=>o(e.key),className:"rounded-t px-3 py-1.5 text-sm ".concat(c===e.key?"bg-gray-100 font-medium text-gray-900":"text-gray-500 hover:text-gray-700"),children:e.label},e.key))}),"info"===c?(0,a.jsxs)(a.Fragment,{children:[r.customerId?(0,a.jsxs)("a",{href:"/companies?id=".concat(r.customerId),className:"mb-4 inline-flex items-center gap-2 rounded border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-800 hover:border-amber-400",children:[(0,a.jsx)("span",{className:"text-gray-500",children:"客户公司:"}),(0,a.jsx)("span",{className:"font-medium",children:null!==(s=d[r.customerId])&&void 0!==s?s:"#".concat(r.customerId)}),(0,a.jsx)("span",{className:"text-xs text-amber-500",children:"查看公司详情 →"})]}):null,r.folderPath?(0,a.jsxs)("div",{className:"mb-4 break-all text-xs text-gray-500",children:["文件夹:",r.folderPath]}):null,r.requirements&&Object.keys(r.requirements).length>0?(0,a.jsxs)("section",{className:"mb-4",children:[(0,a.jsx)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:"职位要求(requirements)"}),(0,a.jsx)(x.Y,{data:r.requirements})]}):null,r.rawFiles&&Object.keys(r.rawFiles).length>0?(0,a.jsxs)("section",{children:[(0,a.jsx)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:"原始文件(rawFiles)"}),(0,a.jsx)(x.Y,{data:r.rawFiles})]}):null]}):"pipeline"===c?(0,a.jsx)(N,{jobCaseId:r.id},r.id):(0,a.jsx)(k.I,{jobCaseId:r.id,caseTitle:null!==(n=r.title)&&void 0!==n?n:"案件 #".concat(r.id)},r.id)]})}function O(e){var t;let{detail:s,customers:n}=e,[r,i]=(0,l.useState)(!1),[c,o]=(0,l.useState)(null),[x,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)(""),b=async(e,t)=>{i(!0),o(null);let a=await (0,d.rd)("/job-cases/".concat(s.id),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:e,...null!=t?{customerId:t}:{}})});if(i(!1),!a){o("active"===e&&null==s.customerId&&null==t?"职位必须关联客户公司才能进入交付中,请先选择客户":"状态更新失败(服务无响应)");return}location.reload()},p=Object.entries(n).map(e=>{let[t,s]=e;return{id:t,name:s}});return(0,a.jsxs)("div",{className:"mb-4 rounded border border-gray-200 bg-gray-50 p-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,a.jsx)("span",{className:"text-gray-500",children:"状态:"}),(0,a.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat("active"===s.status?"bg-emerald-100 text-emerald-700":"archived"===s.status?"bg-gray-300 text-gray-700":"bg-gray-100 text-gray-600"),children:null!==(t=w[s.status])&&void 0!==t?t:s.status}),"active"!==s.status?(0,a.jsx)("button",{type:"button",disabled:r,onClick:()=>{null!=s.customerId?b("active"):u(!0)},className:"rounded bg-emerald-600 px-2.5 py-1 text-xs text-white hover:bg-emerald-700 disabled:opacity-40",children:"交付中"}):null,"draft"!==s.status?(0,a.jsx)("button",{type:"button",disabled:r,onClick:()=>void b("draft"),className:"rounded border border-gray-300 px-2.5 py-1 text-xs text-gray-600 hover:bg-gray-100",children:"退回草稿"}):null,"archived"!==s.status?(0,a.jsx)("button",{type:"button",disabled:r,onClick:()=>void b("archived"),className:"rounded border border-gray-300 px-2.5 py-1 text-xs text-gray-600 hover:bg-gray-100",children:"归档"}):null,"archived"===s.status?(0,a.jsx)("button",{type:"button",disabled:r,onClick:()=>void b(null!=s.customerId?"active":"draft"),className:"rounded border border-gray-300 px-2.5 py-1 text-xs text-gray-600 hover:bg-gray-100",children:"恢复"}):null]}),c?(0,a.jsx)("div",{className:"mt-1 text-xs text-red-500",children:c}):null,x?(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",children:(0,a.jsxs)("div",{className:"w-96 rounded-lg bg-white p-4 shadow-xl",children:[(0,a.jsx)("h3",{className:"mb-2 text-sm font-semibold text-gray-900",children:"选择客户公司(职位必须挂在客户下)"}),(0,a.jsxs)("select",{value:m,onChange:e=>h(e.target.value),className:"mb-3 w-full rounded border border-gray-300 px-2 py-1.5 text-sm",children:[(0,a.jsx)("option",{value:"",children:"选择客户…"}),p.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name},e.id))]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>u(!1),className:"rounded border border-gray-300 px-3 py-1 text-xs text-gray-600",children:"取消"}),(0,a.jsx)("button",{type:"button",disabled:!m||r,onClick:()=>{u(!1),b("active",Number(m))},className:"rounded bg-emerald-600 px-3 py-1 text-xs text-white hover:bg-emerald-700 disabled:opacity-40",children:"挂客户并交付"})]})]})}):null]})}function A(){return(0,a.jsx)(l.Suspense,{fallback:(0,a.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,a.jsx)(P,{})})}function z(){let[e,t]=(0,l.useState)(""),[s,n]=(0,l.useState)(""),[r,i]=(0,l.useState)(""),[x,u]=(0,l.useState)([]),[m,h]=(0,l.useState)(0),[b,p]=(0,l.useState)(!1),[g,y]=(0,l.useState)(null),v=(0,l.useCallback)(async()=>{var e,t;p(!0);let a=new URLSearchParams;s&&a.set("q",s),r&&a.set("touched",r),a.set("limit","200");let l=await (0,d.rd)("/market/jobs?".concat(a.toString()));u(null!==(e=null==l?void 0:l.items)&&void 0!==e?e:[]),h(null!==(t=null==l?void 0:l.total)&&void 0!==t?t:0),p(!1)},[s,r]);(0,l.useEffect)(()=>{let t=setTimeout(()=>n(e.trim()),300);return()=>clearTimeout(t)},[e]),(0,l.useEffect)(()=>{v()},[v]);let j=(0,l.useMemo)(()=>{var e;return null!==(e=x.find(e=>e.key===g))&&void 0!==e?e:null},[x,g]),f=(0,l.useMemo)(()=>x.map(e=>({id:e.key,content:(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"truncate font-medium text-gray-900",children:e.title}),e.touched?(0,a.jsx)("span",{className:"rounded bg-emerald-100 px-1.5 py-0.5 text-[10px] text-emerald-700",children:"已操作"}):null]}),e.company?(0,a.jsx)("div",{className:"truncate text-xs text-gray-500",children:e.company}):null,(0,a.jsxs)("div",{className:"mt-0.5 flex items-center gap-0.5",children:[e.sources.map(e=>(0,a.jsx)(k.v,{platform:e},e)),(0,a.jsxs)("span",{className:"ml-1 text-[10px] text-gray-400",children:[e.postings.length," 个发布"]})]})]})})),[x]);return(0,a.jsx)(c.m,{filterBar:(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-gray-200 bg-white p-3",children:[(0,a.jsx)("input",{type:"text",value:e,onChange:e=>t(e.target.value),placeholder:"搜索职位/公司…",className:"w-56 rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),["","1","0"].map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>i(e),className:"rounded px-2 py-1 text-xs ".concat(r===e?"bg-[color:var(--brand-soft)] font-medium text-[color:var(--brand-strong)]":"text-gray-500 hover:bg-gray-100"),children:""===e?"全部":"1"===e?"已操作过":"未操作"},e)),(0,a.jsxs)("span",{className:"ml-auto text-xs text-gray-400",children:["共 ",m," 组(BD 市场视角)"]})]}),listPanel:(0,a.jsx)(o.L,{items:f,selectedId:null!=g?g:void 0,onSelect:y,loading:b,emptyText:"暂无市场职位(解析库暂无数据)"}),detailPanel:j?(0,a.jsxs)("div",{className:"h-full overflow-y-auto p-4",children:[(0,a.jsx)("h2",{className:"mb-1 text-lg font-semibold text-gray-900",children:j.title}),(0,a.jsxs)("div",{className:"mb-4 text-xs text-gray-400",children:[j.company?"".concat(j.company," \xb7 "):"",j.touched?"本租户已操作过":"本租户未操作"," \xb7 ",j.postings.length," 个平台发布"]}),j.jobCaseIds.length>0?(0,a.jsxs)("div",{className:"mb-4 rounded border border-emerald-200 bg-emerald-50 px-3 py-2 text-sm",children:[(0,a.jsx)("span",{className:"text-emerald-800",children:"我们交付中的案件:"}),j.jobCaseIds.map(e=>(0,a.jsxs)("a",{href:"/jobs?id=".concat(e),className:"ml-2 font-medium text-emerald-700 underline",children:["案件 #",e]},e))]}):null,(0,a.jsxs)("section",{children:[(0,a.jsx)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:"平台发布"}),(0,a.jsx)("div",{className:"space-y-1",children:j.postings.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded border border-gray-100 px-2 py-1.5 text-sm",children:[(0,a.jsx)(k.v,{platform:e.source}),(0,a.jsx)("a",{href:e.sourceUrl,target:"_blank",rel:"noreferrer",className:"min-w-0 flex-1 truncate text-blue-600 hover:underline",children:e.sourceUrl}),(0,a.jsx)("span",{className:"text-xs text-gray-400",children:e.updatedAt.slice(0,10)})]},e.id))})]})]}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"选择左侧职位查看各平台发布"})})}var D=s(8801);let L=[{key:"cases",label:"职位案件"},{key:"entities",label:"招聘实体"}];function _(){let[e,t]=(0,l.useState)("cases"),s=(0,D.mJ)();return(0,a.jsxs)("div",{className:"flex h-full flex-col",children:[(0,a.jsxs)("div",{className:"flex gap-1 border-b border-gray-200 bg-white px-3 pt-2",children:[L.map(s=>(0,a.jsx)("button",{onClick:()=>t(s.key),className:"rounded-t px-3 py-1.5 text-sm ".concat(e===s.key?"bg-gray-100 font-medium text-gray-900":"text-gray-500 hover:text-gray-700"),children:s.label},s.key)),"bd"===s?(0,a.jsx)("span",{className:"ml-auto self-center rounded bg-[color:var(--brand-soft)] px-2 py-0.5 text-xs text-[color:var(--brand-strong)]",children:"\uD83E\uDDED BD 市场视角"}):null]}),(0,a.jsx)("div",{className:"min-h-0 flex-1",children:"cases"===e?"bd"===s?(0,a.jsx)(z,{}):(0,a.jsx)(A,{}):(0,a.jsx)(n.EntityListPage,{type:"job",label:"职位",batchDelete:!0})})]})}}},function(e){e.O(0,[670,852,542,400,935,744],function(){return e(e.s=4843)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="409bab3f-c77a-4d93-bf48-4a4a82da7088",e._sentryDebugIdIdentifier="sentry-dbid-409bab3f-c77a-4d93-bf48-4a4a82da7088")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{3128:function(e,t,n){Promise.resolve().then(n.t.bind(n,1115,23)),Promise.resolve().then(n.bind(n,2215))},7473:function(e,t,n){"use strict";var l=n(8321);n.o(l,"useParams")&&n.d(t,{useParams:function(){return l.useParams}}),n.o(l,"usePathname")&&n.d(t,{usePathname:function(){return l.usePathname}}),n.o(l,"useRouter")&&n.d(t,{useRouter:function(){return l.useRouter}}),n.o(l,"useSearchParams")&&n.d(t,{useSearchParams:function(){return l.useSearchParams}})},2215:function(e,t,n){"use strict";n.d(t,{SystemSidebar:function(){return g}});var l=n(2835),a=n(5589),r=n(7473),s=n(635),i=n(5777),o=n(2182);function u(){let e=(0,s.useSyncExternalStore)(o.mn,o.nk,()=>null),{session:t,sync:n,refresh:a}=(0,i.nu)(),[r,u]=(0,s.useState)(""),[c,d]=(0,s.useState)(""),[m,x]=(0,s.useState)("email"),[h,f]=(0,s.useState)(!1),[y,b]=(0,s.useState)(null),[p,g]=(0,s.useState)(!1),[v,j]=(0,s.useState)(0),w=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(e){var n;x("email"),u(null!==(n=null==t?void 0:t.email)&&void 0!==n?n:""),d(""),b(null),g(!1),j(0)}w.current&&clearInterval(w.current)},[null==e?void 0:e.message]);let N=(0,s.useRef)(!1);if((0,s.useEffect)(()=>{var e;if(!(null==n?void 0:n.authFailed)){N.current=!1;return}!N.current&&((0,o.nk)()||(N.current=!0,(0,o.jr)({message:"登录态已失效,需要登录才可以继续使用",oldUserId:null!==(e=null==t?void 0:t.hmUserId)&&void 0!==e?e:null,retry:async()=>(await a(),!0)})))},[null==n?void 0:n.authFailed,null==t?void 0:t.hmUserId,a]),(0,s.useEffect)(()=>()=>{w.current&&clearInterval(w.current)},[]),!e)return null;let S=()=>{j(60),w.current&&clearInterval(w.current),w.current=setInterval(()=>{j(e=>(e<=1&&w.current&&clearInterval(w.current),Math.max(0,e-1)))},1e3)},k=async()=>{if(!r.includes("@")){b("请输入有效邮箱");return}f(!0),b(null);try{let e=await fetch("".concat((0,i.tQ)(),"/auth/email/send-code"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:r})});if(!e.ok){let t=await e.json().catch(()=>null);b((null==t?void 0:t.message)||"发送失败(HTTP ".concat(e.status,")"));return}x("code"),S()}finally{f(!1)}},C=async()=>{if(!/^\d{4,8}$/.test(c)){b("请输入验证码(4-8 位数字)");return}f(!0),b(null);try{var t;let n=await fetch("".concat((0,i.tQ)(),"/auth/email/verify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:r,code:c})}),l=await n.json().catch(()=>null);if(!n.ok||!(null==l?void 0:l.access_token)){b((null==l?void 0:l.message)||"验证失败(HTTP ".concat(n.status,")"));return}let s=(0,o.H7)(l.access_token),u=null!==(t=e.oldUserId)&&void 0!==t?t:null;if(null!=u&&null!=s&&u!==s){window.location.reload();return}g(!0),(0,o.qd)(),await a(),await e.retry()||g(!1)}finally{f(!1)}};return(0,l.jsx)("div",{className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",children:(0,l.jsxs)("div",{className:"w-80 rounded-xl bg-white p-5 shadow-xl",children:[(0,l.jsx)("h3",{className:"text-base font-semibold text-gray-900",children:"登录已过期"}),(0,l.jsxs)("p",{className:"mt-1 text-xs text-gray-500",children:[e.message,"。重新登录后将自动继续刚才的操作;若登录其他账号,页面将重新加载。"]}),p?(0,l.jsx)("div",{className:"mt-4 rounded bg-blue-50 p-3 text-sm text-blue-700",children:"正在继续刚才的操作…"}):(0,l.jsx)(l.Fragment,{children:"email"===m?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:r,onChange:e=>u(e.target.value),placeholder:"you@example.com",className:"mb-3 mt-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm"}),(0,l.jsx)("button",{onClick:k,disabled:h,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:h?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 mt-3 text-xs text-gray-500",children:["验证码已发送至 ",r,",请查收邮件后输入"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,value:c,onChange:e=>d(e.target.value),placeholder:"6 位验证码",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm tracking-widest"}),(0,l.jsx)("button",{onClick:C,disabled:h,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:h?"验证中…":"登录并继续"}),(0,l.jsx)("button",{type:"button",onClick:k,disabled:h||v>0,className:"mt-2 w-full rounded-lg border border-blue-600 py-1.5 text-sm text-blue-600 disabled:border-gray-300 disabled:text-gray-400",children:v>0?"".concat(v,"s 后重发"):"重发验证码"}),(0,l.jsx)("button",{onClick:()=>{x("email"),b(null)},className:"mt-1 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"返回修改邮箱"})]})}),y&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:y}),!p&&(0,l.jsx)("button",{onClick:o.qd,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"取消(放弃本次操作)"})]})})}function c(){var e,t,n;let{session:a,sync:r,utoken:u,loadError:c,refresh:h}=(0,i.nu)(),[f,y]=(0,s.useState)(!1),[b,p]=(0,s.useState)(!1),[g,v]=(0,s.useState)(!1),[j,w]=(0,s.useState)(!1),N=(null==a?void 0:a.loggedIn)||(null==r?void 0:r.loggedIn),S=(0,i.aG)(r),k=(0,i.cp)(r),C=null==k?null:null!==(t=null===(e=S.find(e=>e.tenantId===k))||void 0===e?void 0:e.name)&&void 0!==t?t:null,T=async e=>{w(!0);try{let n=new Headers({"Content-Type":"application/json"});u&&n.set("Authorization","UTOKEN ".concat(u));let l=await fetch("".concat((0,i.tQ)(),"/datasync/active-tenant"),{method:"POST",headers:n,body:JSON.stringify({id:e})});if(401===l.status){var t;(0,o.jr)({message:"登录已过期,请重新登录",oldUserId:null!==(t=null==a?void 0:a.hmUserId)&&void 0!==t?t:null,retry:async()=>{let t=new Headers({"Content-Type":"application/json"}),n=(0,i.Xc)();return n&&t.set("Authorization","UTOKEN ".concat(n)),!!(await fetch("".concat((0,i.tQ)(),"/datasync/active-tenant"),{method:"POST",headers:t,body:JSON.stringify({id:e})})).ok&&(await h(),!0)}});return}await h()}finally{w(!1)}},E=async()=>{let e=new Headers({"Content-Type":"application/json"});u&&e.set("Authorization","UTOKEN ".concat(u)),await fetch("".concat((0,i.tQ)(),"/datasync/logout"),{method:"POST",headers:e}).catch(()=>null),window.location.reload()},D=null===r?{text:"同步状态加载中…",cls:"bg-gray-100 text-gray-400"}:r.enabled?r.authFailed?{text:"登录态失效",cls:"bg-red-100 text-red-600"}:r.remoteError?{text:"云端不可达",cls:"bg-amber-100 text-amber-600"}:{text:"同步正常",cls:"bg-green-100 text-green-600"}:{text:"同步未启用",cls:"bg-gray-100 text-gray-500"};return(0,l.jsxs)("div",{className:"relative border-t border-gray-200 px-3 py-3",children:[c?(0,l.jsxs)("div",{className:"text-xs text-red-500",children:[c,"(本地服务未启动?)"]}):N?(0,l.jsxs)("div",{className:"space-y-2",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsx)("div",{className:"truncate text-sm font-medium text-gray-900",children:(null==a?void 0:a.email)||"已登录"}),(0,l.jsx)("span",{className:"inline-block rounded-full px-2 py-0.5 text-xs ".concat(D.cls),children:D.text})]}),(0,l.jsx)("button",{onClick:E,title:"退出登录",className:"shrink-0 rounded-md px-2 py-1 text-xs text-gray-400 hover:bg-gray-100 hover:text-gray-600",children:"退出"})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{onClick:()=>p(e=>!e),disabled:j,className:"flex w-full items-center justify-between rounded-md border border-gray-200 bg-white px-2 py-1.5 text-sm text-gray-700 hover:border-gray-300 disabled:opacity-50",children:[(0,l.jsx)("span",{className:"truncate",children:null==k?"个人产出(不归属公司)":null!=C?C:"未知公司"}),(0,l.jsx)("span",{className:"text-xs text-gray-400",children:j?"切换中…":"▾"})]}),(0,l.jsx)("div",{className:"mt-1 truncate whitespace-nowrap text-xs text-gray-400",children:"当前归属公司;公司内数据互通"})]})]}):(0,l.jsxs)("div",{className:"flex items-center justify-between",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-sm text-gray-500",children:"未登录"}),(0,l.jsx)("div",{className:"text-xs text-gray-400",children:"登录后可跨设备同步数据"})]}),(0,l.jsx)("button",{onClick:()=>y(!0),className:"rounded-lg bg-blue-600 px-3 py-1.5 text-sm text-white hover:bg-blue-700",children:"登录"})]}),b&&N&&(0,l.jsx)(d,{sync:r,companies:S,activeTenantId:k,onPick:async e=>{p(!1),await T(e)},onCreateJoin:()=>{p(!1),v(!0)},onClose:()=>p(!1)}),g&&N&&(0,l.jsx)(m,{utoken:u,oldUserId:null!==(n=null==a?void 0:a.hmUserId)&&void 0!==n?n:null,onDone:async e=>{v(!1),null!=e&&await T(e),await h()},onClose:()=>v(!1)}),f&&(0,l.jsx)(x,{onClose:()=>y(!1),onDone:()=>{y(!1),h()}})]})}function d(e){let{sync:t,companies:n,activeTenantId:a,onPick:r,onCreateJoin:i,onClose:o}=e,u=(0,s.useRef)(null);return(0,s.useEffect)(()=>{let e=e=>{u.current&&!u.current.contains(e.target)&&o()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[o]),(0,l.jsxs)("div",{ref:u,className:"absolute bottom-full left-2 right-2 z-40 mb-1 overflow-hidden rounded-xl border border-gray-200 bg-white shadow-xl",children:[(0,l.jsx)("div",{className:"border-b border-gray-100 px-3 py-2 text-xs font-medium text-gray-400",children:"切换公司"}),(0,l.jsxs)("div",{className:"max-h-64 overflow-auto py-1",children:[(0,l.jsxs)("button",{onClick:()=>r(null),className:"flex w-full items-center justify-between px-3 py-2 text-left text-sm hover:bg-gray-50",children:[(0,l.jsx)("span",{className:"text-gray-700",children:"个人产出(不归属公司)"}),null==a&&(0,l.jsx)("span",{className:"text-blue-600",children:"✓"})]}),n.map(e=>{var t;return(0,l.jsxs)("button",{onClick:()=>r(e.tenantId),className:"flex w-full items-center justify-between gap-2 px-3 py-2 text-left text-sm hover:bg-gray-50",children:[(0,l.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:[(0,l.jsx)("span",{className:"truncate text-gray-700",children:e.name}),"owner"===(t=e.role)?(0,l.jsx)("span",{className:"text-[10px] text-amber-600",children:"归属者"}):"admin"===t?(0,l.jsx)("span",{className:"text-[10px] text-blue-600",children:"管理员"}):null]}),a===e.tenantId&&(0,l.jsx)("span",{className:"shrink-0 text-blue-600",children:"✓"})]},e.tenantId)}),0===n.length&&(0,l.jsx)("div",{className:"px-3 py-2 text-xs text-gray-400",children:"尚未加入任何公司"})]}),(0,l.jsx)("button",{onClick:i,className:"w-full border-t border-gray-100 px-3 py-2 text-left text-sm text-blue-600 hover:bg-blue-50",children:"+ 创建或加入公司"})]})}function m(e){let{utoken:t,oldUserId:n,onDone:a,onClose:r}=e,[u,c]=(0,s.useState)(""),[d,m]=(0,s.useState)(!1),[x,h]=(0,s.useState)([]),[f,y]=(0,s.useState)(!1),[b,p]=(0,s.useState)(null),[g,v]=(0,s.useState)(null),[j,w]=(0,s.useState)(null),N=(0,s.useCallback)(async(e,n)=>{let l=new Headers(null==n?void 0:n.headers);return l.set("Content-Type","application/json"),t&&l.set("Authorization","UTOKEN ".concat(t)),fetch("".concat((0,i.tQ)()).concat(e),{...n,headers:l})},[t]);(0,s.useEffect)(()=>{let e=u.trim();if(!e){h([]),m(!1);return}m(!0);let t=setTimeout(async()=>{var t;let n=await N("/company/search?q=".concat(encodeURIComponent(e)));if(!n.ok){h([]),m(!1);return}h(null!==(t=(await n.json()).items)&&void 0!==t?t:[]),m(!1)},300);return()=>clearTimeout(t)},[u,N]);let S=(e,t)=>{(null==t?void 0:t.already)?w("已申请过「".concat(e.name,"」,等待管理员审批")):w("已申请加入「".concat(e.name,"」,管理员通过后即可数据互通")),h(t=>t.map(t=>t.id===e.id?{...t,myApplication:"pending"}:t))},k=async()=>{let e=u.trim();if(e){y(!0),v(null);try{var l;let r=await N("/company",{method:"POST",body:JSON.stringify({name:e})}),s=await r.json().catch(()=>null);if(!r.ok){if(401===r.status){v("登录已过期,请在弹窗中重新登录;登录后自动继续创建"),(0,o.jr)({message:"登录已过期,请重新登录",oldUserId:null!=n?n:null,retry:async()=>{var n,l;let r=new Headers({"Content-Type":"application/json"}),s=null!==(n=(0,i.Xc)())&&void 0!==n?n:t;s&&r.set("Authorization","UTOKEN ".concat(s));let o=await fetch("".concat((0,i.tQ)(),"/company"),{method:"POST",headers:r,body:JSON.stringify({name:e})}),u=await o.json().catch(()=>null);return o.ok?(a(null!==(l=null==u?void 0:u.id)&&void 0!==l?l:null),!0):(v((null==u?void 0:u.message)||"创建失败(HTTP ".concat(o.status,")")),!1)}});return}v((null==s?void 0:s.message)||"创建失败(HTTP ".concat(r.status,")"));return}a(null!==(l=null==s?void 0:s.id)&&void 0!==l?l:null)}finally{y(!1)}}},C=async e=>{p(e.id),v(null),w(null);try{let l=await N("/company/".concat(e.id,"/apply"),{method:"POST",body:JSON.stringify({})}),a=await l.json().catch(()=>null);if(!l.ok){if(401===l.status){v("登录已过期,请在弹窗中重新登录;登录后自动继续申请"),(0,o.jr)({message:"登录已过期,请重新登录",oldUserId:null!=n?n:null,retry:async()=>{var n;let l=new Headers({"Content-Type":"application/json"}),a=null!==(n=(0,i.Xc)())&&void 0!==n?n:t;a&&l.set("Authorization","UTOKEN ".concat(a));let r=await fetch("".concat((0,i.tQ)(),"/company/").concat(e.id,"/apply"),{method:"POST",headers:l,body:JSON.stringify({})}),s=await r.json().catch(()=>null);return r.ok?(S(e,s),!0):(v((null==s?void 0:s.message)||"申请失败(HTTP ".concat(r.status,")")),!1)}});return}v((null==a?void 0:a.message)||"申请失败(HTTP ".concat(l.status,")"));return}S(e,a)}finally{p(null)}},T=e=>"owner"===e.myRole?{label:"归属者",disabled:!0}:"admin"===e.myRole||"member"===e.myRole?{label:"已加入",disabled:!0}:"pending"===e.myApplication?{label:"待审批",disabled:!0}:{label:"申请加入",disabled:!1};return(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",onClick:r,children:(0,l.jsxs)("div",{className:"w-96 rounded-xl bg-white p-5 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,l.jsx)("h3",{className:"mb-3 text-base font-semibold text-gray-900",children:"创建或加入公司"}),(0,l.jsx)("input",{autoFocus:!0,value:u,onChange:e=>c(e.target.value),placeholder:"输入公司名称,检索是否已存在",className:"mb-2 w-full rounded-md border border-gray-300 px-3 py-2 text-sm"}),(0,l.jsx)("div",{className:"mb-3 max-h-56 min-h-16 overflow-auto rounded-md border border-gray-100",children:""===u.trim()?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"输入关键词可检索已存在的公司并申请加入"}):d?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"检索中…"}):0===x.length?(0,l.jsxs)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:["没有匹配「",u.trim(),"」的公司,可直接创建"]}):x.map(e=>{let t=T(e);return(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-gray-50 px-3 py-2 last:border-0",children:[(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsx)("div",{className:"truncate text-sm text-gray-800",children:e.name}),(0,l.jsxs)("div",{className:"text-xs text-gray-400",children:[e.memberCount," 名成员"]})]}),(0,l.jsx)("button",{onClick:()=>!t.disabled&&C(e),disabled:t.disabled||b===e.id,className:"shrink-0 rounded-md px-2.5 py-1 text-xs ".concat(t.disabled?"bg-gray-100 text-gray-400":"bg-blue-600 text-white hover:bg-blue-700 disabled:opacity-50"),children:b===e.id?"申请中…":t.label})]},e.id)})}),(0,l.jsx)("button",{onClick:k,disabled:f||""===u.trim(),className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:f?"创建中…":"创建公司「".concat(u.trim()||"…","」")}),j&&(0,l.jsx)("div",{className:"mt-2 text-xs text-green-600",children:j}),g&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:g}),(0,l.jsx)("button",{onClick:r,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"关闭"})]})})}function x(e){let{onClose:t,onDone:n}=e,[a,r]=(0,s.useState)(""),[o,u]=(0,s.useState)(""),[c,d]=(0,s.useState)("email"),[m,x]=(0,s.useState)(!1),[h,f]=(0,s.useState)(null),y=async()=>{if(!a.includes("@")){f("请输入有效邮箱");return}x(!0),f(null);let e=await fetch("".concat((0,i.tQ)(),"/auth/email/send-code"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:a})});if(x(!1),!e.ok){let t=await e.json().catch(()=>null);f((null==t?void 0:t.message)||"发送失败(HTTP ".concat(e.status,")"));return}d("code")},b=async()=>{if(!/^\d{4,8}$/.test(o)){f("请输入验证码(4-8 位数字)");return}x(!0),f(null);let e=await fetch("".concat((0,i.tQ)(),"/auth/email/verify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:a,code:o})});if(x(!1),!e.ok){let t=await e.json().catch(()=>null);f((null==t?void 0:t.message)||"验证失败(HTTP ".concat(e.status,")"));return}n()};return(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",onClick:t,children:(0,l.jsxs)("div",{className:"w-80 rounded-xl bg-white p-5 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,l.jsx)("h3",{className:"mb-3 text-base font-semibold text-gray-900",children:"邮箱验证码登录"}),"email"===c?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:a,onChange:e=>r(e.target.value),placeholder:"you@example.com",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm"}),(0,l.jsx)("button",{onClick:y,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 text-xs text-gray-500",children:["验证码已发送至 ",a,",请查收邮件后输入验证码"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,value:o,onChange:e=>u(e.target.value),placeholder:"6 位验证码",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm tracking-widest"}),(0,l.jsx)("button",{onClick:b,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"验证中…":"登录"}),(0,l.jsx)("button",{onClick:()=>{d("email"),f(null)},className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"返回修改邮箱"})]}),h&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:h})]})})}var h=n(8801);let f=[{key:"delivery",label:"交付",icon:"\uD83C\uDFAF"},{key:"bd",label:"BD",icon:"\uD83E\uDDED"}];function y(){let e=(0,h.mJ)();return(0,l.jsx)("div",{className:"mx-2 mb-2 rounded-lg bg-gray-100 p-1",title:"角色视角:列表与详情按视角展示内容,记住上次选择",children:(0,l.jsx)("div",{className:"grid grid-cols-2 gap-1",children:f.map(t=>{let n=e===t.key;return(0,l.jsxs)("button",{type:"button",onClick:()=>(0,h.hm)(t.key),className:"rounded-md px-2 py-1.5 text-xs font-medium transition ".concat(n?"bg-white shadow-sm":"text-gray-500 hover:text-gray-700"),style:n?{color:"var(--brand-strong)"}:void 0,children:[t.icon," ",t.label]},t.key)})})})}let b=null,p=[{href:"/",label:"仪表盘",icon:"\uD83D\uDCCA"},{href:"/talents",label:"人才",icon:"\uD83D\uDC64"},{href:"/jobs",label:"职位",icon:"\uD83D\uDCBC"},{href:"/companies",label:"公司",icon:"\uD83C\uDFE2"},{href:"/parselog",label:"解析日志",icon:"\uD83D\uDCCB"},{href:"/recordings",label:"录制",icon:"\uD83D\uDD34"},{href:"/resource-usage",label:"资源占用",icon:"\uD83D\uDCBD"},{href:"/team/insights",label:"团队统计",icon:"\uD83D\uDCC8"}];function g(){var e,t,n,o;let d=(0,r.usePathname)()||"/",{sync:m,utoken:x}=(0,i.nu)();(0,s.useEffect)(()=>(0,h.oU)(),[]);let f=(0,i.cp)(m),g=(0,i.Cd)(m,f),v=null!==(n=null===(e=(null!==(t=null==m?void 0:m.pendingCounts)&&void 0!==t?t:[]).find(e=>e.tenantId===f))||void 0===e?void 0:e.count)&&void 0!==n?n:0,[j,w]=(0,s.useState)(null!==(o=null==b?void 0:b.isAdmin)&&void 0!==o&&o);return(0,s.useEffect)(()=>{if(!x){w(!1);return}if((null==b?void 0:b.utoken)===x){w(b.isAdmin);return}let e=!1;return(async()=>{try{let t=await fetch("/admin/entities?pageSize=1&hmUserId=1",{headers:{Authorization:"UTOKEN ".concat(x)}}),n=403!==t.status&&401!==t.status;b={utoken:x,isAdmin:n},e||w(n)}catch(t){e||w(!1)}})(),()=>{e=!0}},[x]),(0,l.jsxs)("aside",{className:"flex h-screen w-56 flex-col border-r border-gray-200 bg-white",style:{borderTopColor:"var(--brand)"},children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 border-b border-gray-200 px-4 py-3",style:{boxShadow:"inset 3px 0 0 var(--brand)"},children:[(0,l.jsx)("span",{className:"text-xl",children:"\uD83E\uDD1D"}),(0,l.jsx)("span",{className:"font-semibold text-gray-900",children:"HunterMate"})]}),(0,l.jsxs)("nav",{className:"flex-1 overflow-auto py-3",children:[p.map(e=>{let t=d===e.href||d.startsWith("".concat(e.href,"/"));return(0,l.jsxs)(a.default,{href:e.href,className:"mx-2 flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors ".concat(t?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsx)("span",{className:"text-base",children:e.icon}),e.label]},e.href)}),null!=f&&("owner"===g||"admin"===g)&&(0,l.jsxs)(a.default,{href:"/company/admin",className:"mx-2 flex items-center justify-between rounded-lg px-3 py-2 text-sm transition-colors ".concat(d.startsWith("/company/admin")?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsxs)("span",{className:"flex items-center gap-3",children:[(0,l.jsx)("span",{className:"text-base",children:"⚙️"}),"企业管理"]}),v>0&&(0,l.jsx)("span",{className:"rounded-full bg-red-500 px-1.5 text-[10px] leading-4 text-white",children:v>99?"99+":v})]}),j&&(0,l.jsxs)(a.default,{href:"/admin/data",className:"mx-2 flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors ".concat(d.startsWith("/admin")?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsx)("span",{className:"text-base",children:"\uD83E\uDDF9"}),"数据管理"]})]}),(0,l.jsx)(y,{}),(0,l.jsx)(c,{}),(0,l.jsx)(u,{})]})}},5777:function(e,t,n){"use strict";n.d(t,{Cd:function(){return w},Xc:function(){return S},aG:function(){return v},cp:function(){return j},nu:function(){return g},tQ:function(){return N}});var l=n(635),a=n(4431),r=n(7002),s=n(529);let i=null,o=null,u=null,c=new Set;function d(){c.forEach(e=>e())}function m(e){let t=new Headers,n=(0,r.Xc)();return n&&t.set("Authorization","UTOKEN ".concat(n)),(0,a.rd)(e,{headers:t})}async function x(){let[e,t]=await Promise.all([(0,a.rd)("/auth/session"),m("/datasync/state")]),n=(null==e?void 0:e.loggedIn)&&e.token?e.token:null,l=null!=t?t:null;if(!l&&e&&n&&n!==(0,r.Xc)()?((0,r.GK)(n),l=await m("/datasync/state")):(0,r.GK)(n),!e&&!l){i=i?{...i,loadError:"本地服务无响应"}:{session:null,sync:null,utoken:(0,r.Xc)(),loadError:"本地服务无响应",refresh:h},d();return}i={session:null!=e?e:{loggedIn:!1},sync:l,utoken:(0,r.Xc)(),loadError:null,refresh:h},d()}function h(){return o||(o=x().finally(()=>{o=null}))}function f(e){return c.add(e),1===c.size&&(h(),u=setInterval(()=>void h(),6e4)),()=>{c.delete(e),0===c.size&&u&&(clearInterval(u),u=null)}}let y={session:null,sync:null,utoken:null,loadError:null,refresh:h};function b(){return null!=i?i:y}function p(){return b()}function g(){return(0,l.useSyncExternalStore)(f,b,p)}function v(e){var t;return(null!==(t=null==e?void 0:e.memberships)&&void 0!==t?t:[]).filter(e=>!e.isPersonal&&!e.leftAt)}function j(e){var t,n;let l=null!==(t=null==e?void 0:e.activeTenantId)&&void 0!==t?t:null;if(null==l)return null;let a=(null!==(n=null==e?void 0:e.memberships)&&void 0!==n?n:[]).find(e=>e.tenantId===l&&!e.leftAt);return!a||a.isPersonal?null:l}function w(e,t){var n,l;if(!t)return null;let a=(null!==(n=null==e?void 0:e.memberships)&&void 0!==n?n:[]).find(e=>e.tenantId===t&&!e.leftAt&&!e.isPersonal);return null!==(l=null==a?void 0:a.role)&&void 0!==l?l:null}function N(){return s.env.NEXT_PUBLIC_HUNTER_MATE_SERVER_URL||""}function S(){return(0,r.Xc)()}},2182:function(e,t,n){"use strict";n.d(t,{H7:function(){return c},jr:function(){return s},mn:function(){return u},nk:function(){return o},qd:function(){return i}});let l=null,a=new Set;function r(){a.forEach(e=>e())}function s(e){l=e,r()}function i(){l&&(l=null,r())}function o(){return l}function u(e){return a.add(e),()=>a.delete(e)}function c(e){if(!e)return null;try{var t,n,l,a,r;let s=e.split(".")[1],i=JSON.parse(decodeURIComponent(escape(atob(s.replace(/-/g,"+").replace(/_/g,"/"))))),o=null!==(r=null!==(a=null!==(l=null==i?void 0:null===(t=i.data)||void 0===t?void 0:t._id)&&void 0!==l?l:null==i?void 0:null===(n=i.data)||void 0===n?void 0:n.id)&&void 0!==a?a:null==i?void 0:i.sub)&&void 0!==r?r:null;return"number"==typeof o?o:null}catch(e){return null}}},4431:function(e,t,n){"use strict";n.d(t,{Ox:function(){return r},rd:function(){return o},uz:function(){return u}});var l=n(7002),a=n(529);function r(){return a.env.HUNTER_MATE_SERVER_URL||""}let s=r();function i(e){let t=(0,l.Xc)();if(!t)return e;let n=new Headers(null==e?void 0:e.headers);return n.has("Authorization")||n.set("Authorization","UTOKEN ".concat(t)),{...e,headers:n}}async function o(e,t){try{let n=await fetch("".concat(s).concat(e),{cache:"no-store",...i(t)});if(!n.ok)return null;return await n.json()}catch(e){return null}}async function u(e,t){try{let n=await fetch("".concat(s).concat(e),i({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=t?JSON.stringify(t):void 0}));if(!n.ok)return null;return await n.json()}catch(e){return null}}},7002:function(e,t,n){"use strict";n.d(t,{GK:function(){return s},Lc:function(){return i},Xc:function(){return r}});let l=null,a=new Set;function r(){return l}function s(e){e!==l&&(l=e,a.forEach(e=>e()))}function i(e){return a.add(e),()=>{a.delete(e)}}},8801:function(e,t,n){"use strict";n.d(t,{hm:function(){return u},mJ:function(){return d},oU:function(){return c}});var l=n(635);let a="hm-view-mode",r=new Set;function s(){return"bd"===window.localStorage.getItem(a)?"bd":"delivery"}function i(e){return r.add(e),()=>r.delete(e)}function o(e){"undefined"!=typeof document&&(document.documentElement.dataset.view=e)}function u(e){window.localStorage.setItem(a,e),o(e),r.forEach(e=>e())}function c(){o(s())}function d(e){let t=(0,l.useSyncExternalStore)(i,s,()=>"delivery");return null!=e?e:t}},1115:function(){}},function(e){e.O(0,[24,589,400,935,744],function(){return e(e.s=3128)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="f234c427-8937-4138-a3a8-e2b96aeed319",e._sentryDebugIdIdentifier="sentry-dbid-f234c427-8937-4138-a3a8-e2b96aeed319")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[745],{6452:function(e,t,s){Promise.resolve().then(s.bind(s,1266))},1266:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return n}});var r=s(2835),a=s(635);function l(e){let{apiUrl:t,pollIntervalMs:s}=e,{logs:l,loading:n,error:d,paused:i,filters:c,setFilters:o,pause:u,resume:x,refresh:m}=function(e){let{apiUrl:t,pollIntervalMs:s=2500}=e,[r,l]=(0,a.useState)([]),[n,d]=(0,a.useState)(!1),[i,c]=(0,a.useState)(null),[o,u]=(0,a.useState)(!1),[x,m]=(0,a.useState)({}),h=(0,a.useRef)(void 0),p=t.replace(/\/$/,""),f=(0,a.useCallback)(async(e=!0)=>{if(!o||!e){d(!0);try{let t=new URLSearchParams;x.sessionId&&t.set("sessionId",x.sessionId),x.context&&t.set("context",x.context),x.level&&t.set("level",x.level),e&&h.current&&t.set("lastId",String(h.current)),t.set("limit","200");let s=await fetch(`${p}/logs?${t.toString()}`);if(!s.ok)throw Error(`HTTP ${s.status}`);let r=(await s.json()).items||[];e&&r.length?l(e=>{let t=new Set(e.map(e=>e.id));return[...r.filter(e=>!t.has(e.id)),...e].slice(0,1e3)}):l(r),r.length&&(h.current=Math.max(...r.map(e=>e.id||0))),c(null)}catch(e){c(e.message||String(e))}finally{d(!1)}}},[p,x,o]);return(0,a.useEffect)(()=>{h.current=void 0,l([]),f(!1)},[x.sessionId,x.context,x.level]),(0,a.useEffect)(()=>{if(o)return;let e=setInterval(()=>f(!0),s);return()=>clearInterval(e)},[f,o,s]),{logs:r,loading:n,error:i,paused:o,filters:x,setFilters:m,pause:()=>u(!0),resume:()=>u(!1),refresh:()=>f(!1)}}({apiUrl:t,pollIntervalMs:s}),h=(0,a.useRef)(null);return(0,a.useEffect)(()=>{!i&&h.current&&h.current.scrollIntoView({behavior:"smooth"})},[l,i]),(0,r.jsx)("div",{className:"min-h-screen bg-gray-50 p-4 text-sm",children:(0,r.jsxs)("div",{className:"mx-auto max-w-7xl",children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-center gap-3 rounded-lg bg-white p-3 shadow",children:[(0,r.jsx)("input",{type:"text",placeholder:"sessionId",value:c.sessionId||"",onChange:e=>o({...c,sessionId:e.target.value}),className:"rounded border border-gray-300 px-2 py-1"}),(0,r.jsx)("select",{value:c.context||"",onChange:e=>o({...c,context:e.target.value}),className:"rounded border border-gray-300 px-2 py-1",children:["","cli","server","content","background","sidepanel"].map(e=>(0,r.jsx)("option",{value:e,children:e||"all contexts"},e))}),(0,r.jsx)("select",{value:c.level||"",onChange:e=>o({...c,level:e.target.value}),className:"rounded border border-gray-300 px-2 py-1",children:["","debug","info","warn","error"].map(e=>(0,r.jsx)("option",{value:e,children:e||"all levels"},e))}),(0,r.jsx)("button",{onClick:()=>i?x():u(),className:`rounded px-3 py-1 font-medium ${i?"bg-green-600 text-white":"bg-yellow-500 text-white"}`,children:i?"Resume":"Pause"}),(0,r.jsx)("button",{onClick:m,className:"rounded bg-blue-600 px-3 py-1 font-medium text-white",children:"Refresh"}),n&&(0,r.jsx)("span",{className:"text-gray-500",children:"Loading..."}),d&&(0,r.jsxs)("span",{className:"text-red-600",children:["Error: ",d]})]}),(0,r.jsx)("div",{className:"rounded-lg bg-white shadow",children:(0,r.jsxs)("div",{className:"max-h-[70vh] overflow-auto",children:[(0,r.jsxs)("table",{className:"w-full table-auto border-collapse",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-gray-100",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-3 py-2 text-left font-semibold text-gray-700",children:"Time"}),(0,r.jsx)("th",{className:"px-3 py-2 text-left font-semibold text-gray-700",children:"Context"}),(0,r.jsx)("th",{className:"px-3 py-2 text-left font-semibold text-gray-700",children:"Level"}),(0,r.jsx)("th",{className:"px-3 py-2 text-left font-semibold text-gray-700",children:"Message"}),(0,r.jsx)("th",{className:"px-3 py-2 text-left font-semibold text-gray-700",children:"Meta"})]})}),(0,r.jsx)("tbody",{children:l.map(e=>(0,r.jsxs)("tr",{className:"border-b border-gray-100 hover:bg-gray-50",children:[(0,r.jsx)("td",{className:"px-3 py-2 whitespace-nowrap text-gray-500",children:new Date(e.timestamp).toLocaleTimeString()}),(0,r.jsx)("td",{className:"px-3 py-2",children:e.context}),(0,r.jsx)("td",{className:"px-3 py-2",children:(0,r.jsx)("span",{className:function(e){let t="rounded px-2 py-0.5 text-xs font-medium ";switch(e){case"error":return t+"bg-red-100 text-red-700";case"warn":return t+"bg-yellow-100 text-yellow-700";case"info":return t+"bg-blue-100 text-blue-700";default:return t+"bg-gray-100 text-gray-600"}}(e.level),children:e.level})}),(0,r.jsx)("td",{className:"px-3 py-2 max-w-md truncate",title:e.message,children:e.message}),(0,r.jsx)("td",{className:"px-3 py-2",children:e.meta?(0,r.jsxs)("details",{children:[(0,r.jsx)("summary",{className:"cursor-pointer text-blue-600",children:"meta"}),(0,r.jsx)("pre",{className:"mt-1 max-w-xs overflow-auto rounded bg-gray-100 p-1 text-xs",children:JSON.stringify(e.meta,null,2)})]}):"-"})]},e.id))})]}),(0,r.jsx)("div",{ref:h})]})})]})})}function n(){return(0,r.jsx)(l,{apiUrl:"",pollIntervalMs:1e4})}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=6452)}),_N_E=e.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-c6714cec1ffd7c5e.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new n.Error).stack;e&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[e]="9def7002-237c-4262-9015-70bab8dc28d4",n._sentryDebugIdIdentifier="sentry-dbid-9def7002-237c-4262-9015-70bab8dc28d4")}catch(n){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[234],{866:function(n,e,t){Promise.resolve().then(t.bind(t,4762))},7473:function(n,e,t){"use strict";var r=t(8321);t.o(r,"useParams")&&t.d(e,{useParams:function(){return r.useParams}}),t.o(r,"usePathname")&&t.d(e,{usePathname:function(){return r.usePathname}}),t.o(r,"useRouter")&&t.d(e,{useRouter:function(){return r.useRouter}}),t.o(r,"useSearchParams")&&t.d(e,{useSearchParams:function(){return r.useSearchParams}})},4762:function(n,e,t){"use strict";t.d(e,{default:function(){return a}});var r=t(2835),o=t(635),i=t(7473),u=t(4431);function a(){let n=(0,i.useParams)().id,[e,t]=(0,o.useState)([]),[a,s]=(0,o.useState)(!1),[c,d]=(0,o.useState)(null);async function l(){s(!0),d(null);try{let e=await fetch("".concat((0,u.Ox)(),"/matching/jobs/").concat(n,"/talents"));if(!e.ok)throw Error("HTTP ".concat(e.status));t(await e.json())}catch(n){d(n.message)}finally{s(!1)}}return(0,r.jsxs)("div",{style:{padding:24,maxWidth:900,margin:"0 auto"},children:[(0,r.jsxs)("h1",{children:["职位 ",n," 的推荐人才"]}),(0,r.jsx)("button",{onClick:l,disabled:a,children:a?"计算中...":"刷新匹配"}),c&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:c}),(0,r.jsx)("div",{style:{marginTop:16},children:e.map(n=>{var e,t,o,i,u,a,s;return(0,r.jsxs)("div",{style:{border:"1px solid #ddd",borderRadius:8,padding:16,marginBottom:12},children:[(0,r.jsxs)("div",{style:{fontWeight:"bold"},children:["人才 ID: ",n.portraitId.slice(0,8)," — 综合分 ",null===(e=n.scores)||void 0===e?void 0:e.overall]}),(0,r.jsxs)("div",{style:{fontSize:13,color:"#555",marginTop:4},children:["技能 ",null===(t=n.scores)||void 0===t?void 0:t.skill," | 经验 ",null===(o=n.scores)||void 0===o?void 0:o.experience," | 行业 ",null===(i=n.scores)||void 0===i?void 0:i.industry," | 地点 ",null===(u=n.scores)||void 0===u?void 0:u.location," | 薪酬 ",null===(a=n.scores)||void 0===a?void 0:a.salary]}),(null===(s=n.recommendation)||void 0===s?void 0:s.aiReason)&&(0,r.jsx)("pre",{style:{marginTop:8,background:"#f5f5f5",padding:12,borderRadius:4,whiteSpace:"pre-wrap"},children:n.recommendation.aiReason})]},n.id)})})]})}},4431:function(n,e,t){"use strict";t.d(e,{Ox:function(){return i},rd:function(){return s},uz:function(){return c}});var r=t(7002),o=t(529);function i(){return o.env.HUNTER_MATE_SERVER_URL||""}let u=i();function a(n){let e=(0,r.Xc)();if(!e)return n;let t=new Headers(null==n?void 0:n.headers);return t.has("Authorization")||t.set("Authorization","UTOKEN ".concat(e)),{...n,headers:t}}async function s(n,e){try{let t=await fetch("".concat(u).concat(n),{cache:"no-store",...a(e)});if(!t.ok)return null;return await t.json()}catch(n){return null}}async function c(n,e){try{let t=await fetch("".concat(u).concat(n),a({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=e?JSON.stringify(e):void 0}));if(!t.ok)return null;return await t.json()}catch(n){return null}}},7002:function(n,e,t){"use strict";t.d(e,{GK:function(){return u},Lc:function(){return a},Xc:function(){return i}});let r=null,o=new Set;function i(){return r}function u(n){n!==r&&(r=n,o.forEach(n=>n()))}function a(n){return o.add(n),()=>{o.delete(n)}}}},function(n){n.O(0,[400,935,744],function(){return n(n.s=866)}),_N_E=n.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-658eca1ae5ca29dc.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new n.Error).stack;e&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[e]="8a89f1ef-32b8-4332-8b32-ae95b832dcc3",n._sentryDebugIdIdentifier="sentry-dbid-8a89f1ef-32b8-4332-8b32-ae95b832dcc3")}catch(n){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[977],{8166:function(n,e,t){Promise.resolve().then(t.bind(t,1261))},7473:function(n,e,t){"use strict";var r=t(8321);t.o(r,"useParams")&&t.d(e,{useParams:function(){return r.useParams}}),t.o(r,"usePathname")&&t.d(e,{usePathname:function(){return r.usePathname}}),t.o(r,"useRouter")&&t.d(e,{useRouter:function(){return r.useRouter}}),t.o(r,"useSearchParams")&&t.d(e,{useSearchParams:function(){return r.useSearchParams}})},1261:function(n,e,t){"use strict";t.d(e,{default:function(){return s}});var r=t(2835),o=t(635),i=t(7473),a=t(4431);function s(){let n=(0,i.useParams)().id,[e,t]=(0,o.useState)([]),[s,u]=(0,o.useState)(!1),[c,d]=(0,o.useState)(null);async function l(){u(!0),d(null);try{let e=await fetch("".concat((0,a.Ox)(),"/matching/portraits/").concat(n,"/jobs"));if(!e.ok)throw Error("HTTP ".concat(e.status));t(await e.json())}catch(n){d(n.message)}finally{u(!1)}}return(0,r.jsxs)("div",{style:{padding:24,maxWidth:900,margin:"0 auto"},children:[(0,r.jsxs)("h1",{children:["人才 ",n.slice(0,8)," 的推荐职位"]}),(0,r.jsx)("button",{onClick:l,disabled:s,children:s?"计算中...":"刷新匹配"}),c&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:c}),(0,r.jsx)("div",{style:{marginTop:16},children:e.map(n=>{var e,t,o,i,a,s,u;return(0,r.jsxs)("div",{style:{border:"1px solid #ddd",borderRadius:8,padding:16,marginBottom:12},children:[(0,r.jsxs)("div",{style:{fontWeight:"bold"},children:["职位 ID: ",n.jobCaseId," — 综合分 ",null===(e=n.scores)||void 0===e?void 0:e.overall]}),(0,r.jsxs)("div",{style:{fontSize:13,color:"#555",marginTop:4},children:["技能 ",null===(t=n.scores)||void 0===t?void 0:t.skill," | 经验 ",null===(o=n.scores)||void 0===o?void 0:o.experience," | 行业 ",null===(i=n.scores)||void 0===i?void 0:i.industry," | 地点 ",null===(a=n.scores)||void 0===a?void 0:a.location," | 薪酬 ",null===(s=n.scores)||void 0===s?void 0:s.salary]}),(null===(u=n.recommendation)||void 0===u?void 0:u.aiReason)&&(0,r.jsx)("pre",{style:{marginTop:8,background:"#f5f5f5",padding:12,borderRadius:4,whiteSpace:"pre-wrap"},children:n.recommendation.aiReason})]},n.id)})})]})}},4431:function(n,e,t){"use strict";t.d(e,{Ox:function(){return i},rd:function(){return u},uz:function(){return c}});var r=t(7002),o=t(529);function i(){return o.env.HUNTER_MATE_SERVER_URL||""}let a=i();function s(n){let e=(0,r.Xc)();if(!e)return n;let t=new Headers(null==n?void 0:n.headers);return t.has("Authorization")||t.set("Authorization","UTOKEN ".concat(e)),{...n,headers:t}}async function u(n,e){try{let t=await fetch("".concat(a).concat(n),{cache:"no-store",...s(e)});if(!t.ok)return null;return await t.json()}catch(n){return null}}async function c(n,e){try{let t=await fetch("".concat(a).concat(n),s({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=e?JSON.stringify(e):void 0}));if(!t.ok)return null;return await t.json()}catch(n){return null}}},7002:function(n,e,t){"use strict";t.d(e,{GK:function(){return a},Lc:function(){return s},Xc:function(){return i}});let r=null,o=new Set;function i(){return r}function a(n){n!==r&&(r=n,o.forEach(n=>n()))}function s(n){return o.add(n),()=>{o.delete(n)}}}},function(n){n.O(0,[400,935,744],function(){return n(n.s=8166)}),_N_E=n.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="47bf3437-6106-46d3-813d-42e70e6074d5",e._sentryDebugIdIdentifier="sentry-dbid-47bf3437-6106-46d3-813d-42e70e6074d5")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{4947:function(e,t,n){Promise.resolve().then(n.bind(n,9145))},9145:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});var l=n(2835),r=n(635),o=n(5589),i=n(4431),a=n(8448);function s(){var e,t,n,s,u;let[c,d]=(0,r.useState)({}),[f,h]=(0,r.useState)(0),[m,y]=(0,r.useState)(null),[b,v]=(0,r.useState)(""),g=(0,r.useCallback)(async()=>{var e,t,n,l,r,o,s;let[u,c,f,m,b]=await Promise.all([(0,i.rd)("/entities?type=talent&limit=1"),(0,i.rd)("/entities?type=job&limit=1"),(0,i.rd)("/entities?type=company&limit=1"),(0,i.rd)("/parse-log?limit=1"),(0,i.rd)("/api/recordings?limit=1")]);y(!!(u||c||f||m||b)),d({talent:null!==(t=null==u?void 0:u.total)&&void 0!==t?t:0,job:null!==(n=null==c?void 0:c.total)&&void 0!==n?n:0,company:null!==(l=null==f?void 0:f.total)&&void 0!==l?l:0,parseLog:null!==(r=null==m?void 0:m.total)&&void 0!==r?r:0,recording:null!==(o=null==b?void 0:null===(e=b.sessions)||void 0===e?void 0:e.length)&&void 0!==o?o:0}),h(null!==(s=null==m?void 0:m.abnormal)&&void 0!==s?s:0),v((0,a.d3)(new Date().toISOString()))},[]);(0,r.useEffect)(()=>{g()},[g]);let p=[{key:"talent",label:"人才",href:"/talents",count:null!==(e=c.talent)&&void 0!==e?e:0},{key:"job",label:"职位",href:"/jobs",count:null!==(t=c.job)&&void 0!==t?t:0},{key:"company",label:"公司",href:"/companies",count:null!==(n=c.company)&&void 0!==n?n:0},{key:"parseLog",label:"解析日志",href:"/parselog",count:null!==(s=c.parseLog)&&void 0!==s?s:0,abnormal:f},{key:"recording",label:"录制会话",href:"/recordings",count:null!==(u=c.recording)&&void 0!==u?u:0}];return(0,l.jsxs)("div",{className:"h-full overflow-auto p-6",children:[(0,l.jsxs)("header",{className:"mb-6",children:[(0,l.jsx)("h1",{className:"text-2xl font-bold",children:"HunterMate 仪表盘"}),(0,l.jsxs)("p",{className:"mt-1 text-sm text-gray-500",children:["本地服务"," ",(0,l.jsx)("span",{className:m?"text-green-600":"text-red-600",children:null===m?"检测中…":m?"在线":"离线"}),b?" \xb7 刷新于 ".concat(b):""]})]}),(0,l.jsx)("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:p.map(e=>(0,l.jsxs)(o.default,{href:e.href,className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm transition-shadow hover:shadow-md",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between",children:[(0,l.jsx)("span",{className:"text-gray-500",children:e.label}),(0,l.jsx)("span",{className:"text-2xl font-bold text-gray-900",children:e.count})]}),e.abnormal?(0,l.jsxs)("div",{className:"mt-2 text-sm text-red-600",children:["异常 ",e.abnormal]}):null]},e.key))})]})}},8448:function(e,t,n){"use strict";function l(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}n.d(t,{d3:function(){return l}})},4431:function(e,t,n){"use strict";n.d(t,{Ox:function(){return o},rd:function(){return s},uz:function(){return u}});var l=n(7002),r=n(529);function o(){return r.env.HUNTER_MATE_SERVER_URL||""}let i=o();function a(e){let t=(0,l.Xc)();if(!t)return e;let n=new Headers(null==e?void 0:e.headers);return n.has("Authorization")||n.set("Authorization","UTOKEN ".concat(t)),{...e,headers:n}}async function s(e,t){try{let n=await fetch("".concat(i).concat(e),{cache:"no-store",...a(t)});if(!n.ok)return null;return await n.json()}catch(e){return null}}async function u(e,t){try{let n=await fetch("".concat(i).concat(e),a({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=t?JSON.stringify(t):void 0}));if(!n.ok)return null;return await n.json()}catch(e){return null}}},7002:function(e,t,n){"use strict";n.d(t,{GK:function(){return i},Lc:function(){return a},Xc:function(){return o}});let l=null,r=new Set;function o(){return l}function i(e){e!==l&&(l=e,r.forEach(e=>e()))}function a(e){return r.add(e),()=>{r.delete(e)}}}},function(e){e.O(0,[589,400,935,744],function(){return e(e.s=4947)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="b77cf750-fdab-4855-a258-f3298223e7ee",e._sentryDebugIdIdentifier="sentry-dbid-b77cf750-fdab-4855-a258-f3298223e7ee")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[788],{793:function(e,t,s){Promise.resolve().then(s.bind(s,4895))},7473:function(e,t,s){"use strict";var n=s(8321);s.o(n,"useParams")&&s.d(t,{useParams:function(){return n.useParams}}),s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}}),s.o(n,"useSearchParams")&&s.d(t,{useSearchParams:function(){return n.useSearchParams}})},4895:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return y}});var n=s(2835),r=s(635),a=s(7473),l=s(4431),o=s(7202),c=s(4518),i=s(3718),u=s(9036),d=s(5589),x=s(8448);let m={ok:"正常",empty:"关键字段为空","no-snapshot":"缺快照","no-rule":"无规则"},f={ok:"bg-green-50 text-green-700",empty:"bg-yellow-50 text-yellow-700","no-snapshot":"bg-red-50 text-red-700","no-rule":"bg-gray-100 text-gray-600"};function h(e){var t,s;let{item:r}=e;return(0,n.jsxs)("div",{className:"mx-auto max-w-4xl",children:[(0,n.jsx)(d.default,{href:"/parselog",className:"text-sm text-blue-600 hover:underline",children:"← 返回解析日志列表"}),(0,n.jsxs)("header",{className:"mt-4 mb-6",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,n.jsxs)("h1",{className:"text-2xl font-bold text-gray-900",children:["解析记录 #",r.id]}),(0,n.jsx)("span",{className:"rounded px-2 py-0.5 text-xs ".concat(f[r.status]),children:null!==(s=m[r.status])&&void 0!==s?s:r.status}),r.hasSnapshot?(0,n.jsx)("span",{className:"rounded bg-green-50 px-2 py-0.5 text-xs text-green-700",children:"有录制快照"}):null]}),(0,n.jsxs)("p",{className:"mt-1 text-sm text-gray-500",children:[r.domain," \xb7 ",r.pageClass," \xb7 ",(0,x.d3)(r.createdAt)]})]}),(0,n.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,n.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"来源"}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsxs)("div",{className:"text-sm",children:[(0,n.jsx)("span",{className:"text-gray-500",children:"sessionId: "}),(0,n.jsx)("span",{className:"font-mono",children:r.sessionId})]}),(0,n.jsx)("a",{href:r.sourceUrl,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:r.sourceUrl}),r.entityId?(0,n.jsxs)("div",{className:"pt-2",children:[(0,n.jsx)("span",{className:"text-sm text-gray-500",children:"关联实体: "}),(0,n.jsxs)(d.default,{href:"/".concat(r.pageClass,"s?id=").concat(r.entityId),className:"text-sm text-blue-600 hover:underline",children:["#",r.entityId," (",r.pageClass,")"]})]}):null]})]}),r.extractedFields?(0,n.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,n.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"提取字段"}),(0,n.jsx)("pre",{className:"max-h-96 overflow-auto rounded bg-gray-50 p-3 text-xs text-gray-700",children:JSON.stringify(r.extractedFields,null,2)})]}):null,(null===(t=r.missingFields)||void 0===t?void 0:t.length)?(0,n.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,n.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"缺失字段(疑似站点改版)"}),(0,n.jsx)("ul",{className:"list-inside list-disc text-sm text-gray-700",children:r.missingFields.map(e=>(0,n.jsx)("li",{children:e},e))})]}):null]})}let g=[{value:"ok",label:"正常"},{value:"empty",label:"关键字段为空"},{value:"no-snapshot",label:"缺快照"},{value:"no-rule",label:"无规则"}],b={ok:"bg-green-50 text-green-700",empty:"bg-yellow-50 text-yellow-700","no-snapshot":"bg-red-50 text-red-700","no-rule":"bg-gray-100 text-gray-600"};function p(e){let t=new URLSearchParams;Object.entries(e).forEach(e=>{let[s,n]=e;n&&t.set(s,n)});let s=t.toString();return s?"?".concat(s):""}function v(){let e=(0,a.useRouter)(),t=(0,a.usePathname)(),s=(0,a.useSearchParams)(),d=s.get("id")||"",m=(0,r.useMemo)(()=>({q:s.get("q")||"",status:s.get("status")||"",from:s.get("from")||"",to:s.get("to")||""}),[s]),[f,v]=(0,r.useState)(null),[y,j]=(0,r.useState)(null),[N,w]=(0,r.useState)(!0),[S,k]=(0,r.useState)(!1),[E,C]=(0,r.useState)(0),I=(0,r.useCallback)(s=>{var n,r;let a=null!==(n=s.filters)&&void 0!==n?n:m,l=p({id:null!==(r=s.id)&&void 0!==r?r:d,q:a.q,status:a.status,from:a.from,to:a.to});e.replace("".concat(t).concat(l))},[m,d,t,e]),P=(0,r.useCallback)(()=>{C(e=>e+1)},[]),q=(0,r.useCallback)(()=>{let e=null==f?void 0:f.items[0];return null==e?void 0:e.createdAt},[f]);(0,r.useEffect)(()=>{w(!0);let e=p({q:m.q,status:m.status,from:m.from,to:m.to});(0,l.rd)("/parse-log?limit=200".concat(e.replace("?","&"))).then(e=>{v(e),w(!1)})},[m.q,m.status,m.from,m.to,E]),(0,r.useEffect)(()=>{if(!d){j(null);return}k(!0),(0,l.rd)("/parse-log/".concat(d)).then(e=>{j(e),k(!1)})},[d]);let R=(0,r.useMemo)(()=>{var e;return(null!==(e=null==f?void 0:f.items)&&void 0!==e?e:[]).map(e=>({id:String(e.id),content:(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat(b[e.status]),children:e.status}),(0,n.jsx)("span",{className:"text-xs text-gray-500",children:e.pageClass})]}),(0,n.jsx)("div",{className:"mt-0.5 text-sm font-medium text-gray-900",children:e.domain}),(0,n.jsx)("div",{className:"text-xs text-gray-400",children:(0,x.d3)(e.createdAt)})]})}))},[f]),_=d?S?(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):y?(0,n.jsx)(h,{item:y}):(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该解析日志"}):(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一条解析日志查看详情"});return(0,n.jsx)(c.m,{filterBar:(0,n.jsxs)("div",{className:"border-b border-gray-200 bg-white",children:[(0,n.jsx)(o.f,{value:m,showStatus:!0,statusOptions:g,onChange:e=>I({filters:e})}),f?(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 pb-2 text-xs text-gray-500",children:[(0,n.jsxs)("span",{children:["共 ",f.total," 条"]}),f.abnormal>0?(0,n.jsxs)("span",{className:"rounded bg-red-50 px-1.5 py-0.5 text-red-700",children:["异常 ",f.abnormal]}):null]}):null,(0,n.jsx)(u.Y,{pollUrl:"/parse-log/count",getLatestTimestamp:q,onRefresh:P,label:"解析日志"})]}),listPanel:(0,n.jsx)(i.L,{items:R,selectedId:d,onSelect:e=>I({id:e}),loading:N,emptyText:"暂无解析日志"}),detailPanel:_})}function y(){return(0,n.jsx)(r.Suspense,{fallback:(0,n.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,n.jsx)(v,{})})}},7202:function(e,t,s){"use strict";s.d(t,{f:function(){return a}});var n=s(2835),r=s(635);function a(e){let{value:t,showStatus:s,statusOptions:a,onChange:l}=e,[o,c]=(0,r.useState)(t);return(0,r.useEffect)(()=>{c(t)},[t.q,t.status,t.from,t.to]),(0,r.useEffect)(()=>{let e=setTimeout(()=>{(o.q!==t.q||o.status!==t.status||o.from!==t.from||o.to!==t.to)&&l(o)},300);return()=>clearTimeout(e)},[o.q,o.status,o.from,o.to]),(0,n.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("div",{className:"relative flex-1",children:[(0,n.jsx)("input",{type:"text",value:o.q,onChange:e=>c(t=>({...t,q:e.target.value})),placeholder:"搜索关键词...",className:"w-full rounded border border-gray-300 px-2 py-1.5 pr-8 text-sm outline-none focus:border-blue-500"}),(0,n.jsx)("button",{type:"button",onClick:()=>l({q:"",status:"",from:"",to:""}),title:"重置筛选",className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600 disabled:opacity-30",disabled:!o.q&&!o.status&&!o.from&&!o.to,children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),s?(0,n.jsxs)("select",{value:o.status,onChange:e=>c(t=>({...t,status:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500",children:[(0,n.jsx)("option",{value:"",children:"全部状态"}),(a||[]).map(e=>(0,n.jsx)("option",{value:e.value,children:e.label},e.value))]}):null]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("input",{type:"date",value:o.from,onChange:e=>c(t=>({...t,from:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),(0,n.jsx)("span",{className:"text-sm text-gray-400",children:"-"}),(0,n.jsx)("input",{type:"date",value:o.to,onChange:e=>c(t=>({...t,to:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"})]})]})}},4518:function(e,t,s){"use strict";s.d(t,{m:function(){return r}});var n=s(2835);function r(e){let{filterBar:t,listPanel:s,detailPanel:r}=e;return(0,n.jsxs)("div",{className:"flex h-full",children:[(0,n.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,s]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:r})]})}},3718:function(e,t,s){"use strict";s.d(t,{L:function(){return a}});var n=s(2835),r=s(635);function a(e){let{items:t,selectedId:s,onSelect:a,loading:l,emptyText:o="暂无数据",onLoadMore:c,loadingMore:i,exhausted:u}=e,d=(0,r.useRef)(null);return(0,r.useEffect)(()=>{if(!c)return;let e=d.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&c()},{root:e.closest(".overflow-auto"),rootMargin:"200px"});return t.observe(e),()=>t.disconnect()},[c]),(0,n.jsxs)("div",{className:"flex-1 overflow-auto",children:[l?(0,n.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,n.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:o}):(0,n.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,n.jsx)("li",{role:"button",tabIndex:0,onClick:()=>a(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&a(e.id)},className:"cursor-pointer px-3 py-2 text-sm transition-colors ".concat(s===e.id?"bg-blue-50":"hover:bg-gray-50"),children:e.content},e.id))}),c&&!l&&t.length>0&&(0,n.jsx)("div",{ref:d,className:"p-3 text-center text-xs text-gray-400",children:i?"加载更多…":u?"没有更多了":""})]})}},9036:function(e,t,s){"use strict";s.d(t,{Y:function(){return l}});var n=s(2835),r=s(635),a=s(4431);function l(e){let{pollUrl:t,intervalMs:s=5e3,onRefresh:l,getLatestTimestamp:o,label:c="新数据"}=e,[i,u]=(0,r.useState)(0),[d,x]=(0,r.useState)(!1),m=(0,r.useRef)(void 0);return((0,r.useEffect)(()=>{let e=()=>x(document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]),(0,r.useEffect)(()=>{m.current=o(),u(0)},[o]),(0,r.useEffect)(()=>{if(d)return;let e=async()=>{var e;let s=m.current;if(!s)return;let n=t.includes("?")?"&":"?",r=await (0,a.rd)("".concat(t).concat(n,"since=").concat(encodeURIComponent(s))).catch(()=>null),l=null!==(e=null==r?void 0:r.count)&&void 0!==e?e:0;u(e=>Math.max(e,l))};e();let n=setInterval(e,s);return()=>clearInterval(n)},[t,s,d]),i<=0)?null:(0,n.jsxs)("button",{type:"button",onClick:()=>{u(0),l()},className:"w-full bg-blue-50 px-3 py-2 text-center text-sm text-blue-700 hover:bg-blue-100 active:bg-blue-200",children:["有 ",i," 条",c,",点击刷新"]})}},8448:function(e,t,s){"use strict";function n(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}s.d(t,{d3:function(){return n}})},4431:function(e,t,s){"use strict";s.d(t,{Ox:function(){return a},rd:function(){return c},uz:function(){return i}});var n=s(7002),r=s(529);function a(){return r.env.HUNTER_MATE_SERVER_URL||""}let l=a();function o(e){let t=(0,n.Xc)();if(!t)return e;let s=new Headers(null==e?void 0:e.headers);return s.has("Authorization")||s.set("Authorization","UTOKEN ".concat(t)),{...e,headers:s}}async function c(e,t){try{let s=await fetch("".concat(l).concat(e),{cache:"no-store",...o(t)});if(!s.ok)return null;return await s.json()}catch(e){return null}}async function i(e,t){try{let s=await fetch("".concat(l).concat(e),o({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=t?JSON.stringify(t):void 0}));if(!s.ok)return null;return await s.json()}catch(e){return null}}},7002:function(e,t,s){"use strict";s.d(t,{GK:function(){return l},Lc:function(){return o},Xc:function(){return a}});let n=null,r=new Set;function a(){return n}function l(e){e!==n&&(n=e,r.forEach(e=>e()))}function o(e){return r.add(e),()=>{r.delete(e)}}}},function(e){e.O(0,[589,400,935,744],function(){return e(e.s=793)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="2ff91f26-db40-4f72-9c0d-e2b0ef358baf",e._sentryDebugIdIdentifier="sentry-dbid-2ff91f26-db40-4f72-9c0d-e2b0ef358baf")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[370],{1428:function(e,t,n){Promise.resolve().then(n.bind(n,6297))},7473:function(e,t,n){"use strict";var s=n(8321);n.o(s,"useParams")&&n.d(t,{useParams:function(){return s.useParams}}),n.o(s,"usePathname")&&n.d(t,{usePathname:function(){return s.usePathname}}),n.o(s,"useRouter")&&n.d(t,{useRouter:function(){return s.useRouter}}),n.o(s,"useSearchParams")&&n.d(t,{useSearchParams:function(){return s.useSearchParams}})},6297:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return R}});var s=n(2835),r=n(635),l=n(7473),a=n(4431),i=n(7202),o=n(4518),d=n(8448);function c(e){var t,n,r,l,a;let{sessionId:i,eventCount:o,sourceUrl:c,startedAt:u,lastEventAt:x,summary:m}=e,v=[{label:"rrweb",value:null!==(t=null==m?void 0:m.rrwebCount)&&void 0!==t?t:0},{label:"network",value:null!==(n=null==m?void 0:m.networkCount)&&void 0!==n?n:0},{label:"console",value:null!==(r=null==m?void 0:m.consoleCount)&&void 0!==r?r:0},{label:"简历",value:null!==(l=null==m?void 0:m.resumeCount)&&void 0!==l?l:0},{label:"操作",value:null!==(a=null==m?void 0:m.actionCount)&&void 0!==a?a:0}].filter(e=>e.value>0);return(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-sm text-gray-500",children:"事件数"}),(0,s.jsx)("div",{className:"text-lg font-semibold",children:o})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-sm text-gray-500",children:"来源页面"}),c?(0,s.jsx)("a",{href:c,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:c}):(0,s.jsx)("div",{className:"text-sm text-gray-400",children:"-"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-sm text-gray-500",children:"开始时间"}),(0,s.jsx)("div",{className:"text-sm",children:(0,d.d3)(u)})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-sm text-gray-500",children:"最近事件"}),(0,s.jsx)("div",{className:"text-sm",children:(0,d.d3)(x)})]})]}),v.length>0?(0,s.jsx)("div",{className:"mt-3 flex flex-wrap gap-2 border-t border-gray-100 pt-3",children:v.map(e=>(0,s.jsxs)("span",{className:"rounded bg-gray-100 px-2 py-1 text-xs text-gray-700",children:[e.label,": ",e.value]},e.label))}):null,(0,s.jsx)("div",{className:"mt-3 border-t border-gray-100 pt-3",children:(0,s.jsx)("div",{className:"font-mono text-xs text-gray-400",children:i})})]})}let u={rrweb:"rrweb",network:"network",console:"console",resume:"简历",action:"操作"},x={rrweb:"bg-purple-100 text-purple-700",network:"bg-blue-100 text-blue-700",console:"bg-yellow-100 text-yellow-700",resume:"bg-green-100 text-green-700",action:"bg-gray-100 text-gray-700"};function m(e){var t,n;let{type:r}=e,l=null!==(t=u[r])&&void 0!==t?t:r,a=null!==(n=x[r])&&void 0!==n?n:"bg-gray-100 text-gray-600";return(0,s.jsx)("span",{className:"inline-flex items-center rounded px-2 py-0.5 text-xs font-medium ".concat(a),children:l})}let v=["rrweb","network","console","resume","action"];function h(e){let{events:t,selectedEventId:n,onSelectEvent:l}=e,[a,i]=(0,r.useState)("all"),o=(0,r.useMemo)(()=>{let e=[...t].sort((e,t)=>new Date(e.createdAt).getTime()-new Date(t.createdAt).getTime());return"all"===a?e:e.filter(e=>e.eventType===a)},[t,a]);return(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsxs)("div",{className:"mb-4 flex flex-wrap items-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>i("all"),className:"rounded px-2 py-1 text-xs ".concat("all"===a?"bg-gray-800 text-white":"border border-gray-300 text-gray-600 hover:bg-gray-50"),children:"全部"}),v.map(e=>(0,s.jsx)("button",{type:"button",onClick:()=>i(e),className:"rounded px-2 py-1 text-xs ".concat(a===e?"bg-gray-800 text-white":"border border-gray-300 text-gray-600 hover:bg-gray-50"),children:(0,s.jsx)(m,{type:e})},e))]}),(0,s.jsx)("div",{className:"max-h-96 overflow-auto",children:0===o.length?(0,s.jsx)("div",{className:"py-8 text-center text-sm text-gray-400",children:"暂无事件"}):(0,s.jsx)("ul",{className:"space-y-1",children:o.map((e,t)=>{var r;return(0,s.jsxs)("li",{role:l?"button":void 0,tabIndex:l?0:void 0,onClick:()=>null==l?void 0:l(e),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(null==l||l(e))},className:"flex items-start gap-3 rounded p-2 text-sm ".concat(l?"cursor-pointer hover:bg-gray-50":""," ").concat(n===e.id?"bg-blue-50":""),children:[(0,s.jsx)(m,{type:e.eventType}),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("div",{className:"truncate text-gray-900",children:function(e){var t,n,s,r,l,a,i;let{eventType:o,payload:d}=e;switch(o){case"rrweb":return"rrweb ".concat(null!==(t=null==d?void 0:d.type)&&void 0!==t?t:"event");case"network":return"".concat(null!==(n=null==d?void 0:d.method)&&void 0!==n?n:"GET"," ").concat(null!==(s=null==d?void 0:d.url)&&void 0!==s?s:"?");case"console":return"[".concat(null!==(l=null==d?void 0:d.level)&&void 0!==l?l:"log","] ").concat(String(null!==(a=null==d?void 0:null===(r=d.args)||void 0===r?void 0:r[0])&&void 0!==a?a:""));case"resume":return"简历提取事件";case"action":return null!==(i=null==d?void 0:d.action)&&void 0!==i?i:"操作事件";default:return o}}(e)}),(0,s.jsx)("div",{className:"text-xs text-gray-400",children:(0,d.d3)(e.createdAt)})]})]},null!==(r=e.id)&&void 0!==r?r:t)})})})]})}function f(e){let{data:t}=e;return(0,s.jsx)("pre",{className:"max-h-64 overflow-auto rounded bg-gray-50 p-3 text-xs text-gray-700",children:JSON.stringify(t,null,2)})}function g(e){var t;let{event:n}=e,r=n.payload,l=(null==r?void 0:r.type)===2?"全量快照":(null==r?void 0:r.type)===3?"增量":"类型 ".concat(null!==(t=null==r?void 0:r.type)&&void 0!==t?t:"?");return(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{className:"text-sm text-gray-500",children:["rrweb ",l," \xb7 ",n.sourceUrl?(0,s.jsx)("a",{href:n.sourceUrl,target:"_blank",rel:"noreferrer",className:"text-blue-600 hover:underline",children:n.sourceUrl}):"来源未知"]}),(0,s.jsx)("div",{className:"rounded border border-purple-100 bg-purple-50 p-3 text-sm text-purple-700",children:"rrweb-player 完整回放将在后续迭代接入,当前可查看下方原始 JSON。"}),(0,s.jsx)(f,{data:n.payload})]})}function b(e){var t,n,r,l;let{event:a}=e,i=a.payload;return(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-xs text-gray-500",children:"Method"}),(0,s.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==i?void 0:i.method)&&void 0!==t?t:"?"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-xs text-gray-500",children:"Status"}),(0,s.jsx)("div",{className:"text-sm font-medium",children:null!==(n=null==i?void 0:i.status)&&void 0!==n?n:"?"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-xs text-gray-500",children:"MIME"}),(0,s.jsx)("div",{className:"text-sm font-medium",children:null!==(r=null==i?void 0:i.mimeType)&&void 0!==r?r:"?"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-xs text-gray-500",children:"Size"}),(0,s.jsx)("div",{className:"text-sm font-medium",children:null!==(l=null==i?void 0:i.size)&&void 0!==l?l:"?"})]})]}),(null==i?void 0:i.url)?(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-xs text-gray-500",children:"URL"}),(0,s.jsx)("a",{href:i.url,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:i.url})]}):null,(0,s.jsx)(f,{data:a.payload})]})}function y(e){var t,n,r,l;let{event:a}=e,i=a.payload,o=null!==(r=({error:"text-red-600",warn:"text-yellow-600",info:"text-blue-600",debug:"text-gray-500",log:"text-gray-700"})[null!==(n=null==i?void 0:i.level)&&void 0!==n?n:"log"])&&void 0!==r?r:"text-gray-700";return(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{className:"text-sm",children:["Level: ",(0,s.jsx)("span",{className:"font-medium ".concat(o),children:null!==(l=null==i?void 0:i.level)&&void 0!==l?l:"log"})]}),(null==i?void 0:null===(t=i.args)||void 0===t?void 0:t.length)?(0,s.jsx)("div",{className:"space-y-2",children:i.args.map((e,t)=>(0,s.jsx)(f,{data:e},t))}):(0,s.jsx)(f,{data:a.payload})]})}function p(e){var t;let{event:n}=e,r=n.payload;return(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==r?void 0:r.title)&&void 0!==t?t:"简历提取事件"}),(null==r?void 0:r.source)?(0,s.jsxs)("div",{className:"text-xs text-gray-500",children:["来源: ",(0,s.jsx)("a",{href:r.source,target:"_blank",rel:"noreferrer",className:"text-blue-600 hover:underline",children:r.source})]}):null,(null==r?void 0:r.fields)?(0,s.jsx)(f,{data:r.fields}):(0,s.jsx)(f,{data:n.payload})]})}function j(e){var t;let{event:n}=e,r=n.payload;return(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==r?void 0:r.action)&&void 0!==t?t:"操作事件"}),(0,s.jsx)(f,{data:n.payload})]})}function N(e){let t,{event:n}=e,[l,a]=(0,r.useState)(!1);switch(n.eventType){case"rrweb":t=(0,s.jsx)(g,{event:n});break;case"network":t=(0,s.jsx)(b,{event:n});break;case"console":t=(0,s.jsx)(y,{event:n});break;case"resume":t=(0,s.jsx)(p,{event:n});break;case"action":t=(0,s.jsx)(j,{event:n});break;default:t=(0,s.jsx)(f,{data:n.payload})}return(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"事件详情"}),(0,s.jsx)("button",{type:"button",onClick:()=>a(e=>!e),className:"rounded border border-gray-300 px-3 py-1 text-sm hover:bg-gray-50",children:l?"收起原始 JSON":"查看原始 JSON"})]}),t,l?(0,s.jsx)("div",{className:"mt-3",children:(0,s.jsx)(f,{data:n})}):null]})}function w(e){let{sessionId:t}=e,[n,l]=(0,r.useState)("idle"),[i,o]=(0,r.useState)(null),[d,c]=(0,r.useState)("");async function u(){l("loading"),c("");try{let e=await (0,a.rd)("/api/recordings/".concat(encodeURIComponent(t),"/parse"),{method:"POST"});if(null===e){l("error"),c("解析请求失败,请稍后重试");return}o(e),l("success")}catch(e){l("error"),c(e instanceof Error?e.message:String(e))}}let x=i&&"object"==typeof i&&"entity"in i&&i.entity&&"object"==typeof i.entity&&"id"in i.entity&&"type"in i.entity?"/entity?type=".concat(encodeURIComponent(String(i.entity.type)),"&id=").concat(encodeURIComponent(String(i.entity.id))):null;return(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"解析"}),(0,s.jsx)("button",{type:"button",onClick:u,disabled:"loading"===n,className:"rounded bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 disabled:opacity-50",children:"loading"===n?"解析中…":"触发解析"})]}),"success"===n?(0,s.jsxs)("div",{className:"mt-3 rounded border border-green-200 bg-green-50 p-3 text-sm text-green-700",children:[(0,s.jsx)("div",{children:"解析成功 ✅"}),x?(0,s.jsx)("a",{href:x,className:"mt-1 inline-block text-blue-600 hover:underline",children:"查看解析结果 →"}):null]}):null,"error"===n?(0,s.jsxs)("div",{className:"mt-3 rounded border border-red-200 bg-red-50 p-3 text-sm text-red-700",children:[(0,s.jsx)("div",{children:"解析失败"}),d?(0,s.jsx)("div",{className:"mt-1",children:d}):null]}):null]})}function k(e){let{events:t}=e,l=(0,r.useRef)(null),[a,i]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{let e;if(!l.current||0===t.length)return;let s=!1;return async function(){let r=await Promise.all([n.e(131),n.e(671)]).then(n.bind(n,5841));await Promise.all([n.e(608),n.e(166)]).then(n.t.bind(n,166,23)),!s&&l.current&&(e=new(r.default||r)({target:l.current,props:{events:t}}),i(!0))}(),()=>{var t;s=!0,null==e||null===(t=e.$destroy)||void 0===t||t.call(e),l.current&&(l.current.innerHTML="")}},[t]),0===t.length)?(0,s.jsx)("div",{className:"rounded border border-gray-200 bg-white p-4 shadow-sm text-sm text-gray-500",children:"暂无 rrweb 回放事件"}):(0,s.jsxs)("div",{className:"rounded border border-gray-200 bg-white p-4 shadow-sm",children:[(0,s.jsx)("div",{ref:l,className:"w-full"}),a?null:(0,s.jsx)("div",{className:"text-sm text-gray-500",children:"播放器加载中…"})]})}function S(e){let{data:t}=e,n=(0,l.useSearchParams)().get("eventId"),[a,i]=(0,r.useState)(null),[o,d]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(!n||!t.events.length){i(null);return}let e=Number(n),s=t.events.find(t=>t.id===e);i(null!=s?s:null)},[n,t.events]);let u=t.events.filter(e=>"rrweb"===e.eventType).map(e=>e.payload);return(0,s.jsxs)("div",{className:"mx-auto max-w-4xl",children:[(0,s.jsx)("header",{className:"mb-6",children:(0,s.jsx)("h1",{className:"text-2xl font-bold text-gray-900",children:"录制会话"})}),(0,s.jsx)(c,{sessionId:t.sessionId,eventCount:t.eventCount,sourceUrl:t.sourceUrl,startedAt:t.startedAt,lastEventAt:t.lastEventAt,summary:t.summary}),(0,s.jsx)("div",{className:"mt-4",children:(0,s.jsx)(k,{events:u})}),(0,s.jsx)("div",{className:"mt-4",children:(0,s.jsx)(w,{sessionId:t.sessionId})}),(0,s.jsx)("div",{className:"mt-4",children:(0,s.jsx)(h,{events:t.events,selectedEventId:null==a?void 0:a.id,onSelectEvent:i})}),a?(0,s.jsx)("div",{className:"mt-4",children:(0,s.jsx)(N,{event:a})}):null,(0,s.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"原始事件 JSON"}),(0,s.jsx)("button",{type:"button",onClick:()=>d(e=>!e),className:"rounded border border-gray-300 px-3 py-1 text-sm hover:bg-gray-50",children:o?"收起":"展开"})]}),o?(0,s.jsx)("pre",{className:"max-h-96 overflow-auto rounded bg-gray-50 p-3 text-xs text-gray-700",children:JSON.stringify(t.events,null,2)}):(0,s.jsxs)("div",{className:"text-sm text-gray-500",children:["共 ",t.events.length," 条事件,点击展开查看原始 JSON"]})]})]})}var I=n(3718);function C(e){let{session:t}=e;return(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"font-mono text-xs text-gray-500",children:t.sessionId}),(0,s.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-gray-900",children:[(0,s.jsxs)("span",{children:[t.eventCount," 事件"]}),"number"==typeof t.tabId?(0,s.jsxs)("span",{className:"rounded bg-gray-100 px-1.5 py-0.5 text-xs text-gray-600",children:["tab #",t.tabId]}):null]}),t.sourceUrl?(0,s.jsx)("div",{className:"truncate text-xs text-blue-600",children:t.sourceUrl}):null,(0,s.jsx)("div",{className:"text-xs text-gray-400",children:(0,d.d3)(t.lastEventAt)})]})}function E(e){let{sessions:t,selectedId:n,onSelect:r,loading:l}=e,a=t.map(e=>({id:e.sessionId,content:(0,s.jsx)(C,{session:e})}));return(0,s.jsx)(I.L,{items:a,selectedId:n,onSelect:r,loading:l,emptyText:"暂无录制会话"})}function L(e){let t=new URLSearchParams;Object.entries(e).forEach(e=>{let[n,s]=e;s&&t.set(n,s)});let n=t.toString();return n?"?".concat(n):""}function P(){var e,t,n,d;let c=(0,l.useRouter)(),u=(0,l.usePathname)(),x=(0,l.useSearchParams)(),m=x.get("sessionId")||"",v=(0,r.useMemo)(()=>({q:x.get("q")||"",status:"",from:x.get("from")||"",to:x.get("to")||""}),[x]),[h,f]=(0,r.useState)([]),[g,b]=(0,r.useState)(null),[y,p]=(0,r.useState)(!0),[j,N]=(0,r.useState)(!1),w=(0,r.useCallback)(e=>{var t,n;let s=null!==(t=e.filters)&&void 0!==t?t:v,r=L({sessionId:null!==(n=e.sessionId)&&void 0!==n?n:m,q:s.q,from:s.from,to:s.to});c.replace("".concat(u).concat(r))},[v,m,u,c]),k=(0,r.useCallback)(e=>{(null==e?void 0:e.withLoading)&&p(!0);let t=L({q:v.q,from:v.from,to:v.to});(0,a.rd)("/api/recordings?limit=200".concat(t.replace("?","&"))).then(t=>{f(e=>{var n;return function(e,t){let n=new Map(e.map(e=>[e.sessionId,e]));return t.map(e=>{let t=n.get(e.sessionId);return t&&t.eventCount===e.eventCount&&t.lastEventAt===e.lastEventAt&&t.tabId===e.tabId?t:{...e}})}(e,null!==(n=null==t?void 0:t.sessions)&&void 0!==n?n:[])}),(null==e?void 0:e.withLoading)&&p(!1)})},[v.q,v.from,v.to]),I=(0,r.useCallback)(e=>{if(!m){b(null);return}(null==e?void 0:e.withLoading)&&N(!0),(0,a.rd)("/api/recordings/".concat(encodeURIComponent(m))).then(t=>{b(t),(null==e?void 0:e.withLoading)&&N(!1)})},[m]);(0,r.useEffect)(()=>{k({withLoading:!0})},[k]),(0,r.useEffect)(()=>{let e=setInterval(()=>k({withLoading:!1}),1e4);return()=>clearInterval(e)},[k]),(0,r.useEffect)(()=>{I({withLoading:!0})},[I]),(0,r.useEffect)(()=>{let e=setInterval(()=>I({withLoading:!1}),1e4);return()=>clearInterval(e)},[I]);let C=(0,s.jsx)(E,{sessions:h,selectedId:m,onSelect:e=>w({sessionId:e}),loading:y}),P=m?j?(0,s.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):g?(0,s.jsx)(S,{data:{sessionId:g.sessionId,eventCount:g.eventCount,sourceUrl:null!==(d=null===(e=h.find(e=>e.sessionId===m))||void 0===e?void 0:e.sourceUrl)&&void 0!==d?d:null,startedAt:(null===(t=g.events[0])||void 0===t?void 0:t.createdAt)||"",lastEventAt:(null===(n=g.events[g.events.length-1])||void 0===n?void 0:n.createdAt)||"",events:g.events}}):(0,s.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该录制会话"}):(0,s.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一个录制会话查看详情"});return(0,s.jsx)(o.m,{filterBar:(0,s.jsx)(i.f,{value:v,onChange:e=>w({filters:e})}),listPanel:C,detailPanel:P})}function R(){return(0,s.jsx)(r.Suspense,{fallback:(0,s.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,s.jsx)(P,{})})}},7202:function(e,t,n){"use strict";n.d(t,{f:function(){return l}});var s=n(2835),r=n(635);function l(e){let{value:t,showStatus:n,statusOptions:l,onChange:a}=e,[i,o]=(0,r.useState)(t);return(0,r.useEffect)(()=>{o(t)},[t.q,t.status,t.from,t.to]),(0,r.useEffect)(()=>{let e=setTimeout(()=>{(i.q!==t.q||i.status!==t.status||i.from!==t.from||i.to!==t.to)&&a(i)},300);return()=>clearTimeout(e)},[i.q,i.status,i.from,i.to]),(0,s.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)("div",{className:"relative flex-1",children:[(0,s.jsx)("input",{type:"text",value:i.q,onChange:e=>o(t=>({...t,q:e.target.value})),placeholder:"搜索关键词...",className:"w-full rounded border border-gray-300 px-2 py-1.5 pr-8 text-sm outline-none focus:border-blue-500"}),(0,s.jsx)("button",{type:"button",onClick:()=>a({q:"",status:"",from:"",to:""}),title:"重置筛选",className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600 disabled:opacity-30",disabled:!i.q&&!i.status&&!i.from&&!i.to,children:(0,s.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),n?(0,s.jsxs)("select",{value:i.status,onChange:e=>o(t=>({...t,status:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500",children:[(0,s.jsx)("option",{value:"",children:"全部状态"}),(l||[]).map(e=>(0,s.jsx)("option",{value:e.value,children:e.label},e.value))]}):null]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("input",{type:"date",value:i.from,onChange:e=>o(t=>({...t,from:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),(0,s.jsx)("span",{className:"text-sm text-gray-400",children:"-"}),(0,s.jsx)("input",{type:"date",value:i.to,onChange:e=>o(t=>({...t,to:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"})]})]})}},4518:function(e,t,n){"use strict";n.d(t,{m:function(){return r}});var s=n(2835);function r(e){let{filterBar:t,listPanel:n,detailPanel:r}=e;return(0,s.jsxs)("div",{className:"flex h-full",children:[(0,s.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,n]}),(0,s.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:r})]})}},3718:function(e,t,n){"use strict";n.d(t,{L:function(){return l}});var s=n(2835),r=n(635);function l(e){let{items:t,selectedId:n,onSelect:l,loading:a,emptyText:i="暂无数据",onLoadMore:o,loadingMore:d,exhausted:c}=e,u=(0,r.useRef)(null);return(0,r.useEffect)(()=>{if(!o)return;let e=u.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&o()},{root:e.closest(".overflow-auto"),rootMargin:"200px"});return t.observe(e),()=>t.disconnect()},[o]),(0,s.jsxs)("div",{className:"flex-1 overflow-auto",children:[a?(0,s.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,s.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:i}):(0,s.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,s.jsx)("li",{role:"button",tabIndex:0,onClick:()=>l(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&l(e.id)},className:"cursor-pointer px-3 py-2 text-sm transition-colors ".concat(n===e.id?"bg-blue-50":"hover:bg-gray-50"),children:e.content},e.id))}),o&&!a&&t.length>0&&(0,s.jsx)("div",{ref:u,className:"p-3 text-center text-xs text-gray-400",children:d?"加载更多…":c?"没有更多了":""})]})}},8448:function(e,t,n){"use strict";function s(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}n.d(t,{d3:function(){return s}})},4431:function(e,t,n){"use strict";n.d(t,{Ox:function(){return l},rd:function(){return o},uz:function(){return d}});var s=n(7002),r=n(529);function l(){return r.env.HUNTER_MATE_SERVER_URL||""}let a=l();function i(e){let t=(0,s.Xc)();if(!t)return e;let n=new Headers(null==e?void 0:e.headers);return n.has("Authorization")||n.set("Authorization","UTOKEN ".concat(t)),{...e,headers:n}}async function o(e,t){try{let n=await fetch("".concat(a).concat(e),{cache:"no-store",...i(t)});if(!n.ok)return null;return await n.json()}catch(e){return null}}async function d(e,t){try{let n=await fetch("".concat(a).concat(e),i({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=t?JSON.stringify(t):void 0}));if(!n.ok)return null;return await n.json()}catch(e){return null}}},7002:function(e,t,n){"use strict";n.d(t,{GK:function(){return a},Lc:function(){return i},Xc:function(){return l}});let s=null,r=new Set;function l(){return s}function a(e){e!==s&&(s=e,r.forEach(e=>e()))}function i(e){return r.add(e),()=>{r.delete(e)}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=1428)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="407150c1-9162-4005-9013-32f6ac92ceaf",e._sentryDebugIdIdentifier="sentry-dbid-407150c1-9162-4005-9013-32f6ac92ceaf")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[514],{9155:function(e,t,s){Promise.resolve().then(s.bind(s,611))},611:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return A}});var r=s(2835),n=s(635),a=s(4431),l=s(470),i=s(8983),c=s(953),o=s(8532),d=s(2857),u=s(1970),m=s(3284),h=s(5963),x=s(7557),p=s(3551);let y=["#2563eb","#16a34a","#f59e0b","#dc2626","#7c3aed","#0891b2"],f={hm:"hunter-mate",hmh:"harness 工具链",extra:"其他"},g={hm:"#2563eb",hmh:"#16a34a",extra:"#94a3b8"};function j(e){if(!Number.isFinite(e)||e<0)return"-";let t=["B","KB","MB","GB","TB"],s=e,r=0;for(;s>=1024&&r<t.length-1;)s/=1024,r++;return"".concat(s>=100||0===r?Math.round(s):s.toFixed(1)," ").concat(t[r])}function b(e){let t=new Date(e);return"".concat(String(t.getMonth()+1).padStart(2,"0"),"-").concat(String(t.getDate()).padStart(2,"0")," ").concat(String(t.getHours()).padStart(2,"0"),":").concat(String(t.getMinutes()).padStart(2,"0"))}function v(e){let t=new Date(e);return"".concat(String(t.getHours()).padStart(2,"0"),":").concat(String(t.getMinutes()).padStart(2,"0"),":").concat(String(t.getSeconds()).padStart(2,"0"))}function N(e){return e.group?e.group:e.key.startsWith("hunter-mate-h")?"hmh":e.key.startsWith("hunter-mate-")?"hm":"extra"}function w(e){return e.group?e.group:/hunter-mate-harness|chromepilot|hmx/i.test(e.cmd)||/hmx|chromepilot/i.test(e.name)?"hmh":"hm"}function S(e){let{title:t,children:s}=e;return(0,r.jsxs)("section",{className:"rounded-xl border border-gray-200 bg-white p-4",children:[(0,r.jsx)("h3",{className:"mb-3 text-sm font-medium text-gray-700",children:t}),s]})}let k=(0,n.memo)(function(e){let{items:t}=e,s=Array.from(new Set(t.flatMap(e=>e.paths.map(e=>e.key)))),n=t.map(e=>{let t={ts:b(e.ts)};for(let s of e.paths)t[s.key]=Number((s.totalBytes/1073741824).toFixed(3));return t});return(0,r.jsx)(S,{title:"磁盘占用趋势(按受监控路径,GB)",children:(0,r.jsx)(l.h,{width:"100%",height:260,children:(0,r.jsxs)(i.T,{data:n,margin:{top:4,right:12,bottom:0,left:0},children:[(0,r.jsx)(c.q,{strokeDasharray:"3 3",stroke:"#e5e7eb"}),(0,r.jsx)(o.K,{dataKey:"ts",tick:{fontSize:11},minTickGap:40}),(0,r.jsx)(d.B,{tick:{fontSize:11},width:56}),(0,r.jsx)(u.u,{formatter:e=>["".concat(e," GB"),void 0]}),(0,r.jsx)(m.D,{}),s.map((e,t)=>(0,r.jsx)(h.uN,{type:"monotone",dataKey:e,stroke:y[t%y.length],fill:y[t%y.length],fillOpacity:.15,name:e,connectNulls:!0},e))]})})})}),B=(0,n.memo)(function(e){let{p:t,diskTotalBytes:s}=e,n=N(t),a=s>0?(t.totalBytes/s*100).toFixed(1):null;return(0,r.jsx)(S,{title:"路径构成:".concat(t.key,"(").concat(f[n],")(").concat(t.path,")— 共 ").concat(j(t.totalBytes)).concat(null!==a?" \xb7 占总磁盘 ".concat(a,"%"):""),children:(0,r.jsx)(l.h,{width:"100%",height:Math.max(120,26*t.topEntries.length+40),children:(0,r.jsxs)(x.v,{data:t.topEntries,layout:"vertical",margin:{top:0,right:16,bottom:0,left:8},children:[(0,r.jsx)(c.q,{strokeDasharray:"3 3",stroke:"#e5e7eb",horizontal:!1}),(0,r.jsx)(o.K,{type:"number",tick:{fontSize:11},tickFormatter:e=>j(e)}),(0,r.jsx)(d.B,{type:"category",dataKey:"name",tick:{fontSize:11},width:180}),(0,r.jsx)(u.u,{formatter:e=>j(Number(e))}),(0,r.jsx)(p.$Q,{dataKey:"bytes",name:"占用",fill:g[n],radius:[0,3,3,0]})]})})})}),M=(0,n.memo)(function(e){var t,s,n;let{items:a}=e,l=a[a.length-1];if(!l)return null;let i=new Map;for(let e of l.paths.filter(e=>e.exists)){let t=N(e);i.set(t,(null!==(s=i.get(t))&&void 0!==s?s:0)+e.totalBytes)}let c=Array.from(i.entries()).sort((e,t)=>t[1]-e[1]),o=null!==(n=null===(t=l.totals)||void 0===t?void 0:t.diskTotalBytes)&&void 0!==n?n:0;return(0,r.jsx)(S,{title:"磁盘分组概览(hm / harness 工具链,占总磁盘比例)",children:(0,r.jsxs)("table",{className:"w-full text-xs text-gray-600",children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{className:"border-b border-gray-100 text-left",children:[(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"分组"}),(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"占用"}),(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"占总磁盘"}),(0,r.jsx)("th",{className:"py-1 font-medium",children:"占比条"})]})}),(0,r.jsxs)("tbody",{children:[c.map(e=>{let[t,s]=e,n=o>0?s/o*100:null;return(0,r.jsxs)("tr",{className:"border-b border-gray-50",children:[(0,r.jsx)("td",{className:"py-1 pr-4",children:f[t]}),(0,r.jsx)("td",{className:"py-1 pr-4",children:j(s)}),(0,r.jsx)("td",{className:"py-1 pr-4",children:null===n?"-":"".concat(n.toFixed(1),"%")}),(0,r.jsx)("td",{className:"py-1",children:null!==n&&(0,r.jsx)("div",{className:"h-2 w-full min-w-[120px] rounded bg-gray-100",children:(0,r.jsx)("div",{className:"h-2 rounded",style:{width:"".concat(Math.min(100,n),"%"),background:g[t]}})})})]},t)}),!c.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:4,className:"py-2 text-gray-400",children:"本帧无路径数据"})})]})]})})}),P=(0,n.memo)(function(e){let{items:t,liveSamples:s}=e,n=s.length>0,a=n?s[s.length-1]:null,x=t[t.length-1],p=n?s.map(e=>{var t,s,r,n;if(e.groups)return{ts:v(e.ts),rssMBHm:Number((e.groups.hm.rssBytes/1048576).toFixed(1)),rssMBHmh:Number((e.groups.hmh.rssBytes/1048576).toFixed(1)),cpuHm:Number((null!==(t=e.groups.hm.cpuPercent)&&void 0!==t?t:0).toFixed(1)),cpuHmh:Number((null!==(s=e.groups.hmh.cpuPercent)&&void 0!==s?s:0).toFixed(1))};let a=0,l=0,i=0,c=0;for(let t of e.processes)"hmh"===w(t)?(l+=t.rssBytes,c+=null!==(r=t.cpuPercent)&&void 0!==r?r:0):(a+=t.rssBytes,i+=null!==(n=t.cpuPercent)&&void 0!==n?n:0);return{ts:v(e.ts),rssMBHm:Number((a/1048576).toFixed(1)),rssMBHmh:Number((l/1048576).toFixed(1)),cpuHm:Number(i.toFixed(1)),cpuHmh:Number(c.toFixed(1))}}):t.map(e=>{let t=0,s=0,r=0,n=0;for(let a of e.processes)"hmh"===w(a)?(s+=a.rssBytes,n+=a.cpuPercent):(t+=a.rssBytes,r+=a.cpuPercent);return{ts:b(e.ts),rssMBHm:Number((t/1048576).toFixed(1)),rssMBHmh:Number((s/1048576).toFixed(1)),cpuHm:Number(r.toFixed(1)),cpuHmh:Number(n.toFixed(1))}}),y=a?a.processes:x.processes;return(0,r.jsxs)(S,{title:n?"相关进程占用趋势(准实时 5s \xb7 按 hm / 工具链分开 \xb7 内存 MB / CPU %)":"相关进程占用趋势(按 hm / harness 工具链分开 \xb7 内存 MB / CPU %)",children:[(0,r.jsx)(l.h,{width:"100%",height:240,children:(0,r.jsxs)(i.T,{data:p,margin:{top:4,right:12,bottom:0,left:0},children:[(0,r.jsx)(c.q,{strokeDasharray:"3 3",stroke:"#e5e7eb"}),(0,r.jsx)(o.K,{dataKey:"ts",tick:{fontSize:11},minTickGap:40}),(0,r.jsx)(d.B,{yAxisId:"mb",tick:{fontSize:11},width:52}),(0,r.jsx)(d.B,{yAxisId:"pct",orientation:"right",tick:{fontSize:11},width:44}),(0,r.jsx)(u.u,{}),(0,r.jsx)(m.D,{}),(0,r.jsx)(h.uN,{yAxisId:"mb",type:"monotone",dataKey:"rssMBHm",name:"hm 内存(MB)",stroke:g.hm,fill:g.hm,fillOpacity:.15,isAnimationActive:!1}),(0,r.jsx)(h.uN,{yAxisId:"mb",type:"monotone",dataKey:"rssMBHmh",name:"工具链内存(MB)",stroke:g.hmh,fill:g.hmh,fillOpacity:.15,isAnimationActive:!1}),(0,r.jsx)(h.uN,{yAxisId:"pct",type:"monotone",dataKey:"cpuHm",name:"hm CPU(%)",stroke:"#dc2626",fill:"#dc2626",fillOpacity:.1,isAnimationActive:!1}),(0,r.jsx)(h.uN,{yAxisId:"pct",type:"monotone",dataKey:"cpuHmh",name:"工具链 CPU(%)",stroke:"#f59e0b",fill:"#f59e0b",fillOpacity:.1,isAnimationActive:!1})]})}),(0,r.jsx)("div",{className:"mt-3 overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-xs text-gray-600",children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{className:"border-b border-gray-100 text-left",children:[(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"分组"}),(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"PID"}),(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"进程"}),(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"RSS"}),(0,r.jsx)("th",{className:"py-1 pr-4 font-medium",children:"CPU%"})]})}),(0,r.jsxs)("tbody",{children:[y.map(e=>(0,r.jsxs)("tr",{className:"border-b border-gray-50",children:[(0,r.jsx)("td",{className:"py-1 pr-4",children:"hmh"===w(e)?"工具链":"hm"}),(0,r.jsx)("td",{className:"py-1 pr-4",children:e.pid}),(0,r.jsx)("td",{className:"max-w-[360px] truncate py-1 pr-4",title:e.cmd,children:e.cmd||e.name}),(0,r.jsx)("td",{className:"py-1 pr-4",children:j(e.rssBytes)}),(0,r.jsx)("td",{className:"py-1 pr-4",children:null===e.cpuPercent?"—":"".concat(e.cpuPercent,"%")})]},e.pid)),!y.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:5,className:"py-2 text-gray-400",children:"本帧无匹配进程"})})]})]})})]})});function F(e){var t;let{items:s,liveSamples:n=[]}=e,a=s[s.length-1];if(!a)return null;let l=a.paths.filter(e=>e.exists),i=null!==(t=a.totals)&&void 0!==t?t:null;return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("section",{className:"rounded-xl border border-gray-200 bg-white p-4",children:[(0,r.jsx)("h3",{className:"mb-2 text-sm font-medium text-gray-700",children:"系统信息"}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-x-6 gap-y-1 text-xs text-gray-600",children:[(0,r.jsxs)("span",{children:["主机:",a.system.hostname]}),(0,r.jsxs)("span",{children:["用户:",a.system.username]}),(0,r.jsxs)("span",{children:["系统:",a.system.platform," ",a.system.osRelease,"(",a.system.arch,")"]}),(0,r.jsxs)("span",{children:["CPU:",a.system.cpuModel," \xd7 ",a.system.cpuCores," 核"]}),(0,r.jsxs)("span",{children:["内存:",j(a.system.totalMemBytes)]}),(0,r.jsxs)("span",{children:["快照:",new Date(a.ts).toLocaleString()]})]}),i&&(0,r.jsxs)("div",{className:"mt-2 flex flex-wrap gap-x-6 gap-y-1 border-t border-gray-100 pt-2 text-xs text-gray-600",children:[(0,r.jsxs)("span",{children:["整机 CPU:",i.cpuPercent,"%"]}),(0,r.jsxs)("span",{children:["整机内存:",j(i.memUsedBytes)," / ",j(i.memTotalBytes),"(",i.memUsedPercent,"%)"]}),(0,r.jsxs)("span",{children:["整机磁盘:",j(i.diskUsedBytes)," / ",j(i.diskTotalBytes),"(",i.diskUsedPercent,"%)"]})]})]}),(0,r.jsx)(M,{items:s}),(0,r.jsx)(k,{items:s}),(0,r.jsx)(P,{items:s,liveSamples:n}),l.map(e=>{var t;return(0,r.jsx)(B,{p:e,diskTotalBytes:null!==(t=null==i?void 0:i.diskTotalBytes)&&void 0!==t?t:0},e.key)})]})}let H=[{value:24,label:"最近 1 天"},{value:72,label:"最近 3 天"},{value:168,label:"最近 7 天"}];function A(){let[e,t]=(0,n.useState)(72),[s,l]=(0,n.useState)([]),[i,c]=(0,n.useState)([]),[o,d]=(0,n.useState)(!1),[u,m]=(0,n.useState)(!0),[h,x]=(0,n.useState)(!1),[p,y]=(0,n.useState)(""),f=(0,n.useRef)(e),g=(0,n.useRef)(null),j=(0,n.useRef)(null);(0,n.useEffect)(()=>{f.current=e},[e]);let b=(0,n.useCallback)(async e=>{var t;m(!0);let s=await (0,a.rd)("/resource-usage/history?hours=".concat(e)),r=null!==(t=null==s?void 0:s.items)&&void 0!==t?t:[];l(r);let n=r[r.length-1];n&&(g.current=n.ts),m(!1)},[]);(0,n.useEffect)(()=>{b(e)},[e,b]),(0,n.useEffect)(()=>{let e,t=!1,s=e=>{if(!t&&e){if(!e.sampleIntervalMs||e.sampleIntervalMs<=0){d(!1);return}if(d(!0),e.last&&e.last.ts!==j.current){j.current=e.last.ts;let t=e.last;c(e=>{let s=[...e,t];return s.length>720?s.slice(s.length-720):s})}e.lastFullSnapshotTs&&e.lastFullSnapshotTs!==g.current&&(g.current=e.lastFullSnapshotTs,b(f.current))}};return(async()=>{var r,n,l,i;let o=await (0,a.rd)("/resource-usage/samples");if(t)return;if(null==o?void 0:null===(r=o.samples)||void 0===r?void 0:r.length){let e=o.samples.slice(-720);c(e),j.current=null!==(l=null===(n=e[e.length-1])||void 0===n?void 0:n.ts)&&void 0!==l?l:null}(0,a.uz)("/resource-usage/collect-now");let d=await (0,a.rd)("/resource-usage/live");s(d),t||(e=setInterval(()=>{(0,a.rd)("/resource-usage/live").then(s)},Math.max(null!==(i=null==d?void 0:d.sampleIntervalMs)&&void 0!==i?i:5e3,2e3)))})(),()=>{t=!0,e&&clearInterval(e)}},[b]);let v=async()=>{var e;x(!0),y("");let t=await (0,a.uz)("/resource-usage/collect-now");if(x(!1),!t){y("采集失败(查看 server 日志)");return}y((null===(e=t.report)||void 0===e?void 0:e.reported)?"已采集并上报 ".concat(t.report.reported," 条"):"已采集(本地)"),b(f.current)};return(0,r.jsx)("div",{className:"h-full overflow-auto bg-gray-50 p-6",children:(0,r.jsxs)("div",{className:"mx-auto max-w-5xl",children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-lg font-semibold text-gray-900",children:"资源占用"}),(0,r.jsxs)("p",{className:"text-xs text-gray-500",children:["hunter-mate / hunter-mate-harness 磁盘占用、相关进程内存 CPU 与系统配置(默认保留 3 天)",o&&" \xb7 进程准实时 5s"]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("select",{value:e,onChange:e=>t(Number(e.target.value)),className:"rounded-lg border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700",children:H.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsx)("button",{type:"button",onClick:v,disabled:h,className:"rounded-lg bg-blue-600 px-3 py-1.5 text-sm text-white transition-colors hover:bg-blue-700 disabled:opacity-50",children:h?"采集中…":"立即采集"})]})]}),p&&(0,r.jsx)("p",{className:"mb-3 text-xs text-gray-500",children:p}),u?(0,r.jsx)("div",{className:"py-20 text-center text-sm text-gray-400",children:"加载中…"}):0===s.length?(0,r.jsxs)("div",{className:"rounded-xl border border-dashed border-gray-300 bg-white py-20 text-center",children:[(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"窗口内暂无快照"}),(0,r.jsx)("p",{className:"mt-1 text-xs text-gray-400",children:"server 每 5 分钟自动采集一帧,也可点「立即采集」"})]}):(0,r.jsx)(F,{items:s,liveSamples:i})]})})}},4431:function(e,t,s){"use strict";s.d(t,{Ox:function(){return a},rd:function(){return c},uz:function(){return o}});var r=s(7002),n=s(529);function a(){return n.env.HUNTER_MATE_SERVER_URL||""}let l=a();function i(e){let t=(0,r.Xc)();if(!t)return e;let s=new Headers(null==e?void 0:e.headers);return s.has("Authorization")||s.set("Authorization","UTOKEN ".concat(t)),{...e,headers:s}}async function c(e,t){try{let s=await fetch("".concat(l).concat(e),{cache:"no-store",...i(t)});if(!s.ok)return null;return await s.json()}catch(e){return null}}async function o(e,t){try{let s=await fetch("".concat(l).concat(e),i({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=t?JSON.stringify(t):void 0}));if(!s.ok)return null;return await s.json()}catch(e){return null}}},7002:function(e,t,s){"use strict";s.d(t,{GK:function(){return l},Lc:function(){return i},Xc:function(){return a}});let r=null,n=new Set;function a(){return r}function l(e){e!==r&&(r=e,n.forEach(e=>e()))}function i(e){return n.add(e),()=>{n.delete(e)}}}},function(e){e.O(0,[686,400,935,744],function(){return e(e.s=9155)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2fec831c-487c-453b-8494-51be95a0bcc2",e._sentryDebugIdIdentifier="sentry-dbid-2fec831c-487c-453b-8494-51be95a0bcc2")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[245],{1689:function(e,n,t){Promise.resolve().then(t.bind(t,8517))},8517:function(e,n,t){"use strict";t.d(n,{default:function(){return a}});var r=t(2835),s=t(635),i=t(4431),o=t(7002);let d={not_found:"分享链接不存在、已失效,或你没有访问权限",expired:"分享链接已过期,请让分享者重新生成",revoked:"分享已被分享者撤销",out_of_scope:"你不在本次分享的范围内,请联系分享者"},l={recommended:"已推荐",pending_invite:"待邀请",invited:"已邀请",replied:"已回复",interview_scheduled:"已约面试",offer:"Offer",onboarding:"已入职",rejected:"已拒绝"};function a(){var e;let[n,t]=(0,s.useState)({kind:"loading"}),[l,a]=(0,s.useState)("");return(0,s.useEffect)(()=>{let e=window.location.pathname.match(/^\/shared\/([^/]+)/);a((null==e?void 0:e[1])?decodeURIComponent(e[1]):"")},[]),(0,s.useEffect)(()=>{if(l)return e(),(0,o.Lc)(()=>void e());async function e(){let e=(0,o.Xc)();if(!e){t({kind:"need-login"});return}let n=await fetch("".concat((0,i.Ox)(),"/shared/").concat(encodeURIComponent(l),"/data"),{headers:{Authorization:"UTOKEN ".concat(e)},cache:"no-store"});if(401===n.status){t({kind:"need-login"});return}let r=await n.json().catch(()=>({}));if(!n.ok){var s,d,a;t({kind:"error",code:null!==(d=null!==(s=null==r?void 0:r.errorCode)&&void 0!==s?s:null==r?void 0:r.code)&&void 0!==d?d:"not_found",message:null!==(a=null==r?void 0:r.message)&&void 0!==a?a:""});return}t({kind:"ok",data:r})}},[l]),(0,r.jsx)("div",{className:"h-full overflow-auto p-6",children:(0,r.jsxs)("div",{className:"mx-auto max-w-3xl",children:[(0,r.jsx)("h1",{className:"mb-1 text-lg font-semibold",children:"同事分享的职位推荐"}),"loading"===n.kind?(0,r.jsx)("div",{className:"py-10 text-center text-sm text-gray-400",children:"加载中…"}):null,"need-login"===n.kind?(0,r.jsx)("div",{className:"mt-4 rounded border border-amber-200 bg-amber-50 px-4 py-6 text-center text-sm text-amber-800",children:"请先登录本地 hm(左下角登录),登录后本页会自动加载分享内容。"}):null,"error"===n.kind?(0,r.jsxs)("div",{className:"mt-4 rounded border border-red-200 bg-red-50 px-4 py-6 text-center text-sm text-red-700",children:[null!==(e=d[n.code])&&void 0!==e?e:d.not_found,n.message?(0,r.jsx)("div",{className:"mt-1 text-xs text-red-400",children:n.message}):null]}):null,"ok"===n.kind?(0,r.jsx)(c,{data:n.data}):null]})})}function c(e){var n,t,s,i,o,d,a,c,u;let{data:x}=e,m=null!==(d=x.recommendations)&&void 0!==d?d:[];return(0,r.jsxs)("div",{className:"mt-4 space-y-4",children:[(0,r.jsxs)("div",{className:"rounded-lg border border-gray-200 bg-white p-4",children:[(0,r.jsxs)("div",{className:"flex items-start justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-base font-medium",children:null!==(c=null===(n=x.jobCase)||void 0===n?void 0:n.title)&&void 0!==c?c:"职位 #".concat(null!==(a=null===(t=x.jobCase)||void 0===t?void 0:t.id)&&void 0!==a?a:"")}),(0,r.jsxs)("div",{className:"mt-0.5 text-xs text-gray-500",children:["分享者:",(null===(s=x.fromUser)||void 0===s?void 0:s.email)||"#".concat(null===(i=x.fromUser)||void 0===i?void 0:i.hmUserId),x.expiresAt?" \xb7 有效期至 ".concat(new Date(x.expiresAt).toLocaleString()):""]})]}),(0,r.jsx)("span",{className:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600",children:null!==(u=null===(o=x.jobCase)||void 0===o?void 0:o.status)&&void 0!==u?u:""})]}),x.note?(0,r.jsx)("div",{className:"mt-2 rounded bg-blue-50 px-3 py-2 text-sm text-blue-800",children:x.note}):null]}),(0,r.jsxs)("div",{className:"text-xs text-gray-500",children:["共 ",m.length," 位推荐人才(只读快照,实时数据以分享者本地为准)"]}),m.map(e=>{var n,t,s,i,o,d,a,c;return(0,r.jsxs)("div",{className:"rounded-lg border border-gray-200 bg-white p-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("div",{className:"font-medium",children:null!==(a=null!==(d=null===(n=e.snapshot)||void 0===n?void 0:n.name)&&void 0!==d?d:e.portraitName)&&void 0!==a?a:"推荐 #".concat(e.id.slice(0,8))}),(0,r.jsx)("span",{className:"rounded bg-blue-100 px-2 py-0.5 text-xs text-blue-700",children:null!==(c=l[e.stage])&&void 0!==c?c:e.stage})]}),(null===(t=e.snapshot)||void 0===t?void 0:t.headline)?(0,r.jsx)("div",{className:"mt-1 text-xs text-gray-500",children:e.snapshot.headline}):null,"number"==typeof(null===(i=e.scores)||void 0===i?void 0:null===(s=i.dimensions)||void 0===s?void 0:s.overall)?(0,r.jsxs)("div",{className:"mt-1 text-xs text-gray-500",children:["综合匹配分:",e.scores.dimensions.overall]}):null,(null===(o=e.scores)||void 0===o?void 0:o.aiReason)?(0,r.jsx)("pre",{className:"mt-2 whitespace-pre-wrap rounded bg-gray-50 p-2 text-xs text-gray-600",children:e.scores.aiReason}):null]},e.id)}),m.length?null:(0,r.jsx)("div",{className:"py-8 text-center text-sm text-gray-400",children:"该职位暂无推荐人才"})]})}},4431:function(e,n,t){"use strict";t.d(n,{Ox:function(){return i},rd:function(){return l},uz:function(){return a}});var r=t(7002),s=t(529);function i(){return s.env.HUNTER_MATE_SERVER_URL||""}let o=i();function d(e){let n=(0,r.Xc)();if(!n)return e;let t=new Headers(null==e?void 0:e.headers);return t.has("Authorization")||t.set("Authorization","UTOKEN ".concat(n)),{...e,headers:t}}async function l(e,n){try{let t=await fetch("".concat(o).concat(e),{cache:"no-store",...d(n)});if(!t.ok)return null;return await t.json()}catch(e){return null}}async function a(e,n){try{let t=await fetch("".concat(o).concat(e),d({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=n?JSON.stringify(n):void 0}));if(!t.ok)return null;return await t.json()}catch(e){return null}}},7002:function(e,n,t){"use strict";t.d(n,{GK:function(){return o},Lc:function(){return d},Xc:function(){return i}});let r=null,s=new Set;function i(){return r}function o(e){e!==r&&(r=e,s.forEach(e=>e()))}function d(e){return s.add(e),()=>{s.delete(e)}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=1689)}),_N_E=e.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-f519552be54e3bdf.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new n.Error).stack;t&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[t]="dd66480f-d659-404c-9c66-d3ff2ae3ca54",n._sentryDebugIdIdentifier="sentry-dbid-dd66480f-d659-404c-9c66-d3ff2ae3ca54")}catch(n){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[325],{1765:function(n,t,e){Promise.resolve().then(e.bind(e,4492))},7473:function(n,t,e){"use strict";var r=e(8321);e.o(r,"useParams")&&e.d(t,{useParams:function(){return r.useParams}}),e.o(r,"usePathname")&&e.d(t,{usePathname:function(){return r.usePathname}}),e.o(r,"useRouter")&&e.d(t,{useRouter:function(){return r.useRouter}}),e.o(r,"useSearchParams")&&e.d(t,{useSearchParams:function(){return r.useSearchParams}})},4492:function(n,t,e){"use strict";e.d(t,{default:function(){return c}});var r=e(2835),a=e(635),u=e(7473),o=e(4431);function c(){let n=(0,u.useParams)().id,[t,e]=(0,a.useState)(null),[c,i]=(0,a.useState)(!1),[s,d]=(0,a.useState)(!1),[f,l]=(0,a.useState)(null);async function h(){i(!0),l(null);try{let t=await fetch("".concat((0,o.Ox)(),"/parsing/snapshots/").concat(n,"/agent-prompt"));if(!t.ok)throw Error("HTTP ".concat(t.status));let r=await t.json();e(r.prompt)}catch(n){l(n.message)}finally{i(!1)}}async function p(){t&&(await navigator.clipboard.writeText(t),d(!0),setTimeout(()=>d(!1),2e3))}return(0,r.jsxs)("div",{style:{padding:24,maxWidth:800,margin:"0 auto"},children:[(0,r.jsx)("h1",{children:"Agent 解析 Prompt"}),(0,r.jsxs)("p",{children:["Snapshot ID: ",n]}),(0,r.jsx)("button",{onClick:h,disabled:c,children:c?"加载中...":"生成 Prompt"}),f&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:f}),t&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{onClick:p,style:{marginLeft:12},children:s?"已复制 ✅":"复制到剪贴板"}),(0,r.jsx)("pre",{style:{marginTop:16,padding:16,background:"#f5f5f5",borderRadius:8,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:t})]})]})}},4431:function(n,t,e){"use strict";e.d(t,{Ox:function(){return u},rd:function(){return i},uz:function(){return s}});var r=e(7002),a=e(529);function u(){return a.env.HUNTER_MATE_SERVER_URL||""}let o=u();function c(n){let t=(0,r.Xc)();if(!t)return n;let e=new Headers(null==n?void 0:n.headers);return e.has("Authorization")||e.set("Authorization","UTOKEN ".concat(t)),{...n,headers:e}}async function i(n,t){try{let e=await fetch("".concat(o).concat(n),{cache:"no-store",...c(t)});if(!e.ok)return null;return await e.json()}catch(n){return null}}async function s(n,t){try{let e=await fetch("".concat(o).concat(n),c({method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=t?JSON.stringify(t):void 0}));if(!e.ok)return null;return await e.json()}catch(n){return null}}},7002:function(n,t,e){"use strict";e.d(t,{GK:function(){return o},Lc:function(){return c},Xc:function(){return u}});let r=null,a=new Set;function u(){return r}function o(n){n!==r&&(r=n,a.forEach(n=>n()))}function c(n){return a.add(n),()=>{a.delete(n)}}}},function(n){n.O(0,[400,935,744],function(){return n(n.s=1765)}),_N_E=n.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="30482edc-a44f-4be4-9cfe-15630e9e56c7",e._sentryDebugIdIdentifier="sentry-dbid-30482edc-a44f-4be4-9cfe-15630e9e56c7")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[93],{5539:function(e,n,f){Promise.resolve().then(f.bind(f,852))}},function(e){e.O(0,[670,852,400,935,744],function(){return e(e.s=5539)}),_N_E=e.O()}]);
|