hunter-mate 0.1.18 → 0.1.19
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.20261002143654.js → service-worker.20261008011501.js} +868 -142
- package/dist/assets/extension/background/service-worker.js +868 -142
- package/dist/assets/extension/build-info.json +1 -1
- package/dist/assets/extension/content/control-runtime.js +1028 -0
- package/dist/assets/extension/content/index.js +35 -0
- package/dist/assets/extension/manifest.json +4 -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/extension/sidepanel/index.css +1 -1
- package/dist/assets/extension/sidepanel/index.html +1 -1
- package/dist/assets/extension/sidepanel/index.js +23 -14
- package/dist/assets/server/main.mjs +10015 -4786
- package/dist/index.js +849 -318
- package/dist/web/dist/404.html +1 -1
- package/dist/web/dist/_next/static/{N_4Eb07x7RNgd3O5ubXrJ → 9Wm8FfXwBJyMk-wYf4l81}/_ssgManifest.js +1 -1
- package/dist/web/dist/_next/static/chunks/542-4a43545450151f1d.js +1 -0
- package/dist/web/dist/_next/static/chunks/670-750aa43678fb0d30.js +1 -0
- package/dist/web/dist/_next/static/chunks/852-5150a7ae95a599fb.js +1 -0
- package/dist/web/dist/_next/static/chunks/{935-bb4adb3868af4cd4.js → 935-4058f12c3d405b32.js} +4 -4
- package/dist/web/dist/_next/static/chunks/app/admin/data/page-a566c6b13c61f9d4.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/companies/page-058047767bc162f4.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/company/admin/page-a2088b59c3820800.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/jobs/page-4fb6a67d044b238d.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/layout-1feb99bf08beb3c8.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-c6714cec1ffd7c5e.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-658eca1ae5ca29dc.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/page-291cd145a56bd020.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/parselog/page-b1b7ae9483273ce0.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/recordings/page-c12948f01885099e.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/resource-usage/{page-3b8bd27536a7889a.js → page-8394e96892688180.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/shared/[token]/page-e859e87f2301b120.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-f519552be54e3bdf.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/talents/page-75af05473ea322d9.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/team/insights/page-7b8769e35cd9987b.js +1 -0
- package/dist/web/dist/_next/static/chunks/{main-ead3ac50aa4bc931.js → main-8d45182e1c21cb95.js} +1 -1
- package/dist/web/dist/_next/static/chunks/{main-app-7e48cd6f6a954fec.js → main-app-70da092dee991648.js} +1 -1
- package/dist/web/dist/_next/static/chunks/pages/{_app-97da3522926feed4.js → _app-8438560f1c1a7980.js} +3 -3
- package/dist/web/dist/_next/static/css/9eaf0c9cc1c24641.css +3 -0
- package/dist/web/dist/admin/data.html +1 -1
- package/dist/web/dist/admin/data.txt +3 -3
- package/dist/web/dist/auth/verify.html +1 -1
- package/dist/web/dist/auth/verify.txt +2 -2
- package/dist/web/dist/companies.html +1 -1
- package/dist/web/dist/companies.txt +7 -6
- package/dist/web/dist/company/admin.html +1 -1
- package/dist/web/dist/company/admin.txt +3 -3
- package/dist/web/dist/entity.html +1 -1
- package/dist/web/dist/entity.txt +2 -2
- package/dist/web/dist/index.html +1 -1
- package/dist/web/dist/index.txt +3 -3
- package/dist/web/dist/jobs.html +1 -1
- package/dist/web/dist/jobs.txt +3 -3
- package/dist/web/dist/logs.html +1 -1
- package/dist/web/dist/logs.txt +2 -2
- package/dist/web/dist/matching/jobs/placeholder/talents.html +1 -1
- package/dist/web/dist/matching/jobs/placeholder/talents.txt +3 -3
- package/dist/web/dist/matching/portraits/placeholder/jobs.html +1 -1
- package/dist/web/dist/matching/portraits/placeholder/jobs.txt +3 -3
- package/dist/web/dist/parselog.html +1 -1
- package/dist/web/dist/parselog.txt +3 -3
- package/dist/web/dist/recordings.html +1 -1
- package/dist/web/dist/recordings.txt +3 -3
- package/dist/web/dist/resource-usage.html +1 -1
- package/dist/web/dist/resource-usage.txt +3 -3
- package/dist/web/dist/shared/placeholder.html +1 -0
- package/dist/web/dist/shared/placeholder.txt +8 -0
- package/dist/web/dist/snapshots/placeholder/agent-prompt.html +1 -1
- package/dist/web/dist/snapshots/placeholder/agent-prompt.txt +3 -3
- package/dist/web/dist/talents.html +1 -1
- package/dist/web/dist/talents.txt +3 -3
- package/dist/web/dist/team/insights.html +1 -0
- package/dist/web/dist/team/insights.txt +7 -0
- package/package.json +1 -1
- package/dist/web/dist/_next/static/chunks/170-b66b6f731381943e.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/admin/data/page-37e01dad70306bf3.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/companies/page-985002eea5b295d0.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/company/admin/page-8c7ecc92bef09e92.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/jobs/page-e39b3e25f0a81254.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/layout-d094dc654772bf32.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-936f6190c968d20b.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-ea44a2236bd53cae.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/page-41d8e008a9411221.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/parselog/page-3f756bbd580f337e.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/recordings/page-ffd507b12e67f2db.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-c89b32aa2ef509f5.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/talents/page-8e0b4072df138fa3.js +0 -1
- package/dist/web/dist/_next/static/css/1dd88e02ef1af7b9.css +0 -3
- /package/dist/web/dist/_next/static/{N_4Eb07x7RNgd3O5ubXrJ → 9Wm8FfXwBJyMk-wYf4l81}/_buildManifest.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]="128f993d-a44b-4abc-96ad-ee1d11a39115",e._sentryDebugIdIdentifier="sentry-dbid-128f993d-a44b-4abc-96ad-ee1d11a39115")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[170],{7473:function(e,t,l){var s=l(8321);l.o(s,"useParams")&&l.d(t,{useParams:function(){return s.useParams}}),l.o(s,"usePathname")&&l.d(t,{usePathname:function(){return s.usePathname}}),l.o(s,"useRouter")&&l.d(t,{useRouter:function(){return s.useRouter}}),l.o(s,"useSearchParams")&&l.d(t,{useSearchParams:function(){return s.useSearchParams}})},8170:function(e,t,l){l.d(t,{EntityListPage:function(){return T}});var s=l(2835),a=l(635),r=l(7473),n=l(4431),i=l(7202),d=l(4518),c=l(3718),o=l(9036),u=l(8448),x=l(6777);let m=["workExperiences","projects","education"],h={intent:["position","salary","city","industries"]},p={name:"姓名",headline:"头衔",currentPosition:"现职位",currentCompany:"现公司",city:"城市",degree:"学历",workYears:"工作年限",age:"年龄",gender:"性别",resId:"resId",statusTag:"状态标签",contactTime:"方便联系时间",phone:"电话",email:"邮箱",profileUrl:"主页 URL",sourceUrl:"来源 URL",selfEvaluation:"自我评价",statement:"平台声明","intent.position":"期望职位","intent.salary":"期望薪资","intent.city":"期望城市","intent.industries":"期望行业",updatedAt:"更新时间"},g={workExperiences:"工作经历",projects:"项目经历",education:"教育经历"},y={company:"公司",position:"职位",period:"时间段",start:"开始",end:"结束",department:"部门",location:"地点",reportsTo:"汇报对象",school:"学校",major:"专业",degree:"学历",name:"名称",role:"角色",description:"描述",duties:"职责",industry:"行业"};function b(e){return null==e||""===e?"—":Array.isArray(e)?e.length?e.map(e=>b(e)).filter(e=>"—"!==e).join("、"):"—":"object"==typeof e?JSON.stringify(e):"string"==typeof e&&/^\d{4}-\d{2}-\d{2}T/.test(e)?(0,u.d3)(e):String(e)}function f(e){var t;let{entity:l}=e,i=(0,r.useRouter)(),d=l.id,[c,o]=(0,a.useState)(null),[x,f]=(0,a.useState)(!1),[v,j]=(0,a.useState)({}),[N,w]=(0,a.useState)(null),[k,S]=(0,a.useState)(new Set),[C,E]=(0,a.useState)({}),[A,P]=(0,a.useState)({}),[O,T]=(0,a.useState)(!1),[U,R]=(0,a.useState)("");(0,a.useEffect)(()=>{let e=!0;return o(null),R(""),(0,n.rd)("/entities/talent/".concat(d,"/duplicates")).then(t=>{var l;e&&o(null!==(l=null==t?void 0:t.candidates)&&void 0!==l?l:[])}),()=>{e=!1}},[d]);let I=(0,a.useMemo)(()=>{var e;return null!==(e=l.extracted)&&void 0!==e?e:{}},[l.extracted]),_=async e=>{if(v[e])return v[e];let t=await (0,n.rd)("/entities/talent/".concat(e));return(null==t?void 0:t.entity)?(j(l=>({...l,[e]:t.entity})),t.entity):null},L=async()=>{var e,t,l,s,a,r,n;T(!0),R("");let i=[d,...(null!=c?c:[]).map(e=>e.talent.id)],o=await Promise.all(i.map(e=>_(e)));if(T(!1),o.some(e=>!e)){R("全量简历拉取失败,请重试");return}let u=o[0],x=null!==(t=u.extracted)&&void 0!==t?t:{},p={name:u.name,headline:u.headline},g={};for(let e of Object.keys(x))if(m.includes(e))g[e]=Array.isArray(x[e])?[...x[e]]:[];else if(h[e]){let t=null!==(s=x[e])&&void 0!==s?s:{};for(let l of h[e])p["".concat(e,".").concat(l)]=null!==(a=t[l])&&void 0!==a?a:"industries"===l?[]:""}else(null==(n=x[e])||["string","number","boolean"].includes(typeof n))&&!e.startsWith("_")&&(p[e]=null!==(l=x[e])&&void 0!==l?l:"");E(p),P(g),w(null!==(r=null==c?void 0:null===(e=c[0])||void 0===e?void 0:e.talent.id)&&void 0!==r?r:null),f(!0)},q=e=>{var t;let s=[],a=t=>{var l,s,a,r;if(t){if("name"===e)return t.name;if("headline"===e)return t.headline;if(e.startsWith("intent.")){let l=e.slice(7),r=null===(a=t.extracted)||void 0===a?void 0:null===(s=a.intent)||void 0===s?void 0:s[l];return"industries"===l?Array.isArray(r)?r:[]:null!=r?r:""}return null!==(r=null===(l=t.extracted)||void 0===l?void 0:l[e])&&void 0!==r?r:""}},r=a(null!==(t=v[d])&&void 0!==t?t:l);for(let e of(s.push({id:0,label:"当前",value:r}),null!=c?c:[])){let t=v[e.talent.id];if(!t)continue;let l=a(t);void 0!==l&&"—"!==b(l)&&s.push({id:e.talent.id,label:"#".concat(e.talent.id),value:l})}return s},z=(e,t)=>E(l=>({...l,[e]:t})),M=async e=>{T(!0);let t=await (0,n.rd)("/entities/talent/".concat(d,"/duplicates/dismiss"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({otherId:e})});T(!1),t?(o(t=>(null!=t?t:[]).filter(t=>t.talent.id!==e)),N===e&&w(null)):R("标注失败,请重试")},D=async()=>{var e,t,l,s;let a={...I};for(let[t,l]of Object.entries(C))if("name"!==t&&"headline"!==t){if(t.startsWith("intent.")){let s=t.slice(7);a.intent={...null!==(e=a.intent)&&void 0!==e?e:{},[s]:l}}else a[t]="number"!=typeof(s=I[t])||"string"!=typeof l||""===l.trim()||Number.isNaN(Number(l))?"boolean"==typeof s&&"string"==typeof l?"true"===l:l:Number(l)}for(let e of m)A[e]&&(a[e]=A[e]);let r=(null!=c?c:[]).filter(e=>!k.has(e.talent.id)).map(e=>e.talent.id);if(0===r.length){R("未勾选任何候选参与合并");return}T(!0);let o=!1;for(let e of r)if(!await (0,n.rd)("/entities/talent/merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({keepId:d,removeId:e,extracted:a,name:null!==(t=C.name)&&void 0!==t?t:null,headline:null!==(l=C.headline)&&void 0!==l?l:null})})){o=!0;break}if(T(!1),o){R("合并失败,请重试");return}i.replace("/talents?id=".concat(d)),i.refresh(),window.location.reload()},B=async()=>{let e=(null!=c?c:[]).filter(e=>!k.has(e.talent.id)).map(e=>e.talent.id);if(0===e.length){R("未勾选任何候选参与合并");return}T(!0);let t=!0;for(let l of e)if(!await (0,n.rd)("/entities/talent/merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({keepId:d,removeId:l})})){t=!1;break}if(T(!1),!t){R("合并失败,请重试");return}i.replace("/talents?id=".concat(d)),i.refresh(),window.location.reload()};if(null===c||0===c.length)return null;let Y=null!==(t=c.find(e=>e.talent.id===N))&&void 0!==t?t:null,F=null!=N?v[N]:null,J=e=>(0,s.jsx)("span",{className:"flex flex-wrap items-center gap-1",children:q(e).map(t=>(0,s.jsx)("button",{type:"button",title:"采纳:".concat(b(t.value)),onClick:()=>z(e,t.value),className:"rounded border border-gray-200 px-1.5 py-0.5 text-xs text-gray-500 hover:border-blue-400 hover:text-blue-600",children:t.label},t.id))});return(0,s.jsxs)("div",{className:"mb-4 rounded-lg border border-amber-300 bg-amber-50 p-3",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,s.jsxs)("span",{className:"text-sm font-medium text-amber-800",children:["发现 ",c.length," 条可能重复的人才记录"]}),(0,s.jsx)("button",{onClick:()=>void L(),disabled:O,className:"rounded bg-amber-600 px-3 py-1 text-sm text-white hover:bg-amber-700 disabled:opacity-50",children:"查看并处理"}),(0,s.jsx)("button",{onClick:()=>void M(c[0].talent.id),disabled:O,className:"rounded border border-amber-400 px-3 py-1 text-sm text-amber-700 hover:bg-amber-100 disabled:opacity-50",children:"与最高分条目非重复"}),U?(0,s.jsx)("span",{className:"text-sm text-red-600",children:U}):null]}),x?(0,s.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30 p-2 sm:p-4",onClick:()=>f(!1),children:(0,s.jsxs)("div",{className:"flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-lg bg-white shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 border-b border-gray-200 px-4 py-3",children:[(0,s.jsx)("h3",{className:"text-lg font-semibold text-gray-900",children:"重复简历合并工作区"}),(0,s.jsxs)("span",{className:"text-sm text-gray-500",children:["当前 #",d,l.name?" \xb7 ".concat(l.name):""," — ",c.length," 条候选"]}),(0,s.jsx)("button",{onClick:()=>f(!1),className:"ml-auto text-sm text-gray-500 hover:text-gray-700",children:"关闭"})]}),(0,s.jsxs)("div",{className:"grid flex-1 gap-0 overflow-hidden md:grid-cols-[250px,1fr]",children:[(0,s.jsxs)("div",{className:"overflow-y-auto border-b border-gray-200 p-3 md:border-b-0 md:border-r",children:[(0,s.jsx)("div",{className:"mb-2 text-xs font-medium text-gray-500",children:"候选简历(逐条处理)"}),(0,s.jsx)("div",{className:"space-y-2",children:c.map(e=>{var t;return(0,s.jsxs)("div",{className:"rounded-lg border p-2 ".concat(N===e.talent.id?"border-blue-400 bg-blue-50":"border-gray-200"),children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("input",{type:"checkbox",checked:!k.has(e.talent.id),disabled:O,onChange:t=>{S(l=>{let s=new Set(l);return t.target.checked?s.delete(e.talent.id):s.add(e.talent.id),s})},title:"勾选=同一人,参与本次合并"}),(0,s.jsx)("span",{className:"text-sm font-medium text-gray-900",children:null!==(t=e.talent.name)&&void 0!==t?t:"(未命名)"}),(0,s.jsxs)("span",{className:"rounded bg-gray-100 px-1.5 py-0.5 text-xs text-gray-600",children:["相似度 ",e.score]})]}),(0,s.jsxs)("div",{className:"mt-0.5 truncate text-xs text-gray-500",title:e.talent.sourceUrl,children:[e.talent.source," \xb7 ",(0,u.d3)(e.talent.updatedAt)]}),(0,s.jsxs)("div",{className:"mt-1.5 flex gap-1.5",children:[(0,s.jsx)("button",{type:"button",onClick:()=>w(e.talent.id),className:"rounded border border-gray-300 px-2 py-0.5 text-xs text-gray-700 hover:bg-gray-50",children:"选中对比"}),(0,s.jsx)("button",{type:"button",disabled:O,onClick:()=>void M(e.talent.id),className:"rounded border border-gray-300 px-2 py-0.5 text-xs text-gray-700 hover:bg-gray-50 disabled:opacity-50",children:"非同一人"})]})]},e.talent.id)})})]}),(0,s.jsxs)("div",{className:"flex flex-col overflow-hidden",children:[(0,s.jsxs)("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 border-b border-gray-100 px-3 py-2",children:[(0,s.jsx)("h4",{className:"text-sm font-semibold text-gray-900",children:"最终采用简历(可编辑)"}),(0,s.jsx)("button",{type:"button",onClick:()=>{L()},className:"rounded border border-gray-300 px-2 py-0.5 text-xs text-gray-600 hover:bg-gray-50",children:"重置为当前简历"})]}),(0,s.jsx)("div",{className:"divide-y divide-gray-100",children:Object.keys(C).map(e=>{var t,a;return(0,s.jsxs)("div",{className:"grid grid-cols-[90px,1fr,auto] items-center gap-2 px-3 py-1.5",children:[(0,s.jsx)("label",{className:"text-xs text-gray-500",children:null!==(t=p[e])&&void 0!==t?t:e}),"sourceUrl"===e?(0,s.jsx)("a",{href:String(null!==(a=C[e])&&void 0!==a?a:l.sourceUrl),target:"_blank",rel:"noreferrer",className:"truncate text-sm text-blue-600 hover:underline",children:"—"===b(C[e])?l.sourceUrl:b(C[e])}):"selfEvaluation"===e||"statement"===e?(0,s.jsx)("textarea",{value:"—"===b(C[e])?"":String(C[e]),onChange:t=>z(e,t.target.value),rows:2,className:"w-full rounded border border-gray-300 px-2 py-1 text-sm"}):(0,s.jsx)("input",{value:"—"===b(C[e])?"":String(C[e]),onChange:t=>z(e,t.target.value),className:"w-full rounded border border-gray-300 px-2 py-1 text-sm"}),J(e)]},e)})})]}),m.map(e=>{var t,l,a;let r=null!==(t=A[e])&&void 0!==t?t:[],n=[];for(let t of null!=c?c:[]){let s=v[t.talent.id],a=null==s?void 0:null===(l=s.extracted)||void 0===l?void 0:l[e];Array.isArray(a)&&a.forEach(e=>n.push({id:t.talent.id,item:e}))}return(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200",children:[(0,s.jsx)("div",{className:"flex items-center justify-between border-b border-gray-100 px-3 py-2",children:(0,s.jsxs)("h4",{className:"text-sm font-semibold text-gray-900",children:[null!==(a=g[e])&&void 0!==a?a:e,"(",r.length,")"]})}),0===r.length&&0===n.length?(0,s.jsx)("p",{className:"px-3 py-2 text-xs text-gray-400",children:"两侧均无数据"}):(0,s.jsxs)("div",{className:"space-y-2 p-3",children:[r.map((t,l)=>(0,s.jsxs)("div",{className:"rounded border border-gray-200 p-2",children:[(0,s.jsx)("div",{className:"grid grid-cols-2 gap-2 lg:grid-cols-4",children:Object.keys(null!=t?t:{}).filter(e=>!e.startsWith("_")).map(a=>{var n;return(0,s.jsxs)("label",{className:"block",children:[(0,s.jsx)("span",{className:"text-xs text-gray-400",children:null!==(n=y[a])&&void 0!==n?n:a}),"string"==typeof t[a]&&t[a].length>40?(0,s.jsx)("textarea",{value:t[a],rows:2,onChange:t=>{let s=[...r];s[l]={...s[l],[a]:t.target.value},P(t=>({...t,[e]:s}))},className:"w-full rounded border border-gray-300 px-2 py-1 text-xs"}):(0,s.jsx)("input",{value:"—"===b(t[a])?"":String(t[a]),onChange:t=>{let s=[...r];s[l]={...s[l],[a]:t.target.value},P(t=>({...t,[e]:s}))},className:"w-full rounded border border-gray-300 px-2 py-1 text-xs"})]},a)})}),(0,s.jsx)("div",{className:"mt-1.5 flex items-center gap-2",children:(0,s.jsx)("button",{type:"button",onClick:()=>P(t=>({...t,[e]:r.filter((e,t)=>t!==l)})),className:"rounded border border-red-200 px-2 py-0.5 text-xs text-red-600 hover:bg-red-50",children:"删除此条"})})]},l)),n.length?(0,s.jsxs)("div",{className:"rounded border border-dashed border-gray-300 p-2",children:[(0,s.jsx)("div",{className:"mb-1 text-xs text-gray-500",children:"候选条目(选择合入或更新)"}),(0,s.jsx)("div",{className:"space-y-1.5",children:n.map((t,l)=>{var a,n,i,d,c,o,u,x,m;let h=r.findIndex(e=>(function(e,t){let l=e=>{var t,l,s;return String(null!==(s=null!==(l=null!==(t=null==e?void 0:e.company)&&void 0!==t?t:null==e?void 0:e.school)&&void 0!==l?l:null==e?void 0:e.name)&&void 0!==s?s:"")},s=e=>{var t,l,s;return String(null!==(s=null==e?void 0:e.period)&&void 0!==s?s:"".concat(null!==(t=null==e?void 0:e.start)&&void 0!==t?t:"","-").concat(null!==(l=null==e?void 0:e.end)&&void 0!==l?l:""))},a=l(e),r=l(t),n=s(e),i=s(t);return!!a&&!!r&&a===r||!!n&&!!i&&n===i&&(!a||!r||a===r)})(e,t.item));return(0,s.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,s.jsxs)("span",{className:"rounded bg-gray-100 px-1.5 py-0.5 text-gray-500",children:["#",t.id]}),(0,s.jsxs)("span",{className:"min-w-0 flex-1 truncate text-gray-700",children:[b(null!==(i=null!==(n=null!==(a=t.item.company)&&void 0!==a?a:t.item.school)&&void 0!==n?n:t.item.name)&&void 0!==i?i:"")," \xb7 ",b(null!==(o=null!==(c=null!==(d=t.item.position)&&void 0!==d?d:t.item.major)&&void 0!==c?c:t.item.role)&&void 0!==o?o:"")," \xb7 ",b(null!==(m=t.item.period)&&void 0!==m?m:"".concat(null!==(u=t.item.start)&&void 0!==u?u:"","-").concat(null!==(x=t.item.end)&&void 0!==x?x:""))]}),h>=0?(0,s.jsxs)("button",{type:"button",onClick:()=>{let l=[...r];l[h]={...t.item},P(t=>({...t,[e]:l}))},className:"shrink-0 rounded border border-blue-300 px-2 py-0.5 text-blue-600 hover:bg-blue-50",children:["更新条目",h+1]}):(0,s.jsx)("button",{type:"button",onClick:()=>P(l=>({...l,[e]:[...r,{...t.item}]})),className:"shrink-0 rounded border border-green-300 px-2 py-0.5 text-green-700 hover:bg-green-50",children:"合入"})]},l)})})]}):null]})]},e)}),Y&&F?(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200",children:[(0,s.jsx)("div",{className:"border-b border-gray-100 px-3 py-2",children:(0,s.jsxs)("h4",{className:"text-sm font-semibold text-gray-900",children:["与候选 #",Y.talent.id," 对比",Y.reasons.length?(0,s.jsx)("span",{className:"ml-2 space-x-1",children:Y.reasons.map(e=>(0,s.jsx)("span",{className:"rounded bg-gray-100 px-1.5 py-0.5 text-xs font-normal text-gray-600",children:e},e))}):null]})}),(0,s.jsxs)("table",{className:"w-full border-collapse text-sm",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"border-b border-gray-100 text-left text-xs text-gray-500",children:[(0,s.jsx)("th",{className:"py-1.5 pl-3 pr-2 font-medium",children:"字段"}),(0,s.jsxs)("th",{className:"py-1.5 pr-2 font-medium",children:["当前 #",d]}),(0,s.jsxs)("th",{className:"py-1.5 pr-3 font-medium",children:["候选 #",Y.talent.id]})]})}),(0,s.jsx)("tbody",{children:Object.keys(C).map(e=>{var t,a,r,n;let i=b(null===(t=q(e)[0])||void 0===t?void 0:t.value),d=b((()=>{var t,l,s,a;let r=v[Y.talent.id];if(r){if("name"===e)return r.name;if("headline"===e)return r.headline;if(e.startsWith("intent.")){let t=e.slice(7),a=null===(s=r.extracted)||void 0===s?void 0:null===(l=s.intent)||void 0===l?void 0:l[t];return"industries"===t?Array.isArray(a)?a:[]:null!=a?a:""}return null!==(a=null===(t=r.extracted)||void 0===t?void 0:t[e])&&void 0!==a?a:""}})()),c=i!==d&&"—"!==i&&"—"!==d;return(0,s.jsxs)("tr",{className:"border-b border-gray-50",children:[(0,s.jsx)("td",{className:"py-1 pl-3 pr-2 text-xs text-gray-500",children:null!==(r=p[e])&&void 0!==r?r:e}),(0,s.jsx)("td",{className:"py-1 pr-2 ".concat(c?"bg-amber-50":""),children:"sourceUrl"===e?(0,s.jsx)("a",{href:String(null!==(n=null===(a=q(e)[0])||void 0===a?void 0:a.value)&&void 0!==n?n:l.sourceUrl),target:"_blank",rel:"noreferrer",className:"break-all text-blue-600 hover:underline",children:i}):(0,s.jsx)("span",{className:"break-all",children:i})}),(0,s.jsx)("td",{className:"py-1 pr-3 ".concat(c?"bg-amber-50":""),children:"sourceUrl"===e?(0,s.jsx)("a",{href:String((()=>{var e;let t=v[Y.talent.id];return null!==(e=null==t?void 0:t.sourceUrl)&&void 0!==e?e:""})()),target:"_blank",rel:"noreferrer",className:"break-all text-blue-600 hover:underline",children:d}):(0,s.jsx)("span",{className:"break-all",children:d})})]},e)})})]})]}):null]}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-t border-gray-200 px-4 py-3",children:[(0,s.jsx)("button",{type:"button",onClick:()=>void D(),disabled:O,className:"rounded bg-blue-600 px-4 py-1.5 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:"提交合并(采用上方编辑值)"}),(0,s.jsx)("button",{type:"button",onClick:()=>void B(),disabled:O,title:"传统语义:保留字段更全的一侧,另一侧补空合并",className:"rounded border border-gray-300 px-4 py-1.5 text-sm text-gray-700 hover:bg-gray-50 disabled:opacity-50",children:"快捷:整行补空合并"}),(0,s.jsx)("span",{className:"text-xs text-gray-500",children:"被合并的候选会进入回收站(可恢复)"}),U?(0,s.jsx)("span",{className:"text-sm text-red-600",children:U}):null]})]})]})]})}):null]})}let v=(e,t,l)=>[e,t].filter(Boolean).join(" - ")+(l?"(".concat(l,")"):"");function j(e){let{title:t,children:l}=e;return(0,s.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsx)("h2",{className:"mb-3 text-lg font-semibold text-gray-900",children:t}),l]})}function N(e){let{children:t}=e;return(0,s.jsx)("span",{className:"rounded bg-blue-50 px-2 py-0.5 text-xs text-blue-700",children:t})}function w(e){var t,l;let{entity:r}=e,i=r.extracted||{},[d,c]=(0,a.useState)(null),[o,u]=(0,a.useState)(null),[x,m]=(0,a.useState)(!1),[h,p]=(0,a.useState)(null),[g,y]=(0,a.useState)(!1),b=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];m(!0);try{let t=e?await (0,n.uz)("/entities/talent/".concat(r.id,"/evaluation/refresh")):await (0,n.rd)("/entities/talent/".concat(r.id,"/evaluation"));(null==t?void 0:t.evaluation)&&(c(t.evaluation),u({generatedBy:t.generatedBy,updatedAt:t.updatedAt}))}finally{m(!1)}},[r.id]),f=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];y(!0);try{var t;let l=e?await (0,n.uz)("/entities/talent/".concat(r.id,"/match-jobs")):await (0,n.rd)("/entities/talent/".concat(r.id,"/matches"));p(null!==(t=null==l?void 0:l.matches)&&void 0!==t?t:[])}finally{y(!1)}},[r.id]);(0,a.useEffect)(()=>{b(),f()},[b,f]);let w=Array.isArray(i.workExperiences)?i.workExperiences:[],k=Array.isArray(i.projects)?i.projects:[],S=Array.isArray(i.education)?i.education:[],C=e=>"string"==typeof e?e:e&&"object"==typeof e&&"string"==typeof e.name?e.name:null,E=(Array.isArray(i.languages)?i.languages:[]).map(C).filter(e=>!!e),A=(Array.isArray(i.skills)?i.skills:[]).map(C).filter(e=>!!e),P=null!==(l=null===(t=i.extra)||void 0===t?void 0:t.sections)&&void 0!==l?l:[],O=i.intent||{},T=[["性别",i.gender],["年龄",null!=i.age?"".concat(i.age," 岁"):null],["城市",i.city],["学历",i.degree],["工作年限",null!=i.workYears?"".concat(i.workYears," 年"):null],["当前职位",i.currentPosition],["当前公司",i.currentCompany],["状态",i.statusTag],["方便联系",i.contactTime]].filter(e=>{let[,t]=e;return null!=t&&""!==t});return(0,s.jsxs)("div",{className:"w-full",children:[(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[i.photoUrl?(0,s.jsx)("img",{src:i.photoUrl,alt:"",className:"h-14 w-14 rounded-full object-cover"}):null,(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-xl font-bold text-gray-900",children:i.name||"(未命名)"}),i.nameMasked?(0,s.jsx)(N,{children:"脱敏"}):null]}),T.length?(0,s.jsx)("div",{className:"mt-2 flex flex-wrap gap-x-4 gap-y-1 text-sm text-gray-600",children:T.map(e=>{let[t,l]=e;return(0,s.jsxs)("span",{children:[(0,s.jsx)("span",{className:"text-gray-400",children:t})," ",l]},t)})}):(0,s.jsx)("p",{className:"mt-2 text-sm text-gray-500",children:"仅卡片级数据(搜索入库),尚无详情页解析字段"})]})]}),Object.keys(O).length?(0,s.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2 border-t border-gray-100 pt-3 text-sm",children:[(0,s.jsx)("span",{className:"text-gray-400",children:"求职意向"}),O.position?(0,s.jsx)(N,{children:O.position}):null,O.salary?(0,s.jsx)(N,{children:O.salary}):null,O.city?(0,s.jsx)(N,{children:O.city}):null,(O.industries||[]).map(e=>(0,s.jsx)(N,{children:e},e))]}):null,A.length||E.length?(0,s.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-2 text-sm",children:[A.length?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"text-gray-400",children:"技能"}),A.map(e=>(0,s.jsx)(N,{children:e},e))]}):null,E.length?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"ml-2 text-gray-400",children:"语言"}),E.map(e=>(0,s.jsx)(N,{children:e},e))]}):null]}):null]}),(0,s.jsxs)(j,{title:"AI 总结与评估",children:[d?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[d.summary?(0,s.jsx)("p",{className:"text-gray-800",children:d.summary}):null,(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-3 md:grid-cols-4",children:[(0,s.jsxs)("div",{className:"rounded bg-gray-50 p-2",children:[(0,s.jsx)("div",{className:"text-xs text-gray-400",children:"工作年限"}),(0,s.jsx)("div",{className:"font-medium",children:null!=d.yearsOfExperience?"".concat(d.yearsOfExperience," 年"):"未知"})]}),(0,s.jsxs)("div",{className:"rounded bg-gray-50 p-2",children:[(0,s.jsx)("div",{className:"text-xs text-gray-400",children:"稳定性"}),(0,s.jsx)("div",{className:"font-medium",children:null!=d.stability.score?"".concat(d.stability.score," 分"):"未知"})]}),(0,s.jsxs)("div",{className:"rounded bg-gray-50 p-2",children:[(0,s.jsx)("div",{className:"text-xs text-gray-400",children:"薪酬(年化)"}),(0,s.jsx)("div",{className:"font-medium",children:d.salary.annualizedEstimate||d.salary.expected||"未知"})]}),(0,s.jsxs)("div",{className:"rounded bg-gray-50 p-2",children:[(0,s.jsx)("div",{className:"text-xs text-gray-400",children:"经历段数"}),(0,s.jsxs)("div",{className:"font-medium",children:[d.stability.jobCount," 段"]})]})]}),d.stability.assessment?(0,s.jsxs)("p",{className:"text-gray-600",children:["稳定性:",d.stability.assessment]}):null,d.motivation?(0,s.jsxs)("p",{className:"text-gray-600",children:["求职动机:",d.motivation]}):null,d.industries.length?(0,s.jsxs)("p",{className:"text-gray-600",children:["行业背景:",d.industries.join("、")]}):null,d.competencies.length?(0,s.jsxs)("p",{className:"text-gray-600",children:["能力标签:",d.competencies.join("、")]}):null,d.pros.length?(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"mb-1 font-medium text-green-700",children:"优点"}),(0,s.jsx)("ul",{className:"list-inside list-disc text-gray-700",children:d.pros.map((e,t)=>(0,s.jsx)("li",{children:e},t))})]}):null,d.cons.length?(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"mb-1 font-medium text-amber-700",children:"不足"}),(0,s.jsx)("ul",{className:"list-inside list-disc text-gray-700",children:d.cons.map((e,t)=>(0,s.jsx)("li",{children:e},t))})]}):null,d.risks.length?(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"mb-1 font-medium text-red-700",children:"风险"}),(0,s.jsx)("ul",{className:"list-inside list-disc text-gray-700",children:d.risks.map((e,t)=>(0,s.jsx)("li",{children:e},t))})]}):null]}):(0,s.jsx)("p",{className:"text-sm text-gray-500",children:x?"评估生成中…":"暂无评估"}),(0,s.jsxs)("div",{className:"mt-3 flex items-center gap-3",children:[(0,s.jsx)("button",{type:"button",disabled:x,onClick:()=>void b(!0),className:"rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:x?"生成中…":"重新评估"}),(null==o?void 0:o.generatedBy)?(0,s.jsxs)("span",{className:"text-xs text-gray-400",children:["生成方式:",o.generatedBy]}):null]})]}),(0,s.jsxs)(j,{title:"在管职位匹配",children:[null===h?(0,s.jsx)("p",{className:"text-sm text-gray-500",children:g?"匹配计算中…":"加载中…"}):0===h.length?(0,s.jsx)("p",{className:"text-sm text-gray-500",children:"暂无匹配记录"}):(0,s.jsx)("ul",{className:"space-y-3",children:h.map(e=>{var t,l,a,r,n,i,d,c,o;return(0,s.jsxs)("li",{className:"rounded border border-gray-100 p-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("span",{className:"font-medium text-gray-900",children:[(null===(t=e.jobCase)||void 0===t?void 0:t.title)||"职位 #".concat(e.jobCaseId),(null===(l=e.jobCase)||void 0===l?void 0:l.company)?(0,s.jsx)("span",{className:"ml-2 text-sm text-gray-500",children:e.jobCase.company}):null]}),(0,s.jsxs)("span",{className:"rounded px-2 py-0.5 text-sm font-medium ".concat((null!==(d=null===(a=e.scores)||void 0===a?void 0:a.overall)&&void 0!==d?d:0)>=75?"bg-green-50 text-green-700":(null!==(c=null===(r=e.scores)||void 0===r?void 0:r.overall)&&void 0!==c?c:0)>=60?"bg-amber-50 text-amber-700":"bg-gray-100 text-gray-600"),children:[null!==(o=null===(n=e.scores)||void 0===n?void 0:n.overall)&&void 0!==o?o:"-"," 分"]})]}),(null===(i=e.recommendation)||void 0===i?void 0:i.aiReason)?(0,s.jsx)("p",{className:"mt-2 whitespace-pre-wrap text-sm text-gray-600",children:e.recommendation.aiReason}):null]},e.id)})}),(0,s.jsx)("div",{className:"mt-3",children:(0,s.jsx)("button",{type:"button",disabled:g,onClick:()=>void f(!0),className:"rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:g?"匹配中…":"重新匹配在管职位"})})]}),w.length?(0,s.jsx)(j,{title:"工作经历(".concat(w.length,")"),children:(0,s.jsx)("ol",{className:"space-y-4",children:w.map((e,t)=>(0,s.jsxs)("li",{className:"border-l-2 border-blue-100 pl-4",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-baseline gap-2",children:[(0,s.jsx)("span",{className:"font-medium text-gray-900",children:e.company||"(公司未知)"}),(0,s.jsx)("span",{className:"text-gray-700",children:e.position}),(0,s.jsx)("span",{className:"text-xs text-gray-400",children:v(e.start,e.end,e.duration)})]}),(0,s.jsxs)("div",{className:"mt-1 flex flex-wrap gap-x-3 text-xs text-gray-500",children:[e.department?(0,s.jsxs)("span",{children:["部门:",e.department]}):null,e.location?(0,s.jsxs)("span",{children:["地点:",e.location]}):null,e.reportsTo?(0,s.jsxs)("span",{children:["汇报:",e.reportsTo]}):null,null!=e.subordinates?(0,s.jsxs)("span",{children:["下属:",e.subordinates," 人"]}):null]}),e.responsibilities?(0,s.jsx)("p",{className:"mt-1 whitespace-pre-wrap text-sm text-gray-700",children:e.responsibilities}):null,e.extra?(0,s.jsx)("div",{className:"mt-1 flex flex-wrap gap-x-3 text-xs text-gray-500",children:Object.entries(e.extra).map(e=>{let[t,l]=e;return(0,s.jsxs)("span",{children:[t,":",l]},t)})}):null]},t))})}):null,k.length?(0,s.jsx)(j,{title:"项目经历(".concat(k.length,")"),children:(0,s.jsx)("ol",{className:"space-y-4",children:k.map((e,t)=>(0,s.jsxs)("li",{className:"border-l-2 border-green-100 pl-4",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-baseline gap-2",children:[(0,s.jsx)("span",{className:"font-medium text-gray-900",children:e.name||"(项目未知)"}),e.role?(0,s.jsx)("span",{className:"text-gray-700",children:e.role}):null,e.company?(0,s.jsx)("span",{className:"text-sm text-gray-500",children:e.company}):null,(0,s.jsx)("span",{className:"text-xs text-gray-400",children:v(e.start,e.end,e.duration)})]}),e.description?(0,s.jsx)("p",{className:"mt-1 whitespace-pre-wrap text-sm text-gray-700",children:e.description}):null,e.duties?(0,s.jsxs)("p",{className:"mt-1 whitespace-pre-wrap text-sm text-gray-600",children:["职责:",e.duties]}):null,e.extra?(0,s.jsx)("div",{className:"mt-1 flex flex-wrap gap-x-3 text-xs text-gray-500",children:Object.entries(e.extra).map(e=>{let[t,l]=e;return(0,s.jsxs)("span",{children:[t,":",l]},t)})}):null]},t))})}):null,S.length?(0,s.jsx)(j,{title:"教育经历(".concat(S.length,")"),children:(0,s.jsx)("ol",{className:"space-y-3",children:S.map((e,t)=>(0,s.jsxs)("li",{className:"flex flex-wrap items-baseline gap-2",children:[(0,s.jsx)("span",{className:"font-medium text-gray-900",children:e.school||"(学校未知)"}),e.major?(0,s.jsx)("span",{className:"text-gray-700",children:e.major}):null,e.degree?(0,s.jsx)(N,{children:e.degree}):null,e.period?(0,s.jsx)("span",{className:"text-xs text-gray-400",children:e.period}):null,(e.tags||[]).map(e=>(0,s.jsx)(N,{children:e},e))]},t))})}):null,i.selfEvaluation?(0,s.jsx)(j,{title:"自我评价",children:(0,s.jsx)("p",{className:"whitespace-pre-wrap text-sm text-gray-700",children:i.selfEvaluation})}):null,P.map(e=>(0,s.jsx)(j,{title:e.title||e.key,children:(0,s.jsx)("p",{className:"whitespace-pre-wrap text-sm text-gray-700",children:e.text})},e.key))]})}let k={talent:"人才",job:"职位",company:"公司"},S={talent:"bg-blue-50 text-blue-700",job:"bg-yellow-50 text-yellow-700",company:"bg-green-50 text-green-700"};function C(e){var t,l,r,i,d,c;let{type:o,entity:m,sources:h}=e,[p,g]=(0,a.useState)(h.length?String(h[0].id):""),[y,b]=(0,a.useState)(!1),[v,j]=(0,a.useState)(null);async function N(){j(null);try{let e=await fetch("".concat((0,n.Ox)(),"/entities/").concat(o,"/").concat(m.id,"/repair-prompt"));if(!e.ok)throw Error("HTTP ".concat(e.status));let t=await e.json();await navigator.clipboard.writeText(t.prompt),b(!0),setTimeout(()=>b(!1),2e3)}catch(e){j(e.message)}}let C="talent"===o?null!==(t=m.name)&&void 0!==t?t:"(未命名)":"job"===o?null!==(l=m.title)&&void 0!==l?l:"(未命名职位)":null!==(r=m.name)&&void 0!==r?r:"(未命名)",E="talent"===o?m.headline:"job"===o?m.company:"",A=h.find(e=>String(e.id)===p)||h[0];return(0,s.jsxs)("div",{className:"w-full",children:["talent"===o?(0,s.jsx)(f,{entity:m}):null,(0,s.jsxs)("header",{className:"mb-6",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-gray-900",children:C}),(0,s.jsx)("span",{className:"rounded px-2 py-0.5 text-xs ".concat(null!==(i=S[o])&&void 0!==i?i:"bg-gray-100 text-gray-600"),children:null!==(d=k[o])&&void 0!==d?d:o}),(0,s.jsx)("span",{className:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600",children:m.source})]}),E?(0,s.jsx)("p",{className:"mt-1 text-gray-600",children:E}):null,m.sessionId?(0,s.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,s.jsx)("button",{onClick:N,className:"rounded bg-amber-600 px-3 py-1 text-sm text-white hover:bg-amber-700",children:y?"已复制 ✓":"复制修复 Prompt"}),(0,s.jsx)("span",{className:"text-xs text-gray-400",children:"发给 agent:按录制重解析、修解析 bug、提 issue"}),v?(0,s.jsx)("span",{className:"text-xs text-red-600",children:v}):null]}):null]}),"talent"===o?(0,s.jsx)(w,{entity:m}):null,(0,s.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"解析来源"}),A?(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"text-sm text-gray-500",children:"当前来源页面"}),(0,s.jsx)("a",{href:A.sourceUrl,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:A.sourceUrl}),A.hasSnapshot?(0,s.jsx)("span",{className:"ml-2 rounded bg-green-50 px-1.5 py-0.5 text-xs text-green-700",children:"有录制快照"}):null]}),h.length>1?(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,s.jsx)("label",{className:"text-sm text-gray-600",children:"历史来源:"}),(0,s.jsx)("select",{value:p,onChange:e=>g(e.target.value),className:"rounded border border-gray-300 px-2 py-1 text-sm",children:h.map(e=>(0,s.jsxs)("option",{value:e.id,children:[e.domain," \xb7 ",(0,u.d3)(e.createdAt)]},e.id))}),(0,s.jsx)("a",{href:A.sourceUrl,target:"_blank",rel:"noreferrer",className:"rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700",children:"打开该来源页面"})]}):null]}):(0,s.jsx)("div",{className:"text-sm text-gray-500",children:"暂无解析来源记录"})]}),(0,s.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,s.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"原始数据"}),(0,s.jsx)(x.Y,{data:null!==(c=m.extracted)&&void 0!==c?c:m.raw})]})]})}var E=l(6119),A=l(3464);function P(e){let t=new URLSearchParams;Object.entries(e).forEach(e=>{let[l,s]=e;s&&t.set(l,s)});let l=t.toString();return l?"?".concat(l):""}function O(e){let{type:t,label:l,titleField:x,subtitleField:m,batchDelete:h}=e,p=(0,r.useRouter)(),g=(0,r.usePathname)(),y=(0,r.useSearchParams)(),b=y.get("id")||"",f=(0,a.useMemo)(()=>({q:y.get("q")||"",status:"",from:y.get("from")||"",to:y.get("to")||""}),[y]),[v,j]=(0,a.useState)(null),[N,w]=(0,a.useState)(!1),k=(0,a.useCallback)(e=>{var t,l;let s=null!==(t=e.filters)&&void 0!==t?t:f,a=P({id:null!==(l=e.id)&&void 0!==l?l:b,q:s.q,from:s.from,to:s.to});p.replace("".concat(g).concat(a))},[f,b,g,p]),S=(0,E.B)({deleteUrl:"/entities/".concat(t),label:l,onDeleted:()=>O.refresh()}),O=(0,A.k)({fetchPage:(0,a.useCallback)(async(e,l)=>{var s,a;let r=P({q:f.q,from:f.from,to:f.to}),i=await (0,n.rd)("/entities?type=".concat(t,"&limit=").concat(l,"&offset=").concat(e).concat(r.replace("?","&")));return{items:null!==(s=null==i?void 0:i.items)&&void 0!==s?s:[],total:null!==(a=null==i?void 0:i.total)&&void 0!==a?a:0,nextOffset:null==i?void 0:i.nextOffset}},[t,f.q,f.from,f.to]),pageSize:50,deps:[t,f.q,f.from,f.to]}),T=O.items;(0,a.useEffect)(()=>{S.prune(T.map(e=>String(e.id)))},[T,S]);let U=(0,a.useCallback)(()=>{if(T.length)return T[0].updatedAt},[T]);(0,a.useEffect)(()=>{if(!b){j(null);return}w(!0),Promise.all([(0,n.rd)("/entities/".concat(t,"/").concat(b)),(0,n.rd)("/entities/".concat(t,"/").concat(b,"/sources"))]).then(e=>{let[t,l]=e;if(t){var s;j({entity:t.entity,sources:null!==(s=null==l?void 0:l.items)&&void 0!==s?s:[]})}else j(null);w(!1)})},[t,b]);let R=(0,a.useMemo)(()=>T.map(e=>{var t;let l=null!==(t=e[x])&&void 0!==t?t:"(未命名)",a=m?e[m]:"",r=String(e.id);return{id:r,content:(0,s.jsxs)("div",{className:"flex items-start gap-2",children:[h&&S.checkbox(r),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("div",{className:"font-medium text-gray-900",children:l}),a?(0,s.jsx)("div",{className:"text-xs text-gray-500",children:a}):null,(0,s.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 text-xs text-gray-400",children:[(0,s.jsx)("span",{children:e.source}),(0,s.jsx)("span",{children:"\xb7"}),(0,s.jsx)("span",{children:(0,u.d3)(e.updatedAt)})]})]})]})}}),[T,x,m,h,S]),I=b?N?(0,s.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):v?(0,s.jsx)(C,{type:t,entity:v.entity,sources:v.sources}):(0,s.jsxs)("div",{className:"flex h-full items-center justify-center text-red-500",children:["未找到该",l]}):(0,s.jsxs)("div",{className:"flex h-full items-center justify-center text-gray-400",children:["请在左侧选择一条",l,"查看详情"]});return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.m,{filterBar:(0,s.jsxs)("div",{className:"border-b border-gray-200 bg-white",children:[(0,s.jsx)(i.f,{value:f,onChange:e=>k({filters:e})}),(0,s.jsx)(o.Y,{pollUrl:"/entities/count?type=".concat(t),getLatestTimestamp:U,onRefresh:()=>O.refresh(),label:l}),h&&S.bar(R)]}),listPanel:(0,s.jsx)(c.L,{items:R,selectedId:b,onSelect:e=>k({id:e}),loading:O.loading,emptyText:"暂无".concat(l,"数据"),onLoadMore:O.loadMore,loadingMore:O.loadingMore,exhausted:O.exhausted}),detailPanel:I}),S.modal()]})}function T(e){return(0,s.jsx)(a.Suspense,{fallback:(0,s.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,s.jsx)(O,{...e})})}},7202:function(e,t,l){l.d(t,{f:function(){return r}});var s=l(2835),a=l(635);function r(e){let{value:t,showStatus:l,statusOptions:r,onChange:n}=e,[i,d]=(0,a.useState)(t);return(0,a.useEffect)(()=>{d(t)},[t.q,t.status,t.from,t.to]),(0,a.useEffect)(()=>{let e=setTimeout(()=>{(i.q!==t.q||i.status!==t.status||i.from!==t.from||i.to!==t.to)&&n(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=>d(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:()=>n({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"})})})]}),l?(0,s.jsxs)("select",{value:i.status,onChange:e=>d(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:"全部状态"}),(r||[]).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=>d(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=>d(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"})]})]})}},6777:function(e,t,l){l.d(t,{Y:function(){return d}});var s=l(2835),a=l(635);function r(e){let{value:t}=e;if(null===t)return(0,s.jsx)("span",{className:"italic text-gray-400",children:"null"});if(void 0===t)return(0,s.jsx)("span",{className:"italic text-gray-400",children:"undefined"});switch(typeof t){case"string":return(0,s.jsxs)("span",{className:"break-all text-red-700",children:['"',t,'"']});case"number":return(0,s.jsx)("span",{className:"text-emerald-700",children:String(t)});case"boolean":return(0,s.jsx)("span",{className:"text-blue-700",children:String(t)});default:return(0,s.jsx)("span",{className:"text-gray-700",children:String(t)})}}function n(e){let{name:t}=e;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("span",{className:"text-indigo-700",children:['"',t,'"']}),(0,s.jsx)("span",{className:"text-gray-500",children:": "})]})}function i(e){let{name:t,value:l,depth:d}=e,[c,o]=(0,a.useState)(d<2);if(!("object"==typeof l&&null!==l&&!Array.isArray(l))&&!Array.isArray(l))return(0,s.jsxs)("div",{className:"min-w-0",children:[null!==t?(0,s.jsx)(n,{name:t}):null,(0,s.jsx)(r,{value:l})]});let u=Array.isArray(l),x=u?l.map((e,t)=>[String(t),e]):Object.entries(l),m=u?"]":"}",h=x.length;return(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:"group flex cursor-pointer select-none items-baseline rounded hover:bg-gray-100",onClick:()=>o(e=>!e),role:"button","aria-expanded":c,children:[(0,s.jsx)("span",{className:"mr-0.5 inline-block w-4 shrink-0 text-center text-gray-400",children:h>0?c?"▾":"▸":""}),null!==t?(0,s.jsx)(n,{name:t}):null,(0,s.jsx)("span",{className:"text-gray-700",children:u?"[":"{"}),c?null:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"mx-1 rounded bg-gray-100 px-1 text-gray-400 group-hover:bg-gray-200",children:u?"".concat(h," 项"):"".concat(h," 键")}),(0,s.jsx)("span",{className:"text-gray-700",children:m})]})]}),c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"ml-[7px] border-l border-gray-200 pl-3",children:x.map(e=>{let[t,l]=e;return(0,s.jsx)(i,{name:u?null:t,value:l,depth:d+1},t)})}),(0,s.jsx)("div",{className:"pl-5 text-gray-700",children:m})]}):null]})}function d(e){let{data:t}=e;return null==t?(0,s.jsx)("div",{className:"text-xs text-gray-400",children:"(无数据)"}):(0,s.jsx)("div",{className:"max-h-[32rem] overflow-auto rounded bg-gray-50 p-3 font-mono text-xs leading-5",children:(0,s.jsx)(i,{name:null,value:t,depth:0})})}},4518:function(e,t,l){l.d(t,{m:function(){return a}});var s=l(2835);function a(e){let{filterBar:t,listPanel:l,detailPanel:a}=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,l]}),(0,s.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:a})]})}},3718:function(e,t,l){l.d(t,{L:function(){return r}});var s=l(2835),a=l(635);function r(e){let{items:t,selectedId:l,onSelect:r,loading:n,emptyText:i="暂无数据",onLoadMore:d,loadingMore:c,exhausted:o}=e,u=(0,a.useRef)(null);return(0,a.useEffect)(()=>{if(!d)return;let e=u.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&d()},{root:e.closest(".overflow-auto"),rootMargin:"200px"});return t.observe(e),()=>t.disconnect()},[d]),(0,s.jsxs)("div",{className:"flex-1 overflow-auto",children:[n?(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:()=>r(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&r(e.id)},className:"cursor-pointer px-3 py-2 text-sm transition-colors ".concat(l===e.id?"bg-blue-50":"hover:bg-gray-50"),children:e.content},e.id))}),d&&!n&&t.length>0&&(0,s.jsx)("div",{ref:u,className:"p-3 text-center text-xs text-gray-400",children:c?"加载更多…":o?"没有更多了":""})]})}},9036:function(e,t,l){l.d(t,{Y:function(){return n}});var s=l(2835),a=l(635),r=l(4431);function n(e){let{pollUrl:t,intervalMs:l=5e3,onRefresh:n,getLatestTimestamp:i,label:d="新数据"}=e,[c,o]=(0,a.useState)(0),[u,x]=(0,a.useState)(!1),m=(0,a.useRef)(void 0);return((0,a.useEffect)(()=>{let e=()=>x(document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]),(0,a.useEffect)(()=>{m.current=i(),o(0)},[i]),(0,a.useEffect)(()=>{if(u)return;let e=async()=>{var e;let l=m.current;if(!l)return;let s=t.includes("?")?"&":"?",a=await (0,r.rd)("".concat(t).concat(s,"since=").concat(encodeURIComponent(l))).catch(()=>null),n=null!==(e=null==a?void 0:a.count)&&void 0!==e?e:0;o(e=>Math.max(e,n))};e();let s=setInterval(e,l);return()=>clearInterval(s)},[t,l,u]),c<=0)?null:(0,s.jsxs)("button",{type:"button",onClick:()=>{o(0),n()},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:["有 ",c," 条",d,",点击刷新"]})}},6119:function(e,t,l){l.d(t,{B:function(){return r}});var s=l(2835),a=l(635);function r(e){let[t,l]=(0,a.useState)(new Set),[r,n]=(0,a.useState)(null),[i,d]=(0,a.useState)(!1),[c,o]=(0,a.useState)(null),u=(0,a.useCallback)(e=>{l(t=>{let l=new Set(t);return l.has(e)?l.delete(e):l.add(e),l})},[]),x=(0,a.useCallback)(e=>{let t=new Set(e);l(e=>{let l=new Set(Array.from(e).filter(e=>t.has(e)));return l.size===e.size?e:l})},[]),m=(0,a.useCallback)(e=>(0,s.jsx)("input",{type:"checkbox",className:"mt-1 accent-blue-600",checked:t.has(e),onChange:()=>u(e),onClick:e=>e.stopPropagation()}),[t,u]),h=(0,a.useCallback)(async()=>{if(r){d(!0),o(null);try{var t;let s=await fetch(e.deleteUrl,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r.ids})});if(!s.ok){let e=await s.json().catch(()=>null),t=null==e?void 0:e.message;o("string"==typeof t?t:"操作失败,请稍后重试");return}l(new Set),o("已删除 ".concat(r.ids.length," 条")),null===(t=e.onDeleted)||void 0===t||t.call(e)}finally{d(!1),n(null)}}},[r,e.deleteUrl,e.onDeleted]),p=(0,a.useCallback)(e=>(0,s.jsxs)("div",{className:"flex items-center gap-3 border-t border-gray-100 px-3 py-2",children:[(0,s.jsxs)("label",{className:"flex items-center gap-1.5 text-sm text-gray-600",children:[(0,s.jsx)("input",{type:"checkbox",className:"accent-blue-600",checked:e.length>0&&t.size===e.length,onChange:()=>l(t=>t.size===e.length&&e.length>0?new Set:new Set(e.map(e=>String(e.id))))}),"全选"]}),t.size>0&&(0,s.jsxs)("span",{className:"flex items-center gap-2 text-sm",children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["已选 ",t.size," 条"]}),(0,s.jsx)("button",{type:"button",onClick:()=>n({ids:Array.from(t).map(Number)}),className:"rounded-lg bg-red-600 px-3 py-1 text-white hover:bg-red-700",children:"删除"})]}),c&&(0,s.jsx)("span",{className:"text-xs text-green-600",children:c})]}),[t,c]);return{selectedIds:t,checkbox:m,prune:x,bar:p,modal:(0,a.useCallback)(()=>r?(0,s.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",children:(0,s.jsxs)("div",{className:"w-96 rounded-xl bg-white p-6 shadow-xl",children:[(0,s.jsx)("h3",{className:"text-base font-semibold text-gray-900",children:"删除确认"}),(0,s.jsxs)("p",{className:"mt-3 text-sm text-gray-600",children:["确定删除选中的 ",r.ids.length," 条",e.label,"吗?删除后不能自行恢复;如误删,请联系管理员找回。"]}),(0,s.jsxs)("div",{className:"mt-6 flex justify-end gap-2",children:[(0,s.jsx)("button",{type:"button",disabled:i,onClick:()=>n(null),className:"rounded-lg px-4 py-1.5 text-sm text-gray-600 hover:bg-gray-100",children:"取消"}),(0,s.jsx)("button",{type:"button",disabled:i,onClick:()=>void h(),className:"rounded-lg bg-red-600 px-4 py-1.5 text-sm text-white hover:bg-red-700 disabled:opacity-50",children:i?"处理中…":"确定"})]})]})}):null,[r,i,h,e.label])}}},3464:function(e,t,l){l.d(t,{k:function(){return a}});var s=l(635);function a(e){var t,l,a;let r=null!==(t=e.pageSize)&&void 0!==t?t:50,[n,i]=(0,s.useState)([]),[d,c]=(0,s.useState)(0),[o,u]=(0,s.useState)(!0),[x,m]=(0,s.useState)(!1),[h,p]=(0,s.useState)(null),g=(0,s.useRef)(0),y=(0,s.useRef)(!1),b=(0,s.useRef)([]),f=null!==(l=e.byKey)&&void 0!==l?l:e=>String(e.id),v=(0,s.useRef)(0),j=(0,s.useCallback)(async(t,l)=>{let s=++g.current;0===t?u(!0):m(!0),p(null);try{var a;let n=await e.fetchPage(t,r);if(s!==g.current)return;v.current=null!==(a=n.nextOffset)&&void 0!==a?a:t+n.items.length,l&&0===n.items.length?c(e=>Math.min(e,b.current.length)):c(n.total),i(e=>{if(!l)return n.items;let t=new Set(e.map(f));return[...e,...n.items.filter(e=>!t.has(f(e)))]})}catch(e){if(s!==g.current)return;p(e instanceof Error?e.message:"加载失败")}finally{s===g.current&&(u(!1),m(!1),y.current=!1)}},[e.fetchPage,r]);(0,s.useEffect)(()=>{y.current=!0,j(0,!1)},[j,...null!==(a=e.deps)&&void 0!==a?a:[]]),(0,s.useEffect)(()=>{b.current=n},[n]);let N=(0,s.useCallback)(()=>{!y.current&&(b.current.length>=d||(y.current=!0,j(v.current,!0)))},[j,d]),w=(0,s.useCallback)(()=>{y.current=!0,v.current=0,j(0,!1)},[j]);return{items:n,total:d,loading:o,loadingMore:x,exhausted:!o&&n.length>=d,error:h,loadMore:N,refresh:w}}},8448:function(e,t,l){l.d(t,{d3:function(){return s}});function s(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}},4431:function(e,t,l){l.d(t,{Ox:function(){return a},rd:function(){return n},uz:function(){return i}});var s=l(529);function a(){return s.env.HUNTER_MATE_SERVER_URL||""}let r=a();async function n(e,t){try{let l=await fetch("".concat(r).concat(e),{cache:"no-store",...t});if(!l.ok)return null;return await l.json()}catch(e){return null}}async function i(e,t){try{let l=await fetch("".concat(r).concat(e),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:null!=t?JSON.stringify(t):void 0});if(!l.ok)return null;return await l.json()}catch(e){return null}}}}]);
|
|
@@ -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]="34f04588-2965-4628-a6bc-ee0b4feda0fb",e._sentryDebugIdIdentifier="sentry-dbid-34f04588-2965-4628-a6bc-ee0b4feda0fb")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[116],{7126:function(e,t,n){Promise.resolve().then(n.bind(n,4042))},4042:function(e,t,n){"use strict";n.d(t,{AdminDataPage:function(){return c}});var l=n(2835),s=n(635),a=n(5777),r=n(4431),i=n(8448);let d=[{value:"talent_profiles",label:"人才"},{value:"jobcases",label:"职位"},{value:"company_profiles",label:"公司"},{value:"customers",label:"客户"}];function c(){var e,t,n;let{session:c,utoken:u}=(0,a.nu)(),o=null!==(e=null==c?void 0:c.hmUserId)&&void 0!==e?e:null,[x,h]=(0,s.useState)(""),[y,f]=(0,s.useState)("talent_profiles"),[m,p]=(0,s.useState)("all"),[b,g]=(0,s.useState)(1),[v,j]=(0,s.useState)(null),[N,w]=(0,s.useState)(!1),[S,k]=(0,s.useState)(null),[E,C]=(0,s.useState)(new Set),[_,I]=(0,s.useState)(null),[R,T]=(0,s.useState)(!1),[z,A]=(0,s.useState)(null);(0,s.useEffect)(()=>{null==o||x||h(String(o))},[o,x]);let O=(0,s.useCallback)(async(e,t)=>{let n=new Headers(null==t?void 0:t.headers);return n.set("Content-Type","application/json"),u&&n.set("Authorization","UTOKEN ".concat(u)),await fetch("".concat((0,r.Ox)()).concat(e),{...t,headers:n})},[u]),U=(0,s.useCallback)(async()=>{if(x){w(!0),k(null);try{let n=new URLSearchParams({hmUserId:x,entity:y,softDeleted:m,page:String(b),pageSize:String(50)}),l=await O("/admin/entities?".concat(n));if(403===l.status){var e,t;let n=await l.json().catch(()=>null),s=null!==(t=null==n?void 0:null===(e=n.message)||void 0===e?void 0:e.code)&&void 0!==t?t:null==n?void 0:n.code;k("ADMIN_NOT_CONFIGURED"===s?"管理功能未开启":"你没有管理权限"),j(null);return}if(!l.ok){k("加载失败(HTTP ".concat(l.status,")")),j(null);return}let s=await l.json();j(s),C(e=>{let t=new Set(s.items.map(e=>e.entityRef)),n=new Set(Array.from(e).filter(e=>t.has(e)));return n.size===e.size?e:n})}finally{w(!1)}}},[O,x,y,m,b]);(0,s.useEffect)(()=>{U()},[U]);let P=(0,s.useMemo)(()=>v?Math.max(1,Math.ceil(v.total/50)):1,[v]),D=(0,s.useCallback)(e=>{C(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),M=(0,s.useCallback)(async()=>{if(null==_?void 0:_.length){T(!0),A(null);try{let e=await O("/admin/purge",{method:"POST",body:JSON.stringify({hmUserId:Number(x),entity:y,entityRefs:_})});if(!e.ok){let t=await e.json().catch(()=>null),n=null==t?void 0:t.message;A("string"==typeof n?n:"清除失败,请稍后重试");return}A("已清除 ".concat(_.length," 条,所有设备会同步删除")),C(new Set),await U()}finally{T(!1),I(null)}}},[O,_,x,y,U]);return(0,l.jsxs)("div",{className:"flex h-full flex-col bg-white",children:[(0,l.jsxs)("div",{className:"border-b border-gray-200 px-6 py-4",children:[(0,l.jsx)("h1",{className:"text-lg font-semibold text-gray-900",children:"数据管理"}),(0,l.jsx)("p",{className:"mt-1 text-sm text-gray-500",children:"查看并清理有问题的数据。彻底删除后无法恢复,所有设备同步清除。"})]}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-3 border-b border-gray-100 px-6 py-3",children:[(0,l.jsxs)("label",{className:"flex items-center gap-1.5 text-sm text-gray-600",children:["用户编号",(0,l.jsx)("input",{type:"number",value:x,onChange:e=>h(e.target.value),className:"w-24 rounded border border-gray-300 px-2 py-1 text-sm"})]}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 text-sm text-gray-600",children:["数据类型",(0,l.jsx)("select",{value:y,onChange:e=>{f(e.target.value),g(1)},className:"rounded border border-gray-300 px-2 py-1 text-sm",children:d.map(e=>(0,l.jsx)("option",{value:e.value,children:e.label},e.value))})]}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 text-sm text-gray-600",children:["删除状态",(0,l.jsxs)("select",{value:m,onChange:e=>{p(e.target.value),g(1)},className:"rounded border border-gray-300 px-2 py-1 text-sm",children:[(0,l.jsx)("option",{value:"all",children:"全部"}),(0,l.jsx)("option",{value:"yes",children:"已删除的"}),(0,l.jsx)("option",{value:"no",children:"正常的"})]})]}),(0,l.jsx)("button",{type:"button",onClick:()=>void U(),disabled:N,className:"rounded-lg bg-blue-600 px-4 py-1 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:N?"加载中…":"查询"}),E.size>0&&(0,l.jsxs)("span",{className:"flex items-center gap-2 text-sm",children:[(0,l.jsxs)("span",{className:"text-gray-500",children:["已选 ",E.size," 条"]}),(0,l.jsx)("button",{type:"button",onClick:()=>I(Array.from(E)),className:"rounded-lg bg-red-600 px-3 py-1 text-white hover:bg-red-700",children:"彻底删除"})]}),z&&(0,l.jsx)("span",{className:"text-xs text-green-600",children:z}),S&&(0,l.jsx)("span",{className:"text-xs text-red-500",children:S})]}),(0,l.jsxs)("div",{className:"flex-1 overflow-auto px-6 py-3",children:[S&&!v?(0,l.jsx)("div",{className:"py-12 text-center text-sm text-gray-400",children:S}):(0,l.jsxs)("table",{className:"w-full text-sm",children:[(0,l.jsx)("thead",{children:(0,l.jsxs)("tr",{className:"border-b border-gray-100 text-left text-xs text-gray-400",children:[(0,l.jsx)("th",{className:"w-8 py-2",children:(0,l.jsx)("input",{type:"checkbox",className:"accent-blue-600",checked:!!(null==v?void 0:v.items.length)&&E.size===v.items.length,onChange:()=>{var e;return C(E.size===(null==v?void 0:v.items.length)?new Set:new Set(null!==(e=null==v?void 0:v.items.map(e=>e.entityRef))&&void 0!==e?e:[]))}})}),(0,l.jsx)("th",{className:"py-2",children:"编号"}),(0,l.jsx)("th",{className:"py-2",children:"数据类型"}),(0,l.jsx)("th",{className:"py-2",children:"状态"}),(0,l.jsx)("th",{className:"py-2",children:"更新时间"})]})}),(0,l.jsx)("tbody",{className:"divide-y divide-gray-50",children:(null!==(t=null==v?void 0:v.items)&&void 0!==t?t:[]).map(e=>{var t,n;let s=1===e.deleted,a=!s&&null!=e.softDeleted;return(0,l.jsxs)("tr",{className:"hover:bg-gray-50",children:[(0,l.jsx)("td",{className:"py-2",children:(0,l.jsx)("input",{type:"checkbox",className:"accent-blue-600",checked:E.has(e.entityRef),onChange:()=>D(e.entityRef)})}),(0,l.jsx)("td",{className:"py-2 font-mono text-xs text-gray-700",children:e.entityRef}),(0,l.jsx)("td",{className:"py-2 text-gray-600",children:null!==(n=null===(t=d.find(t=>t.value===e.entity))||void 0===t?void 0:t.label)&&void 0!==n?n:e.entity}),(0,l.jsx)("td",{className:"py-2",children:s?(0,l.jsx)("span",{className:"rounded bg-red-100 px-1.5 py-0.5 text-[10px] text-red-600",children:"已清除"}):a?(0,l.jsx)("span",{className:"rounded bg-gray-100 px-1.5 py-0.5 text-[10px] text-gray-500",children:"已删除"}):(0,l.jsx)("span",{className:"rounded bg-green-100 px-1.5 py-0.5 text-[10px] text-green-600",children:"正常"})}),(0,l.jsx)("td",{className:"py-2 text-xs text-gray-400",children:(0,i.d3)(e.updatedAt)})]},e.entityRef)})})]}),v&&!v.items.length&&!S&&(0,l.jsx)("div",{className:"py-12 text-center text-sm text-gray-400",children:"没有符合条件的数据"})]}),(0,l.jsxs)("div",{className:"flex items-center justify-between border-t border-gray-100 px-6 py-2 text-sm text-gray-500",children:[(0,l.jsxs)("span",{children:["共 ",null!==(n=null==v?void 0:v.total)&&void 0!==n?n:0," 条"]}),(0,l.jsxs)("span",{className:"flex items-center gap-2",children:[(0,l.jsx)("button",{type:"button",disabled:b<=1,onClick:()=>g(e=>e-1),className:"rounded border border-gray-300 px-3 py-1 hover:bg-gray-50 disabled:opacity-40",children:"上一页"}),(0,l.jsxs)("span",{children:[b," / ",P]}),(0,l.jsx)("button",{type:"button",disabled:b>=P,onClick:()=>g(e=>e+1),className:"rounded border border-gray-300 px-3 py-1 hover:bg-gray-50 disabled:opacity-40",children:"下一页"})]})]}),_&&(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",children:(0,l.jsxs)("div",{className:"w-96 rounded-xl bg-white p-6 shadow-xl",children:[(0,l.jsx)("h3",{className:"text-base font-semibold text-gray-900",children:"彻底删除确认"}),(0,l.jsxs)("p",{className:"mt-3 text-sm text-gray-600",children:["选中的 ",_.length," 条数据会被永久清除,无法恢复,所有设备同步删除。确定继续吗?"]}),(0,l.jsxs)("div",{className:"mt-6 flex justify-end gap-2",children:[(0,l.jsx)("button",{type:"button",disabled:R,onClick:()=>I(null),className:"rounded-lg px-4 py-1.5 text-sm text-gray-600 hover:bg-gray-100",children:"取消"}),(0,l.jsx)("button",{type:"button",disabled:R,onClick:()=>void M(),className:"rounded-lg bg-red-600 px-4 py-1.5 text-sm text-white hover:bg-red-700 disabled:opacity-50",children:R?"处理中…":"确定删除"})]})]})})]})}},5777:function(e,t,n){"use strict";n.d(t,{Cd:function(){return N},aG:function(){return v},cp:function(){return j},nu:function(){return g},tQ:function(){return w}});var l=n(635),s=n(4431),a=n(529);let r=null,i=null,d=null,c=null,u=new Set;function o(){u.forEach(e=>e())}function x(e){let t=new Headers;return r&&t.set("Authorization","UTOKEN ".concat(r)),(0,s.rd)(e,{headers:t})}async function h(){let[e,t]=await Promise.all([(0,s.rd)("/auth/session"),x("/datasync/state")]),n=(null==e?void 0:e.loggedIn)&&e.token?e.token:null,l=null!=t?t:null;if(!l&&e&&n&&n!==r?(r=n,l=await x("/datasync/state")):r=n,!e&&!l){i=i?{...i,loadError:"本地服务无响应"}:{session:null,sync:null,utoken:r,loadError:"本地服务无响应",refresh:y},o();return}i={session:null!=e?e:{loggedIn:!1},sync:l,utoken:r,loadError:null,refresh:y},o()}function y(){return d||(d=h().finally(()=>{d=null}))}function f(e){return u.add(e),1===u.size&&(y(),c=setInterval(()=>void y(),6e4)),()=>{u.delete(e),0===u.size&&c&&(clearInterval(c),c=null)}}let m={session:null,sync:null,utoken:null,loadError:null,refresh:y};function p(){return null!=i?i:m}function b(){return p()}function g(){return(0,l.useSyncExternalStore)(f,p,b)}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 s=(null!==(n=null==e?void 0:e.memberships)&&void 0!==n?n:[]).find(e=>e.tenantId===l&&!e.leftAt);return!s||s.isPersonal?null:l}function N(e,t){var n,l;if(!t)return null;let s=(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==s?void 0:s.role)&&void 0!==l?l:null}function w(){return a.env.NEXT_PUBLIC_HUNTER_MATE_SERVER_URL||""}},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 s},rd:function(){return r},uz:function(){return i}});var l=n(529);function s(){return l.env.HUNTER_MATE_SERVER_URL||""}let a=s();async function r(e,t){try{let n=await fetch("".concat(a).concat(e),{cache:"no-store",...t});if(!n.ok)return null;return await n.json()}catch(e){return null}}async function i(e,t){try{let n=await fetch("".concat(a).concat(e),{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}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=7126)}),_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]="7c38d9a0-12d6-4833-ae5d-0f91bd160439",e._sentryDebugIdIdentifier="sentry-dbid-7c38d9a0-12d6-4833-ae5d-0f91bd160439")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[964],{8279:function(e,t,s){Promise.resolve().then(s.bind(s,6094))},7473:function(e,t,s){"use strict";var r=s(8321);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},4518:function(e,t,s){"use strict";s.d(t,{m:function(){return n}});var r=s(2835);function n(e){let{filterBar:t,listPanel:s,detailPanel:n}=e;return(0,r.jsxs)("div",{className:"flex h-full",children:[(0,r.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,s]}),(0,r.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:n})]})}},3718:function(e,t,s){"use strict";s.d(t,{L:function(){return a}});var r=s(2835),n=s(635);function a(e){let{items:t,selectedId:s,onSelect:a,loading:l,emptyText:c="暂无数据",onLoadMore:i,loadingMore:o,exhausted:d}=e,u=(0,n.useRef)(null);return(0,n.useEffect)(()=>{if(!i)return;let e=u.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&i()},{root:e.closest(".overflow-auto"),rootMargin:"200px"});return t.observe(e),()=>t.disconnect()},[i]),(0,r.jsxs)("div",{className:"flex-1 overflow-auto",children:[l?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:c}):(0,r.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,r.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))}),i&&!l&&t.length>0&&(0,r.jsx)("div",{ref:u,className:"p-3 text-center text-xs text-gray-400",children:o?"加载更多…":d?"没有更多了":""})]})}},6094:function(e,t,s){"use strict";s.d(t,{UnifiedCompaniesPage:function(){return g}});var r=s(2835),n=s(635),a=s(7473),l=s(4431),c=s(8448),i=s(4518),o=s(3718),d=s(6119),u=s(3464);let x={draft:"草稿",active:"交付中",archived:"已归档"};function m(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,r.jsx)("span",{className:"inline-flex flex-wrap gap-1",children:s.filter(e=>e.on).map(e=>(0,r.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat(e.cls),children:e.label},e.label))})}function h(){var e,t,s;let h=(0,a.useRouter)(),g=(0,a.useSearchParams)(),f=g.get("id")||"",p=g.get("q")||"",b=(null!==(t=g.get("oc"))&&void 0!==t?t:"1")!=="0",[y,j]=(0,n.useState)(null),[v,N]=(0,n.useState)(!1),[w,S]=(0,n.useState)(!1),C=(0,d.B)({deleteUrl:"/customers",label:"公司",onDeleted:()=>k.refresh()}),k=(0,u.k)({fetchPage:(0,n.useCallback)(async(e,t)=>{var s,r;let n=new URLSearchParams;p&&n.set("query",p),b&&n.set("onlyCustomers","1"),n.set("limit",String(t)),n.set("offset",String(e));let a=await (0,l.rd)("/customers/unified?".concat(n.toString()));return{items:null!==(s=null==a?void 0:a.items)&&void 0!==s?s:[],total:null!==(r=null==a?void 0:a.total)&&void 0!==r?r:0}},[p,b]),pageSize:50,deps:[p,b]}),P=k.items,E=k.total,_=k.loading;(0,n.useEffect)(()=>{C.prune(P.map(e=>String(e.id)))},[P,C]);let R=(0,n.useCallback)(e=>{var t,s;let r=new URLSearchParams(g.toString());void 0!==e.id&&(e.id?r.set("id",e.id):r.delete("id"));let n=null!==(t=e.q)&&void 0!==t?t:p;n?r.set("q",n):r.delete("q"),(null!==(s=e.oc)&&void 0!==s?s:b)?r.delete("oc"):r.set("oc","0"),h.replace("/companies?".concat(r.toString()))},[h,g,p,b]);(0,n.useEffect)(()=>{if(!f){j(null);return}N(!0),(0,l.rd)("/customers/".concat(f,"/related")).then(e=>{j(e),N(!1)})},[f]);let z=(0,n.useCallback)(async(e,t)=>{S(!0),await (0,l.rd)("/customers/".concat(e),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({isCustomer:t?1:0})}),k.refresh(),j(await (0,l.rd)("/customers/".concat(e,"/related"))),S(!1)},[k]),D=(0,n.useMemo)(()=>P.map(e=>({id:String(e.id),content:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[C.checkbox(String(e.id)),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"font-medium text-gray-900",children:e.canonicalName}),e.activeJobCount>0?(0,r.jsxs)("span",{className:"rounded bg-emerald-100 px-1.5 py-0.5 text-xs text-emerald-700",children:["交付中 ",e.activeJobCount]}):null]}),(0,r.jsx)("div",{className:"mt-0.5",children:(0,r.jsx)(m,{sources:e.sources})}),(0,r.jsxs)("div",{className:"mt-0.5 text-xs text-gray-400",children:[e.jobCaseCount>0?"".concat(e.jobCaseCount," 个职位案件 \xb7 "):"","更新于 ",(0,c.d3)(e.updatedAt)]})]})]})})),[P,C]),L=f?v?(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):y?(0,r.jsxs)("div",{className:"h-full overflow-y-auto p-4",children:[(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-3",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-gray-900",children:y.customer.canonicalName}),(0,r.jsx)(m,{sources:null!==(s=y.customer.sources)&&void 0!==s?s:{customer:1===y.customer.isCustomer,parsed:!1,resume:!1,hmhLocal:!1}}),(0,r.jsx)("button",{type:"button",disabled:w,onClick:()=>void z(y.customer.id,1!==y.customer.isCustomer),className:"rounded px-2 py-1 text-xs ".concat(1===y.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===y.customer.isCustomer?"✓ 我服务的客户(点击取消)":"标注为我服务的客户"})]}),(null===(e=y.customer.aliases)||void 0===e?void 0:e.length)?(0,r.jsxs)("div",{className:"mb-2 text-xs text-gray-500",children:["别名:",y.customer.aliases.join("、")]}):null,(0,r.jsxs)("div",{className:"mb-4 text-xs text-gray-400",children:["更新于 ",(0,c.d3)(y.customer.updatedAt)]}),y.customer.notes?(0,r.jsxs)("section",{className:"mb-4",children:[(0,r.jsx)("h3",{className:"mb-1 text-sm font-medium text-gray-800",children:"备注"}),(0,r.jsx)("p",{className:"whitespace-pre-wrap text-sm text-gray-700",children:y.customer.notes})]}):null,(0,r.jsxs)("section",{className:"mb-4",children:[(0,r.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:["关联交付职位(job_cases,",y.jobCases.length,")"]}),0===y.jobCases.length?(0,r.jsx)("div",{className:"text-sm text-gray-400",children:"暂无交付职位"}):(0,r.jsx)("ul",{className:"space-y-1",children:y.jobCases.map(e=>{var t,s;return(0,r.jsx)("li",{children:(0,r.jsxs)("a",{href:"/jobs?id=".concat(e.id),className:"flex items-center gap-2 rounded border border-gray-200 bg-white px-3 py-2 text-sm hover:border-blue-300",children:[(0,r.jsx)("span",{className:"font-medium text-gray-900",children:function(e){var t,s;let r;let n=(null!==(t=e.folderPath)&&void 0!==t?t:"").split("/").filter(Boolean).filter(e=>!["job","jd","raw"].includes(e));return(r=e.title)&&!["job","jd","raw"].includes(r)?e.title:null!==(s=n.at(-1))&&void 0!==s?s:"案件 #".concat(e.id)}(e)}),(0,r.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat("active"===e.status?"bg-emerald-100 text-emerald-700":"bg-gray-100 text-gray-500"),children:null!==(t=x[e.status])&&void 0!==t?t:e.status}),(null!==(s=e.folderPath)&&void 0!==s?s:"").includes("/local/clients/")?(0,r.jsx)("span",{className:"rounded bg-purple-100 px-1.5 py-0.5 text-xs text-purple-700",children:"本地"}):null,(0,r.jsx)("span",{className:"ml-auto text-xs text-gray-400",children:(0,c.d3)(e.updatedAt)})]})},e.id)})})]}),(0,r.jsxs)("section",{className:"mb-4",children:[(0,r.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:["招聘网站解析职位(job_postings,",y.jobPostings.length,")"]}),0===y.jobPostings.length?(0,r.jsx)("div",{className:"text-sm text-gray-400",children:"暂无解析职位"}):(0,r.jsx)("ul",{className:"space-y-1",children:y.jobPostings.map(e=>{var t;return(0,r.jsxs)("li",{className:"flex items-center gap-2 rounded border border-gray-200 bg-white px-3 py-2 text-sm",children:[(0,r.jsx)("span",{className:"font-medium text-gray-900",children:null!==(t=e.title)&&void 0!==t?t:"(无标题)"}),(0,r.jsx)("span",{className:"rounded bg-blue-100 px-1.5 py-0.5 text-xs text-blue-700",children:e.source}),(0,r.jsx)("span",{className:"text-xs text-gray-500",children:e.company}),(0,r.jsx)("a",{href:e.sourceUrl,target:"_blank",rel:"noreferrer",className:"ml-auto text-xs text-blue-500 hover:underline",children:"来源"})]},e.id)})})]})]}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该公司"}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一家公司查看详情(客户、职位与备注)"});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.m,{filterBar:(0,r.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"text",value:p,onChange:e=>R({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,r.jsxs)("select",{value:b?"1":"0",onChange:e=>R({oc:"1"===e.target.value}),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500",children:[(0,r.jsx)("option",{value:"1",children:"只看我服务的客户"}),(0,r.jsx)("option",{value:"0",children:"全部公司"})]})]}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs text-gray-500",children:[(0,r.jsx)("span",{className:"text-gray-400",children:"来源:"}),(0,r.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-amber-700",children:"客户"}),(0,r.jsx)("span",{className:"rounded bg-blue-100 px-1.5 py-0.5 text-blue-700",children:"解析"}),(0,r.jsx)("span",{className:"rounded bg-green-100 px-1.5 py-0.5 text-green-700",children:"简历"}),(0,r.jsx)("span",{className:"rounded bg-purple-100 px-1.5 py-0.5 text-purple-700",children:"本地"}),(0,r.jsxs)("span",{className:"ml-auto text-gray-400",children:["共 ",E," 家"]})]}),C.bar(D)]}),listPanel:(0,r.jsx)(o.L,{items:D,selectedId:f,onSelect:e=>R({id:e}),loading:_,emptyText:b?'暂无标注的客户(切到"全部公司"可浏览并标注)':"暂无公司数据",onLoadMore:k.loadMore,loadingMore:k.loadingMore,exhausted:k.exhausted}),detailPanel:L}),C.modal()]})}function g(){return(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,r.jsx)(h,{})})}},6119:function(e,t,s){"use strict";s.d(t,{B:function(){return a}});var r=s(2835),n=s(635);function a(e){let[t,s]=(0,n.useState)(new Set),[a,l]=(0,n.useState)(null),[c,i]=(0,n.useState)(!1),[o,d]=(0,n.useState)(null),u=(0,n.useCallback)(e=>{s(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},[]),x=(0,n.useCallback)(e=>{let t=new Set(e);s(e=>{let s=new Set(Array.from(e).filter(e=>t.has(e)));return s.size===e.size?e:s})},[]),m=(0,n.useCallback)(e=>(0,r.jsx)("input",{type:"checkbox",className:"mt-1 accent-blue-600",checked:t.has(e),onChange:()=>u(e),onClick:e=>e.stopPropagation()}),[t,u]),h=(0,n.useCallback)(async()=>{if(a){i(!0),d(null);try{var t;let r=await fetch(e.deleteUrl,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a.ids})});if(!r.ok){let e=await r.json().catch(()=>null),t=null==e?void 0:e.message;d("string"==typeof t?t:"操作失败,请稍后重试");return}s(new Set),d("已删除 ".concat(a.ids.length," 条")),null===(t=e.onDeleted)||void 0===t||t.call(e)}finally{i(!1),l(null)}}},[a,e.deleteUrl,e.onDeleted]),g=(0,n.useCallback)(e=>(0,r.jsxs)("div",{className:"flex items-center gap-3 border-t border-gray-100 px-3 py-2",children:[(0,r.jsxs)("label",{className:"flex items-center gap-1.5 text-sm text-gray-600",children:[(0,r.jsx)("input",{type:"checkbox",className:"accent-blue-600",checked:e.length>0&&t.size===e.length,onChange:()=>s(t=>t.size===e.length&&e.length>0?new Set:new Set(e.map(e=>String(e.id))))}),"全选"]}),t.size>0&&(0,r.jsxs)("span",{className:"flex items-center gap-2 text-sm",children:[(0,r.jsxs)("span",{className:"text-gray-500",children:["已选 ",t.size," 条"]}),(0,r.jsx)("button",{type:"button",onClick:()=>l({ids:Array.from(t).map(Number)}),className:"rounded-lg bg-red-600 px-3 py-1 text-white hover:bg-red-700",children:"删除"})]}),o&&(0,r.jsx)("span",{className:"text-xs text-green-600",children:o})]}),[t,o]);return{selectedIds:t,checkbox:m,prune:x,bar:g,modal:(0,n.useCallback)(()=>a?(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",children:(0,r.jsxs)("div",{className:"w-96 rounded-xl bg-white p-6 shadow-xl",children:[(0,r.jsx)("h3",{className:"text-base font-semibold text-gray-900",children:"删除确认"}),(0,r.jsxs)("p",{className:"mt-3 text-sm text-gray-600",children:["确定删除选中的 ",a.ids.length," 条",e.label,"吗?删除后不能自行恢复;如误删,请联系管理员找回。"]}),(0,r.jsxs)("div",{className:"mt-6 flex justify-end gap-2",children:[(0,r.jsx)("button",{type:"button",disabled:c,onClick:()=>l(null),className:"rounded-lg px-4 py-1.5 text-sm text-gray-600 hover:bg-gray-100",children:"取消"}),(0,r.jsx)("button",{type:"button",disabled:c,onClick:()=>void h(),className:"rounded-lg bg-red-600 px-4 py-1.5 text-sm text-white hover:bg-red-700 disabled:opacity-50",children:c?"处理中…":"确定"})]})]})}):null,[a,c,h,e.label])}}},3464:function(e,t,s){"use strict";s.d(t,{k:function(){return n}});var r=s(635);function n(e){var t,s,n;let a=null!==(t=e.pageSize)&&void 0!==t?t:50,[l,c]=(0,r.useState)([]),[i,o]=(0,r.useState)(0),[d,u]=(0,r.useState)(!0),[x,m]=(0,r.useState)(!1),[h,g]=(0,r.useState)(null),f=(0,r.useRef)(0),p=(0,r.useRef)(!1),b=(0,r.useRef)([]),y=null!==(s=e.byKey)&&void 0!==s?s:e=>String(e.id),j=(0,r.useRef)(0),v=(0,r.useCallback)(async(t,s)=>{let r=++f.current;0===t?u(!0):m(!0),g(null);try{var n;let l=await e.fetchPage(t,a);if(r!==f.current)return;j.current=null!==(n=l.nextOffset)&&void 0!==n?n:t+l.items.length,s&&0===l.items.length?o(e=>Math.min(e,b.current.length)):o(l.total),c(e=>{if(!s)return l.items;let t=new Set(e.map(y));return[...e,...l.items.filter(e=>!t.has(y(e)))]})}catch(e){if(r!==f.current)return;g(e instanceof Error?e.message:"加载失败")}finally{r===f.current&&(u(!1),m(!1),p.current=!1)}},[e.fetchPage,a]);(0,r.useEffect)(()=>{p.current=!0,v(0,!1)},[v,...null!==(n=e.deps)&&void 0!==n?n:[]]),(0,r.useEffect)(()=>{b.current=l},[l]);let N=(0,r.useCallback)(()=>{!p.current&&(b.current.length>=i||(p.current=!0,v(j.current,!0)))},[v,i]),w=(0,r.useCallback)(()=>{p.current=!0,j.current=0,v(0,!1)},[v]);return{items:l,total:i,loading:d,loadingMore:x,exhausted:!d&&l.length>=i,error:h,loadMore:N,refresh:w}}},8448:function(e,t,s){"use strict";function r(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}s.d(t,{d3:function(){return r}})},4431:function(e,t,s){"use strict";s.d(t,{Ox:function(){return n},rd:function(){return l},uz:function(){return c}});var r=s(529);function n(){return r.env.HUNTER_MATE_SERVER_URL||""}let a=n();async function l(e,t){try{let s=await fetch("".concat(a).concat(e),{cache:"no-store",...t});if(!s.ok)return null;return await s.json()}catch(e){return null}}async function c(e,t){try{let s=await fetch("".concat(a).concat(e),{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}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=8279)}),_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]="8bfbd328-10f0-452a-b5d0-13716ea8f181",e._sentryDebugIdIdentifier="sentry-dbid-8bfbd328-10f0-452a-b5d0-13716ea8f181")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[290],{4792:function(e,t,n){Promise.resolve().then(n.bind(n,9418))},9418:function(e,t,n){"use strict";n.d(t,{CompanyAdminPage:function(){return s}});var a=n(2835),r=n(635),l=n(5777);function s(){var e,t;let{sync:n,utoken:s,refresh:i}=(0,l.nu)(),d=(0,l.cp)(n),o=(0,l.Cd)(n,d),c=null!==(t=null===(e=(0,l.aG)(n).find(e=>e.tenantId===d))||void 0===e?void 0:e.name)&&void 0!==t?t:"",[u,m]=(0,r.useState)([]),[x,h]=(0,r.useState)([]),[y,b]=(0,r.useState)(!1),[f,p]=(0,r.useState)(null),[g,v]=(0,r.useState)(null),[j,N]=(0,r.useState)(null),[w,k]=(0,r.useState)(null),[I,S]=(0,r.useState)(null),T=(0,r.useCallback)((e,t)=>{let n=new Headers(null==t?void 0:t.headers);return n.set("Content-Type","application/json"),s&&n.set("Authorization","UTOKEN ".concat(s)),fetch("".concat((0,l.tQ)()).concat(e),{...t,headers:n})},[s]),E=(0,r.useCallback)(async()=>{if(d){b(!0),p(null);try{var e,t;let[n,a]=await Promise.all([T("/company/".concat(d,"/applications?status=pending")),T("/company/".concat(d,"/members"))]);if(!n.ok||!a.ok){p("加载失败(HTTP ".concat(n.status,"/").concat(a.status,")"));return}m(null!==(e=(await n.json()).items)&&void 0!==e?e:[]),h(null!==(t=(await a.json()).items)&&void 0!==t?t:[])}finally{b(!1)}}},[d,T]);(0,r.useEffect)(()=>{E()},[E]);let C=async(e,t)=>{N(e.id),p(null),v(null);try{let n=await T("/company/applications/".concat(e.id,"/decide"),{method:"POST",body:JSON.stringify({action:t})}),a=await n.json().catch(()=>null);if(!n.ok){p((null==a?void 0:a.message)||"操作失败(HTTP ".concat(n.status,")"));return}v("approve"===t?"已通过 ".concat(e.email," 的加入申请"):"已拒绝 ".concat(e.email," 的申请")),await E(),await i()}finally{N(null)}},U=async(e,t)=>{k(e.hmUserId),p(null),v(null);try{let n=await T("/company/".concat(d,"/admins"),{method:"POST",body:JSON.stringify({hmUserId:e.hmUserId,isAdmin:t})}),a=await n.json().catch(()=>null);if(!n.ok){p((null==a?void 0:a.message)||"操作失败(HTTP ".concat(n.status,")"));return}v(t?"已设 ".concat(e.email," 为管理员"):"已取消 ".concat(e.email," 的管理员")),await E(),await i()}finally{k(null)}},_=async e=>{k(e.hmUserId),p(null),v(null);try{let t=await T("/company/".concat(d,"/transfer-ownership"),{method:"POST",body:JSON.stringify({hmUserId:e.hmUserId})}),n=await t.json().catch(()=>null);if(!t.ok){p((null==n?void 0:n.message)||"操作失败(HTTP ".concat(t.status,")"));return}v("公司归属已转移给 ".concat(e.email,",你已成为管理员")),await E(),await i()}finally{k(null),S(null)}};return d?"owner"!==o&&"admin"!==o?(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-gray-400",children:"仅公司归属者/管理员可访问企业管理"}):(0,a.jsxs)("div",{className:"h-full overflow-auto p-6",children:[(0,a.jsxs)("h2",{className:"mb-1 text-lg font-semibold text-gray-900",children:["企业管理",(0,a.jsx)("span",{className:"ml-2 text-sm font-normal text-gray-400",children:c}),(0,a.jsx)("span",{className:"ml-2 text-xs font-normal text-amber-600",children:"owner"===o?"归属者":"管理员"})]}),(0,a.jsx)("p",{className:"mb-5 text-xs text-gray-400",children:"审批加入申请、配置管理员、转移公司归属;创建者默认是归属者(管理员)"}),f&&(0,a.jsx)("div",{className:"mb-3 rounded-md bg-red-50 px-3 py-2 text-xs text-red-600",children:f}),g&&(0,a.jsx)("div",{className:"mb-3 rounded-md bg-green-50 px-3 py-2 text-xs text-green-600",children:g}),(0,a.jsxs)("section",{className:"mb-8",children:[(0,a.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-700",children:["待审批申请",u.length>0&&(0,a.jsx)("span",{className:"ml-2 rounded-full bg-red-100 px-1.5 text-xs text-red-600",children:u.length})]}),y?(0,a.jsx)("div",{className:"rounded-md border border-dashed border-gray-200 px-3 py-6 text-center text-xs text-gray-400",children:"加载中…"}):0===u.length?(0,a.jsx)("div",{className:"rounded-md border border-dashed border-gray-200 px-3 py-6 text-center text-xs text-gray-400",children:"暂无待审批申请"}):(0,a.jsx)("div",{className:"space-y-2",children:u.map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-gray-200 bg-white px-4 py-3",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("div",{className:"truncate text-sm text-gray-800",children:e.email}),(0,a.jsxs)("div",{className:"text-xs text-gray-400",children:[new Date(e.createdAt).toLocaleString("zh-CN"),e.message?" \xb7 ".concat(e.message):""]})]}),(0,a.jsxs)("div",{className:"flex shrink-0 gap-2",children:[(0,a.jsx)("button",{onClick:()=>C(e,"approve"),disabled:j===e.id,className:"rounded-md bg-blue-600 px-3 py-1 text-xs text-white hover:bg-blue-700 disabled:opacity-50",children:j===e.id?"处理中…":"通过"}),(0,a.jsx)("button",{onClick:()=>C(e,"reject"),disabled:j===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,a.jsxs)("section",{children:[(0,a.jsxs)("h3",{className:"mb-2 text-sm font-medium text-gray-700",children:["成员(",x.length,")"]}),(0,a.jsx)("div",{className:"overflow-hidden rounded-lg border border-gray-200 bg-white",children:x.map((e,t)=>(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 px-4 py-2.5 ".concat(t>0?"border-t border-gray-100":""),children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("span",{className:"truncate text-sm text-gray-800",children:e.email}),(0,a.jsxs)("span",{className:"ml-2 text-xs text-gray-400",children:[new Date(e.joinedAt).toLocaleDateString("zh-CN")," 加入"]})]}),(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:["owner"===e.role&&(0,a.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-xs text-amber-700",children:"归属者"}),"admin"===e.role&&(0,a.jsx)("span",{className:"rounded bg-blue-100 px-1.5 py-0.5 text-xs text-blue-700",children:"管理员"}),"owner"===o&&"owner"!==e.role&&(0,a.jsxs)(a.Fragment,{children:["member"===e.role?(0,a.jsx)("button",{onClick:()=>U(e,!0),disabled:w===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,a.jsx)("button",{onClick:()=>U(e,!1),disabled:w===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:"取消管理员"}),I===e.hmUserId?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{onClick:()=>_(e),disabled:w===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,a.jsx)("button",{onClick:()=>S(null),className:"rounded-md border border-gray-200 px-2 py-0.5 text-xs text-gray-400",children:"取消"})]}):(0,a.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"===o&&(0,a.jsx)("p",{className:"mt-2 text-xs text-gray-400",children:"转移归属后你将成为管理员,对方成为归属者(归属权即公司归属,可随时再转)"})]})]}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-gray-400",children:"尚未选择公司——在左下角切换到公司后再进入企业管理"})}},5777:function(e,t,n){"use strict";n.d(t,{Cd:function(){return N},aG:function(){return v},cp:function(){return j},nu:function(){return g},tQ:function(){return w}});var a=n(635),r=n(4431),l=n(529);let s=null,i=null,d=null,o=null,c=new Set;function u(){c.forEach(e=>e())}function m(e){let t=new Headers;return s&&t.set("Authorization","UTOKEN ".concat(s)),(0,r.rd)(e,{headers:t})}async function x(){let[e,t]=await Promise.all([(0,r.rd)("/auth/session"),m("/datasync/state")]),n=(null==e?void 0:e.loggedIn)&&e.token?e.token:null,a=null!=t?t:null;if(!a&&e&&n&&n!==s?(s=n,a=await m("/datasync/state")):s=n,!e&&!a){i=i?{...i,loadError:"本地服务无响应"}:{session:null,sync:null,utoken:s,loadError:"本地服务无响应",refresh:h},u();return}i={session:null!=e?e:{loggedIn:!1},sync:a,utoken:s,loadError:null,refresh:h},u()}function h(){return d||(d=x().finally(()=>{d=null}))}function y(e){return c.add(e),1===c.size&&(h(),o=setInterval(()=>void h(),6e4)),()=>{c.delete(e),0===c.size&&o&&(clearInterval(o),o=null)}}let b={session:null,sync:null,utoken:null,loadError:null,refresh:h};function f(){return null!=i?i:b}function p(){return f()}function g(){return(0,a.useSyncExternalStore)(y,f,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 a=null!==(t=null==e?void 0:e.activeTenantId)&&void 0!==t?t:null;if(null==a)return null;let r=(null!==(n=null==e?void 0:e.memberships)&&void 0!==n?n:[]).find(e=>e.tenantId===a&&!e.leftAt);return!r||r.isPersonal?null:a}function N(e,t){var n,a;if(!t)return null;let r=(null!==(n=null==e?void 0:e.memberships)&&void 0!==n?n:[]).find(e=>e.tenantId===t&&!e.leftAt&&!e.isPersonal);return null!==(a=null==r?void 0:r.role)&&void 0!==a?a:null}function w(){return l.env.NEXT_PUBLIC_HUNTER_MATE_SERVER_URL||""}},4431:function(e,t,n){"use strict";n.d(t,{Ox:function(){return r},rd:function(){return s},uz:function(){return i}});var a=n(529);function r(){return a.env.HUNTER_MATE_SERVER_URL||""}let l=r();async function s(e,t){try{let n=await fetch("".concat(l).concat(e),{cache:"no-store",...t});if(!n.ok)return null;return await n.json()}catch(e){return null}}async function i(e,t){try{let n=await fetch("".concat(l).concat(e),{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}}}},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:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="48bab23d-7b3d-4510-9ac2-50eafae1910b",e._sentryDebugIdIdentifier="sentry-dbid-48bab23d-7b3d-4510-9ac2-50eafae1910b")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[109],{4843:function(e,t,s){Promise.resolve().then(s.bind(s,4821))},4821:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return j}});var l=s(2835),a=s(635),r=s(8170),n=s(7473),i=s(4431),d=s(8448),c=s(4518),o=s(3718),u=s(6777),m=s(6119),x=s(3464);let f={draft:"草稿",active:"交付中",archived:"已归档"};function b(){var e,t,s;let r=(0,n.useRouter)(),b=(0,n.useSearchParams)(),h=b.get("id"),[g,j]=(0,a.useState)({}),[p,y]=(0,a.useState)(""),[v,N]=(0,a.useState)(""),[w,k]=(0,a.useState)(null),[I,S]=(0,a.useState)(!1),P=(0,m.B)({deleteUrl:"/job-cases",label:"职位",onDeleted:()=>_.refresh()}),_=(0,x.k)({fetchPage:(0,a.useCallback)(async(e,t)=>{var s,l;let a=await (0,i.rd)("/job-cases?q=".concat(encodeURIComponent(v),"&limit=").concat(t,"&offset=").concat(e));return{items:null!==(s=null==a?void 0:a.items)&&void 0!==s?s:[],total:null!==(l=null==a?void 0:a.total)&&void 0!==l?l:0}},[v]),pageSize:50,deps:[v]});(0,a.useEffect)(()=>{let e=setTimeout(()=>N(p.trim()),300);return()=>clearTimeout(e)},[p]),(0,a.useEffect)(()=>{(0,i.rd)("/customers").then(e=>{let t={};for(let s of null!=e?e:[])t[s.id]=s.canonicalName;j(t)})},[]),(0,a.useEffect)(()=>{P.prune(_.items.map(e=>String(e.id)))},[_.items,P]),(0,a.useEffect)(()=>{if(!h){k(null);return}S(!0),(0,i.rd)("/job-cases/".concat(h)).then(e=>{k(e),S(!1)})},[h]);let E=(0,a.useCallback)(e=>{let t=new URLSearchParams(b.toString());e.id?t.set("id",e.id):t.delete("id"),r.replace("/jobs?".concat(t.toString()))},[r,b]),C=(0,a.useMemo)(()=>_.items.map(e=>{var t,s,a;let r=function(e){var t,s;let l;let a=(null!==(t=e.folderPath)&&void 0!==t?t:"").split("/").filter(Boolean).filter(e=>!["job","jd","raw"].includes(e));return(l=e.title)&&!["job","jd","raw"].includes(l)?e.title:null!==(s=a.at(-1))&&void 0!==s?s:"案件 #".concat(e.id)}(e);return{id:String(e.id),content:(0,l.jsxs)("div",{className:"flex items-start gap-2",children:[P.checkbox(String(e.id)),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"font-medium text-gray-900",children:null!=r?r:"(案件 #".concat(e.id,")")}),(0,l.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat("active"===e.status?"bg-emerald-100 text-emerald-700":"bg-gray-100 text-gray-500"),children:null!==(t=f[e.status])&&void 0!==t?t:e.status}),(null!==(s=e.folderPath)&&void 0!==s?s:"").includes("/local/clients/")?(0,l.jsx)("span",{className:"rounded bg-purple-100 px-1.5 py-0.5 text-xs text-purple-700",children:"本地"}):null]}),(0,l.jsx)("div",{className:"text-xs text-gray-500",children:e.customerId?null!==(a=g[e.customerId])&&void 0!==a?a:"客户 #".concat(e.customerId):"未关联客户"}),(0,l.jsx)("div",{className:"mt-0.5 text-xs text-gray-400",children:(0,d.d3)(e.createdAt)})]})]})}}),[_.items,g,P]),F=h?I?(0,l.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):w?(0,l.jsxs)("div",{className:"h-full overflow-y-auto p-4",children:[(0,l.jsx)("h2",{className:"mb-1 text-lg font-semibold text-gray-900",children:null!==(e=w.title)&&void 0!==e?e:"案件 #".concat(w.id)}),(0,l.jsxs)("div",{className:"mb-4 text-xs text-gray-400",children:["externalId: ",w.externalId," \xb7 ",null!==(t=f[w.status])&&void 0!==t?t:w.status," \xb7 更新于"," ",(0,d.d3)(w.updatedAt)]}),w.customerId?(0,l.jsxs)("a",{href:"/companies?id=".concat(w.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,l.jsx)("span",{className:"text-gray-500",children:"客户公司:"}),(0,l.jsx)("span",{className:"font-medium",children:null!==(s=g[w.customerId])&&void 0!==s?s:"#".concat(w.customerId)}),(0,l.jsx)("span",{className:"text-xs text-amber-500",children:"查看公司详情 →"})]}):null,w.folderPath?(0,l.jsxs)("div",{className:"mb-4 break-all text-xs text-gray-500",children:["文件夹:",w.folderPath]}):null,w.requirements&&Object.keys(w.requirements).length>0?(0,l.jsxs)("section",{className:"mb-4",children:[(0,l.jsx)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:"职位要求(requirements)"}),(0,l.jsx)(u.Y,{data:w.requirements})]}):null,w.rawFiles&&Object.keys(w.rawFiles).length>0?(0,l.jsxs)("section",{children:[(0,l.jsx)("h3",{className:"mb-2 text-sm font-medium text-gray-800",children:"原始文件(rawFiles)"}),(0,l.jsx)(u.Y,{data:w.rawFiles})]}):null]}):(0,l.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该案件"}):(0,l.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一个职位案件查看详情"});return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.m,{filterBar:(0,l.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,l.jsx)("input",{type:"text",value:p,onChange:e=>y(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,l.jsxs)("div",{className:"text-xs text-gray-400",children:["已加载 ",_.items.length," / 共 ",_.total," 个职位"]}),P.bar(C)]}),listPanel:(0,l.jsx)(o.L,{items:C,selectedId:null!=h?h:void 0,onSelect:e=>E({id:e}),loading:_.loading,emptyText:"暂无职位",onLoadMore:_.loadMore,loadingMore:_.loadingMore,exhausted:_.exhausted}),detailPanel:F}),P.modal()]})}function h(){return(0,l.jsx)(a.Suspense,{fallback:(0,l.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,l.jsx)(b,{})})}let g=[{key:"cases",label:"职位案件"},{key:"entities",label:"招聘实体"}];function j(){let[e,t]=(0,a.useState)("cases");return(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[(0,l.jsx)("div",{className:"flex gap-1 border-b border-gray-200 bg-white px-3 pt-2",children:g.map(s=>(0,l.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))}),(0,l.jsx)("div",{className:"min-h-0 flex-1",children:"cases"===e?(0,l.jsx)(h,{}):(0,l.jsx)(r.EntityListPage,{type:"job",label:"职位",titleField:"title",subtitleField:"company",batchDelete:!0})})]})}}},function(e){e.O(0,[170,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]="3f962691-0047-4a65-ba88-f5661e00182e",e._sentryDebugIdIdentifier="sentry-dbid-3f962691-0047-4a65-ba88-f5661e00182e")}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,1989))},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}})},1989:function(e,t,n){"use strict";n.d(t,{SystemSidebar:function(){return h}});var l=n(2835),a=n(5589),s=n(7473),r=n(635),i=n(5777);function o(){var e,t;let{session:n,sync:a,utoken:s,loadError:o,refresh:x}=(0,i.nu)(),[m,h]=(0,r.useState)(!1),[b,f]=(0,r.useState)(!1),[y,g]=(0,r.useState)(!1),[p,v]=(0,r.useState)(!1),j=(null==n?void 0:n.loggedIn)||(null==a?void 0:a.loggedIn),N=(0,i.aG)(a),w=(0,i.cp)(a),C=null==w?null:null!==(t=null===(e=N.find(e=>e.tenantId===w))||void 0===e?void 0:e.name)&&void 0!==t?t:null,k=async e=>{v(!0);try{let t=new Headers({"Content-Type":"application/json"});s&&t.set("Authorization","UTOKEN ".concat(s)),await fetch("".concat((0,i.tQ)(),"/datasync/active-tenant"),{method:"POST",headers:t,body:JSON.stringify({id:e})}),await x()}finally{v(!1)}},S=async()=>{let e=new Headers({"Content-Type":"application/json"});s&&e.set("Authorization","UTOKEN ".concat(s)),await fetch("".concat((0,i.tQ)(),"/datasync/logout"),{method:"POST",headers:e}).catch(()=>null),window.location.reload()},D=null===a?{text:"同步状态加载中…",cls:"bg-gray-100 text-gray-400"}:a.enabled?a.authFailed?{text:"登录态失效",cls:"bg-red-100 text-red-600"}:a.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:[o?(0,l.jsxs)("div",{className:"text-xs text-red-500",children:[o,"(本地服务未启动?)"]}):j?(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==n?void 0:n.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:S,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:()=>f(e=>!e),disabled:p,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==w?"个人产出(不归属公司)":null!=C?C:"未知公司"}),(0,l.jsx)("span",{className:"text-xs text-gray-400",children:p?"切换中…":"▾"})]}),(0,l.jsx)("div",{className:"mt-1 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:()=>h(!0),className:"rounded-lg bg-blue-600 px-3 py-1.5 text-sm text-white hover:bg-blue-700",children:"登录"})]}),b&&j&&(0,l.jsx)(c,{sync:a,companies:N,activeTenantId:w,onPick:async e=>{f(!1),await k(e)},onCreateJoin:()=>{f(!1),g(!0)},onClose:()=>f(!1)}),y&&j&&(0,l.jsx)(u,{utoken:s,onDone:async e=>{g(!1),null!=e&&await k(e),await x()},onClose:()=>g(!1)}),m&&(0,l.jsx)(d,{onClose:()=>h(!1),onDone:()=>{h(!1),x()}})]})}function c(e){let{sync:t,companies:n,activeTenantId:a,onPick:s,onCreateJoin:i,onClose:o}=e,c=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=e=>{c.current&&!c.current.contains(e.target)&&o()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[o]),(0,l.jsxs)("div",{ref:c,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:()=>s(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:()=>s(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 u(e){let{utoken:t,onDone:n,onClose:a}=e,[s,o]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),[d,x]=(0,r.useState)([]),[m,h]=(0,r.useState)(!1),[b,f]=(0,r.useState)(null),[y,g]=(0,r.useState)(null),[p,v]=(0,r.useState)(null),j=(0,r.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,r.useEffect)(()=>{let e=s.trim();if(!e){x([]),u(!1);return}u(!0);let t=setTimeout(async()=>{var t;let n=await j("/company/search?q=".concat(encodeURIComponent(e)));if(!n.ok){x([]),u(!1);return}x(null!==(t=(await n.json()).items)&&void 0!==t?t:[]),u(!1)},300);return()=>clearTimeout(t)},[s,j]);let N=async()=>{let e=s.trim();if(e){h(!0),g(null);try{var t;let l=await j("/company",{method:"POST",body:JSON.stringify({name:e})}),a=await l.json().catch(()=>null);if(!l.ok){g((null==a?void 0:a.message)||"创建失败(HTTP ".concat(l.status,")"));return}n(null!==(t=null==a?void 0:a.id)&&void 0!==t?t:null)}finally{h(!1)}}},w=async e=>{f(e.id),g(null),v(null);try{let t=await j("/company/".concat(e.id,"/apply"),{method:"POST",body:JSON.stringify({})}),n=await t.json().catch(()=>null);if(!t.ok){g((null==n?void 0:n.message)||"申请失败(HTTP ".concat(t.status,")"));return}(null==n?void 0:n.already)?v("已申请过「".concat(e.name,"」,等待管理员审批")):v("已申请加入「".concat(e.name,"」,管理员通过后即可数据互通")),x(t=>t.map(t=>t.id===e.id?{...t,myApplication:"pending"}:t))}finally{f(null)}},C=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:a,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:s,onChange:e=>o(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:""===s.trim()?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"输入关键词可检索已存在的公司并申请加入"}):c?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"检索中…"}):0===d.length?(0,l.jsxs)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:["没有匹配「",s.trim(),"」的公司,可直接创建"]}):d.map(e=>{let t=C(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&&w(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:N,disabled:m||""===s.trim(),className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"创建中…":"创建公司「".concat(s.trim()||"…","」")}),p&&(0,l.jsx)("div",{className:"mt-2 text-xs text-green-600",children:p}),y&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:y}),(0,l.jsx)("button",{onClick:a,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"关闭"})]})})}function d(e){let{onClose:t,onDone:n}=e,[a,s]=(0,r.useState)(""),[o,c]=(0,r.useState)(""),[u,d]=(0,r.useState)("email"),[x,m]=(0,r.useState)(!1),[h,b]=(0,r.useState)(null),f=async()=>{if(!a.includes("@")){b("请输入有效邮箱");return}m(!0),b(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(m(!1),!e.ok){let t=await e.json().catch(()=>null);b((null==t?void 0:t.message)||"发送失败(HTTP ".concat(e.status,")"));return}d("code")},y=async()=>{if(!/^\d{4,8}$/.test(o)){b("请输入验证码(4-8 位数字)");return}m(!0),b(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(m(!1),!e.ok){let t=await e.json().catch(()=>null);b((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"===u?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:a,onChange:e=>s(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:f,disabled:x,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:x?"发送中…":"发送验证码"})]}):(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=>c(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:y,disabled:x,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:x?"验证中…":"登录"}),(0,l.jsx)("button",{onClick:()=>{d("email"),b(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})]})})}let x=null,m=[{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"}];function h(){var e,t,n,c;let u=(0,s.usePathname)()||"/",{sync:d,utoken:h}=(0,i.nu)(),b=(0,i.cp)(d),f=(0,i.Cd)(d,b),y=null!==(n=null===(e=(null!==(t=null==d?void 0:d.pendingCounts)&&void 0!==t?t:[]).find(e=>e.tenantId===b))||void 0===e?void 0:e.count)&&void 0!==n?n:0,[g,p]=(0,r.useState)(null!==(c=null==x?void 0:x.isAdmin)&&void 0!==c&&c);return(0,r.useEffect)(()=>{if(!h){p(!1);return}if((null==x?void 0:x.utoken)===h){p(x.isAdmin);return}let e=!1;return(async()=>{try{let t=await fetch("/admin/entities?pageSize=1&hmUserId=1",{headers:{Authorization:"UTOKEN ".concat(h)}}),n=403!==t.status&&401!==t.status;x={utoken:h,isAdmin:n},e||p(n)}catch(t){e||p(!1)}})(),()=>{e=!0}},[h]),(0,l.jsxs)("aside",{className:"flex h-screen w-56 flex-col border-r border-gray-200 bg-white",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 border-b border-gray-200 px-4 py-3",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:[m.map(e=>{let t=u===e.href||u.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?"bg-blue-50 text-blue-700":"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!=b&&("owner"===f||"admin"===f)&&(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(u.startsWith("/company/admin")?"bg-blue-50 text-blue-700":"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:"⚙️"}),"企业管理"]}),y>0&&(0,l.jsx)("span",{className:"rounded-full bg-red-500 px-1.5 text-[10px] leading-4 text-white",children:y>99?"99+":y})]}),g&&(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(u.startsWith("/admin")?"bg-blue-50 text-blue-700":"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)(o,{})]})}},5777:function(e,t,n){"use strict";n.d(t,{Cd:function(){return N},aG:function(){return v},cp:function(){return j},nu:function(){return p},tQ:function(){return w}});var l=n(635),a=n(4431),s=n(529);let r=null,i=null,o=null,c=null,u=new Set;function d(){u.forEach(e=>e())}function x(e){let t=new Headers;return r&&t.set("Authorization","UTOKEN ".concat(r)),(0,a.rd)(e,{headers:t})}async function m(){let[e,t]=await Promise.all([(0,a.rd)("/auth/session"),x("/datasync/state")]),n=(null==e?void 0:e.loggedIn)&&e.token?e.token:null,l=null!=t?t:null;if(!l&&e&&n&&n!==r?(r=n,l=await x("/datasync/state")):r=n,!e&&!l){i=i?{...i,loadError:"本地服务无响应"}:{session:null,sync:null,utoken:r,loadError:"本地服务无响应",refresh:h},d();return}i={session:null!=e?e:{loggedIn:!1},sync:l,utoken:r,loadError:null,refresh:h},d()}function h(){return o||(o=m().finally(()=>{o=null}))}function b(e){return u.add(e),1===u.size&&(h(),c=setInterval(()=>void h(),6e4)),()=>{u.delete(e),0===u.size&&c&&(clearInterval(c),c=null)}}let f={session:null,sync:null,utoken:null,loadError:null,refresh:h};function y(){return null!=i?i:f}function g(){return y()}function p(){return(0,l.useSyncExternalStore)(b,y,g)}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 N(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 w(){return s.env.NEXT_PUBLIC_HUNTER_MATE_SERVER_URL||""}},4431:function(e,t,n){"use strict";n.d(t,{Ox:function(){return a},rd:function(){return r},uz:function(){return i}});var l=n(529);function a(){return l.env.HUNTER_MATE_SERVER_URL||""}let s=a();async function r(e,t){try{let n=await fetch("".concat(s).concat(e),{cache:"no-store",...t});if(!n.ok)return null;return await n.json()}catch(e){return null}}async function i(e,t){try{let n=await fetch("".concat(s).concat(e),{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}}},1115:function(){}},function(e){e.O(0,[24,589,400,935,744],function(){return e(e.s=3128)}),_N_E=e.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-936f6190c968d20b.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]="96c431b0-e295-4028-902d-09a801fdcb0c",n._sentryDebugIdIdentifier="sentry-dbid-96c431b0-e295-4028-902d-09a801fdcb0c")}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),s=t(4431);function a(){let n=(0,i.useParams)().id,[e,t]=(0,o.useState)([]),[a,c]=(0,o.useState)(!1),[u,d]=(0,o.useState)(null);async function l(){c(!0),d(null);try{let e=await fetch("".concat((0,s.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{c(!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?"计算中...":"刷新匹配"}),u&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:u}),(0,r.jsx)("div",{style:{marginTop:16},children:e.map(n=>{var e,t,o,i,s,a,c;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===(s=n.scores)||void 0===s?void 0:s.location," | 薪酬 ",null===(a=n.scores)||void 0===a?void 0:a.salary]}),(null===(c=n.recommendation)||void 0===c?void 0:c.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 o},rd:function(){return s},uz:function(){return a}});var r=t(529);function o(){return r.env.HUNTER_MATE_SERVER_URL||""}let i=o();async function s(n,e){try{let t=await fetch("".concat(i).concat(n),{cache:"no-store",...e});if(!t.ok)return null;return await t.json()}catch(n){return null}}async function a(n,e){try{let t=await fetch("".concat(i).concat(n),{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}}}},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-ea44a2236bd53cae.js
DELETED
|
@@ -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]="065b04d7-d859-475b-9170-c4be1bc7c428",e._sentryDebugIdIdentifier="sentry-dbid-065b04d7-d859-475b-9170-c4be1bc7c428")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[977],{8166:function(e,n,t){Promise.resolve().then(t.bind(t,1261))},7473:function(e,n,t){"use strict";var r=t(8321);t.o(r,"useParams")&&t.d(n,{useParams:function(){return r.useParams}}),t.o(r,"usePathname")&&t.d(n,{usePathname:function(){return r.usePathname}}),t.o(r,"useRouter")&&t.d(n,{useRouter:function(){return r.useRouter}}),t.o(r,"useSearchParams")&&t.d(n,{useSearchParams:function(){return r.useSearchParams}})},1261:function(e,n,t){"use strict";t.d(n,{default:function(){return a}});var r=t(2835),o=t(635),i=t(7473),s=t(4431);function a(){let e=(0,i.useParams)().id,[n,t]=(0,o.useState)([]),[a,c]=(0,o.useState)(!1),[u,d]=(0,o.useState)(null);async function l(){c(!0),d(null);try{let n=await fetch("".concat((0,s.Ox)(),"/matching/portraits/").concat(e,"/jobs"));if(!n.ok)throw Error("HTTP ".concat(n.status));t(await n.json())}catch(e){d(e.message)}finally{c(!1)}}return(0,r.jsxs)("div",{style:{padding:24,maxWidth:900,margin:"0 auto"},children:[(0,r.jsxs)("h1",{children:["人才 ",e.slice(0,8)," 的推荐职位"]}),(0,r.jsx)("button",{onClick:l,disabled:a,children:a?"计算中...":"刷新匹配"}),u&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:u}),(0,r.jsx)("div",{style:{marginTop:16},children:n.map(e=>{var n,t,o,i,s,a,c;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: ",e.jobCaseId," — 综合分 ",null===(n=e.scores)||void 0===n?void 0:n.overall]}),(0,r.jsxs)("div",{style:{fontSize:13,color:"#555",marginTop:4},children:["技能 ",null===(t=e.scores)||void 0===t?void 0:t.skill," | 经验 ",null===(o=e.scores)||void 0===o?void 0:o.experience," | 行业 ",null===(i=e.scores)||void 0===i?void 0:i.industry," | 地点 ",null===(s=e.scores)||void 0===s?void 0:s.location," | 薪酬 ",null===(a=e.scores)||void 0===a?void 0:a.salary]}),(null===(c=e.recommendation)||void 0===c?void 0:c.aiReason)&&(0,r.jsx)("pre",{style:{marginTop:8,background:"#f5f5f5",padding:12,borderRadius:4,whiteSpace:"pre-wrap"},children:e.recommendation.aiReason})]},e.id)})})]})}},4431:function(e,n,t){"use strict";t.d(n,{Ox:function(){return o},rd:function(){return s},uz:function(){return a}});var r=t(529);function o(){return r.env.HUNTER_MATE_SERVER_URL||""}let i=o();async function s(e,n){try{let t=await fetch("".concat(i).concat(e),{cache:"no-store",...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(i).concat(e),{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}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=8166)}),_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]="bf3fd51e-60d2-497f-9c42-e874956c67ed",e._sentryDebugIdIdentifier="sentry-dbid-bf3fd51e-60d2-497f-9c42-e874956c67ed")}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),a=n(4431),i=n(8448);function s(){var e,t,n,s,c;let[d,u]=(0,r.useState)({}),[f,h]=(0,r.useState)(0),[m,y]=(0,r.useState)(null),[b,g]=(0,r.useState)(""),v=(0,r.useCallback)(async()=>{var e,t,n,l,r,o,s;let[c,d,f,m,b]=await Promise.all([(0,a.rd)("/entities?type=talent&limit=1"),(0,a.rd)("/entities?type=job&limit=1"),(0,a.rd)("/entities?type=company&limit=1"),(0,a.rd)("/parse-log?limit=1"),(0,a.rd)("/api/recordings?limit=1")]);y(!!(c||d||f||m||b)),u({talent:null!==(t=null==c?void 0:c.total)&&void 0!==t?t:0,job:null!==(n=null==d?void 0:d.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),g((0,i.d3)(new Date().toISOString()))},[]);(0,r.useEffect)(()=>{v()},[v]);let p=[{key:"talent",label:"人才",href:"/talents",count:null!==(e=d.talent)&&void 0!==e?e:0},{key:"job",label:"职位",href:"/jobs",count:null!==(t=d.job)&&void 0!==t?t:0},{key:"company",label:"公司",href:"/companies",count:null!==(n=d.company)&&void 0!==n?n:0},{key:"parseLog",label:"解析日志",href:"/parselog",count:null!==(s=d.parseLog)&&void 0!==s?s:0,abnormal:f},{key:"recording",label:"录制会话",href:"/recordings",count:null!==(c=d.recording)&&void 0!==c?c: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 r},rd:function(){return a},uz:function(){return i}});var l=n(529);function r(){return l.env.HUNTER_MATE_SERVER_URL||""}let o=r();async function a(e,t){try{let n=await fetch("".concat(o).concat(e),{cache:"no-store",...t});if(!n.ok)return null;return await n.json()}catch(e){return null}}async function i(e,t){try{let n=await fetch("".concat(o).concat(e),{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}}}},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]="de451364-cb9a-4186-8160-d40d862bbbc0",e._sentryDebugIdIdentifier="sentry-dbid-de451364-cb9a-4186-8160-d40d862bbbc0")}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 r=s(8321);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},4895:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return y}});var r=s(2835),n=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:n}=e;return(0,r.jsxs)("div",{className:"mx-auto max-w-4xl",children:[(0,r.jsx)(d.default,{href:"/parselog",className:"text-sm text-blue-600 hover:underline",children:"← 返回解析日志列表"}),(0,r.jsxs)("header",{className:"mt-4 mb-6",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,r.jsxs)("h1",{className:"text-2xl font-bold text-gray-900",children:["解析记录 #",n.id]}),(0,r.jsx)("span",{className:"rounded px-2 py-0.5 text-xs ".concat(f[n.status]),children:null!==(s=m[n.status])&&void 0!==s?s:n.status}),n.hasSnapshot?(0,r.jsx)("span",{className:"rounded bg-green-50 px-2 py-0.5 text-xs text-green-700",children:"有录制快照"}):null]}),(0,r.jsxs)("p",{className:"mt-1 text-sm text-gray-500",children:[n.domain," \xb7 ",n.pageClass," \xb7 ",(0,x.d3)(n.createdAt)]})]}),(0,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"来源"}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"text-sm",children:[(0,r.jsx)("span",{className:"text-gray-500",children:"sessionId: "}),(0,r.jsx)("span",{className:"font-mono",children:n.sessionId})]}),(0,r.jsx)("a",{href:n.sourceUrl,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:n.sourceUrl}),n.entityId?(0,r.jsxs)("div",{className:"pt-2",children:[(0,r.jsx)("span",{className:"text-sm text-gray-500",children:"关联实体: "}),(0,r.jsxs)(d.default,{href:"/".concat(n.pageClass,"s?id=").concat(n.entityId),className:"text-sm text-blue-600 hover:underline",children:["#",n.entityId," (",n.pageClass,")"]})]}):null]})]}),n.extractedFields?(0,r.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"提取字段"}),(0,r.jsx)("pre",{className:"max-h-96 overflow-auto rounded bg-gray-50 p-3 text-xs text-gray-700",children:JSON.stringify(n.extractedFields,null,2)})]}):null,(null===(t=n.missingFields)||void 0===t?void 0:t.length)?(0,r.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"缺失字段(疑似站点改版)"}),(0,r.jsx)("ul",{className:"list-inside list-disc text-sm text-gray-700",children:n.missingFields.map(e=>(0,r.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,r]=e;r&&t.set(s,r)});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,n.useMemo)(()=>({q:s.get("q")||"",status:s.get("status")||"",from:s.get("from")||"",to:s.get("to")||""}),[s]),[f,v]=(0,n.useState)(null),[y,j]=(0,n.useState)(null),[N,w]=(0,n.useState)(!0),[S,k]=(0,n.useState)(!1),[C,E]=(0,n.useState)(0),I=(0,n.useCallback)(s=>{var r,n;let a=null!==(r=s.filters)&&void 0!==r?r:m,l=p({id:null!==(n=s.id)&&void 0!==n?n: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,n.useCallback)(()=>{E(e=>e+1)},[]),q=(0,n.useCallback)(()=>{let e=null==f?void 0:f.items[0];return null==e?void 0:e.createdAt},[f]);(0,n.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,C]),(0,n.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,n.useMemo)(()=>{var e;return(null!==(e=null==f?void 0:f.items)&&void 0!==e?e:[]).map(e=>({id:String(e.id),content:(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat(b[e.status]),children:e.status}),(0,r.jsx)("span",{className:"text-xs text-gray-500",children:e.pageClass})]}),(0,r.jsx)("div",{className:"mt-0.5 text-sm font-medium text-gray-900",children:e.domain}),(0,r.jsx)("div",{className:"text-xs text-gray-400",children:(0,x.d3)(e.createdAt)})]})}))},[f]),_=d?S?(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):y?(0,r.jsx)(h,{item:y}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该解析日志"}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一条解析日志查看详情"});return(0,r.jsx)(c.m,{filterBar:(0,r.jsxs)("div",{className:"border-b border-gray-200 bg-white",children:[(0,r.jsx)(o.f,{value:m,showStatus:!0,statusOptions:g,onChange:e=>I({filters:e})}),f?(0,r.jsxs)("div",{className:"flex items-center justify-between px-3 pb-2 text-xs text-gray-500",children:[(0,r.jsxs)("span",{children:["共 ",f.total," 条"]}),f.abnormal>0?(0,r.jsxs)("span",{className:"rounded bg-red-50 px-1.5 py-0.5 text-red-700",children:["异常 ",f.abnormal]}):null]}):null,(0,r.jsx)(u.Y,{pollUrl:"/parse-log/count",getLatestTimestamp:q,onRefresh:P,label:"解析日志"})]}),listPanel:(0,r.jsx)(i.L,{items:R,selectedId:d,onSelect:e=>I({id:e}),loading:N,emptyText:"暂无解析日志"}),detailPanel:_})}function y(){return(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,r.jsx)(v,{})})}},7202:function(e,t,s){"use strict";s.d(t,{f:function(){return a}});var r=s(2835),n=s(635);function a(e){let{value:t,showStatus:s,statusOptions:a,onChange:l}=e,[o,c]=(0,n.useState)(t);return(0,n.useEffect)(()=>{c(t)},[t.q,t.status,t.from,t.to]),(0,n.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,r.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("div",{className:"relative flex-1",children:[(0,r.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,r.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,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,r.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,r.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,r.jsx)("option",{value:"",children:"全部状态"}),(a||[]).map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))]}):null]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.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,r.jsx)("span",{className:"text-sm text-gray-400",children:"-"}),(0,r.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 n}});var r=s(2835);function n(e){let{filterBar:t,listPanel:s,detailPanel:n}=e;return(0,r.jsxs)("div",{className:"flex h-full",children:[(0,r.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,s]}),(0,r.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:n})]})}},3718:function(e,t,s){"use strict";s.d(t,{L:function(){return a}});var r=s(2835),n=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,n.useRef)(null);return(0,n.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,r.jsxs)("div",{className:"flex-1 overflow-auto",children:[l?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:o}):(0,r.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,r.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,r.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 r=s(2835),n=s(635),a=s(4431);function l(e){let{pollUrl:t,intervalMs:s=5e3,onRefresh:l,getLatestTimestamp:o,label:c="新数据"}=e,[i,u]=(0,n.useState)(0),[d,x]=(0,n.useState)(!1),m=(0,n.useRef)(void 0);return((0,n.useEffect)(()=>{let e=()=>x(document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]),(0,n.useEffect)(()=>{m.current=o(),u(0)},[o]),(0,n.useEffect)(()=>{if(d)return;let e=async()=>{var e;let s=m.current;if(!s)return;let r=t.includes("?")?"&":"?",n=await (0,a.rd)("".concat(t).concat(r,"since=").concat(encodeURIComponent(s))).catch(()=>null),l=null!==(e=null==n?void 0:n.count)&&void 0!==e?e:0;u(e=>Math.max(e,l))};e();let r=setInterval(e,s);return()=>clearInterval(r)},[t,s,d]),i<=0)?null:(0,r.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 r(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}s.d(t,{d3:function(){return r}})},4431:function(e,t,s){"use strict";s.d(t,{Ox:function(){return n},rd:function(){return l},uz:function(){return o}});var r=s(529);function n(){return r.env.HUNTER_MATE_SERVER_URL||""}let a=n();async function l(e,t){try{let s=await fetch("".concat(a).concat(e),{cache:"no-store",...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(a).concat(e),{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}}}},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]="bd13484c-a366-4a47-a4a7-b7c0afc3969d",e._sentryDebugIdIdentifier="sentry-dbid-bd13484c-a366-4a47-a4a7-b7c0afc3969d")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[370],{1428:function(e,t,s){Promise.resolve().then(s.bind(s,6297))},7473:function(e,t,s){"use strict";var r=s(8321);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},6297:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return R}});var r=s(2835),n=s(635),l=s(7473),a=s(4431),i=s(7202),o=s(4518),d=s(8448);function c(e){var t,s,n,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!==(s=null==m?void 0:m.networkCount)&&void 0!==s?s:0},{label:"console",value:null!==(n=null==m?void 0:m.consoleCount)&&void 0!==n?n: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,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"事件数"}),(0,r.jsx)("div",{className:"text-lg font-semibold",children:o})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"来源页面"}),c?(0,r.jsx)("a",{href:c,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:c}):(0,r.jsx)("div",{className:"text-sm text-gray-400",children:"-"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"开始时间"}),(0,r.jsx)("div",{className:"text-sm",children:(0,d.d3)(u)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"最近事件"}),(0,r.jsx)("div",{className:"text-sm",children:(0,d.d3)(x)})]})]}),v.length>0?(0,r.jsx)("div",{className:"mt-3 flex flex-wrap gap-2 border-t border-gray-100 pt-3",children:v.map(e=>(0,r.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,r.jsx)("div",{className:"mt-3 border-t border-gray-100 pt-3",children:(0,r.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,s;let{type:n}=e,l=null!==(t=u[n])&&void 0!==t?t:n,a=null!==(s=x[n])&&void 0!==s?s:"bg-gray-100 text-gray-600";return(0,r.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:s,onSelectEvent:l}=e,[a,i]=(0,n.useState)("all"),o=(0,n.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,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-center gap-2",children:[(0,r.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,r.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,r.jsx)(m,{type:e})},e))]}),(0,r.jsx)("div",{className:"max-h-96 overflow-auto",children:0===o.length?(0,r.jsx)("div",{className:"py-8 text-center text-sm text-gray-400",children:"暂无事件"}):(0,r.jsx)("ul",{className:"space-y-1",children:o.map((e,t)=>{var n;return(0,r.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(s===e.id?"bg-blue-50":""),children:[(0,r.jsx)(m,{type:e.eventType}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("div",{className:"truncate text-gray-900",children:function(e){var t,s,r,n,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!==(s=null==d?void 0:d.method)&&void 0!==s?s:"GET"," ").concat(null!==(r=null==d?void 0:d.url)&&void 0!==r?r:"?");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===(n=d.args)||void 0===n?void 0:n[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,r.jsx)("div",{className:"text-xs text-gray-400",children:(0,d.d3)(e.createdAt)})]})]},null!==(n=e.id)&&void 0!==n?n:t)})})})]})}function g(e){let{data:t}=e;return(0,r.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 f(e){var t;let{event:s}=e,n=s.payload,l=(null==n?void 0:n.type)===2?"全量快照":(null==n?void 0:n.type)===3?"增量":"类型 ".concat(null!==(t=null==n?void 0:n.type)&&void 0!==t?t:"?");return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"text-sm text-gray-500",children:["rrweb ",l," \xb7 ",s.sourceUrl?(0,r.jsx)("a",{href:s.sourceUrl,target:"_blank",rel:"noreferrer",className:"text-blue-600 hover:underline",children:s.sourceUrl}):"来源未知"]}),(0,r.jsx)("div",{className:"rounded border border-purple-100 bg-purple-50 p-3 text-sm text-purple-700",children:"rrweb-player 完整回放将在后续迭代接入,当前可查看下方原始 JSON。"}),(0,r.jsx)(g,{data:s.payload})]})}function b(e){var t,s,n,l;let{event:a}=e,i=a.payload;return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"Method"}),(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==i?void 0:i.method)&&void 0!==t?t:"?"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"Status"}),(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(s=null==i?void 0:i.status)&&void 0!==s?s:"?"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"MIME"}),(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(n=null==i?void 0:i.mimeType)&&void 0!==n?n:"?"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"Size"}),(0,r.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,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"URL"}),(0,r.jsx)("a",{href:i.url,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:i.url})]}):null,(0,r.jsx)(g,{data:a.payload})]})}function y(e){var t,s,n,l;let{event:a}=e,i=a.payload,o=null!==(n=({error:"text-red-600",warn:"text-yellow-600",info:"text-blue-600",debug:"text-gray-500",log:"text-gray-700"})[null!==(s=null==i?void 0:i.level)&&void 0!==s?s:"log"])&&void 0!==n?n:"text-gray-700";return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"text-sm",children:["Level: ",(0,r.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,r.jsx)("div",{className:"space-y-2",children:i.args.map((e,t)=>(0,r.jsx)(g,{data:e},t))}):(0,r.jsx)(g,{data:a.payload})]})}function p(e){var t;let{event:s}=e,n=s.payload;return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==n?void 0:n.title)&&void 0!==t?t:"简历提取事件"}),(null==n?void 0:n.source)?(0,r.jsxs)("div",{className:"text-xs text-gray-500",children:["来源: ",(0,r.jsx)("a",{href:n.source,target:"_blank",rel:"noreferrer",className:"text-blue-600 hover:underline",children:n.source})]}):null,(null==n?void 0:n.fields)?(0,r.jsx)(g,{data:n.fields}):(0,r.jsx)(g,{data:s.payload})]})}function j(e){var t;let{event:s}=e,n=s.payload;return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==n?void 0:n.action)&&void 0!==t?t:"操作事件"}),(0,r.jsx)(g,{data:s.payload})]})}function N(e){let t,{event:s}=e,[l,a]=(0,n.useState)(!1);switch(s.eventType){case"rrweb":t=(0,r.jsx)(f,{event:s});break;case"network":t=(0,r.jsx)(b,{event:s});break;case"console":t=(0,r.jsx)(y,{event:s});break;case"resume":t=(0,r.jsx)(p,{event:s});break;case"action":t=(0,r.jsx)(j,{event:s});break;default:t=(0,r.jsx)(g,{data:s.payload})}return(0,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"事件详情"}),(0,r.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,r.jsx)("div",{className:"mt-3",children:(0,r.jsx)(g,{data:s})}):null]})}function w(e){let{sessionId:t}=e,[s,l]=(0,n.useState)("idle"),[i,o]=(0,n.useState)(null),[d,c]=(0,n.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,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"解析"}),(0,r.jsx)("button",{type:"button",onClick:u,disabled:"loading"===s,className:"rounded bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 disabled:opacity-50",children:"loading"===s?"解析中…":"触发解析"})]}),"success"===s?(0,r.jsxs)("div",{className:"mt-3 rounded border border-green-200 bg-green-50 p-3 text-sm text-green-700",children:[(0,r.jsx)("div",{children:"解析成功 ✅"}),x?(0,r.jsx)("a",{href:x,className:"mt-1 inline-block text-blue-600 hover:underline",children:"查看解析结果 →"}):null]}):null,"error"===s?(0,r.jsxs)("div",{className:"mt-3 rounded border border-red-200 bg-red-50 p-3 text-sm text-red-700",children:[(0,r.jsx)("div",{children:"解析失败"}),d?(0,r.jsx)("div",{className:"mt-1",children:d}):null]}):null]})}function k(e){let{events:t}=e,l=(0,n.useRef)(null),[a,i]=(0,n.useState)(!1);return((0,n.useEffect)(()=>{let e;if(!l.current||0===t.length)return;let r=!1;return async function(){let n=await Promise.all([s.e(131),s.e(671)]).then(s.bind(s,5841));await Promise.all([s.e(608),s.e(166)]).then(s.t.bind(s,166,23)),!r&&l.current&&(e=new(n.default||n)({target:l.current,props:{events:t}}),i(!0))}(),()=>{var t;r=!0,null==e||null===(t=e.$destroy)||void 0===t||t.call(e),l.current&&(l.current.innerHTML="")}},[t]),0===t.length)?(0,r.jsx)("div",{className:"rounded border border-gray-200 bg-white p-4 shadow-sm text-sm text-gray-500",children:"暂无 rrweb 回放事件"}):(0,r.jsxs)("div",{className:"rounded border border-gray-200 bg-white p-4 shadow-sm",children:[(0,r.jsx)("div",{ref:l,className:"w-full"}),a?null:(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"播放器加载中…"})]})}function S(e){let{data:t}=e,s=(0,l.useSearchParams)().get("eventId"),[a,i]=(0,n.useState)(null),[o,d]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(!s||!t.events.length){i(null);return}let e=Number(s),r=t.events.find(t=>t.id===e);i(null!=r?r:null)},[s,t.events]);let u=t.events.filter(e=>"rrweb"===e.eventType).map(e=>e.payload);return(0,r.jsxs)("div",{className:"mx-auto max-w-4xl",children:[(0,r.jsx)("header",{className:"mb-6",children:(0,r.jsx)("h1",{className:"text-2xl font-bold text-gray-900",children:"录制会话"})}),(0,r.jsx)(c,{sessionId:t.sessionId,eventCount:t.eventCount,sourceUrl:t.sourceUrl,startedAt:t.startedAt,lastEventAt:t.lastEventAt,summary:t.summary}),(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(k,{events:u})}),(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(w,{sessionId:t.sessionId})}),(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(h,{events:t.events,selectedEventId:null==a?void 0:a.id,onSelectEvent:i})}),a?(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(N,{event:a})}):null,(0,r.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"原始事件 JSON"}),(0,r.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,r.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,r.jsxs)("div",{className:"text-sm text-gray-500",children:["共 ",t.events.length," 条事件,点击展开查看原始 JSON"]})]})]})}var I=s(3718);function C(e){let{session:t}=e;return(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-mono text-xs text-gray-500",children:t.sessionId}),(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-gray-900",children:[(0,r.jsxs)("span",{children:[t.eventCount," 事件"]}),"number"==typeof t.tabId?(0,r.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,r.jsx)("div",{className:"truncate text-xs text-blue-600",children:t.sourceUrl}):null,(0,r.jsx)("div",{className:"text-xs text-gray-400",children:(0,d.d3)(t.lastEventAt)})]})}function E(e){let{sessions:t,selectedId:s,onSelect:n,loading:l}=e,a=t.map(e=>({id:e.sessionId,content:(0,r.jsx)(C,{session:e})}));return(0,r.jsx)(I.L,{items:a,selectedId:s,onSelect:n,loading:l,emptyText:"暂无录制会话"})}function L(e){let t=new URLSearchParams;Object.entries(e).forEach(e=>{let[s,r]=e;r&&t.set(s,r)});let s=t.toString();return s?"?".concat(s):""}function P(){var e,t,s,d;let c=(0,l.useRouter)(),u=(0,l.usePathname)(),x=(0,l.useSearchParams)(),m=x.get("sessionId")||"",v=(0,n.useMemo)(()=>({q:x.get("q")||"",status:"",from:x.get("from")||"",to:x.get("to")||""}),[x]),[h,g]=(0,n.useState)([]),[f,b]=(0,n.useState)(null),[y,p]=(0,n.useState)(!0),[j,N]=(0,n.useState)(!1),w=(0,n.useCallback)(e=>{var t,s;let r=null!==(t=e.filters)&&void 0!==t?t:v,n=L({sessionId:null!==(s=e.sessionId)&&void 0!==s?s:m,q:r.q,from:r.from,to:r.to});c.replace("".concat(u).concat(n))},[v,m,u,c]),k=(0,n.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=>{g(e=>{var s;return function(e,t){let s=new Map(e.map(e=>[e.sessionId,e]));return t.map(e=>{let t=s.get(e.sessionId);return t&&t.eventCount===e.eventCount&&t.lastEventAt===e.lastEventAt&&t.tabId===e.tabId?t:{...e}})}(e,null!==(s=null==t?void 0:t.sessions)&&void 0!==s?s:[])}),(null==e?void 0:e.withLoading)&&p(!1)})},[v.q,v.from,v.to]),I=(0,n.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,n.useEffect)(()=>{k({withLoading:!0})},[k]),(0,n.useEffect)(()=>{let e=setInterval(()=>k({withLoading:!1}),1e4);return()=>clearInterval(e)},[k]),(0,n.useEffect)(()=>{I({withLoading:!0})},[I]),(0,n.useEffect)(()=>{let e=setInterval(()=>I({withLoading:!1}),1e4);return()=>clearInterval(e)},[I]);let C=(0,r.jsx)(E,{sessions:h,selectedId:m,onSelect:e=>w({sessionId:e}),loading:y}),P=m?j?(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):f?(0,r.jsx)(S,{data:{sessionId:f.sessionId,eventCount:f.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=f.events[0])||void 0===t?void 0:t.createdAt)||"",lastEventAt:(null===(s=f.events[f.events.length-1])||void 0===s?void 0:s.createdAt)||"",events:f.events}}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该录制会话"}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一个录制会话查看详情"});return(0,r.jsx)(o.m,{filterBar:(0,r.jsx)(i.f,{value:v,onChange:e=>w({filters:e})}),listPanel:C,detailPanel:P})}function R(){return(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,r.jsx)(P,{})})}},7202:function(e,t,s){"use strict";s.d(t,{f:function(){return l}});var r=s(2835),n=s(635);function l(e){let{value:t,showStatus:s,statusOptions:l,onChange:a}=e,[i,o]=(0,n.useState)(t);return(0,n.useEffect)(()=>{o(t)},[t.q,t.status,t.from,t.to]),(0,n.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,r.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("div",{className:"relative flex-1",children:[(0,r.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,r.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,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,r.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,r.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,r.jsx)("option",{value:"",children:"全部状态"}),(l||[]).map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))]}):null]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.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,r.jsx)("span",{className:"text-sm text-gray-400",children:"-"}),(0,r.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,s){"use strict";s.d(t,{m:function(){return n}});var r=s(2835);function n(e){let{filterBar:t,listPanel:s,detailPanel:n}=e;return(0,r.jsxs)("div",{className:"flex h-full",children:[(0,r.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,s]}),(0,r.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:n})]})}},3718:function(e,t,s){"use strict";s.d(t,{L:function(){return l}});var r=s(2835),n=s(635);function l(e){let{items:t,selectedId:s,onSelect:l,loading:a,emptyText:i="暂无数据",onLoadMore:o,loadingMore:d,exhausted:c}=e,u=(0,n.useRef)(null);return(0,n.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,r.jsxs)("div",{className:"flex-1 overflow-auto",children:[a?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:i}):(0,r.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,r.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(s===e.id?"bg-blue-50":"hover:bg-gray-50"),children:e.content},e.id))}),o&&!a&&t.length>0&&(0,r.jsx)("div",{ref:u,className:"p-3 text-center text-xs text-gray-400",children:d?"加载更多…":c?"没有更多了":""})]})}},8448:function(e,t,s){"use strict";function r(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}s.d(t,{d3:function(){return r}})},4431:function(e,t,s){"use strict";s.d(t,{Ox:function(){return n},rd:function(){return a},uz:function(){return i}});var r=s(529);function n(){return r.env.HUNTER_MATE_SERVER_URL||""}let l=n();async function a(e,t){try{let s=await fetch("".concat(l).concat(e),{cache:"no-store",...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),{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}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=1428)}),_N_E=e.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-c89b32aa2ef509f5.js
DELETED
|
@@ -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]="cb6cb154-d81d-4ed0-8138-3b8e9189e898",e._sentryDebugIdIdentifier="sentry-dbid-cb6cb154-d81d-4ed0-8138-3b8e9189e898")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[325],{1765:function(e,n,t){Promise.resolve().then(t.bind(t,4492))},7473:function(e,n,t){"use strict";var r=t(8321);t.o(r,"useParams")&&t.d(n,{useParams:function(){return r.useParams}}),t.o(r,"usePathname")&&t.d(n,{usePathname:function(){return r.usePathname}}),t.o(r,"useRouter")&&t.d(n,{useRouter:function(){return r.useRouter}}),t.o(r,"useSearchParams")&&t.d(n,{useSearchParams:function(){return r.useSearchParams}})},4492:function(e,n,t){"use strict";t.d(n,{default:function(){return o}});var r=t(2835),a=t(635),u=t(7473),s=t(4431);function o(){let e=(0,u.useParams)().id,[n,t]=(0,a.useState)(null),[o,c]=(0,a.useState)(!1),[i,d]=(0,a.useState)(!1),[l,f]=(0,a.useState)(null);async function h(){c(!0),f(null);try{let n=await fetch("".concat((0,s.Ox)(),"/parsing/snapshots/").concat(e,"/agent-prompt"));if(!n.ok)throw Error("HTTP ".concat(n.status));let r=await n.json();t(r.prompt)}catch(e){f(e.message)}finally{c(!1)}}async function p(){n&&(await navigator.clipboard.writeText(n),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: ",e]}),(0,r.jsx)("button",{onClick:h,disabled:o,children:o?"加载中...":"生成 Prompt"}),l&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:l}),n&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{onClick:p,style:{marginLeft:12},children:i?"已复制 ✅":"复制到剪贴板"}),(0,r.jsx)("pre",{style:{marginTop:16,padding:16,background:"#f5f5f5",borderRadius:8,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:n})]})]})}},4431:function(e,n,t){"use strict";t.d(n,{Ox:function(){return a},rd:function(){return s},uz:function(){return o}});var r=t(529);function a(){return r.env.HUNTER_MATE_SERVER_URL||""}let u=a();async function s(e,n){try{let t=await fetch("".concat(u).concat(e),{cache:"no-store",...n});if(!t.ok)return null;return await t.json()}catch(e){return null}}async function o(e,n){try{let t=await fetch("".concat(u).concat(e),{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}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=1765)}),_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]="784d27a3-f896-4521-9b37-3b629877896c",e._sentryDebugIdIdentifier="sentry-dbid-784d27a3-f896-4521-9b37-3b629877896c")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[93],{5539:function(e,n,d){Promise.resolve().then(d.bind(d,8170))}},function(e){e.O(0,[170,400,935,744],function(){return e(e.s=5539)}),_N_E=e.O()}]);
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
|
|
2
|
-
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
|
|
3
|
-
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-full{bottom:100%}.left-2{left:.5rem}.right-1{right:.25rem}.right-2{right:.5rem}.top-1\/2{top:50%}.z-40{z-index:40}.z-50{z-index:50}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.ml-\[7px\]{margin-left:7px}.ml-auto{margin-left:auto}.mr-0\.5{margin-right:.125rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-14{height:3.5rem}.h-2{height:.5rem}.h-4{height:1rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-56{max-height:14rem}.max-h-64{max-height:16rem}.max-h-96{max-height:24rem}.max-h-\[32rem\]{max-height:32rem}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0}.min-h-16{min-height:4rem}.min-h-screen{min-height:100vh}.w-14{width:3.5rem}.w-24{width:6rem}.w-4{width:1rem}.w-56{width:14rem}.w-8{width:2rem}.w-80{width:20rem}.w-96{width:24rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[120px\]{min-width:120px}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-\[360px\]{max-width:360px}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[90px\2c 1fr\2c auto\]{grid-template-columns:90px 1fr auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.divide-gray-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(249 250 251/var(--tw-divide-opacity,1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity,1))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity,1))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity,1))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/40{background-color:rgba(0,0,0,.4)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-2{padding-bottom:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.italic{font-style:italic}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.tracking-widest{letter-spacing:.1em}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.accent-blue-600{accent-color:#2563eb}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.last\:border-0:last-child{border-width:0}.hover\:border-amber-400:hover{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.hover\:bg-amber-200:hover{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity,1))}.hover\:bg-amber-50:hover{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.hover\:bg-amber-700:hover{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity,1))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-green-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.active\:bg-blue-200:active{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.disabled\:border-gray-300:disabled{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.disabled\:text-gray-400:disabled{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}@media (min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:p-4{padding:1rem}}@media (min-width:768px){.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[250px\2c 1fr\]{grid-template-columns:250px 1fr}.md\:border-b-0{border-bottom-width:0}.md\:border-r{border-right-width:1px}}@media (min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}
|
|
File without changes
|