pcm-agents 0.6.76 → 0.6.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components-position-selector.cjs.entry.js +1 -1
- package/dist/cjs/index-C_qhED9Z.js +2 -6
- package/dist/cjs/{index-DJuHr4W9.js → index-DOCJeM7I.js} +3 -3
- package/dist/cjs/{index-DJuHr4W9.js.map → index-DOCJeM7I.js.map} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/oem-htws-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-jd-modal.cjs.entry.js +2 -2
- package/dist/cjs/oem-jlpp-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-jlsx-modal.cjs.entry.js +24 -2
- package/dist/cjs/oem-jlsx-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/oem-jlsx-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/oem-jlzz-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-mnct-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-mnms-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-qgqjl-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-zygh-modal.cjs.entry.js +1 -1
- package/dist/cjs/{pcm-1zhanshi-mnms-modal_28.cjs.entry.js → pcm-1zhanshi-mnms-modal_29.cjs.entry.js} +540 -108
- package/dist/cjs/pcm-1zhanshi-mnms-modal_29.cjs.entry.js.map +1 -0
- package/dist/cjs/pcm-agents.cjs.js +1 -1
- package/dist/cjs/pcm-hr-chat-modal.cjs.entry.js +19 -2
- package/dist/cjs/pcm-hr-chat-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-hr-chat-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/{sentry-reporter-COJ0pOg4.js → sentry-reporter-BY3e-WWj.js} +3 -3
- package/dist/cjs/{sentry-reporter-COJ0pOg4.js.map → sentry-reporter-BY3e-WWj.js.map} +1 -1
- package/dist/collection/components/oem-jlsx-modal/oem-jlsx-modal.js +22 -0
- package/dist/collection/components/oem-jlsx-modal/oem-jlsx-modal.js.map +1 -1
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js +19 -0
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js +17 -0
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js +12 -11
- package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js.map +1 -1
- package/dist/collection/components/pcm-jlsx-modal/pcm-jlsx-modal.js +12 -0
- package/dist/collection/components/pcm-jlsx-modal/pcm-jlsx-modal.js.map +1 -1
- package/dist/collection/components/pcm-jlzz-modal/pcm-jlzz-modal.js +88 -2
- package/dist/collection/components/pcm-jlzz-modal/pcm-jlzz-modal.js.map +1 -1
- package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.js +20 -19
- package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.js.map +1 -1
- package/dist/collection/components/pcm-virtual-chat-modal/pcm-virtual-chat-modal.js +108 -3
- package/dist/collection/components/pcm-virtual-chat-modal/pcm-virtual-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js +17 -0
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-zygh-v2-modal/pcm-zygh-v2-modal.js +14 -14
- package/dist/collection/components/pcm-zygh-v2-modal/pcm-zygh-v2-modal.js.map +1 -1
- package/dist/components/components-position-selector.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/oem-htws-modal.js +6 -6
- package/dist/components/oem-jd-modal.js +4 -4
- package/dist/components/oem-jlpp-modal.js +8 -8
- package/dist/components/oem-jlsx-modal.js +28 -6
- package/dist/components/oem-jlsx-modal.js.map +1 -1
- package/dist/components/oem-jlzz-modal.js +6 -6
- package/dist/components/oem-mnct-modal.js +8 -8
- package/dist/components/oem-mnms-modal.js +9 -9
- package/dist/components/oem-qgqjl-modal.js +8 -8
- package/dist/components/oem-zygh-modal.js +6 -6
- package/dist/components/{p-CGRQB-kz.js → p-9hnllPbt.js} +3 -3
- package/dist/components/{p-CGRQB-kz.js.map → p-9hnllPbt.js.map} +1 -1
- package/dist/components/{p-nFix5BDn.js → p-B7cdvqSY.js} +4 -4
- package/dist/components/{p-nFix5BDn.js.map → p-B7cdvqSY.js.map} +1 -1
- package/dist/components/{p-BZeNORff.js → p-BnkPmLIU.js} +111 -6
- package/dist/components/p-BnkPmLIU.js.map +1 -0
- package/dist/components/{p-DtCXILg5.js → p-C4KAf-6-.js} +3 -3
- package/dist/components/{p-DtCXILg5.js.map → p-C4KAf-6-.js.map} +1 -1
- package/dist/components/{p-pTzOe1-b.js → p-C6OdIxkm.js} +3 -3
- package/dist/components/{p-pTzOe1-b.js.map → p-C6OdIxkm.js.map} +1 -1
- package/dist/components/{p-BJnD41Qm.js → p-DHwXxizT.js} +3 -3
- package/dist/components/{p-BJnD41Qm.js.map → p-DHwXxizT.js.map} +1 -1
- package/dist/components/{p-Caxrsbp0.js → p-Da-8BxdM.js} +24 -5
- package/dist/components/p-Da-8BxdM.js.map +1 -0
- package/dist/components/{p--B9t4xVs.js → p-QwH3TimN.js} +3 -3
- package/dist/components/{p--B9t4xVs.js.map → p-QwH3TimN.js.map} +1 -1
- package/dist/components/{p-BjKpPzZZ.js → p-ikx6J73I.js} +3 -3
- package/dist/components/{p-BjKpPzZZ.js.map → p-ikx6J73I.js.map} +1 -1
- package/dist/components/{p-CvHWzHdd.js → p-qUBE1daM.js} +3 -3
- package/dist/components/{p-CvHWzHdd.js.map → p-qUBE1daM.js.map} +1 -1
- package/dist/components/pcm-1zhanshi-mnms-modal.js +5 -5
- package/dist/components/pcm-app-chat-modal.js +1 -1
- package/dist/components/pcm-ats-mnms-modal.js +5 -5
- package/dist/components/pcm-card.js +1 -1
- package/dist/components/pcm-chat-message.js +1 -1
- package/dist/components/pcm-digital-human.js +1 -1
- package/dist/components/pcm-export-records-modal.js +1 -1
- package/dist/components/pcm-hr-chat-modal.js +19 -2
- package/dist/components/pcm-hr-chat-modal.js.map +1 -1
- package/dist/components/pcm-htws-modal.js +7 -7
- package/dist/components/pcm-hyzj-modal.js +4 -4
- package/dist/components/pcm-jd-modal.js +4 -4
- package/dist/components/pcm-jlpp-modal.js +18 -17
- package/dist/components/pcm-jlpp-modal.js.map +1 -1
- package/dist/components/pcm-jlsx-modal.js +17 -5
- package/dist/components/pcm-jlsx-modal.js.map +1 -1
- package/dist/components/pcm-jlzz-modal.js +39 -8
- package/dist/components/pcm-jlzz-modal.js.map +1 -1
- package/dist/components/pcm-mnct-modal.js +4 -4
- package/dist/components/pcm-mnms-modal.js +8 -8
- package/dist/components/pcm-mnms-zp-modal.js +8 -8
- package/dist/components/pcm-mobile-input-btn.js +1 -1
- package/dist/components/pcm-mobile-upload-btn.js +1 -1
- package/dist/components/pcm-msbg-modal.js +4 -4
- package/dist/components/pcm-qgqjl-modal.js +26 -25
- package/dist/components/pcm-qgqjl-modal.js.map +1 -1
- package/dist/components/pcm-upload.js +1 -1
- package/dist/components/pcm-virtual-chat-modal.js +1 -1
- package/dist/components/pcm-zsk-chat-modal.js +19 -2
- package/dist/components/pcm-zsk-chat-modal.js.map +1 -1
- package/dist/components/pcm-zygh-modal.js +6 -6
- package/dist/components/pcm-zygh-v2-modal.js +18 -18
- package/dist/components/pcm-zygh-v2-modal.js.map +1 -1
- package/dist/esm/components-position-selector.entry.js +1 -1
- package/dist/esm/index-Bq0K-WqZ.js +2 -6
- package/dist/esm/{index-DBfBNGaa.js → index-CtBK1m67.js} +3 -3
- package/dist/esm/{index-DBfBNGaa.js.map → index-CtBK1m67.js.map} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/oem-htws-modal.entry.js +1 -1
- package/dist/esm/oem-jd-modal.entry.js +2 -2
- package/dist/esm/oem-jlpp-modal.entry.js +1 -1
- package/dist/esm/oem-jlsx-modal.entry.js +24 -2
- package/dist/esm/oem-jlsx-modal.entry.js.map +1 -1
- package/dist/esm/oem-jlzz-modal.entry.js +1 -1
- package/dist/esm/oem-mnct-modal.entry.js +1 -1
- package/dist/esm/oem-mnms-modal.entry.js +1 -1
- package/dist/esm/oem-qgqjl-modal.entry.js +1 -1
- package/dist/esm/oem-zygh-modal.entry.js +1 -1
- package/dist/esm/{pcm-1zhanshi-mnms-modal_28.entry.js → pcm-1zhanshi-mnms-modal_29.entry.js} +540 -109
- package/dist/esm/pcm-1zhanshi-mnms-modal_29.entry.js.map +1 -0
- package/dist/esm/pcm-agents.js +1 -1
- package/dist/esm/pcm-hr-chat-modal.entry.js +19 -2
- package/dist/esm/pcm-hr-chat-modal.entry.js.map +1 -1
- package/dist/esm/{sentry-reporter-BcA0r0vQ.js → sentry-reporter-D8jwTnnH.js} +3 -3
- package/dist/esm/{sentry-reporter-BcA0r0vQ.js.map → sentry-reporter-D8jwTnnH.js.map} +1 -1
- package/dist/pcm-agents/index.esm.js +1 -1
- package/dist/pcm-agents/oem-jlsx-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/p-0a831595.entry.js +2 -0
- package/dist/pcm-agents/{p-365a351b.entry.js.map → p-0a831595.entry.js.map} +1 -1
- package/dist/pcm-agents/{p-d9e464fd.entry.js → p-1cc1dbcc.entry.js} +2 -2
- package/dist/pcm-agents/{p-cc3c0220.entry.js → p-43cefa20.entry.js} +2 -2
- package/dist/pcm-agents/{p-4b363eb3.entry.js → p-5bf761de.entry.js} +2 -2
- package/dist/pcm-agents/{p-96c41b85.entry.js → p-680bf3a3.entry.js} +2 -2
- package/dist/pcm-agents/p-8452f80b.entry.js +251 -0
- package/dist/pcm-agents/p-8452f80b.entry.js.map +1 -0
- package/dist/pcm-agents/{p-86c2748a.entry.js → p-890fb793.entry.js} +2 -2
- package/dist/pcm-agents/{p-Dz4pPCio.js → p-B1X08zm_.js} +2 -2
- package/dist/pcm-agents/{p-Dz4pPCio.js.map → p-B1X08zm_.js.map} +1 -1
- package/dist/pcm-agents/{p-zJbvNgZt.js → p-BmPGiYO3.js} +2 -2
- package/dist/pcm-agents/{p-zJbvNgZt.js.map → p-BmPGiYO3.js.map} +1 -1
- package/dist/pcm-agents/{p-a54ca8e2.entry.js → p-a31fa268.entry.js} +2 -2
- package/dist/pcm-agents/{p-4b257381.entry.js → p-ad6ce0c9.entry.js} +2 -2
- package/dist/pcm-agents/{p-41b4b6bb.entry.js → p-b80f01e6.entry.js} +2 -2
- package/dist/pcm-agents/{p-e442dabc.entry.js → p-c3eb9590.entry.js} +2 -2
- package/dist/pcm-agents/{p-92eea906.entry.js → p-eb44bda0.entry.js} +2 -2
- package/dist/pcm-agents/pcm-agents.esm.js +1 -1
- package/dist/pcm-agents/pcm-hr-chat-modal.entry.esm.js.map +1 -1
- package/dist/types/components/pcm-jlpp-modal/pcm-jlpp-modal.d.ts +3 -2
- package/dist/types/components/pcm-jlzz-modal/pcm-jlzz-modal.d.ts +14 -0
- package/dist/types/components/pcm-qgqjl-modal/pcm-qgqjl-modal.d.ts +3 -2
- package/dist/types/components/pcm-virtual-chat-modal/pcm-virtual-chat-modal.d.ts +10 -0
- package/dist/types/components/pcm-zygh-v2-modal/pcm-zygh-v2-modal.d.ts +4 -4
- package/dist/types/components.d.ts +36 -12
- package/package.json +1 -1
- package/dist/cjs/pcm-1zhanshi-mnms-modal_28.cjs.entry.js.map +0 -1
- package/dist/cjs/pcm-zygh-v2-modal.cjs.entry.js +0 -260
- package/dist/cjs/pcm-zygh-v2-modal.cjs.entry.js.map +0 -1
- package/dist/cjs/pcm-zygh-v2-modal.entry.cjs.js.map +0 -1
- package/dist/components/p-BZeNORff.js.map +0 -1
- package/dist/components/p-Caxrsbp0.js.map +0 -1
- package/dist/esm/pcm-1zhanshi-mnms-modal_28.entry.js.map +0 -1
- package/dist/esm/pcm-zygh-v2-modal.entry.js +0 -258
- package/dist/esm/pcm-zygh-v2-modal.entry.js.map +0 -1
- package/dist/pcm-agents/p-210d610a.entry.js +0 -2
- package/dist/pcm-agents/p-210d610a.entry.js.map +0 -1
- package/dist/pcm-agents/p-365a351b.entry.js +0 -2
- package/dist/pcm-agents/p-6551d616.entry.js +0 -251
- package/dist/pcm-agents/p-6551d616.entry.js.map +0 -1
- package/dist/pcm-agents/pcm-zygh-v2-modal.entry.esm.js.map +0 -1
- /package/dist/pcm-agents/{p-d9e464fd.entry.js.map → p-1cc1dbcc.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-cc3c0220.entry.js.map → p-43cefa20.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-4b363eb3.entry.js.map → p-5bf761de.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-96c41b85.entry.js.map → p-680bf3a3.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-86c2748a.entry.js.map → p-890fb793.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-a54ca8e2.entry.js.map → p-a31fa268.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-4b257381.entry.js.map → p-ad6ce0c9.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-41b4b6bb.entry.js.map → p-b80f01e6.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-e442dabc.entry.js.map → p-c3eb9590.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-92eea906.entry.js.map → p-eb44bda0.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oem-jlsx-modal.js","sourceRoot":"","sources":["../../../../src/components/oem-jlsx-modal/oem-jlsx-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { FileUploadResponse, verifyApiKey, sendHttpRequest, sendSSERequest, getCosPreviewUrl,PCM_DOMAIN, Position, uploadFileByUrl } from '../../utils/utils';\r\nimport { showMessage } from '../../utils/message-utils';\r\nimport { Message } from '../../services/message.service';\r\nimport {\r\n TaskCreatedEventData,\r\n ResumeAnalysisStartEventData,\r\n ResumeAnalysisCompleteEventData,\r\n TaskSwitchEventData,\r\n ResumeDeletedEventData,\r\n ConversationStartEventData,\r\n} from '../../interfaces/events';\r\nimport { ErrorEventBus,ErrorEventDetail } from '../../utils/error-event';\r\nimport { authStore } from '../../../store/auth.store';\r\nimport { configStore } from '../../../store/config.store';\r\nimport { SentryReporter } from '../../utils/sentry-reporter';\r\nimport { marked } from 'marked';\r\nimport extendedTables from 'marked-extended-tables';\r\n\r\n/**\r\n * 简历筛选\r\n */\r\n\r\n// 定义评分标准接口\r\ninterface EvaluationCriteria {\r\n name: string;\r\n value: number;\r\n description: string;\r\n}\r\n\r\n// 定义任务接口\r\ninterface FilterTask {\r\n id: number;\r\n jd_id: number;\r\n user_id: number;\r\n extra: string; // JSON字符串格式的评分标准\r\n create_at: string;\r\n update_at: string;\r\n}\r\n\r\n// 定义简历记录接口\r\ninterface ResumeRecord {\r\n id: string;\r\n fileName: string;\r\n talentInfo: string;\r\n score: number;\r\n scoreDetail: string;\r\n uploadTime: Date;\r\n fileInfo?: FileUploadResponse;\r\n task_id?: number;\r\n file_url?: string;\r\n analysis_result?: string;\r\n // 添加API返回的原始字段\r\n user_id?: number;\r\n jd_id?: number;\r\n job_info?: string;\r\n resume_file_url?: string;\r\n resume_file_name?: string;\r\n resume_data?: string;\r\n evaluate?: string;\r\n evaluate_status?: 0 | 1 | -1; // 筛选状态:0-筛选中,1-筛选完成,-1-筛选失败\r\n resume_raw?: any;\r\n create_at?: string;\r\n app_code?: any;\r\n app_task_id?: any;\r\n initial_filter_passed?: any;\r\n ai_interview_cid?: any;\r\n ai_interview_report_status?: any;\r\n ai_interview_report?: any;\r\n ai_interview_report_readed?: any;\r\n ai_interview_has_notice?: any;\r\n ai_interview_notice_type?: any;\r\n ai_interview_has_submit?: number;\r\n error_info?: any;\r\n}\r\n\r\n// 定义简历分页数据接口\r\ninterface ResumePageData {\r\n total: number;\r\n page: number;\r\n size: number;\r\n pages: number;\r\n records: ResumeRecord[];\r\n}\r\n\r\n@Component({\r\n tag: 'oem-jlsx-modal',\r\n styleUrls: ['../../global/global.css', 'oem-jlsx-modal.css', '../../global/markdown.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class OemJlsxModal {\r\n /**\r\n * 模态框标题\r\n */\r\n @Prop() modalTitle: string = '简历筛选精灵';\r\n\r\n /**\r\n * SDK鉴权密钥\r\n */\r\n @Prop({ attribute: 'token' }) token!: string;\r\n\r\n /**\r\n * 是否显示聊天模态框\r\n */\r\n @Prop({ mutable: true }) isOpen: boolean = false;\r\n\r\n /**\r\n * 当点击模态框关闭时触发\r\n */\r\n @Event() modalClosed: EventEmitter<void>;\r\n\r\n /**\r\n * 应用图标URL\r\n */\r\n @Prop() icon?: string;\r\n\r\n /**\r\n * 聊天框的页面层级\r\n */\r\n @Prop() zIndex?: number = 1000;\r\n\r\n /**\r\n * 是否展示顶部标题栏\r\n */\r\n @Prop() isShowHeader: boolean = true;\r\n\r\n /**\r\n * 是否展示右上角的关闭按钮\r\n */\r\n @Prop() isNeedClose: boolean = true;\r\n\r\n /**\r\n * 是否以全屏模式打开,移动端建议设置为true\r\n */\r\n @Prop() fullscreen: boolean = false;\r\n\r\n /**\r\n * 自定义输入参数<br>\r\n * - job_info: 填充JD输入区域<br>\r\n * - file_urls: 简历文件URLs,多个用逗号分隔,传入后创建任务时会直接进入简历列表并开始筛选\r\n */\r\n @Prop() customInputs: Record<string, string> = {};\r\n\r\n\r\n /**\r\n * 是否显示\"批量导出报告\"功能\r\n */\r\n @Prop() showBatchExport: boolean = false;\r\n\r\n /**\r\n * OEM ID,用于获取职位列表\r\n */\r\n @Prop() oemId?: string;\r\n\r\n /**\r\n * 上传成功事件\r\n */\r\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\r\n\r\n /**\r\n * SDK密钥验证失败事件\r\n */\r\n @Event() tokenInvalid: EventEmitter<void>;\r\n\r\n /**\r\n * 错误事件\r\n */\r\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\r\n\r\n /**\r\n * 任务创建完成事件\r\n */\r\n @Event() taskCreated: EventEmitter<TaskCreatedEventData>;\r\n\r\n /**\r\n * 简历分析开始事件\r\n */\r\n @Event() resumeAnalysisStart: EventEmitter<ResumeAnalysisStartEventData>;\r\n\r\n /**\r\n * 简历分析完成事件\r\n */\r\n @Event() resumeAnalysisComplete: EventEmitter<ResumeAnalysisCompleteEventData>;\r\n\r\n /**\r\n * 任务切换事件\r\n */\r\n @Event() taskSwitch: EventEmitter<TaskSwitchEventData>;\r\n\r\n /**\r\n * 简历删除事件\r\n */\r\n @Event() resumeDeleted: EventEmitter<ResumeDeletedEventData>;\r\n\r\n /**\r\n * 会话开始事件\r\n */\r\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\r\n\r\n\r\n // State 管理\r\n @State() currentStep: 'input' | 'task' = 'input'; // 当前步骤\r\n @State() jobDescription: string = '';\r\n @State() jobTitle: string = '';\r\n @State() evaluationCriteria: EvaluationCriteria[] = [\r\n { name: '基础信息', value: 10, description: '评估简历中姓名、联系方式、性别、年龄等基础信息是否完整且准确。完整准确的基础信息有助于招聘方快速识别和联系求职者,是简历的基本要素。若基础信息缺失或有误,可能影响后续沟通与评估流程。' },\r\n { name: '教育背景', value: 20, description: '主要考察毕业院校、专业、入学及毕业时间、学历层次等内容。毕业院校的知名度与专业的匹配度,一定程度上反映求职者在知识储备基础和专业素养。学历层次及相关课程成绩,能辅助判断求职者在专业领域的学习深度与能力水平。' },\r\n { name: '职业履历', value: 30, description: '重点评估过往工作经历的连贯性、职位晋升轨迹、工作内容与目标岗位的相关性。丰富且相关的职业履历,展现出求职者在实际工作场景中的实践经验与解决问题能力,连贯的工作经历能体现其稳定性与忠诚度。' },\r\n { name: '专业技能', value: 20, description: '评估求职者所掌握的专业技能,包括软件操作能力、语言能力、专业资质证书等。这些技能直接反映求职者在特定领域的专业程度,是能否胜任目标岗位的关键因素之一,与目标岗位匹配的专业技能越多、水平越高,竞争力越强。' },\r\n { name: '项目成果', value: 15, description: '考量求职者参与项目的数量、在项目中承担的角色及取得的成果。通过项目成果可了解其在团队协作、项目管理、创新思维等方面的能力,突出的项目成果能直观展示求职者在实际工作中的价值创造能力。' },\r\n { name: '求职动机', value: 5, description: '判断求职者对目标岗位的兴趣和热情,以及其职业规划与公司及岗位的契合度。清晰合理的求职动机表明求职者对自身职业发展有明确认知,且对目标岗位做了充分了解,入职后更有可能长期稳定发展并积极投入工作。' }\r\n ];\r\n @State() isSubmitting: boolean = false;\r\n @State() isUploading: boolean = false;\r\n\r\n // 分别存储上传后未筛选的简历和已筛选的简历\r\n @State() uploadedResumeRecords: ResumeRecord[] = []; // 上传后未筛选的简历\r\n @State() filteredResumeRecords: ResumeRecord[] = []; // 已经筛选的简历(从API加载)\r\n\r\n @State() selectedFiles: File[] = [];\r\n @State() showJdDrawer: boolean = false;\r\n @State() showCriteriaDrawer: boolean = false;\r\n @State() currentTask: FilterTask | null = null;\r\n @State() currentPage: number = 1;\r\n @State() pageSize: number = 10;\r\n @State() totalRecords: number = 0;\r\n @State() isAnalyzing: boolean = false;\r\n @State() showPreviewDrawer: boolean = false;\r\n @State() previewContent: string = '';\r\n @State() previewTitle: string = '';\r\n @State() previewType: 'markdown' | 'file' = 'markdown';\r\n @State() previewUrl: string = '';\r\n @State() activeDropdownId: string | null = null;\r\n @State() deletingRecordId: string | null = null; // 正在删除的记录ID\r\n @State() sortOrder: 'none' | 'asc' | 'desc' = 'none'; // 评估分数排序状态\r\n\r\n\r\n // 添加简历列表加载状态\r\n @State() isLoadingResumeList: boolean = false;\r\n\r\n // 添加导出记录模态框状态\r\n @State() isExportRecordsModalOpen: boolean = false;\r\n\r\n // 职位选择器相关状态\r\n @State() showPositionSelector: boolean = false;\r\n\r\n // 使用 @Element 装饰器获取组件的 host 元素\r\n @Element() hostElement: HTMLElement;\r\n\r\n private tokenInvalidListener: () => void;\r\n private removeErrorListener: () => void;\r\n private botId = '3022316191018874';\r\n\r\n // 添加pcm-upload组件的引用\r\n private pcmUploadRef;\r\n\r\n // 内部会话ID,用于跟踪是否已触发conversationStart事件\r\n private internalConversationId: string | null = null;\r\n\r\n // 计算属性:获取所有简历记录(用于显示)\r\n private get resumeRecords(): ResumeRecord[] {\r\n return [...this.uploadedResumeRecords, ...this.filteredResumeRecords];\r\n }\r\n\r\n constructor() {\r\n // 配置 marked 选项\r\n marked.use(extendedTables);\r\n marked.setOptions({\r\n breaks: true,\r\n gfm: true\r\n });\r\n\r\n // 添加全局点击事件监听,用于关闭下拉菜单\r\n document.addEventListener('click', this.handleDocumentClick);\r\n }\r\n\r\n @Watch('token')\r\n handleTokenChange(newToken: string) {\r\n // 当传入的 token 变化时,更新 authStore 中的 token\r\n if (newToken && newToken !== authStore.getToken()) {\r\n authStore.setToken(newToken);\r\n }\r\n }\r\n\r\n @Watch('isOpen')\r\n async handleIsOpenChange(newValue: boolean) {\r\n if (!newValue) {\r\n // 重置状态\r\n this.resetStates();\r\n } else {\r\n await verifyApiKey(this.token);\r\n }\r\n }\r\n\r\n componentWillLoad() {\r\n // 将 zIndex 存入配置缓存\r\n if (this.zIndex) {\r\n configStore.setItem('modal-zIndex', this.zIndex);\r\n }\r\n if (this.token) {\r\n authStore.setToken(this.token);\r\n }\r\n\r\n // 添加全局token无效事件监听器\r\n this.tokenInvalidListener = () => {\r\n this.tokenInvalid.emit();\r\n };\r\n // 添加全局错误监听\r\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\r\n this.someErrorEvent.emit(errorDetail);\r\n });\r\n\r\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\r\n }\r\n\r\n disconnectedCallback() {\r\n // 组件销毁时移除事件监听器\r\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\r\n\r\n // 移除错误监听器\r\n if (this.removeErrorListener) {\r\n this.removeErrorListener();\r\n }\r\n\r\n // 移除全局点击事件监听器\r\n document.removeEventListener('click', this.handleDocumentClick);\r\n }\r\n\r\n private resetStates = () => {\r\n this.currentStep = 'input';\r\n this.jobDescription = '';\r\n this.evaluationCriteria = [\r\n { name: '基础信息', value: 10, description: '评估简历中姓名、联系方式、性别、年龄等基础信息是否完整且准确。完整准确的基础信息有助于招聘方快速识别和联系求职者,是简历的基本要素。若基础信息缺失或有误,可能影响后续沟通与评估流程。' },\r\n { name: '教育背景', value: 20, description: '主要考察毕业院校、专业、入学及毕业时间、学历层次等内容。毕业院校的知名度与专业的匹配度,一定程度上反映求职者在知识储备基础和专业素养。学历层次及相关课程成绩,能辅助判断求职者在专业领域的学习深度与能力水平。' },\r\n { name: '职业履历', value: 30, description: '重点评估过往工作经历的连贯性、职位晋升轨迹、工作内容与目标岗位的相关性。丰富且相关的职业履历,展现出求职者在实际工作场景中的实践经验与解决问题能力,连贯的工作经历能体现其稳定性与忠诚度。' },\r\n { name: '专业技能', value: 20, description: '评估求职者所掌握的专业技能,包括软件操作能力、语言能力、专业资质证书等。这些技能直接反映求职者在特定领域的专业程度,是能否胜任目标岗位的关键因素之一,与目标岗位匹配的专业技能越多、水平越高,竞争力越强。' },\r\n { name: '项目成果', value: 15, description: '考量求职者参与项目的数量、在项目中承担的角色及取得的成果。通过项目成果可了解其在团队协作、项目管理、创新思维等方面的能力,突出的项目成果能直观展示求职者在实际工作中的价值创造能力。' },\r\n { name: '求职动机', value: 5, description: '判断求职者对目标岗位的兴趣和热情,以及其职业规划与公司及岗位的契合度。清晰合理的求职动机表明求职者对自身职业发展有明确认知,且对目标岗位做了充分了解,入职后更有可能长期稳定发展并积极投入工作。' }\r\n ];\r\n this.isSubmitting = false;\r\n this.isUploading = false;\r\n this.uploadedResumeRecords = [];\r\n this.filteredResumeRecords = [];\r\n this.selectedFiles = [];\r\n this.showJdDrawer = false;\r\n this.showCriteriaDrawer = false;\r\n this.currentTask = null;\r\n this.currentPage = 1;\r\n this.pageSize = 10;\r\n this.totalRecords = 0;\r\n this.isAnalyzing = false;\r\n this.showPreviewDrawer = false;\r\n this.previewContent = '';\r\n this.previewTitle = '';\r\n this.previewType = 'markdown';\r\n this.previewUrl = '';\r\n this.activeDropdownId = null;\r\n this.deletingRecordId = null;\r\n this.sortOrder = 'none';\r\n this.isLoadingResumeList = false;\r\n this.isExportRecordsModalOpen = false;\r\n this.internalConversationId = null;\r\n };\r\n\r\n private handleClose = () => {\r\n this.modalClosed.emit();\r\n };\r\n\r\n private handleJobDescriptionChange = (event: Event) => {\r\n const textarea = event.target as HTMLTextAreaElement;\r\n this.jobDescription = textarea.value;\r\n };\r\n\r\n private handleCreateTask = async () => {\r\n const jobInfo = this.customInputs?.job_info || this.jobDescription.trim();\r\n\r\n if (!jobInfo) {\r\n showMessage('请输入职位描述', 'warning');\r\n return;\r\n }\r\n\r\n if (this.evaluationCriteria.length === 0) {\r\n showMessage('请输入评分标准', 'warning');\r\n return;\r\n }\r\n\r\n this.isSubmitting = true;\r\n\r\n try {\r\n // 调用创建任务的API\r\n const response = await sendHttpRequest<FilterTask>({\r\n url: '/sdk/v1/agent/app_filter_task/create',\r\n method: 'POST',\r\n data: {\r\n job_info: jobInfo,\r\n extra: JSON.stringify(this.evaluationCriteria)\r\n }\r\n });\r\n\r\n if (response.success && response.data) {\r\n this.currentTask = response.data;\r\n // 保存 jobInfo 到 jobDescription,确保在任务界面能正常显示\r\n this.jobDescription = jobInfo;\r\n // 切换到任务界面\r\n this.currentStep = 'task';\r\n\r\n // 触发任务创建完成事件\r\n this.taskCreated.emit({\r\n task_id: response.data.id,\r\n job_description: jobInfo,\r\n evaluation_criteria: this.evaluationCriteria,\r\n create_time: new Date().toISOString()\r\n });\r\n\r\n // 检查是否传入了file_urls,如果有则直接开始筛选\r\n if (this.customInputs?.file_urls) {\r\n await this.startAnalysisWithCustomFileUrls();\r\n }\r\n } else {\r\n throw new Error(response.message || '创建任务失败');\r\n }\r\n } catch (error) {\r\n console.error('创建任务时出错:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'handleCreateTask',\r\n component: 'oem-jlsx-modal',\r\n title: '创建任务时出错'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '创建任务时出错,请重试'\r\n });\r\n } finally {\r\n this.isSubmitting = false;\r\n }\r\n };\r\n\r\n\r\n private toggleJdDetail = () => {\r\n this.showJdDrawer = true;\r\n };\r\n\r\n private toggleCriteriaDetail = () => {\r\n this.showCriteriaDrawer = true;\r\n };\r\n\r\n private closeJdDrawer = () => {\r\n this.showJdDrawer = false;\r\n };\r\n\r\n private closeCriteriaDrawer = () => {\r\n this.showCriteriaDrawer = false;\r\n };\r\n\r\n private showPreview = (title: string, content?: string, type: 'markdown' | 'file' = 'markdown', url?: string) => {\r\n this.previewTitle = title;\r\n this.previewContent = content || '';\r\n this.previewType = type;\r\n this.previewUrl = url || '';\r\n this.showPreviewDrawer = true;\r\n this.activeDropdownId = null; // 关闭下拉菜单\r\n };\r\n\r\n private closePreviewDrawer = () => {\r\n this.showPreviewDrawer = false;\r\n this.previewContent = '';\r\n this.previewTitle = '';\r\n this.previewType = 'markdown';\r\n this.previewUrl = '';\r\n };\r\n\r\n private toggleDropdown = (recordId: string) => {\r\n const newActiveId = this.activeDropdownId === recordId ? null : recordId;\r\n this.activeDropdownId = newActiveId;\r\n };\r\n\r\n private handleViewEvaluate = (record: ResumeRecord) => {\r\n // this.showPreview(\r\n // `${record.fileName} - 评估详情`,\r\n // record.scoreDetail || '暂无评估详情',\r\n // 'markdown'\r\n // );\r\n const url = `${PCM_DOMAIN}/exportFile?id=${record.id}&title=${this.jobTitle || ''}&token=${authStore.getToken()}&referrer=sdk`;\r\n this.showPreview(\r\n `${record.fileName} - 评估详情`,\r\n '',\r\n 'file',\r\n url,\r\n )\r\n };\r\n\r\n @State() exportAllPdfLoading = false;\r\n private exportAllPDF = async () => {\r\n this.exportAllPdfLoading = true;\r\n const response = await sendHttpRequest({\r\n url: `/sdk/v1/agent/app_filter_task/export_all`,\r\n method: \"GET\",\r\n params: {\r\n task_id: this.currentTask?.id,\r\n }\r\n });\r\n this.exportAllPdfLoading = false;\r\n if (response.success) {\r\n showMessage('导出任务已创建!', 'success');\r\n this.handleExportRecordsClick();\r\n }\r\n }\r\n\r\n private handleViewResume = async (record: ResumeRecord) => {\r\n if (record.file_url || record.resume_file_url) {\r\n const fileUrl = record.file_url || record.resume_file_url;\r\n try {\r\n const previewUrl = await getCosPreviewUrl(fileUrl);\r\n if (previewUrl) {\r\n this.showPreview(\r\n `${record.fileName} - 简历详情`,\r\n '',\r\n 'file',\r\n previewUrl\r\n );\r\n } else {\r\n showMessage('无法获取简历预览,请稍后重试', 'error');\r\n }\r\n } catch (error) {\r\n console.error('获取简历预览失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'handleViewResume',\r\n component: 'oem-jlsx-modal',\r\n title: '获取简历预览失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '获取简历预览失败,请稍后重试'\r\n });\r\n }\r\n } else {\r\n showMessage('简历文件不存在', 'error');\r\n }\r\n };\r\n\r\n private handleDeleteRecord = async (recordId: string) => {\r\n this.activeDropdownId = null; // 关闭下拉菜单\r\n\r\n // 检查记录是否在filteredResumeRecords中(来自API)\r\n const filteredRecord = this.filteredResumeRecords.find(record => record.id === recordId);\r\n\r\n if (filteredRecord) {\r\n // 如果是API加载的记录,调用删除接口\r\n this.deletingRecordId = recordId;\r\n\r\n try {\r\n const response = await sendHttpRequest({\r\n url: `/sdk/v1/agent/app_filter_resume/delete/${recordId}`,\r\n method: 'DELETE'\r\n });\r\n\r\n if (response.success) {\r\n // 删除成功,从列表中移除\r\n this.filteredResumeRecords = this.filteredResumeRecords.filter(record => record.id !== recordId);\r\n showMessage('删除成功', 'success');\r\n\r\n // 触发简历删除事件\r\n this.resumeDeleted.emit({\r\n task_id: this.currentTask!.id,\r\n resume_id: recordId,\r\n resume_name: filteredRecord.fileName,\r\n delete_time: new Date().toISOString()\r\n });\r\n\r\n // 重新加载列表以更新总数\r\n await this.loadResumeList();\r\n } else {\r\n throw new Error(response.message || '删除失败');\r\n }\r\n } catch (error) {\r\n console.error('删除记录失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'handleDeleteRecord',\r\n component: 'oem-jlsx-modal',\r\n title: '删除记录失败',\r\n recordId: recordId\r\n });\r\n showMessage('删除失败,请重试', 'error');\r\n } finally {\r\n this.deletingRecordId = null;\r\n }\r\n } else {\r\n // 如果是本地上传的记录,直接从列表中移除\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => record.id !== recordId);\r\n showMessage('删除成功', 'success');\r\n }\r\n };\r\n\r\n private handleEvaluationCriteriaNameChange = (index: number, value: string) => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n newCriteria[index].name = value;\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private handleEvaluationCriteriaValueChange = (index: number, value: string) => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n const numValue = parseInt(value) || 0;\r\n newCriteria[index].value = Math.max(0, Math.min(100, numValue)); // 限制在0-100之间\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private handleEvaluationCriteriaDescriptionChange = (index: number, value: string) => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n newCriteria[index].description = value;\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private addEvaluationCriteria = () => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n newCriteria.push({\r\n name: '',\r\n value: 0,\r\n description: ''\r\n });\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private removeEvaluationCriteria = (index: number) => {\r\n if (this.evaluationCriteria.length <= 1) {\r\n showMessage('至少需要保留一个评分标准', 'warning');\r\n return;\r\n }\r\n const newCriteria = this.evaluationCriteria.filter((_, i) => i !== index);\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private getTotalWeight = (): number => {\r\n return this.evaluationCriteria.reduce((sum, criteria) => sum + criteria.value, 0);\r\n };\r\n\r\n private renderInputStep() {\r\n // 判断是否禁用JD输入区域(有预设job_info时禁用)\r\n const disableJdInput = Boolean(this.customInputs && this.customInputs.job_info);\r\n\r\n return (\r\n <div class=\"input-container\">\r\n <div class=\"step-header\">\r\n <h3>创建简历筛选任务</h3>\r\n <p class=\"step-description\">请输入职位描述和评分标准</p>\r\n </div>\r\n\r\n <div class=\"jd-input-section\">\r\n <div class=\"label-with-button\">\r\n <label htmlFor=\"job-description\">职位描述 (JD)</label>\r\n {!disableJdInput && (\r\n <div class=\"button-group\">\r\n {this.oemId && (\r\n <button\r\n class=\"position-selector-button\"\r\n onClick={this.handleOpenPositionSelector}\r\n type=\"button\"\r\n >\r\n 选择职位\r\n </button>\r\n )}\r\n {\r\n <pcm-mobile-input-btn\r\n name=\"职位描述\"\r\n onOk={(e) => {\r\n this.jobDescription = e.detail;\r\n }}\r\n />\r\n }\r\n </div>\r\n )}\r\n </div>\r\n <textarea\r\n id=\"job-description\"\r\n class=\"job-description-textarea\"\r\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\r\n rows={6}\r\n value={this.customInputs?.job_info || this.jobDescription}\r\n onInput={this.handleJobDescriptionChange}\r\n disabled={disableJdInput}\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"criteria-input-section\">\r\n <div class=\"criteria-header\">\r\n <label htmlFor=\"evaluation-criteria\">评分标准</label>\r\n <div class=\"criteria-actions\">\r\n <span class={`total-weight ${this.getTotalWeight() !== 100 ? 'invalid' : ''}`}>\r\n 总权重: {this.getTotalWeight()}%\r\n </span>\r\n <button\r\n type=\"button\"\r\n class=\"add-criteria-btn\"\r\n onClick={this.addEvaluationCriteria}\r\n >\r\n + 添加标准\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"criteria-table-container\">\r\n <table class=\"criteria-table\">\r\n <thead>\r\n <tr>\r\n <th style={{ width: '25%' }}>标准名称</th>\r\n <th style={{ width: '15%' }}>权重(%)</th>\r\n <th style={{ width: '50%' }}>描述</th>\r\n <th style={{ width: '10%' }}>操作</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {this.evaluationCriteria.map((criteria, index) => (\r\n <tr key={index}>\r\n <td>\r\n <input\r\n type=\"text\"\r\n class=\"criteria-name-input\"\r\n placeholder=\"请输入标准名称\"\r\n value={criteria.name}\r\n onInput={(e) => this.handleEvaluationCriteriaNameChange(index, (e.target as HTMLInputElement).value)}\r\n />\r\n </td>\r\n <td>\r\n <input\r\n type=\"number\"\r\n class=\"criteria-value-input\"\r\n placeholder=\"0\"\r\n min=\"0\"\r\n max=\"100\"\r\n value={criteria.value}\r\n onInput={(e) => this.handleEvaluationCriteriaValueChange(index, (e.target as HTMLInputElement).value)}\r\n />\r\n </td>\r\n <td>\r\n <textarea\r\n class=\"criteria-description-input\"\r\n placeholder=\"请输入评分标准描述\"\r\n rows={2}\r\n value={criteria.description}\r\n onInput={(e) => this.handleEvaluationCriteriaDescriptionChange(index, (e.target as HTMLTextAreaElement).value)}\r\n ></textarea>\r\n </td>\r\n <td>\r\n <button\r\n type=\"button\"\r\n class=\"remove-criteria-btn\"\r\n disabled={this.evaluationCriteria.length <= 1}\r\n onClick={() => this.removeEvaluationCriteria(index)}\r\n title={this.evaluationCriteria.length <= 1 ? '至少需要保留一个评分标准' : '删除此标准'}\r\n >\r\n ×\r\n </button>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {this.getTotalWeight() !== 100 && (\r\n <p class=\"criteria-warning\">\r\n ⚠️ 权重总和应为100%,当前为{this.getTotalWeight()}%\r\n </p>\r\n )}\r\n </div>\r\n\r\n <button\r\n class=\"submit-button\"\r\n disabled={!(this.customInputs?.job_info || this.jobDescription.trim()) || this.evaluationCriteria.length === 0 || this.getTotalWeight() !== 100 || this.isSubmitting}\r\n onClick={this.handleCreateTask}\r\n >\r\n {this.isSubmitting ? '创建中...' : '创建任务'}\r\n </button>\r\n\r\n <div class=\"ai-disclaimer\">\r\n <p>所有内容均由AI生成仅供参考</p>\r\n <p class=\"beian-info\">\r\n <span>中央网信办生成式人工智能服务备案号</span>:\r\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderTaskStep() {\r\n return (\r\n <div class=\"task-container\">\r\n {/* 任务信息展示区域 */}\r\n <div class=\"task-info-section\">\r\n <div class=\"info-cards\">\r\n <div class=\"info-card\">\r\n <div class=\"card-header\" onClick={this.toggleJdDetail}>\r\n <span class=\"card-title\">职位描述</span>\r\n <button class=\"toggle-btn\">查看</button>\r\n </div>\r\n <div class=\"card-preview\">\r\n <p class=\"preview-text\">{this.jobDescription}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"info-card\">\r\n <div class=\"card-header\" onClick={this.toggleCriteriaDetail}>\r\n <span class=\"card-title\">评分标准</span>\r\n <button class=\"toggle-btn\">查看</button>\r\n </div>\r\n <div class=\"card-preview\">\r\n <p class=\"preview-text\">{this.getEvaluationCriteriaText()}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* 简历上传区域 */}\r\n <div class=\"upload-section\">\r\n <div class=\"section-header\">\r\n <h4>上传简历</h4>\r\n </div>\r\n\r\n <div\r\n class={this.customInputs?.file_urls ? 'upload-disabled-wrapper' : ''}\r\n onClick={(e) => {\r\n if (this.customInputs?.file_urls) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n showMessage('演示模式下不允许上传简历,请联系管理员', 'warning');\r\n }\r\n }}\r\n >\r\n <pcm-upload\r\n ref={(el) => this.pcmUploadRef = el}\r\n multiple={true}\r\n maxFileSize={15 * 1024 * 1024}\r\n acceptFileSuffixList={['.pdf', '.doc', '.docx', '.txt', '.md', '.ppt', '.pptx', '.jpg', '.jpeg', '.png']}\r\n mobileUploadAble={!this.customInputs?.file_urls}\r\n uploadParams={{ tags: ['resume'] }}\r\n onUploadChange={this.handleUploadChange}\r\n />\r\n </div>\r\n\r\n <div class=\"upload-actions\">\r\n {this.uploadedResumeRecords.some(record => record.evaluate_status !== 1 && record.evaluate_status !== 0) && (\r\n <button\r\n class=\"analyze-btn\"\r\n onClick={this.handleStartAnalysis}\r\n >\r\n {`开始分析 (${this.uploadedResumeRecords.filter(record => record.evaluate_status !== 1 && record.evaluate_status !== 0).length} 个待分析)`}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* 简历列表表格 */}\r\n <div class=\"resume-table-section\">\r\n <div class=\"section-header\">\r\n <h4>简历列表</h4>\r\n <div class=\"section-header-side\">\r\n {\r\n this.showBatchExport && !!this.resumeRecords?.find(item => item.evaluate_status == 1) && <div class=\"export-actions\">\r\n <div\r\n class=\"export-btn\"\r\n onClick={this.exportAllPDF}\r\n >\r\n <span>批量导出报告</span>\r\n </div>\r\n <div class=\"export-divide\"></div>\r\n <div\r\n class=\"export-btn\"\r\n onClick={this.handleExportRecordsClick}\r\n >导出记录</div>\r\n </div>\r\n }\r\n\r\n <button\r\n class=\"refresh-btn\"\r\n onClick={this.handleRefreshTable}\r\n disabled={this.isLoadingResumeList}\r\n title=\"刷新表格\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class={this.isLoadingResumeList ? 'rotating' : ''}>\r\n <path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"/>\r\n </svg>\r\n </button>\r\n\r\n <span class=\"record-count\">已筛选 {this.totalRecords} 条记录</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <table class=\"resume-table\">\r\n <thead>\r\n <tr>\r\n <th>简历文件名</th>\r\n <th>人才信息</th>\r\n <th\r\n class={`sortable-header ${this.sortOrder !== 'none' ? 'active' : ''}`}\r\n onClick={this.handleSortByScore}\r\n >\r\n <span class=\"header-content\">\r\n 评估分数\r\n <span class=\"sort-icons\">\r\n <svg\r\n class={`sort-icon ${this.sortOrder === 'asc' ? 'active' : ''}`}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n >\r\n <path d=\"M6 3l4 4H2z\" fill=\"currentColor\" />\r\n </svg>\r\n <svg\r\n class={`sort-icon ${this.sortOrder === 'desc' ? 'active' : ''}`}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n >\r\n <path d=\"M6 9L2 5h8z\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </th>\r\n <th>评估详情</th>\r\n <th>状态</th>\r\n <th>操作</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {this.isLoadingResumeList ? (\r\n <tr>\r\n <td colSpan={6} class=\"empty-row\">\r\n <div class=\"empty-state\">\r\n <div class=\"loading-spinner-small\"></div>\r\n <p>正在加载简历数据...</p>\r\n </div>\r\n </td>\r\n </tr>\r\n ) : this.resumeRecords.length === 0 ? (\r\n <tr>\r\n <td colSpan={6} class=\"empty-row\">\r\n <div class=\"empty-state\">\r\n <p>暂无简历数据</p>\r\n <p class=\"empty-hint\">请上传简历开始筛选</p>\r\n </div>\r\n </td>\r\n </tr>\r\n ) : (\r\n this.resumeRecords.map(record => (\r\n <tr key={record.id}>\r\n <td class=\"filename-cell\">\r\n <span class=\"file-icon\">📝</span>\r\n <span title={record.fileName}>{record.fileName}</span>\r\n </td>\r\n <td class=\"talent-info-cell\" title={record.talentInfo}>{record.talentInfo}</td>\r\n <td class=\"score-cell\">\r\n <span class={`score-badge ${this.getScoreClass(record.score)}`}>\r\n {typeof record.score === 'number' ? record.score : '--'}\r\n </span>\r\n </td>\r\n <td class=\"detail-cell\" title={record.scoreDetail}>\r\n <span\r\n class=\"detail-content\"\r\n onClick={() => this.handleViewEvaluate(record)}\r\n >\r\n {record.scoreDetail}\r\n </span>\r\n </td>\r\n <td class=\"status-cell\">\r\n <span class={`status-badge status-${this.getEvaluateStatusClass(record.evaluate_status)}`}>\r\n {this.getEvaluateStatusText(record.evaluate_status)}\r\n </span>\r\n </td>\r\n <td class=\"action-cell\">\r\n <div class=\"action-dropdown\">\r\n <button\r\n class=\"action-btn dropdown-trigger\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n this.toggleDropdown(record.id);\r\n }}\r\n >\r\n 操作\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M7 10l5 5 5-5z\" />\r\n </svg>\r\n </button>\r\n {this.activeDropdownId === record.id && (\r\n <div class=\"dropdown-menu\">\r\n <div\r\n class=\"dropdown-item\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n this.handleViewEvaluate(record);\r\n }}\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2a1 1 0 0 0-2 0v2H8V2a1 1 0 0 0-2 0v2H5a3 3 0 0 0-3 3v11a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3zM4 18V9h16v9a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1z\" />\r\n </svg>\r\n 评估详情\r\n </div>\r\n <div\r\n class=\"dropdown-item\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n this.handleViewResume(record);\r\n }}\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6zm4 18H6V4h7v5h5v11z\" />\r\n </svg>\r\n 简历详情\r\n </div>\r\n <div\r\n class={`dropdown-item danger ${this.deletingRecordId === record.id ? 'disabled' : ''}`}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (this.deletingRecordId !== record.id) {\r\n this.handleDeleteRecord(record.id);\r\n }\r\n }}\r\n >\r\n {this.deletingRecordId === record.id ? (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"loading-spinner\">\r\n <path d=\"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16z\" opacity=\"0.25\" />\r\n <path d=\"M12 2C17.523 2 22 6.477 22 12h-2a8 8 0 0 0-8-8V2z\" />\r\n </svg>\r\n ) : (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 7l-.867 12.142A2 2 0 0 1 16.138 21H7.862a2 2 0 0 1-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v3M4 7h16\" />\r\n </svg>\r\n )}\r\n {this.deletingRecordId === record.id ? '删除中...' : '删除'}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </td>\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {/* 分页 */}\r\n {this.totalRecords > this.pageSize && (\r\n <div class=\"pagination\">\r\n <button\r\n class=\"page-btn\"\r\n disabled={this.currentPage === 1}\r\n onClick={() => this.changePage(this.currentPage - 1)}\r\n >\r\n 上一页\r\n </button>\r\n <span class=\"page-info\">\r\n 第 {this.currentPage} 页,共 {Math.ceil(this.totalRecords / this.pageSize)} 页\r\n </span>\r\n <button\r\n class=\"page-btn\"\r\n disabled={this.currentPage >= Math.ceil(this.totalRecords / this.pageSize)}\r\n onClick={() => this.changePage(this.currentPage + 1)}\r\n >\r\n 下一页\r\n </button>\r\n </div>\r\n )}\r\n <div style={{ height: '100px', width: '100%' }}>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getScoreClass(score: number): string {\r\n if (score >= 90) return 'excellent';\r\n if (score >= 80) return 'good';\r\n if (score >= 70) return 'average';\r\n if (score >= 60) return 'below-average';\r\n return 'poor';\r\n }\r\n\r\n /**\r\n * 生成评分标准文本\r\n */\r\n private getEvaluationCriteriaText(): string {\r\n return this.evaluationCriteria\r\n .map(criteria => `${criteria.name}(${criteria.value}%):${criteria.description}`)\r\n .join('\\n\\n');\r\n }\r\n\r\n private getEvaluateStatusText(evaluate_status?: 0 | 1 | -1): string {\r\n const statusMap = {\r\n 0: '筛选中',\r\n 1: '筛选完成',\r\n [-1]: '筛选失败'\r\n };\r\n return statusMap[evaluate_status] || '待分析';\r\n }\r\n\r\n private getEvaluateStatusClass(evaluate_status?: 0 | 1 | -1): string {\r\n const classMap = {\r\n 0: 'analyzing', // 筛选中\r\n 1: 'completed', // 筛选完成\r\n [-1]: 'failed' // 筛选失败\r\n };\r\n return classMap[evaluate_status] || 'pending'; // 默认为待分析\r\n }\r\n\r\n private changePage = async (page: number) => {\r\n this.currentPage = page;\r\n await this.loadResumeList();\r\n };\r\n\r\n private handleSortByScore = () => {\r\n // 切换排序状态:none -> desc -> asc -> none\r\n if (this.sortOrder === 'none') {\r\n this.sortOrder = 'desc';\r\n } else if (this.sortOrder === 'desc') {\r\n this.sortOrder = 'asc';\r\n } else {\r\n this.sortOrder = 'none';\r\n }\r\n\r\n // 重置到第一页并重新加载数据\r\n this.currentPage = 1;\r\n this.loadResumeList();\r\n };\r\n\r\n /**\r\n * 刷新表格数据\r\n */\r\n private handleRefreshTable = async () => {\r\n await this.loadResumeList();\r\n showMessage('刷新成功', 'success');\r\n };\r\n\r\n /**\r\n * 加载简历列表\r\n */\r\n private async loadResumeList() {\r\n if (!this.currentTask) return;\r\n\r\n this.isLoadingResumeList = true;\r\n\r\n // 刷新时清空列表,防止累加\r\n // 1. 清空从API获取的已筛选简历\r\n this.filteredResumeRecords = [];\r\n // 2. 清空已提交到服务器的上传记录(筛选中0、已完成1、失败-1),只保留待分析的本地上传记录(undefined)\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(\r\n record => record.evaluate_status === undefined\r\n );\r\n\r\n try {\r\n const params: any = {\r\n task_id: this.currentTask.id,\r\n page: this.currentPage,\r\n size: this.pageSize\r\n };\r\n\r\n // 添加排序参数\r\n if (this.sortOrder === 'desc') {\r\n params.order_by = 'score_desc';\r\n } else if (this.sortOrder === 'asc') {\r\n params.order_by = 'score_asc';\r\n }\r\n\r\n const response = await sendHttpRequest<ResumePageData>({\r\n url: '/sdk/v1/agent/app_filter_resume/page',\r\n method: 'GET',\r\n data: params\r\n });\r\n\r\n if (response.success && response.data) {\r\n // 转换API数据格式到组件需要的格式\r\n const transformedRecords = response.data.records.map(record => {\r\n // 解析简历数据以获取人才信息\r\n let talentInfo = '等待分析...';\r\n if (record.resume_data) {\r\n try {\r\n const resumeData = JSON.parse(record.resume_data);\r\n const result = resumeData.result;\r\n if (result) {\r\n const tel = result.phone || result.email || '未知';\r\n const degree = result.degree || '未知';\r\n const college = result.college || '未知';\r\n const workYear = result.work_year || '0';\r\n const workPosition = result.work_position || '未知职位';\r\n talentInfo = `${tel} | ${degree} | ${college} | ${workYear}年经验 | ${workPosition}`;\r\n }\r\n } catch (error) {\r\n console.warn('解析简历数据失败:', error);\r\n }\r\n }\r\n\r\n return {\r\n ...record,\r\n id: record.id?.toString() || '',\r\n fileName: record.resume_file_name || '未知文件',\r\n talentInfo: talentInfo,\r\n scoreDetail: record.evaluate || '等待分析...',\r\n uploadTime: record.create_at ? new Date(record.create_at) : new Date(),\r\n file_url: record.resume_file_url\r\n };\r\n });\r\n\r\n this.filteredResumeRecords = transformedRecords;\r\n this.totalRecords = response.data.total || 0;\r\n\r\n }\r\n } catch (error) {\r\n console.error('加载简历列表失败:', error);\r\n } finally {\r\n this.isLoadingResumeList = false;\r\n }\r\n }\r\n\r\n /**\r\n * 使用customInputs中的file_urls开始分析简历\r\n */\r\n private async startAnalysisWithCustomFileUrls() {\r\n if (!this.currentTask) {\r\n showMessage('任务信息不存在', 'error');\r\n return;\r\n }\r\n\r\n const fileUrls = this.customInputs?.file_urls;\r\n if (!fileUrls) {\r\n return;\r\n }\r\n\r\n // 将逗号分隔的文件URLs转换为数组\r\n const originalFileUrls = fileUrls.split(',').map(url => url.trim()).filter(url => url);\r\n\r\n if (originalFileUrls.length === 0) {\r\n showMessage('没有有效的简历文件URL', 'warning');\r\n return;\r\n }\r\n\r\n this.isAnalyzing = true;\r\n this.isLoadingResumeList = true;\r\n\r\n try {\r\n // 处理文件URLs,将http/https链接转换为cos_key\r\n const resumeFileUrls: string[] = [];\r\n for (const url of originalFileUrls) {\r\n // 检查是否是http或https链接\r\n if (url.startsWith('http://') || url.startsWith('https://')) {\r\n try {\r\n // 提取文件名(从URL中获取最后一部分)\r\n const fileName = url.split('/').pop() || 'resume.pdf';\r\n\r\n // 调用上传接口\r\n const uploadResponse = await uploadFileByUrl({\r\n url: url,\r\n file_name: fileName\r\n });\r\n\r\n if (uploadResponse.success && uploadResponse.data?.cos_key) {\r\n resumeFileUrls.push(uploadResponse.data.cos_key);\r\n } else {\r\n console.error(`上传文件失败: ${url}`, uploadResponse.message);\r\n showMessage(`上传文件 ${fileName} 失败: ${uploadResponse.message || '未知错误'}`, 'error');\r\n }\r\n } catch (error) {\r\n console.error(`上传文件出错: ${url}`, error);\r\n showMessage(`上传文件出错: ${error instanceof Error ? error.message : '未知错误'}`, 'error');\r\n }\r\n } else {\r\n // 如果不是http/https链接,直接使用原始URL(假设是cos_key)\r\n resumeFileUrls.push(url);\r\n }\r\n }\r\n\r\n if (resumeFileUrls.length === 0) {\r\n showMessage('没有有效的简历文件可以分析', 'error');\r\n return;\r\n }\r\n\r\n if (resumeFileUrls.length < originalFileUrls.length) {\r\n showMessage(`部分文件上传失败,将继续分析 ${resumeFileUrls.length}/${originalFileUrls.length} 个文件`, 'warning');\r\n }\r\n\r\n // 1. 先调用清理重复简历接口\r\n const clearResponse = await sendHttpRequest<string[]>({\r\n url: '/sdk/v1/agent/app_filter_resume/clear_repeated_resumes',\r\n method: 'POST',\r\n data: {\r\n task_id: this.currentTask.id,\r\n resume_file_urls: resumeFileUrls\r\n }\r\n });\r\n\r\n if (!clearResponse.success) {\r\n throw new Error(clearResponse.message || '简历校验失败');\r\n }\r\n\r\n // 检查返回的数据\r\n const filteredFileUrls = clearResponse.data || [];\r\n console.log('过滤后的简历文件URLs:', filteredFileUrls);\r\n\r\n if (filteredFileUrls.length === 0) {\r\n showMessage('已清除重复上传的简历,没有新的简历需要分析', 'info');\r\n return;\r\n }\r\n\r\n // 2. 构建评分规则字符串\r\n const ruleString = this.evaluationCriteria\r\n .map(criteria => `- ${criteria.name}(占比${criteria.value}%):${criteria.description}`)\r\n .join(' \\n');\r\n\r\n // 触发简历分析开始事件\r\n this.resumeAnalysisStart.emit({\r\n task_id: this.currentTask.id,\r\n resume_count: filteredFileUrls.length,\r\n resume_files: filteredFileUrls.map(url => ({\r\n file_name: url.split('/').pop() || '未知文件',\r\n file_url: url\r\n }))\r\n });\r\n\r\n // 3. 调用简历筛选接口\r\n await sendSSERequest({\r\n url: '/sdk/v1/chat/chat-messages',\r\n method: 'POST',\r\n data: {\r\n bot_id: \"3022316191018874\",\r\n response_mode: 'blocking',\r\n query: '简历筛选',\r\n inputs: {\r\n job_info: this.jobDescription,\r\n jd_id: this.currentTask.jd_id,\r\n task_id: this.currentTask.id,\r\n file_urls: filteredFileUrls.join(','),\r\n rule: ruleString\r\n }\r\n },\r\n onMessage: (data) => {\r\n console.log('分析进度:', data);\r\n\r\n // 触发会话开始事件(仅在首次收到消息且有message_id或conversation_id时触发)\r\n if (data && !this.internalConversationId && (data.message_id || data.conversation_id || data.id)) {\r\n this.internalConversationId = data.conversation_id;\r\n this.conversationStart.emit({\r\n conversation_id: data.conversation_id,\r\n event: data.event || 'message',\r\n message_id: data.message_id,\r\n id: String(this.currentTask.id)\r\n });\r\n }\r\n },\r\n onComplete: async () => {\r\n // 重新加载简历列表\r\n await this.loadResumeList();\r\n\r\n // 触发简历分析完成事件\r\n this.emitAnalysisCompleteEvent();\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n },\r\n onError: (error) => {\r\n console.error('简历分析失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysisWithCustomFileUrls',\r\n component: 'oem-jlsx-modal',\r\n title: '简历分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '简历分析失败,请重试'\r\n });\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n }\r\n });\r\n\r\n } catch (error) {\r\n console.error('开始分析失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysisWithCustomFileUrls',\r\n component: 'oem-jlsx-modal',\r\n title: '开始分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '开始分析失败,请重试'\r\n });\r\n } finally {\r\n this.isAnalyzing = false;\r\n this.isLoadingResumeList = false;\r\n }\r\n }\r\n\r\n /**\r\n * 开始分析简历\r\n */\r\n private startAnalysis = async () => {\r\n if (!this.currentTask) {\r\n showMessage('任务信息不存在', 'error');\r\n return;\r\n }\r\n\r\n // 获取所有待分析的简历(从上传的简历中获取)\r\n const pendingRecords = this.uploadedResumeRecords.filter(record =>\r\n record.evaluate_status !== 1 && record.evaluate_status !== 0 // 筛选状态不是\"筛选完成\"和\"筛选中\"的记录\r\n );\r\n\r\n if (pendingRecords.length === 0) {\r\n showMessage('没有需要分析的简历', 'warning');\r\n return;\r\n }\r\n\r\n this.isAnalyzing = true;\r\n\r\n try {\r\n // 将待分析的记录状态设置为分析中\r\n pendingRecords.forEach(record => {\r\n record.evaluate_status = 0; // 设置为筛选中\r\n });\r\n // 触发界面更新\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords];\r\n\r\n // 收集所有待分析的简历文件URL\r\n const resumeFileUrls = pendingRecords\r\n .map(record => record.file_url || record.fileInfo?.cos_key)\r\n .filter(url => url); // 过滤掉空值\r\n\r\n if (resumeFileUrls.length === 0) {\r\n showMessage('简历文件URL获取失败', 'error');\r\n return;\r\n }\r\n\r\n // 1. 先调用清理重复简历接口\r\n const clearResponse = await sendHttpRequest<string[]>({\r\n url: '/sdk/v1/agent/app_filter_resume/clear_repeated_resumes',\r\n method: 'POST',\r\n data: {\r\n task_id: this.currentTask.id,\r\n resume_file_urls: resumeFileUrls\r\n }\r\n });\r\n\r\n if (!clearResponse.success) {\r\n throw new Error(clearResponse.message || '简历校验失败');\r\n }\r\n\r\n // 检查返回的数据\r\n const filteredFileUrls = clearResponse.data || [];\r\n console.log('过滤后的简历文件URLs:', filteredFileUrls);\r\n\r\n // 根据API返回的结果标记被过滤的简历\r\n if (filteredFileUrls.length === 0) {\r\n // 如果返回空数组,说明所有简历都是重复的\r\n showMessage('已清除重复上传的简历,没有新的简历需要分析', 'info');\r\n // 将所有待分析的简历从上传列表中移除(因为它们是重复的)\r\n this.uploadedResumeRecords = []\r\n return;\r\n } else {\r\n // 如果部分重复,直接用过滤后的文件URLs重新构建上传记录列表\r\n // 同时保留那些正在筛选中的简历\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => {\r\n const fileUrl = record.file_url || record.fileInfo?.cos_key;\r\n // 保留过滤后的有效文件URLs 或者 正在筛选中的简历\r\n return filteredFileUrls.includes(fileUrl) || record.evaluate_status === 0;\r\n });\r\n }\r\n\r\n // 2. 构建评分规则字符串\r\n const ruleString = this.evaluationCriteria\r\n .map(criteria => `- ${criteria.name}(占比${criteria.value}%):${criteria.description}`)\r\n .join(' \\n');\r\n\r\n // 触发简历分析开始事件\r\n this.resumeAnalysisStart.emit({\r\n task_id: this.currentTask.id,\r\n resume_count: filteredFileUrls.length,\r\n resume_files: pendingRecords.map(record => ({\r\n file_name: record.fileName,\r\n file_url: record.file_url || record.fileInfo?.cos_key || ''\r\n })).filter(file => filteredFileUrls.includes(file.file_url))\r\n });\r\n\r\n // 清除pcm-upload组件中的文件显示\r\n if (this.pcmUploadRef?.clearSelectedFiles) {\r\n this.pcmUploadRef.clearSelectedFiles();\r\n }\r\n\r\n // 3. 调用简历筛选接口,使用过滤后的文件URL列表\r\n await sendSSERequest({\r\n url: '/sdk/v1/chat/chat-messages',\r\n method: 'POST',\r\n data: {\r\n bot_id: \"3022316191018874\",\r\n response_mode: 'blocking',\r\n query: '简历筛选',\r\n inputs: {\r\n job_info: this.jobDescription,\r\n jd_id: this.currentTask.jd_id,\r\n task_id: this.currentTask.id,\r\n file_urls: filteredFileUrls.join(','), // 使用过滤后的文件URL\r\n rule: ruleString\r\n }\r\n },\r\n onMessage: (data) => {\r\n // 处理流式响应数据\r\n console.log('分析进度:', data);\r\n\r\n // 触发会话开始事件(仅在首次收到消息且有message_id或conversation_id时触发)\r\n if (data && !this.internalConversationId && (data.message_id || data.conversation_id || data.id)) {\r\n this.internalConversationId = data.conversation_id;\r\n this.conversationStart.emit({\r\n conversation_id: data.conversation_id,\r\n event: data.event || 'message',\r\n message_id: data.message_id,\r\n id: String(this.currentTask.id)\r\n });\r\n }\r\n },\r\n onComplete: async () => {\r\n // 分析完成,将已完成的简历从上传列表移到已筛选列表\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => record.evaluate_status !== 0);\r\n\r\n // 重新加载简历列表(从API获取筛选后的结果)\r\n await this.loadResumeList();\r\n\r\n // 触发简历分析完成事件\r\n this.emitAnalysisCompleteEvent();\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n },\r\n onError: (error) => {\r\n console.error('简历分析失败:', error);\r\n // 将分析失败的记录状态设置为failed\r\n pendingRecords.forEach(record => {\r\n record.evaluate_status = -1; // 设置为筛选失败\r\n });\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords];\r\n\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysis',\r\n component: 'oem-jlsx-modal',\r\n title: '开始分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '开始分析失败,请重试'\r\n });\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n }\r\n });\r\n\r\n } catch (error) {\r\n console.error('开始分析失败:', error);\r\n // 将分析失败的记录状态设置为failed\r\n pendingRecords.forEach(record => {\r\n record.evaluate_status = -1; // 设置为筛选失败\r\n });\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords];\r\n\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysis',\r\n component: 'oem-jlsx-modal',\r\n title: '开始分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '开始分析失败,请重试'\r\n });\r\n } finally {\r\n this.isAnalyzing = false;\r\n }\r\n };\r\n\r\n\r\n // 添加导出记录模态框处理函数\r\n private handleExportRecordsClick = () => {\r\n this.isExportRecordsModalOpen = true;\r\n };\r\n\r\n private handleExportRecordsModalClose = () => {\r\n this.isExportRecordsModalOpen = false;\r\n };\r\n\r\n // 职位选择器相关方法\r\n private handleOpenPositionSelector = () => {\r\n if (!this.oemId) {\r\n Message.info('未配置OEM ID,无法选择职位');\r\n return;\r\n }\r\n this.showPositionSelector = true;\r\n };\r\n\r\n private handleClosePositionSelector = () => {\r\n this.showPositionSelector = false;\r\n };\r\n\r\n private handlePositionSelected = (event: CustomEvent<Position & { formatted_text?: string }>) => {\r\n const position = event.detail;\r\n // 直接使用职位选择器组件提供的格式化文本\r\n this.jobDescription = position.formatted_text || '';\r\n this.showPositionSelector = false;\r\n Message.success('职位信息已填充');\r\n };\r\n\r\n private handleDocumentClick = (event: Event) => {\r\n // 处理点击外部关闭下拉菜单的逻辑\r\n const target = event.target as HTMLElement;\r\n const dropdown = target.closest('.action-dropdown');\r\n\r\n // 如果点击的不是下拉菜单区域,则关闭所有下拉菜单\r\n if (!dropdown && this.activeDropdownId) {\r\n this.activeDropdownId = null;\r\n }\r\n };\r\n\r\n private emitAnalysisCompleteEvent = () => {\r\n if (!this.currentTask) return;\r\n\r\n // 计算分析统计数据\r\n const allResumes = this.resumeRecords;\r\n const analyzedResumes = allResumes.filter(record =>\r\n record.evaluate_status === 1 && typeof record.score === 'number'\r\n );\r\n const failedResumes = allResumes.filter(record => record.evaluate_status === -1);\r\n\r\n // 计算评分统计\r\n const scores = analyzedResumes.map(record => record.score).filter(score => typeof score === 'number') as number[];\r\n const averageScore = scores.length > 0 ? scores.reduce((sum, score) => sum + score, 0) / scores.length : 0;\r\n const highestScore = scores.length > 0 ? Math.max(...scores) : 0;\r\n\r\n\r\n // 触发简历分析完成事件\r\n this.resumeAnalysisComplete.emit({\r\n task_id: this.currentTask.id,\r\n total_resumes: allResumes.length,\r\n analyzed_resumes: analyzedResumes.length,\r\n failed_resumes: failedResumes.length,\r\n average_score: Math.round(averageScore * 100) / 100, // 保留两位小数\r\n highest_score: highestScore,\r\n });\r\n\r\n };\r\n\r\n /**\r\n * 处理pcm-upload组件的上传变化事件\r\n */\r\n private handleUploadChange = (e: CustomEvent<FileUploadResponse[]>) => {\r\n if (!this.currentTask) {\r\n showMessage('请先创建任务', 'warning');\r\n return;\r\n }\r\n\r\n const currentUploadResults: FileUploadResponse[] = e.detail || [];\r\n\r\n // 获取已存在的文件URL列表,用于比较\r\n const existingFileUrls = this.uploadedResumeRecords.map(record =>\r\n record.file_url || record.fileInfo?.cos_key\r\n ).filter(url => url);\r\n\r\n // 找出新增的文件(在当前结果中但不在已存在列表中的文件)\r\n const newUploadResults = currentUploadResults.filter(result =>\r\n !existingFileUrls.includes(result.cos_key)\r\n );\r\n\r\n // 找出被删除的文件(在已存在列表中但不在当前结果中的文件)\r\n const currentFileUrls = currentUploadResults.map(result => result.cos_key);\r\n const removedFileUrls = existingFileUrls.filter(url =>\r\n !currentFileUrls.includes(url)\r\n );\r\n\r\n // 处理新增的文件\r\n if (newUploadResults.length > 0) {\r\n // 为每个新上传的文件创建简历记录\r\n const newRecords = newUploadResults.map(result => {\r\n const record: ResumeRecord = {\r\n id: Date.now() + Math.random().toString(),\r\n fileName: result.file_name || '未知文件',\r\n talentInfo: '等待分析...',\r\n score: undefined,\r\n scoreDetail: '等待分析...',\r\n uploadTime: new Date(),\r\n fileInfo: result,\r\n task_id: this.currentTask!.id,\r\n file_url: result.cos_key,\r\n evaluate_status: undefined // 新上传的简历默认为未开始状态\r\n };\r\n return record;\r\n });\r\n\r\n // 添加到上传记录列表\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords, ...newRecords];\r\n\r\n // 触发上传成功事件\r\n newRecords.forEach(record => {\r\n this.uploadSuccess.emit(record.fileInfo);\r\n });\r\n\r\n showMessage(`成功上传 ${newRecords.length} 个简历文件!`, 'success');\r\n }\r\n\r\n // 处理被删除的文件\r\n if (removedFileUrls.length > 0) {\r\n // 从上传记录列表中移除被删除的文件\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => {\r\n const fileUrl = record.file_url || record.fileInfo?.cos_key;\r\n return !removedFileUrls.includes(fileUrl);\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * 开始分析简历,检查是否有文件正在上传\r\n */\r\n private handleStartAnalysis = async () => {\r\n // 判断文件是否正在上传\r\n if (await this.pcmUploadRef?.getIsUploading?.()) {\r\n showMessage('文件上传中,请稍后', 'info');\r\n return;\r\n }\r\n\r\n await this.startAnalysis();\r\n };\r\n\r\n render() {\r\n if (!this.isOpen) return null;\r\n\r\n const modalStyle = {\r\n zIndex: String(this.zIndex)\r\n };\r\n\r\n const containerClass = {\r\n 'modal-container': true,\r\n 'fullscreen': this.fullscreen,\r\n 'pc-layout': this.currentStep === 'input',\r\n 'task-layout': this.currentStep === 'task',\r\n };\r\n\r\n const overlayClass = {\r\n 'modal-overlay': true,\r\n 'fullscreen-overlay': this.fullscreen\r\n };\r\n\r\n return (\r\n <div class={overlayClass} style={modalStyle}>\r\n <div class={containerClass}>\r\n {this.isShowHeader && (\r\n <div class=\"modal-header\">\r\n <div class=\"header-left\">\r\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\r\n <div>{this.modalTitle}</div>\r\n </div>\r\n {this.isNeedClose && (\r\n <button class=\"close-button\" onClick={this.handleClose}>\r\n <span>×</span>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {this.currentStep === 'input' ? this.renderInputStep() : this.renderTaskStep()}\r\n </div>\r\n\r\n {/* 职位描述抽屉 */}\r\n <pcm-drawer\r\n isOpen={this.showJdDrawer}\r\n drawerTitle=\"职位描述\"\r\n width=\"500px\"\r\n onClosed={this.closeJdDrawer}\r\n >\r\n <div class=\"drawer-content\">\r\n <div class=\"drawer-text-content\">\r\n {this.jobDescription}\r\n </div>\r\n </div>\r\n </pcm-drawer>\r\n\r\n {/* 评分标准抽屉 */}\r\n <pcm-drawer\r\n isOpen={this.showCriteriaDrawer}\r\n drawerTitle=\"评分标准\"\r\n width=\"500px\"\r\n onClosed={this.closeCriteriaDrawer}\r\n >\r\n <div class=\"drawer-content\">\r\n <div class=\"drawer-text-content\">\r\n {this.getEvaluationCriteriaText()}\r\n </div>\r\n </div>\r\n </pcm-drawer>\r\n\r\n {/* 预览抽屉 */}\r\n <pcm-drawer\r\n isOpen={this.showPreviewDrawer}\r\n drawerTitle={this.previewTitle}\r\n width=\"600px\"\r\n onClosed={this.closePreviewDrawer}\r\n >\r\n <div class=\"drawer-content\">\r\n {this.previewType === 'markdown' ? (\r\n <div\r\n class=\"markdown-content markdown-body\"\r\n innerHTML={marked(this.previewContent)}\r\n ></div>\r\n ) : (\r\n <div class=\"file-preview\">\r\n <iframe\r\n src={this.previewUrl}\r\n frameborder=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n style={{ border: 'none', height: 'calc(100vh - 120px)' }}\r\n ></iframe>\r\n </div>\r\n )}\r\n </div>\r\n </pcm-drawer>\r\n\r\n {/* 导出记录模态框 */}\r\n <pcm-export-records-modal\r\n open={this.isExportRecordsModalOpen}\r\n botId={this.botId}\r\n sourceId={this.currentTask?.id?.toString()}\r\n onCancel={this.handleExportRecordsModalClose}\r\n />\r\n\r\n {/* 职位选择器弹窗 */}\r\n {this.showPositionSelector && (\r\n <div class=\"position-selector-modal-overlay\">\r\n <div class=\"position-selector-modal\">\r\n <div class=\"position-selector-modal-header\">\r\n <h3>选择职位</h3>\r\n <button class=\"position-selector-close-btn\" onClick={this.handleClosePositionSelector}>\r\n ×\r\n </button>\r\n </div>\r\n <div class=\"position-selector-modal-body\">\r\n <components-position-selector\r\n oemId={this.oemId}\r\n multiple={false}\r\n onPositionSelected={this.handlePositionSelected}\r\n ></components-position-selector>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"oem-jlsx-modal.js","sourceRoot":"","sources":["../../../../src/components/oem-jlsx-modal/oem-jlsx-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { FileUploadResponse, verifyApiKey, sendHttpRequest, sendSSERequest, getCosPreviewUrl,PCM_DOMAIN, Position, uploadFileByUrl } from '../../utils/utils';\r\nimport { showMessage } from '../../utils/message-utils';\r\nimport { Message } from '../../services/message.service';\r\nimport {\r\n TaskCreatedEventData,\r\n ResumeAnalysisStartEventData,\r\n ResumeAnalysisCompleteEventData,\r\n TaskSwitchEventData,\r\n ResumeDeletedEventData,\r\n ConversationStartEventData,\r\n} from '../../interfaces/events';\r\nimport { ErrorEventBus,ErrorEventDetail } from '../../utils/error-event';\r\nimport { authStore } from '../../../store/auth.store';\r\nimport { configStore } from '../../../store/config.store';\r\nimport { SentryReporter } from '../../utils/sentry-reporter';\r\nimport { marked } from 'marked';\r\nimport extendedTables from 'marked-extended-tables';\r\n\r\n/**\r\n * 简历筛选\r\n */\r\n\r\n// 定义评分标准接口\r\ninterface EvaluationCriteria {\r\n name: string;\r\n value: number;\r\n description: string;\r\n}\r\n\r\n// 定义任务接口\r\ninterface FilterTask {\r\n id: number;\r\n jd_id: number;\r\n user_id: number;\r\n extra: string; // JSON字符串格式的评分标准\r\n create_at: string;\r\n update_at: string;\r\n}\r\n\r\n// 定义简历记录接口\r\ninterface ResumeRecord {\r\n id: string;\r\n fileName: string;\r\n talentInfo: string;\r\n score: number;\r\n scoreDetail: string;\r\n uploadTime: Date;\r\n fileInfo?: FileUploadResponse;\r\n task_id?: number;\r\n file_url?: string;\r\n analysis_result?: string;\r\n // 添加API返回的原始字段\r\n user_id?: number;\r\n jd_id?: number;\r\n job_info?: string;\r\n resume_file_url?: string;\r\n resume_file_name?: string;\r\n resume_data?: string;\r\n evaluate?: string;\r\n evaluate_status?: 0 | 1 | -1; // 筛选状态:0-筛选中,1-筛选完成,-1-筛选失败\r\n resume_raw?: any;\r\n create_at?: string;\r\n app_code?: any;\r\n app_task_id?: any;\r\n initial_filter_passed?: any;\r\n ai_interview_cid?: any;\r\n ai_interview_report_status?: any;\r\n ai_interview_report?: any;\r\n ai_interview_report_readed?: any;\r\n ai_interview_has_notice?: any;\r\n ai_interview_notice_type?: any;\r\n ai_interview_has_submit?: number;\r\n error_info?: any;\r\n}\r\n\r\n// 定义简历分页数据接口\r\ninterface ResumePageData {\r\n total: number;\r\n page: number;\r\n size: number;\r\n pages: number;\r\n records: ResumeRecord[];\r\n}\r\n\r\n@Component({\r\n tag: 'oem-jlsx-modal',\r\n styleUrls: ['../../global/global.css', 'oem-jlsx-modal.css', '../../global/markdown.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class OemJlsxModal {\r\n /**\r\n * 模态框标题\r\n */\r\n @Prop() modalTitle: string = '简历筛选精灵';\r\n\r\n /**\r\n * SDK鉴权密钥\r\n */\r\n @Prop({ attribute: 'token' }) token!: string;\r\n\r\n /**\r\n * 是否显示聊天模态框\r\n */\r\n @Prop({ mutable: true }) isOpen: boolean = false;\r\n\r\n /**\r\n * 当点击模态框关闭时触发\r\n */\r\n @Event() modalClosed: EventEmitter<void>;\r\n\r\n /**\r\n * 应用图标URL\r\n */\r\n @Prop() icon?: string;\r\n\r\n /**\r\n * 聊天框的页面层级\r\n */\r\n @Prop() zIndex?: number = 1000;\r\n\r\n /**\r\n * 是否展示顶部标题栏\r\n */\r\n @Prop() isShowHeader: boolean = true;\r\n\r\n /**\r\n * 是否展示右上角的关闭按钮\r\n */\r\n @Prop() isNeedClose: boolean = true;\r\n\r\n /**\r\n * 是否以全屏模式打开,移动端建议设置为true\r\n */\r\n @Prop() fullscreen: boolean = false;\r\n\r\n /**\r\n * 自定义输入参数<br>\r\n * - job_info: 填充JD输入区域<br>\r\n * - file_urls: 简历文件URLs,多个用逗号分隔,传入后创建任务时会直接进入简历列表并开始筛选\r\n */\r\n @Prop() customInputs: Record<string, string> = {};\r\n\r\n\r\n /**\r\n * 是否显示\"批量导出报告\"功能\r\n */\r\n @Prop() showBatchExport: boolean = false;\r\n\r\n /**\r\n * OEM ID,用于获取职位列表\r\n */\r\n @Prop() oemId?: string;\r\n\r\n /**\r\n * 上传成功事件\r\n */\r\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\r\n\r\n /**\r\n * SDK密钥验证失败事件\r\n */\r\n @Event() tokenInvalid: EventEmitter<void>;\r\n\r\n /**\r\n * 错误事件\r\n */\r\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\r\n\r\n /**\r\n * 任务创建完成事件\r\n */\r\n @Event() taskCreated: EventEmitter<TaskCreatedEventData>;\r\n\r\n /**\r\n * 简历分析开始事件\r\n */\r\n @Event() resumeAnalysisStart: EventEmitter<ResumeAnalysisStartEventData>;\r\n\r\n /**\r\n * 简历分析完成事件\r\n */\r\n @Event() resumeAnalysisComplete: EventEmitter<ResumeAnalysisCompleteEventData>;\r\n\r\n /**\r\n * 任务切换事件\r\n */\r\n @Event() taskSwitch: EventEmitter<TaskSwitchEventData>;\r\n\r\n /**\r\n * 简历删除事件\r\n */\r\n @Event() resumeDeleted: EventEmitter<ResumeDeletedEventData>;\r\n\r\n /**\r\n * 会话开始事件\r\n */\r\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\r\n\r\n\r\n // State 管理\r\n @State() currentStep: 'input' | 'task' = 'input'; // 当前步骤\r\n @State() jobDescription: string = '';\r\n @State() jobTitle: string = '';\r\n @State() evaluationCriteria: EvaluationCriteria[] = [\r\n { name: '基础信息', value: 10, description: '评估简历中姓名、联系方式、性别、年龄等基础信息是否完整且准确。完整准确的基础信息有助于招聘方快速识别和联系求职者,是简历的基本要素。若基础信息缺失或有误,可能影响后续沟通与评估流程。' },\r\n { name: '教育背景', value: 20, description: '主要考察毕业院校、专业、入学及毕业时间、学历层次等内容。毕业院校的知名度与专业的匹配度,一定程度上反映求职者在知识储备基础和专业素养。学历层次及相关课程成绩,能辅助判断求职者在专业领域的学习深度与能力水平。' },\r\n { name: '职业履历', value: 30, description: '重点评估过往工作经历的连贯性、职位晋升轨迹、工作内容与目标岗位的相关性。丰富且相关的职业履历,展现出求职者在实际工作场景中的实践经验与解决问题能力,连贯的工作经历能体现其稳定性与忠诚度。' },\r\n { name: '专业技能', value: 20, description: '评估求职者所掌握的专业技能,包括软件操作能力、语言能力、专业资质证书等。这些技能直接反映求职者在特定领域的专业程度,是能否胜任目标岗位的关键因素之一,与目标岗位匹配的专业技能越多、水平越高,竞争力越强。' },\r\n { name: '项目成果', value: 15, description: '考量求职者参与项目的数量、在项目中承担的角色及取得的成果。通过项目成果可了解其在团队协作、项目管理、创新思维等方面的能力,突出的项目成果能直观展示求职者在实际工作中的价值创造能力。' },\r\n { name: '求职动机', value: 5, description: '判断求职者对目标岗位的兴趣和热情,以及其职业规划与公司及岗位的契合度。清晰合理的求职动机表明求职者对自身职业发展有明确认知,且对目标岗位做了充分了解,入职后更有可能长期稳定发展并积极投入工作。' }\r\n ];\r\n @State() isSubmitting: boolean = false;\r\n @State() isUploading: boolean = false;\r\n\r\n // 分别存储上传后未筛选的简历和已筛选的简历\r\n @State() uploadedResumeRecords: ResumeRecord[] = []; // 上传后未筛选的简历\r\n @State() filteredResumeRecords: ResumeRecord[] = []; // 已经筛选的简历(从API加载)\r\n\r\n @State() selectedFiles: File[] = [];\r\n @State() showJdDrawer: boolean = false;\r\n @State() showCriteriaDrawer: boolean = false;\r\n @State() currentTask: FilterTask | null = null;\r\n @State() currentPage: number = 1;\r\n @State() pageSize: number = 10;\r\n @State() totalRecords: number = 0;\r\n @State() isAnalyzing: boolean = false;\r\n @State() showPreviewDrawer: boolean = false;\r\n @State() previewContent: string = '';\r\n @State() previewTitle: string = '';\r\n @State() previewType: 'markdown' | 'file' = 'markdown';\r\n @State() previewUrl: string = '';\r\n @State() activeDropdownId: string | null = null;\r\n @State() deletingRecordId: string | null = null; // 正在删除的记录ID\r\n @State() sortOrder: 'none' | 'asc' | 'desc' = 'none'; // 评估分数排序状态\r\n\r\n\r\n // 添加简历列表加载状态\r\n @State() isLoadingResumeList: boolean = false;\r\n\r\n // 添加导出记录模态框状态\r\n @State() isExportRecordsModalOpen: boolean = false;\r\n\r\n // 职位选择器相关状态\r\n @State() showPositionSelector: boolean = false;\r\n\r\n // 使用 @Element 装饰器获取组件的 host 元素\r\n @Element() hostElement: HTMLElement;\r\n\r\n private tokenInvalidListener: () => void;\r\n private removeErrorListener: () => void;\r\n private botId = '3022316191018874';\r\n\r\n // 添加pcm-upload组件的引用\r\n private pcmUploadRef;\r\n\r\n // 内部会话ID,用于跟踪是否已触发conversationStart事件\r\n private internalConversationId: string | null = null;\r\n\r\n // 计算属性:获取所有简历记录(用于显示)\r\n private get resumeRecords(): ResumeRecord[] {\r\n return [...this.uploadedResumeRecords, ...this.filteredResumeRecords];\r\n }\r\n\r\n constructor() {\r\n // 配置 marked 选项\r\n marked.use(extendedTables);\r\n marked.setOptions({\r\n breaks: true,\r\n gfm: true\r\n });\r\n\r\n // 添加全局点击事件监听,用于关闭下拉菜单\r\n document.addEventListener('click', this.handleDocumentClick);\r\n }\r\n\r\n @Watch('token')\r\n handleTokenChange(newToken: string) {\r\n // 当传入的 token 变化时,更新 authStore 中的 token\r\n if (newToken && newToken !== authStore.getToken()) {\r\n authStore.setToken(newToken);\r\n }\r\n }\r\n\r\n @Watch('isOpen')\r\n async handleIsOpenChange(newValue: boolean) {\r\n if (!newValue) {\r\n // 重置状态\r\n this.resetStates();\r\n } else {\r\n await verifyApiKey(this.token);\r\n }\r\n }\r\n\r\n componentWillLoad() {\r\n // 将 zIndex 存入配置缓存\r\n if (this.zIndex) {\r\n configStore.setItem('modal-zIndex', this.zIndex);\r\n }\r\n if (this.token) {\r\n authStore.setToken(this.token);\r\n }\r\n\r\n // 添加全局token无效事件监听器\r\n this.tokenInvalidListener = () => {\r\n this.tokenInvalid.emit();\r\n };\r\n // 添加全局错误监听\r\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\r\n this.someErrorEvent.emit(errorDetail);\r\n });\r\n\r\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\r\n }\r\n\r\n disconnectedCallback() {\r\n // 组件销毁时移除事件监听器\r\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\r\n\r\n // 移除错误监听器\r\n if (this.removeErrorListener) {\r\n this.removeErrorListener();\r\n }\r\n\r\n // 移除全局点击事件监听器\r\n document.removeEventListener('click', this.handleDocumentClick);\r\n }\r\n\r\n private resetStates = () => {\r\n this.currentStep = 'input';\r\n this.jobDescription = '';\r\n this.evaluationCriteria = [\r\n { name: '基础信息', value: 10, description: '评估简历中姓名、联系方式、性别、年龄等基础信息是否完整且准确。完整准确的基础信息有助于招聘方快速识别和联系求职者,是简历的基本要素。若基础信息缺失或有误,可能影响后续沟通与评估流程。' },\r\n { name: '教育背景', value: 20, description: '主要考察毕业院校、专业、入学及毕业时间、学历层次等内容。毕业院校的知名度与专业的匹配度,一定程度上反映求职者在知识储备基础和专业素养。学历层次及相关课程成绩,能辅助判断求职者在专业领域的学习深度与能力水平。' },\r\n { name: '职业履历', value: 30, description: '重点评估过往工作经历的连贯性、职位晋升轨迹、工作内容与目标岗位的相关性。丰富且相关的职业履历,展现出求职者在实际工作场景中的实践经验与解决问题能力,连贯的工作经历能体现其稳定性与忠诚度。' },\r\n { name: '专业技能', value: 20, description: '评估求职者所掌握的专业技能,包括软件操作能力、语言能力、专业资质证书等。这些技能直接反映求职者在特定领域的专业程度,是能否胜任目标岗位的关键因素之一,与目标岗位匹配的专业技能越多、水平越高,竞争力越强。' },\r\n { name: '项目成果', value: 15, description: '考量求职者参与项目的数量、在项目中承担的角色及取得的成果。通过项目成果可了解其在团队协作、项目管理、创新思维等方面的能力,突出的项目成果能直观展示求职者在实际工作中的价值创造能力。' },\r\n { name: '求职动机', value: 5, description: '判断求职者对目标岗位的兴趣和热情,以及其职业规划与公司及岗位的契合度。清晰合理的求职动机表明求职者对自身职业发展有明确认知,且对目标岗位做了充分了解,入职后更有可能长期稳定发展并积极投入工作。' }\r\n ];\r\n this.isSubmitting = false;\r\n this.isUploading = false;\r\n this.uploadedResumeRecords = [];\r\n this.filteredResumeRecords = [];\r\n this.selectedFiles = [];\r\n this.showJdDrawer = false;\r\n this.showCriteriaDrawer = false;\r\n this.currentTask = null;\r\n this.currentPage = 1;\r\n this.pageSize = 10;\r\n this.totalRecords = 0;\r\n this.isAnalyzing = false;\r\n this.showPreviewDrawer = false;\r\n this.previewContent = '';\r\n this.previewTitle = '';\r\n this.previewType = 'markdown';\r\n this.previewUrl = '';\r\n this.activeDropdownId = null;\r\n this.deletingRecordId = null;\r\n this.sortOrder = 'none';\r\n this.isLoadingResumeList = false;\r\n this.isExportRecordsModalOpen = false;\r\n this.internalConversationId = null;\r\n };\r\n\r\n private handleClose = () => {\r\n this.modalClosed.emit();\r\n };\r\n\r\n private handleJobDescriptionChange = (event: Event) => {\r\n const textarea = event.target as HTMLTextAreaElement;\r\n this.jobDescription = textarea.value;\r\n };\r\n\r\n private handleCreateTask = async () => {\r\n const jobInfo = this.customInputs?.job_info || this.jobDescription.trim();\r\n\r\n if (!jobInfo) {\r\n showMessage('请输入职位描述', 'warning');\r\n return;\r\n }\r\n\r\n if (this.evaluationCriteria.length === 0) {\r\n showMessage('请输入评分标准', 'warning');\r\n return;\r\n }\r\n\r\n this.isSubmitting = true;\r\n\r\n try {\r\n // 调用创建任务的API\r\n const response = await sendHttpRequest<FilterTask>({\r\n url: '/sdk/v1/agent/app_filter_task/create',\r\n method: 'POST',\r\n data: {\r\n job_info: jobInfo,\r\n extra: JSON.stringify(this.evaluationCriteria)\r\n }\r\n });\r\n\r\n if (response.success && response.data) {\r\n this.currentTask = response.data;\r\n // 保存 jobInfo 到 jobDescription,确保在任务界面能正常显示\r\n this.jobDescription = jobInfo;\r\n // 切换到任务界面\r\n this.currentStep = 'task';\r\n\r\n // 触发任务创建完成事件\r\n this.taskCreated.emit({\r\n task_id: response.data.id,\r\n job_description: jobInfo,\r\n evaluation_criteria: this.evaluationCriteria,\r\n create_time: new Date().toISOString()\r\n });\r\n\r\n // 检查是否传入了file_urls,如果有则直接开始筛选\r\n if (this.customInputs?.file_urls) {\r\n await this.startAnalysisWithCustomFileUrls();\r\n }\r\n } else {\r\n throw new Error(response.message || '创建任务失败');\r\n }\r\n } catch (error) {\r\n console.error('创建任务时出错:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'handleCreateTask',\r\n component: 'oem-jlsx-modal',\r\n title: '创建任务时出错'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '创建任务时出错,请重试'\r\n });\r\n } finally {\r\n this.isSubmitting = false;\r\n }\r\n };\r\n\r\n\r\n private toggleJdDetail = () => {\r\n this.showJdDrawer = true;\r\n };\r\n\r\n private toggleCriteriaDetail = () => {\r\n this.showCriteriaDrawer = true;\r\n };\r\n\r\n private closeJdDrawer = () => {\r\n this.showJdDrawer = false;\r\n };\r\n\r\n private closeCriteriaDrawer = () => {\r\n this.showCriteriaDrawer = false;\r\n };\r\n\r\n private showPreview = (title: string, content?: string, type: 'markdown' | 'file' = 'markdown', url?: string) => {\r\n this.previewTitle = title;\r\n this.previewContent = content || '';\r\n this.previewType = type;\r\n this.previewUrl = url || '';\r\n this.showPreviewDrawer = true;\r\n this.activeDropdownId = null; // 关闭下拉菜单\r\n };\r\n\r\n private closePreviewDrawer = () => {\r\n this.showPreviewDrawer = false;\r\n this.previewContent = '';\r\n this.previewTitle = '';\r\n this.previewType = 'markdown';\r\n this.previewUrl = '';\r\n };\r\n\r\n private toggleDropdown = (recordId: string) => {\r\n const newActiveId = this.activeDropdownId === recordId ? null : recordId;\r\n this.activeDropdownId = newActiveId;\r\n };\r\n\r\n private handleViewEvaluate = (record: ResumeRecord) => {\r\n // this.showPreview(\r\n // `${record.fileName} - 评估详情`,\r\n // record.scoreDetail || '暂无评估详情',\r\n // 'markdown'\r\n // );\r\n const url = `${PCM_DOMAIN}/exportFile?id=${record.id}&title=${this.jobTitle || ''}&token=${authStore.getToken()}&referrer=sdk`;\r\n this.showPreview(\r\n `${record.fileName} - 评估详情`,\r\n '',\r\n 'file',\r\n url,\r\n )\r\n };\r\n\r\n @State() exportAllPdfLoading = false;\r\n private exportAllPDF = async () => {\r\n this.exportAllPdfLoading = true;\r\n const response = await sendHttpRequest({\r\n url: `/sdk/v1/agent/app_filter_task/export_all`,\r\n method: \"GET\",\r\n params: {\r\n task_id: this.currentTask?.id,\r\n }\r\n });\r\n this.exportAllPdfLoading = false;\r\n if (response.success) {\r\n showMessage('导出任务已创建!', 'success');\r\n this.handleExportRecordsClick();\r\n }\r\n }\r\n\r\n private handleViewResume = async (record: ResumeRecord) => {\r\n if (record.file_url || record.resume_file_url) {\r\n const fileUrl = record.file_url || record.resume_file_url;\r\n try {\r\n const previewUrl = await getCosPreviewUrl(fileUrl);\r\n if (previewUrl) {\r\n this.showPreview(\r\n `${record.fileName} - 简历详情`,\r\n '',\r\n 'file',\r\n previewUrl\r\n );\r\n } else {\r\n showMessage('无法获取简历预览,请稍后重试', 'error');\r\n }\r\n } catch (error) {\r\n console.error('获取简历预览失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'handleViewResume',\r\n component: 'oem-jlsx-modal',\r\n title: '获取简历预览失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '获取简历预览失败,请稍后重试'\r\n });\r\n }\r\n } else {\r\n showMessage('简历文件不存在', 'error');\r\n }\r\n };\r\n\r\n private handleDeleteRecord = async (recordId: string) => {\r\n this.activeDropdownId = null; // 关闭下拉菜单\r\n\r\n // 检查记录是否在filteredResumeRecords中(来自API)\r\n const filteredRecord = this.filteredResumeRecords.find(record => record.id === recordId);\r\n\r\n if (filteredRecord) {\r\n // 如果是API加载的记录,调用删除接口\r\n this.deletingRecordId = recordId;\r\n\r\n try {\r\n const response = await sendHttpRequest({\r\n url: `/sdk/v1/agent/app_filter_resume/delete/${recordId}`,\r\n method: 'DELETE'\r\n });\r\n\r\n if (response.success) {\r\n // 删除成功,从列表中移除\r\n this.filteredResumeRecords = this.filteredResumeRecords.filter(record => record.id !== recordId);\r\n showMessage('删除成功', 'success');\r\n\r\n // 触发简历删除事件\r\n this.resumeDeleted.emit({\r\n task_id: this.currentTask!.id,\r\n resume_id: recordId,\r\n resume_name: filteredRecord.fileName,\r\n delete_time: new Date().toISOString()\r\n });\r\n\r\n // 重新加载列表以更新总数\r\n await this.loadResumeList();\r\n } else {\r\n throw new Error(response.message || '删除失败');\r\n }\r\n } catch (error) {\r\n console.error('删除记录失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'handleDeleteRecord',\r\n component: 'oem-jlsx-modal',\r\n title: '删除记录失败',\r\n recordId: recordId\r\n });\r\n showMessage('删除失败,请重试', 'error');\r\n } finally {\r\n this.deletingRecordId = null;\r\n }\r\n } else {\r\n // 如果是本地上传的记录,直接从列表中移除\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => record.id !== recordId);\r\n showMessage('删除成功', 'success');\r\n }\r\n };\r\n\r\n private handleEvaluationCriteriaNameChange = (index: number, value: string) => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n newCriteria[index].name = value;\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private handleEvaluationCriteriaValueChange = (index: number, value: string) => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n const numValue = parseInt(value) || 0;\r\n newCriteria[index].value = Math.max(0, Math.min(100, numValue)); // 限制在0-100之间\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private handleEvaluationCriteriaDescriptionChange = (index: number, value: string) => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n newCriteria[index].description = value;\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private addEvaluationCriteria = () => {\r\n const newCriteria = [...this.evaluationCriteria];\r\n newCriteria.push({\r\n name: '',\r\n value: 0,\r\n description: ''\r\n });\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private removeEvaluationCriteria = (index: number) => {\r\n if (this.evaluationCriteria.length <= 1) {\r\n showMessage('至少需要保留一个评分标准', 'warning');\r\n return;\r\n }\r\n const newCriteria = this.evaluationCriteria.filter((_, i) => i !== index);\r\n this.evaluationCriteria = newCriteria;\r\n };\r\n\r\n private getTotalWeight = (): number => {\r\n return this.evaluationCriteria.reduce((sum, criteria) => sum + criteria.value, 0);\r\n };\r\n\r\n private renderInputStep() {\r\n // 判断是否禁用JD输入区域(有预设job_info时禁用)\r\n const disableJdInput = Boolean(this.customInputs && this.customInputs.job_info);\r\n\r\n return (\r\n <div class=\"input-container\">\r\n <div class=\"step-header\">\r\n <h3>创建简历筛选任务</h3>\r\n <p class=\"step-description\">请输入职位描述和评分标准</p>\r\n </div>\r\n\r\n <div class=\"jd-input-section\">\r\n <div class=\"label-with-button\">\r\n <label htmlFor=\"job-description\">职位描述 (JD)</label>\r\n {!disableJdInput && (\r\n <div class=\"button-group\">\r\n {this.oemId && (\r\n <button\r\n class=\"position-selector-button\"\r\n onClick={this.handleOpenPositionSelector}\r\n type=\"button\"\r\n >\r\n 选择职位\r\n </button>\r\n )}\r\n {\r\n <pcm-mobile-input-btn\r\n name=\"职位描述\"\r\n onOk={(e) => {\r\n this.jobDescription = e.detail;\r\n }}\r\n />\r\n }\r\n </div>\r\n )}\r\n </div>\r\n <textarea\r\n id=\"job-description\"\r\n class=\"job-description-textarea\"\r\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\r\n rows={6}\r\n value={this.customInputs?.job_info || this.jobDescription}\r\n onInput={this.handleJobDescriptionChange}\r\n disabled={disableJdInput}\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"criteria-input-section\">\r\n <div class=\"criteria-header\">\r\n <label htmlFor=\"evaluation-criteria\">评分标准</label>\r\n <div class=\"criteria-actions\">\r\n <span class={`total-weight ${this.getTotalWeight() !== 100 ? 'invalid' : ''}`}>\r\n 总权重: {this.getTotalWeight()}%\r\n </span>\r\n <button\r\n type=\"button\"\r\n class=\"add-criteria-btn\"\r\n onClick={this.addEvaluationCriteria}\r\n >\r\n + 添加标准\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"criteria-table-container\">\r\n <table class=\"criteria-table\">\r\n <thead>\r\n <tr>\r\n <th style={{ width: '25%' }}>标准名称</th>\r\n <th style={{ width: '15%' }}>权重(%)</th>\r\n <th style={{ width: '50%' }}>描述</th>\r\n <th style={{ width: '10%' }}>操作</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {this.evaluationCriteria.map((criteria, index) => (\r\n <tr key={index}>\r\n <td>\r\n <input\r\n type=\"text\"\r\n class=\"criteria-name-input\"\r\n placeholder=\"请输入标准名称\"\r\n value={criteria.name}\r\n onInput={(e) => this.handleEvaluationCriteriaNameChange(index, (e.target as HTMLInputElement).value)}\r\n />\r\n </td>\r\n <td>\r\n <input\r\n type=\"number\"\r\n class=\"criteria-value-input\"\r\n placeholder=\"0\"\r\n min=\"0\"\r\n max=\"100\"\r\n value={criteria.value}\r\n onInput={(e) => this.handleEvaluationCriteriaValueChange(index, (e.target as HTMLInputElement).value)}\r\n />\r\n </td>\r\n <td>\r\n <textarea\r\n class=\"criteria-description-input\"\r\n placeholder=\"请输入评分标准描述\"\r\n rows={2}\r\n value={criteria.description}\r\n onInput={(e) => this.handleEvaluationCriteriaDescriptionChange(index, (e.target as HTMLTextAreaElement).value)}\r\n ></textarea>\r\n </td>\r\n <td>\r\n <button\r\n type=\"button\"\r\n class=\"remove-criteria-btn\"\r\n disabled={this.evaluationCriteria.length <= 1}\r\n onClick={() => this.removeEvaluationCriteria(index)}\r\n title={this.evaluationCriteria.length <= 1 ? '至少需要保留一个评分标准' : '删除此标准'}\r\n >\r\n ×\r\n </button>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {this.getTotalWeight() !== 100 && (\r\n <p class=\"criteria-warning\">\r\n ⚠️ 权重总和应为100%,当前为{this.getTotalWeight()}%\r\n </p>\r\n )}\r\n </div>\r\n\r\n <button\r\n class=\"submit-button\"\r\n disabled={!(this.customInputs?.job_info || this.jobDescription.trim()) || this.evaluationCriteria.length === 0 || this.getTotalWeight() !== 100 || this.isSubmitting}\r\n onClick={this.handleCreateTask}\r\n >\r\n {this.isSubmitting ? '创建中...' : '创建任务'}\r\n </button>\r\n\r\n <div class=\"ai-disclaimer\">\r\n <p>所有内容均由AI生成仅供参考</p>\r\n <p class=\"beian-info\">\r\n <span>中央网信办生成式人工智能服务备案号</span>:\r\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderTaskStep() {\r\n return (\r\n <div class=\"task-container\">\r\n {/* 任务信息展示区域 */}\r\n <div class=\"task-info-section\">\r\n <div class=\"info-cards\">\r\n <div class=\"info-card\">\r\n <div class=\"card-header\" onClick={this.toggleJdDetail}>\r\n <span class=\"card-title\">职位描述</span>\r\n <button class=\"toggle-btn\">查看</button>\r\n </div>\r\n <div class=\"card-preview\">\r\n <p class=\"preview-text\">{this.jobDescription}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"info-card\">\r\n <div class=\"card-header\" onClick={this.toggleCriteriaDetail}>\r\n <span class=\"card-title\">评分标准</span>\r\n <button class=\"toggle-btn\">查看</button>\r\n </div>\r\n <div class=\"card-preview\">\r\n <p class=\"preview-text\">{this.getEvaluationCriteriaText()}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* 简历上传区域 */}\r\n <div class=\"upload-section\">\r\n <div class=\"section-header\">\r\n <h4>上传简历</h4>\r\n </div>\r\n\r\n <div\r\n class={this.customInputs?.file_urls ? 'upload-disabled-wrapper' : ''}\r\n onClick={(e) => {\r\n if (this.customInputs?.file_urls) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n showMessage('演示模式下不允许上传简历,请联系管理员', 'warning');\r\n }\r\n }}\r\n >\r\n <pcm-upload\r\n ref={(el) => this.pcmUploadRef = el}\r\n multiple={true}\r\n maxFileSize={15 * 1024 * 1024}\r\n acceptFileSuffixList={['.pdf', '.doc', '.docx', '.txt', '.md', '.ppt', '.pptx', '.jpg', '.jpeg', '.png']}\r\n mobileUploadAble={!this.customInputs?.file_urls}\r\n uploadParams={{ tags: ['resume'] }}\r\n onUploadChange={this.handleUploadChange}\r\n />\r\n </div>\r\n\r\n <div class=\"upload-actions\">\r\n {this.uploadedResumeRecords.some(record => record.evaluate_status !== 1 && record.evaluate_status !== 0) && (\r\n <button\r\n class=\"analyze-btn\"\r\n onClick={this.handleStartAnalysis}\r\n >\r\n {`开始分析 (${this.uploadedResumeRecords.filter(record => record.evaluate_status !== 1 && record.evaluate_status !== 0).length} 个待分析)`}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* 简历列表表格 */}\r\n <div class=\"resume-table-section\">\r\n <div class=\"section-header\">\r\n <h4>简历列表</h4>\r\n <div class=\"section-header-side\">\r\n {\r\n this.showBatchExport && !!this.resumeRecords?.find(item => item.evaluate_status == 1) && <div class=\"export-actions\">\r\n <div\r\n class=\"export-btn\"\r\n onClick={this.exportAllPDF}\r\n >\r\n <span>批量导出报告</span>\r\n </div>\r\n <div class=\"export-divide\"></div>\r\n <div\r\n class=\"export-btn\"\r\n onClick={this.handleExportRecordsClick}\r\n >导出记录</div>\r\n </div>\r\n }\r\n\r\n <button\r\n class=\"refresh-btn\"\r\n onClick={this.handleRefreshTable}\r\n disabled={this.isLoadingResumeList}\r\n title=\"刷新表格\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class={this.isLoadingResumeList ? 'rotating' : ''}>\r\n <path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"/>\r\n </svg>\r\n </button>\r\n\r\n <span class=\"record-count\">已筛选 {this.totalRecords} 条记录</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <table class=\"resume-table\">\r\n <thead>\r\n <tr>\r\n <th>简历文件名</th>\r\n <th>人才信息</th>\r\n <th\r\n class={`sortable-header ${this.sortOrder !== 'none' ? 'active' : ''}`}\r\n onClick={this.handleSortByScore}\r\n >\r\n <span class=\"header-content\">\r\n 评估分数\r\n <span class=\"sort-icons\">\r\n <svg\r\n class={`sort-icon ${this.sortOrder === 'asc' ? 'active' : ''}`}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n >\r\n <path d=\"M6 3l4 4H2z\" fill=\"currentColor\" />\r\n </svg>\r\n <svg\r\n class={`sort-icon ${this.sortOrder === 'desc' ? 'active' : ''}`}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n >\r\n <path d=\"M6 9L2 5h8z\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </th>\r\n <th>评估详情</th>\r\n <th>状态</th>\r\n <th>操作</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {this.isLoadingResumeList ? (\r\n <tr>\r\n <td colSpan={6} class=\"empty-row\">\r\n <div class=\"empty-state\">\r\n <div class=\"loading-spinner-small\"></div>\r\n <p>正在加载简历数据...</p>\r\n </div>\r\n </td>\r\n </tr>\r\n ) : this.resumeRecords.length === 0 ? (\r\n <tr>\r\n <td colSpan={6} class=\"empty-row\">\r\n <div class=\"empty-state\">\r\n <p>暂无简历数据</p>\r\n <p class=\"empty-hint\">请上传简历开始筛选</p>\r\n </div>\r\n </td>\r\n </tr>\r\n ) : (\r\n this.resumeRecords.map(record => (\r\n <tr key={record.id}>\r\n <td class=\"filename-cell\">\r\n <span class=\"file-icon\">📝</span>\r\n <span title={record.fileName}>{record.fileName}</span>\r\n </td>\r\n <td class=\"talent-info-cell\" title={record.talentInfo}>{record.talentInfo}</td>\r\n <td class=\"score-cell\">\r\n <span class={`score-badge ${this.getScoreClass(record.score)}`}>\r\n {typeof record.score === 'number' ? record.score : '--'}\r\n </span>\r\n </td>\r\n <td class=\"detail-cell\" title={record.scoreDetail}>\r\n <span\r\n class=\"detail-content\"\r\n onClick={() => this.handleViewEvaluate(record)}\r\n >\r\n {record.scoreDetail}\r\n </span>\r\n </td>\r\n <td class=\"status-cell\">\r\n <span class={`status-badge status-${this.getEvaluateStatusClass(record.evaluate_status)}`}>\r\n {this.getEvaluateStatusText(record.evaluate_status)}\r\n </span>\r\n </td>\r\n <td class=\"action-cell\">\r\n <div class=\"action-dropdown\">\r\n <button\r\n class=\"action-btn dropdown-trigger\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n this.toggleDropdown(record.id);\r\n }}\r\n >\r\n 操作\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M7 10l5 5 5-5z\" />\r\n </svg>\r\n </button>\r\n {this.activeDropdownId === record.id && (\r\n <div class=\"dropdown-menu\">\r\n <div\r\n class=\"dropdown-item\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n this.handleViewEvaluate(record);\r\n }}\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2a1 1 0 0 0-2 0v2H8V2a1 1 0 0 0-2 0v2H5a3 3 0 0 0-3 3v11a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3zM4 18V9h16v9a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1z\" />\r\n </svg>\r\n 评估详情\r\n </div>\r\n <div\r\n class=\"dropdown-item\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n this.handleViewResume(record);\r\n }}\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6zm4 18H6V4h7v5h5v11z\" />\r\n </svg>\r\n 简历详情\r\n </div>\r\n <div\r\n class={`dropdown-item danger ${this.deletingRecordId === record.id ? 'disabled' : ''}`}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (this.deletingRecordId !== record.id) {\r\n this.handleDeleteRecord(record.id);\r\n }\r\n }}\r\n >\r\n {this.deletingRecordId === record.id ? (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"loading-spinner\">\r\n <path d=\"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16z\" opacity=\"0.25\" />\r\n <path d=\"M12 2C17.523 2 22 6.477 22 12h-2a8 8 0 0 0-8-8V2z\" />\r\n </svg>\r\n ) : (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 7l-.867 12.142A2 2 0 0 1 16.138 21H7.862a2 2 0 0 1-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v3M4 7h16\" />\r\n </svg>\r\n )}\r\n {this.deletingRecordId === record.id ? '删除中...' : '删除'}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </td>\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {/* 分页 */}\r\n {this.totalRecords > this.pageSize && (\r\n <div class=\"pagination\">\r\n <button\r\n class=\"page-btn\"\r\n disabled={this.currentPage === 1}\r\n onClick={() => this.changePage(this.currentPage - 1)}\r\n >\r\n 上一页\r\n </button>\r\n <span class=\"page-info\">\r\n 第 {this.currentPage} 页,共 {Math.ceil(this.totalRecords / this.pageSize)} 页\r\n </span>\r\n <button\r\n class=\"page-btn\"\r\n disabled={this.currentPage >= Math.ceil(this.totalRecords / this.pageSize)}\r\n onClick={() => this.changePage(this.currentPage + 1)}\r\n >\r\n 下一页\r\n </button>\r\n </div>\r\n )}\r\n <div style={{ height: '100px', width: '100%' }}>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getScoreClass(score: number): string {\r\n if (score >= 90) return 'excellent';\r\n if (score >= 80) return 'good';\r\n if (score >= 70) return 'average';\r\n if (score >= 60) return 'below-average';\r\n return 'poor';\r\n }\r\n\r\n /**\r\n * 生成评分标准文本\r\n */\r\n private getEvaluationCriteriaText(): string {\r\n return this.evaluationCriteria\r\n .map(criteria => `${criteria.name}(${criteria.value}%):${criteria.description}`)\r\n .join('\\n\\n');\r\n }\r\n\r\n private getEvaluateStatusText(evaluate_status?: 0 | 1 | -1): string {\r\n const statusMap = {\r\n 0: '筛选中',\r\n 1: '筛选完成',\r\n [-1]: '筛选失败'\r\n };\r\n return statusMap[evaluate_status] || '待分析';\r\n }\r\n\r\n private getEvaluateStatusClass(evaluate_status?: 0 | 1 | -1): string {\r\n const classMap = {\r\n 0: 'analyzing', // 筛选中\r\n 1: 'completed', // 筛选完成\r\n [-1]: 'failed' // 筛选失败\r\n };\r\n return classMap[evaluate_status] || 'pending'; // 默认为待分析\r\n }\r\n\r\n private changePage = async (page: number) => {\r\n this.currentPage = page;\r\n await this.loadResumeList();\r\n };\r\n\r\n private handleSortByScore = () => {\r\n // 切换排序状态:none -> desc -> asc -> none\r\n if (this.sortOrder === 'none') {\r\n this.sortOrder = 'desc';\r\n } else if (this.sortOrder === 'desc') {\r\n this.sortOrder = 'asc';\r\n } else {\r\n this.sortOrder = 'none';\r\n }\r\n\r\n // 重置到第一页并重新加载数据\r\n this.currentPage = 1;\r\n this.loadResumeList();\r\n };\r\n\r\n /**\r\n * 刷新表格数据\r\n */\r\n private handleRefreshTable = async () => {\r\n await this.loadResumeList();\r\n showMessage('刷新成功', 'success');\r\n };\r\n\r\n /**\r\n * 加载简历列表\r\n */\r\n private async loadResumeList() {\r\n if (!this.currentTask) return;\r\n\r\n this.isLoadingResumeList = true;\r\n\r\n // 刷新时清空列表,防止累加\r\n // 1. 清空从API获取的已筛选简历\r\n this.filteredResumeRecords = [];\r\n // 2. 清空已提交到服务器的上传记录(筛选中0、已完成1、失败-1),只保留待分析的本地上传记录(undefined)\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(\r\n record => record.evaluate_status === undefined\r\n );\r\n\r\n try {\r\n const params: any = {\r\n task_id: this.currentTask.id,\r\n page: this.currentPage,\r\n size: this.pageSize\r\n };\r\n\r\n // 添加排序参数\r\n if (this.sortOrder === 'desc') {\r\n params.order_by = 'score_desc';\r\n } else if (this.sortOrder === 'asc') {\r\n params.order_by = 'score_asc';\r\n }\r\n\r\n const response = await sendHttpRequest<ResumePageData>({\r\n url: '/sdk/v1/agent/app_filter_resume/page',\r\n method: 'GET',\r\n data: params\r\n });\r\n\r\n if (response.success && response.data) {\r\n // 转换API数据格式到组件需要的格式\r\n const transformedRecords = response.data.records.map(record => {\r\n // 解析简历数据以获取人才信息\r\n let talentInfo = '等待分析...';\r\n if (record.resume_data) {\r\n try {\r\n const resumeData = JSON.parse(record.resume_data);\r\n const result = resumeData.result;\r\n if (result) {\r\n const tel = result.phone || result.email || '未知';\r\n const degree = result.degree || '未知';\r\n const college = result.college || '未知';\r\n const workYear = result.work_year || '0';\r\n const workPosition = result.work_position || '未知职位';\r\n talentInfo = `${tel} | ${degree} | ${college} | ${workYear}年经验 | ${workPosition}`;\r\n }\r\n } catch (error) {\r\n console.warn('解析简历数据失败:', error);\r\n }\r\n }\r\n\r\n return {\r\n ...record,\r\n id: record.id?.toString() || '',\r\n fileName: record.resume_file_name || '未知文件',\r\n talentInfo: talentInfo,\r\n scoreDetail: record.evaluate || '等待分析...',\r\n uploadTime: record.create_at ? new Date(record.create_at) : new Date(),\r\n file_url: record.resume_file_url\r\n };\r\n });\r\n\r\n this.filteredResumeRecords = transformedRecords;\r\n this.totalRecords = response.data.total || 0;\r\n\r\n }\r\n } catch (error) {\r\n console.error('加载简历列表失败:', error);\r\n } finally {\r\n this.isLoadingResumeList = false;\r\n }\r\n }\r\n\r\n /**\r\n * 使用customInputs中的file_urls开始分析简历\r\n */\r\n private async startAnalysisWithCustomFileUrls() {\r\n if (!this.currentTask) {\r\n showMessage('任务信息不存在', 'error');\r\n return;\r\n }\r\n\r\n const fileUrls = this.customInputs?.file_urls;\r\n if (!fileUrls) {\r\n return;\r\n }\r\n\r\n // 将逗号分隔的文件URLs转换为数组\r\n const originalFileUrls = fileUrls.split(',').map(url => url.trim()).filter(url => url);\r\n\r\n if (originalFileUrls.length === 0) {\r\n showMessage('没有有效的简历文件URL', 'warning');\r\n return;\r\n }\r\n\r\n this.isAnalyzing = true;\r\n this.isLoadingResumeList = true;\r\n\r\n try {\r\n // 处理文件URLs,将http/https链接转换为cos_key\r\n const resumeFileUrls: string[] = [];\r\n for (const url of originalFileUrls) {\r\n // 检查是否是http或https链接\r\n if (url.startsWith('http://') || url.startsWith('https://')) {\r\n try {\r\n // 提取文件名(从URL中获取最后一部分)\r\n const fileName = url.split('/').pop() || 'resume.pdf';\r\n\r\n // 调用上传接口\r\n const uploadResponse = await uploadFileByUrl({\r\n url: url,\r\n file_name: fileName\r\n });\r\n\r\n if (uploadResponse.success && uploadResponse.data?.cos_key) {\r\n resumeFileUrls.push(uploadResponse.data.cos_key);\r\n } else {\r\n console.error(`上传文件失败: ${url}`, uploadResponse.message);\r\n showMessage(`上传文件 ${fileName} 失败: ${uploadResponse.message || '未知错误'}`, 'error');\r\n }\r\n } catch (error) {\r\n console.error(`上传文件出错: ${url}`, error);\r\n showMessage(`上传文件出错: ${error instanceof Error ? error.message : '未知错误'}`, 'error');\r\n }\r\n } else {\r\n // 如果不是http/https链接,直接使用原始URL(假设是cos_key)\r\n resumeFileUrls.push(url);\r\n }\r\n }\r\n\r\n if (resumeFileUrls.length === 0) {\r\n showMessage('没有有效的简历文件可以分析', 'error');\r\n return;\r\n }\r\n\r\n if (resumeFileUrls.length < originalFileUrls.length) {\r\n showMessage(`部分文件上传失败,将继续分析 ${resumeFileUrls.length}/${originalFileUrls.length} 个文件`, 'warning');\r\n }\r\n\r\n // 1. 先调用清理重复简历接口\r\n const clearResponse = await sendHttpRequest<string[]>({\r\n url: '/sdk/v1/agent/app_filter_resume/clear_repeated_resumes',\r\n method: 'POST',\r\n data: {\r\n task_id: this.currentTask.id,\r\n resume_file_urls: resumeFileUrls\r\n }\r\n });\r\n\r\n if (!clearResponse.success) {\r\n throw new Error(clearResponse.message || '简历校验失败');\r\n }\r\n\r\n // 检查返回的数据\r\n const filteredFileUrls = clearResponse.data || [];\r\n console.log('过滤后的简历文件URLs:', filteredFileUrls);\r\n\r\n if (filteredFileUrls.length === 0) {\r\n showMessage('已清除重复上传的简历,没有新的简历需要分析', 'info');\r\n return;\r\n }\r\n\r\n // 2. 构建评分规则字符串\r\n const ruleString = this.evaluationCriteria\r\n .map(criteria => `- ${criteria.name}(占比${criteria.value}%):${criteria.description}`)\r\n .join(' \\n');\r\n\r\n // 触发简历分析开始事件\r\n this.resumeAnalysisStart.emit({\r\n task_id: this.currentTask.id,\r\n resume_count: filteredFileUrls.length,\r\n resume_files: filteredFileUrls.map(url => ({\r\n file_name: url.split('/').pop() || '未知文件',\r\n file_url: url\r\n }))\r\n });\r\n\r\n // 3. 调用简历筛选接口\r\n await sendSSERequest({\r\n url: '/sdk/v1/chat/chat-messages',\r\n method: 'POST',\r\n data: {\r\n bot_id: \"3022316191018874\",\r\n response_mode: 'blocking',\r\n query: '简历筛选',\r\n inputs: {\r\n job_info: this.jobDescription,\r\n jd_id: this.currentTask.jd_id,\r\n task_id: this.currentTask.id,\r\n file_urls: filteredFileUrls.join(','),\r\n rule: ruleString\r\n }\r\n },\r\n onMessage: (data) => {\r\n console.log('分析进度:', data);\r\n\r\n if (data.event === 'error') {\r\n const errorMessage = data.data?.message || data.message || '分析失败';\r\n ErrorEventBus.emitError({\r\n error: data.data,\r\n message: errorMessage,\r\n });\r\n this.internalConversationId = null;\r\n return;\r\n }\r\n\r\n // 触发会话开始事件(仅在首次收到消息且有message_id或conversation_id时触发)\r\n if (data && !this.internalConversationId && (data.message_id || data.conversation_id || data.id)) {\r\n this.internalConversationId = data.conversation_id;\r\n this.conversationStart.emit({\r\n conversation_id: data.conversation_id,\r\n event: data.event || 'message',\r\n message_id: data.message_id,\r\n id: String(this.currentTask.id)\r\n });\r\n }\r\n },\r\n onComplete: async () => {\r\n // 重新加载简历列表\r\n await this.loadResumeList();\r\n\r\n // 触发简历分析完成事件\r\n this.emitAnalysisCompleteEvent();\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n },\r\n onError: (error) => {\r\n console.error('简历分析失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysisWithCustomFileUrls',\r\n component: 'oem-jlsx-modal',\r\n title: '简历分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '简历分析失败,请重试'\r\n });\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n }\r\n });\r\n\r\n } catch (error) {\r\n console.error('开始分析失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysisWithCustomFileUrls',\r\n component: 'oem-jlsx-modal',\r\n title: '开始分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '开始分析失败,请重试'\r\n });\r\n } finally {\r\n this.isAnalyzing = false;\r\n this.isLoadingResumeList = false;\r\n }\r\n }\r\n\r\n /**\r\n * 开始分析简历\r\n */\r\n private startAnalysis = async () => {\r\n if (!this.currentTask) {\r\n showMessage('任务信息不存在', 'error');\r\n return;\r\n }\r\n\r\n // 获取所有待分析的简历(从上传的简历中获取)\r\n const pendingRecords = this.uploadedResumeRecords.filter(record =>\r\n record.evaluate_status !== 1 && record.evaluate_status !== 0 // 筛选状态不是\"筛选完成\"和\"筛选中\"的记录\r\n );\r\n\r\n if (pendingRecords.length === 0) {\r\n showMessage('没有需要分析的简历', 'warning');\r\n return;\r\n }\r\n\r\n this.isAnalyzing = true;\r\n\r\n try {\r\n // 将待分析的记录状态设置为分析中\r\n pendingRecords.forEach(record => {\r\n record.evaluate_status = 0; // 设置为筛选中\r\n });\r\n // 触发界面更新\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords];\r\n\r\n // 收集所有待分析的简历文件URL\r\n const resumeFileUrls = pendingRecords\r\n .map(record => record.file_url || record.fileInfo?.cos_key)\r\n .filter(url => url); // 过滤掉空值\r\n\r\n if (resumeFileUrls.length === 0) {\r\n showMessage('简历文件URL获取失败', 'error');\r\n return;\r\n }\r\n\r\n // 1. 先调用清理重复简历接口\r\n const clearResponse = await sendHttpRequest<string[]>({\r\n url: '/sdk/v1/agent/app_filter_resume/clear_repeated_resumes',\r\n method: 'POST',\r\n data: {\r\n task_id: this.currentTask.id,\r\n resume_file_urls: resumeFileUrls\r\n }\r\n });\r\n\r\n if (!clearResponse.success) {\r\n throw new Error(clearResponse.message || '简历校验失败');\r\n }\r\n\r\n // 检查返回的数据\r\n const filteredFileUrls = clearResponse.data || [];\r\n console.log('过滤后的简历文件URLs:', filteredFileUrls);\r\n\r\n // 根据API返回的结果标记被过滤的简历\r\n if (filteredFileUrls.length === 0) {\r\n // 如果返回空数组,说明所有简历都是重复的\r\n showMessage('已清除重复上传的简历,没有新的简历需要分析', 'info');\r\n // 将所有待分析的简历从上传列表中移除(因为它们是重复的)\r\n this.uploadedResumeRecords = []\r\n return;\r\n } else {\r\n // 如果部分重复,直接用过滤后的文件URLs重新构建上传记录列表\r\n // 同时保留那些正在筛选中的简历\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => {\r\n const fileUrl = record.file_url || record.fileInfo?.cos_key;\r\n // 保留过滤后的有效文件URLs 或者 正在筛选中的简历\r\n return filteredFileUrls.includes(fileUrl) || record.evaluate_status === 0;\r\n });\r\n }\r\n\r\n // 2. 构建评分规则字符串\r\n const ruleString = this.evaluationCriteria\r\n .map(criteria => `- ${criteria.name}(占比${criteria.value}%):${criteria.description}`)\r\n .join(' \\n');\r\n\r\n // 触发简历分析开始事件\r\n this.resumeAnalysisStart.emit({\r\n task_id: this.currentTask.id,\r\n resume_count: filteredFileUrls.length,\r\n resume_files: pendingRecords.map(record => ({\r\n file_name: record.fileName,\r\n file_url: record.file_url || record.fileInfo?.cos_key || ''\r\n })).filter(file => filteredFileUrls.includes(file.file_url))\r\n });\r\n\r\n // 清除pcm-upload组件中的文件显示\r\n if (this.pcmUploadRef?.clearSelectedFiles) {\r\n this.pcmUploadRef.clearSelectedFiles();\r\n }\r\n\r\n // 3. 调用简历筛选接口,使用过滤后的文件URL列表\r\n await sendSSERequest({\r\n url: '/sdk/v1/chat/chat-messages',\r\n method: 'POST',\r\n data: {\r\n bot_id: \"3022316191018874\",\r\n response_mode: 'blocking',\r\n query: '简历筛选',\r\n inputs: {\r\n job_info: this.jobDescription,\r\n jd_id: this.currentTask.jd_id,\r\n task_id: this.currentTask.id,\r\n file_urls: filteredFileUrls.join(','), // 使用过滤后的文件URL\r\n rule: ruleString\r\n }\r\n },\r\n onMessage: (data) => {\r\n // 处理流式响应数据\r\n console.log('分析进度:', data);\r\n\r\n if (data.event === 'error') {\r\n const errorMessage = data.data?.message || data.message || '分析失败';\r\n pendingRecords.forEach(record => {\r\n record.evaluate_status = -1;\r\n });\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords];\r\n ErrorEventBus.emitError({\r\n error: data.data,\r\n message: errorMessage,\r\n });\r\n this.internalConversationId = null;\r\n return;\r\n }\r\n\r\n // 触发会话开始事件(仅在首次收到消息且有message_id或conversation_id时触发)\r\n if (data && !this.internalConversationId && (data.message_id || data.conversation_id || data.id)) {\r\n this.internalConversationId = data.conversation_id;\r\n this.conversationStart.emit({\r\n conversation_id: data.conversation_id,\r\n event: data.event || 'message',\r\n message_id: data.message_id,\r\n id: String(this.currentTask.id)\r\n });\r\n }\r\n },\r\n onComplete: async () => {\r\n // 分析完成,将已完成的简历从上传列表移到已筛选列表\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => record.evaluate_status !== 0);\r\n\r\n // 重新加载简历列表(从API获取筛选后的结果)\r\n await this.loadResumeList();\r\n\r\n // 触发简历分析完成事件\r\n this.emitAnalysisCompleteEvent();\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n },\r\n onError: (error) => {\r\n console.error('简历分析失败:', error);\r\n // 将分析失败的记录状态设置为failed\r\n pendingRecords.forEach(record => {\r\n record.evaluate_status = -1; // 设置为筛选失败\r\n });\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords];\r\n\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysis',\r\n component: 'oem-jlsx-modal',\r\n title: '开始分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '开始分析失败,请重试'\r\n });\r\n\r\n // 清理内部会话ID\r\n this.internalConversationId = null;\r\n }\r\n });\r\n\r\n } catch (error) {\r\n console.error('开始分析失败:', error);\r\n // 将分析失败的记录状态设置为failed\r\n pendingRecords.forEach(record => {\r\n record.evaluate_status = -1; // 设置为筛选失败\r\n });\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords];\r\n\r\n SentryReporter.captureError(error, {\r\n action: 'startAnalysis',\r\n component: 'oem-jlsx-modal',\r\n title: '开始分析失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '开始分析失败,请重试'\r\n });\r\n } finally {\r\n this.isAnalyzing = false;\r\n }\r\n };\r\n\r\n\r\n // 添加导出记录模态框处理函数\r\n private handleExportRecordsClick = () => {\r\n this.isExportRecordsModalOpen = true;\r\n };\r\n\r\n private handleExportRecordsModalClose = () => {\r\n this.isExportRecordsModalOpen = false;\r\n };\r\n\r\n // 职位选择器相关方法\r\n private handleOpenPositionSelector = () => {\r\n if (!this.oemId) {\r\n Message.info('未配置OEM ID,无法选择职位');\r\n return;\r\n }\r\n this.showPositionSelector = true;\r\n };\r\n\r\n private handleClosePositionSelector = () => {\r\n this.showPositionSelector = false;\r\n };\r\n\r\n private handlePositionSelected = (event: CustomEvent<Position & { formatted_text?: string }>) => {\r\n const position = event.detail;\r\n // 直接使用职位选择器组件提供的格式化文本\r\n this.jobDescription = position.formatted_text || '';\r\n this.showPositionSelector = false;\r\n Message.success('职位信息已填充');\r\n };\r\n\r\n private handleDocumentClick = (event: Event) => {\r\n // 处理点击外部关闭下拉菜单的逻辑\r\n const target = event.target as HTMLElement;\r\n const dropdown = target.closest('.action-dropdown');\r\n\r\n // 如果点击的不是下拉菜单区域,则关闭所有下拉菜单\r\n if (!dropdown && this.activeDropdownId) {\r\n this.activeDropdownId = null;\r\n }\r\n };\r\n\r\n private emitAnalysisCompleteEvent = () => {\r\n if (!this.currentTask) return;\r\n\r\n // 计算分析统计数据\r\n const allResumes = this.resumeRecords;\r\n const analyzedResumes = allResumes.filter(record =>\r\n record.evaluate_status === 1 && typeof record.score === 'number'\r\n );\r\n const failedResumes = allResumes.filter(record => record.evaluate_status === -1);\r\n\r\n // 计算评分统计\r\n const scores = analyzedResumes.map(record => record.score).filter(score => typeof score === 'number') as number[];\r\n const averageScore = scores.length > 0 ? scores.reduce((sum, score) => sum + score, 0) / scores.length : 0;\r\n const highestScore = scores.length > 0 ? Math.max(...scores) : 0;\r\n\r\n\r\n // 触发简历分析完成事件\r\n this.resumeAnalysisComplete.emit({\r\n task_id: this.currentTask.id,\r\n total_resumes: allResumes.length,\r\n analyzed_resumes: analyzedResumes.length,\r\n failed_resumes: failedResumes.length,\r\n average_score: Math.round(averageScore * 100) / 100, // 保留两位小数\r\n highest_score: highestScore,\r\n });\r\n\r\n };\r\n\r\n /**\r\n * 处理pcm-upload组件的上传变化事件\r\n */\r\n private handleUploadChange = (e: CustomEvent<FileUploadResponse[]>) => {\r\n if (!this.currentTask) {\r\n showMessage('请先创建任务', 'warning');\r\n return;\r\n }\r\n\r\n const currentUploadResults: FileUploadResponse[] = e.detail || [];\r\n\r\n // 获取已存在的文件URL列表,用于比较\r\n const existingFileUrls = this.uploadedResumeRecords.map(record =>\r\n record.file_url || record.fileInfo?.cos_key\r\n ).filter(url => url);\r\n\r\n // 找出新增的文件(在当前结果中但不在已存在列表中的文件)\r\n const newUploadResults = currentUploadResults.filter(result =>\r\n !existingFileUrls.includes(result.cos_key)\r\n );\r\n\r\n // 找出被删除的文件(在已存在列表中但不在当前结果中的文件)\r\n const currentFileUrls = currentUploadResults.map(result => result.cos_key);\r\n const removedFileUrls = existingFileUrls.filter(url =>\r\n !currentFileUrls.includes(url)\r\n );\r\n\r\n // 处理新增的文件\r\n if (newUploadResults.length > 0) {\r\n // 为每个新上传的文件创建简历记录\r\n const newRecords = newUploadResults.map(result => {\r\n const record: ResumeRecord = {\r\n id: Date.now() + Math.random().toString(),\r\n fileName: result.file_name || '未知文件',\r\n talentInfo: '等待分析...',\r\n score: undefined,\r\n scoreDetail: '等待分析...',\r\n uploadTime: new Date(),\r\n fileInfo: result,\r\n task_id: this.currentTask!.id,\r\n file_url: result.cos_key,\r\n evaluate_status: undefined // 新上传的简历默认为未开始状态\r\n };\r\n return record;\r\n });\r\n\r\n // 添加到上传记录列表\r\n this.uploadedResumeRecords = [...this.uploadedResumeRecords, ...newRecords];\r\n\r\n // 触发上传成功事件\r\n newRecords.forEach(record => {\r\n this.uploadSuccess.emit(record.fileInfo);\r\n });\r\n\r\n showMessage(`成功上传 ${newRecords.length} 个简历文件!`, 'success');\r\n }\r\n\r\n // 处理被删除的文件\r\n if (removedFileUrls.length > 0) {\r\n // 从上传记录列表中移除被删除的文件\r\n this.uploadedResumeRecords = this.uploadedResumeRecords.filter(record => {\r\n const fileUrl = record.file_url || record.fileInfo?.cos_key;\r\n return !removedFileUrls.includes(fileUrl);\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * 开始分析简历,检查是否有文件正在上传\r\n */\r\n private handleStartAnalysis = async () => {\r\n // 判断文件是否正在上传\r\n if (await this.pcmUploadRef?.getIsUploading?.()) {\r\n showMessage('文件上传中,请稍后', 'info');\r\n return;\r\n }\r\n\r\n await this.startAnalysis();\r\n };\r\n\r\n render() {\r\n if (!this.isOpen) return null;\r\n\r\n const modalStyle = {\r\n zIndex: String(this.zIndex)\r\n };\r\n\r\n const containerClass = {\r\n 'modal-container': true,\r\n 'fullscreen': this.fullscreen,\r\n 'pc-layout': this.currentStep === 'input',\r\n 'task-layout': this.currentStep === 'task',\r\n };\r\n\r\n const overlayClass = {\r\n 'modal-overlay': true,\r\n 'fullscreen-overlay': this.fullscreen\r\n };\r\n\r\n return (\r\n <div class={overlayClass} style={modalStyle}>\r\n <div class={containerClass}>\r\n {this.isShowHeader && (\r\n <div class=\"modal-header\">\r\n <div class=\"header-left\">\r\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\r\n <div>{this.modalTitle}</div>\r\n </div>\r\n {this.isNeedClose && (\r\n <button class=\"close-button\" onClick={this.handleClose}>\r\n <span>×</span>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {this.currentStep === 'input' ? this.renderInputStep() : this.renderTaskStep()}\r\n </div>\r\n\r\n {/* 职位描述抽屉 */}\r\n <pcm-drawer\r\n isOpen={this.showJdDrawer}\r\n drawerTitle=\"职位描述\"\r\n width=\"500px\"\r\n onClosed={this.closeJdDrawer}\r\n >\r\n <div class=\"drawer-content\">\r\n <div class=\"drawer-text-content\">\r\n {this.jobDescription}\r\n </div>\r\n </div>\r\n </pcm-drawer>\r\n\r\n {/* 评分标准抽屉 */}\r\n <pcm-drawer\r\n isOpen={this.showCriteriaDrawer}\r\n drawerTitle=\"评分标准\"\r\n width=\"500px\"\r\n onClosed={this.closeCriteriaDrawer}\r\n >\r\n <div class=\"drawer-content\">\r\n <div class=\"drawer-text-content\">\r\n {this.getEvaluationCriteriaText()}\r\n </div>\r\n </div>\r\n </pcm-drawer>\r\n\r\n {/* 预览抽屉 */}\r\n <pcm-drawer\r\n isOpen={this.showPreviewDrawer}\r\n drawerTitle={this.previewTitle}\r\n width=\"600px\"\r\n onClosed={this.closePreviewDrawer}\r\n >\r\n <div class=\"drawer-content\">\r\n {this.previewType === 'markdown' ? (\r\n <div\r\n class=\"markdown-content markdown-body\"\r\n innerHTML={marked(this.previewContent)}\r\n ></div>\r\n ) : (\r\n <div class=\"file-preview\">\r\n <iframe\r\n src={this.previewUrl}\r\n frameborder=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n style={{ border: 'none', height: 'calc(100vh - 120px)' }}\r\n ></iframe>\r\n </div>\r\n )}\r\n </div>\r\n </pcm-drawer>\r\n\r\n {/* 导出记录模态框 */}\r\n <pcm-export-records-modal\r\n open={this.isExportRecordsModalOpen}\r\n botId={this.botId}\r\n sourceId={this.currentTask?.id?.toString()}\r\n onCancel={this.handleExportRecordsModalClose}\r\n />\r\n\r\n {/* 职位选择器弹窗 */}\r\n {this.showPositionSelector && (\r\n <div class=\"position-selector-modal-overlay\">\r\n <div class=\"position-selector-modal\">\r\n <div class=\"position-selector-modal-header\">\r\n <h3>选择职位</h3>\r\n <button class=\"position-selector-close-btn\" onClick={this.handleClosePositionSelector}>\r\n ×\r\n </button>\r\n </div>\r\n <div class=\"position-selector-modal-body\">\r\n <components-position-selector\r\n oemId={this.oemId}\r\n multiple={false}\r\n onPositionSelected={this.handlePositionSelected}\r\n ></components-position-selector>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}"]}
|