hunter-mate 0.1.36 → 0.1.37
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.20261103192009.js → service-worker.20261107043433.js} +2 -2
- package/dist/assets/extension/background/service-worker.js +2 -2
- package/dist/assets/extension/build-info.json +1 -1
- package/dist/assets/extension/manifest.json +3 -3
- package/dist/assets/extension/sidepanel/index.html +1 -1
- package/dist/assets/extension/sidepanel/index.js +1 -1
- package/dist/assets/server/main.mjs +169 -150
- package/dist/index.js +97 -32
- package/dist/web/dist/404.html +1 -1
- package/dist/web/dist/_next/static/chunks/431-187a20ba9a18321e.js +1 -0
- package/dist/web/dist/_next/static/chunks/659-d79f05fe8494a4a3.js +1 -0
- package/dist/web/dist/_next/static/chunks/686-566781e8fdd620d5.js +1 -0
- package/dist/web/dist/_next/static/chunks/{987-d5135025f46d8a26.js → 987-4bd304cd48dc9e3c.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/admin/data/page-cfe12240271d0430.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/company/admin/{page-940476e223ed5291.js → page-b14cac4a2b898625.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/jobs/page-72230dfd0d86fd69.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/{layout-56e9f652ec460661.js → layout-19172f741a295f90.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/login/{page-11dbf5148d19a037.js → page-bbbb051e69009a06.js} +1 -1
- package/dist/web/dist/_next/static/chunks/{main-app-6971513122242cd6.js → main-app-e2b7b078a4e28e22.js} +1 -1
- package/dist/web/dist/_next/static/chunks/pages/{_app-1d7fd225cc89f0d5.js → _app-b75cc951fea59503.js} +2 -2
- package/dist/web/dist/_next/static/css/fe65ef3f12d9c55d.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 +3 -3
- 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/login.html +2 -2
- package/dist/web/dist/login.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/memory.html +1 -1
- package/dist/web/dist/memory.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 -1
- package/dist/web/dist/shared/placeholder.txt +3 -3
- 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 -1
- package/dist/web/dist/team/insights.txt +3 -3
- package/package.json +1 -1
- package/dist/web/dist/_next/static/chunks/431-6c54d8d0cf2bf768.js +0 -1
- package/dist/web/dist/_next/static/chunks/659-bf056de14f6162b6.js +0 -1
- package/dist/web/dist/_next/static/chunks/686-332bfa3dbd6e0aac.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/admin/data/page-31aa598c712a211d.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/jobs/page-0a0ee2f8b389a147.js +0 -1
- package/dist/web/dist/_next/static/css/03e3fa723e374884.css +0 -3
- /package/dist/web/dist/_next/static/{JrLiYIK9zn4SBFFfOW1uK → wtzfFVjEfzUKkY3Epal_2}/_buildManifest.js +0 -0
- /package/dist/web/dist/_next/static/{JrLiYIK9zn4SBFFfOW1uK → wtzfFVjEfzUKkY3Epal_2}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
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]="8afe6351-a7c5-4ca1-80af-de4452ffb793",e._sentryDebugIdIdentifier="sentry-dbid-8afe6351-a7c5-4ca1-80af-de4452ffb793")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{866:function(e,t,n){Promise.resolve().then(n.t.bind(n,61115,23)),Promise.resolve().then(n.t.bind(n,20166,23)),Promise.resolve().then(n.bind(n,75946))},5111:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"}},39721:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.commonLocale=void 0,t.commonLocale={yearFormat:"YYYY",dayFormat:"D",cellMeridiemFormat:"A",monthBeforeYear:!0}},6972:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;let l={...n(39721).commonLocale,locale:"zh_CN",today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",week:"周",month:"月",year:"年",previousMonth:"上个月",nextMonth:"下个月",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",previousYear:"上一年",nextYear:"下一年",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪",yearFormat:"YYYY年",cellDateFormat:"D",monthBeforeYear:!1};t.default=l},54539:function(e,t,n){"use strict";var l=n(50129).default;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=l(n(47034));t.default=a.default},47034:function(e,t,n){"use strict";var l=n(50129).default;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=l(n(6972)),r=l(n(53523));let s={lang:{placeholder:"请选择日期",yearPlaceholder:"请选择年份",quarterPlaceholder:"请选择季度",monthPlaceholder:"请选择月份",weekPlaceholder:"请选择周",rangePlaceholder:["开始日期","结束日期"],rangeYearPlaceholder:["开始年份","结束年份"],rangeMonthPlaceholder:["开始月份","结束月份"],rangeQuarterPlaceholder:["开始季度","结束季度"],rangeWeekPlaceholder:["开始周","结束周"],...a.default},timePickerLocale:{...r.default}};s.lang.ok="确定",t.default=s},26499:function(e,t,n){"use strict";var l=n(50129).default;t.Z=void 0;var a=l(n(5111)),r=l(n(54539)),s=l(n(47034)),i=l(n(53523));let o="${label}不是一个有效的${type}",c={locale:"zh-cn",Pagination:a.default,DatePicker:s.default,TimePicker:i.default,Calendar:r.default,global:{placeholder:"请选择",close:"关闭",sortable:"可排序",show:"显示",hide:"隐藏"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",filterEmptyText:"无筛选项",filterCheckAll:"全选",filterSearchPlaceholder:"在筛选项中搜索",emptyText:"暂无数据",selectAll:"全选当页",selectInvert:"反选当页",selectNone:"清空所有",selectionAll:"全选所有",sortTitle:"排序",expand:"展开行",collapse:"关闭行",triggerDesc:"点击降序",triggerAsc:"点击升序",cancelSort:"取消排序"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Tour:{Next:"下一步",Previous:"上一步",Finish:"结束导览"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{titles:["",""],searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项",remove:"删除",selectCurrent:"全选当页",removeCurrent:"删除当页",selectAll:"全选所有",deselectAll:"取消全选",removeAll:"删除全部",selectInvert:"反选当页"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开",collapse:"收起"},Carousel:{prevSlide:"上一张幻灯片",nextSlide:"下一张幻灯片"},Form:{optional:"(可选)",defaultValidateMessages:{default:"字段验证错误${label}",required:"请输入${label}",enum:"${label}必须是其中一个[${enum}]",whitespace:"${label}不能为空字符",date:{format:"${label}日期格式无效",parse:"${label}不能转换为日期",invalid:"${label}是一个无效日期"},types:{string:o,method:o,array:o,object:o,number:o,date:o,boolean:o,integer:o,float:o,regexp:o,email:o,url:o,hex:o},string:{len:"${label}须为${len}个字符",min:"${label}最少${min}个字符",max:"${label}最多${max}个字符",range:"${label}须在${min}-${max}字符之间"},number:{len:"${label}必须等于${len}",min:"${label}最小值为${min}",max:"${label}最大值为${max}",range:"${label}须在${min}-${max}之间"},array:{len:"须为${len}个${label}",min:"最少${min}个${label}",max:"最多${max}个${label}",range:"${label}数量须在${min}-${max}之间"},pattern:{mismatch:"${label}与模式不匹配${pattern}"}}},QRCode:{expired:"二维码过期",refresh:"点击刷新",scanned:"已扫描"},ColorPicker:{presetEmpty:"暂无",transparent:"无色",singleColor:"单色",gradientColor:"渐变色"}};t.Z=c},53523:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={placeholder:"请选择时间",rangePlaceholder:["开始时间","结束时间"]}},27473:function(e,t,n){"use strict";var l=n(38321);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}}),n.o(l,"useServerInsertedHTML")&&n.d(t,{useServerInsertedHTML:function(){return l.useServerInsertedHTML}})},71873:function(e,t,n){"use strict";n.d(t,{D:function(){return m},l:function(){return d}});var l=n(72835),a=n(60635),r=n(21260);let s="hm-cloud-login-draft",i="hm-cloud-login-resend-at",o="hm-cloud-last-email";function c(){let e={email:"",step:"email",code:""};try{let t=window.sessionStorage.getItem(s);if(!t)return e;let n=JSON.parse(t);return{email:"string"==typeof n.email?n.email:"",step:"code"===n.step?"code":"email",code:"string"==typeof n.code?n.code:""}}catch(t){return e}}function u(){try{var e;let t=Number(null!==(e=window.sessionStorage.getItem(i))&&void 0!==e?e:0);return Math.max(0,Math.ceil((t-Date.now())/1e3))}catch(e){return 0}}function d(e){let{onDone:t}=e,[n,d]=(0,a.useState)(c),[m,x]=(0,a.useState)(!1),[h,f]=(0,a.useState)(u),[y,g]=(0,a.useState)(null),[b,v]=(0,a.useState)(null),p=(0,a.useRef)(null),{email:j,step:w,code:N}=n;(0,a.useEffect)(()=>{if(!j){let e=function(){try{var e;return null!==(e=window.localStorage.getItem(o))&&void 0!==e?e:""}catch(e){return""}}();e&&S({email:e})}},[]),(0,a.useEffect)(()=>{if(!(h<=0)&&!p.current)return p.current=setInterval(()=>{f(e=>(e<=1&&p.current&&(clearInterval(p.current),p.current=null),Math.max(0,e-1)))},1e3),()=>{p.current&&clearInterval(p.current),p.current=null}},[h]);let S=e=>{d(t=>{let n={...t,...e};try{window.sessionStorage.setItem(s,JSON.stringify(n))}catch(e){}return n})},C=e=>{try{window.localStorage.setItem(o,e)}catch(e){}},k=()=>{try{window.sessionStorage.removeItem(s),window.sessionStorage.removeItem(i)}catch(e){}},I=()=>{try{window.sessionStorage.setItem(i,String(Date.now()+6e4))}catch(e){}f(60)},T=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,P=async()=>{let e=j.trim().toLowerCase();if(!T.test(e)){v("请输入有效邮箱");return}x(!0),v(null),g(null);let t=await fetch("/hunter-mate/auth/email/send-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})});if(x(!1),!t.ok){let e=await t.json().catch(()=>null);v((null==e?void 0:e.message)||"发送失败(HTTP ".concat(t.status,")"));return}C(e),S({email:e,step:"code"}),I(),g("验证码已发送,请查收邮件")},D=async()=>{if(!/^\d{6}$/.test(N.trim())){v("请输入 6 位数字验证码");return}x(!0),v(null);let e=await fetch("/hunter-mate/auth/email/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:j.trim().toLowerCase(),code:N.trim()})});if(x(!1),!e.ok){let t=await e.json().catch(()=>null);v((null==t?void 0:t.message)||"验证失败(HTTP ".concat(e.status,")"));return}let n=await e.json().catch(()=>null);if(!(null==n?void 0:n.access_token)){v("登录响应缺少凭证,请重试");return}C(j.trim().toLowerCase()),(0,r.VA)(n.access_token),k(),(0,r.notifyCloudTokenChanged)(),t()};return(0,l.jsxs)("div",{children:["email"===w?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:j,onFocus:e=>e.target.select(),onChange:e=>S({email:e.target.value}),onBlur:e=>S({email:e.target.value.trim().toLowerCase()}),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:P,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 text-left text-xs text-gray-500",children:["验证码已发送至 ",j,",请查收邮件"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,maxLength:6,value:N,onChange:e=>S({code:e.target.value}),placeholder:"6 位验证码",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-center text-sm tracking-[0.5em]"}),(0,l.jsx)("button",{onClick:D,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"登录中…":"登录"}),(0,l.jsxs)("div",{className:"mt-3 flex items-center justify-between text-xs",children:[(0,l.jsx)("button",{onClick:()=>S({step:"email"}),className:"text-gray-400 hover:text-gray-600",children:"换个邮箱"}),(0,l.jsx)("button",{onClick:P,disabled:h>0||m,className:"text-blue-600 hover:text-blue-700 disabled:text-gray-300",children:h>0?"重新发送(".concat(h,"s)"):"重新发送"})]})]}),y&&(0,l.jsx)("div",{className:"mt-3 text-xs text-green-600",children:y}),b&&(0,l.jsx)("div",{className:"mt-3 text-xs text-red-500",children:b})]})}function m(e){let{children:t}=e,[n,s]=(0,a.useState)(null);return((0,a.useEffect)(()=>{let e=()=>s(null!==(0,r.xq)());return e(),(0,r.RB)(e)},[]),null===n)?(0,l.jsxs)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:[(0,l.jsx)("span",{className:"hm-spinner","aria-label":"加载中"}),(0,l.jsx)("div",{className:"mt-4 text-sm text-gray-400",children:"正在加载,请稍候…"})]}):n?(0,l.jsx)(l.Fragment,{children:t}):(0,l.jsx)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:(0,l.jsxs)("div",{className:"w-80 rounded-2xl border border-gray-200 bg-white p-8 text-center shadow-sm",children:[(0,l.jsx)("div",{className:"mb-2 text-3xl",children:"\uD83E\uDD1D"}),(0,l.jsx)("div",{className:"mb-1 text-lg font-semibold text-gray-900",children:"HunterMate 云工作台"}),(0,l.jsx)("div",{className:"mb-4 text-xs text-gray-400",children:"登录后,随时随地访问你的协作数据"}),(0,l.jsx)(d,{onDone:()=>s(!0)})]})})}},75946:function(e,t,n){"use strict";n.d(t,{GateByRoute:function(){return R}});var l=n(72835),a=n(27473),r=n(60635),s=n(65777),i=n(82182),o=n(4025),c=n(33447),u=n(28431);function d(){var e,t,a;let{session:o,sync:d,utoken:h,loadError:f,refresh:y}=(0,s.nu)(),[g,b]=(0,r.useState)(!1),[v,j]=(0,r.useState)(!1),[w,N]=(0,r.useState)(!1),[S,C]=(0,r.useState)(!1),k=(null==o?void 0:o.loggedIn)||(null==d?void 0:d.loggedIn),I=(0,s.aG)(d),T=(0,s.cp)(d),P=null==T?null:null!==(t=null===(e=I.find(e=>e.tenantId===T))||void 0===e?void 0:e.name)&&void 0!==t?t:null,D=async e=>{C(!0);try{var t,l,a,r;let m=null!==(a=null==d?void 0:null===(l=d.memberships)||void 0===l?void 0:null===(t=l.find(e=>e.isPersonal))||void 0===t?void 0:t.tenantId)&&void 0!==a?a:null,x=null!=e?e:m;if((0,c.K5)()){let{requestJson:e}=await Promise.resolve().then(n.bind(n,74431));await e("/hunter-mate/tenant/last-active",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tenantId:x})}),(0,u.bw)(x),await y();return}let f=new Headers({"Content-Type":"application/json"});h&&f.set("Authorization","UTOKEN ".concat(h));let g=await fetch("".concat((0,s.tQ)(),"/datasync/active-tenant"),{method:"POST",headers:f,body:JSON.stringify({id:x})});if(401===g.status){(0,i.jr)({message:"登录已过期,请重新登录",oldUserId:null!==(r=null==o?void 0:o.hmUserId)&&void 0!==r?r:null,retry:async()=>{let t=new Headers({"Content-Type":"application/json"}),n=(0,s.Xc)();return n&&t.set("Authorization","UTOKEN ".concat(n)),!!(await fetch("".concat((0,s.tQ)(),"/datasync/active-tenant"),{method:"POST",headers:t,body:JSON.stringify({id:e})})).ok&&(await y(),!0)}});return}await y()}finally{C(!1)}},E=async()=>{if((0,c.K5)()){let{clearCloudToken:e,notifyCloudTokenChanged:t}=await Promise.resolve().then(n.bind(n,21260));e(),(0,u.nZ)(),t(),await y();return}let e=new Headers({"Content-Type":"application/json"});h&&e.set("Authorization","UTOKEN ".concat(h)),await fetch("".concat((0,s.tQ)(),"/datasync/logout"),{method:"POST",headers:e}).catch(()=>null),await y()},_=null===d?{text:"同步状态加载中…",cls:"bg-gray-100 text-gray-400"}:d.enabled?d.authFailed?{text:"登录态失效",cls:"bg-red-100 text-red-600"}:d.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:[f?(0,l.jsxs)("div",{className:"text-xs text-red-500",children:[f,"(本地服务未启动?)"]}):k?(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==o?void 0:o.email)||"已登录"}),(0,l.jsx)("span",{className:"inline-block rounded-full px-2 py-0.5 text-xs ".concat(_.cls),children:_.text})]}),(0,l.jsx)("button",{onClick:E,title:"退出登录",className:"shrink-0 rounded-md px-2 py-1 text-xs text-gray-400 hover:bg-gray-100 hover:text-gray-600",children:"退出"})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{onClick:()=>j(e=>!e),disabled:S,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==T?"个人使用(不归属公司)":null!=P?P:"未知公司"}),(0,l.jsx)("span",{className:"text-xs text-gray-400",children:S?"切换中…":"▾"})]}),(0,l.jsx)("div",{className:"mt-1 truncate whitespace-nowrap text-xs text-gray-400",children:"当前归属公司;公司内数据互通"})]})]}):(0,l.jsxs)("div",{className:"flex items-center justify-between",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-sm text-gray-500",children:"未登录"}),(0,l.jsx)("div",{className:"text-xs text-gray-400",children:"登录后可跨设备同步数据"})]}),(0,l.jsx)("button",{onClick:()=>b(!0),className:"rounded-lg bg-blue-600 px-3 py-1.5 text-sm text-white hover:bg-blue-700",children:"登录"})]}),v&&k&&(0,l.jsx)(m,{sync:d,companies:I,activeTenantId:T,onPick:async e=>{j(!1),await D(e)},onCreateJoin:()=>{j(!1),N(!0)},onClose:()=>j(!1)}),w&&k&&(0,l.jsx)(x,{utoken:h,oldUserId:null!==(a=null==o?void 0:o.hmUserId)&&void 0!==a?a:null,onDone:async e=>{N(!1),null!=e&&await D(e),await y()},onClose:()=>N(!1)}),g&&(0,l.jsx)(p,{onClose:()=>b(!1),onDone:()=>{b(!1),y()}})]})}function m(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 x(e){let{utoken:t,oldUserId:n,onDone:a,onClose:s}=e,[c,u]=(0,r.useState)(""),[d,m]=(0,r.useState)(!1),[x,h]=(0,r.useState)([]),[f,y]=(0,r.useState)(!1),[g,b]=(0,r.useState)(null),[v,p]=(0,r.useState)(null),[j,w]=(0,r.useState)(null),N=(0,r.useCallback)(async(e,t)=>(0,o.k)(e,null!=t?t:{}),[t]);(0,r.useEffect)(()=>{let e=c.trim();if(!e){h([]),m(!1);return}m(!0);let t=setTimeout(async()=>{var t;let n=await N("/company/search?q=".concat(encodeURIComponent(e)));if(!n.ok){h([]),m(!1);return}h(null!==(t=(await n.json()).items)&&void 0!==t?t:[]),m(!1)},300);return()=>clearTimeout(t)},[c,N]);let S=(e,t)=>{(null==t?void 0:t.already)?w("已申请过「".concat(e.name,"」,等待管理员审批")):w("已申请加入「".concat(e.name,"」,管理员通过后即可数据互通")),h(t=>t.map(t=>t.id===e.id?{...t,myApplication:"pending"}:t))},C=async()=>{let e=c.trim();if(e){y(!0),p(null);try{var t;let l=await N("/company",{method:"POST",body:JSON.stringify({name:e})}),r=await l.json().catch(()=>null);if(!l.ok){if(401===l.status){p("登录已过期,请在弹窗中重新登录;登录后自动继续创建"),(0,i.jr)({message:"登录已过期,请重新登录",oldUserId:null!=n?n:null,retry:async()=>{var t;let n=await (0,o.k)("/company",{method:"POST",body:JSON.stringify({name:e})}),l=await n.json().catch(()=>null);return n.ok?(a(null!==(t=null==l?void 0:l.id)&&void 0!==t?t:null),!0):(p((null==l?void 0:l.message)||"创建失败(HTTP ".concat(n.status,")")),!1)}});return}p((null==r?void 0:r.message)||"创建失败(HTTP ".concat(l.status,")"));return}a(null!==(t=null==r?void 0:r.id)&&void 0!==t?t:null)}finally{y(!1)}}},k=async e=>{b(e.id),p(null),w(null);try{let t=await N("/company/".concat(e.id,"/apply"),{method:"POST",body:JSON.stringify({})}),l=await t.json().catch(()=>null);if(!t.ok){if(401===t.status){p("登录已过期,请在弹窗中重新登录;登录后自动继续申请"),(0,i.jr)({message:"登录已过期,请重新登录",oldUserId:null!=n?n:null,retry:async()=>{let t=await (0,o.k)("/company/".concat(e.id,"/apply"),{method:"POST",body:JSON.stringify({})}),n=await t.json().catch(()=>null);return t.ok?(S(e,n),!0):(p((null==n?void 0:n.message)||"申请失败(HTTP ".concat(t.status,")")),!1)}});return}p((null==l?void 0:l.message)||"申请失败(HTTP ".concat(t.status,")"));return}S(e,l)}finally{b(null)}},I=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:s,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:c,onChange:e=>u(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:""===c.trim()?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"输入关键词可检索已存在的公司并申请加入"}):d?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"检索中…"}):0===x.length?(0,l.jsxs)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:["没有匹配「",c.trim(),"」的公司,可直接创建"]}):x.map(e=>{let t=I(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&&k(e),disabled:t.disabled||g===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:g===e.id?"申请中…":t.label})]},e.id)})}),(0,l.jsx)("button",{onClick:C,disabled:f||""===c.trim(),className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:f?"创建中…":"创建公司「".concat(c.trim()||"…","」")}),j&&(0,l.jsx)("div",{className:"mt-2 text-xs text-green-600",children:j}),v&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:v}),(0,l.jsx)("button",{onClick:s,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"关闭"})]})})}let h="hm-login-draft",f="hm-login-resend-at",y="hm-last-email";function g(){let e={email:"",step:"email",code:""};try{let t=window.sessionStorage.getItem(h);if(!t)return e;let n=JSON.parse(t);return{email:"string"==typeof n.email?n.email:"",step:"code"===n.step?"code":"email",code:"string"==typeof n.code?n.code:""}}catch(t){return e}}function b(){try{var e;let t=Number(null!==(e=window.sessionStorage.getItem(f))&&void 0!==e?e:0);return Math.max(0,Math.ceil((t-Date.now())/1e3))}catch(e){return 0}}function v(e){let{onDone:t}=e,[n,a]=(0,r.useState)(g),[i,o]=(0,r.useState)(!1),[c,u]=(0,r.useState)(b),[d,m]=(0,r.useState)(null),[x,v]=(0,r.useState)(null),p=(0,r.useRef)(null),{email:j,step:w,code:N}=n;(0,r.useEffect)(()=>{if(!j){let e=function(){try{var e;return null!==(e=window.localStorage.getItem(y))&&void 0!==e?e:""}catch(e){return""}}();e&&S({email:e})}},[]),(0,r.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);let S=e=>{a(t=>{let n={...t,...e};try{window.sessionStorage.setItem(h,JSON.stringify(n))}catch(e){}return n})},C=e=>{try{window.localStorage.setItem(y,e)}catch(e){}},k=()=>{try{window.sessionStorage.removeItem(h),window.sessionStorage.removeItem(f)}catch(e){}},I=()=>{try{window.sessionStorage.setItem(f,String(Date.now()+6e4))}catch(e){}u(60),p.current&&clearInterval(p.current),p.current=setInterval(()=>{u(e=>(e<=1&&p.current&&clearInterval(p.current),Math.max(0,e-1)))},1e3)},T=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,P=async()=>{let e=j.trim().toLowerCase();if(!T.test(e)){v("请输入有效邮箱");return}o(!0),v(null),m(null);let t=await fetch("".concat((0,s.tQ)(),"/auth/email/send-code"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})});if(o(!1),!t.ok){let e=await t.json().catch(()=>null);v((null==e?void 0:e.message)||"发送失败(HTTP ".concat(t.status,")"));return}C(e),S({email:e,step:"code"}),I(),m("验证码已发送,请查收邮件")},D=async()=>{if(!/^\d{6}$/.test(N.trim())){v("请输入 6 位数字验证码");return}o(!0),v(null);let e=await fetch("".concat((0,s.tQ)(),"/auth/email/verify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:j.trim().toLowerCase(),code:N.trim()})});if(o(!1),!e.ok){let t=await e.json().catch(()=>null);v((null==t?void 0:t.message)||"验证失败(HTTP ".concat(e.status,")"));return}C(j.trim().toLowerCase()),k(),t()};return(0,l.jsxs)("div",{children:["email"===w?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:j,onFocus:e=>e.target.select(),onChange:e=>S({email:e.target.value}),onBlur:e=>S({email:e.target.value.trim().toLowerCase()}),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:P,disabled:i,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:i?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 text-left text-xs text-gray-500",children:["验证码已发送至 ",j,",请查收邮件"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,maxLength:6,value:N,onChange:e=>S({code: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:D,disabled:i,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:i?"登录中…":"登录"}),(0,l.jsxs)("div",{className:"mt-2 flex items-center justify-between text-xs",children:[(0,l.jsx)("button",{onClick:P,disabled:i||c>0,className:"text-gray-400 hover:text-gray-600 disabled:text-gray-300",children:c>0?"重新发送(".concat(c,"s)"):"重新发送"}),(0,l.jsx)("button",{onClick:()=>{S({step:"email",code:""}),v(null)},className:"text-gray-400 hover:text-gray-600",children:"返回修改邮箱"})]})]}),d&&(0,l.jsx)("div",{className:"mt-2 text-xs text-green-600",children:d}),x&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:x})]})}function p(e){let{onClose:t,onDone:n}=e;return(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",children:(0,l.jsxs)("div",{className:"w-80 rounded-xl bg-white p-5 shadow-xl",children:[(0,l.jsx)("h3",{className:"mb-3 text-base font-semibold text-gray-900",children:"邮箱验证码登录"}),(0,l.jsx)(v,{onDone:n}),(0,l.jsx)("button",{onClick:t,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"关闭"})]})})}var j=n(71873);function w(e){let{children:t}=e;return(0,c.K5)()?(0,l.jsx)(j.D,{children:t}):(0,l.jsx)(N,{children:t})}function N(e){let{children:t}=e,{authStatus:n,refreshing:a,loadError:r,refresh:i}=(0,s.nu)();return r&&"loading"===n?(0,l.jsxs)(S,{children:[(0,l.jsxs)("div",{className:"text-sm text-red-500",children:[r,"(本地服务未启动?)"]}),(0,l.jsx)("button",{onClick:()=>void i(),className:"mt-4 rounded-lg bg-blue-600 px-4 py-2 text-sm text-white hover:bg-blue-700",children:"重试"})]}):"loading"===n?(0,l.jsxs)(S,{children:[(0,l.jsx)("span",{className:"hm-spinner","aria-label":"加载中"}),(0,l.jsx)("div",{className:"mt-4 text-sm text-gray-400",children:"正在加载,请稍候…"})]}):"out"===n?(0,l.jsx)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:(0,l.jsxs)("div",{className:"w-80 rounded-2xl border border-gray-200 bg-white p-8 text-center shadow-sm",children:[(0,l.jsx)("div",{className:"mb-2 text-3xl",children:"\uD83E\uDD1D"}),(0,l.jsx)("div",{className:"mb-1 text-lg font-semibold text-gray-900",children:"HunterMate"}),(0,l.jsx)("div",{className:"mb-4 text-xs text-gray-400",children:"登录后,你的数据在任何设备同步"}),r&&(0,l.jsx)("div",{className:"mb-3 text-xs text-red-500",children:r}),a&&(0,l.jsxs)("div",{className:"mb-3 flex items-center justify-center gap-2 rounded-lg bg-blue-50 py-2 text-sm text-blue-600",children:[(0,l.jsx)("span",{className:"hm-spinner hm-spinner-sm","aria-label":"加载中"}),"登录中,正在加载你的数据…"]}),(0,l.jsx)(v,{onDone:()=>{i()}})]})}):(0,l.jsxs)(l.Fragment,{children:[a&&(0,l.jsx)(C,{}),t]})}function S(e){let{children:t}=e;return(0,l.jsx)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:t})}function C(){let[e,t]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{let e=setTimeout(()=>t(!0),250);return()=>clearTimeout(e)},[]),e)?(0,l.jsx)("div",{className:"hm-top-bar","aria-hidden":!0}):null}var k=n(55589);function I(){let e=(0,r.useSyncExternalStore)(i.mn,i.nk,()=>null),{session:t,sync:n,refresh:a}=(0,s.nu)(),[o,c]=(0,r.useState)(""),[u,d]=(0,r.useState)(""),[m,x]=(0,r.useState)("email"),[h,f]=(0,r.useState)(!1),[y,g]=(0,r.useState)(null),[b,v]=(0,r.useState)(!1),[p,j]=(0,r.useState)(0),w=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(e){var n;x("email"),c(null!==(n=null==t?void 0:t.email)&&void 0!==n?n:""),d(""),g(null),v(!1),j(0)}w.current&&clearInterval(w.current)},[null==e?void 0:e.message]);let N=(0,r.useRef)(!1);if((0,r.useEffect)(()=>{var e;if(!(null==n?void 0:n.authFailed)){N.current=!1;return}!N.current&&((0,i.nk)()||(N.current=!0,(0,i.jr)({message:"登录态已失效,需要登录才可以继续使用",oldUserId:null!==(e=null==t?void 0:t.hmUserId)&&void 0!==e?e:null,retry:async()=>(await a(),!0)})))},[null==n?void 0:n.authFailed,null==t?void 0:t.hmUserId,a]),(0,r.useEffect)(()=>()=>{w.current&&clearInterval(w.current)},[]),!e)return null;let S=()=>{j(60),w.current&&clearInterval(w.current),w.current=setInterval(()=>{j(e=>(e<=1&&w.current&&clearInterval(w.current),Math.max(0,e-1)))},1e3)},C=async()=>{if(!o.includes("@")){g("请输入有效邮箱");return}f(!0),g(null);try{let e=await fetch("".concat((0,s.tQ)(),"/auth/email/send-code"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o})});if(!e.ok){let t=await e.json().catch(()=>null);g((null==t?void 0:t.message)||"发送失败(HTTP ".concat(e.status,")"));return}x("code"),S()}finally{f(!1)}},k=async()=>{if(!/^\d{4,8}$/.test(u)){g("请输入验证码(4-8 位数字)");return}f(!0),g(null);try{var t;let n=await fetch("".concat((0,s.tQ)(),"/auth/email/verify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,code:u})}),l=await n.json().catch(()=>null);if(!n.ok||!(null==l?void 0:l.access_token)){g((null==l?void 0:l.message)||"验证失败(HTTP ".concat(n.status,")"));return}let r=(0,i.H7)(l.access_token),c=null!==(t=e.oldUserId)&&void 0!==t?t:null;if(null!=c&&null!=r&&c!==r){window.location.reload();return}v(!0),(0,i.qd)(),await a(),await e.retry()||v(!1)}finally{f(!1)}};return(0,l.jsx)("div",{className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",children:(0,l.jsxs)("div",{className:"w-80 rounded-xl bg-white p-5 shadow-xl",children:[(0,l.jsx)("h3",{className:"text-base font-semibold text-gray-900",children:"登录已过期"}),(0,l.jsxs)("p",{className:"mt-1 text-xs text-gray-500",children:[e.message,"。重新登录后将自动继续刚才的操作;若登录其他账号,页面将重新加载。"]}),b?(0,l.jsx)("div",{className:"mt-4 rounded bg-blue-50 p-3 text-sm text-blue-700",children:"正在继续刚才的操作…"}):(0,l.jsx)(l.Fragment,{children:"email"===m?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:o,onChange:e=>c(e.target.value),placeholder:"you@example.com",className:"mb-3 mt-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm"}),(0,l.jsx)("button",{onClick:C,disabled:h,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:h?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 mt-3 text-xs text-gray-500",children:["验证码已发送至 ",o,",请查收邮件后输入"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,value:u,onChange:e=>d(e.target.value),placeholder:"6 位验证码",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm tracking-widest"}),(0,l.jsx)("button",{onClick:k,disabled:h,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:h?"验证中…":"登录并继续"}),(0,l.jsx)("button",{type:"button",onClick:C,disabled:h||p>0,className:"mt-2 w-full rounded-lg border border-blue-600 py-1.5 text-sm text-blue-600 disabled:border-gray-300 disabled:text-gray-400",children:p>0?"".concat(p,"s 后重发"):"重发验证码"}),(0,l.jsx)("button",{onClick:()=>{x("email"),g(null)},className:"mt-1 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"返回修改邮箱"})]})}),y&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:y}),!b&&(0,l.jsx)("button",{onClick:i.qd,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"取消(放弃本次操作)"})]})})}var T=n(88801);let P=[{key:"delivery",label:"交付",icon:"\uD83C\uDFAF"},{key:"bd",label:"BD",icon:"\uD83E\uDDED"}];function D(){let e=(0,T.mJ)();return(0,l.jsx)("div",{className:"mx-2 mb-2 rounded-lg bg-gray-100 p-1",title:"角色视角:列表与详情按视角展示内容,记住上次选择",children:(0,l.jsx)("div",{className:"grid grid-cols-2 gap-1",children:P.map(t=>{let n=e===t.key;return(0,l.jsxs)("button",{type:"button",onClick:()=>(0,T.hm)(t.key),className:"rounded-md px-2 py-1.5 text-xs font-medium transition ".concat(n?"bg-white shadow-sm":"text-gray-500 hover:text-gray-700"),style:n?{color:"var(--brand-strong)"}:void 0,children:[t.icon," ",t.label]},t.key)})})})}let E=null,_=[{href:"/",label:"仪表盘",icon:"\uD83D\uDCCA"},{href:"/talents",label:"人才",icon:"\uD83D\uDC64"},{href:"/jobs",label:"职位",icon:"\uD83D\uDCBC"},{href:"/companies",label:"公司",icon:"\uD83C\uDFE2"},{href:"/parselog",label:"解析日志",icon:"\uD83D\uDCCB"},{href:"/recordings",label:"录制",icon:"\uD83D\uDD34"},{href:"/resource-usage",label:"资源占用",icon:"\uD83D\uDCBD"},{href:"/team/insights",label:"团队统计",icon:"\uD83D\uDCC8"},{href:"/memory",label:"记忆与知识",icon:"\uD83E\uDDE0"}];function O(){var e,t,n,i;let o=(0,a.usePathname)()||"/",{sync:c,utoken:u}=(0,s.nu)();(0,r.useEffect)(()=>(0,T.oU)(),[]);let m=(0,s.cp)(c),x=(0,s.Cd)(c,m),h=null!==(n=null===(e=(null!==(t=null==c?void 0:c.pendingCounts)&&void 0!==t?t:[]).find(e=>e.tenantId===m))||void 0===e?void 0:e.count)&&void 0!==n?n:0,[f,y]=(0,r.useState)(null!==(i=null==E?void 0:E.isAdmin)&&void 0!==i&&i);return(0,r.useEffect)(()=>{if(!u){y(!1);return}if((null==E?void 0:E.utoken)===u){y(E.isAdmin);return}let e=!1;return(async()=>{try{let t=await fetch("/admin/entities?pageSize=1&hmUserId=1",{headers:{Authorization:"UTOKEN ".concat(u)}}),n=403!==t.status&&401!==t.status;E={utoken:u,isAdmin:n},e||y(n)}catch(t){e||y(!1)}})(),()=>{e=!0}},[u]),(0,l.jsxs)("aside",{className:"flex h-screen w-56 flex-col border-r border-gray-200 bg-white",style:{borderTopColor:"var(--brand)"},children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 border-b border-gray-200 px-4 py-3",style:{boxShadow:"inset 3px 0 0 var(--brand)"},children:[(0,l.jsx)("span",{className:"text-xl",children:"\uD83E\uDD1D"}),(0,l.jsx)("span",{className:"font-semibold text-gray-900",children:"HunterMate"})]}),(0,l.jsxs)("nav",{className:"flex-1 overflow-auto py-3",children:[_.map(e=>{let t=o===e.href||o.startsWith("".concat(e.href,"/"));return(0,l.jsxs)(k.default,{href:e.href,className:"mx-2 flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors ".concat(t?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsx)("span",{className:"text-base",children:e.icon}),e.label]},e.href)}),null!=m&&("owner"===x||"admin"===x)&&(0,l.jsxs)(k.default,{href:"/company/admin",className:"mx-2 flex items-center justify-between rounded-lg px-3 py-2 text-sm transition-colors ".concat(o.startsWith("/company/admin")?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsxs)("span",{className:"flex items-center gap-3",children:[(0,l.jsx)("span",{className:"text-base",children:"⚙️"}),"企业管理"]}),h>0&&(0,l.jsx)("span",{className:"rounded-full bg-red-500 px-1.5 text-[10px] leading-4 text-white",children:h>99?"99+":h})]}),f&&(0,l.jsxs)(k.default,{href:"/admin/data",className:"mx-2 flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors ".concat(o.startsWith("/admin")?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsx)("span",{className:"text-base",children:"\uD83E\uDDF9"}),"数据管理"]})]}),(0,l.jsx)(D,{}),(0,l.jsx)(d,{}),(0,l.jsx)(I,{})]})}var $=n(60662);function M(){return(M=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(e[l]=n[l])}return e}).apply(this,arguments)}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,l=Array(t);n<t;n++)l[n]=e[n];return l}var U=function(e){var t,n=(function(e){if(Array.isArray(e))return e}(t=(0,r.useState)(function(){return(0,$.Df)()}))||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var l,a,r,s,i=[],o=!0,c=!1;try{for(r=(n=n.call(e)).next;!(o=(l=r.call(n)).done)&&(i.push(l.value),1!==i.length);o=!0);}catch(e){c=!0,a=e}finally{try{if(!o&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw a}}return i}}(t,1)||function(e,t){if(e){if("string"==typeof e)return A(e,1);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return A(e,1)}}(t,1)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return(0,a.useServerInsertedHTML)(function(){var e=(0,$.EN)(n,{plain:!0,once:!0});return e.includes('.data-ant-cssinjs-cache-path{content:"";}')?null:r.createElement("style",{id:"antd-cssinjs","data-rc-order":"prepend","data-rc-priority":"-1000",dangerouslySetInnerHTML:{__html:e}})}),r.createElement($.V9,M({},e,{cache:n}))},F=n(12502),H=n(26499);function J(e){let{children:t}=e;return(0,l.jsx)(U,{children:(0,l.jsx)(F.ZP,{locale:H.Z,children:t})})}function R(e){let{children:t}=e;return"/login"===(0,a.usePathname)()?(0,l.jsx)(J,{children:t}):(0,l.jsx)(w,{children:(0,l.jsxs)(J,{children:[(0,l.jsx)(O,{}),t]})})}},65777:function(e,t,n){"use strict";let l;n.d(t,{Cd:function(){return D},Xc:function(){return _},aG:function(){return T},cp:function(){return P},nu:function(){return I},tQ:function(){return E}});var a=n(60635),r=n(74431),s=n(67002),i=n(33447),o=n(21260),c=n(28431),u=n(60529);let d=null,m=null,x=null,h=new Set;function f(){h.forEach(e=>e())}function y(e){d=d?{...d,refreshing:e}:{...S,refreshing:e},f()}function g(e){if(void 0===l){l=e;return}if(e!==l){l=e;try{window.localStorage.removeItem("hm-view-mode")}catch(e){}}}async function b(){try{return await (0,r.requestJson)("/auth/session")}catch(e){return null}}async function v(e){let t=new Headers,n=(0,s.Xc)();n&&t.set("Authorization","UTOKEN ".concat(n));try{return await (0,r.requestJson)(e,{headers:t})}catch(e){return null}}async function p(){y(!0);try{var e,t,n,l,a,s,i,u,m;let x=(0,o.xq)();if(!x){(0,c.nZ)(),d={...S,session:{loggedIn:!1},refreshing:!1,authStatus:"out"},f();return}let h=await (0,r.requestJson)("/hunter-mate/sync/state?heads=0");(0,c.YZ)(null!==(e=h.activeTenantId)&&void 0!==e?e:null);let y=(0,o.OG)(x);g(null!==(n=null!==(t=h.hmUserId)&&void 0!==t?t:y.hmUserId)&&void 0!==n?n:null),d={session:{loggedIn:!0,email:null!==(l=y.email)&&void 0!==l?l:void 0,hmUserId:null!==(s=null!==(a=h.hmUserId)&&void 0!==a?a:y.hmUserId)&&void 0!==s?s:void 0,token:x},sync:{loggedIn:!0,enabled:!0,activeTenantId:(0,c.MA)(),serverSuggestedTenantId:null!==(i=h.activeTenantId)&&void 0!==i?i:null,memberships:null!==(u=h.memberships)&&void 0!==u?u:[],pendingCounts:null!==(m=h.pendingCounts)&&void 0!==m?m:[]},utoken:x,loadError:null,refreshing:!1,authStatus:"in",refresh:w},f()}catch(e){d=d?{...d,loadError:"云端无响应"}:{...S,loadError:"云端无响应"},f()}finally{(null==d?void 0:d.refreshing)&&y(!1)}}async function j(){if((0,i.K5)())return p();y(!0);try{var e;let[t,n]=await Promise.all([b(),v("/datasync/state")]),l=(null==t?void 0:t.loggedIn)&&t.token?t.token:null,a=null!=n?n:null;!a&&t&&l&&l!==(0,s.Xc)()?((0,s.GK)(l),a=await v("/datasync/state")):(0,s.GK)(l),g((null==t?void 0:t.loggedIn)&&null!==(e=t.hmUserId)&&void 0!==e?e:null);let r=!!((null==t?void 0:t.loggedIn)||(null==a?void 0:a.loggedIn));if(!t&&!a){d=d?{...d,loadError:"本地服务无响应"}:{...S,loadError:"本地服务无响应"},f();return}d={session:null!=t?t:{loggedIn:!1},sync:a,utoken:(0,s.Xc)(),loadError:null,refreshing:!1,authStatus:r?"in":"out",refresh:w},f()}finally{(null==d?void 0:d.refreshing)&&y(!1)}}function w(){return m||(m=j().finally(()=>{m=null}))}function N(e){return h.add(e),1===h.size&&(w(),x=setInterval(()=>void w(),6e4)),()=>{h.delete(e),0===h.size&&x&&(clearInterval(x),x=null)}}let S={session:null,sync:null,utoken:null,loadError:null,refreshing:!1,authStatus:"loading",refresh:w};function C(){return null!=d?d:S}function k(){return C()}function I(){return(0,a.useSyncExternalStore)(N,C,k)}function T(e){var t;return(null!==(t=null==e?void 0:e.memberships)&&void 0!==t?t:[]).filter(e=>!e.isPersonal&&!e.leftAt)}function P(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 D(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 E(){return u.env.NEXT_PUBLIC_HUNTER_MATE_SERVER_URL||""}function _(){return(0,s.Xc)()}},4025:function(e,t,n){"use strict";n.d(t,{k:function(){return c}});var l=n(33447),a=n(21260),r=n(28431),s=n(26416),i=n(67002),o=n(60529);async function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new Headers(t.headers);if(n.has("Content-Type")||n.set("Content-Type","application/json"),(0,l.K5)()){var c,u;let i=(0,a.xq)();i&&n.set("Authorization","HMJWT ".concat(i));let o=(0,r.MA)();null!==o&&n.set("x-hm-active-tenant",String(o));let d=(0,s._)(null!==(c=t.method)&&void 0!==c?c:"GET",e);if(null===d)throw new s.e(null!==(u=t.method)&&void 0!==u?u:"GET",e);return fetch("".concat((0,l.XJ)()).concat(d.path),{...t,headers:n,cache:"no-store"})}let d=(0,i.Xc)();return d&&n.set("Authorization","UTOKEN ".concat(d)),fetch("".concat(o.env.HUNTER_MATE_SERVER_URL||"").concat(e),{...t,headers:n})}},82182:function(e,t,n){"use strict";n.d(t,{H7:function(){return u},jr:function(){return s},mn:function(){return c},nk:function(){return o},qd:function(){return i}});let l=null,a=new Set;function r(){a.forEach(e=>e())}function s(e){l=e,r()}function i(){l&&(l=null,r())}function o(){return l}function c(e){return a.add(e),()=>a.delete(e)}function u(e){if(!e)return null;try{var t,n,l,a,r;let s=e.split(".")[1],i=JSON.parse(decodeURIComponent(escape(atob(s.replace(/-/g,"+").replace(/_/g,"/"))))),o=null!==(r=null!==(a=null!==(l=null==i?void 0:null===(t=i.data)||void 0===t?void 0:t._id)&&void 0!==l?l:null==i?void 0:null===(n=i.data)||void 0===n?void 0:n.id)&&void 0!==a?a:null==i?void 0:i.sub)&&void 0!==r?r:null;return"number"==typeof o?o:null}catch(e){return null}}},88801:function(e,t,n){"use strict";n.d(t,{hm:function(){return c},mJ:function(){return d},oU:function(){return u}});var l=n(60635);let a="hm-view-mode",r=new Set;function s(){return"bd"===window.localStorage.getItem(a)?"bd":"delivery"}function i(e){return r.add(e),()=>r.delete(e)}function o(e){"undefined"!=typeof document&&(document.documentElement.dataset.view=e)}function c(e){window.localStorage.setItem(a,e),o(e),r.forEach(e=>e())}function u(){o(s())}function d(e){let t=(0,l.useSyncExternalStore)(i,s,()=>"delivery");return null!=e?e:t}},20166:function(){},61115:function(){},50129:function(e){e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports}},function(e){e.O(0,[633,502,589,431,400,935,744],function(){return e(e.s=866)}),_N_E=e.O()}]);
|
|
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]="993d8938-d9ba-4de7-8b2c-954d97ad67f7",e._sentryDebugIdIdentifier="sentry-dbid-993d8938-d9ba-4de7-8b2c-954d97ad67f7")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{866:function(e,t,n){Promise.resolve().then(n.t.bind(n,61115,23)),Promise.resolve().then(n.t.bind(n,20166,23)),Promise.resolve().then(n.bind(n,75946))},5111:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"}},39721:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.commonLocale=void 0,t.commonLocale={yearFormat:"YYYY",dayFormat:"D",cellMeridiemFormat:"A",monthBeforeYear:!0}},6972:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;let l={...n(39721).commonLocale,locale:"zh_CN",today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",week:"周",month:"月",year:"年",previousMonth:"上个月",nextMonth:"下个月",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",previousYear:"上一年",nextYear:"下一年",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪",yearFormat:"YYYY年",cellDateFormat:"D",monthBeforeYear:!1};t.default=l},54539:function(e,t,n){"use strict";var l=n(50129).default;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=l(n(47034));t.default=r.default},47034:function(e,t,n){"use strict";var l=n(50129).default;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=l(n(6972)),a=l(n(53523));let s={lang:{placeholder:"请选择日期",yearPlaceholder:"请选择年份",quarterPlaceholder:"请选择季度",monthPlaceholder:"请选择月份",weekPlaceholder:"请选择周",rangePlaceholder:["开始日期","结束日期"],rangeYearPlaceholder:["开始年份","结束年份"],rangeMonthPlaceholder:["开始月份","结束月份"],rangeQuarterPlaceholder:["开始季度","结束季度"],rangeWeekPlaceholder:["开始周","结束周"],...r.default},timePickerLocale:{...a.default}};s.lang.ok="确定",t.default=s},26499:function(e,t,n){"use strict";var l=n(50129).default;t.Z=void 0;var r=l(n(5111)),a=l(n(54539)),s=l(n(47034)),i=l(n(53523));let o="${label}不是一个有效的${type}",c={locale:"zh-cn",Pagination:r.default,DatePicker:s.default,TimePicker:i.default,Calendar:a.default,global:{placeholder:"请选择",close:"关闭",sortable:"可排序",show:"显示",hide:"隐藏"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",filterEmptyText:"无筛选项",filterCheckAll:"全选",filterSearchPlaceholder:"在筛选项中搜索",emptyText:"暂无数据",selectAll:"全选当页",selectInvert:"反选当页",selectNone:"清空所有",selectionAll:"全选所有",sortTitle:"排序",expand:"展开行",collapse:"关闭行",triggerDesc:"点击降序",triggerAsc:"点击升序",cancelSort:"取消排序"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Tour:{Next:"下一步",Previous:"上一步",Finish:"结束导览"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{titles:["",""],searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项",remove:"删除",selectCurrent:"全选当页",removeCurrent:"删除当页",selectAll:"全选所有",deselectAll:"取消全选",removeAll:"删除全部",selectInvert:"反选当页"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开",collapse:"收起"},Carousel:{prevSlide:"上一张幻灯片",nextSlide:"下一张幻灯片"},Form:{optional:"(可选)",defaultValidateMessages:{default:"字段验证错误${label}",required:"请输入${label}",enum:"${label}必须是其中一个[${enum}]",whitespace:"${label}不能为空字符",date:{format:"${label}日期格式无效",parse:"${label}不能转换为日期",invalid:"${label}是一个无效日期"},types:{string:o,method:o,array:o,object:o,number:o,date:o,boolean:o,integer:o,float:o,regexp:o,email:o,url:o,hex:o},string:{len:"${label}须为${len}个字符",min:"${label}最少${min}个字符",max:"${label}最多${max}个字符",range:"${label}须在${min}-${max}字符之间"},number:{len:"${label}必须等于${len}",min:"${label}最小值为${min}",max:"${label}最大值为${max}",range:"${label}须在${min}-${max}之间"},array:{len:"须为${len}个${label}",min:"最少${min}个${label}",max:"最多${max}个${label}",range:"${label}数量须在${min}-${max}之间"},pattern:{mismatch:"${label}与模式不匹配${pattern}"}}},QRCode:{expired:"二维码过期",refresh:"点击刷新",scanned:"已扫描"},ColorPicker:{presetEmpty:"暂无",transparent:"无色",singleColor:"单色",gradientColor:"渐变色"}};t.Z=c},53523:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={placeholder:"请选择时间",rangePlaceholder:["开始时间","结束时间"]}},27473:function(e,t,n){"use strict";var l=n(38321);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}}),n.o(l,"useServerInsertedHTML")&&n.d(t,{useServerInsertedHTML:function(){return l.useServerInsertedHTML}})},71873:function(e,t,n){"use strict";n.d(t,{D:function(){return m},l:function(){return d}});var l=n(72835),r=n(60635),a=n(21260);let s="hm-cloud-login-draft",i="hm-cloud-login-resend-at",o="hm-cloud-last-email";function c(){let e={email:"",step:"email",code:""};try{let t=window.sessionStorage.getItem(s);if(!t)return e;let n=JSON.parse(t);return{email:"string"==typeof n.email?n.email:"",step:"code"===n.step?"code":"email",code:"string"==typeof n.code?n.code:""}}catch(t){return e}}function u(){try{var e;let t=Number(null!==(e=window.sessionStorage.getItem(i))&&void 0!==e?e:0);return Math.max(0,Math.ceil((t-Date.now())/1e3))}catch(e){return 0}}function d(e){let{onDone:t}=e,[n,d]=(0,r.useState)(c),[m,x]=(0,r.useState)(!1),[h,f]=(0,r.useState)(u),[y,g]=(0,r.useState)(null),[b,v]=(0,r.useState)(null),p=(0,r.useRef)(null),{email:j,step:w,code:N}=n;(0,r.useEffect)(()=>{if(!j){let e=function(){try{var e;return null!==(e=window.localStorage.getItem(o))&&void 0!==e?e:""}catch(e){return""}}();e&&S({email:e})}},[]),(0,r.useEffect)(()=>{if(!(h<=0)&&!p.current)return p.current=setInterval(()=>{f(e=>(e<=1&&p.current&&(clearInterval(p.current),p.current=null),Math.max(0,e-1)))},1e3),()=>{p.current&&clearInterval(p.current),p.current=null}},[h]);let S=e=>{d(t=>{let n={...t,...e};try{window.sessionStorage.setItem(s,JSON.stringify(n))}catch(e){}return n})},C=e=>{try{window.localStorage.setItem(o,e)}catch(e){}},k=()=>{try{window.sessionStorage.removeItem(s),window.sessionStorage.removeItem(i)}catch(e){}},I=()=>{try{window.sessionStorage.setItem(i,String(Date.now()+6e4))}catch(e){}f(60)},T=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,P=async()=>{let e=j.trim().toLowerCase();if(!T.test(e)){v("请输入有效邮箱");return}x(!0),v(null),g(null);let t=await fetch("/hunter-mate/auth/email/send-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})});if(x(!1),!t.ok){let e=await t.json().catch(()=>null);v((null==e?void 0:e.message)||"发送失败(HTTP ".concat(t.status,")"));return}C(e),S({email:e,step:"code"}),I(),g("验证码已发送,请查收邮件")},D=async()=>{if(!/^\d{6}$/.test(N.trim())){v("请输入 6 位数字验证码");return}x(!0),v(null);let e=await fetch("/hunter-mate/auth/email/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:j.trim().toLowerCase(),code:N.trim()})});if(x(!1),!e.ok){let t=await e.json().catch(()=>null);v((null==t?void 0:t.message)||"验证失败(HTTP ".concat(e.status,")"));return}let n=await e.json().catch(()=>null);if(!(null==n?void 0:n.access_token)){v("登录响应缺少凭证,请重试");return}C(j.trim().toLowerCase()),(0,a.VA)(n.access_token),k(),(0,a.notifyCloudTokenChanged)(),t()};return(0,l.jsxs)("div",{children:["email"===w?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:j,onFocus:e=>e.target.select(),onChange:e=>S({email:e.target.value}),onBlur:e=>S({email:e.target.value.trim().toLowerCase()}),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:P,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 text-left text-xs text-gray-500",children:["验证码已发送至 ",j,",请查收邮件"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,maxLength:6,value:N,onChange:e=>S({code:e.target.value}),placeholder:"6 位验证码",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-center text-sm tracking-[0.5em]"}),(0,l.jsx)("button",{onClick:D,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"登录中…":"登录"}),(0,l.jsxs)("div",{className:"mt-3 flex items-center justify-between text-xs",children:[(0,l.jsx)("button",{onClick:()=>S({step:"email"}),className:"text-gray-400 hover:text-gray-600",children:"换个邮箱"}),(0,l.jsx)("button",{onClick:P,disabled:h>0||m,className:"text-blue-600 hover:text-blue-700 disabled:text-gray-300",children:h>0?"重新发送(".concat(h,"s)"):"重新发送"})]})]}),y&&(0,l.jsx)("div",{className:"mt-3 text-xs text-green-600",children:y}),b&&(0,l.jsx)("div",{className:"mt-3 text-xs text-red-500",children:b})]})}function m(e){let{children:t}=e,[n,s]=(0,r.useState)(null);return((0,r.useEffect)(()=>{let e=()=>s(null!==(0,a.xq)());return e(),(0,a.RB)(e)},[]),null===n)?(0,l.jsxs)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:[(0,l.jsx)("span",{className:"hm-spinner","aria-label":"加载中"}),(0,l.jsx)("div",{className:"mt-4 text-sm text-gray-400",children:"正在加载,请稍候…"})]}):n?(0,l.jsx)(l.Fragment,{children:t}):(0,l.jsx)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:(0,l.jsxs)("div",{className:"w-80 rounded-2xl border border-gray-200 bg-white p-8 text-center shadow-sm",children:[(0,l.jsx)("div",{className:"mb-2 text-3xl",children:"\uD83E\uDD1D"}),(0,l.jsx)("div",{className:"mb-1 text-lg font-semibold text-gray-900",children:"HunterMate 云工作台"}),(0,l.jsx)("div",{className:"mb-4 text-xs text-gray-400",children:"登录后,随时随地访问你的协作数据"}),(0,l.jsx)(d,{onDone:()=>s(!0)})]})})}},75946:function(e,t,n){"use strict";n.d(t,{GateByRoute:function(){return R}});var l=n(72835),r=n(27473),a=n(60635),s=n(65777),i=n(82182),o=n(4025),c=n(33447),u=n(28431);function d(){var e,t,r;let{session:o,sync:d,utoken:h,loadError:f,refresh:y}=(0,s.nu)(),[g,b]=(0,a.useState)(!1),[v,j]=(0,a.useState)(!1),[w,N]=(0,a.useState)(!1),[S,C]=(0,a.useState)(!1),k=(null==o?void 0:o.loggedIn)||(null==d?void 0:d.loggedIn),I=(0,s.aG)(d),T=(0,s.cp)(d),P=null==T?null:null!==(t=null===(e=I.find(e=>e.tenantId===T))||void 0===e?void 0:e.name)&&void 0!==t?t:null,D=async e=>{C(!0);try{var t,l,r,a;let m=null!==(r=null==d?void 0:null===(l=d.memberships)||void 0===l?void 0:null===(t=l.find(e=>e.isPersonal))||void 0===t?void 0:t.tenantId)&&void 0!==r?r:null,x=null!=e?e:m;if((0,c.K5)()){let{requestJson:e}=await Promise.resolve().then(n.bind(n,74431));await e("/hunter-mate/tenant/last-active",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tenantId:x})}),(0,u.bw)(x),await y();return}let f=new Headers({"Content-Type":"application/json"});h&&f.set("Authorization","UTOKEN ".concat(h));let g=await fetch("".concat((0,s.tQ)(),"/datasync/active-tenant"),{method:"POST",headers:f,body:JSON.stringify({id:x})});if(401===g.status){(0,i.jr)({message:"登录已过期,请重新登录",oldUserId:null!==(a=null==o?void 0:o.hmUserId)&&void 0!==a?a:null,retry:async()=>{let t=new Headers({"Content-Type":"application/json"}),n=(0,s.Xc)();return n&&t.set("Authorization","UTOKEN ".concat(n)),!!(await fetch("".concat((0,s.tQ)(),"/datasync/active-tenant"),{method:"POST",headers:t,body:JSON.stringify({id:e})})).ok&&(await y(),!0)}});return}await y()}finally{C(!1)}},E=async()=>{if((0,c.K5)()){let{clearCloudToken:e,notifyCloudTokenChanged:t}=await Promise.resolve().then(n.bind(n,21260));e(),(0,u.nZ)(),t(),await y();return}let e=new Headers({"Content-Type":"application/json"});h&&e.set("Authorization","UTOKEN ".concat(h)),await fetch("".concat((0,s.tQ)(),"/datasync/logout"),{method:"POST",headers:e}).catch(()=>null),await y()},_=null===d?{text:"同步状态加载中…",cls:"bg-gray-100 text-gray-400"}:d.enabled?d.authFailed?{text:"登录态失效",cls:"bg-red-100 text-red-600"}:d.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:[f?(0,l.jsxs)("div",{className:"text-xs text-red-500",children:[f,"(本地服务未启动?)"]}):k?(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==o?void 0:o.email)||"已登录"}),(0,l.jsx)("span",{className:"inline-block rounded-full px-2 py-0.5 text-xs ".concat(_.cls),children:_.text})]}),(0,l.jsx)("button",{onClick:E,title:"退出登录",className:"shrink-0 rounded-md px-2 py-1 text-xs text-gray-400 hover:bg-gray-100 hover:text-gray-600",children:"退出"})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{onClick:()=>j(e=>!e),disabled:S,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==T?"个人使用(不归属公司)":null!=P?P:"未知公司"}),(0,l.jsx)("span",{className:"text-xs text-gray-400",children:S?"切换中…":"▾"})]}),(0,l.jsx)("div",{className:"mt-1 truncate whitespace-nowrap text-xs text-gray-400",children:"当前归属公司;公司内数据互通"})]})]}):(0,l.jsxs)("div",{className:"flex items-center justify-between",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-sm text-gray-500",children:"未登录"}),(0,l.jsx)("div",{className:"text-xs text-gray-400",children:"登录后可跨设备同步数据"})]}),(0,l.jsx)("button",{onClick:()=>b(!0),className:"rounded-lg bg-blue-600 px-3 py-1.5 text-sm text-white hover:bg-blue-700",children:"登录"})]}),v&&k&&(0,l.jsx)(m,{sync:d,companies:I,activeTenantId:T,onPick:async e=>{j(!1),await D(e)},onCreateJoin:()=>{j(!1),N(!0)},onClose:()=>j(!1)}),w&&k&&(0,l.jsx)(x,{utoken:h,oldUserId:null!==(r=null==o?void 0:o.hmUserId)&&void 0!==r?r:null,onDone:async e=>{N(!1),null!=e&&await D(e),await y()},onClose:()=>N(!1)}),g&&(0,l.jsx)(p,{onClose:()=>b(!1),onDone:()=>{b(!1),y()}})]})}function m(e){let{sync:t,companies:n,activeTenantId:r,onPick:s,onCreateJoin:i,onClose:o}=e,c=(0,a.useRef)(null);return(0,a.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==r&&(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]}),r===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 x(e){let{utoken:t,oldUserId:n,onDone:r,onClose:s}=e,[c,u]=(0,a.useState)(""),[d,m]=(0,a.useState)(!1),[x,h]=(0,a.useState)([]),[f,y]=(0,a.useState)(!1),[g,b]=(0,a.useState)(null),[v,p]=(0,a.useState)(null),[j,w]=(0,a.useState)(null),N=(0,a.useCallback)(async(e,t)=>(0,o.k)(e,null!=t?t:{}),[t]);(0,a.useEffect)(()=>{let e=c.trim();if(!e){h([]),m(!1);return}m(!0);let t=setTimeout(async()=>{var t;let n=await N("/company/search?q=".concat(encodeURIComponent(e)));if(!n.ok){h([]),m(!1);return}h(null!==(t=(await n.json()).items)&&void 0!==t?t:[]),m(!1)},300);return()=>clearTimeout(t)},[c,N]);let S=(e,t)=>{(null==t?void 0:t.already)?w("已申请过「".concat(e.name,"」,等待管理员审批")):w("已申请加入「".concat(e.name,"」,管理员通过后即可数据互通")),h(t=>t.map(t=>t.id===e.id?{...t,myApplication:"pending"}:t))},C=async()=>{let e=c.trim();if(e){y(!0),p(null);try{var t;let l=await N("/company",{method:"POST",body:JSON.stringify({name:e})}),a=await l.json().catch(()=>null);if(!l.ok){if(401===l.status){p("登录已过期,请在弹窗中重新登录;登录后自动继续创建"),(0,i.jr)({message:"登录已过期,请重新登录",oldUserId:null!=n?n:null,retry:async()=>{var t;let n=await (0,o.k)("/company",{method:"POST",body:JSON.stringify({name:e})}),l=await n.json().catch(()=>null);return n.ok?(r(null!==(t=null==l?void 0:l.id)&&void 0!==t?t:null),!0):(p((null==l?void 0:l.message)||"创建失败(HTTP ".concat(n.status,")")),!1)}});return}p((null==a?void 0:a.message)||"创建失败(HTTP ".concat(l.status,")"));return}r(null!==(t=null==a?void 0:a.id)&&void 0!==t?t:null)}finally{y(!1)}}},k=async e=>{b(e.id),p(null),w(null);try{let t=await N("/company/".concat(e.id,"/apply"),{method:"POST",body:JSON.stringify({})}),l=await t.json().catch(()=>null);if(!t.ok){if(401===t.status){p("登录已过期,请在弹窗中重新登录;登录后自动继续申请"),(0,i.jr)({message:"登录已过期,请重新登录",oldUserId:null!=n?n:null,retry:async()=>{let t=await (0,o.k)("/company/".concat(e.id,"/apply"),{method:"POST",body:JSON.stringify({})}),n=await t.json().catch(()=>null);return t.ok?(S(e,n),!0):(p((null==n?void 0:n.message)||"申请失败(HTTP ".concat(t.status,")")),!1)}});return}p((null==l?void 0:l.message)||"申请失败(HTTP ".concat(t.status,")"));return}S(e,l)}finally{b(null)}},I=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:s,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:c,onChange:e=>u(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:""===c.trim()?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"输入关键词可检索已存在的公司并申请加入"}):d?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:"检索中…"}):0===x.length?(0,l.jsxs)("div",{className:"px-3 py-4 text-center text-xs text-gray-400",children:["没有匹配「",c.trim(),"」的公司,可直接创建"]}):x.map(e=>{let t=I(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&&k(e),disabled:t.disabled||g===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:g===e.id?"申请中…":t.label})]},e.id)})}),(0,l.jsx)("button",{onClick:C,disabled:f||""===c.trim(),className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:f?"创建中…":"创建公司「".concat(c.trim()||"…","」")}),j&&(0,l.jsx)("div",{className:"mt-2 text-xs text-green-600",children:j}),v&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:v}),(0,l.jsx)("button",{onClick:s,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"关闭"})]})})}let h="hm-login-draft",f="hm-login-resend-at",y="hm-last-email";function g(){let e={email:"",step:"email",code:""};try{let t=window.sessionStorage.getItem(h);if(!t)return e;let n=JSON.parse(t);return{email:"string"==typeof n.email?n.email:"",step:"code"===n.step?"code":"email",code:"string"==typeof n.code?n.code:""}}catch(t){return e}}function b(){try{var e;let t=Number(null!==(e=window.sessionStorage.getItem(f))&&void 0!==e?e:0);return Math.max(0,Math.ceil((t-Date.now())/1e3))}catch(e){return 0}}function v(e){let{onDone:t}=e,[n,r]=(0,a.useState)(g),[i,o]=(0,a.useState)(!1),[c,u]=(0,a.useState)(b),[d,m]=(0,a.useState)(null),[x,v]=(0,a.useState)(null),p=(0,a.useRef)(null),{email:j,step:w,code:N}=n;(0,a.useEffect)(()=>{if(!j){let e=function(){try{var e;return null!==(e=window.localStorage.getItem(y))&&void 0!==e?e:""}catch(e){return""}}();e&&S({email:e})}},[]),(0,a.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);let S=e=>{r(t=>{let n={...t,...e};try{window.sessionStorage.setItem(h,JSON.stringify(n))}catch(e){}return n})},C=e=>{try{window.localStorage.setItem(y,e)}catch(e){}},k=()=>{try{window.sessionStorage.removeItem(h),window.sessionStorage.removeItem(f)}catch(e){}},I=()=>{try{window.sessionStorage.setItem(f,String(Date.now()+6e4))}catch(e){}u(60),p.current&&clearInterval(p.current),p.current=setInterval(()=>{u(e=>(e<=1&&p.current&&clearInterval(p.current),Math.max(0,e-1)))},1e3)},T=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,P=async()=>{let e=j.trim().toLowerCase();if(!T.test(e)){v("请输入有效邮箱");return}o(!0),v(null),m(null);let t=await fetch("".concat((0,s.tQ)(),"/auth/email/send-code"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})});if(o(!1),!t.ok){let e=await t.json().catch(()=>null);v((null==e?void 0:e.message)||"发送失败(HTTP ".concat(t.status,")"));return}C(e),S({email:e,step:"code"}),I(),m("验证码已发送,请查收邮件")},D=async()=>{if(!/^\d{6}$/.test(N.trim())){v("请输入 6 位数字验证码");return}o(!0),v(null);let e=await fetch("".concat((0,s.tQ)(),"/auth/email/verify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:j.trim().toLowerCase(),code:N.trim()})});if(o(!1),!e.ok){let t=await e.json().catch(()=>null);v((null==t?void 0:t.message)||"验证失败(HTTP ".concat(e.status,")"));return}C(j.trim().toLowerCase()),k(),t()};return(0,l.jsxs)("div",{children:["email"===w?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:j,onFocus:e=>e.target.select(),onChange:e=>S({email:e.target.value}),onBlur:e=>S({email:e.target.value.trim().toLowerCase()}),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:P,disabled:i,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:i?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 text-left text-xs text-gray-500",children:["验证码已发送至 ",j,",请查收邮件"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,maxLength:6,value:N,onChange:e=>S({code: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:D,disabled:i,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:i?"登录中…":"登录"}),(0,l.jsxs)("div",{className:"mt-2 flex items-center justify-between text-xs",children:[(0,l.jsx)("button",{onClick:P,disabled:i||c>0,className:"text-gray-400 hover:text-gray-600 disabled:text-gray-300",children:c>0?"重新发送(".concat(c,"s)"):"重新发送"}),(0,l.jsx)("button",{onClick:()=>{S({step:"email",code:""}),v(null)},className:"text-gray-400 hover:text-gray-600",children:"返回修改邮箱"})]})]}),d&&(0,l.jsx)("div",{className:"mt-2 text-xs text-green-600",children:d}),x&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:x})]})}function p(e){let{onClose:t,onDone:n}=e;return(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",children:(0,l.jsxs)("div",{className:"w-80 rounded-xl bg-white p-5 shadow-xl",children:[(0,l.jsx)("h3",{className:"mb-3 text-base font-semibold text-gray-900",children:"邮箱验证码登录"}),(0,l.jsx)(v,{onDone:n}),(0,l.jsx)("button",{onClick:t,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"关闭"})]})})}var j=n(71873);function w(e){let{children:t}=e;return(0,c.K5)()?(0,l.jsx)(j.D,{children:t}):(0,l.jsx)(N,{children:t})}function N(e){let{children:t}=e,{authStatus:n,refreshing:r,loadError:a,refresh:i}=(0,s.nu)();return a&&"loading"===n?(0,l.jsxs)(S,{children:[(0,l.jsxs)("div",{className:"text-sm text-red-500",children:[a,"(本地服务未启动?)"]}),(0,l.jsx)("button",{onClick:()=>void i(),className:"mt-4 rounded-lg bg-blue-600 px-4 py-2 text-sm text-white hover:bg-blue-700",children:"重试"})]}):"loading"===n?(0,l.jsxs)(S,{children:[(0,l.jsx)("span",{className:"hm-spinner","aria-label":"加载中"}),(0,l.jsx)("div",{className:"mt-4 text-sm text-gray-400",children:"正在加载,请稍候…"})]}):"out"===n?(0,l.jsx)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:(0,l.jsxs)("div",{className:"w-80 rounded-2xl border border-gray-200 bg-white p-8 text-center shadow-sm",children:[(0,l.jsx)("div",{className:"mb-2 text-3xl",children:"\uD83E\uDD1D"}),(0,l.jsx)("div",{className:"mb-1 text-lg font-semibold text-gray-900",children:"HunterMate"}),(0,l.jsx)("div",{className:"mb-4 text-xs text-gray-400",children:"登录后,你的数据在任何设备同步"}),a&&(0,l.jsx)("div",{className:"mb-3 text-xs text-red-500",children:a}),r&&(0,l.jsxs)("div",{className:"mb-3 flex items-center justify-center gap-2 rounded-lg bg-blue-50 py-2 text-sm text-blue-600",children:[(0,l.jsx)("span",{className:"hm-spinner hm-spinner-sm","aria-label":"加载中"}),"登录中,正在加载你的数据…"]}),(0,l.jsx)(v,{onDone:()=>{i()}})]})}):(0,l.jsxs)(l.Fragment,{children:[r&&(0,l.jsx)(C,{}),t]})}function S(e){let{children:t}=e;return(0,l.jsx)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:t})}function C(){let[e,t]=(0,a.useState)(!1);return((0,a.useEffect)(()=>{let e=setTimeout(()=>t(!0),250);return()=>clearTimeout(e)},[]),e)?(0,l.jsx)("div",{className:"hm-top-bar","aria-hidden":!0}):null}var k=n(55589);function I(){let e=(0,a.useSyncExternalStore)(i.mn,i.nk,()=>null),{session:t,sync:n,refresh:r}=(0,s.nu)(),[o,c]=(0,a.useState)(""),[u,d]=(0,a.useState)(""),[m,x]=(0,a.useState)("email"),[h,f]=(0,a.useState)(!1),[y,g]=(0,a.useState)(null),[b,v]=(0,a.useState)(!1),[p,j]=(0,a.useState)(0),w=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(e){var n;x("email"),c(null!==(n=null==t?void 0:t.email)&&void 0!==n?n:""),d(""),g(null),v(!1),j(0)}w.current&&clearInterval(w.current)},[null==e?void 0:e.message]);let N=(0,a.useRef)(!1);if((0,a.useEffect)(()=>{var e;if(!(null==n?void 0:n.authFailed)){N.current=!1;return}!N.current&&((0,i.nk)()||(N.current=!0,(0,i.jr)({message:"登录态已失效,需要登录才可以继续使用",oldUserId:null!==(e=null==t?void 0:t.hmUserId)&&void 0!==e?e:null,retry:async()=>(await r(),!0)})))},[null==n?void 0:n.authFailed,null==t?void 0:t.hmUserId,r]),(0,a.useEffect)(()=>()=>{w.current&&clearInterval(w.current)},[]),!e)return null;let S=()=>{j(60),w.current&&clearInterval(w.current),w.current=setInterval(()=>{j(e=>(e<=1&&w.current&&clearInterval(w.current),Math.max(0,e-1)))},1e3)},C=async()=>{if(!o.includes("@")){g("请输入有效邮箱");return}f(!0),g(null);try{let e=await fetch("".concat((0,s.tQ)(),"/auth/email/send-code"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o})});if(!e.ok){let t=await e.json().catch(()=>null);g((null==t?void 0:t.message)||"发送失败(HTTP ".concat(e.status,")"));return}x("code"),S()}finally{f(!1)}},k=async()=>{if(!/^\d{4,8}$/.test(u)){g("请输入验证码(4-8 位数字)");return}f(!0),g(null);try{var t;let n=await fetch("".concat((0,s.tQ)(),"/auth/email/verify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,code:u})}),l=await n.json().catch(()=>null);if(!n.ok||!(null==l?void 0:l.access_token)){g((null==l?void 0:l.message)||"验证失败(HTTP ".concat(n.status,")"));return}let a=(0,i.H7)(l.access_token),c=null!==(t=e.oldUserId)&&void 0!==t?t:null;if(null!=c&&null!=a&&c!==a){window.location.reload();return}v(!0),(0,i.qd)(),await r(),await e.retry()||v(!1)}finally{f(!1)}};return(0,l.jsx)("div",{className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",children:(0,l.jsxs)("div",{className:"w-80 rounded-xl bg-white p-5 shadow-xl",children:[(0,l.jsx)("h3",{className:"text-base font-semibold text-gray-900",children:"登录已过期"}),(0,l.jsxs)("p",{className:"mt-1 text-xs text-gray-500",children:[e.message,"。重新登录后将自动继续刚才的操作;若登录其他账号,页面将重新加载。"]}),b?(0,l.jsx)("div",{className:"mt-4 rounded bg-blue-50 p-3 text-sm text-blue-700",children:"正在继续刚才的操作…"}):(0,l.jsx)(l.Fragment,{children:"email"===m?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"email",autoFocus:!0,value:o,onChange:e=>c(e.target.value),placeholder:"you@example.com",className:"mb-3 mt-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm"}),(0,l.jsx)("button",{onClick:C,disabled:h,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:h?"发送中…":"发送验证码"})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"mb-2 mt-3 text-xs text-gray-500",children:["验证码已发送至 ",o,",请查收邮件后输入"]}),(0,l.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,value:u,onChange:e=>d(e.target.value),placeholder:"6 位验证码",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm tracking-widest"}),(0,l.jsx)("button",{onClick:k,disabled:h,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:h?"验证中…":"登录并继续"}),(0,l.jsx)("button",{type:"button",onClick:C,disabled:h||p>0,className:"mt-2 w-full rounded-lg border border-blue-600 py-1.5 text-sm text-blue-600 disabled:border-gray-300 disabled:text-gray-400",children:p>0?"".concat(p,"s 后重发"):"重发验证码"}),(0,l.jsx)("button",{onClick:()=>{x("email"),g(null)},className:"mt-1 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"返回修改邮箱"})]})}),y&&(0,l.jsx)("div",{className:"mt-2 text-xs text-red-500",children:y}),!b&&(0,l.jsx)("button",{onClick:i.qd,className:"mt-2 w-full py-1 text-xs text-gray-400 hover:text-gray-600",children:"取消(放弃本次操作)"})]})})}var T=n(88801);let P=[{key:"delivery",label:"交付",icon:"\uD83C\uDFAF"},{key:"bd",label:"BD",icon:"\uD83E\uDDED"}];function D(){let e=(0,T.mJ)();return(0,l.jsx)("div",{className:"mx-2 mb-2 rounded-lg bg-gray-100 p-1",title:"角色视角:列表与详情按视角展示内容,记住上次选择",children:(0,l.jsx)("div",{className:"grid grid-cols-2 gap-1",children:P.map(t=>{let n=e===t.key;return(0,l.jsxs)("button",{type:"button",onClick:()=>(0,T.hm)(t.key),className:"rounded-md px-2 py-1.5 text-xs font-medium transition ".concat(n?"bg-white shadow-sm":"text-gray-500 hover:text-gray-700"),style:n?{color:"var(--brand-strong)"}:void 0,children:[t.icon," ",t.label]},t.key)})})})}let E=null,_=[{href:"/",label:"仪表盘",icon:"\uD83D\uDCCA"},{href:"/talents",label:"人才",icon:"\uD83D\uDC64"},{href:"/jobs",label:"职位",icon:"\uD83D\uDCBC"},{href:"/companies",label:"公司",icon:"\uD83C\uDFE2"},{href:"/parselog",label:"解析日志",icon:"\uD83D\uDCCB"},{href:"/recordings",label:"录制",icon:"\uD83D\uDD34"},{href:"/resource-usage",label:"资源占用",icon:"\uD83D\uDCBD"},{href:"/team/insights",label:"团队统计",icon:"\uD83D\uDCC8"},{href:"/memory",label:"记忆与知识",icon:"\uD83E\uDDE0"}];function O(){var e,t,n,i;let o=(0,r.usePathname)()||"/",{sync:c,utoken:u}=(0,s.nu)();(0,a.useEffect)(()=>(0,T.oU)(),[]);let m=(0,s.cp)(c),x=(0,s.Cd)(c,m),h=null!==(n=null===(e=(null!==(t=null==c?void 0:c.pendingCounts)&&void 0!==t?t:[]).find(e=>e.tenantId===m))||void 0===e?void 0:e.count)&&void 0!==n?n:0,[f,y]=(0,a.useState)(null!==(i=null==E?void 0:E.isAdmin)&&void 0!==i&&i);return(0,a.useEffect)(()=>{if(!u){y(!1);return}if((null==E?void 0:E.utoken)===u){y(E.isAdmin);return}let e=!1;return(async()=>{try{let t=await fetch("/admin/entities?pageSize=1&hmUserId=1",{headers:{Authorization:"UTOKEN ".concat(u)}}),n=403!==t.status&&401!==t.status;E={utoken:u,isAdmin:n},e||y(n)}catch(t){e||y(!1)}})(),()=>{e=!0}},[u]),(0,l.jsxs)("aside",{className:"flex h-screen w-56 flex-col border-r border-gray-200 bg-white",style:{borderTopColor:"var(--brand)"},children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 border-b border-gray-200 px-4 py-3",style:{boxShadow:"inset 3px 0 0 var(--brand)"},children:[(0,l.jsx)("span",{className:"text-xl",children:"\uD83E\uDD1D"}),(0,l.jsx)("span",{className:"font-semibold text-gray-900",children:"HunterMate"})]}),(0,l.jsxs)("nav",{className:"flex-1 overflow-auto py-3",children:[_.map(e=>{let t=o===e.href||o.startsWith("".concat(e.href,"/"));return(0,l.jsxs)(k.default,{href:e.href,className:"mx-2 flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors ".concat(t?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsx)("span",{className:"text-base",children:e.icon}),e.label]},e.href)}),null!=m&&("owner"===x||"admin"===x)&&(0,l.jsxs)(k.default,{href:"/company/admin",className:"mx-2 flex items-center justify-between rounded-lg px-3 py-2 text-sm transition-colors ".concat(o.startsWith("/company/admin")?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsxs)("span",{className:"flex items-center gap-3",children:[(0,l.jsx)("span",{className:"text-base",children:"⚙️"}),"企业管理"]}),h>0&&(0,l.jsx)("span",{className:"rounded-full bg-red-500 px-1.5 text-[10px] leading-4 text-white",children:h>99?"99+":h})]}),f&&(0,l.jsxs)(k.default,{href:"/admin/data",className:"mx-2 flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors ".concat(o.startsWith("/admin")?"hm-active":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,l.jsx)("span",{className:"text-base",children:"\uD83E\uDDF9"}),"数据管理"]})]}),(0,l.jsx)(D,{}),(0,l.jsx)(d,{}),(0,l.jsx)(I,{})]})}var $=n(60662);function M(){return(M=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(e[l]=n[l])}return e}).apply(this,arguments)}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,l=Array(t);n<t;n++)l[n]=e[n];return l}var U=function(e){var t,n=(function(e){if(Array.isArray(e))return e}(t=(0,a.useState)(function(){return(0,$.Df)()}))||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var l,r,a,s,i=[],o=!0,c=!1;try{for(a=(n=n.call(e)).next;!(o=(l=a.call(n)).done)&&(i.push(l.value),1!==i.length);o=!0);}catch(e){c=!0,r=e}finally{try{if(!o&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(t,1)||function(e,t){if(e){if("string"==typeof e)return A(e,1);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return A(e,1)}}(t,1)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return(0,r.useServerInsertedHTML)(function(){var e=(0,$.EN)(n,{plain:!0,once:!0});return e.includes('.data-ant-cssinjs-cache-path{content:"";}')?null:a.createElement("style",{id:"antd-cssinjs","data-rc-order":"prepend","data-rc-priority":"-1000",dangerouslySetInnerHTML:{__html:e}})}),a.createElement($.V9,M({},e,{cache:n}))},F=n(12502),H=n(26499);function J(e){let{children:t}=e;return(0,l.jsx)(U,{children:(0,l.jsx)(F.ZP,{locale:H.Z,children:t})})}function R(e){let{children:t}=e;return"/login"===(0,r.usePathname)()?(0,l.jsx)(J,{children:t}):(0,l.jsx)(w,{children:(0,l.jsxs)(J,{children:[(0,l.jsx)(O,{}),t]})})}},65777:function(e,t,n){"use strict";let l;n.d(t,{Cd:function(){return D},Xc:function(){return _},aG:function(){return T},cp:function(){return P},nu:function(){return I},tQ:function(){return E}});var r=n(60635),a=n(74431),s=n(67002),i=n(33447),o=n(21260),c=n(28431),u=n(60529);let d=null,m=null,x=null,h=new Set;function f(){h.forEach(e=>e())}function y(e){d=d?{...d,refreshing:e}:{...S,refreshing:e},f()}function g(e){if(void 0===l){l=e;return}if(e!==l){l=e;try{window.localStorage.removeItem("hm-view-mode")}catch(e){}}}async function b(){try{return await (0,a.requestJson)("/auth/session")}catch(e){return null}}async function v(e){let t=new Headers,n=(0,s.Xc)();n&&t.set("Authorization","UTOKEN ".concat(n));try{return await (0,a.requestJson)(e,{headers:t})}catch(e){return null}}async function p(){y(!0);try{var e,t,n,l,r,s,i,u,m;let x=(0,o.xq)();if(!x){(0,c.nZ)(),d={...S,session:{loggedIn:!1},refreshing:!1,authStatus:"out"},f();return}let h=await (0,a.requestJson)("/hunter-mate/sync/state?heads=0");(0,c.YZ)(null!==(e=h.activeTenantId)&&void 0!==e?e:null);let y=(0,o.OG)(x);g(null!==(n=null!==(t=h.hmUserId)&&void 0!==t?t:y.hmUserId)&&void 0!==n?n:null),d={session:{loggedIn:!0,email:null!==(l=y.email)&&void 0!==l?l:void 0,hmUserId:null!==(s=null!==(r=h.hmUserId)&&void 0!==r?r:y.hmUserId)&&void 0!==s?s:void 0,token:x},sync:{loggedIn:!0,enabled:!0,activeTenantId:(0,c.MA)(),serverSuggestedTenantId:null!==(i=h.activeTenantId)&&void 0!==i?i:null,memberships:null!==(u=h.memberships)&&void 0!==u?u:[],pendingCounts:null!==(m=h.pendingCounts)&&void 0!==m?m:[]},utoken:x,loadError:null,refreshing:!1,authStatus:"in",refresh:w},f()}catch(e){d=d?{...d,loadError:"云端无响应"}:{...S,loadError:"云端无响应"},f()}finally{(null==d?void 0:d.refreshing)&&y(!1)}}async function j(){if((0,i.K5)())return p();y(!0);try{var e;let[t,n]=await Promise.all([b(),v("/datasync/state")]),l=(null==t?void 0:t.loggedIn)&&t.token?t.token:null,r=null!=n?n:null;!r&&t&&l&&l!==(0,s.Xc)()?((0,s.GK)(l),r=await v("/datasync/state")):(0,s.GK)(l),g((null==t?void 0:t.loggedIn)&&null!==(e=t.hmUserId)&&void 0!==e?e:null);let a=!!((null==t?void 0:t.loggedIn)||(null==r?void 0:r.loggedIn));if(!t&&!r){d=d?{...d,loadError:"本地服务无响应"}:{...S,loadError:"本地服务无响应"},f();return}d={session:null!=t?t:{loggedIn:!1},sync:r,utoken:(0,s.Xc)(),loadError:null,refreshing:!1,authStatus:a?"in":"out",refresh:w},f()}finally{(null==d?void 0:d.refreshing)&&y(!1)}}function w(){return m||(m=j().finally(()=>{m=null}))}function N(e){return h.add(e),1===h.size&&(w(),x=setInterval(()=>void w(),6e4)),()=>{h.delete(e),0===h.size&&x&&(clearInterval(x),x=null)}}let S={session:null,sync:null,utoken:null,loadError:null,refreshing:!1,authStatus:"loading",refresh:w};function C(){return null!=d?d:S}function k(){return C()}function I(){return(0,r.useSyncExternalStore)(N,C,k)}function T(e){var t;return(null!==(t=null==e?void 0:e.memberships)&&void 0!==t?t:[]).filter(e=>!e.isPersonal&&!e.leftAt)}function P(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 r=(null!==(n=null==e?void 0:e.memberships)&&void 0!==n?n:[]).find(e=>e.tenantId===l&&!e.leftAt);return!r||r.isPersonal?null:l}function D(e,t){var n,l;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!==(l=null==r?void 0:r.role)&&void 0!==l?l:null}function E(){return u.env.NEXT_PUBLIC_HUNTER_MATE_SERVER_URL||""}function _(){return(0,s.Xc)()}},4025:function(e,t,n){"use strict";n.d(t,{k:function(){return c}});var l=n(33447),r=n(21260),a=n(28431),s=n(26416),i=n(67002),o=n(60529);async function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new Headers(t.headers);if(n.has("Content-Type")||n.set("Content-Type","application/json"),(0,l.K5)()){var c,u;let i=(0,r.xq)();i&&n.set("Authorization","HMJWT ".concat(i));let o=(0,a.MA)();null!==o&&n.set("x-hm-active-tenant",String(o));let d=(0,s._)(null!==(c=t.method)&&void 0!==c?c:"GET",e);if(null===d)throw new s.e(null!==(u=t.method)&&void 0!==u?u:"GET",e);return fetch("".concat((0,l.XJ)()).concat(d.path),{...t,headers:n,cache:"no-store"})}let d=(0,i.Xc)();return d&&n.set("Authorization","UTOKEN ".concat(d)),fetch("".concat(o.env.HUNTER_MATE_SERVER_URL||"").concat(e),{...t,headers:n})}},82182:function(e,t,n){"use strict";n.d(t,{H7:function(){return u},jr:function(){return s},mn:function(){return c},nk:function(){return o},qd:function(){return i}});let l=null,r=new Set;function a(){r.forEach(e=>e())}function s(e){l=e,a()}function i(){l&&(l=null,a())}function o(){return l}function c(e){return r.add(e),()=>r.delete(e)}function u(e){if(!e)return null;try{var t,n,l,r,a;let s=e.split(".")[1],i=JSON.parse(decodeURIComponent(escape(atob(s.replace(/-/g,"+").replace(/_/g,"/"))))),o=null!==(a=null!==(r=null!==(l=null==i?void 0:null===(t=i.data)||void 0===t?void 0:t._id)&&void 0!==l?l:null==i?void 0:null===(n=i.data)||void 0===n?void 0:n.id)&&void 0!==r?r:null==i?void 0:i.sub)&&void 0!==a?a:null;return"string"==typeof o?o:null}catch(e){return null}}},88801:function(e,t,n){"use strict";n.d(t,{hm:function(){return c},mJ:function(){return d},oU:function(){return u}});var l=n(60635);let r="hm-view-mode",a=new Set;function s(){return"bd"===window.localStorage.getItem(r)?"bd":"delivery"}function i(e){return a.add(e),()=>a.delete(e)}function o(e){"undefined"!=typeof document&&(document.documentElement.dataset.view=e)}function c(e){window.localStorage.setItem(r,e),o(e),a.forEach(e=>e())}function u(){o(s())}function d(e){let t=(0,l.useSyncExternalStore)(i,s,()=>"delivery");return null!=e?e:t}},20166:function(){},61115:function(){},50129:function(e){e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports}},function(e){e.O(0,[633,502,589,431,400,935,744],function(){return e(e.s=866)}),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
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]="
|
|
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]="c3175bb5-cd4a-41ed-957a-6385f5079be1",e._sentryDebugIdIdentifier="sentry-dbid-c3175bb5-cd4a-41ed-957a-6385f5079be1")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[626],{41442:function(e,t,n){Promise.resolve().then(n.bind(n,13221))},27473:function(e,t,n){"use strict";var r=n(38321);n.o(r,"useParams")&&n.d(t,{useParams:function(){return r.useParams}}),n.o(r,"usePathname")&&n.d(t,{usePathname:function(){return r.usePathname}}),n.o(r,"useRouter")&&n.d(t,{useRouter:function(){return r.useRouter}}),n.o(r,"useSearchParams")&&n.d(t,{useSearchParams:function(){return r.useSearchParams}}),n.o(r,"useServerInsertedHTML")&&n.d(t,{useServerInsertedHTML:function(){return r.useServerInsertedHTML}})},13221:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});var r=n(72835),s=n(60635),l=n(27473),a=n(71873),u=n(21260),i=n(33447);function c(){return(0,r.jsx)(s.Suspense,{fallback:(0,r.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,r.jsx)("span",{className:"hm-spinner","aria-label":"加载中"})}),children:(0,r.jsx)(o,{})})}function o(){let e=(0,l.useRouter)(),t=(0,l.useSearchParams)(),[n,c]=(0,s.useState)(null);return((0,s.useEffect)(()=>{if(!(0,i.K5)()){e.replace("/");return}c(null!==(0,u.xq)())},[e]),(0,s.useEffect)(()=>{if(n){let n=t.get("next");e.replace(n&&n.startsWith("/")?n:"/")}},[n,t,e]),(0,i.K5)()&&!1===n)?(0,r.jsx)("div",{className:"flex h-full items-center justify-center bg-gray-50",children:(0,r.jsxs)("div",{className:"w-80 rounded-2xl border border-gray-200 bg-white p-8 text-center shadow-sm",children:[(0,r.jsx)("div",{className:"mb-2 text-3xl",children:"\uD83E\uDD1D"}),(0,r.jsx)("div",{className:"mb-1 text-lg font-semibold text-gray-900",children:"HunterMate 云工作台"}),(0,r.jsx)("div",{className:"mb-4 text-xs text-gray-400",children:"登录后,随时随地访问你的协作数据"}),(0,r.jsx)(a.l,{onDone:()=>c(!0)})]})}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,r.jsx)("span",{className:"hm-spinner","aria-label":"加载中"})})}},71873:function(e,t,n){"use strict";n.d(t,{D:function(){return m},l:function(){return d}});var r=n(72835),s=n(60635),l=n(21260);let a="hm-cloud-login-draft",u="hm-cloud-login-resend-at",i="hm-cloud-last-email";function c(){let e={email:"",step:"email",code:""};try{let t=window.sessionStorage.getItem(a);if(!t)return e;let n=JSON.parse(t);return{email:"string"==typeof n.email?n.email:"",step:"code"===n.step?"code":"email",code:"string"==typeof n.code?n.code:""}}catch(t){return e}}function o(){try{var e;let t=Number(null!==(e=window.sessionStorage.getItem(u))&&void 0!==e?e:0);return Math.max(0,Math.ceil((t-Date.now())/1e3))}catch(e){return 0}}function d(e){let{onDone:t}=e,[n,d]=(0,s.useState)(c),[m,f]=(0,s.useState)(!1),[x,h]=(0,s.useState)(o),[g,b]=(0,s.useState)(null),[y,v]=(0,s.useState)(null),w=(0,s.useRef)(null),{email:p,step:j,code:N}=n;(0,s.useEffect)(()=>{if(!p){let e=function(){try{var e;return null!==(e=window.localStorage.getItem(i))&&void 0!==e?e:""}catch(e){return""}}();e&&S({email:e})}},[]),(0,s.useEffect)(()=>{if(!(x<=0)&&!w.current)return w.current=setInterval(()=>{h(e=>(e<=1&&w.current&&(clearInterval(w.current),w.current=null),Math.max(0,e-1)))},1e3),()=>{w.current&&clearInterval(w.current),w.current=null}},[x]);let S=e=>{d(t=>{let n={...t,...e};try{window.sessionStorage.setItem(a,JSON.stringify(n))}catch(e){}return n})},I=e=>{try{window.localStorage.setItem(i,e)}catch(e){}},C=()=>{try{window.sessionStorage.removeItem(a),window.sessionStorage.removeItem(u)}catch(e){}},_=()=>{try{window.sessionStorage.setItem(u,String(Date.now()+6e4))}catch(e){}h(60)},k=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,D=async()=>{let e=p.trim().toLowerCase();if(!k.test(e)){v("请输入有效邮箱");return}f(!0),v(null),b(null);let t=await fetch("/hunter-mate/auth/email/send-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})});if(f(!1),!t.ok){let e=await t.json().catch(()=>null);v((null==e?void 0:e.message)||"发送失败(HTTP ".concat(t.status,")"));return}I(e),S({email:e,step:"code"}),_(),b("验证码已发送,请查收邮件")},E=async()=>{if(!/^\d{6}$/.test(N.trim())){v("请输入 6 位数字验证码");return}f(!0),v(null);let e=await fetch("/hunter-mate/auth/email/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:p.trim().toLowerCase(),code:N.trim()})});if(f(!1),!e.ok){let t=await e.json().catch(()=>null);v((null==t?void 0:t.message)||"验证失败(HTTP ".concat(e.status,")"));return}let n=await e.json().catch(()=>null);if(!(null==n?void 0:n.access_token)){v("登录响应缺少凭证,请重试");return}I(p.trim().toLowerCase()),(0,l.VA)(n.access_token),C(),(0,l.notifyCloudTokenChanged)(),t()};return(0,r.jsxs)("div",{children:["email"===j?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("input",{type:"email",autoFocus:!0,value:p,onFocus:e=>e.target.select(),onChange:e=>S({email:e.target.value}),onBlur:e=>S({email:e.target.value.trim().toLowerCase()}),placeholder:"you@example.com",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-sm"}),(0,r.jsx)("button",{onClick:D,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"发送中…":"发送验证码"})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"mb-2 text-left text-xs text-gray-500",children:["验证码已发送至 ",p,",请查收邮件"]}),(0,r.jsx)("input",{type:"text",inputMode:"numeric",autoFocus:!0,maxLength:6,value:N,onChange:e=>S({code:e.target.value}),placeholder:"6 位验证码",className:"mb-3 w-full rounded-md border border-gray-300 px-3 py-2 text-center text-sm tracking-[0.5em]"}),(0,r.jsx)("button",{onClick:E,disabled:m,className:"w-full rounded-lg bg-blue-600 py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-50",children:m?"登录中…":"登录"}),(0,r.jsxs)("div",{className:"mt-3 flex items-center justify-between text-xs",children:[(0,r.jsx)("button",{onClick:()=>S({step:"email"}),className:"text-gray-400 hover:text-gray-600",children:"换个邮箱"}),(0,r.jsx)("button",{onClick:D,disabled:x>0||m,className:"text-blue-600 hover:text-blue-700 disabled:text-gray-300",children:x>0?"重新发送(".concat(x,"s)"):"重新发送"})]})]}),g&&(0,r.jsx)("div",{className:"mt-3 text-xs text-green-600",children:g}),y&&(0,r.jsx)("div",{className:"mt-3 text-xs text-red-500",children:y})]})}function m(e){let{children:t}=e,[n,a]=(0,s.useState)(null);return((0,s.useEffect)(()=>{let e=()=>a(null!==(0,l.xq)());return e(),(0,l.RB)(e)},[]),null===n)?(0,r.jsxs)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:[(0,r.jsx)("span",{className:"hm-spinner","aria-label":"加载中"}),(0,r.jsx)("div",{className:"mt-4 text-sm text-gray-400",children:"正在加载,请稍候…"})]}):n?(0,r.jsx)(r.Fragment,{children:t}):(0,r.jsx)("div",{className:"flex h-screen w-screen flex-col items-center justify-center bg-gray-50",children:(0,r.jsxs)("div",{className:"w-80 rounded-2xl border border-gray-200 bg-white p-8 text-center shadow-sm",children:[(0,r.jsx)("div",{className:"mb-2 text-3xl",children:"\uD83E\uDD1D"}),(0,r.jsx)("div",{className:"mb-1 text-lg font-semibold text-gray-900",children:"HunterMate 云工作台"}),(0,r.jsx)("div",{className:"mb-4 text-xs text-gray-400",children:"登录后,随时随地访问你的协作数据"}),(0,r.jsx)(d,{onDone:()=>a(!0)})]})})}},21260:function(e,t,n){"use strict";n.d(t,{OG:function(){return l},RB:function(){return d},VA:function(){return u},clearCloudToken:function(){return i},notifyCloudTokenChanged:function(){return o},xq:function(){return a}});let r="hm_jwt";function s(e){let t=e.split(".");if(3!==t.length)return null;try{return JSON.parse(atob(t[1].replace(/-/g,"+").replace(/_/g,"/")))}catch(e){return null}}function l(e){var t;let n=null===(t=s(e))||void 0===t?void 0:t.data;return{hmUserId:"string"==typeof(null==n?void 0:n._id)?n._id:null,email:"string"==typeof(null==n?void 0:n.email)?n.email:null}}function a(){try{let e=window.localStorage.getItem(r);if(!e)return null;let t=function(e){let t=s(e);return"number"==typeof(null==t?void 0:t.exp)?t.exp:null}(e);if(t&&1e3*t<=Date.now()+3e4)return window.localStorage.removeItem(r),null;return e}catch(e){return null}}function u(e){try{window.localStorage.setItem(r,e)}catch(e){}}function i(){try{window.localStorage.removeItem(r)}catch(e){}}let c=new Set;function o(){c.forEach(e=>e())}function d(e){return c.add(e),()=>{c.delete(e)}}},33447:function(e,t,n){"use strict";n.d(t,{K5:function(){return s},Qv:function(){return a},XJ:function(){return l}});var r=n(60529);function s(){return!1}function l(){return r.env.HUNTER_MATE_SERVER_URL||""}function a(){return"".concat("","/login")}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=41442)}),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
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]="
|
|
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]="bf855f93-cede-4028-a163-4e4ae541052d",e._sentryDebugIdIdentifier="sentry-dbid-bf855f93-cede-4028-a163-4e4ae541052d")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[744],{85746:function(){},47539:function(e,n,t){Promise.resolve().then(t.t.bind(t,76939,23)),Promise.resolve().then(t.t.bind(t,67360,23)),Promise.resolve().then(t.t.bind(t,62319,23)),Promise.resolve().then(t.t.bind(t,74268,23)),Promise.resolve().then(t.t.bind(t,90742,23)),Promise.resolve().then(t.t.bind(t,81050,23))},19531:function(e,n,t){"use strict";var r=t(60258),i=t(60529);globalThis._sentryRewritesTunnelPath=void 0,globalThis.SENTRY_RELEASE={id:"bfa7b0e9fa0486baf035fbeab87125fa892437d4"},globalThis._sentryBasePath=void 0,globalThis._sentryRewriteFramesAssetPrefixPath="";let s=i.env.NEXT_PUBLIC_HM_ERROR_TRACKING_DSN;"true"===i.env.NEXT_PUBLIC_HM_ERROR_TRACKING_ENABLED&&s&&r.S1({dsn:s,release:i.env.NEXT_PUBLIC_HM_RELEASE,environment:i.env.NEXT_PUBLIC_HM_ENVIRONMENT||"development",tracesSampleRate:0,sendClientReports:!1,beforeSend(e){var n;if(null===(n=e.request)||void 0===n?void 0:n.headers){let n=e.request.headers;n.authorization&&(n.authorization="***"),n.cookie&&(n.cookie="***")}return e}})}},function(e){var n=function(n){return e(e.s=n)};e.O(0,[400,935],function(){return n(19531),n(68063),n(47539)}),_N_E=e.O()}]);
|