pcm-agents 1.0.7 → 1.0.8
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-chat-message_33.cjs.entry.js +7 -3
- package/dist/cjs/components-chat-message_33.cjs.entry.js.map +1 -1
- package/dist/cjs/components-oem-virtual-chat-modal.cjs.entry.js +1 -1
- package/dist/cjs/{conversation-utils-srlCwYy5.js → conversation-utils-Ut-DjZGS.js} +3 -3
- package/dist/cjs/{conversation-utils-srlCwYy5.js.map → conversation-utils-Ut-DjZGS.js.map} +1 -1
- package/dist/cjs/{index-CJQRBB6e.js → index-BJXw-mBt.js} +7 -4
- package/dist/cjs/{index-CJQRBB6e.js.map → index-BJXw-mBt.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 +6 -2
- package/dist/cjs/oem-htws-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/oem-htws-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/oem-jd-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-jlpp-modal.cjs.entry.js +2 -2
- package/dist/cjs/oem-jlpp-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/oem-jlpp-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 +2 -2
- package/dist/cjs/oem-mnms-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/oem-mnms-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/oem-qgqjl-modal.cjs.entry.js +2 -2
- package/dist/cjs/pcm-agents.cjs.js +1 -1
- package/dist/cjs/pcm-hr-chat-modal.cjs.entry.js +1 -1
- package/dist/cjs/pcm-jlsx-modal.cjs.entry.js +1 -1
- package/dist/collection/components/oem-htws-modal/oem-htws-modal.js +24 -1
- package/dist/collection/components/oem-htws-modal/oem-htws-modal.js.map +1 -1
- package/dist/collection/components/oem-jlpp-modal/oem-jlpp-modal.js +1 -1
- package/dist/collection/components/oem-jlpp-modal/oem-jlpp-modal.js.map +1 -1
- package/dist/collection/components/oem-mnms-modal/oem-mnms-modal.js +1 -1
- package/dist/collection/components/oem-mnms-modal/oem-mnms-modal.js.map +1 -1
- package/dist/collection/components/oem-zygh-modal/oem-zygh-modal.js +24 -1
- package/dist/collection/components/oem-zygh-modal/oem-zygh-modal.js.map +1 -1
- package/dist/collection/utils/utils.js +4 -1
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/components-chat-message.js +1 -1
- package/dist/components/components-digital-human.js +1 -1
- package/dist/components/components-export-records-modal.js +1 -1
- package/dist/components/components-mobile-input-btn.js +1 -1
- package/dist/components/components-mobile-upload-btn.js +1 -1
- package/dist/components/components-oem-virtual-chat-modal.js +1 -1
- package/dist/components/components-position-selector.js +1 -1
- package/dist/components/components-thousand-resume-wrapper.js +1 -1
- package/dist/components/components-upload.js +1 -1
- package/dist/components/components-voice-input-btn.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/oem-htws-modal.js +11 -6
- package/dist/components/oem-htws-modal.js.map +1 -1
- package/dist/components/oem-jd-modal.js +5 -5
- package/dist/components/oem-jlpp-modal.js +8 -8
- package/dist/components/oem-jlpp-modal.js.map +1 -1
- package/dist/components/oem-jlsx-modal.js +5 -5
- package/dist/components/oem-jlzz-modal.js +5 -5
- package/dist/components/oem-mnct-modal.js +7 -7
- package/dist/components/oem-mnms-modal.js +9 -9
- package/dist/components/oem-mnms-modal.js.map +1 -1
- package/dist/components/oem-qgqjl-modal.js +9 -9
- package/dist/components/oem-zygh-modal.js +11 -6
- package/dist/components/oem-zygh-modal.js.map +1 -1
- package/dist/components/{p-BdzFXB1t.js → p-5bswLwh6.js} +3 -3
- package/dist/components/{p-BdzFXB1t.js.map → p-5bswLwh6.js.map} +1 -1
- package/dist/components/{p-14CtQGo8.js → p-A7OBthUL.js} +4 -4
- package/dist/components/{p-14CtQGo8.js.map → p-A7OBthUL.js.map} +1 -1
- package/dist/components/{p-BdgdgjaW.js → p-BV5z8A4a.js} +3 -3
- package/dist/components/{p-BdgdgjaW.js.map → p-BV5z8A4a.js.map} +1 -1
- package/dist/components/{p-BWdXlms4.js → p-Co9TJcgO.js} +3 -3
- package/dist/components/{p-BWdXlms4.js.map → p-Co9TJcgO.js.map} +1 -1
- package/dist/components/{p--IeRQcxT.js → p-CzFTb8J3.js} +3 -3
- package/dist/components/{p--IeRQcxT.js.map → p-CzFTb8J3.js.map} +1 -1
- package/dist/components/{p-BJKIlCmI.js → p-D1MNPWYG.js} +3 -3
- package/dist/components/{p-BJKIlCmI.js.map → p-D1MNPWYG.js.map} +1 -1
- package/dist/components/{p-c8fMPeu_.js → p-D1Zbs1E9.js} +3 -3
- package/dist/components/{p-c8fMPeu_.js.map → p-D1Zbs1E9.js.map} +1 -1
- package/dist/components/{p-5TyoLbXy.js → p-DMcvouAq.js} +5 -5
- package/dist/components/{p-5TyoLbXy.js.map → p-DMcvouAq.js.map} +1 -1
- package/dist/components/{p-BUVNyxhI.js → p-DUzMuUXg.js} +7 -4
- package/dist/components/p-DUzMuUXg.js.map +1 -0
- package/dist/components/{p-wTdMzyVB.js → p-DjY3Uc0V.js} +3 -3
- package/dist/components/{p-wTdMzyVB.js.map → p-DjY3Uc0V.js.map} +1 -1
- package/dist/components/{p-Bxg4nW6-.js → p-DoiGRCSv.js} +3 -3
- package/dist/components/{p-Bxg4nW6-.js.map → p-DoiGRCSv.js.map} +1 -1
- package/dist/components/{p-wAqiaji9.js → p-JbxUsVe3.js} +3 -3
- package/dist/components/{p-wAqiaji9.js.map → p-JbxUsVe3.js.map} +1 -1
- package/dist/components/{p-2BiWHTOV.js → p-PVcS8Z81.js} +3 -3
- package/dist/components/{p-2BiWHTOV.js.map → p-PVcS8Z81.js.map} +1 -1
- package/dist/components/{p-BUA1GYVe.js → p-cML-tdcc.js} +3 -3
- package/dist/components/{p-BUA1GYVe.js.map → p-cML-tdcc.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-hr-chat-modal.js +2 -2
- package/dist/components/pcm-htws-modal.js +8 -8
- package/dist/components/pcm-hyzj-modal.js +5 -5
- package/dist/components/pcm-jd-modal.js +6 -6
- package/dist/components/pcm-jlpp-modal.js +8 -8
- package/dist/components/pcm-jlsx-modal.js +5 -5
- package/dist/components/pcm-jlzz-modal.js +6 -6
- package/dist/components/pcm-mnct-modal.js +7 -7
- package/dist/components/pcm-mnms-modal.js +8 -8
- package/dist/components/pcm-mnms-zp-modal.js +8 -8
- package/dist/components/pcm-msbg-modal.js +5 -5
- package/dist/components/pcm-qgqjl-modal.js +9 -9
- package/dist/components/pcm-virtual-chat-modal.js +1 -1
- package/dist/components/pcm-zsk-chat-modal.js +2 -2
- package/dist/components/pcm-zygh-modal.js +7 -7
- package/dist/components/pcm-zygh-v2-modal.js +7 -7
- package/dist/esm/components-chat-message_33.entry.js +7 -3
- package/dist/esm/components-chat-message_33.entry.js.map +1 -1
- package/dist/esm/components-oem-virtual-chat-modal.entry.js +1 -1
- package/dist/esm/{conversation-utils-B8KFe8e5.js → conversation-utils-DhbVyrpx.js} +3 -3
- package/dist/esm/{conversation-utils-B8KFe8e5.js.map → conversation-utils-DhbVyrpx.js.map} +1 -1
- package/dist/esm/{index-mY4LYmpx.js → index-D8Ey1n8b.js} +7 -4
- package/dist/esm/{index-mY4LYmpx.js.map → index-D8Ey1n8b.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 +6 -2
- package/dist/esm/oem-htws-modal.entry.js.map +1 -1
- package/dist/esm/oem-jd-modal.entry.js +1 -1
- package/dist/esm/oem-jlpp-modal.entry.js +2 -2
- package/dist/esm/oem-jlpp-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 +2 -2
- package/dist/esm/oem-mnms-modal.entry.js.map +1 -1
- package/dist/esm/oem-qgqjl-modal.entry.js +2 -2
- package/dist/esm/pcm-agents.js +1 -1
- package/dist/esm/pcm-hr-chat-modal.entry.js +1 -1
- package/dist/esm/pcm-jlsx-modal.entry.js +1 -1
- package/dist/pcm-agents/index.esm.js +1 -1
- package/dist/pcm-agents/oem-htws-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/oem-jlpp-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/oem-mnms-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/{p-724d9471.entry.js → p-030c829e.entry.js} +2 -2
- package/dist/pcm-agents/p-11426012.entry.js +8 -0
- package/dist/pcm-agents/p-11426012.entry.js.map +1 -0
- package/dist/pcm-agents/{p-24ce19fc.entry.js → p-1fdb05d7.entry.js} +2 -2
- package/dist/pcm-agents/p-1fdb05d7.entry.js.map +1 -0
- package/dist/pcm-agents/{p-557664fc.entry.js → p-4732c615.entry.js} +2 -2
- package/dist/pcm-agents/{p-0cedc9bf.entry.js → p-646b6128.entry.js} +2 -2
- package/dist/pcm-agents/{p-58493403.entry.js → p-66cb43c9.entry.js} +2 -2
- package/dist/pcm-agents/{p-5ca45877.entry.js → p-75efc351.entry.js} +2 -2
- package/dist/pcm-agents/{p-CcIrA6cr.js → p-B3osOuvR.js} +2 -2
- package/dist/pcm-agents/{p-CcIrA6cr.js.map → p-B3osOuvR.js.map} +1 -1
- package/dist/pcm-agents/p-CXe7oxeN.js +2 -0
- package/dist/pcm-agents/{p-rR0ghCa0.js.map → p-CXe7oxeN.js.map} +1 -1
- package/dist/pcm-agents/{p-81d12737.entry.js → p-b071ed75.entry.js} +2 -2
- package/dist/pcm-agents/{p-81d12737.entry.js.map → p-b071ed75.entry.js.map} +1 -1
- package/dist/pcm-agents/{p-d0a7e02b.entry.js → p-b3ff7816.entry.js} +2 -2
- package/dist/pcm-agents/{p-f4d5841a.entry.js → p-c2c3e968.entry.js} +2 -2
- package/dist/pcm-agents/{p-f4d5841a.entry.js.map → p-c2c3e968.entry.js.map} +1 -1
- package/dist/pcm-agents/{p-783b46c0.entry.js → p-f92d70a8.entry.js} +2 -2
- package/dist/pcm-agents/pcm-agents.esm.js +1 -1
- package/dist/types/components/oem-htws-modal/oem-htws-modal.d.ts +4 -0
- package/dist/types/components/oem-zygh-modal/oem-zygh-modal.d.ts +4 -0
- package/dist/types/components.d.ts +16 -0
- package/dist/types/utils/utils.d.ts +2 -1
- package/package.json +1 -1
- package/dist/components/p-BUVNyxhI.js.map +0 -1
- package/dist/pcm-agents/p-24ce19fc.entry.js.map +0 -1
- package/dist/pcm-agents/p-b9368b8e.entry.js +0 -8
- package/dist/pcm-agents/p-b9368b8e.entry.js.map +0 -1
- package/dist/pcm-agents/p-rR0ghCa0.js +0 -2
- /package/dist/pcm-agents/{p-724d9471.entry.js.map → p-030c829e.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-557664fc.entry.js.map → p-4732c615.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-0cedc9bf.entry.js.map → p-646b6128.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-58493403.entry.js.map → p-66cb43c9.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-5ca45877.entry.js.map → p-75efc351.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-d0a7e02b.entry.js.map → p-b3ff7816.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-783b46c0.entry.js.map → p-f92d70a8.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oem-zygh-modal.js","sourceRoot":"","sources":["../../../../src/components/oem-zygh-modal/oem-zygh-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, verifySmsCode } from '../../utils/utils';\r\nimport { ConversationStartEventData, StreamCompleteEventData } from '../../components';\r\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\r\nimport { authStore } from '../../../store/auth.store'; // 导入 authStore\r\nimport { configStore } from '../../../store/config.store';\r\nimport { Message } from '../../services/message.service';\r\n\r\n/**\r\n * 职业规划助手\r\n */\r\n\r\nexport type CareerPlanType = '初入职场' | '转型建议' | '晋升路径';\r\n\r\n@Component({\r\n tag: 'oem-zygh-modal',\r\n styleUrls: ['../../global/global.css', 'oem-zygh-modal.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class OemZyghModal {\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 * 会话ID,传入继续对话,否则创建新会话\r\n */\r\n @Prop({ mutable: true }) conversationId?: string;\r\n\r\n /**\r\n * 默认查询文本\r\n */\r\n @Prop() defaultQuery: string = '请开始规划';\r\n\r\n /**\r\n * 是否以全屏模式打开,移动端建议设置为true\r\n */\r\n @Prop() fullscreen: boolean = false;\r\n\r\n /**\r\n * 自定义输入参数,传入customInputs.type则可以指定规划类型,可传入\"转型建议\"、\"晋升路径\"<br>\r\n * 传入customInputs.file_url时,简历上传区域不可修改。<br>\r\n */\r\n @Prop() customInputs: Record<string, string> = {};\r\n\r\n /**\r\n * 是否显示工作区历史会话按钮\r\n */\r\n @Prop() showWorkspaceHistory: boolean = false;\r\n\r\n /**\r\n * 上传成功事件\r\n */\r\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\r\n\r\n /**\r\n * 流式输出完成事件\r\n */\r\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\r\n\r\n /**\r\n * 新会话开始的回调,只会在一轮对话开始时触发一次\r\n */\r\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\r\n\r\n /**\r\n * 当聊天完成时触发\r\n */\r\n @Event() planningComplete: EventEmitter<{\r\n conversation_id: string;\r\n type: CareerPlanType;\r\n }>;\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 * 事件参数: { mobile: string, codeType: number }\r\n */\r\n @Event() sendSmsCodeRequest: EventEmitter<{ mobile: string; codeType: number }>;\r\n\r\n /**\r\n * 附件预览模式\r\n * 'drawer': 在右侧抽屉中预览\r\n * 'window': 在新窗口中打开\r\n */\r\n @Prop() filePreviewMode: 'drawer' | 'window' = 'drawer';\r\n\r\n @State() isUploading: boolean = false;\r\n @State() uploadedFileInfo: FileUploadResponse | null = null;\r\n @State() showChatModal: boolean = false;\r\n @State() isSubmitting: boolean = false;\r\n @State() selectedPlanType: CareerPlanType = '初入职场';\r\n @State() targetPosition: string = ''; // 晋升目标岗位\r\n @State() industryName: string = ''; // 感兴趣的行业\r\n @State() jobPosition: string = ''; // 感兴趣的职位\r\n @State() timePeriod: string = ''; // 期望转型时间\r\n\r\n // 手机号和验证码相关状态\r\n @State() phoneNumber: string = '';\r\n @State() verificationCode: string = '';\r\n @State() isSendingCode: boolean = false;\r\n @State() countdown: number = 0;\r\n @State() isVerifyingCode: 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 pcmUploadRef;\r\n private countdownTimer: NodeJS.Timeout | null = null;\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.showChatModal = false;\r\n this.isSubmitting = false;\r\n this.uploadedFileInfo = null;\r\n // 重置手机号和验证码相关状态\r\n this.phoneNumber = '';\r\n this.verificationCode = '';\r\n this.isSendingCode = false;\r\n this.isVerifyingCode = false;\r\n this.countdown = 0;\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n this.countdownTimer = null;\r\n }\r\n } else {\r\n if (this.customInputs && this.customInputs.type) {\r\n // 检查是否是有效的 CareerPlanType 值\r\n const type = this.customInputs.type;\r\n if (type === '转型建议' || type === '晋升路径' || type === '初入职场') {\r\n this.selectedPlanType = type;\r\n }\r\n }\r\n\r\n await verifyApiKey(this.token);\r\n\r\n // 如果有会话ID直接显示聊天模态框\r\n if (this.conversationId) {\r\n this.showChatModal = true;\r\n }\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\r\n // 初始化时设置 token,但不验证(验证在 @Watch('isOpen') 中处理)\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 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 if (this.removeErrorListener) {\r\n this.removeErrorListener();\r\n }\r\n // 清理倒计时定时器\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n this.countdownTimer = null;\r\n }\r\n }\r\n\r\n private handleClose = () => {\r\n this.modalClosed.emit();\r\n };\r\n\r\n private handlePlanTypeChange = (type: CareerPlanType) => {\r\n this.selectedPlanType = type;\r\n // 切换类型时重置表单字段\r\n this.targetPosition = '';\r\n this.industryName = '';\r\n this.jobPosition = '';\r\n this.timePeriod = '';\r\n };\r\n\r\n private handlePhoneNumberChange = (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n this.phoneNumber = input.value;\r\n };\r\n\r\n private handleVerificationCodeChange = (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n this.verificationCode = input.value;\r\n };\r\n\r\n private startCountdown = () => {\r\n this.countdown = 60;\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n }\r\n this.countdownTimer = setInterval(() => {\r\n this.countdown--;\r\n if (this.countdown <= 0) {\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n this.countdownTimer = null;\r\n }\r\n }\r\n }, 1000);\r\n };\r\n\r\n private handleSendCode = () => {\r\n if (!this.phoneNumber.trim()) {\r\n Message.error('请输入手机号');\r\n return;\r\n }\r\n\r\n // 验证手机号格式\r\n const phoneRegex = /^1[3-9]\\d{9}$/;\r\n if (!phoneRegex.test(this.phoneNumber.trim())) {\r\n Message.error('请输入正确的手机号');\r\n return;\r\n }\r\n\r\n // 设置发送中状态\r\n this.isSendingCode = true;\r\n\r\n // 触发事件,让接入方去调用自己的短信接口\r\n this.sendSmsCodeRequest.emit({\r\n mobile: this.phoneNumber.trim(),\r\n codeType: 8,\r\n });\r\n\r\n // 开始倒计时并重置发送状态\r\n this.startCountdown();\r\n this.isSendingCode = false;\r\n };\r\n\r\n private handleStartPlanning = async () => {\r\n // 既没有预设 file_url,也没有上传文件,则提示\r\n if (!this.customInputs?.file_url && !this.uploadedFileInfo) {\r\n Message.info('请上传简历');\r\n return;\r\n }\r\n\r\n // 如果填写了手机号,则需要验证验证码\r\n if (this.phoneNumber.trim()) {\r\n // 验证手机号格式\r\n const phoneRegex = /^1[3-9]\\d{9}$/;\r\n if (!phoneRegex.test(this.phoneNumber.trim())) {\r\n Message.error('请输入正确的手机号');\r\n return;\r\n }\r\n\r\n // 验证验证码是否填写\r\n if (!this.verificationCode.trim()) {\r\n Message.error('请输入验证码');\r\n return;\r\n }\r\n\r\n // 验证验证码是否正确\r\n this.isVerifyingCode = true;\r\n try {\r\n const result = await verifySmsCode(this.phoneNumber.trim(), this.verificationCode.trim(), 0);\r\n if (!result.success) {\r\n Message.error(result.message || '验证码错误');\r\n this.isVerifyingCode = false;\r\n return;\r\n }\r\n } catch (error) {\r\n Message.error('验证码校验失败');\r\n this.isVerifyingCode = false;\r\n return;\r\n }\r\n this.isVerifyingCode = false;\r\n }\r\n\r\n // 判断文件是否正在上传\r\n if (await this.pcmUploadRef?.getIsUploading?.()) {\r\n Message.info('文件上传中,请稍后');\r\n return;\r\n }\r\n this.isSubmitting = true;\r\n this.showChatModal = true;\r\n this.isSubmitting = false;\r\n };\r\n\r\n // 处理规划完成事件\r\n private handlePlanningComplete = (event: CustomEvent) => {\r\n this.planningComplete.emit({\r\n ...event.detail,\r\n type: this.selectedPlanType,\r\n });\r\n };\r\n\r\n private getPlanTypeIcon = (type: CareerPlanType) => {\r\n const isSelected = this.selectedPlanType === type;\r\n const baseUrl = 'https://pcm-pub-1351162788.cos.ap-guangzhou.myqcloud.com/sdk/image/';\r\n const iconMap = {\r\n '初入职场': 'i_entry_level',\r\n '晋升路径': 'i_promotion',\r\n '转型建议': 'i_transition',\r\n };\r\n return `${baseUrl}${iconMap[type]}${isSelected ? '_actived' : ''}.png`;\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': true,\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 // 显示加载状态\r\n const isLoading = this.conversationId && !this.showChatModal;\r\n\r\n // 判断是否禁用简历上传区域(有预设file_url时禁用)\r\n const disableResumeUpload = Boolean(this.customInputs && this.customInputs.file_url);\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 {/* 输入界面 - 仅在不显示聊天模态框且没有会话ID时显示 */}\r\n {!this.showChatModal && !this.conversationId && (\r\n <div class=\"input-container\">\r\n {/* 规划类型选择 */}\r\n <div class=\"plan-type-section\">\r\n <label>选择建议类型</label>\r\n <div class=\"plan-type-options\">\r\n <div class={`plan-type-option ${this.selectedPlanType === '初入职场' ? 'selected' : ''}`} onClick={() => this.handlePlanTypeChange('初入职场')}>\r\n <div class=\"option-icon\">\r\n <img src={this.getPlanTypeIcon('初入职场')} alt=\"初入职场\" />\r\n </div>\r\n <div class=\"option-label\">初入职场</div>\r\n </div>\r\n <div class={`plan-type-option ${this.selectedPlanType === '晋升路径' ? 'selected' : ''}`} onClick={() => this.handlePlanTypeChange('晋升路径')}>\r\n <div class=\"option-icon\">\r\n <img src={this.getPlanTypeIcon('晋升路径')} alt=\"晋升路径\" />\r\n </div>\r\n <div class=\"option-label\">晋升路径</div>\r\n </div>\r\n <div class={`plan-type-option ${this.selectedPlanType === '转型建议' ? 'selected' : ''}`} onClick={() => this.handlePlanTypeChange('转型建议')}>\r\n <div class=\"option-icon\">\r\n <img src={this.getPlanTypeIcon('转型建议')} alt=\"转型建议\" />\r\n </div>\r\n <div class=\"option-label\">转型建议</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* 动态表单字段 */}\r\n <div class=\"dynamic-form-section\">\r\n {this.selectedPlanType === '初入职场' && (\r\n <div class=\"form-fields\">\r\n <div class=\"form-field\">\r\n <label>感兴趣的行业</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的行业\"\r\n value={this.industryName}\r\n onInput={e => (this.industryName = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-field\">\r\n <label>感兴趣的职位</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的职位\"\r\n value={this.jobPosition}\r\n onInput={e => (this.jobPosition = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-hint\">为确保职业规划报告的准确性,推荐您至少填写其中一项</div>\r\n </div>\r\n )}\r\n\r\n {this.selectedPlanType === '转型建议' && (\r\n <div class=\"form-fields\">\r\n <div class=\"form-field\">\r\n <label>感兴趣的行业</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的行业\"\r\n value={this.industryName}\r\n onInput={e => (this.industryName = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-field\">\r\n <label>感兴趣的职位</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的职位\"\r\n value={this.jobPosition}\r\n onInput={e => (this.jobPosition = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-hint\">为确保职业规划报告的准确性,推荐您至少填写其中一项</div>\r\n <div class=\"form-field\">\r\n <label>期望转型时间</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您期望的转型时间\"\r\n value={this.timePeriod}\r\n onInput={e => (this.timePeriod = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {this.selectedPlanType === '晋升路径' && (\r\n <div class=\"form-fields\">\r\n <div class=\"form-field\">\r\n <label>晋升目标岗位</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您的晋升目标岗位\"\r\n value={this.targetPosition}\r\n onInput={e => (this.targetPosition = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-hint\">为确保职业规划报告的准确性,建议您填写晋升目标岗位名称</div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* 简历上传区域 */}\r\n <div class=\"resume-upload-section\">\r\n <label>上传简历</label>\r\n <components-mobile-upload-btn\r\n maxFileSize={15 * 1024 * 1024}\r\n multiple={false}\r\n uploadAreaMode={true}\r\n acceptFileSuffixList={['.txt', '.md', '.pdf', '.docx', '.doc']}\r\n uploadParams={{\r\n tags: ['resume'],\r\n }}\r\n defaultFileList={\r\n this.customInputs?.file_url\r\n ? [\r\n {\r\n cos_key: this.customInputs.file_url,\r\n file_name: this.customInputs?.file_name || '预设简历',\r\n file_size: 0,\r\n ext: '',\r\n },\r\n ]\r\n : undefined\r\n }\r\n disabled={disableResumeUpload}\r\n onOk={e => {\r\n const result: FileUploadResponse[] = e.detail ?? [];\r\n this.uploadedFileInfo = result[0];\r\n this.uploadSuccess.emit(this.uploadedFileInfo);\r\n }}\r\n />\r\n </div>\r\n\r\n {/* 手机号和验证码区域(可选) */}\r\n <div class=\"jd-input-section\">\r\n <label>手机号(选填,填写后结果将通过短信发送)</label>\r\n <input type=\"tel\" class=\"phone-input\" placeholder=\"请输入手机号\" maxLength={11} value={this.phoneNumber} onInput={this.handlePhoneNumberChange} />\r\n </div>\r\n\r\n {/* 验证码输入区域 - 仅在填写了手机号时显示 */}\r\n {this.phoneNumber.trim().length === 11 && (\r\n <div class=\"jd-input-section\">\r\n <label>验证码</label>\r\n <div class=\"verification-code-container\">\r\n <input\r\n type=\"text\"\r\n class=\"verification-code-input\"\r\n placeholder=\"请输入验证码\"\r\n maxLength={6}\r\n value={this.verificationCode}\r\n onInput={this.handleVerificationCodeChange}\r\n />\r\n <button class=\"send-code-button\" disabled={this.isSendingCode || this.countdown > 0 || !this.phoneNumber.trim()} onClick={this.handleSendCode}>\r\n {this.isSendingCode ? '发送中...' : this.countdown > 0 ? `${this.countdown}秒` : '发送验证码'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <button\r\n class=\"submit-button\"\r\n disabled={(!disableResumeUpload && !this.uploadedFileInfo) || this.isUploading || this.isSubmitting || this.isVerifyingCode}\r\n onClick={this.handleStartPlanning}\r\n >\r\n {this.isUploading ? '上传中...' : this.isVerifyingCode ? '验证中...' : 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\">\r\n Hunan-PinCaiMao-202412310003\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\r\n {isLoading && (\r\n <div class=\"loading-container\">\r\n <div class=\"loading-spinner\"></div>\r\n <p class=\"loading-text\">正在加载对话...</p>\r\n </div>\r\n )}\r\n\r\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\r\n {this.showChatModal && (\r\n <div>\r\n <pcm-app-chat-modal\r\n isOpen={true}\r\n modalTitle={this.modalTitle}\r\n icon={this.icon}\r\n isShowHeader={this.isShowHeader}\r\n isNeedClose={this.isNeedClose}\r\n showWorkspaceHistory={this.showWorkspaceHistory}\r\n botId=\"121182005294690304\"\r\n fullscreen={this.fullscreen}\r\n conversationId={this.conversationId}\r\n defaultQuery={this.defaultQuery}\r\n filePreviewMode={this.filePreviewMode}\r\n customInputs={{\r\n ...this.customInputs,\r\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\r\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\r\n type: this.selectedPlanType,\r\n phone: this.phoneNumber.trim() || undefined,\r\n // 有值就传递\r\n ...(this.industryName ? { industry_name: this.industryName } : {}),\r\n ...(this.targetPosition || this.jobPosition ? { target_position: this.targetPosition || this.jobPosition } : {}),\r\n ...(this.timePeriod ? { time_period: this.timePeriod } : {}),\r\n }}\r\n interviewMode=\"text\"\r\n onInterviewComplete={this.handlePlanningComplete}\r\n ></pcm-app-chat-modal>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"oem-zygh-modal.js","sourceRoot":"","sources":["../../../../src/components/oem-zygh-modal/oem-zygh-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, verifySmsCode } from '../../utils/utils';\r\nimport { ConversationStartEventData, StreamCompleteEventData } from '../../components';\r\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\r\nimport { authStore } from '../../../store/auth.store'; // 导入 authStore\r\nimport { configStore } from '../../../store/config.store';\r\nimport { Message } from '../../services/message.service';\r\n\r\n/**\r\n * 职业规划助手\r\n */\r\n\r\nexport type CareerPlanType = '初入职场' | '转型建议' | '晋升路径';\r\n\r\n@Component({\r\n tag: 'oem-zygh-modal',\r\n styleUrls: ['../../global/global.css', 'oem-zygh-modal.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class OemZyghModal {\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 * 会话ID,传入继续对话,否则创建新会话\r\n */\r\n @Prop({ mutable: true }) conversationId?: string;\r\n\r\n /**\r\n * 默认查询文本\r\n */\r\n @Prop() defaultQuery: string = '请开始规划';\r\n\r\n /**\r\n * 是否以全屏模式打开,移动端建议设置为true\r\n */\r\n @Prop() fullscreen: boolean = false;\r\n\r\n /**\r\n * 自定义输入参数,传入customInputs.type则可以指定规划类型,可传入\"转型建议\"、\"晋升路径\"<br>\r\n * 传入customInputs.file_url时,简历上传区域不可修改。<br>\r\n */\r\n @Prop() customInputs: Record<string, string> = {};\r\n\r\n /**\r\n * 是否显示工作区历史会话按钮\r\n */\r\n @Prop() showWorkspaceHistory: 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 * 流式输出完成事件\r\n */\r\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\r\n\r\n /**\r\n * 新会话开始的回调,只会在一轮对话开始时触发一次\r\n */\r\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\r\n\r\n /**\r\n * 当聊天完成时触发\r\n */\r\n @Event() planningComplete: EventEmitter<{\r\n conversation_id: string;\r\n type: CareerPlanType;\r\n }>;\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 * 事件参数: { mobile: string, codeType: number }\r\n */\r\n @Event() sendSmsCodeRequest: EventEmitter<{ mobile: string; codeType: number }>;\r\n\r\n /**\r\n * 附件预览模式\r\n * 'drawer': 在右侧抽屉中预览\r\n * 'window': 在新窗口中打开\r\n */\r\n @Prop() filePreviewMode: 'drawer' | 'window' = 'drawer';\r\n\r\n @State() isUploading: boolean = false;\r\n @State() uploadedFileInfo: FileUploadResponse | null = null;\r\n @State() showChatModal: boolean = false;\r\n @State() isSubmitting: boolean = false;\r\n @State() selectedPlanType: CareerPlanType = '初入职场';\r\n @State() targetPosition: string = ''; // 晋升目标岗位\r\n @State() industryName: string = ''; // 感兴趣的行业\r\n @State() jobPosition: string = ''; // 感兴趣的职位\r\n @State() timePeriod: string = ''; // 期望转型时间\r\n\r\n // 手机号和验证码相关状态\r\n @State() phoneNumber: string = '';\r\n @State() verificationCode: string = '';\r\n @State() isSendingCode: boolean = false;\r\n @State() countdown: number = 0;\r\n @State() isVerifyingCode: 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 pcmUploadRef;\r\n private countdownTimer: NodeJS.Timeout | null = null;\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.showChatModal = false;\r\n this.isSubmitting = false;\r\n this.uploadedFileInfo = null;\r\n // 重置手机号和验证码相关状态\r\n this.phoneNumber = '';\r\n this.verificationCode = '';\r\n this.isSendingCode = false;\r\n this.isVerifyingCode = false;\r\n this.countdown = 0;\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n this.countdownTimer = null;\r\n }\r\n } else {\r\n if (this.customInputs && this.customInputs.type) {\r\n // 检查是否是有效的 CareerPlanType 值\r\n const type = this.customInputs.type;\r\n if (type === '转型建议' || type === '晋升路径' || type === '初入职场') {\r\n this.selectedPlanType = type;\r\n }\r\n }\r\n\r\n await verifyApiKey(this.token);\r\n\r\n // 如果有会话ID直接显示聊天模态框\r\n if (this.conversationId) {\r\n this.showChatModal = true;\r\n }\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\r\n // 初始化时设置 token,但不验证(验证在 @Watch('isOpen') 中处理)\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 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 if (this.removeErrorListener) {\r\n this.removeErrorListener();\r\n }\r\n // 清理倒计时定时器\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n this.countdownTimer = null;\r\n }\r\n }\r\n\r\n private handleClose = () => {\r\n this.modalClosed.emit();\r\n };\r\n\r\n private handlePlanTypeChange = (type: CareerPlanType) => {\r\n this.selectedPlanType = type;\r\n // 切换类型时重置表单字段\r\n this.targetPosition = '';\r\n this.industryName = '';\r\n this.jobPosition = '';\r\n this.timePeriod = '';\r\n };\r\n\r\n private handlePhoneNumberChange = (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n this.phoneNumber = input.value;\r\n };\r\n\r\n private handleVerificationCodeChange = (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n this.verificationCode = input.value;\r\n };\r\n\r\n private startCountdown = () => {\r\n this.countdown = 60;\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n }\r\n this.countdownTimer = setInterval(() => {\r\n this.countdown--;\r\n if (this.countdown <= 0) {\r\n if (this.countdownTimer) {\r\n clearInterval(this.countdownTimer);\r\n this.countdownTimer = null;\r\n }\r\n }\r\n }, 1000);\r\n };\r\n\r\n private handleSendCode = () => {\r\n if (!this.phoneNumber.trim()) {\r\n Message.error('请输入手机号');\r\n return;\r\n }\r\n\r\n // 验证手机号格式\r\n const phoneRegex = /^1[3-9]\\d{9}$/;\r\n if (!phoneRegex.test(this.phoneNumber.trim())) {\r\n Message.error('请输入正确的手机号');\r\n return;\r\n }\r\n\r\n // 设置发送中状态\r\n this.isSendingCode = true;\r\n\r\n // 触发事件,让接入方去调用自己的短信接口\r\n this.sendSmsCodeRequest.emit({\r\n mobile: this.phoneNumber.trim(),\r\n codeType: 8,\r\n });\r\n\r\n // 开始倒计时并重置发送状态\r\n this.startCountdown();\r\n this.isSendingCode = false;\r\n };\r\n\r\n private handleStartPlanning = async () => {\r\n // 既没有预设 file_url,也没有上传文件,则提示\r\n if (!this.customInputs?.file_url && !this.uploadedFileInfo) {\r\n Message.info('请上传简历');\r\n return;\r\n }\r\n\r\n // 如果填写了手机号,则需要验证验证码\r\n if (this.phoneNumber.trim()) {\r\n // 验证手机号格式\r\n const phoneRegex = /^1[3-9]\\d{9}$/;\r\n if (!phoneRegex.test(this.phoneNumber.trim())) {\r\n Message.error('请输入正确的手机号');\r\n return;\r\n }\r\n\r\n // 验证验证码是否填写\r\n if (!this.verificationCode.trim()) {\r\n Message.error('请输入验证码');\r\n return;\r\n }\r\n\r\n // 验证验证码是否正确\r\n this.isVerifyingCode = true;\r\n try {\r\n const result = await verifySmsCode(this.phoneNumber.trim(), this.verificationCode.trim(), 0, this.oemId);\r\n if (!result.success) {\r\n Message.error(result.message || '验证码错误');\r\n this.isVerifyingCode = false;\r\n return;\r\n }\r\n } catch (error) {\r\n Message.error('验证码校验失败');\r\n this.isVerifyingCode = false;\r\n return;\r\n }\r\n this.isVerifyingCode = false;\r\n }\r\n\r\n // 判断文件是否正在上传\r\n if (await this.pcmUploadRef?.getIsUploading?.()) {\r\n Message.info('文件上传中,请稍后');\r\n return;\r\n }\r\n this.isSubmitting = true;\r\n this.showChatModal = true;\r\n this.isSubmitting = false;\r\n };\r\n\r\n // 处理规划完成事件\r\n private handlePlanningComplete = (event: CustomEvent) => {\r\n this.planningComplete.emit({\r\n ...event.detail,\r\n type: this.selectedPlanType,\r\n });\r\n };\r\n\r\n private getPlanTypeIcon = (type: CareerPlanType) => {\r\n const isSelected = this.selectedPlanType === type;\r\n const baseUrl = 'https://pcm-pub-1351162788.cos.ap-guangzhou.myqcloud.com/sdk/image/';\r\n const iconMap = {\r\n '初入职场': 'i_entry_level',\r\n '晋升路径': 'i_promotion',\r\n '转型建议': 'i_transition',\r\n };\r\n return `${baseUrl}${iconMap[type]}${isSelected ? '_actived' : ''}.png`;\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': true,\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 // 显示加载状态\r\n const isLoading = this.conversationId && !this.showChatModal;\r\n\r\n // 判断是否禁用简历上传区域(有预设file_url时禁用)\r\n const disableResumeUpload = Boolean(this.customInputs && this.customInputs.file_url);\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 {/* 输入界面 - 仅在不显示聊天模态框且没有会话ID时显示 */}\r\n {!this.showChatModal && !this.conversationId && (\r\n <div class=\"input-container\">\r\n {/* 规划类型选择 */}\r\n <div class=\"plan-type-section\">\r\n <label>选择建议类型</label>\r\n <div class=\"plan-type-options\">\r\n <div class={`plan-type-option ${this.selectedPlanType === '初入职场' ? 'selected' : ''}`} onClick={() => this.handlePlanTypeChange('初入职场')}>\r\n <div class=\"option-icon\">\r\n <img src={this.getPlanTypeIcon('初入职场')} alt=\"初入职场\" />\r\n </div>\r\n <div class=\"option-label\">初入职场</div>\r\n </div>\r\n <div class={`plan-type-option ${this.selectedPlanType === '晋升路径' ? 'selected' : ''}`} onClick={() => this.handlePlanTypeChange('晋升路径')}>\r\n <div class=\"option-icon\">\r\n <img src={this.getPlanTypeIcon('晋升路径')} alt=\"晋升路径\" />\r\n </div>\r\n <div class=\"option-label\">晋升路径</div>\r\n </div>\r\n <div class={`plan-type-option ${this.selectedPlanType === '转型建议' ? 'selected' : ''}`} onClick={() => this.handlePlanTypeChange('转型建议')}>\r\n <div class=\"option-icon\">\r\n <img src={this.getPlanTypeIcon('转型建议')} alt=\"转型建议\" />\r\n </div>\r\n <div class=\"option-label\">转型建议</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* 动态表单字段 */}\r\n <div class=\"dynamic-form-section\">\r\n {this.selectedPlanType === '初入职场' && (\r\n <div class=\"form-fields\">\r\n <div class=\"form-field\">\r\n <label>感兴趣的行业</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的行业\"\r\n value={this.industryName}\r\n onInput={e => (this.industryName = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-field\">\r\n <label>感兴趣的职位</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的职位\"\r\n value={this.jobPosition}\r\n onInput={e => (this.jobPosition = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-hint\">为确保职业规划报告的准确性,推荐您至少填写其中一项</div>\r\n </div>\r\n )}\r\n\r\n {this.selectedPlanType === '转型建议' && (\r\n <div class=\"form-fields\">\r\n <div class=\"form-field\">\r\n <label>感兴趣的行业</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的行业\"\r\n value={this.industryName}\r\n onInput={e => (this.industryName = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-field\">\r\n <label>感兴趣的职位</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您感兴趣的职位\"\r\n value={this.jobPosition}\r\n onInput={e => (this.jobPosition = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-hint\">为确保职业规划报告的准确性,推荐您至少填写其中一项</div>\r\n <div class=\"form-field\">\r\n <label>期望转型时间</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您期望的转型时间\"\r\n value={this.timePeriod}\r\n onInput={e => (this.timePeriod = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {this.selectedPlanType === '晋升路径' && (\r\n <div class=\"form-fields\">\r\n <div class=\"form-field\">\r\n <label>晋升目标岗位</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-input\"\r\n placeholder=\"请输入您的晋升目标岗位\"\r\n value={this.targetPosition}\r\n onInput={e => (this.targetPosition = (e.target as HTMLInputElement).value)}\r\n />\r\n </div>\r\n <div class=\"form-hint\">为确保职业规划报告的准确性,建议您填写晋升目标岗位名称</div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* 简历上传区域 */}\r\n <div class=\"resume-upload-section\">\r\n <label>上传简历</label>\r\n <components-mobile-upload-btn\r\n maxFileSize={15 * 1024 * 1024}\r\n multiple={false}\r\n uploadAreaMode={true}\r\n acceptFileSuffixList={['.txt', '.md', '.pdf', '.docx', '.doc']}\r\n uploadParams={{\r\n tags: ['resume'],\r\n }}\r\n defaultFileList={\r\n this.customInputs?.file_url\r\n ? [\r\n {\r\n cos_key: this.customInputs.file_url,\r\n file_name: this.customInputs?.file_name || '预设简历',\r\n file_size: 0,\r\n ext: '',\r\n },\r\n ]\r\n : undefined\r\n }\r\n disabled={disableResumeUpload}\r\n onOk={e => {\r\n const result: FileUploadResponse[] = e.detail ?? [];\r\n this.uploadedFileInfo = result[0];\r\n this.uploadSuccess.emit(this.uploadedFileInfo);\r\n }}\r\n />\r\n </div>\r\n\r\n {/* 手机号和验证码区域(可选) */}\r\n <div class=\"jd-input-section\">\r\n <label>手机号(选填,填写后结果将通过短信发送)</label>\r\n <input type=\"tel\" class=\"phone-input\" placeholder=\"请输入手机号\" maxLength={11} value={this.phoneNumber} onInput={this.handlePhoneNumberChange} />\r\n </div>\r\n\r\n {/* 验证码输入区域 - 仅在填写了手机号时显示 */}\r\n {this.phoneNumber.trim().length === 11 && (\r\n <div class=\"jd-input-section\">\r\n <label>验证码</label>\r\n <div class=\"verification-code-container\">\r\n <input\r\n type=\"text\"\r\n class=\"verification-code-input\"\r\n placeholder=\"请输入验证码\"\r\n maxLength={6}\r\n value={this.verificationCode}\r\n onInput={this.handleVerificationCodeChange}\r\n />\r\n <button class=\"send-code-button\" disabled={this.isSendingCode || this.countdown > 0 || !this.phoneNumber.trim()} onClick={this.handleSendCode}>\r\n {this.isSendingCode ? '发送中...' : this.countdown > 0 ? `${this.countdown}秒` : '发送验证码'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <button\r\n class=\"submit-button\"\r\n disabled={(!disableResumeUpload && !this.uploadedFileInfo) || this.isUploading || this.isSubmitting || this.isVerifyingCode}\r\n onClick={this.handleStartPlanning}\r\n >\r\n {this.isUploading ? '上传中...' : this.isVerifyingCode ? '验证中...' : 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\">\r\n Hunan-PinCaiMao-202412310003\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\r\n {isLoading && (\r\n <div class=\"loading-container\">\r\n <div class=\"loading-spinner\"></div>\r\n <p class=\"loading-text\">正在加载对话...</p>\r\n </div>\r\n )}\r\n\r\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\r\n {this.showChatModal && (\r\n <div>\r\n <pcm-app-chat-modal\r\n isOpen={true}\r\n modalTitle={this.modalTitle}\r\n icon={this.icon}\r\n isShowHeader={this.isShowHeader}\r\n isNeedClose={this.isNeedClose}\r\n showWorkspaceHistory={this.showWorkspaceHistory}\r\n botId=\"121182005294690304\"\r\n fullscreen={this.fullscreen}\r\n conversationId={this.conversationId}\r\n defaultQuery={this.defaultQuery}\r\n filePreviewMode={this.filePreviewMode}\r\n customInputs={{\r\n ...this.customInputs,\r\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\r\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\r\n type: this.selectedPlanType,\r\n phone: this.phoneNumber.trim() || undefined,\r\n // 有值就传递\r\n ...(this.industryName ? { industry_name: this.industryName } : {}),\r\n ...(this.targetPosition || this.jobPosition ? { target_position: this.targetPosition || this.jobPosition } : {}),\r\n ...(this.timePeriod ? { time_period: this.timePeriod } : {}),\r\n }}\r\n interviewMode=\"text\"\r\n onInterviewComplete={this.handlePlanningComplete}\r\n ></pcm-app-chat-modal>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -689,9 +689,10 @@ export const sendSmsCode = async (mobile, codeType = 0) => {
|
|
|
689
689
|
* @param mobile 手机号
|
|
690
690
|
* @param code 验证码
|
|
691
691
|
* @param codeType 验证码类型,默认为0
|
|
692
|
+
* @param regSourceId 注册来源业务ID,OEM场景传入OEM ID
|
|
692
693
|
* @returns Promise<HttpResponse> 校验结果
|
|
693
694
|
*/
|
|
694
|
-
export const verifySmsCode = async (mobile, code, codeType = 0) => {
|
|
695
|
+
export const verifySmsCode = async (mobile, code, codeType = 0, regSourceId) => {
|
|
695
696
|
try {
|
|
696
697
|
const response = await sendHttpRequest({
|
|
697
698
|
url: '/sdk/v1/verify_sms_code',
|
|
@@ -700,6 +701,8 @@ export const verifySmsCode = async (mobile, code, codeType = 0) => {
|
|
|
700
701
|
mobile,
|
|
701
702
|
code,
|
|
702
703
|
code_type: codeType,
|
|
704
|
+
reg_source: 4,
|
|
705
|
+
reg_source_id: regSourceId,
|
|
703
706
|
},
|
|
704
707
|
});
|
|
705
708
|
return response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// 导入环境变量\r\nimport { API_DOMAIN, PCM_DOMAIN } from './env';\r\nimport { authStore } from '../../store/auth.store'; // 导入 authStore\r\nimport { configStore } from '../../store/config.store';\r\nimport { version } from '../../package.json';\r\n\r\nexport { API_DOMAIN, PCM_DOMAIN };\r\n\r\nexport function format(first?: string, middle?: string, last?: string): string {\r\n return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');\r\n}\r\n\r\n// 添加类型定义\r\nexport interface UserInputMessageType {\r\n message: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface WorkFlowNode {\r\n message_id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n event?: string;\r\n answer?: string;\r\n data?: {\r\n outputs?: {\r\n answer?: string;\r\n };\r\n status?: string;\r\n error?: any;\r\n };\r\n}\r\n\r\nexport interface MessageRound extends UserInputMessageType {\r\n id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n answer?: string;\r\n status?: string;\r\n error?: any;\r\n}\r\n\r\n\r\n/**\r\n * SSE 流式请求配置接口\r\n */\r\nexport interface SSERequestConfig {\r\n url: string;\r\n method: string;\r\n headers?: Record<string, string>;\r\n data?: any;\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 同步延迟函数,阻塞主线程指定的毫秒数\r\n * @param ms 延迟的毫秒数\r\n */\r\nconst syncDelay = (ms: number) => {\r\n const start = Date.now();\r\n while (Date.now() - start < ms) {\r\n // 空循环,阻塞主线程\r\n }\r\n};\r\n\r\n/**\r\n * 获取有效的 token,从 authStore 中获取\r\n * @returns string 有效的 token\r\n */\r\nexport const getEffectiveToken = (): string => {\r\n return authStore.getToken() || '';\r\n};\r\n\r\n/**\r\n * 请求超时时间(毫秒)\r\n */\r\nconst REQUEST_TIMEOUT = 3 * 60 * 1000; // 3分钟\r\n\r\n/**\r\n * 创建带超时的 fetch 请求\r\n * @param url 请求URL\r\n * @param options fetch选项\r\n * @param timeout 超时时间(毫秒)\r\n * @returns Promise<Response>\r\n */\r\nconst fetchWithTimeout = async (url: string, options: RequestInit, timeout: number = REQUEST_TIMEOUT): Promise<Response> => {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n ...options,\r\n signal: controller.signal,\r\n });\r\n clearTimeout(timeoutId);\r\n return response;\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n if (error instanceof Error && error.name === 'AbortError') {\r\n throw new Error('请求超时,请检查网络连接后重试');\r\n }\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 发送 SSE 流式请求\r\n * @param config 请求配置\r\n * @param isRetry 是否为重试请求\r\n * @returns Promise<void>\r\n */\r\nexport const sendSSERequest = async (config: SSERequestConfig, isRetry = false): Promise<void> => {\r\n const { url, method, headers = {}, data, onMessage, onError, onComplete } = config;\r\n\r\n try {\r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n const requestUrl = `${API_DOMAIN}${url}`;\r\n\r\n // 如果没有提供 Authorization 头,则从 authStore 获取 token\r\n if (!headers['authorization'] && !headers['Authorization']) {\r\n const token = getEffectiveToken();\r\n if (token) {\r\n headers['authorization'] = `Bearer ${token}`;\r\n }\r\n }\r\n\r\n const response = await fetchWithTimeout(requestUrl, {\r\n method,\r\n headers: {\r\n 'Accept': 'text/event-stream',\r\n 'Content-Type': 'application/json',\r\n ...headers,\r\n },\r\n body: data ? JSON.stringify(data) : undefined,\r\n });\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n\r\n // 如果不是重试请求,则使用同步延迟500毫秒后重试一次\r\n if (!isRetry) {\r\n syncDelay(500); // 阻塞式延迟\r\n return sendSSERequest(config, true);\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n console.error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const reader = response.body?.getReader();\r\n if (!reader) throw new Error('No reader available');\r\n\r\n const decoder = new TextDecoder();\r\n let buffer = '';\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n // 处理缓冲区中的完整消息\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop() || ''; // 保留最后一个不完整的行\r\n\r\n for (const line of lines) {\r\n if (line.startsWith('data:')) {\r\n try {\r\n const jsonStr = line.substring(5).trim();\r\n if (!jsonStr) continue;\r\n\r\n const data = JSON.parse(jsonStr);\r\n onMessage?.(data);\r\n } catch (e) {\r\n console.error('解析 SSE 数据错误:', e, '原始数据:', line);\r\n }\r\n }\r\n }\r\n }\r\n\r\n onComplete?.();\r\n } catch (error) {\r\n console.error('SSE 请求错误:', error);\r\n\r\n // 如果是超时错误且不是重试请求,则重试一次\r\n if (!isRetry) {\r\n console.log('SSE请求超时,正在重试...');\r\n syncDelay(1000); // 延迟1秒后重试\r\n return sendSSERequest(config, true);\r\n }\r\n\r\n onError?.(error);\r\n }\r\n};\r\n\r\n/**\r\n * HTTP请求配置接口\r\n */\r\nexport interface HttpRequestConfig {\r\n url: string;\r\n method?: string;\r\n headers?: Record<string, string>;\r\n params?: Record<string, any>;\r\n data?: any;\r\n formData?: FormData; // 添加FormData支持\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 统一的API响应接口\r\n */\r\nexport interface ApiResponse<T = any> {\r\n code: number;\r\n message: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * HTTP响应接口\r\n */\r\nexport interface HttpResponse<T = any> {\r\n success: boolean;\r\n data?: T;\r\n error?: any;\r\n message?: string;\r\n}\r\n\r\n// 添加一个全局事件发射器用于处理401错误\r\nexport const createTokenInvalidEvent = () => {\r\n const event = new CustomEvent('pcm-token-invalid', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { timestamp: new Date().getTime() },\r\n });\r\n document.dispatchEvent(event);\r\n};\r\n\r\n/**\r\n * 发送HTTP请求\r\n * @param config 请求配置\r\n * @param isRetry 是否为重试请求\r\n * @returns Promise<HttpResponse>\r\n */\r\nexport const sendHttpRequest = async <T = any>(config: HttpRequestConfig, isRetry = true): Promise<HttpResponse<T>> => {\r\n const { url, method = 'GET', headers = {}, params = {}, data, formData, onMessage } = config;\r\n\r\n try {\r\n // 构建URL和查询参数\r\n const queryParams = new URLSearchParams();\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n queryParams.append(key, String(value));\r\n }\r\n });\r\n\r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n let requestUrl = `${API_DOMAIN}${url}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\r\n // 如果没有提供 Authorization 头,则从 authStore 获取 token\r\n if (headers['authorization'] == undefined && headers['Authorization'] == undefined) {\r\n const token = getEffectiveToken();\r\n\r\n if (token) {\r\n headers['authorization'] = `Bearer ${token}`;\r\n }\r\n }\r\n\r\n // 创建请求配置对象\r\n const requestConfig: RequestInit = {\r\n method,\r\n headers: formData\r\n ? { ...headers }\r\n : {\r\n 'Content-Type': 'application/json',\r\n ...headers,\r\n },\r\n };\r\n\r\n // 处理请求体\r\n if (formData) {\r\n // 如果提供了FormData,直接使用\r\n requestConfig.body = formData;\r\n } else if (method !== 'GET' && method !== 'HEAD' && data) {\r\n // 否则,如果是非GET/HEAD请求且有data,将其JSON序列化\r\n requestConfig.body = JSON.stringify(data);\r\n }\r\n\r\n // 如果是 GET 方法且有 data,将其作为查询参数添加到 URL\r\n if (method === 'GET' && data) {\r\n const dataParams = new URLSearchParams();\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n dataParams.append(key, String(value));\r\n }\r\n });\r\n requestUrl += (queryParams.toString() ? '&' : '?') + dataParams.toString();\r\n }\r\n\r\n const response = await fetchWithTimeout(requestUrl, requestConfig);\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n\r\n // 重试请求\r\n if (isRetry) {\r\n syncDelay(500); // 阻塞式延迟\r\n return sendHttpRequest(config, false);\r\n }\r\n }\r\n\r\n const responseData: ApiResponse<T> = await response.json();\r\n\r\n // 调用 onMessage 回调\r\n if (onMessage) {\r\n onMessage(responseData);\r\n }\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\r\n return {\r\n success: false,\r\n message: responseData.message || `HTTP错误: ${response.status}`,\r\n error: responseData,\r\n };\r\n }\r\n\r\n // 检查业务状态码\r\n if (responseData.code !== 0) {\r\n console.error(`API错误: ${responseData.message}`);\r\n return {\r\n success: false,\r\n message: responseData.message,\r\n error: responseData,\r\n };\r\n }\r\n\r\n // 直接返回data\r\n return {\r\n success: true,\r\n data: responseData.data,\r\n };\r\n } catch (error) {\r\n console.error('HTTP请求错误:', error);\r\n\r\n // 如果是超时错误且允许重试,则重试一次\r\n if (isRetry) {\r\n console.log('HTTP请求超时,正在重试...');\r\n syncDelay(1000); // 延迟1秒后重试\r\n return sendHttpRequest(config, false);\r\n }\r\n\r\n if (config.onError) {\r\n config.onError(error);\r\n }\r\n return {\r\n success: false,\r\n error,\r\n message: error instanceof Error ? error.message : '未知错误',\r\n };\r\n } finally {\r\n if (config.onComplete) {\r\n config.onComplete();\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * 验证API密钥\r\n * @param token API密钥\r\n * @returns Promise<boolean> 验证是否成功\r\n */\r\nexport const verifyApiKey = async (token: string): Promise<boolean> => {\r\n const response = await sendHttpRequest(\r\n {\r\n url: '/sdk/v1/user',\r\n method: 'GET',\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n data: {\r\n sdk_version: version,\r\n },\r\n },\r\n false,\r\n );\r\n\r\n // 如果是401错误,同步延迟500毫秒后返回\r\n if (!response.success && response.error && response.error.code === 401) {\r\n // 执行同步延迟\r\n syncDelay(500);\r\n return false;\r\n } else {\r\n\r\n configStore.setItem('pcm-sdk-CUser', `${response.data.user}(${response.data.chat_user})`);\r\n return response.success;\r\n }\r\n};\r\n\r\n/**\r\n * 获取智能体信息\r\n * @param botId 智能体ID\r\n * @returns Promise<any> 智能体信息数据\r\n */\r\nexport const fetchAgentInfo = async (botId: string): Promise<any> => {\r\n if (!botId) {\r\n throw new Error('智能体ID不能为空');\r\n }\r\n\r\n try {\r\n const response = await sendHttpRequest({\r\n url: `/sdk/v1/agent/${botId}/info`,\r\n method: 'GET',\r\n });\r\n\r\n if (!response.success) {\r\n throw new Error(response.message || '获取智能体信息失败');\r\n }\r\n\r\n return response.data;\r\n } catch (error) {\r\n console.error('获取智能体信息失败:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 文件上传响应数据接口\r\n */\r\nexport interface FileUploadResponse {\r\n /** 文件在对象存储中的唯一标识符 */\r\n cos_key: string;\r\n /** 文件名称 */\r\n file_name: string;\r\n /** 文件大小 */\r\n file_size: any;\r\n /** 文件扩展名 */\r\n ext: string;\r\n}\r\n\r\nexport enum FileUploadState {\r\n Init = 'init',\r\n Uploading = 'uploading',\r\n Success = 'success',\r\n Failed = 'failed',\r\n}\r\n\r\nexport interface FileUploadResponseWithState {\r\n file?: File;\r\n file_name?: string;\r\n file_size?: number;\r\n state: FileUploadState;\r\n ext?: string;\r\n cos_key?: string;\r\n error?: Error;\r\n}\r\n\r\n/**\r\n * 计算文件的SHA256哈希值\r\n * @param file 要计算哈希值的文件\r\n * @returns Promise<string> 返回文件的SHA256哈希值\r\n */\r\nexport const calculateFileSHA256 = async (file: File): Promise<string> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = async e => {\r\n try {\r\n const arrayBuffer = e.target?.result as ArrayBuffer;\r\n const hashBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\r\n resolve(hashHex);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n };\r\n reader.onerror = () => reject(new Error('读取文件失败'));\r\n reader.readAsArrayBuffer(file);\r\n });\r\n};\r\n\r\n/**\r\n * 带重试机制的文件上传请求\r\n * @param url 上传URL\r\n * @param file 要上传的文件\r\n * @param contentType 内容类型\r\n * @param maxRetries 最大重试次数\r\n * @returns Promise<Response>\r\n */\r\nexport const uploadFileWithRetry = async (\r\n url: string,\r\n file: File,\r\n contentType: string = 'application/octet-stream',\r\n maxRetries: number = 2\r\n): Promise<Response> => {\r\n let retries = 0;\r\n\r\n while (true) {\r\n try {\r\n const response = await fetchWithTimeout(url, {\r\n method: 'PUT',\r\n body: file, // 直接发送文件内容,不使用FormData\r\n headers: {\r\n 'Content-Type': contentType,\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`文件上传失败: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n return response;\r\n } catch (error) {\r\n retries++;\r\n console.error(`文件上传错误(尝试 ${retries}/${maxRetries}):`, error);\r\n\r\n // 如果已达到最大重试次数,则抛出错误\r\n if (retries >= maxRetries) {\r\n throw error;\r\n }\r\n\r\n // 重试前延迟,每次重试增加延迟时间\r\n const delayTime = 1000 * retries;\r\n syncDelay(delayTime);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * 通过后端API上传文件\r\n * @param file 要上传的文件\r\n * @param headers 可选的请求头\r\n * @param params 可选的额外参数\r\n * @returns Promise 包含上传结果\r\n */\r\nexport const uploadFileToBackend = async (file: File, headers?: Record<string, string>, params?: Record<string, any>): Promise<FileUploadResponse> => {\r\n try {\r\n // 计算文件的SHA256哈希值\r\n const sha256 = await calculateFileSHA256(file);\r\n\r\n // 第一步:获取腾讯云上传URL\r\n const uploadUrlResponse = await sendHttpRequest<{\r\n upload_url: string;\r\n content_type: string;\r\n filetype: string;\r\n is_deleted: number;\r\n cos: {\r\n cos_key: string;\r\n };\r\n filename: string;\r\n filesize: string;\r\n }>({\r\n url: '/sdk/v1/files/generate-upload-url',\r\n method: 'POST',\r\n data: {\r\n ...params,\r\n filename: file.name,\r\n filesize: file.size,\r\n sha256: sha256,\r\n },\r\n headers,\r\n });\r\n\r\n if (!uploadUrlResponse.success || !uploadUrlResponse.data) {\r\n throw new Error(uploadUrlResponse.message || '获取上传URL失败');\r\n }\r\n const generate = uploadUrlResponse.data;\r\n\r\n if (generate.is_deleted != 1) {\r\n // 第二步:使用带重试机制的方法上传文件到腾讯云\r\n const uploadResponse = await uploadFileWithRetry(\r\n generate.upload_url,\r\n file,\r\n generate.content_type || 'application/octet-stream'\r\n );\r\n\r\n if (!uploadResponse.ok) {\r\n throw new Error(`文件上传到腾讯云失败: ${uploadResponse.status} ${uploadResponse.statusText}`);\r\n }\r\n\r\n // 第三步:标记上传完成\r\n sendHttpRequest({\r\n url: '/sdk/v1/files/mark-as-upload',\r\n method: 'POST',\r\n data: {\r\n cos_key: generate.cos.cos_key,\r\n },\r\n headers,\r\n });\r\n }\r\n\r\n // 返回文件信息\r\n return {\r\n cos_key: generate.cos.cos_key,\r\n file_name: generate.filename,\r\n file_size: generate.filesize,\r\n ext: generate.filetype,\r\n };\r\n } catch (error) {\r\n console.error('文件上传错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 合成语音音频\r\n * @param text 要转换为语音的文本\r\n * @param token API密钥(可选,如果不提供则从 authStore 获取)\r\n * @param isRetry 是否为重试请求\r\n * @returns Promise<string> 返回音频的Blob URL\r\n */\r\nexport const synthesizeAudio = async (text: string, token?: string, isRetry = false): Promise<string> => {\r\n // 如果没有提供 token,则从 authStore 获取\r\n const effectiveToken = token || getEffectiveToken();\r\n\r\n if (!effectiveToken) {\r\n throw new Error('API密钥不能为空');\r\n }\r\n\r\n try {\r\n const response = await fetchWithTimeout(`${API_DOMAIN}/sdk/v1/tts/synthesize_audio`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'authorization': 'Bearer ' + effectiveToken,\r\n },\r\n body: JSON.stringify({ text }),\r\n });\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n\r\n // 如果不是重试请求,则使用同步延迟500毫秒后重试一次\r\n if (!isRetry) {\r\n syncDelay(500); // 阻塞式延迟\r\n return synthesizeAudio(text, token, true);\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error('语音合成失败');\r\n }\r\n\r\n // 获取音频数据并创建Blob URL\r\n const audioBlob = await response.blob();\r\n return URL.createObjectURL(audioBlob);\r\n } catch (error) {\r\n console.error('语音合成错误:', error);\r\n\r\n // 如果是超时错误且不是重试请求,则重试一次\r\n if (!isRetry) {\r\n console.log('语音合成请求超时,正在重试...');\r\n syncDelay(1000); // 延迟1秒后重试\r\n return synthesizeAudio(text, token, true);\r\n }\r\n\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 获取COS文件的预签名URL\r\n * @param cosKey COS文件key\r\n * @param headers 可选的请求头\r\n * @returns Promise<string | null> 返回预签名URL,失败时返回null\r\n */\r\nexport const getCosPresignedUrl = async (cosKey: string, headers?: Record<string, string>): Promise<string | null> => {\r\n try {\r\n const response = await sendHttpRequest<{ file_url: string }>({\r\n url: '/sdk/v1/files/presigned-url',\r\n method: 'GET',\r\n params: {\r\n cos_key: cosKey\r\n },\r\n headers\r\n });\r\n\r\n if (response.success && response.data?.file_url) {\r\n return response.data.file_url;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('获取预签名URL失败:', error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * 获取COS文件的预览URL(用于文档预览)\r\n * @param cosKey COS文件key\r\n * @param headers 可选的请求头\r\n * @returns Promise<string | null> 返回预览URL,失败时返回null\r\n */\r\nexport const getCosPreviewUrl = async (cosKey: string, headers?: Record<string, string>): Promise<string | null> => {\r\n try {\r\n const fileUrl = await getCosPresignedUrl(cosKey, headers);\r\n if (fileUrl) {\r\n return `${fileUrl}${fileUrl.includes('?') ? '&' : '?'}ci-process=doc-preview©able=1&dstType=html`;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('获取预览URL失败:', error);\r\n return null;\r\n }\r\n};\r\n\r\n\r\n/**\r\n * 格式化文件大小\r\n * @param size 文件大小(单位B)\r\n * @returns 格式化后的文件大小字符串,如 \"12.3MB\"\r\n */\r\n\r\nexport const formatFileSize = (size?: number) => {\r\n if (!size && size !== 0) {\r\n return null;\r\n }\r\n const numSize = Number(size);\r\n if (isNaN(numSize)) return null;\r\n if (size < 1024) {\r\n return size + \"B\";\r\n }\r\n if (size < 1024 * 1024) {\r\n return (size / 1024).toFixed(1) + \"KB\";\r\n }\r\n return (size / 1024 / 1024).toFixed(1) + \"MB\";\r\n};\r\n\r\n/**\r\n * 判断当前设备是PC还是移动端\r\n * @returns {boolean} true表示是移动端,false表示是PC端\r\n */\r\nexport const isMobile = (): boolean => {\r\n let isMobileFlag = false;\r\n if (!isMobileFlag) {\r\n isMobileFlag = window.innerWidth < 768;\r\n }\r\n\r\n return isMobileFlag;\r\n}\r\n\r\n/**\r\n * 检测浏览器支持的视频录制MIME类型\r\n * @returns string 支持的MIME类型,如果没有找到则返回空字符串\r\n */\r\nexport const getSupportedMimeType = (): string => {\r\n // 按优先级排列的MIME类型列表\r\n const mimeTypes = [\r\n 'video/webm;codecs=vp8,opus',\r\n 'video/webm;codecs=vp9,opus',\r\n 'video/webm',\r\n 'video/mp4',\r\n 'video/mp4;codecs=h264,aac',\r\n '', // 空字符串表示使用浏览器默认值\r\n ];\r\n\r\n // 检查MediaRecorder是否可用\r\n if (!window.MediaRecorder) {\r\n console.warn('MediaRecorder API不可用');\r\n return '';\r\n }\r\n\r\n // 检查每种MIME类型是否受支持\r\n for (const type of mimeTypes) {\r\n if (!type) return ''; // 如果是空字符串,直接返回\r\n\r\n try {\r\n if (MediaRecorder.isTypeSupported(type)) {\r\n return type;\r\n }\r\n } catch (e) {\r\n console.warn(`检查MIME类型支持时出错 ${type}:`, e);\r\n }\r\n }\r\n\r\n // 如果没有找到支持的类型,返回空字符串\r\n console.warn('没有找到支持的MIME类型,将使用浏览器默认值');\r\n return '';\r\n};\r\n\r\n/**\r\n * 检测浏览器支持的音频录制MIME类型\r\n * @returns string 支持的MIME类型,如果没有找到则返回空字符串\r\n */\r\nexport const getSupportedAudioMimeType = (): string => {\r\n // 按优先级排列的音频MIME类型列表\r\n const mimeTypes = [\r\n 'audio/webm;codecs=opus',\r\n 'audio/webm',\r\n 'audio/mp4',\r\n 'audio/ogg;codecs=opus',\r\n 'audio/ogg',\r\n '', // 空字符串表示使用浏览器默认值\r\n ];\r\n\r\n // 检查MediaRecorder是否可用\r\n if (!window.MediaRecorder) {\r\n console.warn('MediaRecorder API不可用');\r\n return '';\r\n }\r\n\r\n // 检查每种MIME类型是否受支持\r\n for (const type of mimeTypes) {\r\n if (!type) return ''; // 如果是空字符串,直接返回\r\n\r\n try {\r\n if (MediaRecorder.isTypeSupported(type)) {\r\n return type;\r\n }\r\n } catch (e) {\r\n console.warn(`检查音频MIME类型支持时出错 ${type}:`, e);\r\n }\r\n }\r\n\r\n // 如果没有找到支持的类型,返回空字符串\r\n console.warn('没有找到支持的音频MIME类型,将使用浏览器默认值');\r\n return '';\r\n};\r\n\r\n/**\r\n * 将音频转换为文字\r\n * @param cosKey COS文件的唯一标识符\r\n * @returns Promise<string | null> 转换后的文字,失败时返回null\r\n */\r\nexport const convertAudioToText = async (cosKey: string): Promise<string | null> => {\r\n try {\r\n const result = await sendHttpRequest<{ text: string }>({\r\n url: '/sdk/v1/tts/audio_to_text',\r\n method: 'POST',\r\n data: {\r\n cos_key: cosKey,\r\n },\r\n });\r\n\r\n if (result.success && result.data && result.data.text) {\r\n return result.data.text;\r\n } else {\r\n console.warn('音频转文字返回结果格式不正确');\r\n return null;\r\n }\r\n } catch (error) {\r\n console.error('音频转文字错误:', error);\r\n throw new Error('音频转文字失败');\r\n }\r\n};\r\n\r\n/**\r\n * 发送短信验证码\r\n * @param mobile 手机号\r\n * @param codeType 验证码类型,默认为0\r\n * @returns Promise<HttpResponse> 发送结果\r\n */\r\nexport const sendSmsCode = async (mobile: string, codeType: number = 0): Promise<HttpResponse> => {\r\n try {\r\n const response = await sendHttpRequest({\r\n url: '/sdk/v1/send_sms_code',\r\n method: 'POST',\r\n data: {\r\n mobile,\r\n code_type: codeType,\r\n },\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('发送短信验证码错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 校验短信验证码\r\n * @param mobile 手机号\r\n * @param code 验证码\r\n * @param codeType 验证码类型,默认为0\r\n * @returns Promise<HttpResponse> 校验结果\r\n */\r\nexport const verifySmsCode = async (mobile: string, code: string, codeType: number = 0): Promise<HttpResponse> => {\r\n try {\r\n const response = await sendHttpRequest({\r\n url: '/sdk/v1/verify_sms_code',\r\n method: 'POST',\r\n params: {\r\n mobile,\r\n code,\r\n code_type: codeType,\r\n },\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('校验短信验证码错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 职位信息接口\r\n */\r\nexport interface Position {\r\n id: number;\r\n title: string;\r\n company_name: string;\r\n company_id: number;\r\n department: string;\r\n employment_type: string;\r\n salary_range: string;\r\n salary_min: number | null;\r\n salary_max: number | null;\r\n location: string;\r\n province: string | null;\r\n city: string | null;\r\n district: string | null;\r\n address: string;\r\n education_required: string;\r\n experience_required: string;\r\n recruiting_number: number;\r\n job_description: string;\r\n job_responsibilities: string;\r\n job_requirements: string;\r\n skills_required: string;\r\n benefits: string;\r\n job_type: string;\r\n work_experience: string;\r\n work_industry: string;\r\n recruitment_channel: string | null;\r\n deadline: string | null;\r\n status: number;\r\n source_type: string;\r\n}\r\n\r\n/**\r\n * OEM职位列表响应接口\r\n */\r\nexport interface OemPositionsResponse {\r\n total: number;\r\n page: number;\r\n page_size: number;\r\n items: Position[];\r\n source_type: string;\r\n source_id: number;\r\n}\r\n\r\n/**\r\n * 获取OEM职位列表的参数接口\r\n */\r\nexport interface GetOemPositionsParams {\r\n oemId: string;\r\n page?: number;\r\n pageSize?: number;\r\n keyword?: string;\r\n}\r\n\r\n/**\r\n * 获取OEM职位列表\r\n * @param params 获取职位列表的参数\r\n * @returns Promise<HttpResponse<OemPositionsResponse>> 职位列表\r\n */\r\nexport const getOemPositions = async (params: GetOemPositionsParams): Promise<HttpResponse<OemPositionsResponse>> => {\r\n const { oemId, page = 1, pageSize = 10, keyword } = params;\r\n\r\n try {\r\n // 构建查询参数\r\n const queryParams = new URLSearchParams();\r\n queryParams.append('page', page.toString());\r\n queryParams.append('page_size', pageSize.toString());\r\n if (keyword) {\r\n queryParams.append('keyword', keyword);\r\n }\r\n\r\n const response = await sendHttpRequest<OemPositionsResponse>({\r\n url: `/sdk/v1/oem/${oemId}/positions?${queryParams.toString()}`,\r\n method: 'GET',\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('获取OEM职位列表错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 通过URL上传文件参数接口\r\n */\r\nexport interface UploadFileByUrlParams {\r\n /** 文件URL */\r\n url: string;\r\n /** 文件名称 */\r\n file_name: string;\r\n}\r\n\r\n/**\r\n * 通过URL上传文件\r\n * @param params 上传参数\r\n * @param headers 可选的请求头\r\n * @returns Promise<HttpResponse<FileUploadResponse>> 上传结果\r\n */\r\nexport const uploadFileByUrl = async (\r\n params: UploadFileByUrlParams,\r\n headers?: Record<string, string>\r\n): Promise<HttpResponse<FileUploadResponse>> => {\r\n try {\r\n const response = await sendHttpRequest<FileUploadResponse>({\r\n url: '/sdk/v1/files/upload-by-url',\r\n method: 'POST',\r\n data: params,\r\n headers,\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('通过URL上传文件错误:', error);\r\n throw error;\r\n }\r\n};"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// 导入环境变量\r\nimport { API_DOMAIN, PCM_DOMAIN } from './env';\r\nimport { authStore } from '../../store/auth.store'; // 导入 authStore\r\nimport { configStore } from '../../store/config.store';\r\nimport { version } from '../../package.json';\r\n\r\nexport { API_DOMAIN, PCM_DOMAIN };\r\n\r\nexport function format(first?: string, middle?: string, last?: string): string {\r\n return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');\r\n}\r\n\r\n// 添加类型定义\r\nexport interface UserInputMessageType {\r\n message: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface WorkFlowNode {\r\n message_id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n event?: string;\r\n answer?: string;\r\n data?: {\r\n outputs?: {\r\n answer?: string;\r\n };\r\n status?: string;\r\n error?: any;\r\n };\r\n}\r\n\r\nexport interface MessageRound extends UserInputMessageType {\r\n id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n answer?: string;\r\n status?: string;\r\n error?: any;\r\n}\r\n\r\n\r\n/**\r\n * SSE 流式请求配置接口\r\n */\r\nexport interface SSERequestConfig {\r\n url: string;\r\n method: string;\r\n headers?: Record<string, string>;\r\n data?: any;\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 同步延迟函数,阻塞主线程指定的毫秒数\r\n * @param ms 延迟的毫秒数\r\n */\r\nconst syncDelay = (ms: number) => {\r\n const start = Date.now();\r\n while (Date.now() - start < ms) {\r\n // 空循环,阻塞主线程\r\n }\r\n};\r\n\r\n/**\r\n * 获取有效的 token,从 authStore 中获取\r\n * @returns string 有效的 token\r\n */\r\nexport const getEffectiveToken = (): string => {\r\n return authStore.getToken() || '';\r\n};\r\n\r\n/**\r\n * 请求超时时间(毫秒)\r\n */\r\nconst REQUEST_TIMEOUT = 3 * 60 * 1000; // 3分钟\r\n\r\n/**\r\n * 创建带超时的 fetch 请求\r\n * @param url 请求URL\r\n * @param options fetch选项\r\n * @param timeout 超时时间(毫秒)\r\n * @returns Promise<Response>\r\n */\r\nconst fetchWithTimeout = async (url: string, options: RequestInit, timeout: number = REQUEST_TIMEOUT): Promise<Response> => {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n ...options,\r\n signal: controller.signal,\r\n });\r\n clearTimeout(timeoutId);\r\n return response;\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n if (error instanceof Error && error.name === 'AbortError') {\r\n throw new Error('请求超时,请检查网络连接后重试');\r\n }\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 发送 SSE 流式请求\r\n * @param config 请求配置\r\n * @param isRetry 是否为重试请求\r\n * @returns Promise<void>\r\n */\r\nexport const sendSSERequest = async (config: SSERequestConfig, isRetry = false): Promise<void> => {\r\n const { url, method, headers = {}, data, onMessage, onError, onComplete } = config;\r\n\r\n try {\r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n const requestUrl = `${API_DOMAIN}${url}`;\r\n\r\n // 如果没有提供 Authorization 头,则从 authStore 获取 token\r\n if (!headers['authorization'] && !headers['Authorization']) {\r\n const token = getEffectiveToken();\r\n if (token) {\r\n headers['authorization'] = `Bearer ${token}`;\r\n }\r\n }\r\n\r\n const response = await fetchWithTimeout(requestUrl, {\r\n method,\r\n headers: {\r\n 'Accept': 'text/event-stream',\r\n 'Content-Type': 'application/json',\r\n ...headers,\r\n },\r\n body: data ? JSON.stringify(data) : undefined,\r\n });\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n\r\n // 如果不是重试请求,则使用同步延迟500毫秒后重试一次\r\n if (!isRetry) {\r\n syncDelay(500); // 阻塞式延迟\r\n return sendSSERequest(config, true);\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n console.error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const reader = response.body?.getReader();\r\n if (!reader) throw new Error('No reader available');\r\n\r\n const decoder = new TextDecoder();\r\n let buffer = '';\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n // 处理缓冲区中的完整消息\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop() || ''; // 保留最后一个不完整的行\r\n\r\n for (const line of lines) {\r\n if (line.startsWith('data:')) {\r\n try {\r\n const jsonStr = line.substring(5).trim();\r\n if (!jsonStr) continue;\r\n\r\n const data = JSON.parse(jsonStr);\r\n onMessage?.(data);\r\n } catch (e) {\r\n console.error('解析 SSE 数据错误:', e, '原始数据:', line);\r\n }\r\n }\r\n }\r\n }\r\n\r\n onComplete?.();\r\n } catch (error) {\r\n console.error('SSE 请求错误:', error);\r\n\r\n // 如果是超时错误且不是重试请求,则重试一次\r\n if (!isRetry) {\r\n console.log('SSE请求超时,正在重试...');\r\n syncDelay(1000); // 延迟1秒后重试\r\n return sendSSERequest(config, true);\r\n }\r\n\r\n onError?.(error);\r\n }\r\n};\r\n\r\n/**\r\n * HTTP请求配置接口\r\n */\r\nexport interface HttpRequestConfig {\r\n url: string;\r\n method?: string;\r\n headers?: Record<string, string>;\r\n params?: Record<string, any>;\r\n data?: any;\r\n formData?: FormData; // 添加FormData支持\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 统一的API响应接口\r\n */\r\nexport interface ApiResponse<T = any> {\r\n code: number;\r\n message: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * HTTP响应接口\r\n */\r\nexport interface HttpResponse<T = any> {\r\n success: boolean;\r\n data?: T;\r\n error?: any;\r\n message?: string;\r\n}\r\n\r\n// 添加一个全局事件发射器用于处理401错误\r\nexport const createTokenInvalidEvent = () => {\r\n const event = new CustomEvent('pcm-token-invalid', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { timestamp: new Date().getTime() },\r\n });\r\n document.dispatchEvent(event);\r\n};\r\n\r\n/**\r\n * 发送HTTP请求\r\n * @param config 请求配置\r\n * @param isRetry 是否为重试请求\r\n * @returns Promise<HttpResponse>\r\n */\r\nexport const sendHttpRequest = async <T = any>(config: HttpRequestConfig, isRetry = true): Promise<HttpResponse<T>> => {\r\n const { url, method = 'GET', headers = {}, params = {}, data, formData, onMessage } = config;\r\n\r\n try {\r\n // 构建URL和查询参数\r\n const queryParams = new URLSearchParams();\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n queryParams.append(key, String(value));\r\n }\r\n });\r\n\r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n let requestUrl = `${API_DOMAIN}${url}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\r\n // 如果没有提供 Authorization 头,则从 authStore 获取 token\r\n if (headers['authorization'] == undefined && headers['Authorization'] == undefined) {\r\n const token = getEffectiveToken();\r\n\r\n if (token) {\r\n headers['authorization'] = `Bearer ${token}`;\r\n }\r\n }\r\n\r\n // 创建请求配置对象\r\n const requestConfig: RequestInit = {\r\n method,\r\n headers: formData\r\n ? { ...headers }\r\n : {\r\n 'Content-Type': 'application/json',\r\n ...headers,\r\n },\r\n };\r\n\r\n // 处理请求体\r\n if (formData) {\r\n // 如果提供了FormData,直接使用\r\n requestConfig.body = formData;\r\n } else if (method !== 'GET' && method !== 'HEAD' && data) {\r\n // 否则,如果是非GET/HEAD请求且有data,将其JSON序列化\r\n requestConfig.body = JSON.stringify(data);\r\n }\r\n\r\n // 如果是 GET 方法且有 data,将其作为查询参数添加到 URL\r\n if (method === 'GET' && data) {\r\n const dataParams = new URLSearchParams();\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n dataParams.append(key, String(value));\r\n }\r\n });\r\n requestUrl += (queryParams.toString() ? '&' : '?') + dataParams.toString();\r\n }\r\n\r\n const response = await fetchWithTimeout(requestUrl, requestConfig);\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n\r\n // 重试请求\r\n if (isRetry) {\r\n syncDelay(500); // 阻塞式延迟\r\n return sendHttpRequest(config, false);\r\n }\r\n }\r\n\r\n const responseData: ApiResponse<T> = await response.json();\r\n\r\n // 调用 onMessage 回调\r\n if (onMessage) {\r\n onMessage(responseData);\r\n }\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\r\n return {\r\n success: false,\r\n message: responseData.message || `HTTP错误: ${response.status}`,\r\n error: responseData,\r\n };\r\n }\r\n\r\n // 检查业务状态码\r\n if (responseData.code !== 0) {\r\n console.error(`API错误: ${responseData.message}`);\r\n return {\r\n success: false,\r\n message: responseData.message,\r\n error: responseData,\r\n };\r\n }\r\n\r\n // 直接返回data\r\n return {\r\n success: true,\r\n data: responseData.data,\r\n };\r\n } catch (error) {\r\n console.error('HTTP请求错误:', error);\r\n\r\n // 如果是超时错误且允许重试,则重试一次\r\n if (isRetry) {\r\n console.log('HTTP请求超时,正在重试...');\r\n syncDelay(1000); // 延迟1秒后重试\r\n return sendHttpRequest(config, false);\r\n }\r\n\r\n if (config.onError) {\r\n config.onError(error);\r\n }\r\n return {\r\n success: false,\r\n error,\r\n message: error instanceof Error ? error.message : '未知错误',\r\n };\r\n } finally {\r\n if (config.onComplete) {\r\n config.onComplete();\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * 验证API密钥\r\n * @param token API密钥\r\n * @returns Promise<boolean> 验证是否成功\r\n */\r\nexport const verifyApiKey = async (token: string): Promise<boolean> => {\r\n const response = await sendHttpRequest(\r\n {\r\n url: '/sdk/v1/user',\r\n method: 'GET',\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n data: {\r\n sdk_version: version,\r\n },\r\n },\r\n false,\r\n );\r\n\r\n // 如果是401错误,同步延迟500毫秒后返回\r\n if (!response.success && response.error && response.error.code === 401) {\r\n // 执行同步延迟\r\n syncDelay(500);\r\n return false;\r\n } else {\r\n\r\n configStore.setItem('pcm-sdk-CUser', `${response.data.user}(${response.data.chat_user})`);\r\n return response.success;\r\n }\r\n};\r\n\r\n/**\r\n * 获取智能体信息\r\n * @param botId 智能体ID\r\n * @returns Promise<any> 智能体信息数据\r\n */\r\nexport const fetchAgentInfo = async (botId: string): Promise<any> => {\r\n if (!botId) {\r\n throw new Error('智能体ID不能为空');\r\n }\r\n\r\n try {\r\n const response = await sendHttpRequest({\r\n url: `/sdk/v1/agent/${botId}/info`,\r\n method: 'GET',\r\n });\r\n\r\n if (!response.success) {\r\n throw new Error(response.message || '获取智能体信息失败');\r\n }\r\n\r\n return response.data;\r\n } catch (error) {\r\n console.error('获取智能体信息失败:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 文件上传响应数据接口\r\n */\r\nexport interface FileUploadResponse {\r\n /** 文件在对象存储中的唯一标识符 */\r\n cos_key: string;\r\n /** 文件名称 */\r\n file_name: string;\r\n /** 文件大小 */\r\n file_size: any;\r\n /** 文件扩展名 */\r\n ext: string;\r\n}\r\n\r\nexport enum FileUploadState {\r\n Init = 'init',\r\n Uploading = 'uploading',\r\n Success = 'success',\r\n Failed = 'failed',\r\n}\r\n\r\nexport interface FileUploadResponseWithState {\r\n file?: File;\r\n file_name?: string;\r\n file_size?: number;\r\n state: FileUploadState;\r\n ext?: string;\r\n cos_key?: string;\r\n error?: Error;\r\n}\r\n\r\n/**\r\n * 计算文件的SHA256哈希值\r\n * @param file 要计算哈希值的文件\r\n * @returns Promise<string> 返回文件的SHA256哈希值\r\n */\r\nexport const calculateFileSHA256 = async (file: File): Promise<string> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = async e => {\r\n try {\r\n const arrayBuffer = e.target?.result as ArrayBuffer;\r\n const hashBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\r\n resolve(hashHex);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n };\r\n reader.onerror = () => reject(new Error('读取文件失败'));\r\n reader.readAsArrayBuffer(file);\r\n });\r\n};\r\n\r\n/**\r\n * 带重试机制的文件上传请求\r\n * @param url 上传URL\r\n * @param file 要上传的文件\r\n * @param contentType 内容类型\r\n * @param maxRetries 最大重试次数\r\n * @returns Promise<Response>\r\n */\r\nexport const uploadFileWithRetry = async (\r\n url: string,\r\n file: File,\r\n contentType: string = 'application/octet-stream',\r\n maxRetries: number = 2\r\n): Promise<Response> => {\r\n let retries = 0;\r\n\r\n while (true) {\r\n try {\r\n const response = await fetchWithTimeout(url, {\r\n method: 'PUT',\r\n body: file, // 直接发送文件内容,不使用FormData\r\n headers: {\r\n 'Content-Type': contentType,\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`文件上传失败: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n return response;\r\n } catch (error) {\r\n retries++;\r\n console.error(`文件上传错误(尝试 ${retries}/${maxRetries}):`, error);\r\n\r\n // 如果已达到最大重试次数,则抛出错误\r\n if (retries >= maxRetries) {\r\n throw error;\r\n }\r\n\r\n // 重试前延迟,每次重试增加延迟时间\r\n const delayTime = 1000 * retries;\r\n syncDelay(delayTime);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * 通过后端API上传文件\r\n * @param file 要上传的文件\r\n * @param headers 可选的请求头\r\n * @param params 可选的额外参数\r\n * @returns Promise 包含上传结果\r\n */\r\nexport const uploadFileToBackend = async (file: File, headers?: Record<string, string>, params?: Record<string, any>): Promise<FileUploadResponse> => {\r\n try {\r\n // 计算文件的SHA256哈希值\r\n const sha256 = await calculateFileSHA256(file);\r\n\r\n // 第一步:获取腾讯云上传URL\r\n const uploadUrlResponse = await sendHttpRequest<{\r\n upload_url: string;\r\n content_type: string;\r\n filetype: string;\r\n is_deleted: number;\r\n cos: {\r\n cos_key: string;\r\n };\r\n filename: string;\r\n filesize: string;\r\n }>({\r\n url: '/sdk/v1/files/generate-upload-url',\r\n method: 'POST',\r\n data: {\r\n ...params,\r\n filename: file.name,\r\n filesize: file.size,\r\n sha256: sha256,\r\n },\r\n headers,\r\n });\r\n\r\n if (!uploadUrlResponse.success || !uploadUrlResponse.data) {\r\n throw new Error(uploadUrlResponse.message || '获取上传URL失败');\r\n }\r\n const generate = uploadUrlResponse.data;\r\n\r\n if (generate.is_deleted != 1) {\r\n // 第二步:使用带重试机制的方法上传文件到腾讯云\r\n const uploadResponse = await uploadFileWithRetry(\r\n generate.upload_url,\r\n file,\r\n generate.content_type || 'application/octet-stream'\r\n );\r\n\r\n if (!uploadResponse.ok) {\r\n throw new Error(`文件上传到腾讯云失败: ${uploadResponse.status} ${uploadResponse.statusText}`);\r\n }\r\n\r\n // 第三步:标记上传完成\r\n sendHttpRequest({\r\n url: '/sdk/v1/files/mark-as-upload',\r\n method: 'POST',\r\n data: {\r\n cos_key: generate.cos.cos_key,\r\n },\r\n headers,\r\n });\r\n }\r\n\r\n // 返回文件信息\r\n return {\r\n cos_key: generate.cos.cos_key,\r\n file_name: generate.filename,\r\n file_size: generate.filesize,\r\n ext: generate.filetype,\r\n };\r\n } catch (error) {\r\n console.error('文件上传错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 合成语音音频\r\n * @param text 要转换为语音的文本\r\n * @param token API密钥(可选,如果不提供则从 authStore 获取)\r\n * @param isRetry 是否为重试请求\r\n * @returns Promise<string> 返回音频的Blob URL\r\n */\r\nexport const synthesizeAudio = async (text: string, token?: string, isRetry = false): Promise<string> => {\r\n // 如果没有提供 token,则从 authStore 获取\r\n const effectiveToken = token || getEffectiveToken();\r\n\r\n if (!effectiveToken) {\r\n throw new Error('API密钥不能为空');\r\n }\r\n\r\n try {\r\n const response = await fetchWithTimeout(`${API_DOMAIN}/sdk/v1/tts/synthesize_audio`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'authorization': 'Bearer ' + effectiveToken,\r\n },\r\n body: JSON.stringify({ text }),\r\n });\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n\r\n // 如果不是重试请求,则使用同步延迟500毫秒后重试一次\r\n if (!isRetry) {\r\n syncDelay(500); // 阻塞式延迟\r\n return synthesizeAudio(text, token, true);\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error('语音合成失败');\r\n }\r\n\r\n // 获取音频数据并创建Blob URL\r\n const audioBlob = await response.blob();\r\n return URL.createObjectURL(audioBlob);\r\n } catch (error) {\r\n console.error('语音合成错误:', error);\r\n\r\n // 如果是超时错误且不是重试请求,则重试一次\r\n if (!isRetry) {\r\n console.log('语音合成请求超时,正在重试...');\r\n syncDelay(1000); // 延迟1秒后重试\r\n return synthesizeAudio(text, token, true);\r\n }\r\n\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 获取COS文件的预签名URL\r\n * @param cosKey COS文件key\r\n * @param headers 可选的请求头\r\n * @returns Promise<string | null> 返回预签名URL,失败时返回null\r\n */\r\nexport const getCosPresignedUrl = async (cosKey: string, headers?: Record<string, string>): Promise<string | null> => {\r\n try {\r\n const response = await sendHttpRequest<{ file_url: string }>({\r\n url: '/sdk/v1/files/presigned-url',\r\n method: 'GET',\r\n params: {\r\n cos_key: cosKey\r\n },\r\n headers\r\n });\r\n\r\n if (response.success && response.data?.file_url) {\r\n return response.data.file_url;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('获取预签名URL失败:', error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * 获取COS文件的预览URL(用于文档预览)\r\n * @param cosKey COS文件key\r\n * @param headers 可选的请求头\r\n * @returns Promise<string | null> 返回预览URL,失败时返回null\r\n */\r\nexport const getCosPreviewUrl = async (cosKey: string, headers?: Record<string, string>): Promise<string | null> => {\r\n try {\r\n const fileUrl = await getCosPresignedUrl(cosKey, headers);\r\n if (fileUrl) {\r\n return `${fileUrl}${fileUrl.includes('?') ? '&' : '?'}ci-process=doc-preview©able=1&dstType=html`;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('获取预览URL失败:', error);\r\n return null;\r\n }\r\n};\r\n\r\n\r\n/**\r\n * 格式化文件大小\r\n * @param size 文件大小(单位B)\r\n * @returns 格式化后的文件大小字符串,如 \"12.3MB\"\r\n */\r\n\r\nexport const formatFileSize = (size?: number) => {\r\n if (!size && size !== 0) {\r\n return null;\r\n }\r\n const numSize = Number(size);\r\n if (isNaN(numSize)) return null;\r\n if (size < 1024) {\r\n return size + \"B\";\r\n }\r\n if (size < 1024 * 1024) {\r\n return (size / 1024).toFixed(1) + \"KB\";\r\n }\r\n return (size / 1024 / 1024).toFixed(1) + \"MB\";\r\n};\r\n\r\n/**\r\n * 判断当前设备是PC还是移动端\r\n * @returns {boolean} true表示是移动端,false表示是PC端\r\n */\r\nexport const isMobile = (): boolean => {\r\n let isMobileFlag = false;\r\n if (!isMobileFlag) {\r\n isMobileFlag = window.innerWidth < 768;\r\n }\r\n\r\n return isMobileFlag;\r\n}\r\n\r\n/**\r\n * 检测浏览器支持的视频录制MIME类型\r\n * @returns string 支持的MIME类型,如果没有找到则返回空字符串\r\n */\r\nexport const getSupportedMimeType = (): string => {\r\n // 按优先级排列的MIME类型列表\r\n const mimeTypes = [\r\n 'video/webm;codecs=vp8,opus',\r\n 'video/webm;codecs=vp9,opus',\r\n 'video/webm',\r\n 'video/mp4',\r\n 'video/mp4;codecs=h264,aac',\r\n '', // 空字符串表示使用浏览器默认值\r\n ];\r\n\r\n // 检查MediaRecorder是否可用\r\n if (!window.MediaRecorder) {\r\n console.warn('MediaRecorder API不可用');\r\n return '';\r\n }\r\n\r\n // 检查每种MIME类型是否受支持\r\n for (const type of mimeTypes) {\r\n if (!type) return ''; // 如果是空字符串,直接返回\r\n\r\n try {\r\n if (MediaRecorder.isTypeSupported(type)) {\r\n return type;\r\n }\r\n } catch (e) {\r\n console.warn(`检查MIME类型支持时出错 ${type}:`, e);\r\n }\r\n }\r\n\r\n // 如果没有找到支持的类型,返回空字符串\r\n console.warn('没有找到支持的MIME类型,将使用浏览器默认值');\r\n return '';\r\n};\r\n\r\n/**\r\n * 检测浏览器支持的音频录制MIME类型\r\n * @returns string 支持的MIME类型,如果没有找到则返回空字符串\r\n */\r\nexport const getSupportedAudioMimeType = (): string => {\r\n // 按优先级排列的音频MIME类型列表\r\n const mimeTypes = [\r\n 'audio/webm;codecs=opus',\r\n 'audio/webm',\r\n 'audio/mp4',\r\n 'audio/ogg;codecs=opus',\r\n 'audio/ogg',\r\n '', // 空字符串表示使用浏览器默认值\r\n ];\r\n\r\n // 检查MediaRecorder是否可用\r\n if (!window.MediaRecorder) {\r\n console.warn('MediaRecorder API不可用');\r\n return '';\r\n }\r\n\r\n // 检查每种MIME类型是否受支持\r\n for (const type of mimeTypes) {\r\n if (!type) return ''; // 如果是空字符串,直接返回\r\n\r\n try {\r\n if (MediaRecorder.isTypeSupported(type)) {\r\n return type;\r\n }\r\n } catch (e) {\r\n console.warn(`检查音频MIME类型支持时出错 ${type}:`, e);\r\n }\r\n }\r\n\r\n // 如果没有找到支持的类型,返回空字符串\r\n console.warn('没有找到支持的音频MIME类型,将使用浏览器默认值');\r\n return '';\r\n};\r\n\r\n/**\r\n * 将音频转换为文字\r\n * @param cosKey COS文件的唯一标识符\r\n * @returns Promise<string | null> 转换后的文字,失败时返回null\r\n */\r\nexport const convertAudioToText = async (cosKey: string): Promise<string | null> => {\r\n try {\r\n const result = await sendHttpRequest<{ text: string }>({\r\n url: '/sdk/v1/tts/audio_to_text',\r\n method: 'POST',\r\n data: {\r\n cos_key: cosKey,\r\n },\r\n });\r\n\r\n if (result.success && result.data && result.data.text) {\r\n return result.data.text;\r\n } else {\r\n console.warn('音频转文字返回结果格式不正确');\r\n return null;\r\n }\r\n } catch (error) {\r\n console.error('音频转文字错误:', error);\r\n throw new Error('音频转文字失败');\r\n }\r\n};\r\n\r\n/**\r\n * 发送短信验证码\r\n * @param mobile 手机号\r\n * @param codeType 验证码类型,默认为0\r\n * @returns Promise<HttpResponse> 发送结果\r\n */\r\nexport const sendSmsCode = async (mobile: string, codeType: number = 0): Promise<HttpResponse> => {\r\n try {\r\n const response = await sendHttpRequest({\r\n url: '/sdk/v1/send_sms_code',\r\n method: 'POST',\r\n data: {\r\n mobile,\r\n code_type: codeType,\r\n },\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('发送短信验证码错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 校验短信验证码\r\n * @param mobile 手机号\r\n * @param code 验证码\r\n * @param codeType 验证码类型,默认为0\r\n * @param regSourceId 注册来源业务ID,OEM场景传入OEM ID\r\n * @returns Promise<HttpResponse> 校验结果\r\n */\r\nexport const verifySmsCode = async (mobile: string, code: string, codeType: number = 0, regSourceId?: string): Promise<HttpResponse> => {\r\n try {\r\n const response = await sendHttpRequest({\r\n url: '/sdk/v1/verify_sms_code',\r\n method: 'POST',\r\n params: {\r\n mobile,\r\n code,\r\n code_type: codeType,\r\n reg_source: 4,\r\n reg_source_id: regSourceId,\r\n },\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('校验短信验证码错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 职位信息接口\r\n */\r\nexport interface Position {\r\n id: number;\r\n title: string;\r\n company_name: string;\r\n company_id: number;\r\n department: string;\r\n employment_type: string;\r\n salary_range: string;\r\n salary_min: number | null;\r\n salary_max: number | null;\r\n location: string;\r\n province: string | null;\r\n city: string | null;\r\n district: string | null;\r\n address: string;\r\n education_required: string;\r\n experience_required: string;\r\n recruiting_number: number;\r\n job_description: string;\r\n job_responsibilities: string;\r\n job_requirements: string;\r\n skills_required: string;\r\n benefits: string;\r\n job_type: string;\r\n work_experience: string;\r\n work_industry: string;\r\n recruitment_channel: string | null;\r\n deadline: string | null;\r\n status: number;\r\n source_type: string;\r\n}\r\n\r\n/**\r\n * OEM职位列表响应接口\r\n */\r\nexport interface OemPositionsResponse {\r\n total: number;\r\n page: number;\r\n page_size: number;\r\n items: Position[];\r\n source_type: string;\r\n source_id: number;\r\n}\r\n\r\n/**\r\n * 获取OEM职位列表的参数接口\r\n */\r\nexport interface GetOemPositionsParams {\r\n oemId: string;\r\n page?: number;\r\n pageSize?: number;\r\n keyword?: string;\r\n}\r\n\r\n/**\r\n * 获取OEM职位列表\r\n * @param params 获取职位列表的参数\r\n * @returns Promise<HttpResponse<OemPositionsResponse>> 职位列表\r\n */\r\nexport const getOemPositions = async (params: GetOemPositionsParams): Promise<HttpResponse<OemPositionsResponse>> => {\r\n const { oemId, page = 1, pageSize = 10, keyword } = params;\r\n\r\n try {\r\n // 构建查询参数\r\n const queryParams = new URLSearchParams();\r\n queryParams.append('page', page.toString());\r\n queryParams.append('page_size', pageSize.toString());\r\n if (keyword) {\r\n queryParams.append('keyword', keyword);\r\n }\r\n\r\n const response = await sendHttpRequest<OemPositionsResponse>({\r\n url: `/sdk/v1/oem/${oemId}/positions?${queryParams.toString()}`,\r\n method: 'GET',\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('获取OEM职位列表错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 通过URL上传文件参数接口\r\n */\r\nexport interface UploadFileByUrlParams {\r\n /** 文件URL */\r\n url: string;\r\n /** 文件名称 */\r\n file_name: string;\r\n}\r\n\r\n/**\r\n * 通过URL上传文件\r\n * @param params 上传参数\r\n * @param headers 可选的请求头\r\n * @returns Promise<HttpResponse<FileUploadResponse>> 上传结果\r\n */\r\nexport const uploadFileByUrl = async (\r\n params: UploadFileByUrlParams,\r\n headers?: Record<string, string>\r\n): Promise<HttpResponse<FileUploadResponse>> => {\r\n try {\r\n const response = await sendHttpRequest<FileUploadResponse>({\r\n url: '/sdk/v1/files/upload-by-url',\r\n method: 'POST',\r\n data: params,\r\n headers,\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('通过URL上传文件错误:', error);\r\n throw error;\r\n }\r\n};"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsChatMessage$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsChatMessage$1, d as defineCustomElement$1 } from './p-cML-tdcc.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsChatMessage = ComponentsChatMessage$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsDigitalHuman$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsDigitalHuman$1, d as defineCustomElement$1 } from './p-DjY3Uc0V.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsDigitalHuman = ComponentsDigitalHuman$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsExportRecordsModal$1, d as defineCustomElement$1 } from './p
|
|
1
|
+
import { C as ComponentsExportRecordsModal$1, d as defineCustomElement$1 } from './p-CzFTb8J3.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsExportRecordsModal = ComponentsExportRecordsModal$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsMobileInputBtn$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsMobileInputBtn$1, d as defineCustomElement$1 } from './p-D1Zbs1E9.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsMobileInputBtn = ComponentsMobileInputBtn$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsMobileUploadBtn$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsMobileUploadBtn$1, d as defineCustomElement$1 } from './p-5bswLwh6.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsMobileUploadBtn = ComponentsMobileUploadBtn$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsOemVirtualChatModal$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsOemVirtualChatModal$1, d as defineCustomElement$1 } from './p-DoiGRCSv.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsOemVirtualChatModal = ComponentsOemVirtualChatModal$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsPositionSelector$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsPositionSelector$1, d as defineCustomElement$1 } from './p-BV5z8A4a.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsPositionSelector = ComponentsPositionSelector$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsThousandResumeWrapper$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsThousandResumeWrapper$1, d as defineCustomElement$1 } from './p-JbxUsVe3.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsThousandResumeWrapper = ComponentsThousandResumeWrapper$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsUpload$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsUpload$1, d as defineCustomElement$1 } from './p-A7OBthUL.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsUpload = ComponentsUpload$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsVoiceInputBtn$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsVoiceInputBtn$1, d as defineCustomElement$1 } from './p-PVcS8Z81.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsVoiceInputBtn = ComponentsVoiceInputBtn$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
package/dist/components/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { D as DEBUG_BUILD$2, l as logger, g as getFunctionName, G as GLOBAL_OBJ, d as dsnToString, a as getSentryCarrier, n as normalize, S as SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, b as SEMANTIC_ATTRIBUTE_PROFILE_ID, c as dateTimestampInSeconds, m as makeDsn, u as uuid4, e as checkOrSetAlreadyCaught, i as isPrimitive, f as updateSession, r as resolvedSyncPromise, h as DEFAULT_ENVIRONMENT, j as SyncPromise, p as prepareEvent, k as getTraceContextFromScope, o as getDynamicSamplingContextFromScope, q as getCurrentScope, s as getIsolationScope, t as rejectedSyncPromise, v as isParameterizedString, w as showSpanDropWarning, x as merge, y as isThenable, z as isPlainObject, A as consoleSandbox, B as SDK_VERSION, C as getClient, E as getOriginalFunction, F as getEventDescription, H as stringMatchesSomePattern, I as isInstanceOf, J as CONSOLE_LEVELS, K as fill, L as originalConsoleMethods, M as getFramesFromEvent, N as timestampInSeconds, O as isError, P as addNonEnumerableProperty, Q as isRequest, R as getLocationHref, T as markFunctionWrapped, U as withScope, V as addExceptionTypeValue, W as addExceptionMechanism, X as captureException, Y as isErrorEvent$1, Z as isDOMError, _ as isDOMException, $ as isEvent, a0 as normalizeToSize, a1 as extractExceptionKeysForMessage, a2 as isString, a3 as createStackParser, a4 as UNKNOWN_FUNCTION, a5 as htmlTreeAsString, a6 as safeJoin, a7 as getComponentName, a8 as startSession, a9 as captureSession, aa as captureEvent, ab as stackParserFromStackParserOptions } from './p-75J0r72D.js';
|
|
2
2
|
export { g as getAssetPath, r as render, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-CR7WLzmM.js';
|
|
3
|
-
export { f as format } from './p-
|
|
3
|
+
export { f as format } from './p-DUzMuUXg.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Parse a sample rate from a given value.
|