PageSourceSearch

https://zhenchengoffer.com/assets/QuickResumeWorkbenchHeavy-yfJhs9xN.js

js zhenchengoffer.com collected 2026-10-02 01:54:14 UTC 246,809 bytes, 664 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quickResumeRoutingStack-DJMFF90y.js","assets/workbench-shared-DT5eicUP.js","assets/react-BGHvZxdX.js","assets/quickResumeDecisionComparison-DUsbAVXY.js","assets/quickResumeDecisionDimensionWeights-CJtVf-7e.js","assets/quickResumeDecisionDimensionMeta-CqRCwY33.js","assets/selfIntroScoreTargetedRewrite-BAbS6ALw.js","assets/selfIntroCardDisplay-Cn77roDC.js","assets/aiEngineProgress-BDK8wA_u.js","assets/quickResumeRoutingPlanLocal-T0IkCM2b.js","assets/QuickResumeStep1Body-C_lwmMJp.js","assets/ProfileMgmtSectionTabsBar-whwNNjQC.js","assets/QrMobileSplitFlip-BU5LhIQG.js","assets/profileMgmtMonoTheme-1lR1c8qN.js","assets/qrStepHostKeys-BKSLMEGR.js","assets/QuickResumeToolPage-hvxamCpU.js","assets/quickResumeTypeScale-BoJxjRsW.js","assets/PrepInputModalFooter-8f1FbGsi.js","assets/PrepSourceCard--1zU7rwO.js","assets/inputPanelTheme-C4U4NqqL.js","assets/PageBanner-CJoqfxaO.js","assets/WorkbenchApp-CJyShsB2.js","assets/index-hkmirror2.js","assets/index-ufWW_WUE.css","assets/WorkbenchApp-CN-Y3-JI.css","assets/reset-BDNOyzxu.css","assets/PageTutorialToggle-BqyeQSnF.js","assets/jdBoardTheme-DFysMQIA.js","assets/glacierThemeColors-C4T_pxim.js","assets/discoveryChannelUtils-CfkIjWg2.js","assets/platformLogos-ClErIF11.js","assets/quickResumeProfileTabs-DLiHUPM8.js","assets/profileArchiveEmbedProps-dYMViSus.js","assets/ProfileArchiveReportContext-CErZwouw.js","assets/archiveBulkSelect-zQhVzkGD.js","assets/index-CCjgVym0.js","assets/quickResumeDecisionReport-C38JHf_j.js","assets/quickResumeDecisionTabCard-B9m_96Zz.js","assets/jobIntentActionCardFallback-QcIM0kzR.js","assets/educationScoreTargetedRewrite-1aF7blYf.js","assets/quickResumeDecisionRuntimeLazy-dPOJalsl.js","assets/yieldToNextPaint-D2aGJ5eA.js","assets/demoQuickResumeShowcaseMeta-CCYMF3ds.js","assets/quickResumeDemoExtract-7RLnH5kA.js","assets/quickResumeOverallAnalysisGate-bw8WtO4g.js","assets/quickResumeStageThreeLight-DKCIJCqX.js","assets/promptSwitchToAccountMode-BfdWY4Z3.js","assets/PortfolioGlacierModal-CDt-rUUG.js","assets/QuickResumeStep0Body-uteiy0io.js","assets/QuickResumeStep2Body-BLInsSji.js","assets/SectionExplainHint-BgW_MTrv.js","assets/exportPdf-CqNcnOTq.js","assets/ResumeTemplate-BaSYJdAB.js","assets/ResumeTemplate-CWxZ23WT.css","assets/ResumeTemplate-dxufR599.js","assets/resumeExperienceSections-DttCzG6j.js","assets/ResumeEmbeddedHit-SahfrUXp.js","assets/resumeEmbeddedHits-0XSFbwNE.js","assets/ExpectedSalaryPanel-CLihBkya.js","assets/jobIntentPanelShared-BbCQQ58T.js","assets/assetActionCardTones-LVQfiyOM.js","assets/ProfileDataCard-DL0d07X9.js","assets/ProfileArchiveSectionDeleteBtn-Dj9FrpSI.js","assets/RichTextEditor-slhb2TYT.js","assets/ProfileAiPolishControls-ge22EEt3.js","assets/mobileModalHost-zPZ6YgSa.js","assets/archiveTableEllipsis-CTj3AzoM.js","assets/ProfileArchiveNodataState-CRnuUFEd.js","assets/profileArchiveFieldPolish-ChVYOyu8.js","assets/profileCardDimensionRubricGuide-CZ0vErMB.js","assets/quickResumeScoringConfigStorage-BNoXU7Px.js","assets/quickResumeScoringRules-CqW22O_k.js","assets/PersonalArchiveLibraryModule-BzH_2v1t.js","assets/ProfileMgmtEntryCard-DExbxrne.js","assets/ProfileArchiveTabBody-BccEwdJc.js","assets/profileMgmtMono-NCKEK7uD.css","assets/demoQuickResumeShowcase-PfBsrRkM.js","assets/demoQuickResumeGrowthOpsJd-DtHfRQUE.js","assets/ResumeLibraryPage-XT37F_qb.js","assets/ResumeA4Content-C04H0eb2.js","assets/pdfDocumentCache-C7fMqzBg.js","assets/PdfViewer-wu90SOis.js","assets/PdfViewer-CBXYWCWZ.css","assets/AiParseResultViews-AxdLDpU1.js","assets/dict-CjK0zVzE.js","assets/PersonalInfo-EMLYxMya.js","assets/ProfileCardLinkBadges-CYJJCyJL.js","assets/index-DSi_yZ-h.js","assets/demoQuickPortfolioShowcase-B4vKbS-A.js","assets/websiteLayout-0PfeSYth.js","assets/portfolioLinkResolver-kjWU4NEk.js","assets/portfolioAssetThumbnail-BTlvYhce.js","assets/index-Blo1azGd.js","assets/index-BQbAbEPf.js","assets/jdPrepResumePdfPreview-C_yANH_h.js","assets/websitePortfolioContent-Ow03Kc7l.js","assets/PortfolioAssetPreviewHost-Bib33M3q.js","assets/PrepPortfolioMindmapPreview-CP3m4HR9.js","assets/PrepPortfolioMindmapPreview-DqLDtADk.css","assets/portfolioAssetVisuals-S6aIEk8m.js","assets/portfolioChatGenerate-DRnEdugi.js","assets/PortfolioAssetStackPreview-ClI24nJ7.js","assets/PortfolioSelectedVersionPreviewGrid-DESPPQ7I.js","assets/assetPrepCardApi-Dk0MfgP2.js","assets/prepCardBridge-CCCxSI5Z.js","assets/abcdPrepCatalog-CAneVTDN.js","assets/PrepCardListItem-B_q7bBeq.js","assets/prepMaterialBasket-BKWYbz8c.js","assets/PrepCardFourPartView-BGGozpiS.js","assets/SkillsPage-CXxKAR1X.js","assets/knowledgeSkillSuggestionDedupe-DWlweSUi.js","assets/quill-Bf4bJ6eu.css","assets/EducationPage-BIEsDhvO.js","assets/index-Baypq_No.js","assets/isArrayLikeObject-xW62fCZI.js","assets/merge-D2Oxqw0p.js","assets/QuickResumeDecisionReportPanel-CVd8H-r1.js","assets/quickResumeDecisionTheme-B9FZV9MN.js","assets/assemblyFlickerDebug-CjQ4sCsO.js","assets/StableModuleTabBar-CCm_iC66.js","assets/decisionNoteGuidedRewrite-DHlrWmIs.js"])))=>i.map(i=>d[i]);
2import{_ as rt,cA as bl,s as z,a0 as Qe,q as Wt,ai as Os,S as Mo,M as hl,h as yl,B as ln,U as Rl,bS as Sl,r as Do,cl as kl,bT as wl,l as Lo,cw as Il,cr as Tl,R as xl,b as El,b4 as Cl,b3 as Al,aD as vl,j as jl,de as Pl}
2from"./workbench-shared-DT5eicUP.js";import{r as o,j as k,R as G}from"./react-BGHvZxdX.js";import{R as ql,A as _l,Q as Nl,S as Bs,N as Ml,E as Dl,P as Ll,a as Jl,C as Ol,L as $l,b as Ql,J as pa,I as fa,c as ga,d as ba}from"./QuickResumeStep1Body-C_lwmMJp.js";import{k as Us,w as Bl,l as _i,m as Zr,n as Ul,s as Gt,o as As,p as Fl,q as zl,r as Hl,u as Kl,h as vs,t as Wl,v as js,x as Ps,y as Qr,z as Gl,A as We,B as Vl,j as qs,i as _s,g as vi,C as Yl,D as Xl,E as Hr,F as Zl,G as eu,H as ji,I as tu,J as nu,K as ru,L as Jo,M as iu,N as su,O as ou,P as Oo,R as au,S as cu,b as lu,c as $o,T as Qo,U as uu,V as Ns,W as du,X as mu,Y as pu}from"./QuickResumeToolPage-hvxamCpU.js";import{l as fu,n as gu,s as bu}from"./quickResumeDecisionDimensionWeights-CJtVf-7e.js";import{getQuickResumeDecisionRuntime as B,hasQuickResumeDecisionRuntime as hu,preloadQuickResumeDecisionRuntime as Bo}from"./quickResumeDecisionRuntimeLazy-dPOJalsl.js";import{r as Ni,c as yu}from"./selfIntroScoreTargetedRewrite-BAbS6ALw.js";import{s as Uo,y as $s,u as Ru,f as Su,R as ku}from"./yieldToNextPaint-D2aGJ5eA.js";import{r as Fs,b as $t,a as Wr,i as vn,c as Fo,D as zo,e as Br}from"./demoQuickResumeShowcaseMeta-CCYMF3ds.js";import{a as wu,c as Iu,d as Tu,e as xu,i as Eu,b as Cu}from"./quickResumeDemoExtract-7RLnH5kA.js";import{c as Au}from"./archiveBulkSelect-zQhVzkGD.js";import{a as Ho,s as vu}from"./quickResumeOverallAnalysisGate-bw8WtO4g.js";import{b as ju,g as un,c as Pu}from"./quickResumeStageThreeLight-DKCIJCqX.js";import{guardAccountModeAction as Ko}from"./promptSwitchToAccountMode-BfdWY4Z3.js";import{i as Wo,P as Go,R as qu,Q as Vo,j as Yo,U as _u}from"./WorkbenchApp-CJyShsB2.js";import{Q as Nu,a as Mu}from"./QuickResumeStep0Body-uteiy0io.js";import{f as Du,g as Lu}from"./qrStepHostKeys-BKSLMEGR.js";import{s as Ju}from"./index-hkmirror2.js";import{D as Ou,Q as $u}from"./QuickResumeStep2Body-BLInsSji.js";import{P as dn}from"./profileMgmtMonoTheme-1lR1c8qN.js";import"./ResumeTemplate-BaSYJdAB.js";import{P as jn}from"./profileArchiveEmbedProps-dYMViSus.js";import{E as ha,a as ya}from"./ExpectedSalaryPanel-CLihBkya.js";import{Q as qt}from"./quickResumeTypeScale-BoJxjRsW.js";import{l as Qu}from"./quickResumeScoringConfigStorage-BNoXU7Px.js";import{h as Bu,p as Xo,g as Zo}from"./quickResumeDecisionTabCard-B9m_96Zz.js";import{S as Uu}from"./SectionExplainHint-BgW_MTrv.js";function Vt(t){return Array.isArray(t)?t.filter(i=>!!i&&typeof i=="object"):[]}function Hn(t){return!t||!Array.isArray(t.requirements)?t:{...t,requirements:t.requirements.map(i=>({...i,targetMappings:Vt(i?.targetMappings)}))}}let br=null,Ms=null;function Mi(){return br?Promise.resolve(br):(Ms||(Ms=rt(()=>import("./quickResumeRoutingStack-DJMFF90y.js").then(t=>t.q),__vite__mapDeps([0,1,2,3,4,5,6,7,8])).then(t=>(br=t,t))),Ms)}function Fu(){const t=()=>[],i=A=>A,h=()=>({}),w=A=>A||null,g=()=>"",T=(A,C)=>Vt(C);return{parseAiReportMarkdown:()=>null,rebuildSectionsFromModulePlans:()=>[],QUICK_RESUME_JD_ROUTING_MAX_ATTEMPTS:3,QUICK_RESUME_JD_ROUTING_STREAM_TIMEOUT_MS:12e4,requestJdRoutingPlanWithRetry:async()=>{throw new Error("routing stack not ready")},applyFinalRoutingPlanRepairs:w,enforceRoutingPlanRequirementRepairs:w,repairRoutingPlanJdSourceMap:w,getJdEchoStandardReason:()=>"",getRoutingStandardMirroredReason:()=>"",finalizeKnowledgeTargetMappings:T,getExpectedKnowledgeSubTab:g,getKnowledgeSubTabConsistencyReason:()=>"",getRoutingEvidenceConsistencyReason:()=>"",normalizeKnowledgeTargetMappings:T,buildSharedRoutingJdSourceRows:t,buildSharedRoutingJdSourceTextMap:()=>new Map,buildJobIntentSourceIdLookupBySubTab:h,buildRoutingSourceIdLookupBySubTab:h,buildRoutingSourceIdLookupMap:h,deriveBaselineDisplaySourceId:g,finalizeJobIntentRoutingRequirements:i,resolveCanonicalJobIntentSourceId:g,formatRoutingRequirementJdEntry:g,getSharedRoutingPlanJdSourceRows:t,getSharedRoutingPlanValidationErrors:t,parseSharedRoutingPlanFromMarkdownTable:()=>null,getSharedDuplicateJdSourceRows:t,getSharedMissingJdSourceCoverageSegments:t,getSharedUnfaithfulJdSourceRows:t,isSharedRoutingPlanJdSourceMapFaithful:()=>!0,normalizeSharedJdSourceFidelityText:g,applyRoutingPlanDeterministicRecovery:w,expandKnowledgeSkillRequirementsFromJdEvidence:w,finalizeKnowledgeSkillRoutingRequirements:i,getKnowledgeSkillGranularityValidationErrors:t,reconcileRoutingPlanForHcpValidation:w,buildNormalizedPlanTableRows:t,normalizeModulePlan:i,syncKnowledgeSkillNormalizedPlan:i,applyWorkExperienceJdMirrorToModulePlan:i,calibrateWorkExperienceOverviewRows:i,getWorkExperienceMirrorSourceRows:t,shouldInjectWorkExperienceProfileBaseline:()=>!1,stripRedundantWorkExperienceProfileBaseline:i,buildKnowledgeSkillFallbackActionCard:()=>null,buildPersonalInfoFallbackActionCard:()=>null,getHighestEducationDegreeFromProfile:g,PERSONAL_INFO_DETAIL_CARD_IDS:{birthDate:"",gender:"",startWorkYear:"",politicalStatus:"",degree:"",nationality:""},resolveScalarProfileValue:g,formatStartWorkYearOverviewLabel:g,buildPersonalInfoDisplayCards:t,ensurePersonalInfoBaselineRows:i,filterPersonalInfoDisplayCards:t,normalizeExtractedBasicInfoOnly:i,buildAiEngineToastContent:()=>null,flattenAiEngineRetryHistory:t,buildJdIdCentricMappingRows:t,buildRoutingTabBucketStats:t,getRoutingSupplementReasonLabel:g,resolveRoutingDisplayBucket:g,resolveWorkExperienceParentName:g}}function Y(){return br||(Mi(),Fu())}function zu(){return br!=null}let hr=null,Ds=null;function ei(){return hr?Promise.resolve(hr):(Ds||(Ds=rt(()=>import("./quickResumeRoutingPlanLocal-T0IkCM2b.js"),__vite__mapDeps([9,1,2,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,4,5,3,6,7,39,40,41,8,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71])).then(t=>(hr=t,t))),Ds)}const Hu=new Set(["normalizeRoutingMappingsByDeterministicGuards","withImpliedIndustryRoutingRequirements","enforceRoutingMappingCardinality","withStableRoutingSourceIds","ensureUniqueRoutingRequirementIds","dedupeRoutingRequirements"]);function Ku(){const t=()=>
2[],i=A=>A,h=()=>"",w=A=>Array.isArray(A)?A:[],g=A=>A?Hn(A):null,T=(A,C)=>Vt(C);return new Proxy({},{get(A,C){return C==="normalizeJobRequirementRoutingPlan"?g:C==="normalizeRoutingMappingsByDeterministicGuards"?T:C==="withImpliedIndustryRoutingRequirements"||C==="enforceRoutingMappingCardinality"?w:C==="buildRoutingJdSourceTextMap"?()=>new Map:C==="buildRoutingJdSourceRows"?t:C==="ROUTING_SUB_TAB_ORDER"?{个人信息:[],知识技能:[],工作经验:["无"],教育经历:["教育经历"],自我介绍:["自我介绍"],求职意向:[]}:typeof C=="string"&&/^[A-Z0-9_]+$/.test(C)?C.endsWith("_ORDER")||C.endsWith("_TABS")||C.endsWith("_LIST")?[]:{}:typeof C=="string"&&C.startsWith("is")?()=>!1:typeof C=="string"&&Hu.has(C)?w:typeof C=="string"&&(C.startsWith("get")||C.startsWith("build")||C.startsWith("normalize")||C.startsWith("format")||C.startsWith("parse")||C.startsWith("resolve")||C.startsWith("with")||C.startsWith("enforce")||C.startsWith("routing"))?C.startsWith("normalize")&&C.includes("Mapping")?T:h:i}})}function he(){return hr||(ei(),Ku())}function Ra(){return hr!=null}const En={__emptyAccountSession:!0};function Wu(){return{demo:null,account:null}}function zs(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Hs(t,i){try{sessionStorage.setItem(t,i)}catch{}}function Ks(t){try{sessionStorage.removeItem(t)}catch{}}function Gr(){try{return zs(sessionStorage.getItem(Us))}catch{return null}}function An(t,i){if(t)try{Hs(Us,JSON.stringify(t)),Bl({step:i?.step??t.currentStep,hasExtract:i?.hasExtract??!!t.aiExtractedData})}catch{}}function Sa(){try{return zs(sessionStorage.getItem(_i))}catch{return null}}function pr(t){if(t==null){Ks(_i);return}Hs(_i,JSON.stringify(t))}function Gu(){try{return zs(sessionStorage.getItem(Zr))}catch{return null}}function Cn(t){if(t==null){Ks(Zr);return}Hs(Zr,JSON.stringify(t))}function Yt(){Ks(Zr)}function Vu(){const t=()=>Ul();typeof window<"u"&&"requestIdleCallback"in window?window.requestIdleCallback(()=>t(),{timeout:800}):typeof window<"u"?window.setTimeout(t,0):t()}const fr=["个人信息","知识技能","工作经验","教育经历","自我介绍","求职意向"],ea=[...fr,"不进入档案资产"],Ws="quickResume",Di="quickResumeDraft",Pi={personalInfo:"个人信息",skills:"知识技能",experience:"工作经验",education:"教育经历",selfIntro:"自我介绍",jobIntent:"求职意向"},Yu={个人信息:"姓名",工作经验:"无",教育经历:"教育经历",自我介绍:"自我介绍",求职意向:"意向职位"},Xu={personalInfo:"个人信息",skills:"知识技能",experience:"工作经验",education:"教育经历",selfIntro:"自我介绍",jobIntent:"求职意向"},ka=["北京","上海","深圳","广州","杭州","成都","南京","苏州","武汉","西安","重庆","天津","厦门","长沙","合肥","青岛","宁波","香港","新加坡","远程","混合办公","不限城市","全国"],Zu=t=>{const i=String(t||"");return Array.from(new Set(ka.filter(h=>i.includes(h))))},ed={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"},td=t=>t.replace(/&#(\d+);/g,(i,h)=>String.fromCharCode(Number(h))).replace(/&#x([0-9a-f]+);/gi,(i,h)=>String.fromCharCode(parseInt(h,16))).replace(/&([a-z]+);/gi,(i,h)=>ed[h.toLowerCase()]??i),yr=t=>{const i=String(t||"");if(!i.trim())return"";const h=td(i).replace(/<script[^>]*>[\s\S]*?<\/script>/gi,`
3`).replace(/<style[^>]*>[\s\S]*?<\/style>/gi,`
4`).replace(/<br\s*\/?>/gi,`
5`).replace(/<\/(p|div|li|tr|h[1-6]|section|article)>/gi,`
6`).replace(/<[^>]*>/g," ").replace(/\u00a0/g," ").replace(/[ \t]+/g," ").replace(/\n[ \t]+/g,`
7`).trim(),w=new Set;return h.split(/\r?\n+/).map(g=>g.trim()).filter(Boolean).filter(g=>{const T=g.replace(/\s+/g,"");return!T||w.has(T)?!1:(w.add(T),!0)}).join(`
8`)},wa=(t,i)=>{if(!i||!Array.isArray(t?.requirements))return[];const h=Xu[i]||i;return t.requirements.filter(w=>Vt(w?.targetMappings).some(g=>g?.mainTab===h||g?.mainTab===i||String(g?.mainTab||"").includes(h))).map(w=>w.requirementId).filter(Boolean)},Xt=t=>yr(t).slice(0,240),ti=(t,i)=>{if(!t?.requirements?.length)return!1;const h=Xt(i);if(!h)return!1;const w=Xt(t.originalJdText||t.jdFingerprint||"");return w?w!==h:!0},Ia=(t,i)=>{if(!t?.requirements?.length)return t;const h=Xt(i);return Hn({...t,sourceMode:Ws,jdFingerprint:h,originalJdText:t.originalJdText||i})},Li=t=>!!t?.draftRouting||t?.sourceMode===Di,Pn=(t,i)=>{if(!t?.requirements?.length||Li(t)||t.sourceMode!==Ws)return!1;const h=Xt(i);if(!h)return!1;const w=Xt(t.jdFingerprint||t.originalJdText||"");return!!(w&&w===h)},mn=(t,i,h,w,g)=>({requirementId:t,sourceText:w,sourceEvidence:[w],sourceType:"jd_explicit",standardRequirement:g||`候选人应具备:${w}`,priority:"中",targetMappings:[{mainTab:i,subTab:h,reason:"L1 draft routing plan"}],excludedReason:""}),nd=(t,i)=>{const h=Pi[i]||i||"知识技能",w=yr(t).split(`
9`).map(A=>A.trim()).filter(A=>A.length>=6).slice(0,6);let g=[];if(h==="知识技能")g=w.map((A,C)=>{const N=bl({text:A});return mn(`JD-${String(C+1).padStart(2,"0")}`,h,N,A)}),g.length||(g=[mn("JD-01","知识技能","岗位核心技能",String(t||"").trim().slice(0,200)||"JD未明确","候选人应具备目标岗位所需的核心专业能力。")]);else if(h==="教育经历")g=[mn("REQ-EDU-001","教育经历","教育经历","候选人应提供可核验的教育背景、学历层次与专业背景。","候选人应提供可核验的教育背景,用于判断学历层次、专业背景与岗位要求的匹配度。")];else if(h==="工作经验")g=[mn("REQ-EXP-001","工作经验","无","候选人应提供可验证的工作经历、项目职责与成果。","候选人应提供可验证的工作经历、项目职责与成果,以支撑岗位胜任力判断。"),...w.slice(0,3).map((A,C)=>mn(`JD-EXP-${String(C+1).padStart(2,"0")}`,"工作经验","无",A,`结合岗位要求沉淀可验证的工作经历证据:${A}`))];else if(h==="自我介绍")g=[mn("REQ-SELF-001","自我介绍","自我介绍","候选人应提供面向当前岗位的自我介绍。","候选人应提供面向当前岗位的自我介绍,概括职业定位、核心优势、经验亮点与求职动机。")];else if(h==="求职意向")g=[mn("REQ-INTENT-001","求职意向","意向职位&期望薪资","候选人应提供明确的目标岗位与期望薪资。","候选人应提供明确的目标岗位与期望薪资,用于判断岗位方向和薪酬区间匹配度。")];else{const A=Yu[h]||"无";g=w.length?w.map((C,N)=>mn(`JD-${String(N+1).padStart(2,"0")}`,h,A,C)):[mn("JD-01",h,A,String(t||"").trim().slice(0,200)||"JD未明确")]}return{...Qt({schemaVersion:"job-requirement-routing/v1",sourceMode:Di,jdFingerprint:Xt(t),originalJdText:t,draftRouting:!0,requirements:g},t),sourceMode:Di,draftRouting:!0}},rd=(t,i)=>{if(!Array.isArray(t?.requirements)||t.requirements.length===0)return!1;const h=Object.entries(Pi).find(([,g])=>g===i)?.[0]||(Pi[i]?i:"")||i,w=Pi[h]||i;return w==="教育经历"?t.requirements.some(g=>{if(!Vt(g?.targetMappings).some(N=>N?.mainTab==="教育经历"||String(N?.mainTab||"").includes("教育经历")))return!1;const C=[g?.sourceText,g?.standardRequirement,...Array.isArray(g?.sourceEvidence)?g.s
9ourceEvidence:[]].join(" ");return/本科|硕士|博士|学历|学位|学校|院校|课程|GPA|绩点|毕业|教育背景|教育经历|academic|education|bachelor|master|phd|degree|university|college|专业|major/i.test(C)}):w==="工作经验"?t.requirements.some(g=>{const T=String(g?.requirementId||"").trim().toUpperCase(),A=String(g?.assetRole||"").trim(),C=Vt(g?.targetMappings);if(!C.some(M=>M?.mainTab==="工作经验"||String(M?.mainTab||"").includes("工作经验")))return!1;if(/^REQ-EXP-\d+/.test(T)||/^JD-EXP-/.test(T)||A==="experience_evidence")return!0;if(A==="capability"||/^REQ-SKILL-/.test(T)||(/^JD-\d+$/.test(T)||/^REQ-\d+$/.test(T))&&C.some(ce=>ce?.mainTab==="知识技能"||String(ce?.mainTab||"").includes("知识技能")))return!1;const _=[g?.sourceText,g?.standardRequirement,...Array.isArray(g?.sourceEvidence)?g.sourceEvidence:[]].join(" ");return/工作经历|项目职责|履历证据|公司\/项目|年.*经验|工作经验|项目经验|相关经验/.test(_)}):wa(t,h).length>0},id=(t,i,h)=>{if(rd(t,h))return t;const w=nd(i,h);if(!Array.isArray(t?.requirements)||t.requirements.length===0)return w;const g=new Set(t.requirements.map(_=>String(_?.requirementId||"").trim()).filter(Boolean)),T=(w.requirements||[]).filter(_=>{const M=String(_?.requirementId||"").trim();return M&&!g.has(M)});if(!T.length)return t;const A={...t,requirements:[...t.requirements,...T]},C=Li(t)||!Pn(t,i),N=Qt(A,i);return C?{...N,sourceMode:Di,draftRouting:!0}:N},Ge=t=>{const i=String(t||""),h=N=>{for(const _ of N){const M=i.match(_);if(M?.[1]?.trim())return M[1].trim()}return""},w=B().sanitizeSelfIntroJobTitle(h([/(?:岗位|职位|招聘岗位|招聘职位|职位名称|岗位名称|Title|Position|Role)[::\s]+([^\n,。;;]{2,80})/i,/^([^\n,。;;]{2,40}(?:产品经理|运营|工程师|分析师|设计师|项目经理|经理|专家|负责人|BD))[^\n]*$/m])),g=h([/(?:工作地点|办公地点|地点|城市|base|Location)[::\s]+([^\n,。;;]{2,60})/i])||Zu(i).join(" / "),T=h([/(?:薪资|薪酬|薪水|预算|Salary|Compensation)[::\s]+([^\n,。;;]{2,60})/i])||i.match(/(?:\$|¥)?\d+\s*[kKwW万]?\s*[-~-—]\s*(?:\$|¥)?\d+\s*[kKwW万]?(?:\s*\/\s*(?:month|月))?/i)?.[0]||"",A=h([/(?:工作性质|岗位性质|性质|工作类型|jobType|Job Type)[::\s]+([^\n,。;;]{2,40})/i])||(/全职/i.test(i)?"全职":/兼职/i.test(i)?"兼职":/实习/i.test(i)?"实习":""),C=Ni({jdText:i});return{jobTitle:w,location:g,salary:T,jobType:A,companyName:C}},Ta=(t,i="")=>{if(!t?.requirements?.length)return t||null;const h=Ge(i),w={...t?.jdMeta,...h,companyName:t?.jdMeta?.companyName||h.companyName};return he().normalizeJobRequirementRoutingPlan({...t,jdMeta:w,requirements:t.requirements})},Qt=(t,i)=>Ia(Ta(he().normalizeJobRequirementRoutingPlan(Hn(t),i),i),i),Ne=(t,i)=>{if(!t?.requirements?.length||!String(i||"").trim()||Li(t))return null;const h=Qt(t,i);return Pn(h,i)?h:null},sd=(t,i)=>{const h=wa(t,i);if(!h.length)return;const w=new Set((t?.requirements||[]).map(T=>String(T?.requirementId||"").trim()).filter(Boolean)),g=h.filter(T=>w.has(T));return g.length?g:void 0},ta=t=>{const i=Array.isArray(t?.targetMappings)?t.targetMappings:[];return i.length===0?{mainRank:fr.length+1,subRank:0}:i.reduce((h,w)=>{const g=fr.indexOf(w.mainTab),T=g>=0?g:fr.length,A=he().normalizeRoutingSubTab(w.mainTab,w.subTab,he().getRoutingRequirementText(t)),C=he().ROUTING_SUB_TAB_ORDER[w.mainTab]||[],N=C.indexOf(A),_=N>=0?N:C.length;return T<h.mainRank?{mainRank:T,subRank:_}:T===h.mainRank&&_<h.subRank?{mainRank:T,subRank:_}:h},{mainRank:fr.length,subRank:Number.MAX_SAFE_INTEGER})},od=(t=[])=>[...t].sort((i,h)=>{const w=ta(i),g=ta(h),T=w.mainRank-g.mainRank;if(T!==0)return T;const A=w.subRank-g.subRank;return A!==0?A:String(i?.requirementId||"").localeCompare(String(h?.requirementId||""),"zh-CN",{numeric:!0})});function ad(t,i){if(!t?.aiExtractedData)return"";i.setAiExtractedData(t.aiExtractedData),t.uploadedResumeName&&i.setUploadedResumeName(t.uploadedResumeName);const h=Gt(t.previewUrl)||Gt(t.currentParseSession?.filePath);if(h&&i.setPreviewUrl(h),t.schemaVersion===i.snapshotVersion){t.selectedSkillIds&&i.setSelectedSkillIds(t.selectedSkillIds),t.selectedExpIds&&i.setSelectedExpIds(t.selectedExpIds),t.selectedEduIds&&i.setSelectedEduIds(t.selectedEduIds),t.selectedNameIds&&i.setSelectedNameIds(t.selectedNameIds),t.selectedEmailIds&&i.setSelectedEmailIds(t.selectedEmailIds),t.selectedPhoneIds&&i.setSelectedPhoneIds(t.selectedPhoneIds),t.selectedPhotoId!==void 0&&i.setSelectedPhotoId(t.selectedPhotoId),t.selectedCityIds&&i.setSelectedCityIds(t.selectedCityIds),t.selectedLinkIds&&i.setSelectedLinkIds(t.selectedLinkIds),t.selectedSelfIntroIds&&i.setSelectedSelfIntroIds(t.selectedSelfIntroIds),t.selectedJobIntentIds&&i.setSelectedJobIntentIds(t.selectedJobIntentIds),t.selectedJobStatusIds&&i.setSelectedJobStatusIds(t.selectedJobStatusIds),t.selectedIntendedCityIds&&i.setSelectedIntendedCityIds(t.selectedIntendedCityIds),t.selectedIntendedJobTypeIds&&i.setSelectedIntendedJobTypeIds(t.selectedIntendedJobTypeIds),(t.selectedNameIds?.length||t.selectedEmailIds?.length)&&(i.personalInfoSelectionInitRef.current=!0);const W=!!(t.selectedNameIds?.length||t.selectedEmailIds?.length||t.selectedPhoneIds?.length||t.selectedPhotoId!=null||t.selectedCityIds?.length||t.selectedLinkIds?.length||t.selectedSkillIds?.length||t.selectedExpIds?.length||t.selectedEduIds?.length||t.selectedSelfIntroIds?.length||t.selectedJobIntentIds?.length||t.selectedJobStatusIds?.length||t.selectedIntendedCityIds?.length||t.selectedIntendedJobTypeIds?.length);i.extractSelectionSeedRef.current=W?String(t.currentParseSession?.id||"extract"):""}else i.setSelectedSkillIds([]),i.setSelectedExpIds([]),i.setSelectedEduIds([]),i.setSelectedNameIds([]),i.setSelectedEmailIds([]),i.setSelectedPhoneIds([]),i.setSelectedPhotoId(null),i.setSelectedCityIds([]),i.setSelectedLinkIds([]),i.setSelectedSelfIntroIds([]),i.setSelectedJobIntentIds([]),i.setSelectedJobStatusIds([]),i.setSelectedIntendedCityIds([]),i.setSelectedIntendedJobTypeIds([]),i.personalInfoSelectionInitRef.current=!1,i.extractSelectionSeedRef.current="";if(t.aiSuggestions&&i.setAiSuggestions(t.aiSuggestions),t.currentParseSession&&i.setCurrentParseSession(t.currentParseSession),t.currentStep!==void 0&&i.setCurrentStep(i.normalizeStep(t.currentStep,0)),t.activeTab&&i.setActiveTab(i.normalizeActiveTab(t.activeTab)),i.setShowLibrary(!1),t.selectedLibraryResumeName&&i.setSelectedLibraryResumeName(t.selectedLibraryResumeName),t.selectedLibraryResumeId!=null||t.selectedLibraryResumeName)try{const W=Fs();(Number(t.selectedLibraryResumeId)===W.id||t.selectedLibraryResumeName===W.resumeName)&&(i.setSelectedLibraryResume(W),i.setSelectedLibraryResumeName(W.resumeName))}catch{}t.resumeLayoutConfig&&typeof t.resumeLayoutConfig=="object"&&i.setResumeLayoutConfig({...i.defaultResumeLayout,...t.resumeLayoutConfig}),Array.isArray(t.resumeSections)&&t.resumeSections.length>0&&i.setResumeSections(t.resumeSections);const g=t.jdState,T=String(g?.localJdText||t.originalJdText||"").trim();T&&i.setLocalJdText(T);const A=Xt(yr(T)),C=String(t.analysisJdFingerprint||"").trim(),N=t.tabReports&&typeof t.tabReports=="object"?t.tabReports:{};g?.isExtracted&&i.setIsExtracted(!0),g?.inputMode&&i.setInputMode(g.inputMode),g?.urlInput&&i.setUrlInput(g.urlInput),g?.screenshotPreviews?.length&&i.setScreenshots(g.screenshotPreviews.map(W=>({file:null,preview:W})));const _=g?.jobRequirementRoutingPlan||t.jobRequirementRoutingPlan,M=!!(t.__demoQuickResumeShowcaseRestore||$t(t));let ce=null;if(_?.requirements?.length&&!ti(_,T)){const W=Qt(_,T);i.getRoutingPlanValidationErrors(W,T).length===0&&Pn(W,T)?ce=W:M&&
9(ce=Ia(Hn(_),T))}const be=!!(M||A&&C&&ce&&C===A);return be&&Object.keys(N).length?i.setTabReports(N):Object.keys(N).length&&i.setTabReports({}),be&&((t.leftReportView==="overall"||t.leftReportView==="sectional")&&i.setLeftReportView(t.leftReportView),t.overallAnalysisResult&&typeof t.overallAnalysisResult=="object"&&(i.setOverallAnalysisResult(t.overallAnalysisResult),i.setOverallAnalysisStale(!1),i.setOverallAnalysisError(null)),typeof t.overallAnalysisFingerprint=="string"&&(i.overallAnalysisFingerprintRef.current=t.overallAnalysisFingerprint),Array.isArray(t.adoptedSectionKeys)&&i.setAdoptedSectionKeys(new Set(t.adoptedSectionKeys.map(W=>String(W)))),Array.isArray(t.adoptedItemKeys)&&i.setAdoptedItemKeys(new Set(t.adoptedItemKeys.map(W=>String(W)))),t.adoptedCardsBySection&&typeof t.adoptedCardsBySection=="object"&&i.setAdoptedCardsBySection(t.adoptedCardsBySection)),ce?(i.setJobRequirementRoutingPlan(ce),i.setRoutingPlanStatus("ready"),i.setRoutingTabFilter("全部"),i.setRoutingPlanErrorDetails([])):_?.requirements?.length&&!M&&(i.setJobRequirementRoutingPlan(null),i.setRoutingPlanStatus("idle"),i.setRoutingPlanErrorDetails([]),i.setTabReports({}),Yt()),g?.localJdText||""}function na(t){try{const i=Gr();i&&(i.tabReports={},i.aiSuggestions=null,i.jobRequirementRoutingPlan=null,i.jdState&&(i.jdState.localJdText=t,i.jdState.jobRequirementRoutingPlan=null),An(i));const h=Sa();h&&(h.localJdText=t,h.jobRequirementRoutingPlan=null,pr(h)),Yt()}catch(i){console.error("Failed to clear quick resume AI session after JD change",i)}}function cd(t){const{enabled:i,buildLiteSnapshot:h,deps:w}=t,g=o.useEffectEvent(()=>{try{An(h())}catch(T){console.warn("Failed to persist quick resume layout snapshot locally",T)}});o.useEffect(()=>{if(!i)return;const T=window.setTimeout(()=>{g()},400);return()=>window.clearTimeout(T)},[i,...w])}function ld(t){const{shellOnly:i,currentStep:h,localJdText:w,tabReports:g,aiSuggestions:T,isAdapting:A,activeScopeRef:C,resetAiArtifacts:N,onJdChangeClearSession:_,adaptBridge:M}=t,[ce,be]=o.useState(()=>zu()),[W,F]=o.useState(()=>Ra());o.useEffect(()=>{if(i||ce)return;let ne=!1;return Mi().then(()=>{ne||be(!0)}),()=>{ne=!0}},[i,ce]),o.useEffect(()=>{if(i||W)return;let ne=!1;return ei().then(()=>{ne||F(!0)}),()=>{ne=!0}},[i,W]);const[D,L]=o.useState(null),se=o.useCallback(ne=>{L(ue=>{const Se=typeof ne=="function"?ne(ue):ne;return Hn(Se)})},[]),[pe,Re]=o.useState("idle"),[Te,Ve]=o.useState("全部"),[Ye,re]=o.useState([]),Me=o.useRef(null),de=o.useRef("idle"),Ee=o.useRef(!1),Ce=o.useRef(null),Je=o.useRef(0),V=o.useRef(null),we=o.useRef(0),fe=o.useRef(null),X=o.useRef(""),Be=o.useRef(0),Ue=o.useRef(""),Ae=o.useRef(async()=>!1);o.useEffect(()=>{Me.current=D},[D]),o.useEffect(()=>{de.current=pe},[pe]);const le=o.useMemo(()=>yr(w),[w]),ot=o.useCallback((ne,ue=le)=>{if(!W||!ce)return[];const Se=yr(ue),ke=he().normalizeJobRequirementRoutingPlan(ne,Se)||ne;return[...Y().getSharedRoutingPlanValidationErrors(ne,{jdText:Se,normalizeSubTab:he().normalizeRoutingSubTab,getRequirementText:he().getRoutingRequirementText,isInvalidStandardRequirement:he().isInvalidRoutingStandardRequirement,getStandardValidationError:he().getRoutingStandardValidationError,getKnowledgeSubTabConsistencyReason:Y().getKnowledgeSubTabConsistencyReason,routingDuplicateKey:he().routingDuplicateKey,mainTabOrder:fr,subTabOrder:he().ROUTING_SUB_TAB_ORDER,excludedMainTab:"不进入档案资产",normalizePriority:he().normalizeRoutingPriority,preparePlan:()=>ke,sourceRowsOptions:{unclearSourceText:he().IMPLIED_REQUIREMENT_SOURCE_TEXT,isUnclearSource:he().isUnclearRoutingSource,normalizeEvidence:he().normalizeRoutingEvidence,includeRequirementEvidence:!1}}),...Y().getKnowledgeSkillGranularityValidationErrors(ke,Se)]},[le,W,ce]),Xe=o.useCallback(ne=>ot(ne).length===0,[ot]),kt=pe==="ready"&&Pn(D,le)&&Xe(D),at=o.useMemo(()=>pe!=="ready"||!D?[]:ot(D),[pe,D,ot]);o.useEffect(()=>{if(!(pe!=="ready"||!D)&&at.length!==0){if(C.current==="demo"||$t(D)){console.warn("[QR] keep demo routing plan despite validation noise",at.slice(0,3));return}se(null),Re("idle"),de.current="idle",re(at),Yt()}},[at,pe,D,C,se]);const ie=o.useCallback(()=>{se(null),Re("idle"),Ve("全部"),re([]),Yt()},[se]);o.useEffect(()=>{const ne=Xt(le),ue=X.current;X.current=ne,!(!ue||ue===ne||!(Object.keys(g).length>0||D?.requirements?.length||T))&&(N(),ie(),_?.(le))},[T,ie,D,le,_,N,g]),o.useEffect(()=>{if(A||!le.trim()||!!!D?.requirements?.length||Pn(D,le))return;const ue=Ne(D,le);if(ue){se(ue);try{Cn(ue)}catch(ke){console.warn("Failed to persist repaired quick resume routing plan",ke)}return}!ti(D,le)||!(Object.keys(g).length>0||T)||(N(),ie(),_?.(le))},[T,ie,A,D,le,_,N,se,g]);const Oe=W&&ce,me=o.useCallback(ne=>!!ne&&Array.isArray(ne.requirements)&&ne.requirements.length>0&&Xe(ne),[Xe]),_e=o.useCallback((ne,ue=le)=>me(ne)&&Pn(ne,ue),[me,le]),v=o.useCallback(async ne=>{const ue=!!ne?.force,Se=!!ne?.silent,ke=!!ne?.fullBudget||!Se,P=le;if(!P.trim())return z.warning("请先提取或录入 JD 内容"),!1;if(ue&&(Be.current=0),!ue&&Ee.current&&V.current){const Pe=Date.now()-we.current;if(Pe<As)return V.current;console.warn("[QR] drop zombie JD routing flight",{age:Pe}),fe.current?.abort(),Ee.current=!1,V.current=null,de.current==="loading"&&(Re("idle"),de.current="idle")}const ve=++Je.current;we.current=Date.now();const je=(Pe,qe="error")=>{Ce.current=Pe,re([Pe]),Re(qe),de.current=qe},De=(async()=>{let Pe;try{Ce.current=null;try{await Promise.all([Mi(),ei()]),be(!0)}catch{return je("JD 路由引擎加载失败,请重试"),Se||z.error("JD 路由引擎加载失败,请重试"),!1}try{const oe=new AbortController,Le=window.setTimeout(()=>
9oe.abort(),Fl);try{const ut=await fetch("/api/",{method:"GET",cache:"no-store",credentials:"same-origin",signal:oe.signal});ut.ok||console.warn("[QR] backend health probe not ok",ut.status)}finally{window.clearTimeout(Le)}}catch(oe){console.warn("[QR] backend health probe failed; proceeding to JD routing POST",oe?.name||oe),Se||z.warning("后端探活未成功,仍尝试拆解 JD…")}const qe="quick-resume-ai-adaptation";if(C.current==="demo"){const oe=Me.current??D;if(Array.isArray(oe?.requirements)&&oe.requirements.length>0){const Le=Qt(oe,P)||oe;return se(Le),Me.current=Le,re([]),Cn(Le),Re("ready"),de.current="ready",M.setIsAdapting(!1),M.setStreamStatus("idle"),Ee.current=!1,!0}if(je("示例模式仅供浏览,请切换到「仅账号」后用自己的 JD 再拆解","error"),M.setIsAdapting(!1),M.setStreamStatus("idle"),Ee.current=!1,!Se){const{guardDemoOnlyAction:Le}=await rt(async()=>{const{guardDemoOnlyAction:ut}=await import("./promptSwitchToAccountMode-BfdWY4Z3.js");return{guardDemoOnlyAction:ut}},__vite__mapDeps([46,1,2,47,13]));Le("当前为仅示例模式,JD 拆解结果仅供浏览。请切换到「仅账号」模式后再重新拆解。")}return!1}Se||(z.destroy(),M.setIsAdapting(!0),M.setStreamStatus("streaming"),M.isPausedRef.current=!1,M.setAiReportActiveTab("overview"),M.aiEngineProgress.start("jdRouting",{maxAttempts:Y().QUICK_RESUME_JD_ROUTING_MAX_ATTEMPTS}),z.loading({key:qe,content:"平台正在拆解 JD 原文...",duration:0}));const H=()=>{Se||(z.destroy(qe),M.aiEngineProgress.stop())};Ee.current=!0,fe.current?.abort(),fe.current=new AbortController;const Ze=fe.current.signal;let Zt=window.setTimeout(()=>{Je.current===ve&&(console.warn("[QR] JD routing hard timeout, aborting"),fe.current?.abort())},As);Pe=()=>{Zt!=null&&(window.clearTimeout(Zt),Zt=null)};const en=Ge(P),Ji={jdText:P,normalizeSubTab:he().normalizeRoutingSubTab,getRequirementText:he().getRoutingRequirementText,buildFallbackStandard:he().buildRoutingStandardRequirement,normalizeStandardText:he().normalizeRoutingStandardRequirementText,isInvalidStandard:he().isInvalidRoutingStandardRequirement};let et=ue?null:Me.current??D;if(!ue&&et&&!_e(et,P)){const oe=Ne(et,P);oe?(et=oe,se(oe),Me.current=oe,Cn(oe)):ti(et,P)&&(et=null,se(null),Me.current=null,M.setTabReports({}),Re("idle"),de.current="idle",re([]),Yt())}if(ue){N(),ie(),Re("loading"),de.current="loading";try{const oe=Gr();oe&&(delete oe.aiSuggestions,An(oe))}catch(oe){console.error("Failed to clear quick resume AI suggestions",oe)}}if(_e(et,P)){const oe=Qt(et,P);if(oe?.requirements?.length){const Le=ot(oe,P);if(Le.length===0)return et=oe,se(oe),Me.current=oe,re([]),Cn(oe),Re("ready"),de.current="ready",H(),Se||(M.setIsAdapting(!1),M.setStreamStatus("idle"),z.success("已完成 JD 结构化拆解!")),Ee.current=!1,!0;if(C.current==="demo"){const ut=Qt(oe,P)||oe;return et=ut,se(ut),Me.current=ut,re([]),Cn(ut),Re("ready"),de.current="ready",H(),Se||(M.setIsAdapting(!1),M.setStreamStatus("idle")),Ee.current=!1,console.warn("[QR] demo routing kept despite validation noise",Le.slice(0,3)),!0}et=null,se(null),Me.current=null,Re("idle"),de.current="idle",re(Le)}}if(C.current==="demo"){if(H(),Ee.current=!1,M.setIsAdapting(!1),M.setStreamStatus("idle"),je("示例模式仅供浏览,请切换到「仅账号」后用自己的 JD 再拆解","error"),!Se){const{guardDemoOnlyAction:oe}=await rt(async()=>{const{guardDemoOnlyAction:Le}=await import("./promptSwitchToAccountMode-BfdWY4Z3.js");return{guardDemoOnlyAction:Le}},__vite__mapDeps([46,1,2,47,13]));oe("当前为仅示例模式,JD 拆解结果仅供浏览。请切换到「仅账号」模式后再重新拆解。")}return!1}if(!_e(et,P)){Re("loading"),de.current="loading",Ve("全部");try{const oe=ke?Y().QUICK_RESUME_JD_ROUTING_STREAM_TIMEOUT_MS:zl,Le=ke?Y().QUICK_RESUME_JD_ROUTING_MAX_ATTEMPTS:Math.min(2,Y().QUICK_RESUME_JD_ROUTING_MAX_ATTEMPTS),ut=wt=>Y().requestJdRoutingPlanWithRetry({jdContent:P,jdMeta:en,signal:Ze,maxAttempts:Le,streamTimeoutMs:oe,beforeReadChunk:async()=>{const ee=Date.now()+2e3;for(;M.isPausedRef.current&&Date.now()<ee&&(await new Promise(ct=>setTimeout(ct,200)),!Ze.aborted););},parseOptions:{originalJdText:P},requestExtra:{isQuickResumeMode:!0,sourceMode:"quickResume",fastMode:!0,skipLlmProviders:wt?.skipLlmProviders},normalizePlan:ee=>he().normalizeJobRequirementRoutingPlan(ee,P),afterNormalize:ee=>Ta(ee,P),validatePlan:ot,recoverPlan:ee=>Y().applyRoutingPlanDeterministicRecovery(ee,P,Ji),parseMarkdownRoutingPlan:he().parseRoutingPlanFromMarkdownTable,onStreamChunk:({streamingText:ee})=>{!M.pageMountedRef.current||Ze.aborted||M.aiEngineProgress.updateJdStreamChunk(ee)},onStreamComplete:()=>{!M.pageMountedRef.current||Ze.aborted||M.aiEngineProgress.setValidating()},onRetry:({attempt:ee,errors:ct})=>{!M.pageMountedRef.current||Ze.aborted||(re(ct),M.aiEngineProgress.setRetry(ee,Le,ct))}});let pt;try{pt=await ut()}catch(wt){const ee=String(wt?.message||"");if(!/超时|余额不足|502|切换备用|接口响应失败/i.test(ee)||Ze.aborted)throw wt;Se||(z.loading({key:qe,content:"当前响应较慢,正在切换备用通道重试…",duration:0}),M.aiEngineProgress.start("jdRouting",{maxAttempts:Y().QUICK_RESUME_JD_ROUTING_MAX_ATTEMPTS})),pt=await ut({skipLlmProviders:["deepseek"]})}if(et=Qt(pt.plan,P),!M.pageMountedRef.current||fe.current?.signal!==Ze)return!1;if(se(et),Me.current=et,Re("ready"),de.current="ready",Ve("全部"),re([]),Cn(et),H(),!Se){M.setIsAdapting(!1),M.setStreamStatus("idle");const wt=pt.attempts>1?`(已自动优化 ${pt.attempts} 次)`:"";z.success(`拆解JD原文完成${wt},六个模块已解锁`)}return!0}catch(oe){if(oe.name==="AbortError"){if(M.pageMountedRef.current){const ee=we.current>0&&Date.now()-we.current>=As-50,ct=Me.current?"ready":ee?"error":"idle";Re(ct),de.current=ct,ee&&je("JD 路由超时,请点击「重新拆解」或稍后重试本模块分析","error"),Se||(M.setIsAdapting(!1),M.setStreamStatus("idle"),ee&&z.error("JD 路由超时,请重试")),H()}return!1}if(!M.pageMountedRef.current||fe.current?.signal!==Ze)return!1;const Le=Y().flattenAiEngineRetryHistory(M.aiEngineProgress.progress?.retryHistory).map(ee=>Uo(ee)),pt=/failed to fetch|network|ECONNREFUSED/i.test(String(oe.message||""))?["暂时无法连接服务,请稍后重试"]:[Uo(oe.message,"拆解JD原文失败")],wt=(Le.length?Le:pt)[0]||"拆解JD原文失败";return je(wt,"error"),re(Le.length?Le:pt),Se||(z.error(`拆解JD原文失败:${pt[0]}`),M.setIsAdapting(!1),M.setStreamStatus("idle")),H(),!1}finally{Pe()}}return H(),Se||(M.setIsAdapting(!1),M.setStreamStatus("idle")),!0}finally{Pe?.(),Je.current===ve&&(Ee.current=!1,V.current===De&&(V.current=null))}})();return V.current=De,De},[C,M,ie,ot,_e,D,le,N,se]);Ae.current=v;const Ct=o.useCallback(()=>{fe.current?.abort(),Ee.current=!1,V.current=null,de.current==="loading"&&(Re("idle"),de.current="idle")},[]);return o.useEffect(()=>{if(h!==1||!le.trim()||kt||pe==="loading"||Ee.current||pe==="error")return;if(C.current==="demo"){Array.isArray(D?.requirements)&&D.requirements.length>0&&pe!=="ready"&&(Re("ready"),de.current="ready");return}const ne=Xt(le);if(Ue.current!==ne&&(Ue.current=ne,Be.current=0),Be.current>=2)return;let ue=!1,Se=null,ke=null;const P=()=>{ue||Ee.current||de.current==="loading"||(Be.current+=1,Ae.current({silent:!0}))};return typeof window<"u"&&"requestIdleCallback"in window?Se=window.requestIdleCallback(P,{timeout:2500}):ke=window.setTimeout(P,600),()=>{ue=!0,Se!=null&&"cancelIdleCallback"in window&&window.cancelIdleCallback(Se),ke!=null&&window.clearTimeout(ke)}},[C,h,kt,D,le,pe]),{jobRequirementRoutingPlan:D,setJobRequirementRoutingPlan:se,routingPlanStatus:pe,setRoutingPlanStatus:Re,routingTabFilter:Te,setRoutingTabFilter:Ve,routingPlanErrorDetails:Ye,setRoutingPlanErrorDetails:re,routingLastFailureRef:Ce,routingStackReady:ce,setRoutingStackReady:be,routingPlanLocalReady:W,routingHelpersReady:Oe,isRoutingPlanReady:kt,staleRoutingValidationErrors:at,normalizedLocalJdText:le,jobRequirementRoutingPlanRef:Me,routingPlanStatusRef:de,routingRequestInFlightRef:Ee,routingInFlightPromiseRef:V,abortJdRoutingFlight:Ct,handleJdRoutingPlanQuickResumeRef:Ae,silentRoutingAttemptsRef:Be,getRoutingPlanValidationErrors:ot,validateRoutingPlan:Xe,hasValidRoutingPlan:me,hasTrustedRoutingPlan:_e,handleJdRoutingPlanQuickResume:v,clearRoutingStateForNewJd:ie,prevJdFingerprintRef:X,silentRoutingJdKeyRef:Ue}}function ud(t){return t.userReset?!1:t.mode==="account"&&!t.restoredFromLocal}function dd(t){if(t.localHasExtract)return!1;const i=t.remote?.snapshot;return!(!i?.aiExtractedData||vn(i))}function md(t){return t.localHasExtract?{type:"noop"}:t.libraryCached?.aiExtractedData&&Wr(t.libraryCached)?{type:"restore-cache",source:"library",snap:t.libraryCached}:t.mode==="demo"&&t.showcaseCached?.aiExtractedData&&vn(t.showcaseCached)?{type:"restore-cache",source:"showcase",snap:t.showcaseCached}:{type:"noop"}}function ra(t){return t==="unauthorized"?"云端会话未授权(401),已保留本地工作台,未清空顶栏。":t==="empty"?"云端无可用会话快照,已保留本地工作台。":"云端会话恢复失败,已保留本地工作台。"}async function pd(t,i,h){const w=Math.max(1,Math.min(i,t.length||1)),g=new Array(t.length);let T=0;async function A(){for(;T<t.length;){const C=T;T+=1,g[C]=await h(t[C],C)}}return await Promise.all(Array.from({length:w},()=>A())),g}const gn=[];let qi=!1,Vr=null,Yr=null,Xr=0;function xa(){Vr!=null&&typeof window<"u"&&"cancelIdleCallback"in window&&window.cancelIdleCallback(Vr),Vr=null,Yr!=null&&clearTimeout(Yr),Yr=null}function Ea(t,i){if(xa(),typeof window<"u"&&"requestIdleCallback"in window){Vr=window.requestIdleCallback(()=>t(),{timeout:i});return}Yr=window.setTimeout(t,Math.min(i,120))}function Ca(){if(qi)return;const t=gn.shift();if(!t)return;const i=Xr;qi=!0;try{if(i!==Xr)return;t.run()}catch(h){console.warn("[qr-idle]",t.id,h)}finally{qi=!1,i===Xr&&gn.length&&Ea(Ca,Math.max(48,Math.min(t.timeout,240)))}}function Ls(t,i,h){if(typeof window>"u")return;const w=h?.timeout??2e3,g=gn.findIndex(C=>C.id===t),T={id:t,run:i,timeout:w};if(g>=0?gn[g]=T:gn.push(T),qi||Vr!=null||Yr!=null)return;const A=gn.reduce((C,N)=>Math.min(C,N.timeout),w);Ea(Ca,A)}function Js(t){const i=gn.findIndex(h=>h.id===t);i>=0&&gn.splice(i,1)}function ia(){Xr+=1,gn.length=0,xa()}function sa(){return Xr}const fd=o.lazy(()=>rt(()=>import("./PersonalArchiveLibraryModule-BzH_2v1t.js").then(t=>t.a),__vite__mapDeps([72,2,1,73,13,22,23,74,75,11,34])).then(t=>({default:t.default??t.PersonalArchiveLibraryModule})));function gd(){return k.jsx("div",{style:{padding:"20px 16px",color:"#86868b",fontSize:13},"aria-busy":!0,"aria-label":"个人档案库加载中",children:"个人档案库加载中…"})}function bd(t){if(!t||typeof t!="object")return null;
9const i=t.experience&&typeof t.experience=="object"?t.experience:{};return{basicInfo:t.basicInfo??null,skills:Array.isArray(t.skills)?t.skills:null,experience:{companies:Array.isArray(i.companies)?i.companies:Array.isArray(t.companies)?t.companies:[],projects:Array.isArray(i.projects)?i.projects:Array.isArray(t.projects)?t.projects:[],workExps:Array.isArray(i.workExps)?i.workExps:Array.isArray(t.workExps)?t.workExps:Array.isArray(t.experiences)?t.experiences:[]},education:Array.isArray(t.education)?t.education:null,selfIntro:Array.isArray(t.selfIntro)?t.selfIntro:Array.isArray(t.selfIntros)?t.selfIntros:null,intent:t.intent??null}}function hd({mode:t="archive",fullData:i,sessionExtract:h=null,onSessionExtractUpdate:w,selection:g,onSelectionChange:T,activeTab:A,onTabChange:C,headerExtraActions:N,contentKey:_,onRecognize:M,onClearBase:ce,className:be,headerTitle:W}){const F=o.useMemo(()=>t==="extract"&&!h?"archive":t,[t,h]);return k.jsx("div",{className:`qr-archive-match-embed profile-mgmt-page--mono${be?` ${be}`:""}`,style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:k.jsx(o.Suspense,{fallback:k.jsx(gd,{}),children:k.jsx(fd,{mode:F,fullData:i,sessionExtract:F==="extract"?h:null,onSessionExtractUpdate:w,selection:F==="select"?g:void 0,onSelectionChange:F==="select"?T:void 0,activeTab:A,onTabChange:C,onRecognize:M||(()=>{}),hideRecognizeAction:!0,onClearBase:ce,headerExtraActions:N,headerTitle:W,contentKey:_,style:{minHeight:0,overflow:"hidden",flex:1}})})})}function yd(){const[t,i]=o.useState(!0),[h,w]=o.useState(null),[g,T]=o.useState(!1),[A,C]=o.useState(!1),[N,_]=o.useState(null),[M,ce]=o.useState(()=>
9Qu()),[be,W]=o.useState(!1),[F,D]=o.useState("overall"),[L,se]=o.useState(()=>fu()),[pe,Re]=o.useState(!1),[Te,Ve]=o.useState("sectional"),[Ye,re]=o.useState(null),Me=o.useRef(()=>{}),de=o.useRef(""),Ee=o.useCallback((V="overall")=>{D(V),W(!0)},[]),Ce=o.useCallback(V=>{re(we=>V==null?we==null?we:null:we&&we.label===V.label&&we.loading===V.loading?(Me.current=V.onClick,we):(Me.current=V.onClick,{label:V.label,loading:V.loading,onClick:()=>Me.current()}))},[]),Je=o.useCallback(V=>{!h||!de.current||de.current!==V&&C(!0)},[h]);return{jdAnalysisPanelExpanded:t,setJdAnalysisPanelExpanded:i,overallAnalysisResult:h,setOverallAnalysisResult:w,overallAnalysisLoading:g,setOverallAnalysisLoading:T,overallAnalysisStale:A,setOverallAnalysisStale:C,overallAnalysisError:N,setOverallAnalysisError:_,scoringConfig:M,setScoringConfig:ce,scoringRulesEditorOpen:be,setScoringRulesEditorOpen:W,scoringRulesHubTab:F,setScoringRulesHubTab:D,openScoringRulesHub:Ee,decisionDimensionWeightsByTab:L,setDecisionDimensionWeightsByTab:se,decisionSectionalRulesOpen:pe,setDecisionSectionalRulesOpen:Re,leftReportView:Te,setLeftReportView:Ve,moduleAnalysisControls:Ye,setModuleAnalysisControlsStable:Ce,overallAnalysisFingerprintRef:de,syncOverallAnalysisStale:Je}}const Ur={personalInfo:"个人信息",skills:"知识技能",experience:"工作经验",education:"教育经历",selfIntro:"自我介绍",jobIntent:"求职意向"},oa={个人信息:"personalInfo",知识技能:"skills",工作经验:"experience",教育经历:"education",自我介绍:"selfIntro",求职意向:"jobIntent"};function Rd(t,i){const h=Array.isArray(t?.rows)?t.rows:[],w=String(i?.assetRefId||"").trim(),g=Array.isArray(i?.requirementIds)?i.requirementIds.map(String):[],T=h.filter(A=>{const C=Array.isArray(A?.assetRefs)?A.assetRefs:[];return w&&C.some(N=>String(N?.assetRefId||"")===w)?!0:g.includes(String(A?.requirementId||""))});return{mainTab:t?.mainTab,module:t?.module,rows:T.length>0?T:h.slice(0,1)}}function Sd(t){return{tabName:t.tabName,jdContent:String(t.jdText||"").slice(0,3500),jdMeta:t.jdMeta||{},isQuickResumeMode:!0,sourceMode:"quickResume",moduleHcpPlan:Rd(t.moduleHcpPlan,t.cardGenerationRequest),cardGenerationRequest:t.cardGenerationRequest,candidateOriginalAssetIds:t.candidateOriginalAssetIds||[]}}const kd=t=>{const i=String(t?.assetType||"");return/修改|更改|新增|新建/.test(i)},wd=t=>{const i=Array.isArray(t?.rows)?t.rows:[],h=[],w=new Set;return i.forEach(g=>{const T=String(g?.requirementId||g?.JD条目ID||"").trim();(Array.isArray(g?.assetRefs)?g.assetRefs:[]).filter(kd).forEach(C=>{const N=String(C?.assetRefId||"").trim(),_=String(C?.actionCardId||"").trim();if(!N||!_)return;const M=`${N}::${_}`;if(w.has(M))return;w.add(M);const ce=Array.isArray(C?.coveredRequirementIds)?C.coveredRequirementIds.map(String).filter(Boolean):[],be=ce.length?ce:T?[T]:[];h.push({requestId:`CGR-${N}`,assetRefId:N,actionCardId:_,requirementIds:be,actionType:/新增|新建/.test(String(C?.assetType||""))?"新建":"更改",assetType:C?.assetType||"",assetModule:C?.assetModule||"",assetId:C?.assetId,assetName:C?.assetName||C?.title||"",targetMainTab:C?.assetTargetMainTab||C?.targetMainTab||g?.mainTab||"",targetSubTab:C?.assetTargetSubTab||C?.targetSubTab||g?.subTab||""})})}),h};function Id(){const[t,i]=o.useState(!1),[h,w]=o.useState("idle"),g=o.useRef(null),T=o.useRef(!1),A=o.useRef(null),C=o.useRef(null),N=o.useCallback(async(W,F)=>{const D=C.current;if(!D)return;if(D.activeScopeRef.current==="demo"||Qe()==="demo"){const{guardDemoOnlyAction:Ce}=await rt(async()=>{const{guardDemoOnlyAction:Je}=await import("./promptSwitchToAccountMode-BfdWY4Z3.js");return{guardDemoOnlyAction:Je}},__vite__mapDeps([46,1,2,47,13]));Ce("当前为仅示例模式,决策报告仅供浏览。请切换到「仅账号」模式后再进行分析。");return}if(!W){await D.handleJdRoutingPlanQuickResume({force:F?.forceRouting});return}const L=D.normalizedLocalJdText;if(!L.trim()){z.warning("请先提取或录入 JD 内容");return}D.syncProfileTabForReportTab(W);const se=D.jobRequirementRoutingPlanRef.current??D.jobRequirementRoutingPlan,pe=Array.isArray(se?.requirements)&&se.requirements.length>0,Re=D.hasTrustedRoutingPlan(se,L);if(!Re&&!(F?.allowUntrustedPlan&&pe)){z.warning("请先拆解 JD 原文,再生成该模块");return}const Te="quick-resume-ai-adaptation";i(!0),w("streaming"),T.current=!1,D.aiEngineProgress.setModulePlanning(Ur[W]||W),z.loading({key:Te,content:F?.allowUntrustedPlan&&!
9Re?"正在快速生成初稿…":"AI 正在分析本模块…",duration:0}),await $s();const Ve=()=>{z.destroy(Te),D.aiEngineProgress.stop()};g.current?.abort(),g.current=new AbortController;const Ye=g.current.signal,re=Ge(L),Me=[W],de={...D.tabReports};Me.forEach(Ce=>de[Ce]=`> **🔄 AI 正在全速拆解 [${Ce}],请稍候...**
10
11`);const Ee={...de};D.setTabReports(de);try{const Ce=D.buildEffectiveQuickResumeProfileData(),Je=Qt(se,L),V=W?sd(Je,W):void 0,we={jdContent:L,skills:D.quickResumeAdaptationSkills,experiences:D.quickResumeExperienceLibrary,profileData:Ce,selfIntros:[...Array.isArray(D.profileData?.selfIntros)?D.profileData.selfIntros:[],...Array.isArray(D.aiExtractedData?.selfIntro)?D.aiExtractedData.selfIntro:[]],educations:Array.isArray(D.aiExtractedData?.education)?D.aiExtractedData.education:[],jobIntents:D.aiExtractedData?.intent?.positions||[],jobStatuses:D.aiExtractedData?.intent?.status||[],intendedCities:D.aiExtractedData?.intent?.cities||[],intendedJobTypes:D.aiExtractedData?.intent?.intendedJobTypes||[],jobRequirementRoutingPlan:Je,jdMeta:re,isQuickResumeMode:!0,sourceMode:"quickResume"};V?.length&&(we.currentTabRequirementIds=V);const fe=Me.map(async X=>{const Be={...we,tabName:X};try{const Ue=await Wt("/api/assembly-info/ai-adaptation/report/tab-plan-deterministic",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Be),signal:Ye});if(!Ue.ok){const P=await Ue.text().catch(()=>"");throw new Error(`${X} deterministic plan failed: ${P||Ue.status}`)}const Ae=await Ue.json();if(!Ae?.moduleHcpPlan)throw new Error(Ae?.error||`${X} deterministic plan missing moduleHcpPlan`);if(!Array.isArray(Ae.moduleHcpPlan.rows)||Ae.moduleHcpPlan.rows.length===0)throw new Error(Ae?.error||`${Ur[X]||X} 未分配到可生成行,请检查 JD 原文分配是否包含该模块`);Ae.ok===!1&&z.warning(`AI 已生成 ${Ur[X]||X} 计划,但存在校验告警,请核对后再采纳`);let le=Ae.moduleHcpPlan;
11const ot={schemaVersion:Ae.schemaVersion||"ai-profile-customization/v1",generationMode:Ae.generationMode||"deterministic_plan_v1",targetTab:Ae.targetTab,candidateOriginalAssetIds:Ae.candidateOriginalAssetIds||[],moduleHcpPlan:le,cardGenerationRequests:Ae.cardGenerationRequests||[],actionCards:[],renderHints:Ae.renderHints||{}},Xe=`\`\`\`json
12${JSON.stringify(ot,null,2)}
13\`\`\``;Ee[X]=Xe,D.setTabReports(P=>({...P,[X]:Xe}));const kt=Array.isArray(Ae.cardGenerationRequests)?Ae.cardGenerationRequests:[],at=kt.length>0?[]:wd(le),ie=kt.length>0?kt:at,Oe=5,me=new Array(ie.length).fill(null),_e=[],v=P=>{const ve=String(P?.actionType||P?.assetType||P?.action||"");return/修改|更改|UPDATE/i.test(ve)?!1:/新增|新建|CREATE/i.test(ve)},Ct=P=>{if(g.current?.signal.aborted)return;const ve=me.filter(Boolean),je={...ot,generationMode:P,actionCards:ve,cardGenerationRequests:ie,cardErrors:_e},De=`\`\`\`json
14${JSON.stringify(je,null,2)}
15\`\`\``;Ee[X]=De,D.setTabReports(Pe=>({...Pe,[X]:De}))},ne=async(P,ve)=>{if(g.current?.signal.aborted)return;const je=P?.subTab||P?.fieldName||P?.assetName||P?.targetSubTab;if(D.aiEngineProgress.setCardProgress(Ur[X]||X,ve+1,ie.length,typeof je=="string"?je:void 0),X==="personalInfo"){const qe=Y().buildPersonalInfoFallbackActionCard(P,le,he().PERSONAL_INFO_ROUTING_REQUIREMENT_ID_TO_SUB_TAB);qe?me[ve]=qe:_e.push({request:P,error:"personalInfo fallback empty"});return}if(X==="skills"&&v(P)){const qe=Y().buildKnowledgeSkillFallbackActionCard(P,le);qe?me[ve]=qe:_e.push({request:P,error:"skills create fallback empty"});return}let De="";if(g.current?.signal.aborted)return;const Pe=await Wt("/api/assembly-info/ai-adaptation/report/tab-card",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Sd({tabName:X,jdText:L,jdMeta:re,moduleHcpPlan:le,cardGenerationRequest:P,candidateOriginalAssetIds:Ae.candidateOriginalAssetIds||[]})),signal:Ye});if(!Pe.ok)De=`HTTP ${Pe.status}`;else{const qe=await Pe.json().catch(()=>null);qe?.ok&&qe.actionCard?(me[ve]=qe.actionCard,De=""):De=qe?.error||"actionCard generation failed"}if(De){const qe=X==="education"?he().buildQuickResumeEducationFallbackActionCard(P,le,D.aiExtractedData?.education||[]):X==="selfIntro"?B().buildSelfIntroFallbackActionCard(P,le,re?.jobTitle||Ge(L).jobTitle||""):X==="jobIntent"?B().buildJobIntentFallbackActionCard(P,le):X==="skills"?Y().buildKnowledgeSkillFallbackActionCard(P,le):null;qe?me[ve]=qe:_e.push({request:P,error:De})}};if(X==="personalInfo"){for(let P=0;P<ie.length&&!g.current?.signal.aborted;P+=1)await ne(ie[P],P);Ct("two_stage_v1")}else if(X==="skills"){const P=[],ve=[];ie.forEach((je,De)=>{v(je)?P.push(De):ve.push(De)});for(const je of P){if(g.current?.signal.aborted)break;await ne(ie[je],je)}Ct("two_stage_local_create_v1");for(let je=0;je<ve.length&&!g.current?.signal.aborted;je+=Oe){const De=ve.slice(je,je+Oe);await Promise.allSettled(De.map(Pe=>ne(ie[Pe],Pe))),Ct("two_stage_v1")}}else for(let P=0;P<ie.length&&!g.current?.signal.aborted;P+=Oe){const ve=ie.slice(P,P+Oe),je=await Promise.allSettled(ve.map((De,Pe)=>ne(De,P+Pe)));Ct("two_stage_v1")}const ue=me.filter(Boolean),Se={...ot,generationMode:"two_stage_v1",actionCards:ue,cardGenerationRequests:ie,cardErrors:_e},ke=`\`\`\`json
16${JSON.stringify(Se,null,2)}
17\`\`\``;Ee[X]=ke,D.setTabReports(P=>({...P,[X]:ke})),_e.length>0&&z.warning(`AI 已生成 ${X} 计划,但有 ${_e.length} 张卡片生成失败,可重新生成该模块`)}catch(Ue){if(Ue.name==="AbortError"){D.setTabReports(ie=>{const Oe=String(ie[X]||"");if(!/AI 正在全速拆解/.test(Oe))return ie;const me={...ie};return delete me[X],me});return}const Ae=Ue?.message||"网络或生成错误,请重试",le=Ur[X]||X;if(console.error(`[QuickResume] ${le} generation failed`,Ue),/ECONNREFUSED|fetch failed|Failed to fetch|NetworkError|ERR_CONNECTION/i.test(Ae)){z.error(`${le}生成失败:服务未连接,请确认前端(5173)与后端(3001)均已启动后重试`),D.setTabReports(ie=>{const Oe=String(ie[X]||""),me={...ie};return(!Oe||/AI 正在全速拆解/.test(Oe))&&delete me[X],me}),delete Ee[X];return}z.error(`${le}生成失败:${Ae}`);const Xe=X==="personalInfo"?he().buildQuickResumePersonalInfoFallbackModulePlan(Ce):{mainTab:le,rows:[]},at=`\`\`\`json
18${JSON.stringify({schemaVersion:"ai-profile-customization/v1",generationMode:"deterministic_plan_error",targetTab:le,moduleHcpPlan:Xe,validation:{status:"error",issues:[{code:"QUICK_TAB_GENERATION_ERROR",message:Ae}]},cardGenerationRequests:[],actionCards:[],renderHints:{}},null,2)}
19\`\`\``;Ee[X]=at,D.setTabReports(ie=>({...ie,[X]:at}))}});await Promise.allSettled(fe),await D.persistQuickResumeSnapshot(D.buildQuickResumeSnapshot({tabReports:Ee}),{persistRemote:!0})}catch(Ce){Ce.name!=="AbortError"&&console.error("[AI Concurrent Error]",Ce)}finally{Ve(),g.current?.signal.aborted||(i(!1),w("idle"))}},[]),_=o.useCallback(W=>{const F=oa[W];F&&N(F)},[N]),M=o.useCallback(async W=>{const F=C.current;if(!F)return;if(F.activeScopeRef.current==="demo"||Qe()==="demo"){const{guardDemoOnlyAction:Te}=await rt(async()=>{const{guardDemoOnlyAction:Ve}=await import("./promptSwitchToAccountMode-BfdWY4Z3.js");return{guardDemoOnlyAction:Ve}},__vite__mapDeps([46,1,2,47,13]));Te("当前为仅示例模式,决策报告仅供浏览。请切换到「仅账号」模式后再进行分析。");return}const D=W||F.aiReportActiveTab;if(D==="overview"){z.warning("请先选择一个具体模块进行拆解");return}const L=F.normalizedLocalJdText;if(!L.trim()){z.warning("请先提取或录入 JD 内容");return}const se=oa[D]||D,pe="quick-resume-ai-adaptation";i(!0),w("streaming"),T.current=!1,z.loading({key:pe,content:"正在准备本模块分析…",duration:0}),await $s();const Re=Te=>{z.destroy(pe),i(!1),w("idle"),F.aiEngineProgress.stop(),Te&&z.warning(Te)};try{const Te=F.jobRequirementRoutingPlanRef.current??F.jobRequirementRoutingPlan,Ve=F.activeScopeRef.current==="demo",Ye=!!(F.isDemoAnalysisShortCircuit?.()||Ve);let re=F.routingPlanStatusRef.current==="ready"&&!!Te&&F.hasTrustedRoutingPlan(Te,L);if(!re&&Ye&&Array.isArray(Te?.requirements)&&Te.requirements.length>0&&(F.routingPlanStatusRef.current="ready",F.setRoutingPlanStatus?.("ready"),re=!0),Ye){let Je=String(F.tabReports?.[se]||F.tabReports?.[D]||"").trim();if(!Je||/AI 正在全速拆解/.test(Je))try{const{buildDemoQuickResumeShowcaseSnapshot:V}=await rt(async()=>{const{buildDemoQuickResumeShowcaseSnapshot:X}=await import("./demoQuickResumeShowcase-PfBsrRkM.js");return{buildDemoQuickResumeShowcaseSnapshot:X}},__vite__mapDeps([76,77,43,1,2,34,42])),we=V(),fe=we?.tabReports&&typeof we.tabReports=="object"?we.tabReports:{};Object.keys(fe).length>0&&(F.setTabReports({...F.tabReports,...fe}),Je=String(fe[se]||fe[D]||"").trim())}catch(V){console.warn("[QR] demo module short-circuit hydrate failed",V)}if(Je&&!/AI 正在全速拆解/.test(Je)){z.destroy(pe),i(!1),w("idle"),F.setAiReportActiveTab(D),F.syncProfileTabForReportTab(D),z.success("已载入示例初稿,可直接核对与采用");return}if(Ve&&!re){Re("示例路由未就绪,请刷新后重试");return}}if(!re&&!(Array.isArray(Te?.requirements)&&Te.requirements.length>0)&&(F.routingPlanStatusRef.current==="loading"||F.routingRequestInFlightRef.current)){const V=F.routingInFlightPromiseRef?.current;if(V){z.loading({key:pe,content:"正在准备初稿…",duration:0});const we=await Promise.race([V.then(fe=>({ok:fe,timedOut:!1})),new Promise(fe=>{window.setTimeout(()=>fe({ok:!1,timedOut:!0}),Hl)})]);!we.timedOut&&!we.ok&&(F.routingRequestInFlightRef.current=!1)}}try{Ra()||await ei()}catch{}const Me=F.jobRequirementRoutingPlanRef.current??F.jobRequirementRoutingPlan,de=id(Me,L,D);F.jobRequirementRoutingPlanRef.current=de,F.setJobRequirementRoutingPlan?.(de);const Ee=F.hasTrustedRoutingPlan(de,L),Ce=!Ee||Li(de);F.setAiReportActiveTab(D),F.syncProfileTabForReportTab(D),z.loading({key:pe,content:Ce?"正在快速生成初稿…":"AI 正在分析本模块…",duration:0}),!Ye&&!F.routingRequestInFlightRef.current&&!Ee&&F.handleJdRoutingPlanQuickResume({silent:!0,fullBudget:!0}),await N(se,Ce?{allowUntrustedPlan:!0}:void 0);return}catch(Te){console.error("[QR module analysis gate]",Te),Re("本模块分析失败,请稍后重试")}},[N]),ce=o.useRef(M);ce.current=M;const be=o.useCallback(W=>ce.current(W),[]);return{isAdapting:t,setIsAdapting:i,streamStatus:h,setStreamStatus:w,adaptAbortController:g,isPau
19sedRef:T,resumeResolverRef:A,adaptDepsRef:C,handleAiAdaptation:N,handleAiAdaptationForTab:_,handleGenerateTabWithRoutingGate:M,handleGenerateTabWithRoutingGateRef:ce,stableGenerateTabWithRoutingGate:be}}const nt=Object.freeze([]);function fn(t,i){if(i.reset)return t.current=i.empty,i.empty;if(!i.active)return t.current;const h=i.compute();return t.current=h,h}const Td={个人信息:"personalInfo",知识技能:"skills",工作经验:"experience",教育经历:"education",自我介绍:"selfIntro",求职意向:"jobIntent"},aa=[];function xd(t){const{decisionRuntimeReady:i,currentStep:h=1,aiReportActiveTab:w,tabReports:g,normalizedLocalJdText:T,jobRequirementRoutingPlan:A,displayRoutingPlan:C,decisionProfileCards:N,getNormalizedPlanByModule:_,getQuickResumeTabGenerationState:M}=t,ce=o.useRef(aa),be=o.useRef(new Map);return o.useMemo(()=>fn(ce,{active:h===1,reset:!i,empty:aa,compute:()=>{const W=w==="overview"?"知识技能":w,F=Td[W]||"",D=_(W),L=F?String(g[F]||""):"";let se=null;if(F&&L){const re=be.current.get(F);re&&re.source===L&&re.jd===T?se=re.parsed:(se=Y().parseAiReportMarkdown(L,{originalJdText:T}),be.current.set(F,{source:L,jd:T,parsed:se}))}const pe=F?M(W):"idle",Re=pe==="loading"?"loading":pe==="error"?"error":g[F]?"ready":"idle",Te=Ge(T),Ve=Ne(A,T)||Ne(C,T),Ye=Ni({companyName:Ve?.jdMeta?.companyName||Te.companyName,jdText:T});return B().buildDecisionReportSections(W,{routingPlan:Ve,modulePlan:D,planStatus:Re,jobTitle:Te.jobTitle,companyName:Ye,profileCards:N,actionCards:Array.isArray(se?.actionCards)?se.actionCards:[],jdText:T})}}),[w,h,N,i,C,_,M,A,T,g])}function Ed(t){const i=o.useRef(null),h=o.useRef(0),w=o.useCallback(()=>{h.current+=1,i.current=null},[]);return{hydrateDemoQuickResumeShowcase:o.useCallback(async()=>{const T=t.current;if(!T||Qe()==="account")return null;if(i.current)return i.current;T.activeScopeRef.current="demo";const A=h.current,C=(async()=>{const{buildDemoQuickResumeShowcaseSnapshot:N}=await rt(async()=>{const{buildDemoQuickResumeShowcaseSnapshot:W}=await import("./demoQuickResumeShowcase-PfBsrRkM.js");return{buildDemoQuickResumeShowcaseSnapshot:W}},__vite__mapDeps([76,77,43,1,2,34,42]));if(A!==h.current||T.activeScopeRef.current!=="demo"||Qe()==="account")return null;const _=N();if(A!==h.current||T.activeScopeRef.current!=="demo"||Qe()==="account")return null;T.restoreQuickResumeSnapshot(_);const M=Fs();T.setSelectedLibraryResume(M),T.setSelectedLibraryResumeName(M.resumeName),T.setUploadedResumeName(null),T.setUploadedFile(null),T.setPreviewUrl(null),T.setLocalJdText(_.jdState.localJdText),T.setIsExtracted(!0),T.setInputMode("content"),T.setUrlInput(""),T.setScreenshots([]);const ce=Number(_.currentStep),be=Number.isFinite(ce)?Math.max(0,Math.min(2,Math.trunc(ce))):1;T.setCurrentStep(be),T.setMountedSteps([be]),_.activeTab&&T.setActiveTab(T.normalizeQuickResumeActiveTab(_.activeTab)),T.sessionCacheRef.current.demo=_,T.setChromeInputs?.({jdText:String(_.jdState?.localJdText||""),resumeName:M.resumeName||null,resumeSource:M.resumeName?"library":null});try{T.activeScopeRef.current==="demo"&&Qe()!=="account"&&(An(_),pr(_.jdState),_.jobRequirementRoutingPlan?.requirements?.length?Cn(_.jobRequirementRoutingPlan):Yt())}catch(W){console.warn("Failed to persist demo quick resume showcase",W)}return _})();return i.current=C.finally(()=>{i.current===C&&(i.current=null)}),i.current},[t]),invalidateDemoHydrate:w,demoHydrateGenRef:h,demoHydratePromiseRef:i}}function Cd(t){const{currentParseSession:i,aiExtractedData:h}=t;return i?.source==="demo_library"||String(i?.id||"").startsWith("demo-resume-")||$t({currentParseSession:i,aiExtractedData:h})}const ca={names:[],emails:[],phones:[],photos:[],cities:[],links:[],detail:{},skills:[],experiences:[],companies:[],projects:[],educations:[],selfIntros:[]};function Ad(t){return t==="account"?"account":"demo"}function vd(t){return{applyDemoWorkbenchMode:o.useCallback(h=>{const w=t.current;if(!w)return;const g=Ad(h),T=w.sessionCacheRef.current[g],A=_=>{const M=Number.isFinite(_)?Math.max(0,Math.min(2,Math.trunc(_))):0;w.setCurrentStep(M),w.setMountedSteps([M])};if(g==="demo"){if(T?.aiExtractedData&&!w.isStaleDemoQuickResumeShowcaseCache(T)){
19w.setMountedSteps([]),w.restoreQuickResumeSnapshot(T);const _=Number(T.currentStep);A(Number.isFinite(_)?_:1),T.activeTab&&w.setActiveTab(w.normalizeQuickResumeActiveTab(T.activeTab)),w.activeScopeRef.current="demo",w.setChromeInputs?.({jdText:String(T.jdState?.localJdText||""),resumeName:T.selectedLibraryResumeName||null,resumeSource:T.selectedLibraryResumeName?"library":null});return}w.setMountedSteps([]),A(1),w.setActiveTab("skills"),w.activeScopeRef.current="demo",w.hydrateDemoQuickResumeShowcase();return}w.invalidateDemoHydrate();const C={currentParseSession:w.currentParseSessionRef.current,aiExtractedData:w.aiExtractedDataRef.current};(vn(C)||vn(T))&&(w.setChromeInputs?.({jdText:"",resumeName:null,resumeSource:null}),w.sessionCacheRef.current.account=En,w.clearQuickResumeWorkbenchState(),w.setProfileData({...ca}));const N=w.sessionCacheRef.current.account;if(N?.aiExtractedData&&!vn(N)){w.setMountedSteps([]),w.restoreQuickResumeSnapshot(N);const _=Number(N.currentStep);A(Number.isFinite(_)?_:0),N.activeTab&&w.setActiveTab(w.normalizeQuickResumeActiveTab(N.activeTab)),w.activeScopeRef.current="account",w.setChromeInputs?.({jdText:String(N.jdState?.localJdText||""),resumeName:N.selectedLibraryResumeName||N.uploadedResumeName||null,resumeSource:N.selectedLibraryResumeName?"library":N.uploadedResumeName?"local":null});return}if(Wr(C)&&C.aiExtractedData){w.activeScopeRef.current="account";return}w.setChromeInputs?.({jdText:"",resumeName:null}),w.setMountedSteps([]),A(0),w.setActiveTab("profile"),w.clearQuickResumeWorkbenchState(),w.setProfileData({...ca}),w.sessionCacheRef.current.account=En,w.activeScopeRef.current="account"},[t])}}const jd=o.lazy(()=>rt(()=>import("./ResumeLibraryPage-XT37F_qb.js"),__vite__mapDeps([78,2,1,79,55,56,57,13,80,22,23,81,82,51,52,53,54,75]))),Pd=t=>(t||"").includes("通用技能")?"general":(t||"").includes("行业公司业务知识")?"industry":"position",Aa=new Set(["profile","skills","exp","edu","intro","intent"]),qd={experience:"exp",education:"edu",selfIntro:"intro",jobIntent:"intent"},pn=t=>{const i=String(t||"").trim();return Aa.has(i)?i:qd[i]||"profile"},_d={个人信息:"profile",personalInfo:"profile",知识技能:"skills",skills:"skills",工作经验:"exp",experience:"exp",教育经历:"edu",education:"edu",自我介绍:"intro",selfIntro:"intro",求职意向:"intent",jobIntent:"intent"},Qs={personalInfo:"个人信息",skills:"知识技能",experience:"工作经验",education:"教育经历",selfIntro:"自我介绍",jobIntent:"求职意向"},la=Object.fromEntries(Object.entries(Qs).map(([t,i])=>[i,t])),xn=(t,i=0)=>{const h=Number(t);return Number.isFinite(h)?Math.max(0,Math.min(2,Math.trunc(h))):i},ua=(t,i,h)=>{const w=new Map;return t.forEach((g,T)=>{const A=h(g,T);A&&w.set(A,g)}),i.forEach((g,T)=>{const A=h(g,T);A&&!w.has(A)&&w.set(A,g)}),Array.from(w.values())},Fr={overview:{company:"-",position:"-",location:"-",salary:"-"},coreInsight:"",sections:[],rawText:"",actionCards:[]},Nd=t=>{const i=String(t?.assetType||"");return/修改|更改|新增|新建/.test(i)},Md=t=>{const i=Array.isArray(t?.rows)?t.rows:[],h=[],w=new Set;return i.forEach(g=>{const T=String(g?.requirementId||g?.JD条目ID||"").trim();(Array.isArray(g?.assetRefs)?g.assetRefs:[]).filter(Nd).forEach(C=>{const N=String(C?.assetRefId||"").trim(),_=String(C?.actionCardId||"").trim();if(!N||!_)return;const M=`${N}::${_}`;if(w.has(M))return;w.add(M);const ce=Array.isArray(C?.coveredRequirementIds)?C.coveredRequirementIds.map(String).filter(Boolean):[],be=ce.length?ce:T?[T]:[];h.push({requestId:`CGR-${N}`,assetRefId:N,actionCardId:_,requirementIds:be,actionType:/新增|新建/.test(String(C?.assetType||""))?"新建":"更改",assetType:C?.assetType||"",assetModule:C?.assetModule||"",assetId:C?.assetId,assetName:C?.assetName||C?.title||"",targetMainTab:C?.assetTargetMainTab||C?.targetMainTab||g?.mainTab||"",targetSubTab:C?.assetTargetSubTab||C?.targetSubTab||g?.subTab||""})})}),h},Dd=o.lazy(()=>rt(()=>import("./AiParseResultViews-AxdLDpU1.js"),__vite__mapDeps([83,2,1,32,13,84,85,69,36,37,38,4,5,3,6,7,39,65,64,60,50,62,46,47,61,66,67,86,87,77,76,43,34,42,88,89,28,90,91,92,93,94,79,55,56,57,54,95,96,97,98,99,100,101,102,103,104,105,106,107,108,63,35,109,110,45,
19111,112,113,114,115,68])).then(t=>({default:t.AiDetailsSection}))),va=({icon:t,title:i,color:h,text:w})=>k.jsxs("div",{style:{background:"linear-gradient(145deg, #ffffff, #fcfcfd)",border:"1px solid rgba(0, 0, 0, 0.04)",borderRadius:16,padding:24,boxShadow:"0 4px 16px rgba(0,0,0,0.02)",display:"flex",flexDirection:"column",gap:16,marginTop:16},children:[k.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[k.jsx("div",{style:{width:28,height:28,borderRadius:"50%",background:`${h}15`,display:"flex",alignItems:"center",justifyContent:"center",color:h,fontSize:14},children:t}),k.jsx("div",{style:{fontSize:16,fontWeight:700,color:"#1d1d1f"},children:i})]}),k.jsx("div",{style:{fontSize:14,color:"#4b5563",lineHeight:1.6,whiteSpace:"pre-wrap"},children:w})]}),Ld=(t,i)=>{if(!t||!t.sections)return null;const h=t.sections.find(w=>(w.title||"").includes(i));return h?k.jsx("div",{style:{display:"flex",flexDirection:"column",gap:0,marginTop:0},children:h.actionGuide?.expertAdvice&&k.jsx(va,{icon:k.jsx(Os,{}),title:"专家指引",color:"#34C759",text:h.actionGuide.expertAdvice})}):null},zr=t=>{const i=String(t||"").trim();return/create|新增|新建|全新|填补/i.test(i)?"新建":/modify|update|修改|改编|更改|重构|改写/i.test(i)?"修改":/delete|remove|删除/i.test(i)?"删除":"不变"};function Jd(t){if(!t?.layoutConfig)return{};try{return typeof t.layoutConfig=="string"?JSON.parse(t.layoutConfig):t.layoutConfig}catch{return{}}}function da(t){return{margin:"0 auto",background:"#ffffff",backgroundColor:"#ffffff",boxShadow:"0 4px 12px rgba(0,0,0,0.1)",...Pl(t)}}function Od(t){const i=Jd(t),h=t.locale??(t.resumeType?.includes("英文")?"en":"zh");return t.resumeData?k.jsx("div",{className:"resume-a4",style:da(i),children:k.jsx(o.Suspense,{fallback:k.jsx("div",{style:{padding:24,color:"#aeaeb2",fontSize:12},children:"简历预览加载中…"}),children:k.jsx(Ql,{data:t.resumeData,layoutConfig:i,locale:h})})}):t.generatedHtml&&t.generatedHtml.length>50?k.jsx("div",{className:"resume-a4",style:da(i),dangerouslySetInnerHTML:{__html:t.generatedHtml}}):null}const ma={fontSize:"10.5pt",lineHeight:1.5,pagePaddingTop:"18mm",pagePaddingBottom:"15mm",pagePaddingLeft:"20mm",pagePaddingRight:"20mm",sectionMargin:"14px",entryMargin:"10px",fontFamily:"serif",showAge:!0,showGender:!0,showStartWorkYear:!0,showPoliticalStatus:!0,showDegree:!0,showNationality:!0},$d={isQuickResumeMode:!0,disableFetch:!0,disableAutoSelectAll:!0,accentColor:jn},Kr={isQuickResumeMode:!0,disableFetch:!0,disableSelection:!0,disableAutoSelectAll:!0,accentColor:jn},gr={isQuickResumeMode:!0,resumeSelectionMode:!0,showAiActionTones:!0,disableAutoSelectAll:!0,disableSelectionSideEffects:!0,accentColor:Hr};function Gs(t,i){const{selection:h,useMockData:w,onBasicInfoUpdate:g,accentColor:T=We,readOnly:A=!1}=i,C={...gr,disableFetch:!0,accentColor:T,disableSelection:A,enableLibraryDeposit:!A&&w},N=_=>w?{mockData:t[_]||[],onMockDataUpdate:g?M=>g({...t,[_]:M}):void 0}:{prefetchedData:t[_]||[]};return k.jsxs(Bs,{children:[k.jsx(Ml,{...C,...N("names"),selectedRowKeys:A?[]:h.selectedNameIds,onSelectionChange:A?void 0:h.setSelectedNameIds,quickResumeProps:{...zn,label:"姓名",subtitle:"正式姓名、英文名或常用花名",enLabel:"NAME",icon:k.jsx(xl,{style:{fontSize:14,color:T}}),mapToCard:_=>({versionName:{formal:"正式中文名",nickname:"昵称",english:"英文简历名"}[_.nameType]||_.nameType||"未知",content:_.name})}}),k.jsx(Dl,{...C,...N("emails"),selectedRowKeys:A?[]:h.selectedEmailIds,onSelectionChange:A?void 0:h.setSelectedEmailIds,quickResumeProps:{...zn,label:"邮箱",subtitle:"用于接收面试邀请与笔试链接",enLabel:"EMAIL",icon:k.jsx(El,{style:{fontSize:14,color:T}}),mapToCard:_=>({versionName:_.purpose||"未知类型",content:_.email})}}),k.jsx(Ll,{...C,...N("phones"),selectedRowKeys:A?[]:h.selectedPhoneIds,onSelectionChange:A?void 0:h.setSelectedPhoneIds,quickResumeProps:{...zn,label:"手机",subtitle:"保持通信畅通,用于接收通知",enLabel:"PHONE",icon:k.jsx(Cl,{style:{fontSize:14,color:T}}),mapToCard:_=>({versionName:_.phoneType||"未知类型",content:_.phone})}}),k.jsx(Jl,{...C,...N("photos"),selectedRowKeys:A||h.selectedPhotoId==null?[]:[h.selectedPhotoId],onSelectionChange:A?void 0:_=>h.setSelectedPhotoId(_[0]??null),quickResumeProps:{...zn,label:"照片",subtitle:"建议上传清晰专业的近期职业照",enLabel:"PHOTO",icon:k.jsx(Al,{style:{fontSize:14,color:T}}),mapToCard:_=>({versionName:_.photoType||"类型",content:_.originalName||"已上传照片"})}}),k.jsx(Ol,{...C,...N("cities"),selectedRowKeys:A?[]:h.selectedCityIds,onSelectionChange:A?void 0:h.setSelectedCityIds,quickResumeProps:{...zn,label:"城市",subtitle:"当前所在地及期望工作的城市",enLabel:"CITY",icon:k.jsx(vl,{style:{fontSize:14,color:T}}),mapToCard:_=>({versionName:_.cityType||"城市",content:_.city})}}),k.jsx($l,{...C,...N("links"),selectedRowKeys:A?[]:h.selectedLinkIds,onSelectionChange:A?void 0:h.setSelectedLinkIds,quickResumeProps:{...zn,label:"社交链接",subt
19itle:"多维度展示个人特质的平台主页",enLabel:"SOCIAL LINKS",icon:k.jsx(jl,{style:{fontSize:14,color:T}}),mapToCard:_=>({versionName:_.platform?_.platform.charAt(0).toUpperCase()+_.platform.slice(1):"链接",content:_.url})}})]})}function Qd(t,i){return k.jsxs(k.Fragment,{children:[Gs(t,{useMockData:!0,selection:i.selection,onBasicInfoUpdate:i.onBasicInfoUpdate,accentColor:i.accentColor??We}),k.jsx(o.Suspense,{fallback:k.jsx("div",{style:{padding:12,color:"#aeaeb2",fontSize:12},children:"详情加载中…"}),children:k.jsx(Dd,{data:t||{},onUpdate:h=>i.onBasicInfoUpdate({...t||{},...h}),aiSuggestionCards:i.aiSuggestionCards||[],accentColor:i.accentColor??We})})]})}function ja(t,i=jn,h){return k.jsx(Bs,{children:k.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[k.jsx(pa,{fieldMode:"position",...gr,accentColor:i,selectedRowKeys:t.selectedJobIntentIds,onSelectionChange:t.setSelectedJobIntentIds,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ha,{isQuickResumeMode:!0,accentColor:i,disableFetch:h?.disableFetch===!0,prefetchedData:h?.salaryExpectations??null,selectedRowKeys:t.selectedSalaryIds,onSelectionChange:t.setSelectedSalaryIds}),k.jsx(fa,{...gr,accentColor:i,selectedRowKeys:t.selectedIntendedCityIds,onSelectionChange:t.setSelectedIntendedCityIds,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ga,{...gr,accentColor:i,selectedRowKeys:t.selectedIntendedJobTypeIds,onSelectionChange:t.setSelectedIntendedJobTypeIds,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ba,{...gr,accentColor:i,selectedRowKeys:t.selectedJobStatusIds,onSelectionChange:t.setSelectedJobStatusIds,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ya,{accentColor:i})]})})}const zn={aiSuggestionCards:[],mapped:!1,hcpSelection:void 0,hideIfEmpty:!1};function Bd(t=!1,i=We){return null}function Ud(t){return t?[t.names,t.emails,t.phones,t.photos,t.cities,t.links,t.skills,t.experiences,t.companies,t.projects,t.educations,t.selfIntros].map(h=>Array.isArray(h)?h.length:0).every(h=>h===0):!0}function Fd(t){const i=Ud(t),w=Qe()==="account"?"档案库暂无已保存数据。上方提取结果来自简历解析,可逐卡入库或一键全部入库;也可在「求职资产管理」中添加。":"当前模块暂无记录。可勾选上方 AI 提取结果并入库,或前往求职资产管理添加。";return k.jsxs("div",{style:{marginBottom:12},children:[k.jsx("span",{style:{display:"inline-block",fontSize:13,fontWeight:600,color:"#86868b",background:"rgba(142, 142, 147, 0.08)",padding:"4px 10px",borderRadius:6,lineHeight:1.4},children:"我的求职档案库"}),i&&k.jsx("div",{style:{marginTop:10,fontSize:12,color:"#86868b",lineHeight:1.6},children:w})]})}function zd(t){return t?[t.names,t.emails,t.phones,t.photos,t.cities,t.links].every(i=>!Array.isArray(i)||i.length===0):!0}function Hd(t,i,h=!1){return zd(t)?null:Gs(t,{useMockData:!1,selection:i,accentColor:jn,readOnly:h})}function Kd(t,i=!1,h){return i?k.jsx(Bs,{children:k.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[k.jsx(pa,{fieldMode:"position",...Kr,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ha,{isQuickResumeMode:!0,accentColor:jn,disableFetch:h?.disableFetch===!0,prefetchedData:h?.salaryExpectations??null,selectedRowKeys:t.selectedSalaryIds,onSelectionChange:t.setSelectedSalaryIds}),k.jsx(fa,{...Kr,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ga,{...Kr,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ba,{...Kr,quickResumeProps:{aiSuggestionCards:[]}}),k.jsx(ya,{accentColor:jn})]})}):ja(t,jn,h)}function Wd({externalChrome:t=!1}={}){const i=Kl(),h=i?.setBodyPaintReady,w=o.useRef(h);w.current=h;const[g,T]=o.useState(!0),[A,C]=o.useState(!1);o.useEffect(()=>{const e=()=>{C(!!document.querySelector(".zc-mobile-shell, .zc-mobile-shell-device, .mobile-app-shell"))};e();const n=[50,200,600].map(r=>window.setTimeout(e,r));return()=>n.forEach(r=>window.clearTimeout(r))},[]);const N=o.useCallback(e=>{T(e),w.current?.(!e)},[]);o.useEffect(()=>()=>{Yo(),ia(),Wo()},[]);const[_,M]=o.useState(!1);o.useEffect(()=>{let e=!1,n=null,r=null,s=null;const l=()=>{e||N(!1)},u=vs();if(t&&Qe()==="demo")return s=window.setTimeout(l,4e3),()=>{e=!0,s!=null&&window.clearTimeout(s)};if(t){const b=window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{e||l()})});return s=window.setTimeout(l,800),()=>{e=!0,window.cancelAnimationFrame(b),s!=null&&window.clearTimeout(s)}}const p=window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{e||("requestIdleCallback"in window?n=window.requestIdleCallback(l,{timeout:u?240:480}):r=window.setTimeout(l,u?40:120))})});return s=window.setTimeout(l,1200),()=>{e=!0,window.cancelAnimationFrame(p),n!=null&&"cancelIdleCallback"in window&&window.cancelIdleCallback(n),r!=null&&window.clearTimeout(r),s!=null&&window.clearTimeout(s)}},[t,N]);const[ce,be]=o.useState([]),W=o.useRef([]);W.current=ce;
19const[F,D]=o.useState(!1);o.useEffect(()=>{if(g){M(!1);return}},[g]),o.useLayoutEffect(()=>{h&&h(!g)},[h,g]);const[L,se]=o.useState(()=>vs()?xn(Wl(),0):0),pe=i?.shellStep,Re=i?.setShellStep,Te=i?.setAnalysisBusy,Ve=i?.stepNavEpoch??0,Ye=o.useRef(L);Ye.current=L,o.useEffect(()=>{if(!t||pe==null)return;const e=xn(pe,Ye.current);e!==Ye.current&&(be(n=>n.includes(e)?n:[...n,e]),o.startTransition(()=>se(e)))},[t,pe]),o.useEffect(()=>{!t||!Re||Re(L,{fromHeavy:!0})},[L,t,Re]);const[re,Me]=o.useState(()=>hu());o.useEffect(()=>{if(g||re||L!==1&&L!==2)return;let e=!1;return Bo().then(()=>{e||Me(!0)}),rt(()=>import("./QuickResumeDecisionReportPanel-CVd8H-r1.js"),__vite__mapDeps([116,2,1,117,28,13,16,61,36,37,38,4,5,3,6,7,39,118,119,120,67])),()=>{e=!0}},[g,L,re]);const[de,Ee]=o.useState(()=>Bu());o.useEffect(()=>{if(g||L!==1||de)return;let e=!1;return Xo().then(()=>{e||Ee(!0)}),()=>{e=!0}},[g,L,de]),o.useEffect(()=>{if(g)return;const e=L;return Ju(()=>{js(0),js(1,{heavyPanels:e===1}),js(2),Mi(),ei(),e===1&&(Bo(),Xo())},{timeout:e===1?400:1200})},[g,L]),o.useEffect(()=>{let e=!1;const n=()=>{e||rt(()=>import("./ResumeLibraryPage-XT37F_qb.js"),__vite__mapDeps([78,2,1,79,55,56,57,13,80,22,23,81,82,51,52,53,54,75]))},r=window.setTimeout(n,g?600:200);return()=>{e=!0,window.clearTimeout(r)}},[g]),o.useEffect(()=>{g||be(e=>e.includes(L)?e:[...e,L])},[g,L]);const[Ce,Je]=o.useState(!1),[V,we]=o.useState(null),[fe,X]=o.useState(null),[Be,Ue]=o.useState(null);o.useEffect(()=>{if(!fe)return;const e=URL.createObjectURL(fe);return Ue(n=>{if(n&&n.startsWith("blob:")&&n!==e)try{URL.revokeObjectURL(n)}catch{}return e}),()=>{try{URL.revokeObjectURL(e)}catch{}}},[fe]);const[Ae,le]=o.useState(!1),[ot,Xe]=o.useState(!1),[kt,at]=o.useState(()=>typeof window<"u"&&window.matchMedia("(max-width: 900px)").matches?.5:1),[ie,Oe]=o.useState(null),[me,_e]=o.useState(null),[v,Ct]=o.useState(null),ne=_&&Ce,[ue,Se]=o.useState({names:[],emails:[],phones:[],photos:[],cities:[],links:[],detail:{},skills:[],experiences:[],companies:[],projects:[],educations:[],selfIntros:[]}),ke=o.useMemo(()=>ju(ue),[ue]),[P,ve]=o.useState(null);o.useEffect(()=>{if(fe||Be&&!Be.startsWith("blob:")&&!Be.startsWith("data:"))return;const e=Gt(P?.filePath);e&&Ue(e)},[fe,Be,P?.filePath]);const[je,De]=o.useState(!1),[Pe,qe]=o.useState("screenshot"),[H,Ze]=o.useState("");o.useEffect(()=>{!g||!t||vs()||!(v||fe||me||V&&String(V).length>0||typeof H=="string"&&H.trim().length>0)||N(!1)},[g,t,v,fe,me,V,H,N]);const[Zt,en]=o.useState([]),[Ji,et]=o.useState(!1),[oe,Le]=o.useState(0),ut=o.useRef(null),[pt,wt]=o.useState(""),[ee,ct]=o.useState({}),[ni,Kn]=o.useState(null),[_t,Oi]=o.useState("知识技能"),[Nt,Wn]=o.useState(()=>new Set),[Rr,qn]=o.useState(()=>new Set),[tt,_n]=o.useState({}),{isAdapting:it,setIsAdapting:Nn,streamStatus:Pa,setStreamStatus:Mn,adaptAbortController:bn,isPausedRef:Vs,resumeResolverRef:qa,adaptDepsRef:_a,handleAiAdaptation:Na,handleAiAdaptationForTab:Ma,handleGenerateTabWithRoutingGate:Da,handleGenerateTabWithRoutingGateRef:La,stableGenerateTabWithRoutingGate:Ys}=Id(),lt=Ru(),Gn=o.useRef(!0),Dn=o.useRef(null);o.useEffect(()=>(Gn.current=!0,z.destroy(),Nn(!1),Mn("idle"),Mt(e=>e==="loading"?"idle":e),()=>{Gn.current=!1,bn.current?.abort(),Dn.current&&(clearInterval(Dn.current),Dn.current=null),lt.stop(),z.destroy()}),[]);const It=o.useRef(!1);o.useEffect(()=>{const e=n=>{const r=String(n.detail?.from||"");r&&r!=="/toolbox/quick-resume"||(It.current=!0,ia(),M(!1),be([]),D(!0),N(!0),Dn.current&&(clearInterval(Dn.current),Dn.current=null),bn.current?.abort())};return window.addEventListener(Go,e),()=>window.removeEventListener(Go,e)},[]);const Ja=e=>e==="account"?"account":"demo",ze=o.useRef(Ja(Qe())),xe=o.useRef(Wu()),Xs=o.useRef(null),Zs=o.useRef(null),$i=o.useCallback(()=>{ct({}),Kn(null),Ft([]),xt([]),Bn([]),Wn(new Set),qn(new Set),_n({}),fi(null)},[]),{jobRequirementRoutingPlan:ye,setJobRequirementRoutingPlan:Bt,routingPlanStatus:Ln,setRoutingPlanStatus:Mt,routingTabFilter:Vn,setRoutingTabFilter:Yn,routingPlanErrorDetails:eo,setRoutingPlanErrorDetails:Jn,routingHelpersReady:ri,isRoutingPlanReady:Qi,staleRoutingValidationErrors:Bi,normalizedLocalJdText:$,jobRequirementRoutingPlanRef:to,routingPlanStatusRef:no,routingRequestInFlightRef:Ui,routingInFlightPromiseRef:Fi,abortJdRoutingFlight:Oa,handleJdRoutingPlanQuickResumeRef:$a,silentRoutingAttemptsRef:Qa,silentRoutingJdKeyRef:Ba,prevJdFingerprintRef:Ua,getRoutingPlanValidationErrors:Sr,validateRoutingPlan:Fa,hasTrustedRoutingPlan:za,handleJdRoutingPlanQuickResume:zi,clearRoutingStateForNewJd:ro}=ld({shellOnly:g,currentStep:L,localJdText:H,tabReports:ee,aiSuggestions:ni,isAdapting:it,activeScopeRef:ze,resetAiArtifacts:$i,onJdChangeClearSession:e=>na(e),adaptBridge:{aiEngineProgress:lt,adaptAbortController:bn,isPausedRef:Vs,pageMountedRef:Gn,setIsAdapting:Nn,setStreamStatus:Mn,setAiReportActiveTab:Oi,setTabReports:ct}}),io=o.useCallback(()=>{$i(),ro()},[ro,$i]),Ha=o.useCallback(e=>{na(e)},[]),{jdAnalysisPanelExpanded:Ka,setJdAnalysisPanelExpanded:so,overallAnalysisResult:kr,setOverallAnalysisResult:wr,overallAnalysisLoading:Ir,setOverallAnalysisLoading:Tr,overallAnalysisStale:Wa,setOverallAnalysisStale:ii,overallAnalysisError:Ga,setOverallAnalysisError:On,scoringConfig:Hi,setScoringConfig:Va,scoringRulesEditorOpen:Ya,setScoringRulesEditorOpen:Xa,scoringRulesHubTab:Za,openScoringRulesHub:oo,decisionDimensionWeightsByTab:ec,setDecisionDimensionWeightsByTab:ao,decisionSectionalRulesOpen:tc,setDecisionSectionalRulesOpen:nc,leftReportView:si,setLeftReportView:oi,moduleAnalysisControls:Xn,setModuleAnalysisControlsStable:rc,overallAnalysisFingerprintRef:Zn,syncOverallAnalysisStale:co}=yd();o.useEffect(()=>{Te&&Te(it)},[it,Te]),o.useEffect(()=>()=>{Te?.(!1)},[Te]);const ai=o.useRef(lt);ai.current=lt,o.useEffect(()=>{!t||pe==null||xn(pe,Ye.current)===1||it&&(bn.current?.abort(),Nn(!1),Mn("idle"),ai.current.stop(),z.destroy("quick-resume-ai-adaptation"))},[t,pe,it,Nn,Mn,bn]);const lo=o.useRef(it);lo.current=it,o.useEffect(()=>{!t||Ve<=0||!lo.current&&!ai.current.progress||(bn.current?.abort(),Nn(!1),Mn("idle"),ai.current.stop(),z.destroy("quick-resume-ai-adaptation"))},[t,Ve,Nn,Mn,bn]),o.useEffect(()=>{it||lt.progress&&lt.stop()},[it,lt.progress,lt.stop]);const ge=o.useMemo(()=>{const e=Hn(ye);if(!ri||!e)return e;try{return Hn(he().normalizeJobRequirementRoutingPlan(e,$))}catch(n){return console.error("[QR displayRoutingPlan]",n),e}},[ye,$,ri]),Ki=o.useMemo(()=>Y().buildRoutingSourceIdLookupMap(ge||ye),[ge,ye]),Wi=o.useMemo(()=>Y().buildRoutingSourceIdLookupBySubTab(ge||ye),[ge,ye]),Gi=o.useMemo(()=>Y().buildJobIntentSourceIdLookupBySubTab(ge||ye),[ge,ye]),ic=o.useRef(nt),sc=o.useRef(nt),oc=o.useRef(nt),ac=o.useRef(Fr),cc=o.useRef(nt),lc=o.useRef(nt),uc=o.useRef(nt),dc=o.useRef(nt),ft=o.useMemo(()=>fn(ic,{active:L!==0,reset:!ri,empty:nt,compute:()=>{try{const e=he(),n=e.buildRoutingJdSourceTextMap(ge,$);return od(e.enforceRoutingMappingCardinality(e.withImpliedIndustryRoutingRequirements(ge?.requirements||[]).map(s=>({...s,assetRole:e.getRoutingAssetRole(s),targetMappings:Vt(e.normalizeRoutingMappingsByDeterministicGuards(s,
19Vt(s.targetMappings)))})))).flatMap(s=>{const l=Vt(s.targetMappings).length?Vt(s.targetMappings):[{mainTab:"不进入档案资产",subTab:"不进入档案资产",reason:s.excludedReason||"不适合进入档案资产"}],u=e.formatRoutingEvidenceWithSourceIds(s,n),p=Y().resolveRoutingDisplayBucket(s,u),b=Y().getRoutingSupplementReasonLabel(s.sourceType);return l.map((m,a)=>({key:`${s.requirementId}-${a}`,sourceId:e.getRoutingDisplaySourceId(s),requirementId:s.requirementId,sourceType:s.sourceType,sourceText:u,standardRequirement:s.standardRequirement,displayBucket:p,supplementReason:b,priority:e.normalizeRoutingPriority(s.priority),mainTab:m.mainTab,subTab:e.normalizeRoutingSubTab(m.mainTab,m.subTab,e.getRoutingRequirementText(s)),reason:m.reason||s.excludedReason||"-",rowSpan:a===0?l.length:0}))})}catch(e){return console.error("[QR routingPlanTableRows]",e),nt}}}),[L,ge,$,ri]),uo=o.useMemo(()=>fn(sc,{active:L!==0,empty:nt,compute:()=>he().buildRoutingJdSourceRows(ge,$).map(e=>({key:e.sourceId,sourceText:e.text,sourceId:e.sourceId}))}),[L,ge,$]),Ut=o.useMemo(()=>fn(oc,{active:L!==0,empty:nt,compute:()=>Y().buildJdIdCentricMappingRows(ge,ft,$)}),[L,ge,ft,$]),ci=o.useMemo(()=>Ut.length+ft.filter(e=>e.displayBucket!=="jd_explicit").length,[Ut,ft]),li=o.useMemo(()=>Y().buildRoutingTabBucketStats(ft,ea,Ut),[ft,Ut]);o.useEffect(()=>{if(Ln!=="ready"||Vn==="全部"||!ci)return;const e=li.find(n=>n.tab===Vn);(!e||e.total===0)&&Yn("全部")},[ci,Ln,Vn,li]);const mc=()=>k.jsx("div",{style:{background:"#fff",borderRadius:12,padding:"0 12px 12px",overflow:"visible"},children:Qi?k.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,overflow:"visible"},children:[k.jsx(ku,{value:Vn,onChange:Yn,totalCount:ci,tabStats:li}),k.jsx(ql,{rows:ft,tabOrder:ea,tabFilter:Vn,jdSourceTableRows:uo,routingPlan:ge,jdText:$,jdMappingRows:Ut})]}):Ln==="loading"?k.jsx(_l,{progress:lt.progress?.taskType==="jdRouting"?lt.progress:void 0,title:"平台正在拆解 JD",subtitle:"正在把长岗位描述整理成清晰的分配表",size:96,minHeight:180,variant:"quick-resume"}):Ln==="error"||Bi.length>0?k.jsxs("div",{style:{minHeight:220,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,color:"#86868b",padding:24},children:[k.jsx(yl,{style:{fontSize:40,color:"#ff3b30"}}),k.jsx("div",{style:{fontSize:14,fontWeight:600},children:"拆解JD原文失败"}),k.jsx("div",{style:{fontSize:12,textAlign:"center",maxWidth:400},children:eo[0]||Bi[0]||"当前结果未通过 HCP-0 校验,请重新拆解"}),k.jsx(ln,{size:"small",type:"primary",className:"quick-resume-step-confirm-btn",loading:it&&Ln==="loading",disabled:it,onClick:()=>zi({force:!0}),children:"重新拆解"})]}):k.jsxs("div",{style:{minHeight:220,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,color:"#86868b",padding:24},children:[k.jsx(Os,{style:{fontSize:40,color:We}}),k.jsx("div",{style:{fontSize:14,fontWeight:600},children:"暂无 JD 原文分配结果"}),k.jsx("div",{style:{fontSize:12},children:"点击「拆解JD原文」按钮,将由平台对 JD 深度分析并生成此表"})]})});o.useEffect(()=>{const e=lt.progress;if(!it||!e){z.destroy("quick-resume-ai-adaptation");return}const n=()=>{const s=lt.progress;s&&z.loading({key:"quick-resume-ai-adaptation",content:Y().buildAiEngineToastContent({...s,elapsedMs:Date.now()-s.startedAt}),duration:0})};n();const r=window.setInterval(n,1e3);return()=>{window.clearInterval(r),z.destroy("quick-resume-ai-adaptation")}},[it,lt.progress?.startedAt,lt.progress?.taskType]);const Ie=o.useMemo(()=>fn(ac,{active:L===1,reset:g||!v,empty:Fr,compute:()=>{const e=Object.entries(ee).filter(([,b])=>!!b);if(!e.length)return Fr;const n=[],r=[],s=new Set,l={};e.forEach(([b,m])=>{try{const a=Qs[b]||b,c=Y().parseAiReportMarkdown(m,{preferredMainTab:a,originalJdText:H});if(l[b]=c,c?.moduleHcpPlan?.rows?.length){const R=c.moduleHcpPlan.mainTab||a;s.has(R)||(s.add(R),n.push(c.moduleHcpPlan))}Array.isArray(c?.moduleHcpPlans)&&c.moduleHcpPlans.forEach(R=>{const S=R.mainTab||"模块概览";s.has(S)||(s.add(S),n.push(R))}),Array.isArray(c?.actionCards)&&r.push(...c.actionCards)}catch(a){console.warn("[QuickResume] Failed to parse tab report",b,a)}});let u=l.skills||l[Object.keys(l)[0]||""]||null;if(!u&&n.length)try{u=Y().parseAiReportMarkdown(`\`\`\`json
20${JSON.stringify({schemaVersion:"ai-profile-customization/v1",generationMode:"two_stage_v1",moduleHcpPlan:n[0],actionCards:r},null,2)}
21\`\`\``,{originalJdText:H})}catch(b){console.warn("[QuickResume] Failed to parse merged module plan",b)}const p={...u||Fr,moduleHcpPlans:n,moduleHcpPlan:u?.moduleHcpPlan||n.find(b=>(b.mainTab||"").includes("知识技能"))||n[0]||null,actionCards:r};return Y().rebuildSectionsFromModulePlans(p)}}),[v,L,H,g,ee]),xr=G.useMemo(()=>Y().normalizeExtractedBasicInfoOnly(v?.basicInfo),[v?.basicInfo]),$n=G.useMemo(()=>{const e=(typeof Be=="string"&&Be.startsWith("blob:")?Be:null)||Gt(Be)||Gt(P?.filePath)||null;if(fe||V&&e){const n=fe?.name||V||"";return fe?.type?.startsWith("image/")||e?.match(/\.(jpeg|jpg|gif|png)$/i)?{kind:"image",url:e}:(n.toLowerCase().endsWith(".pdf")||e?.toLowerCase().endsWith(".pdf"))&&e?{kind:"pdf",url:e}:null}return me?.resumeData||me?.generatedHtml?{kind:"library",record:me}:me?.filePath?.toLowerCase().endsWith(".pdf")?{kind:"pdf",url:me.filePath}:me?.filePath?.toLowerCase().match(/\.(jpeg|jpg|gif|png)$/)?{kind:"image",url:me.filePath}:null},[fe,V,Be,me,P?.filePath]);o.useEffect(()=>{const e=typeof window<"u"&&window.matchMedia("(max-width: 900px)").matches;at(e?.5:1)},[Be,fe,me?.id,V]);const Dt=G.useMemo(()=>{const e=Array.isArray(v?.education)?v.education:[];return{...xr,educations:e}},[v?.education,xr]),mo=G.useCallback(()=>{const e=[],n=new Set,r=s=>{if(!s?.rows?.length)return;const l=Y().ensurePersonalInfoBaselineRows(s,Dt,Dt.educations||[],"extracted");if(!l?.rows?.length)return;const u=JSON.stringify(l.rows.map(p=>`${p?.requirementId||""}:${p?.subTab||""}:${p?.action||""}`));n.has(u)||(n.add(u),e.push(l))};return r(Ie?.moduleHcpPlan),Object.values(ee||{}).forEach(s=>{if(s)try{r(Y().parseAiReportMarkdown(String(s),{originalJdText:H})?.moduleHcpPlan)}catch{}}),e},[H,Ie?.moduleHcpPlan,Dt,ee]),Vi=G.useMemo(()=>fn(cc,{active:L===1,reset:g||!v,empty:nt,compute:()=>{const e=[...Ie?.actionCards||[],...Object.entries(ee||{}).flatMap(([n,r])=>{if(!r)return nt;try{return Y().parseAiReportMarkdown(String(r),{originalJdText:H})?.actionCards||nt}catch(s){return console.warn("[QuickResume] Failed to parse personal info cards",s),nt}})];return Y().buildPersonalInfoDisplayCards({actionCards:e,modulePlans:mo(),extractedBasicInfo:v?.basicInfo,requirementIdToSubTab:he().PERSONAL_INFO_ROUTING_REQUIREMENT_ID_TO_SUB_TAB})}}),[v,mo,L,H,Ie,g,ee]),pc=G.useMemo(()=>Y().filterPersonalInfoDisplayCards(Vi,{profileData:{detail:{}},extractedBasicInfo:v?.basicInfo}),[v?.basicInfo,Vi]),Yi=G.useMemo(()=>fn(lc,{active:L===1,reset:g||!v,empty:nt,compute:()=>{const e=c=>String(c||"").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),n=c=>c?c.payload&&typeof c.payload=="object"?c.payload:c:{},r=Array.isArray(v?.education)?v.education:[],s=(c,R)=>{const S=[c?.originalName,R?.originalName,R?.originalEducationName,R?.universityName,R?.schoolName,R?.name,c?.title,c?.assetName,c?.name,c?.module].map(e).filter(Boolean);return r.find(f=>{const d=e(f?.universityName||f?.schoolName||""),I=e([f?.universityName,f?.schoolName,f?.degree,f?.major].filter(Boolean).join("-"));return S.some(x=>{const q=e(x.split(/[--—]/)[0]||x);return d&&q&&(d===q||d.includes(q)||q.includes(d))?!0:I===x||I.includes(x)||x.includes(I)})})||null},l=c=>{const R=e(c);return!R||/应基于该原卡生成修改卡|修改卡应|补强边界|不能为了匹配而编造|不得编造|不得新增无法核验|贴近原学校\/专业事实|贴近原学校/.test(R)?"":R},u=c=>{const R=e(c);return R?/修改内容|更改自|建议|应该|应当|需要|保留|结合|目标岗位|岗位相关|岗位相符|补强|边界|原卡|修改卡|actionCard|不得|不能|不要|编造|可核验|真实院校|真实专业|教育背景相关性/.test(R):!1},p=(c,R)=>{if(Array.isArray(c)){const f=c.map(d=>e(d)).filter(d=>d&&!u(d));return f.length?f:R}const S=e(c);return!S||u(S)?R:c},b=[],m=new Set,a=(c,R,S)=>{const f=`${c?.tab||""} ${c?.module||""} ${c?.targetMainTab||""}`;if(!f.includes("教育经历")&&!/education/i.test(f))return;const d=n(c.payload),I=zr(c.actionType||d?.action||d?.strategy);if(I==="不变"||I==="删除")return;const q=I==="修改"?(()=>{const E=s(c,d)||he().resolveEducationOriginalFromPlanRow(S,r);if(E)return E;const j=(S?.assetRefs||[]).find(Z=>Z?.assetType==="原卡");if(!j)return null;const O=String(j?.assetName||"").split(/[--—]/).map(Z=>
21Z.trim()).filter(Boolean);return O.length?{id:j?.assetId,universityName:O[0],degree:O[1]||"",major:O.slice(2).join("-")||""}:null})():null;if(I==="修改"&&!q)return;const U=c?.actionCardId||c?.id||c?.assetRefId||`quick-edu-card-${R}`,te=e(d?.universityName||d?.schoolName||d?.name||q?.universityName||c?.title||c?.module||"AI建议补充学历"),J=e(d?.degree||q?.degree),Q=e(d?.major||q?.major),K=`${I}:${te}:${J}:${Q}:${e(q?.id||c?.assetRefId)}`;if(m.has(K))return;m.add(K);const y={...q||{},...d,id:U,universityName:te,universityNameEn:d?.universityNameEn||q?.universityNameEn,degree:d?.degree||q?.degree||"",major:d?.major||q?.major||"",courses:I==="修改"?p(d?.courses,q?.courses):p(d?.courses,void 0),achievements:I==="修改"?q?.achievements:p(d?.achievements,void 0),universityDesc:I==="修改"?p(d?.universityDesc||d?.intro||d?.description||c?.content,B().buildEducationModifySeedDescription(q,S?.jdRequirement||c?.jdRequirement||H)):p(d?.universityDesc||d?.intro||d?.description,void 0),isMock:!0,mockType:I,strategy:I,cardKind:I==="修改"?"modified":"created",originalName:c?.originalName||d?.originalName||q?.universityName||"",originalEducationId:q?.id,assetRefId:c?.assetRefId,actionCardId:c?.actionCardId||c?.id,changeSummary:I==="修改"?"":l(d?.changeSummary||c?.content||d?.description||"新增教育背景补充卡。")};I==="修改"&&y.universityDesc===q?.universityDesc&&(y.universityDesc=B().buildEducationModifySeedDescription(q,S?.jdRequirement||c?.jdRequirement||H)),b.push(y)};return(Ie?.actionCards||[]).forEach((c,R)=>{a(c,`main-${R}`)}),Object.entries(ee||{}).forEach(([c,R])=>{if(!R)return;const S=Y().parseAiReportMarkdown(String(R),{originalJdText:H});(S?.actionCards||[]).forEach((d,I)=>{a(d,`${c}-${I}`)});const f=S?.moduleHcpPlan;((f?.mainTab||"").includes("教育")||c==="education")&&(f?.rows||[]).forEach((d,I)=>{(d?.assetRefs||[]).forEach((x,q)=>{/修改|新增/.test(String(x?.assetType||""))&&a({...x,actionType:x.assetType,actionCardId:x.actionCardId,assetRefId:x.assetRefId,content:x.content||x.payload?.payload?.description,title:x.assetName,tab:"教育经历",module:"教育经历",targetMainTab:"教育经历",jdRequirement:d?.jdRequirement},`${c}-plan-${I}-${q}`,d)})})}),b}}),[v,L,H,Ie,g,ee]),fc=G.useMemo(()=>{const e=n=>(n?.rows||[]).some(r=>r?.action==="修改");return e(Ie?.moduleHcpPlan)?!0:Object.values(ee||{}).some(n=>{if(!n)return!1;try{const r=Y().parseAiReportMarkdown(String(n),{originalJdText:H});return e(r?.moduleHcpPlan)}catch{return!1}})},[H,Ie?.moduleHcpPlan,ee]),ui=G.useMemo(()=>{const e=[...Array.isArray(v?.selfIntro)?v.selfIntro:[],...Array.isArray(v?.selfIntros)?v.selfIntros:[]],n=new Set;return e.map((r,s)=>({...r,id:r?.id??s+1,name:r?.name||r?.versionName||r?.title||`自我介绍版本${s+1}`,content:r?.content||r?.text||r?.description||""})).filter(r=>{const s=String(r.id??`${r.name}|${r.content}`);return n.has(s)?!1:(n.add(s),!0)})},[v?.selfIntro,v?.selfIntros]),Xi=G.useMemo(()=>fn(uc,{active:L===1,reset:g||!v,empty:nt,compute:()=>{const e=a=>String(a||"").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),n=a=>{const c=e(a).replace(/\s+/g,"");return!c||/^JD定制自我介绍[--—]?REQ[--—]?\d+$/i.test(c)||/^自我介绍[--—]?(当前岗位|REQ[--—]?\d+)$/i.test(c)||/^待生成自我介绍[--—]?REQ[--—]?\d+$/i.test(c)||/^REQ[--—]?\d+$/i.test(c)||c==="岗位定制自我介绍"||c==="当前JD自我介绍"||c==="表达汇报"},r=(a,c,R)=>{const S=e(c.name||c.versionName||a.title||a.assetName);if(!n(S))return S;const f=e([R,a.content,c.description,c.summary,a.assetName,a.title].filter(Boolean).join(" "));let d="岗位定制";return/Web3|区块链|DeFi|钱包|交易所|Telegram|Discord|社群/i.test(f)?/增长|转化|拉新|留存|活跃|用户/i.test(f)?d="Web3社群增长":d="Web3运营":/产品运营|用户增长|增长|转化|留存|活跃|DAU|GMV|CTR/i.test(f)?d="产品运营增长":/商务|BD|拓展|合作/i.test(f)?d="商务拓展运营":/数据|指标|分析|策略/i.test(f)?d="数据驱动运营":/英文|英语|海外|跨文化/i.test(f)&&(d="海外沟通运营"),`${d}自我介绍`},s=a=>a?a.payload&&typeof a.payload=="object"?a.payload:a:{},l=a=>{const c=[a?.tab,a?.module,a?.assetModule,a?.assetTargetMainTab,a?.targetMainTab,a?.mainTab,a?.subTab,a?.assetName,a?.title].filter(
21Boolean).join(" ");return/自我介绍|selfIntro/i.test(c)},u=(a,c)=>e(c.content||c.introduction||c.selfIntro||c.summary||c.description||a.content||a.description||""),p=(a,c)=>{const R=s(a.payload),S=u(a,R),f=c||a.actionCardId||a.id||a.assetRefId;if(!S&&!f)return;const d=r(a,R,S),I=`${f||d}:${e(S)}`;m.has(I)||(m.add(I),b.push({id:a.actionCardId||a.id||a.assetRefId||c||`quick-self-intro-${b.length}`,name:d,title:`[新建] ${d}`,content:B().resolveSelfIntroCardSeed(S,{jdRequirement:a.jdRequirement,versionName:d,action:"CREATE"}),isMock:!0,mockType:"新增",strategy:"新增",cardKind:"created",actionType:"新增",assetRefId:a.assetRefId,actionCardId:a.actionCardId||a.id,payload:a.payload||a}))},b=[],m=new Set;return Ie?.actionCards&&Ie.actionCards.forEach(a=>{l(a)&&p(a)}),Object.entries(ee||{}).forEach(([a,c])=>{if(c)try{(Y().parseAiReportMarkdown(String(c),{originalJdText:H})?.actionCards||[]).forEach((S,f)=>{l(S)&&p(S,`${a}-${f}`)})}catch{}}),b.length<=1?b:[...b].sort((a,c)=>e(c.content).length-e(a.content).length).slice(0,1).map(a=>({...a,id:a.id||"quick-self-intro-merged"}))}}),[v,L,H,Ie,g,ee]),Zi=G.useMemo(()=>fn(dc,{active:L===1,reset:g||!v,empty:nt,compute:()=>{const e=[],n=[];Object.values(ee||{}).forEach(f=>{if(f)try{const d=Y().parseAiReportMarkdown(String(f),{originalJdText:H});d&&n.push(d)}catch(d){console.warn("[QuickResume] Failed to parse job intent tab report",d)}});const r=n.flatMap(f=>Array.isArray(f?.actionCards)?f.actionCards:[]),s=f=>String(f||"").replace(/^(?:新增卡|新建卡|修改卡|更改卡|原卡)[::\-\s]*/i,"").replace(/^求职意向[\/\\\-\s]*/i,"").replace(/^(?:意向职位&期望薪资|意向职位|期望薪资|求职状态&最快到岗时间|求职状态|最快到岗时间|意向城市|意向工作性质|工作性质)[\/\\\-\s]*/i,"").replace(/^[一二三四五六七八九十百千万]+[、..\s]*/,"").replace(/^\d+[、..\s]*/,"").trim(),l=(f,d)=>s(f?.assetName||f?.title||d?.jobTitle||d?.desiredRole||d?.status||d?.city||d?.desiredCity||d?.jobType||f?.content);r.length>0&&r.forEach(f=>{if(f.tab==="求职意向"||f.tab==="jobIntent"){const d=f.payload?.payload||f.payload||{},I=`${f.module||""} ${f.title||""} ${f.assetName||""} ${f.sectionTitle||""}`;let x=String(d.type||f.type||f.intentKind||"");x||(/工作性质|意向工作性质|工作类型|jobType|intendedJobType|employmentType/i.test(I)?x="intendedJobType":/求职状态|最快到岗|到岗|入职|jobStatus|available|onboard|status/i.test(I)?x="jobStatus":/意向城市|期望城市|工作城市|desiredCity|intendedCity|location/i.test(I)?x="intendedCity":x="jobIntent");const q=l(f,d),te=q.match(/(\$?\d+(?:,\d{3})?\s*[-~到至]\s*\$?\d+(?:,\d{3})?\s*\/?\s*(?:month|月)?|\d+\s*[kKwW]\s*[-~到至]\s*\d+\s*[kKwW]|面议)/i)?.[0]?.trim(),J=x==="jobIntent"?s(q.replace(te||"","").replace(/岗位职责[::].*$/i,"").trim()):void 0;e.push({...f,id:f.id||f.actionCardId||f.assetRefId||`fallback-${f.actionCardId||f.assetRefId||Math.random().toString(36).slice(2,9)}`,title:f.title||f.assetName||"求职意向建议",content:f.content,isMock:!0,mockType:zr(f.actionType),strategy:zr(f.actionType),cardKind:/修改|更改|UPDATE/i.test(String(f.actionType||zr(f.actionType)))?"modified":"created",intentKind:x,jobTitle:f.jobTitle||d.jobTitle||d.desiredRole||J||(x==="jobIntent"?q:void 0),salary:f.salary||d.salary||d.expectedSalary||d.salaryExpectation||te,status:f.status||d.status||(x==="jobStatus"?q:void 0),earliestDate:f.earliestDate||d.earliestDate||d.availableFrom||d.onboardTime,city:f.city||d.city||d.desiredCity||(x==="intendedCity"?q:void 0),jobType:f.jobType||d.jobType||(x==="intendedJobType"?q:void 0),payload:{...f.payload||{},type:x,payload:{...d,type:x,jobTitle:f.jobTitle||d.jobTitle||d.desiredRole||J||(x==="jobIntent"?q:void 0),salary:f.salary||d.salary||d.expectedSalary||d.salaryExpectation||te,status:f.status||d.status||(x==="jobStatus"?q:void 0),earliestDate:f.earliestDate||d.earliestDate||d.availableFrom||d.onboardTime,city:f.city||d.city||d.desiredCity||(x==="intendedCity"?q:void 0),jobType:f.jobType||d.jobType||(x==="intendedJobType"?q:void 0)}}})}});const u=f=>{const d=String(f||"");return/全新|新建|新增|重造|填补/.test(d)?"新增":/高阶|改编|更改|修改|重构|改写/.test(d)?"修改":/无需|无须|不变|直接|保留|已满足|采用|原卡/.test(d)?"不变":d||"不变"},p=f=>{const d=String(f||"").replace(/^(?:有[--—]|原卡[::]|候选原卡[::]|待确认原卡[::]|修改卡[::]|改写卡[::]|新增卡[::]|新建卡[::])\s*/,"").replace(/^求职意向[\//\--—::\s]*/i,"").replace(/^(?:意向职位&期望薪资|意向职位|期望薪资|求职状态&最快到岗时间|求职状态|最快到岗时间|意向城市|意向工作性质|工作性质)[\//\--—::\s]*/i,"").replace(/^[一二三四五六七八九十百千万]+[、..]\s*/,"").replace(/^\d+[、..)]\s*/,"").trim(),I=d.match(/https?:\/\/[^\s]+/i);return I?I[0].trim():d.trim()},b=f=>{const d=[f?.rawCol0,f?.moduleCategory,f?.mainTab,f?.subTab,f?.assetModule].filter(
21Boolean).join(" ");return d.includes("求职意向")||d.includes("意向职位")||d.includes("意向城市")||d.includes("求职状态")||d.includes("工作性质")||d.includes("意向工作性质")},m=[];n.forEach(f=>{f?.sections?.forEach(I=>{I.tableData?.forEach(x=>{b(x)&&m.push(x)})}),[...f?.moduleHcpPlan?[f.moduleHcpPlan]:[],...Array.isArray(f?.moduleHcpPlans)?f.moduleHcpPlans:[]].forEach(I=>{(String(I?.mainTab||I?.moduleKey||"").includes("求职意向")||String(I?.mainTab||I?.moduleKey||"").includes("jobIntent"))&&(I?.rows||[]).forEach(q=>m.push(q))})});const a=f=>r.length?r.some(d=>{const I=String(d.actionCardId||d.assetRefId||""),x=String(f.actionCardId||""),q=String(f.assetRefId||"");return!!(x&&I===x||q&&I===q||d.assetRefId&&q&&String(d.assetRefId)===q)}):!1,c=new Set;m.forEach(f=>{const d=u(f.rawCol4||f.action||f.更改策略);d!=="修改"&&d!=="新增"||Array.isArray(f.assetRefs)&&f.assetRefs.forEach(I=>{const x=String(I?.assetType||I?.type||"");if(!(x.includes("修改")||x.includes("新增")||x.includes("新建")||x.includes("改写")||x.includes("Modify")||x.includes("Create"))||a(I))return;const U=I.payload?.payload||I.payload||{},te=U.jobTitle||U.desiredRole||U.status||U.city||U.desiredCity||U.jobType||I.displayText||I.assetName||"";if(!te)return;const J=p(te);if(!J)return;const Q=String(I.assetRefId||I.actionCardId||te);if(c.has(Q))return;c.add(Q);let K="jobIntent";const y=`${I.assetModule||""} ${I.assetName||""} ${I.displayText||""} ${f?.rawCol0||""} ${f?.subTab||""}`.toLowerCase();/工作性质|意向工作性质|工作类型|jobtype|intendedjobtype|employmenttype/i.test(y)?K="intendedJobType":/求职状态|到岗|入职|jobstatus|available|onboard|status/i.test(y)?K="jobStatus":/城市|意向城市|期望城市|工作城市|intendedcity|desiredcity|location/i.test(y)&&(K="intendedCity");let E=J,j="面议",O=J,Z="暂未确定",ae=J,$e="主要城市",Fe=J;if(K==="jobIntent"){const Pt=J.match(/(\d+k-\d+k|\d+万-\d+万|\d+w-\d+w|面议)/i);Pt&&(j=Pt[0],E=J.replace(Pt[0],"").replace(/[--—\s:]+$/,"").trim()||J),E=p(U.jobTitle||U.desiredRole||E),j=U.salary||U.expectedSalary||U.salaryExpectation||j}else if(K==="jobStatus"){const Pt=J.split(/[--—\s,,]/).map(Tn=>Tn.trim()).filter(Boolean);Pt.length>1&&(O=Pt[0],Z=Pt.slice(1).join(" ")),O=p(U.status||O),Z=U.earliestDate||U.availableFrom||U.onboardTime||Z}else K==="intendedCity"?ae=p(U.city||U.desiredCity||ae):K==="intendedJobType"&&(Fe=p(U.jobType||Fe));const Ke={jobTitle:E,salary:j,status:O,earliestDate:Z,city:ae,cityType:$e,jobType:Fe,type:K};e.push({id:`fallback-${I.assetRefId||I.actionCardId||Math.random().toString(36).substr(2,9)}`,title:I.assetName||I.displayText||"求职意向建议",content:J,isMock:!0,mockType:d==="修改"?"修改":"新建",strategy:d==="修改"?"修改":"新建",cardKind:d==="修改"?"modified":"created",actionType:d==="修改"?"Modify":"Create",intentKind:K,assetRefId:I.assetRefId||I.actionCardId,actionCardId:I.actionCardId||I.assetRefId,jobTitle:E,salary:j,status:O,earliestDate:Z,city:ae,cityType:$e,jobType:Fe,payload:{type:K,payload:Ke,...Ke}})})});const R=[],S=new Set;return e.forEach(f=>{const d=f.payload?.payload||f.payload||{},I=[f.intentKind||d.type||"",f.assetRefId||f.actionCardId||f.id||"",f.jobTitle||d.jobTitle||d.desiredRole||"",f.salary||d.salary||d.expectedSalary||"",f.status||d.status||"",f.earliestDate||d.earliestDate||d.onboardTime||"",f.city||d.city||d.desiredCity||"",f.jobType||d.jobType||"",f.content||""].map(x=>String(x||"").trim()).join("|");I.replace(/\|/g,"")&&(S.has(I)||(S.add(I),R.push(f)))}),R}}),[v,L,H,g,ee]),er=G.useMemo(()=>{const e=n=>{const r=n?.payload?.payload||n?.payload||{},s=String(n?.intentKind||r?.type||n?.type||"");if(s)return s;const l=`${n?.title||""} ${n?.module||""} ${n?.sectionTitle||""} ${n?.assetName||""} ${n?.content||""}`;return/工作性质|意向工作性质|工作类型|jobType|intendedJobType|employmentType/i.test(l)?"intendedJobType":/求职状态|最快到岗|到岗|入职|jobStatus|available|onboard|status/i.test(l)?"jobStatus":/意向城市|期望城市|工作城市|desiredCity|intendedCity|location/i.test(l)?"intendedCity":"jobIntent"};return Zi.reduce((n,r)=>{const s=e(r);return n[s]=n[s]||[],n[s].push(r),n},{jobIntent:[],jobStatus:[],intendedCity:[],intendedJobType:[]})},[Zi]),He=G.useMemo(()=>{const e=v?.experience||{};return{companies:Array.isArray(e.companies)?e.companies:[],projects:Array.isArray(e.projects)?e.projects:[],workExps:Array.isArray(e.workExps)?e.workExps:[]}},[v]),gt=G.useMemo(()=>{const e=s=>String(s||"").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),n=new Map,r=new Map;
21return He.companies.forEach(s=>{s?.id!==void 0&&s?.id!==null&&n.set(String(s.id),s)}),He.projects.forEach(s=>{s?.id!==void 0&&s?.id!==null&&r.set(String(s.id),s)}),He.workExps.map((s,l)=>{const u=s?.projectId!==void 0&&s?.projectId!==null?r.get(String(s.projectId)):null,p=s?.companyId!==void 0&&s?.companyId!==null?n.get(String(s.companyId)):null,b=u?.companyId!==void 0&&u?.companyId!==null?n.get(String(u.companyId)):null,m=p||b||null,a=e(s.companyName||s.company?.name||m?.name||m?.companyName),c=e(s.projectName||s.project?.name||u?.name||u?.projectName),R=c||a,S=e(s.workContentName||s.shortName||s.title||s.name||s.roleTitle),f=s.starDescription||s.description||s.content||s.deepDiveDetail||"";return{...s,id:s.id??`quick-work-${l}`,workContentId:s.id??`quick-work-${l}`,company:a?{...m||{},id:m?.id??s.companyId,name:a}:void 0,project:c?{...u||{},id:u?.id??s.projectId,name:c,companyId:u?.companyId??m?.id}:void 0,companyName:a,projectName:c,parentName:R,parentType:c?"project":a?"company":"unknown",roleTitle:s.roleTitle||s.jobTitle||s.role||m?.position||u?.roleTitle||"",workContentName:S,shortName:S,starDescription:f,description:f,originalNameForUpdate:R&&S?`${R} - ${S}`:"",companyOrProject:R,itemTitle:S,content:f}}).filter(s=>s.workContentName||s.description)},[He]),dt=G.useMemo(()=>ua(Array.isArray(ue?.skills)?ue.skills:[],Array.isArray(v?.skills)?v.skills:[],(e,n)=>{if(e?.id!==void 0&&e?.id!==null)return`id:${e.id}`;const r=String(e?.name||e?.skillName||"").trim();return r?`name:${r}`:`extracted-skill-${n}`}),[v?.skills,ue?.skills]),Qn=G.useMemo(()=>Array.isArray(v?.skills)?v.skills:[],[v?.skills]),gc=G.useMemo(()=>ua(Array.isArray(ue?.experiences)?ue.experiences:[],gt,(e,n)=>{const r=e?.id??e?.workContentId;if(r!=null)return`id:${r}`;const s=String(e?.workContentName||e?.shortName||e?.originalNameForUpdate||"").trim();return s?`label:${s}`:`extracted-exp-${n}`}),[ue?.experiences,gt]),bc=G.useMemo(()=>({companies:Array.isArray(ke?.companies)?ke.companies:[],projects:Array.isArray(ke?.projects)?ke.projects:[],workExps:Array.isArray(ke?.workExps)&&ke.workExps.length>0?ke.workExps:Array.isArray(ke?.experiences)?ke.experiences:[]}),[ke?.companies,ke?.experiences,ke?.projects,ke?.workExps]),hn=G.useMemo(()=>{const e=[],n=new Set,r=u=>{if(!u)return;[...u.moduleHcpPlan?[u.moduleHcpPlan]:[],...Array.isArray(u.moduleHcpPlans)?u.moduleHcpPlans:[]].forEach(b=>{const m=JSON.stringify({mainTab:b?.mainTab,subTab:b?.subTab,rows:b?.rows});if(n.has(m))return;n.add(m);const a=Y().normalizeModulePlan(b,u.actionCards||[],{sourceJdText:H,experiences:gt,companies:He.companies,projects:He.projects,candidateOriginalAssetIds:u.candidateOriginalAssetIds||[],profileData:Dt,educations:Dt.educations||[],sourceMode:"quickResume",personalInfoContextMode:"extracted"});a&&e.push(a)})};r(Ie),(!Array.isArray(Ie?.moduleHcpPlans)||Ie.moduleHcpPlans.length===0)&&Object.values(ee).forEach(u=>{if(u)try{r(Y().parseAiReportMarkdown(u,{originalJdText:H}))}catch(p){console.warn("[QuickResume] Failed to normalize tab report",p)}});const s=Ne(ye,H)||Ne(ge,H),l=Ge(H);return e.map(u=>{const p=String(u.module||u.mainTab||"");return p.includes("工作经验")?Y().applyWorkExperienceJdMirrorToModulePlan(u,s,ft,H,{jdCentricRows:Y().getWorkExperienceMirrorSourceRows(Ut,ft),sourceMode:"quickResume",archiveContext:"quickResume",experiences:gt,companies:He.companies,projects:He.projects}):p.includes("知识技能")?Y().syncKnowledgeSkillNormalizedPlan(u,{jdText:H,companyName:s?.jdMeta?.companyName||"",jobTitle:l.jobTitle||"",librarySkills:dt,routingRequirements:s?.requirements||[]}):u})},[v?.basicInfo,ge,ye,Ie,dt,Dt,ee,H,He,gt,Ut,ft]),bt=G.useCallback(e=>{const n=/工作经验|experience/i.test(e);return hn.find(r=>{const s=`${r?.mainTab||""} ${r?.module||""} ${r?.moduleKey||""}`;return s.includes(e)||n&&/experience/i.test(s)})||null},[hn]),es=G.useMemo(()=>{const e=bt("自我介绍");if(!e?.rows?.length)return[];const n=Ge(H).jobTitle||"",r=p=>String(p||"").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),s=p=>p?.payload?.payload||p?.payload||{},l=[],u=new Set;return(e.rows||[]).filter(p=>p?.rowValidationStatus!=="invalid").forEach(p=>
21{(p.assetRefs||[]).forEach(b=>{if(b?.validationStatus==="invalid"||!/修改卡|新增卡/.test(String(b?.assetType||"")))return;const m=String(b?.assetRefId||b?.actionCardId||"");if(!m||u.has(m))return;u.add(m);const a=s(b),c=r(a.content||b.content||""),R=B().buildSelfIntroVersionName(p?.selfIntroEvaluation?.jobTitle||n,a.name||a.versionName||b.assetName||p?.assetName),S=b.assetType==="修改卡"?"修改":"新增",f=R,d=B().formatSelfIntroActionCardTitle(R,S==="修改"?"更改":"新建",p?.selfIntroEvaluation?.jobTitle||n);l.push({id:b.actionCardId||b.assetRefId||`quick-self-intro-plan-${l.length}`,name:f,title:d,content:B().resolveSelfIntroCardSeed(c,{jdRequirement:p?.jdRequirement,versionName:R,action:"CREATE"}),isMock:!0,mockType:S,strategy:S,cardKind:S==="修改"?"modified":"created",actionType:S==="修改"?"更改":"新建",assetRefId:b.assetRefId,actionCardId:b.actionCardId,payload:b.payload||b})})}),l},[bt,H]),ts=G.useMemo(()=>{const e=[],n=new Set;return[...es,...Xi].forEach(r=>{const s=String(r?.assetRefId||r?.actionCardId||r?.id||r?.name||"");!s||n.has(s)||(n.add(s),e.push(r))}),e},[Xi,es]),di=G.useMemo(()=>{const e=B().mergeAdoptedCardsForTab(tt,"自我介绍");if(!e.length)return[];const n=r=>String(r||"").replace(/\[(更改|修改|新建)\]\s*/g,"").replace(/\s+/g,"").toLowerCase();return e.map(r=>{const s=ts.find(l=>{if(r.assetRefId&&String(l?.assetRefId||"")===String(r.assetRefId)||r.actionCardId&&String(l?.actionCardId||"")===String(r.actionCardId))return!0;const u=n(r.name||r.title),p=n(l?.name||l?.title);return!!(u&&p&&(u===p||u.includes(p)||p.includes(u)))});return s?{...s,...r,name:r.name||s.name,title:r.title||s.title,content:r.content||s.content,isMock:!0,mockType:r.mockType||s.mockType||"更改"}:r})},[tt,re,ts]),hc=di.length>0||Array.from(Nt).some(e=>e.startsWith("自我介绍|")),yc=di.some(e=>/更改|修改/.test(String(e?.mockType||e?.actionType||""))),po=G.useCallback(e=>{const n=la[e]||e,r=String(ee[n]||"").trim();if(bt(e)?.rows?.length)return"ready";if(!r)return"idle";if(/AI 正在全速拆解/.test(r))return"loading";try{const l=Y().parseAiReportMarkdown(r,{preferredMainTab:Qs[n]||e,originalJdText:H});if(l?.moduleHcpPlan?.rows?.length||l?.moduleHcpPlans?.some(p=>Array.isArray(p?.rows)&&p.rows.length>0))return"ready";if(l?.generationMode==="deterministic_plan_error"||String(l?.validation?.status||"").trim()==="error")return"error"}catch{return"error"}return r.includes("```json")?"error":"idle"},[bt,H,ee]),Rc=G.useMemo(()=>{const e=Ie||Fr;if(!hn.length)return e;const n={...e,sections:[...e.sections||[]]},r=Ne(ye,$)||Ne(ge,$),s=r?.requirements||[],l=Ge($),u=["JD条目ID","同行业同岗位标准","JD原文要求","库中是否已有","专家判定","更改策略","对应资产/生成卡片"];return hn.forEach(p=>{let b=[];try{b=Y().buildNormalizedPlanTableRows(p,{jdText:$,companyName:r?.jdMeta?.companyName||"",jobTitle:l.jobTitle||"",librarySkills:dt,routingRequirements:s,routingLookup:Ki,subTabLookup:Wi,jobIntentSubTabLookup:Gi,sourceMode:"quickResume"})}catch(c){console.warn("[QuickResume] Failed to build module overview rows",p?.module||p?.mainTab,c);return}if(!b.length)return;const m=p.module||p.mainTab||"模块概览";/工作经验|experience/i.test(String(m))&&(b=Y().calibrateWorkExperienceOverviewRows(b,r,ft,$,{jobTitle:l.jobTitle||"",jdCentricRows:Y().getWorkExperienceMirrorSourceRows(Ut,ft),sourceMode:"quickResume",experiences:gt,companies:He.companies,projects:He.projects})),/自我介绍|selfIntro/i.test(String(m))&&(b=B().normalizeSelfIntroOverviewRows(b,l.jobTitle||""));const a=n.sections.findIndex(c=>String(c?.title||"").includes(m));if(a<0){n.sections.push({id:`module-hcp-plan-${m}`,title:m,jdPerspective:"",diagnosis:"",actionGuide:{coreAction:"",details:[],expertAdvice:"",exampleText:""},subSections:[],tableHeaders:u,tableData:b});return}n.sections[a]={...n.sections[a],title:n.sections[a].title||m,tableHeaders:n.sections[a].tableHeaders||u,tableData:b}}),n},[Ie,hn,ge,ye,$,dt,Ut,ft,Ki,Wi,Gi]),Sc=G.useCallback(e=>{const n=bt(e),r=Array.isArray(n?.rows)?n.rows:[];return n&&r.length===0?k.jsx(va,{icon:k.jsx(Os,{}),title:"模块状态",color:"#86868b",text:"本 JD 未向该模块分配可处理要求"}):Ld(Ie,e)},[bt,Ie]),kc=G.useCallback(e=>{if(e.planStatus==="idle"){z.warning("请先生成本模块分析,再采用建议");return}const n=Ne(ye,$)||Ne(ge,$),r=B().buildAdoptedCardsFromSection(e,{jdText:$,jobTitle:Ge($).jobTitle,companyName:n?.jdMeta?.companyName||"",librarySkills:dt}),s=B().buildAdoptSelectionPatch(e,r),l=(u,p,b)=>{let m=[...u];return b.forEach(a=>{m=m.filter(c=>String(c)!==String(a))}),p.forEach(a=>{m.some(c=>
21String(c)===String(a))||m.push(a)}),m};if(e.mainTab==="知识技能"){const u=r.flatMap(p=>un(p));o.startTransition(()=>{Ft(p=>l(p,[...s.skillIdsToAdd,...u],s.skillIdsToRemove))})}if(e.mainTab==="工作经验"){const u=r.flatMap(p=>un(p));o.startTransition(()=>{xt(p=>l(p,[...s.expIdsToAdd,...u],s.expIdsToRemove))})}o.startTransition(()=>{Wn(u=>new Set([...u,e.key])),qn(u=>{const p=new Set(u);return e.items.forEach(b=>p.add(B().buildDecisionItemAdoptKey(b))),p}),_n(u=>({...u,[e.key]:r}))}),Ai(e.mainTab),z.success(r.length>0?`已采用「${e.subTab}」,右侧已显示 ${r.length} 张建议卡。可点击整体分析查看三面分数变化。`:`已确认「${e.subTab}」。可点击整体分析查看三面分数变化。`)},[ge,ye,$,dt]),wc=G.useCallback((e,n,r)=>{if(e.planStatus==="idle"){z.warning("请先生成本模块分析,再采用建议");return}const s=r?.itemKey||B().buildDecisionItemAdoptKey(n);if(Rr.has(s)){z.info("该条已在右侧采用");return}const l=r?.afterContent?{...n,previewContent:r.afterContent}:n,u=Ne(ye,$)||Ne(ge,$),p=B().buildAdoptedCardsFromItems(e,[l],{jdText:$,jobTitle:Ge($).jobTitle,companyName:u?.jdMeta?.companyName||"",librarySkills:dt}).map(a=>({...a,__decisionItemKey:s})),b=B().buildAdoptSelectionPatchForItems(e,[l],p),m=(a,c,R)=>{let S=[...a];return R.forEach(f=>{S=S.filter(d=>String(d)!==String(f))}),c.forEach(f=>{S.some(d=>String(d)===String(f))||S.push(f)}),S};if(e.mainTab==="知识技能"){const a=p.flatMap(c=>un(c));o.startTransition(()=>{Ft(c=>m(c,[...b.skillIdsToAdd,...a],b.skillIdsToRemove))})}if(e.mainTab==="工作经验"){const a=p.flatMap(c=>un(c));o.startTransition(()=>{xt(c=>m(c,[...b.expIdsToAdd,...a],b.expIdsToRemove))})}o.startTransition(()=>{Wn(a=>new Set([...a,e.key])),qn(a=>new Set([...a,s])),_n(a=>{const c=(a[e.key]||[]).filter(R=>R.__decisionItemKey!==s);return{...a,[e.key]:[...c,...p]}})}),Ai(e.mainTab),z.success(`已采用「${n.title}」,仅更新该条到右侧。`)},[Rr,ge,ye,$,dt]),fo=G.useMemo(()=>B().mergeAdoptedCardsForTab(tt,"个人信息"),[tt,re]),ht=G.useMemo(()=>B().mergeAdoptedCardsForTab(tt,"工作经验"),[tt,re]),mi=G.useMemo(()=>{const e=B().mergeAdoptedCardsForTab(tt,"教育经历");if(!e.length)return[];const n=r=>String(r||"").replace(/\[(更改|修改|新建)\]\s*/g,"").replace(/\s+/g,"").toLowerCase();return e.map(r=>{const s=Yi.find(l=>{if(r.assetRefId&&String(l?.assetRefId||"")===String(r.assetRefId)||r.actionCardId&&String(l?.actionCardId||"")===String(r.actionCardId))return!0;const u=n(r.universityName||r.title||r.originalName),p=n(l?.universityName||l?.title||l?.originalName);return!!(u&&p&&(u===p||u.includes(p)||p.includes(u)))});return s?{...s,...r,universityName:r.universityName||s.universityName,degree:r.degree||s.degree,major:r.major||s.major,startYear:r.startYear||s.startYear,endYear:r.endYear||s.endYear,courses:Array.isArray(r.courses)&&r.courses.length?r.courses:s.courses,universityDesc:r.universityDesc||s.universityDesc,achievements:r.achievements||s.achievements,isMock:!0,mockType:r.mockType||s.mockType||"更改"}:r})},[tt,Yi,re]),Ic=mi.length>0||Array.from(Nt).some(e=>e.startsWith("教育经历|")),Tc=mi.some(e=>/更改|修改/.test(String(e?.mockType||e?.actionType||""))),st=G.useMemo(()=>{const e=n=>String(n||"").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim();return{companies:He.companies.map((n,r)=>({...n,id:n.id??`quick-company-${r}`,name:e(n.name||n.companyName||n.title)})).filter(n=>n.name),projects:He.projects.map((n,r)=>({...n,id:n.id??`quick-project-${r}`,name:e(n.name||n.projectName||n.title)})).filter(n=>n.name),workExps:He.workExps.map((n,r)=>({...n,id:n.id??`quick-work-${r}`,shortName:e(n.shortName||n.workContentName||n.title||n.name),starDescription:n.starDescription||n.description||n.content||"",isMock:!0,mockType:"原有"})).filter(n=>n.shortName)}},[He]),yn=G.useMemo(()=>{const e=y=>String(y||"").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),n=y=>{const E=e(y);return!!(!E||/待生成|待确认|待补充|占位|placeholder|pending/i.test(E)||/REQ[-_-—]?\d+/i.test(E)||/^O{1,2}\d+$/i.test(E))},r=y=>y?y.payload&&typeof y.payload=="object"?y.payload:y:{},s=st.companies.map(y=>({...y,isMock:!0,mockType:"原有"})),l=st.projects.map(y=>({...y,isMock:!0,mockType:"原有"}
21)),u=st.workExps.map(y=>({...y,isMock:!0,mockType:"原有"})),p=bt("工作经验"),b={companies:[],projects:[],workExps:[]},m=new Map,a=new Map;[...s,...b.companies].forEach(y=>m.set(e(y.name).toLowerCase(),y)),[...l,...b.projects].forEach(y=>a.set(e(y.name).toLowerCase(),y));let c=-9e3;const R=y=>{const E=e(y);if(n(E))return null;const j=E.toLowerCase(),O=m.get(j);if(O)return O;const Z={id:c--,name:E,isMock:!0,mockType:"新增"};return b.companies.push(Z),m.set(j,Z),Z},S=(y,E)=>{const j=e(y);if(n(j))return null;const O=j.toLowerCase(),Z=a.get(O);if(Z)return Z;const ae=E?R(E):null,$e={id:c--,name:j,companyId:ae?.id,isMock:!0,mockType:"新增"};return b.projects.push($e),a.set(O,$e),$e},f=y=>e(y.shortName||y.workContentName||y.title||y.name),d=(...y)=>{const E=y.map(e).find(Boolean)||"";if(!E)return"";const j=E.replace(/^(?:原卡|修改卡|新增卡|更改卡|新建卡)[::]\s*/,"").replace(/^工作经验[\/\\]\s*/,"").trim(),O=j.split(/\s*[--—]\s*/).map(Z=>Z.trim()).filter(Boolean);return O.length>=3&&O[0]==="工作经验"||O.length>=2&&/^工作经验/.test(O[0])?O[O.length-1]:j},I=(y,E)=>{const j=e(y),O=d(E);return u.find(Z=>{const ae=f(Z);return j&&(ae===j||j.includes(ae))||O&&ae===O})||null},x=y=>{const E=y?.assetId;if(E!=null){const j=u.find(O=>String(O.id)===String(E)||String(O.workContentId||"")===String(E));if(j)return j}return I(y?.originalName,d(y?.assetName,y?.displayText))},q=y=>{if(y==null)return null;const E=b.companies.find(O=>String(O.id)===String(y));if(E)return E;const j=s.find(O=>String(O.id)===String(y));return j?(b.companies.push(j),m.set(e(j.name).toLowerCase(),j),j):null},U=y=>{if(y==null)return null;const E=b.projects.find(Z=>String(Z.id)===String(y));if(E)return E;const j=l.find(Z=>String(Z.id)===String(y));if(!j)return null;const O=j.companyId;return O!=null&&q(O),b.projects.push(j),a.set(e(j.name).toLowerCase(),j),j},te=y=>y?(b.workExps.find(j=>String(j.id)===String(y.id))||b.workExps.push(y),y.projectId!==void 0&&y.projectId!==null&&U(y.projectId),y.companyId!==void 0&&y.companyId!==null&&q(y.companyId),y):null,J=[];Array.isArray(Ie?.actionCards)&&J.push(...Ie.actionCards),Object.values(ee||{}).forEach(y=>{if(y)try{const E=Y().parseAiReportMarkdown(String(y),{originalJdText:H});Array.isArray(E?.actionCards)&&J.push(...E.actionCards)}catch(E){console.warn("[QuickResume] Failed to parse experience action cards",E)}});const Q=[];p?.rows?.length?p.rows.forEach(y=>{String(y?.rowValidationStatus||"valid")==="valid"&&(y.assetRefs||[]).forEach(E=>{if(String(E?.validationStatus||"valid")!=="valid")return;if(/原卡/i.test(String(E?.assetType||""))){te(x(E));return}if(!/修改|更改|新增|新建/i.test(String(E?.assetType||"")))return;const j=J.find(Ke=>String(Ke?.actionCardId||Ke?.id||"")===String(E?.actionCardId||"")||String(Ke?.assetRefId||"")===String(E?.assetRefId||"")),O=r(j?.payload||E?.payload),Z=/新增|新建/i.test(String(E?.assetType||j?.actionType||""))?"新增":"修改",ae=B().resolveWorkExperienceCardSeed({asset:E,row:y,action:Z==="新增"?"CREATE":"UPDATE",parentName:E?.cardDraft?.parentName||E?.__polishContext?.parentName,projectName:O.projectName||E?.payload?.payload?.projectName,companyName:O.companyName||E?.payload?.payload?.companyName,originalName:j?.originalName||O.originalName||E?.originalName,originalDescription:O.starDescription||O.description}),$e={...E?.__polishContext||{},jdRequirement:y?.rawRow?.jdRequirement||y?.jdRequirement||E?.__polishContext?.jdRequirement,standardRequirement:y?.rawRow?.standardRequirement||y?.standardRequirement||E?.__polishContext?.standardRequirement,expertJudgement:y?.rawRow?.expertJudgement||y?.expertJudgement||y?.rawCol5,parentName:ae.parentName,projectName:ae.projectName,companyName:ae.companyName},Fe=ae.seedDescription;Q.push({action:Z,body:{...O,workContentName:ae.workContentName,projectName:ae.projectName||O.projectName,companyName:ae.companyName||O.companyName,starDescription:Fe,description:Fe},content:Fe,assetRefId:E?.assetRefId,actionCardId:E?.actionCardId||j?.actionCardId,originalName:j?.originalName||O.originalName||E?.originalName||"",workName:ae.workContentName,polishContext:$e,parentName:ae.parentName,projectName:ae.projectName||O.projectName||$e.projectName,companyName:ae.companyName||O.companyName||$e.companyName})})}):J.length&&J.forEach(y=>{const E=`${y?.tab||""} ${y?.module||""} ${y?.targetMainTab||""}`;if(!E.includes("工作经验")&&!/experience/i.test(E))return;const j=r(y.payload);Q.push({action:zr(y.actionType)==="新增"?"新增":"修改",body:j,content:y.content||j.starDescription||j.description||"",assetRefId:y.assetRefId,actionCardId:y.actionCardId||y.id,originalName:y.originalName||j.originalName||"",workName:d(j.workContentName,j.shortName,j.title,y.title)})});const K=new Set;return Q.forEach(y=>{const E=y.body||{},j=y.action==="新增"?"新增":"修改",O=d(y.workName);if(n(O))return;const Z=j==="修改"?I(y.originalName,O)||x({originalName:y.originalName,assetName:y.workName,displayText:y.workName}):null;j==="修改"&&Z&&te(Z);const ae=e(E.companyName||E.company||E.organizationName),$e=e(E.projectName||E.project);let Fe=Z?.companyId?b.companies.find(Kt=>
21String(Kt.id)===String(Z.companyId))||q(Z.companyId):null,Ke=Z?.projectId?b.projects.find(Kt=>String(Kt.id)===String(Z.projectId))||U(Z.projectId):null;if(j==="新增"){if(!ae&&!$e||(Ke=$e?S($e,ae):null,Fe=Ke?null:R(ae),!Fe&&!Ke))return}else if(!Fe&&!Ke&&(Ke=$e?S($e,ae):null,Fe=Ke?null:R(ae),!Fe&&!Ke)){const Kt=e(y.originalName).split(/\s*[--—]\s*/).filter(Boolean),$r=Kt.length>=2?Kt[0]:"";$r&&(Ke=S($r,ae),Fe=Ke?null:R($r))}const Pt=`${j}:${y.assetRefId||y.actionCardId||O}:${O}`;if(K.has(Pt))return;K.add(Pt);const Tn=Ge(H),Or={...y.polishContext||{},parentName:y.parentName||y.polishContext?.parentName,companyName:y.companyName||y.polishContext?.companyName,projectName:y.projectName||y.polishContext?.projectName,jdText:H,jobTitle:Tn.jobTitle,originalDescription:Z?.starDescription||Z?.description||y.polishContext?.originalDescription};b.workExps.push({id:c--,companyId:Fe?.id,projectId:Ke?.id,shortName:O,starDescription:y.content||E.starDescription||E.description||"",description:y.content||E.description||"",content:y.content||"",isMock:!0,mockType:j,strategy:j,actionType:j==="新增"?"Create":"Modify",originalName:y.originalName,originalWorkId:Z?.id,assetRefId:y.assetRefId,actionCardId:y.actionCardId,parentName:Or.parentName,__polishContext:Or})}),!b.workExps.length&&p?.rows?.length&&p.rows.forEach(y=>{(y.assetRefs||[]).forEach(E=>{if(String(E?.validationStatus||"valid")!=="valid")return;const j=String(E?.assetType||"");if(!/原卡|修改|更改|新增|新建|改写/i.test(j))return;if(/原卡/i.test(j)){te(x(E));return}const O=d(E.assetName,E.displayText,E.title);if(n(O))return;const Z=`fallback:${E.assetRefId||E.actionCardId||O}`;if(K.has(Z))return;K.add(Z);const ae=/新增|新建/i.test(j)?"新增":"修改",$e=String(E.assetName||E.displayText||"").split(/[--—]/).map($r=>$r.trim()).filter(Boolean),Fe=$e.length>=3&&/工作经验/.test($e[0])?$e[1]:"",Ke=Fe?S(Fe):null,Pt=Ke?null:Fe?R(Fe):null,Tn=B().resolveWorkExperienceCardSeed({asset:E,row:y,action:ae==="新增"?"CREATE":"UPDATE"}),Or={...E?.__polishContext||{},jdRequirement:y?.rawRow?.jdRequirement||y?.jdRequirement,standardRequirement:y?.rawRow?.standardRequirement||y?.standardRequirement,expertJudgement:y?.rawRow?.expertJudgement||y?.expertJudgement||y?.rawCol5,jdText:H,jobTitle:Ge(H).jobTitle,parentName:Tn.parentName},Kt=Tn.seedDescription;b.workExps.push({id:c--,companyId:Pt?.id,projectId:Ke?.id,shortName:Tn.workContentName||O,starDescription:Kt,description:Kt,content:Kt,isMock:!0,mockType:ae,strategy:ae,actionType:ae==="新增"?"Create":"Modify",assetRefId:E.assetRefId,actionCardId:E.actionCardId,parentName:Tn?.parentName||Or.parentName,__polishContext:Or})})}),b},[st,Ie,ee,H,bt]),[ns,rs]=o.useState({}),pi=o.useRef(""),Rn=G.useMemo(()=>yn?.workExps?.length?{...yn,workExps:B().applyPolishedDescriptionToWorkItems(yn.workExps,ns)}:yn,[yn,ns]),xc=G.useMemo(()=>Array.from(Nt).some(e=>e.startsWith("工作经验|"))||ht.length>0,[ht.length,Nt]),[go,fi]=o.useState(null),bo=G.useMemo(()=>B().filterExperienceMockDataByAdoptedCards({companies:st.companies,projects:st.projects,workExps:st.workExps},Rn,ht),[ht,re,Rn,st]),tn=G.useMemo(()=>{const e=bo||{companies:[],projects:[],workExps:[]},n=go;if(!n?.workExps?.length)return e;const r=new Map((n.workExps||[]).map(c=>[String(c?.id),c])),s=new Set((e.workExps||[]).map(c=>String(c?.id))),l=(e.workExps||[]).map(c=>r.get(String(c?.id))||c),u=(n.workExps||[]).filter(c=>!s.has(String(c?.id))),p=new Set((e.companies||[]).map(c=>String(c?.id))),b=new Set((e.projects||[]).map(c=>String(c?.id))),m=(n.companies||[]).filter(c=>c?.id==null||p.has(String(c.id))?!1:(p.add(String(c.id)),!0)),a=(n.projects||[]).filter(c=>c?.id==null||b.has(String(c.id))?!1:(b.add(String(c.id)),!0));return{companies:[...e.companies||[],...m],projects:[...e.projects||[],...a],workExps:[...l,...u]}},[go,bo]),Ec=G.useCallback(e=>{const n=tn?.workExps||[],r=Array.isArray(e?.workExps)?e.workExps:[],s=new Set(r.map(R=>String(R?.id))),l=new Set(n.map(R=>String(R?.id))),u=n.filter(R=>!s.has(String(R?.id))),p=r.filter(R=>!l.has(String(R?.id)));if(p.length&&(fi({companies:Array.isArray(e?.companies)?e.companies:[],projects:Array.isArray(e?.projects)?e.projects:[],workExps:r}),xt(R=>{const S=p.map(f=>f?.id).filter(f=>f!=null&&!R.some(d=>String(d)===String(f)));return S.length?[...R,...S]:R})),!u.length)return;const b=u.filter(R=>R?.isMock&&/更改|修改|改编|新增|新建/.test(String(R.mockType||R.strategy||"")));if(!b.length&&!p.length){z.warning("原档案工作内容请在资料库中管理;此处仅可删除已采用的建议卡");return}if(!b.length)return;const m=new Set(b.map(R=>String(R.id))),a=new Set;b.forEach(R=>{R.__decisionItemKey&&a.add(String(R.__decisionItemKey))});const c={...tt};Object.entries(tt).forEach(([R,S])=>{R.startsWith("工作经验|")&&(c[R]=(S||[]).filter(f=>{const d=b.some(I=>B().scoreExperienceWorkAdoptMatch(I,f)>=80);return d&&f?.__decisionItemKey&&a.add(String(f.__decisionItemKey)),!d}))}),_n(c),qn(R=>{const S=new Set(R);return a.forEach(f=>S.delete(f)),S}),xt(R=>R.filter(S=>!m.has(String(S)))),fi(R=>R&&{...R,workExps:(R.workExps||[]).filter(S=>!m.has(String(S?.id)))})},[tt,tn]);o.useEffect(()=>{if(!re)return;
21const e=(yn?.workExps||[]).filter(B().shouldPolishWorkExperienceItem);if(!e.length){rs({}),pi.current="";return}const n=e.map(l=>`${B().getWorkExperienceCardPolishKey(l)}::${l.starDescription||l.description||""}`).join("|");if(pi.current===n)return;pi.current=n;const r=Ge(H);let s=!1;return B().polishWorkExperienceItems(e,{jdText:H,jobTitle:r.jobTitle}).then(l=>{s||rs(l)}).catch(()=>{}),()=>{s=!0}},[yn,re,H]);const Er=G.useMemo(()=>{const e=x=>String(x||"").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/\s+/g," ").trim(),n=x=>{const q=e(x);return!!(!q||/^待生成(?:技能|资产)?[--—]/i.test(q)||/^REQ[--—]?\d+$/i.test(q)||/^STD[--—]?\d+$/i.test(q)||/^\d{2,}$/.test(q))},r=x=>{const q=x?.payload?.payload||x?.payload||{},U=String(x?.targetSkillType||x?.scopeSkillType||q.skillType||x?.module||x?.sectionTitle||"").toLowerCase();return U.includes("position")||U.includes("岗位")||U.includes("核心")||U.includes("专业")?"position":U.includes("industry")||U.includes("行业")||U.includes("业务")||U.includes("公司")?"industry":"general"},s=x=>{const q=x?.payload?.payload||x?.payload||{},U=e(x.assetName||q.skillName||q.name||x.name),te=e(x.content||q.description||x.description);if(n(U)||!te)return null;const J=r(x);if(J==="general"&&!Zo().isGeneralSkillShortName(U))return null;const Q=/更改|修改/.test(String(x.actionType||x.title||""))?"更改":"新建";return{...x,name:U,description:te,content:te,title:x.title||`[${Q}] ${U}`,isMock:!0,mockType:Q,strategy:Q,actionType:Q,skillType:J,targetSkillType:J,scopeSkillType:J,sectionTitle:x.sectionTitle||x.module||"知识技能",payload:{type:"skill",action:Q==="更改"?"UPDATE":"CREATE",payload:{...q,skillName:U,description:te,skillType:J,originalName:x.originalName||q.originalName||""}}}},l=x=>{const q=new Map;return x.forEach(U=>{const te=U.skillType||U.targetSkillType||"position",J=String(U.name||"").trim(),Q=String(U.__facetKey||"").trim(),K=te==="general"?`general|${J}`:`${te}|${Q}|${J}|${U.actionType||""}`,y=q.get(K);if(!y){q.set(K,U);return}const E=String(y.content||"").length;String(U.content||"").length>E&&q.set(K,U)}),Array.from(q.values())},u=hn.find(x=>String(x?.module||x?.mainTab||"").includes("知识技能")),p=Ne(ye,$)||Ne(ge,$),b=Ge($),m={jdText:$,companyName:p?.jdMeta?.companyName||"",jobTitle:b.jobTitle||"",librarySkills:dt,routingRequirements:p?.requirements||[],sourceMode:"quickResume"},a=u?.rows?.length?Y().buildNormalizedPlanTableRows(u,m):[],c=x=>{if(r(x)!=="position")return!1;const q=String(x.name||"").trim();return/跨团队沟通协作|沟通协作能力|协作推进类|表达执行类|自我效能类|基础英语沟通能力?/.test(q)},R=Zo(),S=a.length?l([...R.buildGeneralSkillActionCardsFromRows(a,$,b.jobTitle||"",dt),...R.buildPositionSkillActionCardsFromRows(a,$,b.jobTitle||""),...R.buildIndustrySkillActionCardsFromRows(a,$,p?.jdMeta?.companyName||"",b.jobTitle||"")].map(s).filter(Boolean).filter(x=>!c(x))):[],f=(Ie?.actionCards||[]).filter(x=>String(x?.tab||"").includes("知识技能")).map(x=>{const q=x?.payload?.payload||x?.payload||{},U=e(x.assetName||q.skillName||x.title),te=e(x.content||q.description||x.description);if(n(U)||!te)return null;const J=String(x.module||x.sectionTitle||x.targetSubTab||""),Q=r({...x,module:J,sectionTitle:J,targetSkillType:Pd(J)}),K=/更改|修改/.test(String(x.actionType||x.title||""))?"更改":"新建";return s({...x,assetName:U,content:te,module:J||x.module,sectionTitle:J||x.sectionTitle,actionType:K,targetSkillType:Q,scopeSkillType:Q,__polishContext:{jdText:$,jobTitle:b.jobTitle||"",companyName:p?.jdMeta?.companyName||"",expertJudgement:x.reason||"",standardRequirement:x.standardRequirement||"",jdRequirement:x.jdRequirement||"",facetKey:x.__facetKey}})}).filter(Boolean),d=new Map;f.forEach(x=>{const q=String(x?.assetRefId||"").trim();q&&d.set(q,x)});const I=[...f,...S.filter(x=>{const q=String(x?.assetRefId||"").trim();return!q||!d.has(q)})];return l(I)},[ge,ye,de,$,hn,Ie,dt]),[Cr,is]=o.useState({}),gi=o.useRef(""),Cc=G.useMemo(()=>B().applyPolishedContentToCards(Er||[],Cr),[Er,Cr]),tr=G.useMemo(()=>{const e=B().mergeAdoptedCardsForTab(tt,"知识技能");return B().applyPolishedContentToCards(e,Cr)},[tt,re,Cr]);o.useEffect(()=>{const e=tr.flatMap(n=>un(n));e.length&&Ft(n=>{const r=e.filter(s=>!n.some(l=>String(l)===String(s)));return r.length?[...n,...r]:n})},[tr]),o.useEffect(()=>{const e=ht.flatMap(s=>un(s)),n=(tn?.workExps||[]).filter(s=>s?.isMock&&/更改|修改|改编|新增|新建/.test(String(s.mockType||s.strategy||""))).flatMap(s=>un(s)),r=Array.from(new Set([...e,...n].map(String)));r.length&&xt(s=>{const l=r.filter(u=>!s.some(p=>String(p)===String(u)));return l.length?[...s,...l]:s})},[ht,tn]),o.useEffect(()=>{if(!re)return;
21const e=[...(Er||[]).filter(B().shouldPolishKnowledgeSkillCard),...B().mergeAdoptedCardsForTab(tt,"知识技能").filter(B().shouldPolishKnowledgeSkillCard)];if(!e.length){is({}),gi.current="";return}const n=Ge($),r=Ne(ye,$)||Ne(ge,$),s=e.map(u=>`${B().getKnowledgeCardPolishKey(u)}::${u.content}`).join("|");if(gi.current===s)return;gi.current=s;let l=!1;return B().polishKnowledgeSkillCards(e,{jdText:$,jobTitle:n.jobTitle||"",companyName:r?.jdMeta?.companyName||""}).then(u=>{l||is(u)}).catch(()=>{}),()=>{l=!0}},[Er,tt,re,$,ye,ge]);const Ac=e=>{if(Zt.length>=5){z.warning("最多上传 5 张截图");return}const n=URL.createObjectURL(e);en(r=>[...r,{file:e,preview:n}])},vc=e=>{en(n=>(URL.revokeObjectURL(n[e].preview),n.filter((r,s)=>s!==e)))},jc=o.useCallback(e=>{if(!Ie)return!1;for(const n of Ie.sections)if(n.tableData){const r=n.tableData.find(s=>s.rawCol0?.includes(e));if(r&&r.rawCol3){const s=r.rawCol3;if(s.includes("是")||s.includes("有")||s.includes("具")||s.includes("已")||!s.includes("否")&&!s.includes("无")&&!s.includes("缺")&&s.trim().length>0&&s!=="—"&&s!=="-")return!0}}return!1},[Ie]),Pc=o.useCallback(e=>{const n=Array.isArray(e)?e:[e],r=new Map,s=d=>{const I=String(d||"");return/全新|新建|新增|重造|填补/.test(I)?"新增":/高阶|改编|更改|修改|重构|改写/.test(I)?"修改":/无需|无须|不变|直接|保留|已满足|采用|原卡/.test(I)?"不变":I||"不变"},l=d=>String(d||"").replace(/\s*[;;]\s*/g,`
22`).split(`
23`).map(I=>I.trim()).filter(Boolean),u=d=>{const I=String(d||"").replace(/^(?:有[--—]|原卡[::]|候选原卡[::]|待确认原卡[::]|修改卡[::]|改写卡[::]|新增卡[::]|新建卡[::])\s*/,"").trim(),x=I.match(/https?:\/\/[^\s]+/i);if(x)return x[0].trim();const q=I.split(/[--—]/).map(U=>U.trim()).filter(Boolean);return(q[q.length-1]||I).trim()},p=d=>{const I=String(d||"").trim();return/^https?:\/\//i.test(I)?I.toLowerCase().replace(/^https?:\/\//,"").replace(/\/+$/,""):I.replace(/^个人信息[--—]/,"").replace(/^(?:姓名|城市|国家\/城市|社交链接|邮箱|手机号码|手机号|照片)[--—]/,"").replace(/\s+/g,"").toLowerCase().trim()},b=d=>{const I=p(d);I&&r.set(I,d)},m=d=>u(d?.displayText||d?.assetName||d?.name||d?.title||""),a=d=>Array.isArray(d?.assetRefs)?d.assetRefs.filter(I=>{const x=String(I?.assetType||I?.type||""),q=String(I?.validationStatus||"").toLowerCase();return!x.includes("候选")&&!x.includes("待确认")&&!/conflict|pending_asset_resolution|invalid/.test(q)}):[],c=d=>{const I=[d?.rawCol0,d?.moduleCategory,d?.mainTab,d?.subTab,d?.assetModule].filter(Boolean).join(" ");return I.includes("个人信息")&&n.some(x=>I.includes(x))},R=[];Ie?.sections?.forEach(d=>{d.tableData?.forEach(I=>{c(I)&&R.push(I)})}),Ie?.moduleHcpPlan?.rows?.forEach(d=>{c(d)&&R.push(d)});const S=R.filter(d=>a(d).length>0);return(S.length?S:R).forEach(d=>{const I=String(d?.validationStatus||d?.rowValidationStatus||"").toLowerCase();
23if(/conflict|pending_asset_resolution|invalid/.test(I))return;const x=s(d.rawCol4||d.action||d.更改策略),q=a(d),U=q.length>0,te=U?q.map(E=>{const j=String(E?.assetType||E?.type||""),O=j.includes("原卡")?"原卡":j.includes("修改")||j.includes("改写")?"修改卡":j.includes("新增")||j.includes("新建")?"新增卡":"",Z=m(E);return O&&Z?`${O}:${Z}`:""}).filter(Boolean):l(d.__assetDisplay||d.assetDisplay||d["对应资产/生成卡片"]||d.对应资产||d.生成卡片),J=String(d.rawCol5||d.expertJudgement||d.expertJudgment||d.专家判定||d.专家判断||d.判定理由||""),Q=te.filter(E=>/^原卡[::]/.test(E)),K=E=>U?x!=="新增":x!=="不变"?!1:Q.length<=1?!0:!!E&&J.includes(E),y=new Set;te.forEach(E=>{if(/^原卡[::]/.test(E)){const j=u(E);j&&(y.add(p(j)),(K(j)||x==="不变")&&b(j))}}),!U&&l(d.rawCol3||d.libraryCoverageText||d.库中是否已有||d.你的档案库是否已有||d.是否已有).forEach(E=>{if(!/^有[--—]/.test(E))return;const j=u(E);j&&x==="不变"&&(K(j),b(j))})}),{selectedValues:Array.from(r.values()),candidateValues:[]}},[Ie]),[ss,ho]=o.useState("profile"),nr=o.useRef(ss),Ar=o.useCallback(e=>{const n=pn(e);nr.current=n,ho(r=>r===n?r:n)},[]),bi=o.useCallback(e=>{nr.current=pn(e)},[]),qc=o.useCallback(()=>nr.current,[]);o.useEffect(()=>{if(L===0)return;const e=nr.current;ho(n=>n===e?n:e)},[L]);const[Tt,Ft]=o.useState([]),[Lt,xt]=o.useState([]),[nn,Bn]=o.useState([]),[yt,rr]=o.useState([]),[Rt,ir]=o.useState([]),[St,sr]=o.useState([]),[Et,or]=o.useState(null),[At,ar]=o.useState([]),[vt,cr]=o.useState([]),[lr,Un]=o.useState([]),[os,as]=o.useState([]),[Jt,ur]=o.useState([]),[vr,jr]=o.useState([]),[hi,yi]=o.useState([]),[yo,Ro]=o.useState([]),[rn,Pr]=o.useState([]),[sn,qr]=o.useState([]),[on,_r]=o.useState([]),_c=o.useRef(""),Nc=o.useRef(""),Mc=o.useRef(null),dr=o.useRef(!1),Nr=o.useRef(""),cs=o.useRef(!1);o.useEffect(()=>{if(os.length>0||cs.current)return;const e=ke?.detail||v?.basicInfo,n=Au(e);n.length&&(cs.current=!0,as(n))},[v,ke,os.length]);const[Ri,So]=o.useState(ma),[Si,ko]=o.useState(Ou),Dc=o.useMemo(()=>({selectedNameIds:yt,setSelectedNameIds:rr,selectedEmailIds:Rt,setSelectedEmailIds:ir,selectedPhoneIds:St,setSelectedPhoneIds:sr,selectedPhotoId:Et,setSelectedPhotoId:or,selectedCityIds:At,setSelectedCityIds:ar,selectedLinkIds:vt,setSelectedLinkIds:cr}),[At,Rt,vt,yt,St,Et]),zt=G.useMemo(()=>B().deriveStructuredWorkExperienceSelectionIds(bt("工作经验"),Rn,{persistedSelectedIds:Lt,experiences:gt,companies:He.companies,projects:He.projects}),[Rn,bt,He.companies,He.projects,gt,Lt]),wo=G.useMemo(()=>{const e=_t==="overview"?"知识技能":_t;if(e==="知识技能")return(Qn||[]).map(n=>({id:n?.id,label:String(n?.name||n?.skillName||"").trim(),content:String(n?.description||n?.content||"").trim(),subTab:n?.skillType||n?.subTab,selected:Tt.some(r=>String(r)===String(n?.id))})).filter(n=>n.label);if(e==="工作经验")return(st.workExps||[]).map(n=>{const r=(st.companies||[]).find(p=>String(p?.id)===String(n?.companyId)),s=(st.projects||[]).find(p=>String(p?.id)===String(n?.projectId)),l=Y().resolveWorkExperienceParentName({companyName:n?.companyName||r?.name,projectName:n?.projectName||s?.name}),u=String(n?.shortName||n?.workContentName||n?.name||"").trim();return{id:n?.id,label:B().formatWorkExperienceDecisionChipLabel({parentName:l,workContentName:u,rawLabel:l&&u?`${l}-${u}`:u}),content:String(n?.description||n?.workContent||n?.content||"").trim(),subTab:B().resolveWorkExperienceDecisionSubTab({projectId:n?.projectId,companyId:n?.companyId,experienceType:r?.experienceType||(s?"project":n?.experienceType),projectName:n?.projectName||s?.name,companyName:n?.companyName||r?.name,shortName:u,description:n?.description||n?.workContent||n?.content||r?.description,position:r?.position||n?.position}),selected:zt.some(p=>String(p)===String(n?.id))}}).filter(n=>n.label&&n.label!=="档案项");if(e==="求职意向"){const n=[],r=v?.intent,s=new Set,l=(m,a,c)=>{const R=String(a||"").trim();if(!R||R==="面议")return;const S=R.toLowerCase();s.has(S)||(s.add(S),n.push({id:m,label:R,content:R,subTab:"期望薪资/总包",selected:c}))},u=new Set,p=(m,a,c,R)=>{const S=String(a||"").trim();if(!S)return;const f=S.toLowerCase();u.has(f)||(u.add(f),n.push({id:m,label:S,content:S,subTab:"意向职位",selected:c})),l(`intent-salary-${m||S}`,String(R||"").trim(),c)};
23(r?.positions||[]).forEach(m=>{p(m?.id,m?.jobTitle||m?.title,Jt.some(a=>String(a)===String(m?.id)),m?.salary||m?.expectedSalary)}),(yo||[]).forEach(m=>{const a=Jt.length?Jt.some(c=>String(c)===String(m?.id)):!0;p(m?.id,m?.jobTitle||m?.title,a,m?.salary||m?.expectedSalary)}),(hi||[]).forEach(m=>{l(m?.id,m?.expectedSalary||m?.salary||m?.name,vr.length?vr.some(a=>String(a)===String(m?.id)):!0)});const b=n.filter(m=>m.subTab==="期望薪资/总包");return b.length&&!b.some(m=>m.selected)&&b.forEach(m=>{m.selected=!0}),(r?.status||[]).forEach(m=>{const a=String(m?.status||"").trim();if(!a)return;const c=String(m?.earliestDate||"").trim();n.push({id:m?.id,label:a,content:c?`${a} · ${c}`:a,subTab:"求职状态&最快到岗时间",selected:rn.some(R=>String(R)===String(m?.id))})}),(r?.cities||[]).forEach(m=>{const a=String(m?.city||m?.name||m||"").trim();a&&n.push({id:m?.id,label:a,content:a,subTab:"意向城市",selected:sn.some(c=>String(c)===String(m?.id))})}),(r?.intendedJobTypes||[]).forEach(m=>{const a=String(m?.jobType||m?.type||m||"").trim();a&&n.push({id:m?.id,label:a,content:a,subTab:"意向工作性质",selected:on.some(c=>String(c)===String(m?.id))})}),n}if(e==="个人信息"){const n=v?.basicInfo||xr||{},r=[],s=(l,u,p,b)=>{(l||[]).forEach((m,a)=>{const c=b(m);if(!c)return;const R=m?.id!=null&&String(m.id).trim()!==""?m.id:`${p}:${c}`,S=u.some(f=>String(f)===String(m?.id)||String(f)===String(R))||u.length>0&&m?.id==null&&u.length===(l||[]).length||u.length===1&&(l||[]).length===1&&a===0;r.push({id:R,label:c,content:c,subTab:p,selected:S})})};return s(n.names,yt,"姓名",l=>String(l?.name||l?.fullName||l?.value||"").trim()),s(n.emails,Rt,"邮箱",l=>String(l?.email||l?.value||"").trim()),s(n.phones,St,"手机号码",l=>String(l?.phone||l?.mobile||l?.value||"").trim()),s(n.cities,At,"国家/城市",l=>String(l?.city||l?.name||l?.value||"").trim()),s(n.links,vt,"社交链接",l=>String(l?.url||l?.label||l?.value||"").trim()),(n.photos||[]).forEach(l=>{const u=String(l?.originalName||l?.filePath||l?.url||"照片").trim();u&&r.push({id:l?.id??`photo:${u}`,label:u,content:u,subTab:"照片",selected:Et!=null&&String(Et)===String(l?.id)})}),B().PERSONAL_DETAIL_FIELD_ORDER.forEach(l=>{const u=he().getQuickResumeProfileFieldAsset(n,l);u&&r.push({id:u.id,label:u.name,content:u.name,subTab:l,selected:!0})}),r}return[]},[_t,v,xr,zt,st.workExps,Qn,At,Rt,sn,on,Jt,rn,vt,yt,St,Et,vr,Tt,hi,yo]),Lc=xd({decisionRuntimeReady:re,currentStep:L,aiReportActiveTab:_t,tabReports:ee,normalizedLocalJdText:$,jobRequirementRoutingPlan:ye,displayRoutingPlan:ge,decisionProfileCards:wo,getNormalizedPlanByModule:bt,getQuickResumeTabGenerationState:po}),Jc=G.useMemo(()=>{const e=Ge($),n=Ne(ye,$)||Ne(ge,$);return Ni({companyName:n?.jdMeta?.companyName||e.companyName,jdText:$})},[ge,ye,$]),Oc=_t==="overview"?"知识技能":_t,$c=G.useCallback((e,n)=>{const[r,s]=e.includes("|")?[e.split("|")[0],e.split("|").slice(1).join("|")]:[e,""];ao(l=>{const u={...l,[e]:gu(n,r,s||void 0)};return bu(u),u})},[]),Io=G.useCallback(e=>{const n=Array.isArray(e.parsedTabReport?.cardGenerationRequests)?e.parsedTabReport.cardGenerationRequests:Md(e.moduleHcpPlan);return B().resolveCardGenerationRequestFromPool(e.item,n)},[]),Qc=G.useCallback(async(e,n,r)=>{const s=la[n];if(!s)return{content:null,source:"ai",error:`当前模块「${n}」不支持 tab-card 重新生成`};const l=bt(n);if(!l)return{content:null,source:"ai",error:"本模块还没有结构化计划,请先点顶部「重新评估」或「生成本模块分析」后再重新生成"};const u=Y().parseAiReportMarkdown(ee[s]||"",{originalJdText:$}),p=Io({item:e,mainTab:n,parsedTabReport:u,moduleHcpPlan:l}),b=r?.forceRefresh?null:B().findCachedActionCardForDecisionItem(e,Array.isArray(u?.actionCards)?u.actionCards:[],p);if(b){const J=B().extractTabCardRewriteContent(b);if(J)return{content:J,source:"ai"}}const m=Ne(ye,$)||Ne(ge,$),a=Ge($),c=Ni({companyName:m?.jdMeta?.companyName||a.companyName,jdText:$});if(r?.forceRefresh){const J=r?.mode==="score_only"?"score_only":"rewrite_and_score",Q=String(r?.currentDraft||e.previewContent||e.reason||"").trim(),K=String(e.planRow?.subTab||p?.targetSubTab||""),y=B().resolveDecisionDimensionMeta(n,K),E=await B().fetchDecisionRewriteAndScore({payload:{mainTab:n,subTab:K,cardTitle:e.title,action:e.action,currentDraft:Q,archiveOriginal:String(r?.archiveOriginal||e.planRow?.__originalContent||Q),jdRequirement:String(e.planRow?.jdRequirement||e.planRow?.sourceText||(Array.isArray(e.planRow?.__jdQuotes)?e.planRow.__jdQuotes.join(`
24`):"")||""),standardRequirement:String(e.planRow?.standardRequirement||""),expertJudgement:String(e.planRow?.expertJudgement||e.reason||""),companyName:c,jobTitle:a.jobTitle||"",jdContent:$,dimensionMeta:y,weakGuidance:r?.rewriteGuidance,mode:J},dimensionMeta:y});if(E.content)return{content:E.content,source:"ai",dimensions:E.dimensions,dimensionNotes:E.dimensionNotes,compositeScore:E.compositeScore};
24if(J==="score_only")return{content:Q||null,source:"ai",error:E.error||"AI 打分失败",issues:E.issues};const j=/JD未明确|无明确要求|对接 JD「|用「[^」]+」说明/.test(Q);if(Q&&!j)return{content:null,source:"ai",error:E.error||"AI 改稿失败,已保留上一版",issues:E.issues};const O=B().applyDecisionTabNoteGuidedRewrite(n,{currentDraft:Q,archiveOriginal:r?.archiveOriginal||e.planRow?.__originalContent||Q,weakDimensions:r?.weakDimensions,dimensionNotes:r?.dimensionNotes,dimensionScores:r?.dimensionScores,beforeDimensionNotes:r?.beforeDimensionNotes,beforeDimensionScores:r?.beforeDimensionScores,rewriteGuidance:r?.rewriteGuidance,jdRequirement:e.planRow?.jdRequirement||e.planRow?.sourceText,standardRequirement:e.planRow?.standardRequirement,jobTitle:a.jobTitle||"",companyName:c,jdText:$,planRow:e.planRow,skillName:e.title,subTab:K});return O?.content?{content:O.content,source:"fallback",error:`AI 不可用(${E.error||"未知"}),已用本地门卫稿`,issues:O.raisedHints.slice(0,5)}:{content:null,source:"ai",error:E.error||"AI 改稿失败且无本地门卫稿",issues:E.issues}}if(!p)return{content:null,source:"ai",error:"未找到可执行 cardGenerationRequest(该建议没有绑定新增/修改卡,且无法合成请求)",issues:[`action=${String(e.action||"")}`,`title=${String(e.title||"")}`,`subTab=${String(e.planRow?.subTab||"")}`]};if(n==="知识技能"&&p.__synthetic){const J=Y().buildKnowledgeSkillFallbackActionCard(p,l),Q=B().extractTabCardRewriteContent(J);if(Q)return{content:Q,source:"fallback",error:"计划行未绑定新增/修改卡,已用本地模板重新生成"}}if(n==="自我介绍"&&(p.__synthetic||r?.forceRefresh)){const J=a.jobTitle||"",Q=String(r?.currentDraft||e.previewContent||e.reason||"").trim(),K=String(r?.archiveOriginal||e.planRow?.__originalContent||Q).trim();if(r?.forceRefresh&&Q){const j=B().applySelfIntroNoteGuidedRewrite({currentDraft:Q,archiveOriginal:K,weakDimensions:r?.weakDimensions,jdRequirement:e.planRow?.jdRequirement||e.planRow?.sourceText,standardRequirement:e.planRow?.standardRequirement,jobTitle:J,companyName:c,jdText:$,planRow:e.planRow});return{content:j.content,source:"fallback",error:j.raisedHints.some(O=>/黄框/.test(O))?"已按黄框弱分维建议改稿":"已按评分维度冲高重写(补岗位连接、动机与入职可贡献)",issues:j.raisedHints.slice(0,5)}}const y=B().buildSelfIntroFallbackActionCard(p,l,J,{scoreTargeted:!0,originalContent:K||Q,companyName:c,jdText:$}),E=B().extractTabCardRewriteContent(y);if(E){const j=Array.isArray(y?.__selfIntroRaisedHints)?y.__selfIntroRaisedHints.map(String):[];return{content:E,source:"fallback",error:r?.forceRefresh?"已按评分维度冲高重写(补岗位连接、动机与入职可贡献)":"计划行未绑定修改卡,已按评分维度冲高生成",issues:j.slice(0,4)}}}const R=Array.isArray(v?.education)?v.education:[],S=()=>{const J=he().buildQuickResumeEducationFallbackActionCard(p,l,R),Q=B().extractTabCardRewriteContent(J);return Q?{content:Q,raisedHints:Array.isArray(J?.__educationRaisedHints)?J.__educationRaisedHints.map(String):[],heldFlatHints:Array.isArray(J?.__educationHeldFlatHints)?J.__educationHeldFlatHints.map(String):[]}:null};if(n==="教育经历"&&(p.__synthetic||r?.forceRefresh)){const J=String(r?.currentDraft||e.previewContent||"").trim();if(r?.forceRefresh&&(J||r?.weakDimensions?.length)){const K=Array.isArray(l?.rows)?l.rows:[],y=String(p?.assetRefId||"").trim(),E=K.find(ae=>(ae?.assetRefs||[]).some($e=>String($e?.assetRefId||"").trim()===y)),j=E?.assetRefs?.find(ae=>String(ae?.assetRefId||"").trim()===y)||E?.assetRefs?.[0],O=j?.payload?.payload||j?.payload||{},Z=B().applyEducationNoteGuidedRewrite({currentDraft:J,archiveOriginal:r?.archiveOriginal,weakDimensions:r?.weakDimensions,jdRequirement:e.planRow?.jdRequirement,planRow:e.planRow,originalPayload:O});if(Z?.content)return{content:Z.content,source:"fallback",error:Z.raisedHints.some(ae=>/黄框/.test(ae))?"已按黄框弱分维建议改稿":"已按评分维度冲高重写(补课程与可核验要素;学校/门槛依事实持平)",issues:Z.raisedHints.slice(0,5)}}const Q=S();if(Q?.content)return{content:Q.content,source:"fallback",error:r?.forceRefresh?"已按评分维度冲高重写(补课程与可核验要素;学校/门槛依事实持平)":"计划行未绑定修改卡,已按评分维度冲高生成",issues:[...Q.raisedHints||[],...Q.heldFlatHints||[]].slice(0,4)}}if(n==="求职意向"&&(p.__synthetic||r?.forceRefresh)){const J=String(r?.currentDraft||e.previewContent||"").trim();if(r?.forceRefresh&&J){const y=B().applyJobIntentNoteGuidedRewrite({currentDraft:J,archiveOriginal:r?.archiveOriginal||e.planRow?.__originalContent,weakDimensions:r?.weakDimensions,jdRequirement:e.planRow?.jdRequirement||e.planRow?.sourceText,standardRequirement:e.planRow?.standardRequirement,jobTitle:a.jobTitle,jdText:$,planRow:e.planRow});return{content:y.content,source:"fallback",error:y.raisedHints.some(E=>/黄框/.test(E))?"已按黄框弱分维建议改稿":"已按评分维度补强结构化填选",issues:y.raisedHints.slice(0,5)}}const Q=B().buildJobIntentFallbackActionCard(p,l,{currentDraft:J}),K=B().extractTabCardRewriteContent(Q);if(K)return{content:K,source:"fallback",error:r?.forceRefresh?"已按评分维度补强结构化填选":"计划行未绑定修改卡,已按档案结构化字段生成"}}const f=Ne(ye,$)||Ne(ge,$),d=Ge($),x={...{jdContent:$,skills:dt,experiences:gt,profileData:Dt,selfIntros:[...Array.isArray(ue?.selfIntros)?ue.selfIntros:[],...Array.isArray(v?.selfIntro)?v.selfIntro:[]],educations:R,jobIntents:v?.intent?.positions||[],jobStatuses:v?.intent?.status||[],intendedCities:v?.intent?.cities||[],intendedJobTypes:v?.intent?.intendedJobTypes||[],jobRequirementRoutingPlan:f,jdMeta:d,isQuickResumeMode:!0,sourceMode:"quickResume",tabName:s},moduleHcpPlan:l,candidateOriginalAssetIds:u?.candidateOriginalAssetIds||[],cardGenerationRequest:p,rewriteGuidance:r?.rewriteGuidance||"",currentDraft:r?.currentDraft||""};let q="",U=[],te=null;for(let J=1;J<=2;J+=1)try{const Q=await Wt("/api/assembly-info/ai-adaptation/report/tab-card",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!Q.ok){q=`HTTP ${Q.status}`;continue}const K=await Q.json().catch(()=>null);if(K?.ok&&K.actionCard){const y=B().extractTabCardRewriteContent(K.actionCard);if(y){te=y;break}}q=String(K?.error||K?.message||"tab-card 未返回有效 actionCard"),U=Array.isArray(K?.issues)?K.issues.map(String):[]}catch(Q){J===2&&console.warn("[Decision tab-card rewrite]",Q),q=Q instanceof Error?Q.message:String(Q)}if(n==="教育经历"){const J=S(),Q=/(?:主修|核心)?课程[::]/.test(String(te||""));if(J?.content&&(!te||B().isEducationHollowProse(te)||!Q))return{content:J.content,source:"fallback",error:te&&B().isEducationHollowProse(te)?"模型返回空壳匹配话术,已按评分维度冲高替换":q?"tab-card 失败,已按评分维度冲高生成":"已按评分维度冲高重写(补课程列表)",issues:[...U,...J.raisedHints||[]].slice(0,5)};if(te)return{content:te,source:"ai"}}if(n==="自我介绍"){if(!te||B().isSelfIntroGenericJdLinkText(te)||!/入职后|到岗后|优先推进|可推进/.test(te)||!c||!yu(te,c)){const Q=a.jobTitle||"",K=String(r?.currentDraft||te||e.previewContent||"").trim();if(r?.forceRefresh&&K&&r?.weakDimensions?.length){const j=B().applySelfIntroNoteGuidedRewrite({currentDraft:K,archiveOriginal:r?.archiveOriginal||e.planRow?.__originalContent,weakDimensions:r.weakDimensions,jdRequirement:e.planRow?.jdRequirement,standardRequirement:e.planRow?.standardRequirement,jobTitle:Q,companyName:c,jdText:$,planRow:e.planRow});return{content:j.content,source:"fallback",error:"模型稿未覆盖弱分维,已按黄框弱分维建议改稿",issues:j.raisedHints.slice(0,5)}}const y=B().buildSelfIntroFallbackActionCard(p,l,Q,{scoreTargeted:!0,originalContent:String(r?.archiveOriginal||K||te||e.previewContent||"").trim(),companyName:c,jdText:$}),E=B().extractTabCardRewriteContent(y);if(E)return{content:E,source:"fallback",error:q?"tab-card 失败,已按评分维度冲高生成":"模型稿未覆盖弱分维,已按评分维度冲高重写",issues:U}}if(te)return{content:te,source:"ai"}}if(te)return{content:te,source:"ai"};if(n==="知识技能"){const J=Y().buildKnowledgeSkillFallbackActionCard(p,l),Q=B().extractTabCardRewriteContent(J),K=String(r?.currentDraft||te||Q||e.previewContent||"").trim();if(r?.forceRefresh&&K){const y=B().applyKnowledgeSkillNoteGuidedRewrite({currentDraft:K,archiveOriginal:r?.archiveOriginal,weakDimensions:r?.weakDimensions,dimensionNotes:r?.dimensionNotes,dimensionScores:r?.dimensionScores,rewriteGuidance:r?.rewriteGuidance,jdRequirement:e.planRow?.jdRequirement||e.planRow?.sourceText,standardRequirement:e.planRow?.standardRequirement,jobTitle:a.jobTitle||"",companyName:c,jdText:$,planRow:e.planRow,skillName:e.title,subTab:e.planRow?.subTab||p?.targetSubTab});return{content:y.content,source:"fallback",error:"已按分项评分弱维补强改稿",issues:y.raisedHints.slice(0,5)}}if(Q)return{content:Q,source:"fallback",error:q||"tab-card 生成失败",issues:U}}return{content:null,source:"ai",error:q||"tab-card 生成失败且 fallback 不可用",issues:U}},[v,ge,bt,ye,$,ue?.selfIntros,dt,gt,Dt,Io,ee]),ki=G.useCallback((e,n)=>{if(!e)return;const r=wu(e);rr(r.selectedNameIds),ir(r.selectedEmailIds),sr(r.selectedPhoneIds),or(r.selectedPhotoId),ar(r.selectedCityIds),cr(r.selectedLinkIds),Ft(r.selectedSkillIds),xt(r.selectedExpIds),Bn(r.selectedEduIds),Un(r.selectedSelfIntroIds),ur(r.selectedJobIntentIds),Pr(r.selectedJobStatusIds),qr(r.selectedIntendedCityIds),_r(r.selectedIntendedJobTypeIds),as(r.selectedDetailCardIds||[]),dr.current=!0,
24cs.current=!0,n&&(Nr.current=n)},[]),To=G.useCallback(()=>{if(!v)return;const e=String(P?.id||"extract"),n=new Set((v.skills||[]).map(l=>l?.id).filter(l=>l!=null).map(String)),r=new Set((v.experience?.workExps||[]).map(l=>l?.id).filter(l=>l!=null).map(String)),s=l=>{const u=String(l??"").trim();if(!u||n.has(u)||r.has(u))return!1;if(!/^-?\d+(\.\d+)?$/.test(u))return!0;const p=Number(u);return Number.isFinite(p)&&p<0};if(Nr.current!==e){ki(v,e);return}Ft(l=>{const u=l.filter(m=>n.has(String(m))),p=l.filter(m=>s(m));return Array.from(new Set([...u,...p].map(String))).map(m=>Number.isFinite(Number(m))&&String(Number(m))===m?Number(m):m)}),xt(l=>{const u=ht.flatMap(a=>un(a)),p=l.filter(a=>r.has(String(a))),b=l.filter(a=>s(a)||u.some(c=>String(c)===String(a)));return Array.from(new Set([...p,...b,...u].map(String))).map(a=>Number.isFinite(Number(a))&&String(Number(a))===a?Number(a):a)}),Bn(l=>{const u=(v.education||[]).map(a=>a?.id).filter(a=>a!=null&&a!==""),p=new Set(u.map(String));if(l.length===0&&u.length>0)return u.map(a=>Number.isFinite(Number(a))&&String(Number(a))===String(a)?Number(a):a);const b=l.filter(a=>p.has(String(a))),m=l.filter(a=>s(a));return Array.from(new Set([...b,...m].map(String))).map(a=>Number.isFinite(Number(a))&&String(Number(a))===a?Number(a):a)}),Un(l=>{const p=(v.selfIntro||v.selfIntros||[]).map(c=>c?.id).filter(c=>c!=null&&c!==""),b=new Set(p.map(String));if(l.length===0&&p.length>0)return p;const m=l.filter(c=>b.has(String(c))),a=l.filter(c=>s(c));return Array.from(new Set([...m,...a].map(String)))})},[ht,v,ki,P?.id]);o.useEffect(()=>{L!==0&&L!==1||To()},[L,To]);const Bc=o.useMemo(()=>{const e=t?Qo(pe,L,!0):L;return{selectedNameIds:yt,selectedEmailIds:Rt,selectedPhoneIds:St,selectedPhotoId:Et,selectedCityIds:At,selectedLinkIds:vt,selectedSkillIds:Tt,selectedExpIds:e===2?Lt:zt,selectedEduIds:nn,selectedSelfIntroIds:lr,selectedJobIntentIds:Jt,selectedJobStatusIds:rn,selectedIntendedCityIds:sn,selectedIntendedJobTypeIds:on}},[L,t,zt,At,nn,Rt,Lt,sn,on,Jt,rn,vt,yt,St,Et,lr,Tt,pe]),Uc=o.useMemo(()=>({selectedJobIntentIds:Jt,setSelectedJobIntentIds:ur,selectedSalaryIds:vr,setSelectedSalaryIds:jr,selectedJobStatusIds:rn,setSelectedJobStatusIds:Pr,selectedIntendedCityIds:sn,setSelectedIntendedCityIds:qr,selectedIntendedJobTypeIds:on,setSelectedIntendedJobTypeIds:_r}),[sn,on,Jt,rn,vr]),xo=o.useMemo(()=>({salaryExpectations:hi,disableFetch:!0}),[hi]),Fc=mi,zc=tr,Hc=di,Kc=fo,Wc=G.useMemo(()=>Pu(tn,Lt),[tn,Lt]),Gc=G.useMemo(()=>({jobIntent:er.jobIntent||[],jobStatus:er.jobStatus||[],intendedCity:er.intendedCity||[],intendedJobType:er.intendedJobType||[]}),[er]);o.useEffect(()=>{if(dr.current)return;(yt.length>0||Rt.length>0||St.length>0||Et!=null||At.length>0||vt.length>0)&&(dr.current=!0)},[At.length,Rt.length,vt.length,yt.length,St.length,Et]),o.useEffect(()=>{ui.length&&Un(e=>{const n=new Set(ui.map(r=>String(r?.id)).filter(Boolean));return e.filter(r=>n.has(String(r))||String(r).startsWith("adopt")||Number(r)<0)})},[ui]),o.useEffect(()=>{!bt("工作经验")?.rows?.length&&!Rn?.workExps?.length&&!ht.length||xt(n=>{if(!n.length)return n;const r=new Set((Rn?.workExps||[]).map(l=>String(l?.id)).filter(Boolean));(tn?.workExps||[]).forEach(l=>{l?.id!=null&&r.add(String(l.id))}),(gt||[]).forEach(l=>{l?.id!=null&&r.add(String(l.id))}),ht.forEach(l=>{un(l).forEach(u=>r.add(String(u)))});const s=n.filter(l=>r.has(String(l))||Number(l)<0||String(l).includes("adopt"));return s.length===n.length?n:s})},[ht,Rn,gt,tn]),o.useEffect(()=>{if(g)return;let e=!1,n=null,r=null,s=!1;const l=[{key:"names",path:"/api/profile/names",fallback:[]},{key:"emails",path:"/api/profile/emails",fallback:[]},{key:"phones",path:"/api/profile/phones",fallback:[]},{key:"photos",path:"/api/profile/photos",fallback:[]},{key:"cities",path:"/api/profile/cities",fallback:[]},{key:"links",path:"/api/profile/links",fallback:[]},{key:"detail",path:"/api/profile/detail",fallback:{}},{key:"skills",path:"/api/skills",fallback:[]},{key:"experiences",path:"/api/work-experience",fallback:[]},{key:"companies",path:"/api/channels/companies",fallback:[]},{key:"projects",path:"/api/channels/projects",fallback:[]},{key:"educations",path:"/api/education",fallback:[]},{key:"selfIntros",path:"/api/self-intro",fallback:[]},{key:"salaryExpectations",path:"/api/salary-expectations",fallback:[]}],u=async()=>du()?n||(n=(async()=>{try{const m=await pd(l,3,async c=>{try{const S=await(await Wt(c.path)).json();return{key:c.key,value:S}}catch{return{key:c.key,value:c.fallback}}});if(e)return;const a={};for(const c of m)a[c.key]=c.value;o.startTransition(()=>
24{if(e)return;Se({names:Array.isArray(a.names)?a.names:[],emails:Array.isArray(a.emails)?a.emails:[],phones:Array.isArray(a.phones)?a.phones:[],photos:Array.isArray(a.photos)?a.photos:[],cities:Array.isArray(a.cities)?a.cities:[],links:Array.isArray(a.links)?a.links:[],detail:a.detail&&typeof a.detail=="object"?a.detail:{},skills:Array.isArray(a.skills)?a.skills:[],experiences:Array.isArray(a.experiences)?a.experiences:[],companies:Array.isArray(a.companies)?a.companies:[],projects:Array.isArray(a.projects)?a.projects:[],educations:Array.isArray(a.educations)?a.educations:[],selfIntros:Array.isArray(a.selfIntros)?a.selfIntros:[]});const c=Array.isArray(a.salaryExpectations)?a.salaryExpectations:[];yi(c),jr(R=>{const S=c.map(I=>I?.id).filter(I=>I!=null);if(!S.length)return R;if(!R.length)return S;const f=new Set(S.map(String)),d=R.filter(I=>f.has(String(I)));return d.length?d:S})})}catch(m){console.error("Failed to fetch master profile",m)}finally{n=null}})(),n):null,p=(m=0)=>{e||s||(s=!0,r&&clearTimeout(r),r=setTimeout(()=>{r=null,u()},m))},b=m=>{m?.detail?.reason!=="demo-visibility"&&(s=!1,p(320))};return ne&&p(0),window.addEventListener("eagle-asset-refresh",b),()=>{e=!0,r&&clearTimeout(r),window.removeEventListener("eagle-asset-refresh",b)}},[g,ne]),o.useEffect(()=>{if(g||!(_t==="求职意向"||L===1||L===2))return;let n=!1;const r=async()=>{try{const[u,p]=await Promise.all([Wt("/api/salary-expectations"),Wt("/api/job-intents")]),b=u.ok?await u.json().catch(()=>[]):[],m=p.ok?await p.json().catch(()=>[]):[];if(n)return;const a=Array.isArray(b)?b:[],c=Array.isArray(m)?m:[];yi(a),Ro(c),jr(R=>{const S=a.map(I=>I?.id).filter(I=>I!=null);if(!S.length)return R;if(!R.length)return S;const f=new Set(S.map(String)),d=R.filter(I=>f.has(String(I)));return d.length?d:S}),ur(R=>R.length?R:c.map(S=>S?.id).filter(S=>S!=null))}catch{}};r();const s=()=>{r()},l=u=>{const p=u?.detail;Array.isArray(p)&&(yi(p),jr(b=>{const m=p.map(R=>R?.id).filter(R=>R!=null);if(!m.length)return b;if(!b.length)return m;const a=new Set(m.map(String)),c=b.filter(R=>a.has(String(R)));return c.length?c:m}))};return window.addEventListener("eagle-asset-refresh",s),window.addEventListener("zhencheng:salary-expectations-sync",l),()=>{n=!0,window.removeEventListener("eagle-asset-refresh",s),window.removeEventListener("zhencheng:salary-expectations-sync",l)}},[g,_t,L]);const Eo=o.useCallback(()=>
24Dt,[Dt]),[ls,Sn]=o.useState(!1),Co=o.useRef(null);Co.current={snapshotVersion:Ps,defaultResumeLayout:ma,normalizeStep:xn,normalizeActiveTab:pn,getRoutingPlanValidationErrors:Sr,personalInfoSelectionInitRef:dr,extractSelectionSeedRef:Nr,overallAnalysisFingerprintRef:Zn,setAiExtractedData:Ct,setUploadedResumeName:we,setPreviewUrl:Ue,setSelectedSkillIds:Ft,setSelectedExpIds:xt,setSelectedEduIds:Bn,setSelectedNameIds:rr,setSelectedEmailIds:ir,setSelectedPhoneIds:sr,setSelectedPhotoId:or,setSelectedCityIds:ar,setSelectedLinkIds:cr,setSelectedSelfIntroIds:Un,setSelectedJobIntentIds:ur,setSelectedJobStatusIds:Pr,setSelectedIntendedCityIds:qr,setSelectedIntendedJobTypeIds:_r,setAiSuggestions:Kn,setCurrentParseSession:ve,setCurrentStep:se,setActiveTab:Ar,setShowLibrary:Je,setSelectedLibraryResumeName:Oe,setSelectedLibraryResume:_e,setResumeLayoutConfig:So,setResumeSections:ko,setLocalJdText:Ze,setIsExtracted:Sn,setInputMode:qe,setUrlInput:wt,setScreenshots:en,setTabReports:ct,setLeftReportView:oi,setOverallAnalysisResult:wr,setOverallAnalysisStale:ii,setOverallAnalysisError:On,setAdoptedSectionKeys:Wn,setAdoptedItemKeys:qn,setAdoptedCardsBySection:_n,setJobRequirementRoutingPlan:Bt,setRoutingPlanStatus:Mt,setRoutingTabFilter:Yn,setRoutingPlanErrorDetails:Jn};const wi=o.useCallback(e=>{const n=Co.current;return n?ad(e,n):""},[]),jt=o.useCallback((e={},n={})=>{const r=n.storageMode||"full",s=e.currentParseSession??P,l=Gt(e.previewUrl)??Gt(Be)??Gt(s?.filePath),u=Zt.map(b=>b.preview).filter(b=>typeof b=="string"&&b.startsWith("data:")),p={schemaVersion:Ps,aiExtractedData:v,currentParseSession:P,uploadedResumeName:V,previewUrl:l,selectedLibraryResumeId:me?.id??null,selectedLibraryResumeName:ie,selectedSkillIds:Tt,selectedExpIds:Lt,selectedEduIds:nn,selectedNameIds:yt,selectedEmailIds:Rt,selectedPhoneIds:St,selectedPhotoId:Et,selectedCityIds:At,selectedLinkIds:vt,selectedSelfIntroIds:lr,selectedJobIntentIds:Jt,selectedJobStatusIds:rn,selectedIntendedCityIds:sn,selectedIntendedJobTypeIds:on,aiSuggestions:ni,currentStep:L,activeTab:nr.current,showLibrary:Ce,tabReports:ee,resumeLayoutConfig:Ri,resumeSections:Si,analysisJdFingerprint:Xt(yr(H)),leftReportView:si,overallAnalysisResult:kr,overallAnalysisFingerprint:Zn.current||"",adoptedSectionKeys:Array.from(Nt),adoptedItemKeys:Array.from(Rr),adoptedCardsBySection:tt,jdState:{localJdText:H,isExtracted:ls,inputMode:Pe,urlInput:pt,jobRequirementRoutingPlan:ye,screenshotPreviews:u},jobRequirementRoutingPlan:ye,...e};return p.previewUrl=Gt(p.previewUrl)??Gt(p.currentParseSession?.filePath)??l??null,r===Qr&&$t(p)?{...p,storageMode:"full",...vn(p)?{[zo]:!0,showcaseVersion:Fo}:{}}:r!==Qr?p:{...p,storageMode:r,jdState:{...p.jdState,screenshotPreviews:[]}}},[v,ni,P,L,Pe,ls,ye,H,Be,Zt,nn,Lt,Tt,Ce,me,ie,yt,Rt,St,Et,At,vt,lr,Jt,rn,sn,on,ee,V,pt,Ri,Si,si,kr,Nt,Rr,tt]),Mr=o.useCallback(async(e,n={})=>{if(!e?.aiExtractedData)return;const r=$t(e)||ze.current==="demo"||Qe()==="demo";try{An(jt(e,{storageMode:r?"full":Qr}))}catch(l){console.warn("Failed to persist quick resume snapshot locally",l)}const s=e.currentParseSession?.id;if(!(!n.persistRemote||!s)&&!(r||String(s).startsWith("demo-resume-")))try{await Wt(`/api/resume-parse/${s}/quick-resume-state`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({snapshot:e})})}catch(l){console.warn("Failed to persist quick resume snapshot remotely",l)}},[jt]),mt=o.useRef(i?.setChromeInputs);mt.current=i?.setChromeInputs,o.useEffect(()=>{if(!t)return;const e=H||"",n=ie||V||null;!e.trim()&&!n||mt.current?.({jdText:e,resumeName:n,resumeSource:ie?"library":V?"local":null})},[t,H,ie,V]);const us=o.useCallback(()=>{mt.current?.({jdText:"",resumeName:null,resumeSource:null}),Ct(null),ve(null),we(null),X(null),Ue(null),Oe(null),_e(null),Ft([]),xt([]),Bn([]),rr([]),ir([]),sr([]),or(null),ar([]),cr([]),Un([]),ur([]),jr([]),yi([]),Ro([]),Pr([]),qr([]),_r([]),Kn(null),ct({}),Wn(new Set),qn(new Set),_n({}),fi(null),Bt(null),Mt("idle"),Jn([]),Ui.current=!1,Fi&&(Fi.current=null),Ze(""),Sn(!1),en([]),se(0),Ar("profile"),Je(!1),M(!1),dr.current=!1,Nr.current="",Zn.current="",wr(null),Vu()},[]),{hydrateDemoQuickResumeShowcase:ds,invalidateDemoHydrate:Vc}=Ed(Xs);
24Xs.current={activeScopeRef:ze,restoreQuickResumeSnapshot:wi,setSelectedLibraryResume:_e,setSelectedLibraryResumeName:Oe,setUploadedResumeName:we,setUploadedFile:X,setPreviewUrl:Ue,setLocalJdText:Ze,setIsExtracted:Sn,setInputMode:qe,setUrlInput:wt,setScreenshots:en,setCurrentStep:se,setMountedSteps:be,setActiveTab:Ar,normalizeQuickResumeActiveTab:pn,sessionCacheRef:xe,setChromeInputs:e=>mt.current?.(e)};const Yc=o.useCallback(()=>Cd({currentParseSession:P,aiExtractedData:v}),[v,P]),mr=o.useRef(null),Dr=o.useRef(null),Ht=o.useRef(!1),kn=o.useRef(null),wn=o.useRef(null),In=o.useRef(null),Ot=o.useRef(0),Fn=o.useRef(!1),an=o.useRef(v);an.current=v;const ms=o.useRef(P);ms.current=P;const Ii=o.useRef(()=>{}),ps=o.useRef(()=>{}),Xc=e=>e==="account"?"account":"demo",fs=o.useRef(jt);fs.current=jt;const cn=o.useRef(wi);cn.current=wi;const Ti=o.useRef(us);Ti.current=us;const xi=o.useRef(ds);xi.current=ds;const Lr=o.useRef(()=>{}),gs=o.useRef(!1),Zc=o.useCallback((e="empty-body")=>{if(It.current||Ht.current||an.current||gs.current)return;const n=String(i?.chromeResumeName||ie||V||"");fe||me||ie||V||i?.pendingResume?.file;const r=Qe(),s=xe.current.demo,l=xe.current.account,u=l?.aiExtractedData&&Wr(l)&&l||s?.aiExtractedData&&Wr(s)&&s||null,p=!!(s?.aiExtractedData&&vn(s)&&!Br(s)),b=md({mode:r,localHasExtract:!!an.current,libraryCached:u,showcaseCached:p?s:null});if(b.type==="noop"){N(!1),D(!1),Ht.current=!1;return}gs.current=!0,console.warn("[qr] recover empty body",e,b.source);const m=(a,c)=>{if(!a?.aiExtractedData||It.current)return!1;ze.current=c,c==="demo"?xe.current.demo=a:xe.current.account=a,cn.current(a);try{if(b.source==="library"&&a.selectedLibraryResume)_e(a.selectedLibraryResume),Oe(a.selectedLibraryResumeName||a.selectedLibraryResume.resumeName||null);else if(b.source==="showcase"){const S=Fs();_e(S),Oe(S.resumeName),we(null),X(null),Ue(null)}mt.current?.({jdText:String(a.jdState?.localJdText||""),resumeName:a.selectedLibraryResumeName||a.uploadedResumeName||null,resumeSource:a.selectedLibraryResumeName?"library":a.uploadedResumeName?"local":null})}catch{}N(!1),D(!1),Ht.current=!1;const R=xn(i?.shellStep??a.currentStep??Ye.current,0);return se(R),be(S=>S.includes(R)?S:[...S,R]),!0};try{m(b.snap,b.source==="library"||r==="account"?"account":"demo")}catch(a){console.error("[qr] recover empty body failed",a)}finally{gs.current=!1}},[i?.chromeJdText,i?.chromeResumeName,i?.pendingResume,i?.shellStep,me,ie,fe,V]);Lr.current=Zc,o.useEffect(()=>{if(g||F||v)return;const e=window.setTimeout(()=>{Lr.current?.("post-paint-empty")},120);return()=>window.clearTimeout(e)},[g,F,v]);const Ei=o.useCallback(()=>{const e=ze.current;try{const n=fs.current({},{storageMode:"full"});n?.aiExtractedData?xe.current[e]=n:e==="account"&&(xe.current.account=En)}catch{e==="account"&&(xe.current.account=En)}},[]),{applyDemoWorkbenchMode:Ao}=vd(Zs);Zs.current={sessionCacheRef:xe,activeScopeRef:ze,aiExtractedDataRef:an,currentParseSessionRef:ms,restoreQuickResumeSnapshot:e=>cn.current(e),clearQuickResumeWorkbenchState:()=>Ti.current(),hydrateDemoQuickResumeShowcase:()=>xi.current(),invalidateDemoHydrate:Vc,isStaleDemoQuickResumeShowcaseCache:Br,normalizeQuickResumeActiveTab:pn,setCurrentStep:se,setMountedSteps:be,setActiveTab:Ar,setShowLibrary:Je,setLibraryMountReady:M,setProfileData:Se,setChromeInputs:e=>mt.current?.(e)},Ii.current=Ao;const bs=o.useCallback(e=>{const n=Xc(e),r=ze.current;Fn.current||(qu(),Fn.current=!0),_u(),kn.current&&(clearTimeout(kn.current),kn.current=null),wn.current!=null&&typeof window<"u"&&"cancelIdleCallback"in window&&(window.cancelIdleCallback(wn.current),wn.current=null),In.current&&(clearTimeout(In.current),In.current=null),Ot.current+=1;const s=Ot.current,l=(b=420)=>{kn.current=setTimeout(()=>{kn.current=null,s===Ot.current&&(Fn.current&&(Fn.current=!1,Vo(0)),Yo())},b)};if(n===r&&!Ht.current){mr.current=null,Dr.current=null,l(120);return}const u=xe.current[n];if(!!(n==="demo"&&u?.aiExtractedData||n==="account"&&(u?.aiExtractedData||u?.__emptyAccountSession))){Ei(),mr.current=null,Dr.current=null,o.startTransition(()=>{s===Ot.current&&Ii.current(e)}),l(280);return}mr.current=e,Dr.current=n,Ht.current||(Ht.current=!0,D(!0),be([]),M(!1),requestAnimationFrame(()=>{s===Ot.current&&Ei()})),In.current=setTimeout(()=>{In.current=null,s===Ot.current&&ps.current(s,()=>l(480))},16)},[Ei]),vo=o.useCallback((e,n)=>{if(e!==Ot.current)return;const r=mr.current;if(mr.current=null,Dr.current=null,!r){Ht.current=!1,o.startTransition(()=>{D(!1),be([0]),Ce&&M(!0)}),n();return}const s=()=>
24{if(e!==Ot.current)return;wn.current=null,o.startTransition(()=>{e===Ot.current&&(Ii.current(r),Ht.current=!1,D(!1))});const l=()=>{e===Ot.current&&(Ce&&M(!0),n())};typeof window<"u"&&"requestIdleCallback"in window?window.requestIdleCallback(l,{timeout:600}):window.setTimeout(l,120)};typeof window<"u"&&"requestIdleCallback"in window?wn.current=window.requestIdleCallback(s,{timeout:280}):s()},[Ce]);ps.current=vo,o.useEffect(()=>()=>{kn.current&&clearTimeout(kn.current),In.current&&clearTimeout(In.current),wn.current!=null&&typeof window<"u"&&"cancelIdleCallback"in window&&window.cancelIdleCallback(wn.current),Fn.current&&(Fn.current=!1,Vo(0)),Wo()},[]),o.useEffect(()=>{if(!g&&Gl())return Ls("qr-demo-warm",()=>{xe.current.demo?.aiExtractedData&&!Br(xe.current.demo)||(async()=>{try{const{buildDemoQuickResumeShowcaseSnapshot:e}=await rt(async()=>{const{buildDemoQuickResumeShowcaseSnapshot:r}=await import("./demoQuickResumeShowcase-PfBsrRkM.js");return{buildDemoQuickResumeShowcaseSnapshot:r}},__vite__mapDeps([76,77,43,1,2,34,42])),n=e();o.startTransition(()=>{xe.current.demo=n})}catch{}})()},{timeout:4500}),()=>{Js("qr-demo-warm")}},[g]),o.useEffect(()=>{let e=!1,n=!1;const r=()=>{It.current||Qe()!=="demo"||N(!1)},s=p=>{cn.current(p),xe.current.demo=p,ze.current="demo",mt.current?.({jdText:String(p.jdState?.localJdText||""),resumeName:p.selectedLibraryResumeName||null,resumeSource:p.selectedLibraryResumeName?"library":null}),r()},l=()=>{if(It.current||Qe()!=="demo")return;ze.current="demo";const p=xe.current.demo;if(p?.aiExtractedData&&!Br(p)){o.startTransition(()=>s(p));return}let b=null;try{b=Gr()}catch(a){console.error("Failed to parse saved resume state",a)}if(b?.aiExtractedData&&$t(b)&&!Br(b)){o.startTransition(()=>s(b));return}const m=(a=!1)=>{xi.current().then(c=>{if(!(It.current||Qe()!=="demo")){if(c){xe.current.demo=c,r();return}if(!a){window.setTimeout(()=>{It.current||Qe()!=="demo"||m(!0)},160);return}r()}}).catch(c=>{if(console.error("[QR] demo hydrate failed",c),!a){window.setTimeout(()=>{It.current||Qe()!=="demo"||m(!0)},160);return}r()})};m(!1)};if(Qe()==="demo"){const p=window.requestAnimationFrame(()=>l());return()=>{window.cancelAnimationFrame(p)}}return g?void 0:(Ls("qr-restore",()=>{if(n||It.current)return;const p=Qe(),b=sa(),m=mu();let a=null;if(m)xe.current.account=En,xe.current.demo=null,mt.current?.({jdText:"",resumeName:null}),N(!1),be([0]),D(!1),Ht.current=!1;else try{a=Gr()}catch(R){console.error("Failed to parse saved resume state",R)}o.startTransition(()=>{if(n||It.current||b!==sa())return;p==="account"?(ze.current="account",a&&vn(a)?(xe.current.demo=a,xe.current.account=En,mt.current?.({jdText:"",resumeName:null}),Ti.current()):a&&Wr(a)?(xe.current.account=a,xe.current.demo=a,ze.current="account",cn.current(a),e=!0):a?.aiExtractedData?(e=!0,cn.current(a),xe.current.account=a):(xe.current.account=En,String(i?.chromeResumeName||"").trim()||mt.current?.({jdText:"",resumeName:null}))):a?.aiExtractedData?(e=!0,cn.current(a),ze.current=$t(a)?"demo":"account",ze.current==="demo"?xe.current.demo=a:xe.current.account=a):(ze.current="account",mt.current?.({jdText:"",resumeName:null}),xe.current.account=En);let R="";if(p!=="demo"&&!(p==="account"&&(!a||$t(a)))){try{const S=Sa();if(S){if(S.localJdText&&(R=S.localJdText,Ze(S.localJdText)),S.isExtracted&&Sn(!0),S.inputMode&&qe(S.inputMode),S.urlInput&&wt(S.urlInput),S.jobRequirementRoutingPlan?.requirements?.length&&!ti(S.jobRequirementRoutingPlan,S.localJdText||"")){const f=Qt(S.jobRequirementRoutingPlan,S.localJdText||""),d=Sr(f,S.localJdText||"");d.length===0&&Pn(f,S.localJdText||"")?(Bt(f),Mt("ready"),Yn("全部")):(Bt(null),Mt("idle"),Jn(d))}S.screenshotPreviews&&S.screenshotPreviews.length>0&&en(S.screenshotPreviews.map(f=>({file:null,preview:f})))}}catch(S){console.error("Failed to parse saved JD state",S)}try{const S=Gu();if(S?.requirements?.length&&!ti(S,R)){const f=Qt(S,R),d=Sr(f,R);d.length===0&&Pn(f,R)?(Bt(f),Mt("ready"),Yn("全部")):(Bt(null),Mt("idle"),Jn(d),ct({}),Yt())}else S?.requirements?.length&&Yt()}catch(S){console.error("Failed to parse saved routing plan",S)}}}),ud({mode:p,restoredFromLocal:e||m,userReset:m}
24)&&Ls("qr-remote-snapshot",()=>{if(n||It.current)return;const R=AbortSignal.timeout(pu);Wt("/api/resume-parse/quick-resume-state/latest",{signal:R}).then(async S=>S.status===401||S.status===403?(console.warn("[qr]",ra("unauthorized")),an.current||Lr.current?.("remote-snapshot-401"),null):S.ok?S.json():null).then(S=>{if(n||It.current||S==null)return;if(!dd({localHasExtract:!!an.current,remote:S})){an.current||Lr.current?.("remote-snapshot-empty");return}const f={...S.snapshot,currentParseSession:S.snapshot.currentParseSession||S.session};o.startTransition(()=>{n||(ze.current="account",xe.current.account=f,cn.current(f))});try{An(f),f.jdState&&pr(f.jdState),f.jobRequirementRoutingPlan?.requirements?.length&&Cn(f.jobRequirementRoutingPlan)}catch{}z.success("已恢复上次快捷简历解析记录")}).catch(S=>{S?.name==="TimeoutError"||S?.name==="AbortError"?console.warn("[qr] remote snapshot restore timed out; keep local (zero side-effect)"):console.warn("[qr]",ra("fail"),S),an.current||Lr.current?.("remote-snapshot-fail")})},{timeout:3500})},{timeout:2200}),()=>{n=!0,Js("qr-restore"),Js("qr-remote-snapshot")})},[g]),cd({enabled:!!v&&Qe()!=="demo"&&!$t({currentParseSession:P,aiExtractedData:v}),buildLiteSnapshot:()=>jt({},{storageMode:Qr}),deps:[v,jt,Ri,Si,P]});const el=e=>new Promise(n=>{const r=new FileReader;r.onload=()=>n(r.result),r.readAsDataURL(e)}),jo=e=>{const n=xn(e,L);if(n===L)return;if(t&&Re){Re(n);return}if(o.startTransition(()=>se(n)),!v||!P?.id)return;if(ze.current==="demo"||Qe()==="demo"||$t({currentParseSession:P,aiExtractedData:v})){try{const l=Gr();l?.aiExtractedData&&$t(l)&&An({...l,currentStep:n,[zo]:!0,showcaseVersion:Fo},{step:n,hasExtract:!0})}catch{}return}const r=n,s=()=>{Mr(jt({currentStep:r}),{persistRemote:!1})};typeof window<"u"&&"requestIdleCallback"in window?window.requestIdleCallback(s,{timeout:2e3}):window.setTimeout(s,400)},hs=async e=>{if(!e.trim())return z.warning("无法获取有效文本");const n=e.substring(0,15e3);Ze(n),Sn(!0),io(),z.success("已成功提取 JD 内容!您可以核对编辑后,点击下方开始智能分析");const r=[];for(const l of Zt)l.file?r.push(await el(l.file)):l.preview?.startsWith("data:")&&r.push(l.preview);const s={localJdText:n,isExtracted:!0,inputMode:Pe,urlInput:pt,jobRequirementRoutingPlan:null,screenshotPreviews:r};pr(s),An(jt({tabReports:{},aiSuggestions:null,selectedSkillIds:[],selectedExpIds:[],selectedEduIds:[],jobRequirementRoutingPlan:null,jdState:s})),P?.id&&v&&await Mr(jt({tabReports:{},aiSuggestions:null,selectedSkillIds:[],selectedExpIds:[],selectedEduIds:[],jobRequirementRoutingPlan:null,jdState:s}),{persistRemote:!0})},ys=o.useRef(bs);ys.current=bs;const Rs=o.useRef(hs);Rs.current=hs;const Ci=i?.registerWorkbench;o.useEffect(()=>{if(!(!t||!Ci))return Ci({applyJdText:e=>{if(mt.current?.({jdText:e}),e.trim()){Rs.current(e);return}Ze(""),Sn(!1),Bt(null),Mt("idle"),Jn([]),pr(null),Yt()},applyResumeFile:e=>{mt.current?.({resumeName:e.name,resumeSource:"local"}),we(e.name),X(e),Oe(null),_e(null),N(!1)},openResumeLibrary:()=>{Xe(!0),rt(()=>import("./ResumeLibraryPage-XT37F_qb.js"),__vite__mapDeps([78,2,1,79,55,56,57,13,80,22,23,81,82,51,52,53,54,75])).catch(e=>{console.error("[qr] ResumeLibraryPage chunk failed",e),Xe(!1),z.error("简历库加载失败,请重试或改用本地上传")})},onDemoBodySwap:e=>ys.current(e)}),()=>{Ci(null)}},[t,Ci]);const Ai=o.useCallback(e=>{const n=e?pn(_d[e]):"";if(n){bi(n);try{window.dispatchEvent(new CustomEvent("qr-profile-tab-ref",{detail:{tab:n}}))}catch{}}},[bi]),Ss=G.useCallback(async()=>{const e=String(i?.chromeJdText||"").trim(),n=($||e||"").trim();if(oi("overall"),so(!0),!n){Tr(!1),On("请先在上方导入或录入目标岗位 JD,再运行整体分析"),z.warning({content:"请先提取或录入 JD 内容后再点「整体分析」",duration:4,key:"qr-overall-analysis-need-jd"});return}if(!$.trim()&&e&&Ze(e),Ho({activeScope:ze.current,currentParseSession:P,aiExtractedData:v,selectedLibraryResumeName:ie,uploadedResumeName:V,selectedLibraryResume:me})){if(Tr(!1),On(null),ii(!1),!kr?.perspectives?.length){const{buildDemoGrowthOpsOverallAnalysis:s}=await rt(async()=>{const{buildDemoGrowthOpsOverallAnalysis:u}=await import("./workbench-shared-DT5eicUP.js").then(p=>p.lP);return{buildDemoGrowthOpsOverallAnalysis:u}},__vite__mapDeps([1,2])),l=s();wr(l),Zn.current=n.slice(0,240)}z.success({content:"已展示示例三面评估",key:"qr-overall-analysis",duration:2});return}
24Tr(!0),On(null),z.loading({content:"正在整体分析…",key:"qr-overall-analysis",duration:0}),await $s();try{const s=Ge(n),l=Ne(ye,n)||Ne(ge,n)||null,u=new Set(Qn.map(I=>I?.id).filter(I=>I!=null).map(String)),p=new Set(st.workExps.map(I=>I?.id).filter(I=>I!=null).map(String)),b=Tt.length>0?Tt:Iu(Qn),m=zt.length>0?zt:Tu(st.workExps),a=b.filter(I=>u.has(String(I))),c=m.filter(I=>p.has(String(I))),R=nn.length>0?nn:xu(v?.education||[]),S=new Set((v?.education||[]).map(I=>I?.id).filter(I=>I!=null).map(String)),f=R.filter(I=>S.has(String(I))),d=await Su({jdText:n,jobTitle:s.jobTitle,companyName:l?.jdMeta?.companyName||"",basicInfo:v?.basicInfo,selectedNameIds:yt,selectedEmailIds:Rt,selectedPhoneIds:St,educations:v?.education||[],selectedEduIds:f,skills:Qn,selectedSkillIds:a,workExps:st.workExps,selectedWorkIds:c,adoptedSkillCards:tr,adoptedWorkCards:ht,scoringConfig:Hi,routingPlan:l||void 0});if(!Gn.current)return;if(!d?.perspectives?.length)throw new Error("整体分析返回为空");wr(d),ii(!1),On(null),Zn.current=JSON.stringify({jd:n.slice(0,240),skills:a,exps:c,adoptedKeys:Array.from(Nt)}),z.success({content:"整体分析完成",key:"qr-overall-analysis",duration:2})}catch(s){if(!Gn.current)return;console.error("[Quick Resume Overall Analysis]",s);const l=vu(s?.message||"请稍后重试");On(l),z.error({content:"整体分析失败,请稍后重试",key:"qr-overall-analysis",duration:4})}finally{Tr(!1)}},[v,ht,Nt,tr,P,ge,zt,ye,$,kr?.perspectives?.length,st.workExps,Qn,Hi,nn,Rt,Lt,me,ie,yt,St,Tt,V,i?.chromeJdText]);o.useEffect(()=>{const e=JSON.stringify({jd:$.slice(0,240),skills:Tt,exps:zt,adoptedKeys:Array.from(Nt)});co(e)},[Nt,zt,$,Tt,co]),_a.current={normalizedLocalJdText:$,handleJdRoutingPlanQuickResume:zi,syncProfileTabForReportTab:Ai,jobRequirementRoutingPlan:ye,jobRequirementRoutingPlanRef:to,setJobRequirementRoutingPlan:Bt,hasTrustedRoutingPlan:za,aiEngineProgress:lt,tabReports:ee,setTabReports:ct,setAiSuggestions:Kn,buildEffectiveQuickResumeProfileData:Eo,quickResumeAdaptationSkills:dt,quickResumeExperienceLibrary:gt,profileData:ue,aiExtractedData:v,persistQuickResumeSnapshot:Mr,buildQuickResumeSnapshot:jt,aiReportActiveTab:_t,setAiReportActiveTab:Oi,getRoutingPlanValidationErrors:Sr,routingPlanStatusRef:no,routingRequestInFlightRef:Ui,routingInFlightPromiseRef:Fi,abortJdRoutingFlight:Oa,activeScopeRef:ze,setRoutingPlanStatus:Mt,isDemoAnalysisShortCircuit:()=>Ho({activeScope:ze.current,currentParseSession:P,aiExtractedData:v,selectedLibraryResumeName:ie,uploadedResumeName:V,selectedLibraryResume:me})};const Po=async()=>{if(!Ko("当前在浏览示例数据,无法一键入库到个人档案库。请切换到「仅账号」模式后再操作。"))return;if(!v||!P?.id){z.warning("没有可入库的提取数据或会话无效");return}const e=String(P.id),n=e.startsWith("demo-resume-")||P?.source==="demo_library"||!/^\d+$/.test(e);De(!0);const r={},s=v.basicInfo||{};for(const u of["names","emails","phones","cities","links"]){const p=s[u];p?.length&&(u==="cities"?r[u]=p.map(b=>b.city||b):r[u]=p)}for(const u of["birthDate","gender","startWorkYear","politicalStatus","degree","nationality"])s[u]?.length&&(r[u]=s[u]);v.skills?.length&&(r.skills=v.skills);const l=(v.experience?.workExps||[]).filter(u=>u?.companyId!=null||u?.projectId!=null);if(l.length&&(r.workExperience=l),v.experience?.companies?.length&&(r.companies=v.experience.companies.map(u=>({...u,companyName:u.companyName||u.name,companyNameEn:u.companyNameEn||u.nameEn,companyDesc:u.companyDesc||u.description,companyLocation:u.companyLocation||u.location,_workExperience:u._workExperience||u.workExperience||[]}))),v.experience?.projects?.length&&(r.projects=v.experience.projects.map(u=>({...u,projectName:u.projectName||u.name,projectDesc:u.projectDesc||u.description,projectLink:u.projectLink||u.link,_workExperience:u._workExperience||u.workExperience||[]}))),v.education?.length&&(r.education=v.education),v.selfIntro?.length&&(r.selfIntro=v.selfIntro),v.intent){const u=v.intent.positions||[];u.length&&(r.jobIntents=u.map(b=>({jobTitle:b.jobTitle||b.title||b.name,salary:b.salary})));const p=v.intent.status;if(p){const b=Array.isArray(p)?p:[p];r.jobStatuses=b.map(m=>typeof m=="string"?{status:m}:{status:m.status||m,earliestDate:m.earliestDate})}v.intent.cities?.length&&(r.intendedCities=v.intent.cities.map(b=>b.city||b)),v.intent.intendedJobTypes?.length&&(r.intendedJobTypes=v.intent.intendedJobTypes)}try{const u=n?await Wt("/api/resume-parse/import-selections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selections:r})}):await Wt(`/api/resume-parse/${P.id}/confirm`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selections:r})});if(!u.ok)throw new Error;const p=await u.json(),b=[];p.imported?.length&&b.push(`新增 ${p.imported.join("、")}`),p.skipped>0&&b.push(`跳过 ${p.skipped} 条重复数据`),z.success(b.length?`一键入库完成:${b.join(",")}`:"入库完成,无新增数据(全部为已有记录)");const m={...P,status:"confirmed"};ve(m),await Mr(jt({currentParseSession:m}),{persistRemote:!n});try{const{dispatchEagleAssetRefresh:a}=await rt(async()=>{const{dispatchEagleAssetRefresh:c}=await import("./workbench-shared-DT5eicUP.js").then(R=>R.lH);return{dispatchEagleAssetRefresh:c}},__vite__mapDeps([1,2]));a()}catch{}}catch{z.error("一键入库失败,请重试")}finally{De(!1)}},ks=P?.status==="confirmed",tl=!!(P?.id&&(String(P.id).startsWith("demo-resume-")||P?.source==="demo_library"||!/^\d+$/.test(String(P.id)))),nl=v?ks?"提取结果已写入求职档案库,可在求职资产库中复用;再次点击会跳过重复项":tl?"当前为示例工作档:在「仅账号」下可一键写入你的个人档案库(不会改动示例源数据)":"当前仅在本页暂存,尚未入库。点击此按钮,将上方提取结果写入求职档案库,后续可复用":"请先完成简历识别提取,再一键写入档案库",Jr={...{borderRadius:A?7:8,fontSize:A?11:qt.headerBtn},fontWeight:600,height:A?26:30,paddingLeft:A?6:void 0,paddingRight:A?6:void 0,color:"#fff",borderColor:dn.accent,background:dn.accent,boxShadow:A?"none":`0 4px 12px ${dn.accentShadow}`},ws=()=>k.jsx(Rl,{title:nl,placement:"bottomRight",children:k.jsx("span",{style:{display:"inline-block"},children:k.jsx(ln,{type:"primary",icon:k.jsx(Sl,{}),onClick:Po,loading:je,disabled:!v,className:"quick-resume-profile-primary-btn blue-save-all-btn quick-resume-save-all-btn",style:Jr,children:"一键全部入库"})})});o.useEffect(()=>{const e=n=>{if(Qe()==="account")return;const r=n.target;if(!r?.closest||r.closest("[data-demo-allow-click], .demo-data-banner, .ant-modal-root, .ant-message, .ant-notification")||r.closest(".ant-tabs-nav, .ant-segmented"))return;const s=r.closest([".quick-resume-save-all-btn",".blue-save-all-btn",".asset-card-library-deposit-btn",".qr-wb-section-add-btn",".info-card-actions",".edu-card-actions",".intent-selection-chip .ant-btn"].join(", "));s&&s.closest(".quick-resume-stage2-workbench, .quick-resume-stage3-workbench, .qr-wb-token-scope, .quick-resume-session-data")&&(n.preventDefault(),n.stopPropagation(),Ko())};return document.addEventListener("click",e,!0),()=>document.removeEventListener("click",e,!0)},[]);const rl=(e="blue")=>{const n=e==="purple"?"quick-resume-stage3-workbench":"quick-resume-stage2-workbench",r=e==="purple"?Hr:We,s=e==="purple"?`linear-gradient(90deg, #52525b 0%, ${Hr} 100%)`:`linear-gradient(90deg, #52525b 0%, ${We} 100%)`,l=`
25            /* 左右栏 Tab:六等分满宽;钉在滚动区外时用 relative(勿 sticky 跟滚) */
26            .${n} .sub-tabs-skeleton > .ant-tabs-nav {
27                position: relative !important;
28                top: auto !important;
29                z-index: 20 !important;
30                margin: 0 0 16px 0 !important;
31                padding: 8px 0 12px 0 !important;
32                background: #ffffff !important;
33                background-color: #ffffff !important;
34                border-bottom: none !important;
35                display: flex !important;
36                width: 100% !important;
37                justify-content: stretch !important;
38                box-shadow: 0 8px 12px -8px rgba(15, 23, 42, 0.08);
39            }
40            .${n} .sub-tabs-skeleton > .ant-tabs-nav::before { display: none; }
41            .${n} .sub-tabs-skeleton .ant-tabs-nav-wrap {
42                flex: 1 1 auto !important;
43                width: 100% !important;
44                max-width: 100% !important;
45                justify-content: stretch !important;
46                background: #ffffff !important;
47                border: none !important;
48                padding: 0 !important;
49                overflow: visible !important;
50            }
51            .${n} .sub-tabs-skeleton .ant-tabs-nav-list {
52                display: flex !important;
53                width: 100% !important;
54                justify-content: stretch !important;
55            }
56            .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab {
57                flex: 1 1 0 !important;
58                min-width: 0 !important;
59                justify-content: center !important;
60                padding: 4px 1px !important;
61                font-size: ${qt.tab}px !important;
62                font-weight: 400 !important;
63                color: #64748b !important;
64                margin: 0 !important;
65                border-radius: 0 !important;
66                border: none !important;
67                background: transparent !important;
68                transition: all 0.2s ease !important;
69                border-bottom: 2px solid transparent !important;
70                text-align: center !important;
71            }
72            .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {
73                margin-left: 0 !important;
74            }
75            .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-btn {
76                width: 100% !important;
77                text-align: center !important;
78                white-space: nowrap !important;
79                overflow: hidden !important;
80                text-overflow: ellipsis !important;
81                letter-spacing: -0.02em !important;
82                font-size: ${qt.tab}px !important;
83                line-height: 1.3 !important;
84                color: inherit !important;
85            }
86            .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab:hover {
87                color: #1d1d1f !important;
88                background: transparent !important;
89            }
90            .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab.ant-tabs-tab-active {
91                color: ${r} !important;
92                border-bottom: 2px solid transparent !important;
93                border-image: ${s} 1 !important;
94                background: transparent !important;
95                box-shadow: none !important;
96            }
97            .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
98                color: ${r} !important;
99                font-weight: 600 !important;
100            }
101            .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-ink-bar { display: none !important; }
102            .${n} .quick-resume-match-tabs {
103                /* 内容已外置到 .qr-profile-tab-body;Tabs 只留导航,禁止再占 360px 白板 */
104                flex: 0 0 auto;
105                min-height: 0 !important;
106                height: auto !important;
107                display: flex;
108                flex-direction: column;
109            }
110            .${n} .quick-resume-match-tabs > .ant-tabs-nav {
111                flex: 0 0 auto;
112                width: 100% !important;
113                background: #ffffff !important;
114                background-color: #ffffff !important;
115            }
116            /* 模块标题随内容一起滚动,禁止吸顶导致标题与卡片分离 */
117            .${n} .qr-wb-sticky-section-head,
118            .${n} .qr-wb-section-head {
119                position: relative !important;
120                top: auto !important;
121                z-index: auto !important;
122                background: transparent !important;
123                padding-top: 0 !important;
124                padding-bottom: 8px !important;
125                margin-bottom: 8px !important;
126                box-shadow: none !important;
127            }
128            .${n} .quick-resume-profile-nav-pin {
129                flex: 0 0 auto !important;
130                width: 100% !important;
131                background: #ffffff !important;
132            }
133            /* 面板内容已外置到 .qr-profile-tab-body;空 holder 禁止再占 360px 白板 */
134            .${n} .quick-resume-match-tabs > .ant-tabs-content-holder {
135                display: none !important;
136                flex: 0 0 0 !important;
137                height: 0 !important;
138                min-height: 0 !important;
139                margin: 0 !important;
140                padding: 0 !important;
141                overflow: hidden !important;
142            }
143            .${n} .quick-resume-match-tabs > .ant-tabs-content-holder::-webkit-scrollbar {
144                display: none;
145                width: 0;
146                height: 0;
147            }
148            .${n} .quick-resume-decision-nav-tabs {
149                flex: none !important;
150                min-height: auto !important;
151                overflow: visible !important;
152                width: 100% !important;
153            }
154            /* 决策 / 档案 Tab 共用同一套 nav padding,保证左右水平线一致 */
155            .${n} .quick-resume-decision-nav-tabs > .ant-tabs-nav,
156            .${n} .quick-resume-profile-nav-pin .sub-tabs-skeleton > .ant-tabs-nav {
157                position: relative !important;
158                top: auto !important;
159                z-index: auto !important;
160                width: 100% !important;
161                margin: 0 0 16px 0 !important;
162                padding: 8px 0 12px 0 !important;
163                justify-content: stretch !important;
164                align-items: center !important;
165                background: #ffffff !important;
166            }
167            .${n} .quick-resume-decision-report-scroll {
168                scrollbar-width: none;
169                -ms-overflow-style: none;
170            }
171            .${n} .quick-resume-decision-report-scroll::-webkit-scrollbar {
172                display: none !important;
173                width: 0 !important;
174                height: 0 !important;
175            }
176            .${n} .quick-resume-decision-nav-tabs .ant-tabs-nav-wrap,
177            .${n} .quick-resume-profile-nav-pin .ant-tabs-nav-wrap {
178                flex: 1 1 auto !important;
179                width: 100% !important;
180            }
181            .${n} .quick-resume-decision-nav-tabs .ant-tabs-extra-content {
182                margin-left: auto !important;
183                flex-shrink: 0 !important;
184            }
185            .${n} .quick-resume-decision-nav-tabs > .ant-tabs-content-holder {
186                display: none !important;
187                height: 0 !important;
188                min-height: 0 !important;
189                margin: 0 !important;
190                padding: 0 !important;
191                overflow: hidden !important;
192            }
193            .${n} .quick-resume-match-panel-scroll {
194                scrollbar-width: none;
195                -ms-overflow-style: none;
196            }
197            .${n} .quick-resume-match-panel-scroll::-webkit-scrollbar {
198                display: none !important;
199                width: 0 !important;
200                height: 0 !important;
201            }
202            /* 双栏内滚动:可滑,不显示滚动条(盖过全局 5px 灰条) */
203            .${n} .qr-match-panel-body,
204            .${n} .qr-preview-pane-scroll,
205            .${n} .qr-profile-tab-body {
206                scrollbar-width: none;
207                -ms-overflow-style: none;
208            }
209            .${n} .qr-match-panel-body::-webkit-scrollbar,
210            .${n} .qr-preview-pane-scroll::-webkit-scrollbar,
211            .${n} .qr-profile-tab-body::-webkit-scrollbar {
212                display: none !important;
213                width: 0 !important;
214                height: 0 !important;
215            }
216            .${n} .quick-resume-match-tabs > .ant-tabs-content-holder > .ant-tabs-content,
217            .${n} .quick-resume-match-tabs > .ant-tabs-content,
218            .${n} .quick-resume-match-tabs .ant-tabs-tabpane,
219            .${n} .quick-resume-match-tabs .ant-tabs-tabpane-active {
220                display: none !important;
221                height: 0 !important;
222                min-height: 0 !important;
223                margin: 0 !important;
224                padding: 0 !important;
225                overflow: hidden !important;
226            }
227            /* 桌面:双栏卡片字号阶梯(卡头 15 / Tab·区块 14 / 正文 13) */
228            @media (min-width: 901px) {
229                .${n} .qr-wb-token-scope .qr-match-panel-body,
230                .${n} .qr-wb-token-scope .quick-resume-match-panel-scroll {
231                    font-size: ${qt.body}px;
232                    line-height: 1.55;
233                    color: #334155;
234                }
235                .${n} .qr-wb-token-scope .qr-wb-section-head {
236                    font-size: ${qt.sectionTitle}px;
237                }
238            }
239            /* 手机:全称 Tab 横滑,禁止六等分挤成省略号 */
240            @media (max-width: 900px) {
241                .${n} .sub-tabs-skeleton .ant-tabs-nav-wrap,
242                .${n} .quick-resume-decision-nav-tabs .ant-tabs-nav-wrap,
243                .${n} .quick-resume-profile-nav-pin .ant-tabs-nav-wrap {
244                    overflow-x: auto !important;
245                    overflow-y: hidden !important;
246                    justify-content: flex-start !important;
247                    -webkit-overflow-scrolling: touch;
248                    scrollbar-width: none;
249                }
250                .${n} .sub-tabs-skeleton .ant-tabs-nav-wrap::-webkit-scrollbar {
251                    display: none;
252                    width: 0;
253                    height: 0;
254                }
255                .${n} .sub-tabs-skeleton .ant-tabs-nav-list {
256                    width: max-content !important;
257                    justify-content: flex-start !important;
258                }
259                .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab {
260                    flex: 0 0 auto !important;
261                    min-width: auto !important;
262                    padding: 4px 8px !important;
263                    font-size: 13px !important;
264                }
265                .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-btn {
266                    width: auto !important;
267                    font-size: 13px !important;
268                    overflow: visible !important;
269                    text-overflow: clip !important;
270                }
271                .${n} .sub-tabs-skeleton .ant-tabs-nav-operations {
272                    display: none !important;
273                }
274                /* 卡头 + 模块 Tab + 正文同层同比例,避免红框/黄框缩放不一致 */
275                .${n} .qr-wb-token-scope:has(.qr-match-panel-body) {
276                    zoom: 0.86;
277                }
278                /*
279                 * 原文件预览 / 简历预览栏没有 .qr-match-panel-body,吃不到上面整栏 zoom,
280                 * 卡头会比「JD 定制决策报告」大约 1/0.86。只缩卡头,不缩纸面预览。
281                 */
282                .${n} .qr-wb-token-scope:not(:has(.qr-match-panel-body)) .quick-resume-split-panel-header {
283                    zoom: 0.86;
284                }
285                /* 档案卡片区再缩一档(姓名/邮箱等 info-card + 区块头),Tab 条不跟着再缩 */
286                .${n} .qr-match-panel-body .qr-profile-tab-body {
287                    zoom: 0.82;
288                }
289            }
290            /* 桌面手机框 viewport 常 >900,media 不生效;样机内勿 zoom,否则卡头/Tab 被压成「决策…/知识…」 */
291            .zc-mobile-shell .${n} .qr-wb-token-scope:has(.qr-match-panel-body) {
292                zoom: 1;
293            }
294            .zc-mobile-shell .${n} .qr-wb-token-scope:not(:has(.qr-match-panel-body)) .quick-resume-split-panel-header {
295                zoom: 1;
296            }
297            .zc-mobile-shell .${n} .sub-tabs-skeleton .ant-tabs-nav-wrap,
298            .zc-mobile-shell .${n} .quick-resume-decision-nav-tabs .ant-tabs-nav-wrap,
299            .zc-mobile-shell .${n} .quick-resume-profile-nav-pin .ant-tabs-nav-wrap {
300                overflow-x: auto !important;
301                overflow-y: hidden !important;
302                justify-content: flex-start !important;
303                -webkit-overflow-scrolling: touch;
304                scrollbar-width: none;
305            }
306            .zc-mobile-shell .${n} .sub-tabs-skeleton .ant-tabs-nav-list {
307                width: max-content !important;
308                justify-content: flex-start !important;
309            }
310            .zc-mobile-shell .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab {
311                flex: 0 0 auto !important;
312                min-width: auto !important;
313                padding: 4px 8px !important;
314                font-size: 13px !important;
315            }
316            .zc-mobile-shell .${n} .sub-tabs-skeleton > .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-btn {
317                width: auto !important;
318                font-size: 13px !important;
319                overflow: visible !important;
320                text-overflow: clip !important;
321            }
322            .zc-mobile-shell .${n} .sub-tabs-skeleton .ant-tabs-nav-operations {
323                display: none !important;
324            }
325            /* 样机:档案各 Tab 统一字号/控件见 mobileShell.css(.zc-mobile-shell … qr-profile-tab-body) */
326            .zc-mobile-shell .${n} .qr-match-panel-body .qr-profile-tab-body {
327                zoom: 1;
328            }
329            /* 决策卡头三钮:满宽均分、略缩小(保留评分规则/整体分析/本模块分析全称) */
330            .zc-mobile-shell .${n} .quick-resume-split-panel-header__actions .ant-space {
331                width: 100% !important;
332                display: flex !important;
333                gap: 6px !important;
334            }
335            .zc-mobile-shell .${n} .quick-resume-split-panel-header__actions .ant-space-item {
336                flex: 1 1 0 !important;
337                min-width: 0 !important;
338            }
339            .zc-mobile-shell .${n} .quick-resume-split-panel-header__actions .ant-btn {
340                width: 100% !important;
341            }
342            .zc-mobile-shell .${n} .qr-header-btn-short {
343                display: none !important;
344            }
345            .zc-mobile-shell .${n} .qr-header-btn-full {
346                display: inline !important;
347            }
348        `;return k.jsx("style",{children:l})},qo=()=>k.jsx("style",{children:`
349            ${Lu(We,ji,Oo)}
350            /* 双栏内滚动可滑,不显示滚动条(盖过全局 5px 灰条) */
351            .quick-resume-stage2-workbench .quick-resume-decision-report-scroll,
352            .quick-resume-stage2-workbench .quick-resume-match-panel-scroll,
353            .quick-resume-stage2-workbench .qr-match-panel-body,
354            .quick-resume-stage2-workbench .qr-preview-pane-scroll,
355            .quick-resume-stage2-workbench .qr-profile-tab-body,
356            .quick-resume-stage3-workbench .quick-resume-match-panel-scroll,
357            .quick-resume-stage3-workbench .qr-match-panel-body,
358            .quick-resume-stage3-workbench .qr-preview-pane-scroll,
359            .quick-resume-stage3-workbench .qr-profile-tab-body {
360                scrollbar-width: none;
361                -ms-overflow-style: none;
362            }
363            .quick-resume-stage2-workbench .quick-resume-decision-report-scroll::-webkit-scrollbar,
364            .quick-resume-stage2-workbench .quick-resume-match-panel-scroll::-webkit-scrollbar,
365            .quick-resume-stage2-workbench .qr-match-panel-body::-webkit-scrollbar,
366            .quick-resume-stage2-workbench .qr-preview-pane-scroll::-webkit-scrollbar,
367            .quick-resume-stage2-workbench .qr-preview-pane-scroll *::-webkit-scrollbar,
368            .quick-resume-stage2-workbench .qr-profile-tab-body::-webkit-scrollbar,
369            .quick-resume-stage3-workbench .quick-resume-match-panel-scroll::-webkit-scrollbar,
370            .quick-resume-stage3-workbench .qr-match-panel-body::-webkit-scrollbar,
371            .quick-resume-stage3-workbench .qr-preview-pane-scroll::-webkit-scrollbar,
372            .quick-resume-stage3-workbench .qr-preview-pane-scroll *::-webkit-scrollbar,
373            .quick-resume-stage3-workbench .qr-profile-tab-body::-webkit-scrollbar {
374                display: none !important;
375                width: 0 !important;
376                height: 0 !important;
377                background: transparent !important;
378            }
379            .quick-resume-stage2-workbench .qr-preview-pane-scroll *,
380            .quick-resume-stage3-workbench .qr-preview-pane-scroll * {
381                scrollbar-width: none;
382                -ms-overflow-style: none;
383            }
384            /* token 仅在 .qr-wb-token-scope 内;禁止再挂到面板根(会整栏实心紫) */
385            /* 档案卡:禁止渲染色洗底;纯白 + 细描边 + 轻阴影(对齐求职档案图2) */
386            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card:not(.is-uploaded),
387            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card:not(.is-uploaded),
388            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card:not(.is-uploaded),
389            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card:not(.is-uploaded),
390            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card.is-selected:not(.is-uploaded),
391            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card.is-selected:not(.is-uploaded),
392            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card.is-selected:not(.is-uploaded),
393            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card.is-selected:not(.is-uploaded),
394            .quick-resume-stage2-workbench .skill-knowledge-card,
395            .quick-resume-stage2-workbench .info-card,
396            .quick-resume-stage2-workbench .edu-card,
397            .quick-resume-stage2-workbench .split-view-work-card,
398            .quick-resume-stage2-workbench .intent-selection-chip,
399            .quick-resume-stage2-workbench .job-intent-card,
400            .quick-resume-stage2-workbench .profile-data-card,
401            .quick-resume-stage2-workbench .ai-exp-entity-card,
402            .quick-resume-stage3-workbench .skill-knowledge-card,
403            .quick-resume-stage3-workbench .info-card,
404            .quick-resume-stage3-workbench .edu-card,
405            .quick-resume-stage3-workbench .split-view-work-card,
406            .quick-resume-stage3-workbench .intent-selection-chip,
407            .quick-resume-stage3-workbench .job-intent-card,
408            .quick-resume-stage3-workbench .profile-data-card,
409            .quick-resume-stage3-workbench .ai-exp-entity-card,
410            .quick-resume-stage2-workbench .skill-knowledge-card.is-selected,
411            .quick-resume-stage2-workbench .info-card.is-selected,
412            .quick-resume-stage2-workbench .edu-card.is-selected,
413            .quick-resume-stage2-workbench .split-view-work-card.is-selected,
414            .quick-resume-stage2-workbench .intent-selection-chip.is-selected,
415            .quick-resume-stage3-workbench .skill-knowledge-card.is-selected,
416            .quick-resume-stage3-workbench .info-card.is-selected,
417            .quick-resume-stage3-workbench .edu-card.is-selected,
418            .quick-resume-stage3-workbench .split-view-work-card.is-selected,
419            .quick-resume-stage3-workbench .intent-selection-chip.is-selected {
420                background: #ffffff !important;
421                background-image: none !important;
422                border: 1px solid rgba(0, 0, 0, 0.08) !important;
423                box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04) !important;
424                transform: none !important;
425            }
426            .quick-resume-stage2-workbench .info-card.is-selected,
427            .quick-resume-stage2-workbench .profile-data-card.is-selected,
428            .quick-resume-stage2-workbench .skill-knowledge-card.is-selected,
429            .quick-resume-stage2-workbench .edu-card.is-selected,
430            .quick-resume-stage2-workbench .split-view-work-card.is-selected,
431            .quick-resume-stage2-workbench .intent-selection-chip.is-selected,
432            .quick-resume-stage3-workbench .info-card.is-selected,
433            .quick-resume-stage3-workbench .profile-data-card.is-selected,
434            .quick-resume-stage3-workbench .skill-knowledge-card.is-selected,
435            .quick-resume-stage3-workbench .edu-card.is-selected,
436            .quick-resume-stage3-workbench .split-view-work-card.is-selected,
437            .quick-resume-stage3-workbench .intent-selection-chip.is-selected {
438                border: 1px solid rgba(0, 0, 0, 0.12) !important;
439                box-shadow: 0 4px 18px rgba(0, 0, 0, 0.1), 0 1px 4px rgba(0, 0, 0, 0.06) !important;
440            }
441            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle,
442            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle-filled,
443            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle svg,
444            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle-filled svg,
445            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card .anticon-cloud-upload,
446            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card .anticon-cloud-upload svg,
447            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle,
448            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle-filled,
449            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle svg,
450            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card.is-selected .anticon-check-circle-filled svg,
451            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card .anticon-cloud-upload,
452            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card .anticon-cloud-upload svg,
453            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle,
454            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle-filled,
455            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle svg,
456            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle-filled svg,
457            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card .anticon-cloud-upload,
458            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card .anticon-cloud-upload svg,
459            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle,
460            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle-filled,
461            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle svg,
462            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card.is-selected .anticon-check-circle-filled svg,
463            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card .anticon-cloud-upload,
464            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card .anticon-cloud-upload svg {
465                color: ${We} !important;
466            }
467            .quick-resume-stage2-workbench .intent-selection-chip.is-selected:not(.profile-ai-action-card) .anticon-check-circle-filled,
468            .quick-resume-stage2-workbench .skill-knowledge-card.is-selected .anticon-check-circle-filled,
469            .quick-resume-stage2-workbench .info-card.is-selected .anticon-check-circle-filled,
470            .quick-resume-stage2-workbench .edu-card.is-selected .anticon-check-circle-filled,
471            .quick-resume-stage2-workbench .split-view-work-card.is-selected .anticon-check-circle-filled,
472            .quick-resume-stage3-workbench .intent-selection-chip.is-selected:not(.profile-ai-action-card) .anticon-check-circle-filled,
473            .quick-resume-stage3-workbench .skill-knowledge-card.is-selected .anticon-check-circle-filled,
474            .quick-resume-stage3-workbench .info-card.is-selected .anticon-check-circle-filled {
475                color: ${We} !important;
476            }
477            /* 公司列表 / 工作卡勾选:默认黑白主色(新建/修改卡仍由上方 is-new/is-edit 规则覆盖) */
478            .quick-resume-stage2-workbench .anticon-check-circle-filled,
479            .quick-resume-stage2-workbench .anticon-check-circle-filled svg,
480            .quick-resume-stage2-workbench .split-view-work-card .anticon-check-circle-filled,
481            .quick-resume-stage2-workbench .split-view-work-card .anticon-check-circle-filled svg,
482            .quick-resume-stage2-workbench .info-card.is-selected .anticon-check-circle-filled,
483            .quick-resume-stage2-workbench .info-card.is-selected .anticon-check-circle-filled svg,
484            .quick-resume-stage2-workbench .split-view-work-card.info-card.is-selected:not(.is-edit-card):not(.is-new-card):not(.is-paired-original) .anticon-check-circle-filled,
485            .quick-resume-stage2-workbench .split-view-work-card.info-card.is-selected:not(.is-edit-card):not(.is-new-card):not(.is-paired-original) .anticon-check-circle-filled svg,
486            .quick-resume-stage2-workbench .profile-ai-action-card.is-selected:not(.is-edit-card):not(.is-new-card):not(.is-paired-original) .anticon-check-circle-filled,
487            .quick-resume-stage3-workbench .anticon-check-circle-filled,
488            .quick-resume-stage3-workbench .anticon-check-circle-filled svg,
489            .quick-resume-stage3-workbench .split-view-work-card .anticon-check-circle-filled,
490            .quick-resume-stage3-workbench .split-view-work-card .anticon-check-circle-filled svg,
491            .quick-resume-stage3-workbench .split-view-work-card.info-card.is-selected:not(.is-edit-card):not(.is-new-card):not(.is-paired-original) .anticon-check-circle-filled,
492            .quick-resume-stage3-workbench .split-view-work-card.info-card.is-selected:not(.is-edit-card):not(.is-new-card):not(.is-paired-original) .anticon-check-circle-filled svg {
493                color: ${We} !important;
494                fill: ${We} !important;
495            }
496            .quick-resume-stage2-workbench .profile-ai-action-card.is-new-card .anticon-check-circle-filled,
497            .quick-resume-stage3-workbench .profile-ai-action-card.is-new-card .anticon-check-circle-filled {
498                color: #e11d48 !important;
499            }
500            .quick-resume-stage2-workbench .profile-ai-action-card.is-edit-card .anticon-check-circle-filled,
501            .quick-resume-stage3-workbench .profile-ai-action-card.is-edit-card .anticon-check-circle-filled {
502                color: #be185d !important;
503            }
504            /* 六 Tab 分区标题图标:统一白底描边(勿按 anticon 名单刷浅底,否则 bulb 等与 build 不一致) */
505            .quick-resume-stage2-workbench .profile-subtitle-icon,
506            .quick-resume-stage3-workbench .profile-subtitle-icon,
507            .quick-resume-stage2-workbench .resume-section-icon,
508            .quick-resume-stage3-workbench .resume-section-icon,
509            .qr-archive-match-embed .profile-subtitle-icon,
510            .qr-archive-match-embed .resume-section-icon {
511                background: #ffffff !important;
512                border: 1px solid rgba(0, 0, 0, 0.08) !important;
513                box-shadow: none !important;
514            }
515            .quick-resume-stage3-workbench .edu-degree-badge {
516                background: ${We} !important;
517            }
518        `}),_o=()=>k.jsx(uu,{activeStep:L,onStepChange:e=>jo(e)}),Is=()=>k.jsxs(ln,{type:"primary",size:"small",className:"quick-resume-profile-primary-btn",onClick:()=>oo("overall"),style:Jr,children:[k.jsx("span",{className:"qr-header-btn-full",children:"评分规则"}),k.jsx("span",{className:"qr-header-btn-short",children:"规则"})]}),No=G.useRef(Ss);No.current=Ss;const Ts=e=>
518{const n=!$.trim(),r=it&&!Ir;return k.jsx(ln,{type:"primary",size:"small",className:"quick-resume-profile-primary-btn",loading:Ir,title:n?"请先提取或录入 JD 内容":r?"本模块分析进行中,请稍后再试":!Ir&&Ln==="loading"&&!Qi?"正在后台准备 JD 路由(不影响本按钮;点此才会跑整体分析)":void 0,onClick:()=>{if(r){z.warning("本模块分析进行中,请稍后再试");return}n&&z.warning({content:"请先提取或录入 JD 内容后再点「整体分析」",duration:4,key:"qr-overall-analysis-need-jd"}),No.current()},"data-qr-overall-analysis-btn":"true",style:Jr,children:Ir?"分析中…":k.jsxs(k.Fragment,{children:[k.jsx("span",{className:"qr-header-btn-full",children:e}),k.jsx("span",{className:"qr-header-btn-short",children:e==="整体分析"?"整体":e==="重新整体分析"?"重分析":e})]})})},il=()=>si==="overall"?k.jsxs(Do,{size:8,children:[Is(),k.jsxs(ln,{type:"primary",size:"small",className:"quick-resume-profile-primary-btn",onClick:()=>{oi("sectional")},style:Jr,children:[k.jsx("span",{className:"qr-header-btn-full",children:"返回分部决策"}),k.jsx("span",{className:"qr-header-btn-short",children:"返回"})]}),Ts("重新整体分析")]}):k.jsxs(Do,{size:8,children:[Is(),Ts("整体分析"),k.jsx(ln,{type:"primary",size:"small",className:"quick-resume-profile-primary-btn",loading:!!Xn?.loading,title:it&&!Xn?.loading?"本模块分析进行中,请稍后再试":void 0,onClick:()=>{if(it&&!Xn?.loading){z.warning("本模块分析进行中,请稍后再试");return}if(Xn?.onClick){Xn.onClick();return}Ys(_t)},style:Jr,children:(()=>{const e=Xn?.label||"本模块分析",n=e==="本模块分析"?"本模块":e==="重新本模块分析"?"重分析":e.length>4?e.slice(0,3):e;return k.jsxs(k.Fragment,{children:[k.jsx("span",{className:"qr-header-btn-full",children:e}),k.jsx("span",{className:"qr-header-btn-short",children:n})]})})()})]}),sl=()=>null,xs=(e,n,r,s,l=We,u)=>{const p=!!u&&!u.disabled,b=u?k.jsx(ln,{type:"text",size:"small",icon:u.expanded?k.jsx(kl,{}):k.jsx(wl,{}),disabled:u.disabled,onClick:()=>{u.disabled||u.onToggle()},style:{color:"#86868b",width:28,height:28,minWidth:28,padding:0,flexShrink:0,borderRadius:"50%",background:"rgba(0, 0, 0, 0.04)"},"aria-label":u.expanded?`收起${n}`:`展开${n}`}):null;return k.jsxs("div",{className:"quick-resume-split-panel-header",style:{display:"flex",alignItems:A?"stretch":"center",justifyContent:A?"flex-start":"space-between",gap:A?8:12,padding:A?"8px 6px 10px":Jo,background:"#ffffff",flexShrink:0,height:A?"auto":Ns,minHeight:A?0:Ns,maxHeight:A?"none":Ns,boxSizing:"border-box",overflow:A?"visible":"hidden",flexWrap:A?"wrap":void 0},children:[k.jsxs("div",{style:{display:"flex",alignItems:"center",gap:A?8:12,minWidth:0,flex:A?"1 1 100%":"1 1 auto",cursor:p?"pointer":void 0},onClick:p?u.onToggle:void 0,role:u?"button":void 0,"aria-expanded":u?.expanded,children:[k.jsx("div",{className:"qr-panel-header-icon",style:{width:A?28:qt.panelIconBox,height:A?28:qt.panelIconBox,borderRadius:A?8:10,background:"#1d1d1f",display:"flex",alignItems:"center",justifyContent:"center",fontSize:A?13:qt.panelIconFont,color:"#ffffff",flexShrink:0},children:e}),k.jsx("div",{className:"qr-panel-header-title",style:{minWidth:0,flexShrink:1,overflow:"hidden"},children:!u||u.expanded?k.jsx(Uu,{title:n,hint:r,titleStyle:{fontSize:A?14:qt.panelTitle,fontWeight:A?650:qt.panelTitleWeight,color:"#1d1d1f",lineHeight:1.25,whiteSpace:"nowrap"}}):k.jsx("div",{style:{fontSize:A?14:qt.panelTitle,fontWeight:A?650:qt.panelTitleWeight,color:"#1d1d1f",lineHeight:1.25,whiteSpace:"nowrap"},children:n})})]}),s||b?k.jsxs("div",{className:"quick-resume-split-panel-header__actions",style:{display:"flex",alignItems:"center",gap:A?6:8,flexShrink:A?1:0,flexWrap:"nowrap",justifyContent:A?"stretch":"flex-end",flex:A?"1 1 100%":void 0,width:A?"100%":void 0},onClick:m=>m.stopPropagation(),children:[s,b]}):null]})},ol=e=>xs(k.jsx(Lo,{}),"匹配我的求职档案",e,void 0,Hr),Es=e=>xs(k.jsx(Lo,{}),"匹配我的求职档案",e,ws()),al=Es,cl=Es,ll=(e="step0")=>{const n=bd(v),r=!!n&&!ks,l=e==="step2"?"select":r?"extract":!r&&ne?"select":"archive",u=m=>(m||[]).map(a=>{const c=String(a??"").trim();if(!c)return null;const R=Number(c);return Number.isFinite(R)&&String(R)===c?R:c}).filter(a=>a!=null),p={names:yt,emails:Rt,phones:St,photo:Et,cities:At,links:vt,skills:u(Tt).map(m=>Number(m)).filter(m=>!Number.isNaN(m)),educations:u(nn).map(m=>Number(m)).filter(m=>!Number.isNaN(m)),workExperiences:u(Lt),selfIntros:u(lr).map(m=>Number(m)).filter(m=>!Number.isNaN(m)),detailCardIds:os},b=m=>{rr(m.names||[]),ir(m.emails||[]),sr(m.phones||[]),or(m.photo??null),ar(m.cities||[]),cr(m.links||[]),Ft(m.skills||[]),Bn(m.educations||[]),xt(u(m.workExperiences)),Un(m.selfIntros||[]),as(m.detailCardIds||[])};return k.jsx(hd,{mode:l,fullData:ke,sessionExtract:l==="extract"?n:null,onSessionExtractUpdate:m=>{Ct(a=>{const c={...a||{}};return m.basicInfo!==void 0&&(c.basicInfo=m.basicInfo),m.skills!==void 0&&(c.skills=m.skills),m.education!==void 0&&(c.education=m.education),m.selfIntro!==void 0&&(c.selfIntro=m.selfIntro,c.selfIntros=m.selfIntro),m.intent!==void 0&&(c.intent=m.intent),m.experience!==void 0&&(c.experience
518=m.experience,c.companies=m.experience?.companies,c.projects=m.experience?.projects,c.workExps=m.experience?.workExps,c.experiences=m.experience?.workExps),c})},selection:l==="select"?p:void 0,onSelectionChange:l==="select"?b:void 0,headerExtraActions:ws(),headerTitle:e==="step2"?"匹配我的求职档案":void 0,contentKey:`${e}-${l}-${Qe()}`,onRecognize:()=>{}})},ul=()=>k.jsx("div",{style:{position:"sticky",top:8,zIndex:10,display:"flex",justifyContent:"center",alignSelf:"stretch",width:"100%",pointerEvents:"none",marginBottom:12},children:k.jsxs("div",{style:{pointerEvents:$n?"auto":"none",opacity:$n?1:.45,...Nu,padding:"4px 10px",borderRadius:24,display:"flex",alignItems:"center",gap:2},children:[k.jsx(ln,{size:"small",type:"text",icon:k.jsx(Il,{}),disabled:!$n||kt<=.5,onClick:()=>at(e=>Math.max(.5,+(e-.1).toFixed(2))),style:{color:"#555",width:28,height:28,borderRadius:"50%"}}),k.jsxs("span",{style:{fontSize:13,color:"#1d1d1f",fontWeight:600,minWidth:44,textAlign:"center",cursor:$n?"pointer":"default",userSelect:"none"},onClick:()=>{if(!$n)return;const e=typeof window<"u"&&window.matchMedia("(max-width: 900px)").matches;at(e?.5:1)},title:"恢复默认缩放",children:[Math.round(kt*100),"%"]}),k.jsx(ln,{size:"small",type:"text",icon:k.jsx(Tl,{}),disabled:!$n||kt>=2,onClick:()=>at(e=>Math.min(2,+(e+.1).toFixed(2))),style:{color:"#555",width:28,height:28,borderRadius:"50%"}})]})}),dl=pn(ss),ml=o.useCallback((e,n,r)=>L===e&&pn(nr.current)===n?r():null,[L]),pl=o.useCallback(e=>{we(e.name),X(e),Oe(null),_e(null),N(!1)},[]),fl=o.useCallback(()=>{Xe(!0),rt(()=>import("./ResumeLibraryPage-XT37F_qb.js"),__vite__mapDeps([78,2,1,79,55,56,57,13,80,22,23,81,82,51,52,53,54,75])).catch(e=>{console.error("[qr] ResumeLibraryPage chunk failed",e),Xe(!1),z.error("简历库加载失败,请重试或改用本地上传")})},[]),Cs=he(),gl={normalizeQuickResumeActiveTab:pn,applyExtractedDefaultSelections:ki,activeDecisionReportTab:Oc,activeScopeRef:ze,activeTab:ss,getActiveTab:qc,writeActiveTabRef:bi,adaptAbortController:bn,adoptedCardsBySection:tt,adoptedEducationSuggestionCards:mi,adoptedExperienceSuggestionCards:ht,adoptedItemKeys:Rr,adoptedPersonalSuggestionCards:fo,adoptedSectionKeys:Nt,adoptedSelfIntroSuggestionCards:di,adoptedSkillsSuggestionCards:tr,aiEducationCards:Yi,aiEngineProgress:lt,aiExperienceMockData:yn,aiExtractedData:v,aiExtractedDataRef:an,aiJobIntentCards:Zi,aiJobIntentCardsByKind:er,aiReportActiveTab:_t,aiSelfIntroCards:Xi,aiSelfIntroPlanCards:es,aiSkillsCards:Cc,aiSuggestions:ni,appliedAiExperienceSelectionSignatureRef:_c,appliedAiJobIntentSelectionSignatureRef:Nc,applyDemoWorkbenchMode:Ao,applyDemoWorkbenchModeRef:Ii,applyResumeFile:pl,openResumeLibrary:fl,bodySwapParked:F,bodySwapParkedRef:Ht,buildEffectiveQuickResumeProfileData:Eo,buildQuickResumeSnapshot:jt,buildQuickResumeSnapshotRef:fs,captureActiveSessionToCache:Ei,clearQuickResumeAiSessionForJdChange:Ha,clearQuickResumeWorkbenchState:us,clearQuickResumeWorkbenchStateRef:Ti,currentParseSession:P,currentParseSessionRef:ms,currentStep:L,decisionDimensionWeightsByTab:ec,decisionProfileCards:wo,decisionReportSections:Lc,decisionRuntimeReady:re,decisionSectionalRulesOpen:tc,demoBusyHeldRef:Fn,demoSwitchGenRef:Ot,demoWorkbenchApplyTimerRef:In,demoWorkbenchIdleRef:wn,demoWorkbenchResumeWarmTimerRef:kn,deriveQuickResumeJdMeta:Ge,displayAiReport:Rc,displayAiSelfIntroCards:ts,displayExperienceMockData:Rn,displayRoutingPlan:ge,educationModuleHasModifyAction:fc,educationSuggestionMapped:Tc,experiencePolishSignatureRef:pi,extractedOnlyBasicInfo:xr,extractedSectionPersonalInfoCards:pc,extractSelectionSeedRef:Nr,fileInputRef:ut,finalSelectedExpIds:zt,getPersonalHcpSelection:Pc,getQuickResumeTabGenerationState:po,getRoutingPlanValidationErrors:Sr,handleAddScreenshot:Ac,handleAdoptDecisionItem:wc,handleAdoptDecisionSection:kc,handleAiAdaptation:Na,handleAiAdaptationForTab:Ma,handleDecisionDimensionWeightsChange:$c,handleDemoBodySwap:bs,handleDemoBodySwapBridgeRef:ys,handleFetchDecisionTabCardRewrite:Qc,handleGenerateTabWithRoutingGate:Da,handleGenerateTabWithRoutingGateRef:La,handleJdRoutingPlanQuickResume:zi,handleJdRoutingPlanQuickResumeRef:$a,handleOverallAnalysis:Ss,handleRemoveScreenshot:vc,handleSaveAll:Po,handleStage2ExperienceMockDataUpdate:Ec,handleStepCh
518ange:jo,hasAdoptedEducationSuggestion:Ic,hasAdoptedExperienceSection:xc,hasAdoptedSelfIntroSuggestion:hc,hydrateDemoQuickResumeShowcase:ds,hydrateDemoQuickResumeShowcaseRef:xi,inputMode:Pe,intentSelectionHandlers:Uc,isAdapting:it,isExtracted:ls,isExtracting:Ae,isLibraryModalOpen:ot,isModuleMatchedByAi:jc,isPausedRef:Vs,isQuickResumeLibraryImported:ks,isRoutingPlanReady:Qi,isShowingDemoQuickResumeWorkbench:Yc,jdAnalysisPanelExpanded:Ka,jdMappingRows:Ut,jdSourceTableRows:uo,jobRequirementRoutingPlan:ye,jobRequirementRoutingPlanRef:to,leftReportView:si,libraryMountReady:_,localJdText:H,mountedSteps:ce,navParkedRef:It,normalizedLocalJdText:$,normalizedModulePlans:hn,ocring:Ji,ocrProgress:oe,overallAnalysisError:Ga,overallAnalysisFingerprintRef:Zn,overallAnalysisLoading:Ir,overallAnalysisResult:kr,overallAnalysisStale:Wa,pageMountedRef:Gn,parsedAiReport:Ie,pendingDemoScopeRef:Dr,pendingDemoWorkbenchModeRef:mr,performBackendLogicRef:Rs,persistQuickResumeSnapshot:Mr,personalInfoRawCards:Vi,personalInfoSelectionHandlers:Dc,personalInfoSelectionInitRef:dr,polishedExperienceMap:ns,polishedSkillCardMap:Cr,previewUrl:Be,previewZoom:kt,prevJdFingerprintRef:Ua,profileData:ue,qrActiveTabKey:dl,qrTabBody:ml,QUICK_RESUME_BRAND_RGB:Oo,QUICK_RESUME_GLACIER_VIOLET:ou,QUICK_RESUME_JD_ANALYSIS_PANEL_MAX_HEIGHT:su,QUICK_RESUME_JD_STATE_KEY:_i,QUICK_RESUME_KNOWN_CITIES:ka,QUICK_RESUME_LIBRARY_PERSONAL_INFO_CARD_BASE:zn,QUICK_RESUME_LIBRARY_REFERENCE_PROPS:Kr,QUICK_RESUME_LIBRARY_SELECTABLE_PROPS:$d,QUICK_RESUME_LOCAL_LITE_STORAGE_MODE:Qr,QUICK_RESUME_MATCH_PANEL_BODY_PADDING:iu,QUICK_RESUME_MATCH_PANEL_HEADER_PADDING:Jo,QUICK_RESUME_PANEL_COLLAPSE_TRANSITION:ru,QUICK_RESUME_PARSED_STATE_KEY:Us,QUICK_RESUME_PERSONAL_INFO_CREATE_SUBTABS:Cs.QUICK_RESUME_PERSONAL_INFO_CREATE_SUBTABS,QUICK_RESUME_PERSONAL_INFO_SUB_TABS:Cs.QUICK_RESUME_PERSONAL_INFO_SUB_TABS,QUICK_RESUME_PROFILE_BLUE:We,QUICK_RESUME_PROFILE_TAB_KEYS:Aa,QUICK_RESUME_ROUTING_PLAN_KEY:Zr,QUICK_RESUME_ROUTING_SOURCE_MODE:Ws,QUICK_RESUME_SINGLETON_JOB_INTENT_SUB_TABS:Cs.QUICK_RESUME_SINGLETON_JOB_INTENT_SUB_TABS,QUICK_RESUME_SNAPSHOT_VERSION:Ps,QUICK_RESUME_SPLIT_COLUMN_GAP:nu,QUICK_RESUME_STAGE3_PURPLE:Hr,QUICK_RESUME_STAGE3_PURPLE_BORDER:tu,QUICK_RESUME_STAGE3_PURPLE_DARK:ji,QUICK_RESUME_STAGE3_PURPLE_GRADIENT:eu,QUICK_RESUME_STAGE3_PURPLE_SOFT:Zl,QUICK_RESUME_STAGE3_SELECTABLE_PROPS:gr,QUICK_RESUME_STEP0_INPUT_PANEL_HEIGHT:Xl,QUICK_RESUME_STEP0_PANEL_HEIGHT:Yl,QUICK_RESUME_STEP1_SPLIT_HEIGHT:vi,QUICK_RESUME_MOBILE_SPLIT_HEIGHT:_s,QUICK_RESUME_MOBILE_SPLIT_MIN_HEIGHT:qs,QUICK_RESUME_STEP_CHIPS:Vl,quickExperiencePrefetched:st,quickExperienceSource:He,quickResumeAdaptationExperiences:gc,quickResumeAdaptationSkills:dt,quickResumeExperienceLibrary:gt,quickResumeExtractedProfileContext:Dt,quickResumeExtractedSelfIntros:ui,quickResumeExtractedSkills:Qn,quickResumeJobIntentSourceIdBySubTab:Gi,quickResumeLibraryExperiencePrefetch:bc,quickResumeLibraryProfileData:ke,quickResumeLivePreviewRef:Mc,quickResumeRoutingSourceIdBySubTab:Wi,quickResumeRoutingSourceIdLookup:Ki,quickResumeSelectionState:Bc,quickResumeTargetCompanyName:Jc,rawAiSkillsCards:Er,renderModuleAnalysisBlocks:Sc,renderOriginalJdNode:mc,renderQuickResumeExtractedPersonalInfoBlock:Qd,renderQuickResumeExtractedSectionHeader:Bd,renderQuickResumeIntentLibrary:(e,n=!1)=>Kd(e,n,xo),renderQuickResumeIntentLibrarySelectable:(e,n=jn)=>ja(e,n,xo),renderQuickResumeLibrarySheet:Od,renderQuickResumeLibraryHeader:Fd,renderQuickResumeMatchCardStyles:qo,renderQuickResumeMatchProfilePanelHeader:Es,renderQuickResumeMatchProfilePaneHeader:al,renderQuickResumeMatchProfileRowHeader:cl,renderQuickResumeArchiveMatchPanel:ll,renderQuickResumeOverallAnalysisBtn:Ts,renderQuickResumeOverallAnalysisHeaderBtn:il,renderQuickResumeOverallScoringRulesBtn:Is,renderQuickResumePanelHeader:xs,renderQuickResumePersonalInfoLibrary:Hd,renderQuickResumePersonalInfoSelectable:Gs,renderQuickResumeReportTabBarExtra:sl,renderQuickResumeSaveAllActions:ws,renderQuickResumeStageThreePanelHeader:ol,renderQuickResumeStepChips:_o,renderResumePreviewZoomControl:ul,renderTabStyle:rl,resetQuickResumeAiArtifactsForNewJd:io,restoreQu
518ickResumeSnapshot:wi,restoreQuickResumeSnapshotRef:cn,resumeLayoutConfig:Ri,resumeOriginalPreview:$n,resumeParsePollRef:Dn,resumeResolverRef:qa,resumeSections:Si,routingOverviewTotalCount:ci,routingPlanErrorDetails:eo,routingPlanStatus:Ln,routingPlanStatusRef:no,routingPlanTableRows:ft,routingRequestInFlightRef:Ui,routingTabFilter:Vn,routingTabStats:li,savingAll:je,scoringConfig:Hi,scoringRulesEditorOpen:Ya,scoringRulesHubTab:Za,openScoringRulesHub:oo,screenshots:Zt,selectedCityIds:At,selectedEduIds:nn,selectedEmailIds:Rt,selectedExpIds:Lt,selectedIntendedCityIds:sn,selectedIntendedJobTypeIds:on,selectedJobIntentIds:Jt,selectedJobStatusIds:rn,selectedLibraryResume:me,selectedLibraryResumeName:ie,selectedLinkIds:vt,selectedNameIds:yt,selectedPhoneIds:St,selectedPhotoId:Et,selectedSelfIntroIds:lr,selectedSkillIds:Tt,selfIntroSuggestionMapped:yc,sessionCacheRef:xe,setActiveTab:Ar,setAdoptedCardsBySection:_n,setAdoptedItemKeys:qn,setAdoptedSectionKeys:Wn,setAiExtractedData:Ct,setAiReportActiveTab:Oi,setAiSuggestions:Kn,setBodySwapParked:D,setCurrentParseSession:ve,setCurrentStep:se,setDecisionDimensionWeightsByTab:ao,setDecisionSectionalRulesOpen:nc,setInputMode:qe,setIsAdapting:Nn,setIsExtracted:Sn,setIsExtracting:le,setIsLibraryModalOpen:Xe,setJdAnalysisPanelExpanded:so,setJobRequirementRoutingPlan:Bt,setLeftReportView:oi,setModuleAnalysisControlsStable:rc,setLibraryMountReady:M,setLocalJdText:Ze,setMountedSteps:be,setOcring:et,setOcrProgress:Le,setOverallAnalysisError:On,setOverallAnalysisLoading:Tr,setOverallAnalysisResult:wr,setOverallAnalysisStale:ii,setPolishedExperienceMap:rs,setPolishedSkillCardMap:is,setPreviewUrl:Ue,setPreviewZoom:at,setProfileData:Se,setResumeLayoutConfig:So,setResumeSections:ko,setRoutingPlanErrorDetails:Jn,setRoutingPlanStatus:Mt,setRoutingTabFilter:Yn,setSavingAll:De,setScoringConfig:Va,setScoringRulesEditorOpen:Xa,setScreenshots:en,setSelectedCityIds:ar,setSelectedEduIds:Bn,setSelectedEmailIds:ir,setSelectedExpIds:xt,setSelectedIntendedCityIds:qr,setSelectedIntendedJobTypeIds:_r,setSelectedJobIntentIds:ur,setSelectedJobStatusIds:Pr,setSelectedLibraryResume:_e,setSelectedLibraryResumeName:Oe,setSelectedLinkIds:cr,setSelectedNameIds:rr,setSelectedPhoneIds:sr,setSelectedPhotoId:or,setSelectedSelfIntroIds:Un,setSelectedSkillIds:Ft,setShellOnly:N,setShowLibrary:Je,setStreamStatus:Mn,setTabReports:ct,settleParkedDemoSwap:vo,settleParkedDemoSwapRef:ps,setUploadedFile:X,setUploadedResumeName:we,setUrlInput:wt,shellOnly:g,shouldShowQuickResumeLibrary:ne,showLibrary:Ce,silentRoutingAttemptsRef:Qa,silentRoutingJdKeyRef:Ba,skillCardPolishSignatureRef:gi,stableGenerateTabWithRoutingGate:Ys,stage3AdoptedEducationAiCards:Fc,stage3AdoptedJobIntentCardsByKind:Gc,stage3AdoptedPersonalInfoAiCards:Kc,stage3AdoptedSelfIntroAiCards:Hc,stage3AdoptedSkillAiCards:zc,stage3DisplayExperienceMockData:Wc,staleRoutingValidationErrors:Bi,step1ExperienceMockData:tn,streamStatus:Pa,syncProfileTabForReportTab:Ai,tabReports:ee,uploadedFile:fe,uploadedResumeName:V,urlInput:pt,validateRoutingPlan:Fa};return k.jsx(Du,{host:gl,children:k.jsxs("div",{className:"page-container",style:{padding:t?"0 0 24px":"36px 64px 24px 64px",minHeight:t?void 0:"calc(100vh - 64px)",boxSizing:"border-box",display:"flex",flexDirection:"column"},children:[qo(),k.jsx("style",{children:`
519                .quick-resume-step-confirm-btn.ant-btn-primary {
520                    background: ${We} !important;
521                    border-color: ${We} !important;
522                    color: #fff !important;
523                    box-shadow: 0 4px 12px rgba(29, 29, 31, 0.28) !important;
524                }
525                .quick-resume-step-confirm-btn.ant-btn-primary:hover,
526                .quick-resume-step-confirm-btn.ant-btn-primary:focus {
527                    background: ${ji} !important;
528                    border-color: ${ji} !important;
529                    color: #fff !important;
530                }
531                .quick-resume-step-confirm-btn.ant-btn-primary .anticon,
532                .quick-resume-step-confirm-btn.ant-btn-primary.ant-btn-loading .ant-btn-loading-icon .anticon {
533                    color: #fff !important;
534                }
535                .quick-resume-jd-decompose-outline-btn {
536                    border-radius: 6px !important;
537                    font-weight: 600 !important;
538                    color: ${We} !important;
539                    border-color: rgba(29, 29, 31, 0.35) !important;
540                    background: rgba(29, 29, 31, 0.06) !important;
541                }
542                .quick-resume-jd-decompose-outline-btn.is-active,
543                .quick-resume-jd-decompose-outline-btn:hover,
544                .quick-resume-jd-decompose-outline-btn:focus {
545                    color: ${We} !important;
546                    border-color: ${We} !important;
547                    background: rgba(29, 29, 31, 0.12) !important;
548                }
549                .quick-resume-profile-primary-btn.ant-btn-primary,
550                .blue-save-all-btn.ant-btn-primary,
551                .quick-resume-split-panel-header__actions .ant-btn,
552                .quick-resume-split-panel-header__actions .ant-btn-default,
553                .quick-resume-split-panel-header__actions .ant-btn-primary {
554                    background: ${dn.accent} !important;
555                    border: 1px solid ${dn.accent} !important;
556                    color: #fff !important;
557                    box-shadow: 0 4px 12px ${dn.accentShadow} !important;
558                }
559                .quick-resume-profile-primary-btn.ant-btn-primary:hover,
560                .quick-resume-profile-primary-btn.ant-btn-primary:focus,
561                .blue-save-all-btn.ant-btn-primary:hover,
562                .blue-save-all-btn.ant-btn-primary:focus,
563                .quick-resume-split-panel-header__actions .ant-btn:hover,
564                .quick-resume-split-panel-header__actions .ant-btn:focus,
565                .quick-resume-split-panel-header__actions .ant-btn-primary:hover,
566                .quick-resume-split-panel-header__actions .ant-btn-primary:focus {
567                    background: #000000 !important;
568                    border-color: #000000 !important;
569                    color: #fff !important;
570                    filter: brightness(1.08);
571                }
572                /* !important 主色会盖掉 ant disabled 灰态;显式降透明,避免「看着能点其实点不动」 */
573                .quick-resume-profile-primary-btn.ant-btn-primary:disabled,
574                .quick-resume-profile-primary-btn.ant-btn-primary.ant-btn-disabled,
575                .blue-save-all-btn.ant-btn-primary:disabled,
576                .blue-save-all-btn.ant-btn-primary.ant-btn-disabled,
577                .quick-resume-split-panel-header__actions .ant-btn:disabled,
578                .quick-resume-split-panel-header__actions .ant-btn.ant-btn-disabled {
579                    opacity: 0.45 !important;
580                    color: #fff !important;
581                    border-color: ${dn.accent} !important;
582                    background: ${dn.accent} !important;
583                    cursor: not-allowed !important;
584                    filter: none !important;
585                }
586                .quick-resume-profile-primary-btn.ant-btn-primary .anticon,
587                .blue-save-all-btn.ant-btn-primary .anticon,
588                .quick-resume-split-panel-header__actions .ant-btn .anticon {
589                    color: #fff !important;
590                }
591                .quick-resume-intent-workbench {
592                    display: flex;
593                    flex-direction: column;
594                    gap: 16px;
595                }
596                .quick-resume-intent-workbench .intent-selection-chip-row {
597                    display: block !important;
598                    width: 100%;
599                    padding: 4px;
600                    line-height: 0;
601                }
602                .quick-resume-intent-workbench .intent-selection-chip-row > * {
603                    line-height: normal;
604                }
605                .quick-resume-intent-workbench .intent-selection-chip-row > .intent-selection-chip,
606                .quick-resume-intent-workbench .intent-selection-chip-row > .info-card {
607                    display: inline-flex !important;
608                    width: fit-content !important;
609                    max-width: 100%;
610                    flex: none !important;
611                    flex-grow: 0 !important;
612                    flex-shrink: 0 !important;
613                    vertical-align: top;
614                    margin: 0 12px 12px 0;
615                }
616                .quick-resume-intent-workbench .intent-section-compact {
617                    min-height: 0 !important;
618                }
619                .quick-resume-intent-workbench .intent-section-compact .intent-section-body {
620                    flex: 0 0 auto !important;
621                    overflow: visible !important;
622                }
623                .quick-resume-stage2-workbench .quick-resume-intent-workbench .profile-ai-action-card.is-new-card:not(.is-uploaded) {
624                    background: linear-gradient(135deg, rgba(225, 29, 72, 0.09) 0%, rgba(255, 255, 255, 0.98) 100%) !important;
625                    border: 2px solid rgba(225, 29, 72, 0.30) !important;
626                    box-shadow: 0 4px 14px rgba(225, 29, 72, 0.10) !important;
627                }
628                .quick-resume-stage2-workbench .quick-resume-intent-workbench .profile-ai-action-card.is-edit-card:not(.is-uploaded) {
629                    background: linear-gradient(135deg, rgba(219, 39, 119, 0.09) 0%, rgba(255, 255, 255, 0.98) 100%) !important;
630                    border: 2px solid rgba(219, 39, 119, 0.26) !important;
631                    box-shadow: 0 4px 14px rgba(219, 39, 119, 0.10) !important;
632                }
633            `}),t?null:k.jsxs(k.Fragment,{children:[k.jsx(au,{}),k.jsx(cu,{jdContent:H,onJdSaved:e=>{e.trim()?hs(e):(Ze(""),Sn(!1),Bt(null),Mt("idle"),Jn([]),pr(null),Yt())},uploadedResumeName:V,selectedLibraryResumeName:ie,onResumeFileSelect:e=>{we(e.name),X(e),Oe(null),_e(null),N(!1)},onOpenResumeLibrary:()=>Xe(!0)})]}),g?k.jsx("div",{style:{marginTop:t?0:24},children:k.jsx(lu,{label:"工作台加载中…"})}):F?k.jsxs("div",{style:{marginTop:24,padding:"56px 24px",textAlign:"center",background:"#fff",borderRadius:16,boxShadow:"0 4px 16px rgba(0,0,0,0.02)"},children:[k.jsx(Mo,{size:"large"}),k.jsx("div",{style:{marginTop:14,color:"#86868b",fontSize:13},children:"正在切换数据视图 — 顶部筛选可继续点,停手后自动完成"})]}):k.jsx(k.Fragment,{children:k.jsxs("div",{style:{display:"flex",flexDirection:"column",width:"100%",minHeight:"calc(100vh - 220px)"},children:[t?null:_o(),(()=>{const e=Qo(pe,L,!!t),n=Array.from(new Set([...ce.map(s=>xn(s,0)),e,xn(L,0)])),r=(s,l,u)=>k.jsx("div",{className:e===s?"qr-step-shell qr-step-shell--active":"qr-step-shell",style:{display:e===s?"flex":"none",flexDirection:"column",flex:e===s?"0 0 auto":1,width:"100%",height:e===s?vi:void 0,minHeight:e===s?vi:0,maxHeight:e===s?vi:void 0},"aria-hidden":e!==s,"data-qr-paint-step":e===s?e:void 0,children:k.jsx($o,{title:u,children:l})});return k.jsxs(k.Fragment,{children:[k.jsx("style",{children:`
634              .qr-step-shell:not(.qr-step-shell--active) {
635                content-visibility: hidden;
636                contain: layout style paint;
637                pointer-events: none;
638              }
639              @media (max-width: 900px) {
640                .qr-step-shell--active {
641                  height: ${_s} !important;
642                  min-height: ${qs} !important;
643                  max-height: none !important;
644                }
645              }
646              .zc-mobile-shell .qr-step-shell--active {
647                height: ${_s} !important;
648                min-height: ${qs} !important;
649                max-height: none !important;
650              }
651            `}),n.includes(0)?r(0,k.jsx(Mu,{}),"简历转档案"):null,n.includes(1)?r(1,k.jsx(Nl,{}),"档案匹配 JD"):null,n.includes(2)?r(2,k.jsx($u,{}),"档案转简历"):null]})})()]})}),k.jsxs(hl,{title:null,open:ot,onCancel:()=>
651Xe(!1),footer:null,width:1200,style:{top:20},bodyStyle:{padding:"24px 32px",background:"#ffffff",minHeight:600},destroyOnClose:!0,children:[k.jsx("div",{style:{fontSize:20,fontWeight:600,color:"#1d1d1f",marginBottom:20,fontFamily:'-apple-system, BlinkMacSystemFont, "SF Pro Display", sans-serif'},children:"从简历库中选择"}),k.jsx($o,{title:"简历库",children:k.jsx(o.Suspense,{fallback:k.jsxs("div",{style:{padding:48,textAlign:"center"},children:[k.jsx(Mo,{}),k.jsx("div",{style:{marginTop:12,color:"#86868b",fontSize:13},children:"简历库加载中…"})]}),children:k.jsx(jd,{mode:"select",accentColor:dn.accent,onSelect:e=>{if(Oe(e.resumeName),_e(e),we(null),X(null),Ue(null),Xe(!1),N(!1),Eu(e))try{const n=Cu(e);Ct(n.aiExtractedData),ve(n.currentParseSession),ki(n.aiExtractedData,String(n.currentParseSession?.id||"extract")),Kn(n.aiSuggestions),bi("profile"),mt.current?.({resumeName:e.resumeName,resumeSource:"library"}),z.success("已载入示例简历档案,可直接核对并继续定制")}catch(n){console.warn("[qr] demo library auto-extract failed",n),z.success(`已关联简历: ${e.resumeName}`)}else mt.current?.({resumeName:e.resumeName,resumeSource:"library"}),z.success(`已关联简历: ${e.resumeName}`)}})})})]}),k.jsx("style",{children:`
652                .resume-upload-wrapper {
653                    width: 100% !important;
654                    display: flex !important;
655                }
656                .resume-upload-wrapper .ant-upload {
657                    width: 100% !important;
658                    display: flex !important;
659                    flex: 1;
660                }
661                .resume-upload-wrapper .ant-upload > div {
662                    width: 100%;
663                }
664            `})]})})}const Im=Object.freeze(Object.defineProperty({__proto__:null,default:Wd},Symbol.toStringTag,{value:"Module"}));export{Im as Q,Vt as a,Y as g};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.