pcm-agents 0.6.11 → 0.6.13
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/error-event-J_ZWIqWF.js +33 -0
- package/dist/cjs/error-event-J_ZWIqWF.js.map +1 -0
- package/dist/cjs/{index-CvEfNyEj.js → index-CRlt8Nv6.js} +53 -3
- package/dist/cjs/index-CRlt8Nv6.js.map +1 -0
- package/dist/cjs/index-WNdOTXnX.js +11068 -0
- package/dist/cjs/index-WNdOTXnX.js.map +1 -0
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/loader.cjs.js +3 -5
- package/dist/cjs/loader.cjs.js.map +1 -1
- package/dist/cjs/message.service-DGUsA-FY.js +135 -0
- package/dist/cjs/message.service-DGUsA-FY.js.map +1 -0
- package/dist/cjs/{pcm-1zhanshi-mnms-modal_17.cjs.entry.js → pcm-1zhanshi-mnms-modal_21.cjs.entry.js} +3276 -216
- package/dist/cjs/pcm-1zhanshi-mnms-modal_21.cjs.entry.js.map +1 -0
- package/dist/cjs/pcm-agents.cjs.js +4 -6
- package/dist/cjs/pcm-agents.cjs.js.map +1 -1
- package/dist/cjs/pcm-message.cjs.entry.js +3 -3
- package/dist/cjs/pcm-message.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-message.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-mnms-video-modal.cjs.entry.js +8 -8
- package/dist/cjs/pcm-mnms-video-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-mnms-video-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-mnms-zp-modal.cjs.entry.js +29 -86
- package/dist/cjs/pcm-mnms-zp-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-mnms-zp-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/{sentry-reporter-BWFtw_aT.js → sentry-reporter-tpI4WdkE.js} +12 -40
- package/dist/cjs/sentry-reporter-tpI4WdkE.js.map +1 -0
- package/dist/collection/collection-manifest.json +5 -1
- package/dist/collection/components/pcm-1zhanshi-mnms-modal/pcm-1zhanshi-mnms-modal.js.map +1 -1
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.css +986 -986
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js +7 -9
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-button/pcm-button.css +199 -199
- package/dist/collection/components/pcm-button/pcm-button.js +6 -6
- package/dist/collection/components/pcm-button/pcm-button.js.map +1 -1
- package/dist/collection/components/pcm-card/pcm-card.css +259 -259
- package/dist/collection/components/pcm-card/pcm-card.js +1 -1
- package/dist/collection/components/pcm-card/pcm-card.js.map +1 -1
- package/dist/collection/components/pcm-chat-message/pcm-chat-message.css +554 -554
- package/dist/collection/components/pcm-chat-message/pcm-chat-message.js +3 -3
- package/dist/collection/components/pcm-chat-message/pcm-chat-message.js.map +1 -1
- package/dist/collection/components/pcm-drawer/pcm-drawer.css +102 -102
- package/dist/collection/components/pcm-drawer/pcm-drawer.js +1 -1
- package/dist/collection/components/pcm-drawer/pcm-drawer.js.map +1 -1
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.css +854 -854
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js +5 -7
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.css +95 -95
- package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.js +1 -1
- package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.js.map +1 -1
- package/dist/collection/components/pcm-hyzj-modal/pcm-hyzj-modal.js +2 -2
- package/dist/collection/components/pcm-hyzj-modal/pcm-hyzj-modal.js.map +1 -1
- package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.css +312 -312
- package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.js +1 -1
- package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.js.map +1 -1
- package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js +2 -2
- package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js.map +1 -1
- package/dist/collection/components/pcm-message/pcm-message.css +64 -64
- package/dist/collection/components/pcm-message/pcm-message.js +2 -2
- package/dist/collection/components/pcm-message/pcm-message.js.map +1 -1
- package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.css +1 -1
- package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.js +2 -2
- package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.js.map +1 -1
- package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js +67 -84
- package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js.map +1 -1
- package/dist/collection/components/pcm-mnms-video-modal/pcm-mnms-video-modal.js +2 -2
- package/dist/collection/components/pcm-mnms-video-modal/pcm-mnms-video-modal.js.map +1 -1
- package/dist/collection/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.js +67 -84
- package/dist/collection/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.js.map +1 -1
- package/dist/collection/components/pcm-mobile-input-btn/pcm-mobile-input-btn.css +140 -0
- package/dist/collection/components/pcm-mobile-input-btn/pcm-mobile-input-btn.js +307 -0
- package/dist/collection/components/pcm-mobile-input-btn/pcm-mobile-input-btn.js.map +1 -0
- package/dist/collection/components/pcm-mobile-input-btn/uploadNumberSDK.js +25 -0
- package/dist/collection/components/pcm-mobile-input-btn/uploadNumberSDK.js.map +1 -0
- package/dist/collection/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.css +127 -0
- package/dist/collection/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.js +350 -0
- package/dist/collection/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.js.map +1 -0
- package/dist/collection/components/pcm-mobile-upload-btn/uploadNumberSDK.js +25 -0
- package/dist/collection/components/pcm-mobile-upload-btn/uploadNumberSDK.js.map +1 -0
- package/dist/collection/components/pcm-msbg-modal/pcm-msbg-modal.js +2 -2
- package/dist/collection/components/pcm-msbg-modal/pcm-msbg-modal.js.map +1 -1
- package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.css +1 -1
- package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.js +2 -2
- package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.js.map +1 -1
- package/dist/collection/components/pcm-time-count-down/pcm-time-count-down.css +0 -0
- package/dist/collection/components/pcm-time-count-down/pcm-time-count-down.js +106 -0
- package/dist/collection/components/pcm-time-count-down/pcm-time-count-down.js.map +1 -0
- package/dist/collection/components/pcm-upload/pcm-upload.css +0 -0
- package/dist/collection/components/pcm-upload/pcm-upload.js +408 -0
- package/dist/collection/components/pcm-upload/pcm-upload.js.map +1 -0
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.css +969 -969
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js +3 -5
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.css +68 -68
- package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js +4 -4
- package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js.map +1 -1
- package/dist/collection/global/global.css +401 -398
- package/dist/collection/global/markdown.css +1233 -1233
- package/dist/collection/global/message.js.map +1 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/interfaces/chat.js.map +1 -1
- package/dist/collection/interfaces/events.js.map +1 -1
- package/dist/collection/services/message.service.js.map +1 -1
- package/dist/collection/utils/env.js +3 -0
- package/dist/collection/utils/env.js.map +1 -1
- package/dist/collection/utils/error-event.js.map +1 -1
- package/dist/collection/utils/init.js.map +1 -1
- package/dist/collection/utils/sentry-reporter.js.map +1 -1
- package/dist/collection/utils/utils.js +48 -24
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/index.js +3 -5482
- package/dist/components/index.js.map +1 -1
- package/dist/components/{p-AYWZDCn8.js → p-B0WOTw9J.js} +51 -4
- package/dist/components/p-B0WOTw9J.js.map +1 -0
- package/dist/components/{p-DUQ46MUh.js → p-BGXbWUJg.js} +3 -3
- package/dist/components/{p-DUQ46MUh.js.map → p-BGXbWUJg.js.map} +1 -1
- package/dist/{esm/sentry-reporter-BFBS363a.js → components/p-BW3r6Lrf.js} +5 -32
- package/dist/components/p-BW3r6Lrf.js.map +1 -0
- package/dist/{esm/app-globals-Chti62re.js → components/p-BdiUKin5.js} +9619 -4296
- package/dist/components/p-BdiUKin5.js.map +1 -0
- package/dist/components/{p-FjtoYPVY.js → p-BywzltXy.js} +10 -9
- package/dist/components/p-BywzltXy.js.map +1 -0
- package/dist/components/p-C2OsjtRx.js +208 -0
- package/dist/components/p-C2OsjtRx.js.map +1 -0
- package/dist/components/{p-D2Z8casl.js → p-CuIvbaWY.js} +5 -5
- package/dist/components/p-CuIvbaWY.js.map +1 -0
- package/dist/components/p-D0ZMoyH8.js +251 -0
- package/dist/components/p-D0ZMoyH8.js.map +1 -0
- package/dist/components/{p-CjbFHLT7.js → p-De3VHEUn.js} +7 -71
- package/dist/components/p-De3VHEUn.js.map +1 -0
- package/dist/components/p-Dv8qvK0w.js +2646 -0
- package/dist/components/p-Dv8qvK0w.js.map +1 -0
- package/dist/components/p-RD3mwuBX.js +226 -0
- package/dist/components/p-RD3mwuBX.js.map +1 -0
- package/dist/components/p-njngFX_n.js +80 -0
- package/dist/components/p-njngFX_n.js.map +1 -0
- package/dist/components/pcm-1zhanshi-mnms-modal.js +7 -7
- package/dist/components/pcm-1zhanshi-mnms-modal.js.map +1 -1
- package/dist/components/pcm-app-chat-modal.js +1 -1
- package/dist/components/pcm-button.js +2 -2
- package/dist/components/pcm-button.js.map +1 -1
- package/dist/components/pcm-card.js +3 -3
- package/dist/components/pcm-card.js.map +1 -1
- package/dist/components/pcm-chat-message.js +1 -1
- package/dist/components/pcm-drawer.js +1 -1
- package/dist/components/pcm-hr-chat-modal.js +5 -4
- package/dist/components/pcm-hr-chat-modal.js.map +1 -1
- package/dist/components/pcm-htws-modal.js +8 -7
- package/dist/components/pcm-htws-modal.js.map +1 -1
- package/dist/components/pcm-hyzj-modal.js +8 -7
- package/dist/components/pcm-hyzj-modal.js.map +1 -1
- package/dist/components/pcm-jd-modal.js +8 -7
- package/dist/components/pcm-jd-modal.js.map +1 -1
- package/dist/components/pcm-jlpp-modal.js +8 -7
- package/dist/components/pcm-jlpp-modal.js.map +1 -1
- package/dist/components/pcm-message.js +3 -3
- package/dist/components/pcm-message.js.map +1 -1
- package/dist/components/pcm-mnct-modal.js +8 -7
- package/dist/components/pcm-mnct-modal.js.map +1 -1
- package/dist/components/pcm-mnms-modal.js +60 -90
- package/dist/components/pcm-mnms-modal.js.map +1 -1
- package/dist/components/pcm-mnms-video-modal.js +8 -7
- package/dist/components/pcm-mnms-video-modal.js.map +1 -1
- package/dist/components/pcm-mnms-zp-modal.js +60 -90
- package/dist/components/pcm-mnms-zp-modal.js.map +1 -1
- package/dist/components/pcm-mobile-input-btn.d.ts +11 -0
- package/dist/components/pcm-mobile-input-btn.js +9 -0
- package/dist/components/pcm-mobile-input-btn.js.map +1 -0
- package/dist/components/pcm-mobile-upload-btn.d.ts +11 -0
- package/dist/components/pcm-mobile-upload-btn.js +9 -0
- package/dist/components/pcm-mobile-upload-btn.js.map +1 -0
- package/dist/components/pcm-msbg-modal.js +8 -7
- package/dist/components/pcm-msbg-modal.js.map +1 -1
- package/dist/components/pcm-qgqjl-modal.js +8 -7
- package/dist/components/pcm-qgqjl-modal.js.map +1 -1
- package/dist/components/pcm-time-count-down.d.ts +11 -0
- package/dist/components/pcm-time-count-down.js +9 -0
- package/dist/components/pcm-time-count-down.js.map +1 -0
- package/dist/components/pcm-upload.d.ts +11 -0
- package/dist/components/pcm-upload.js +9 -0
- package/dist/components/pcm-upload.js.map +1 -0
- package/dist/components/pcm-zsk-chat-modal.js +4 -4
- package/dist/components/pcm-zsk-chat-modal.js.map +1 -1
- package/dist/components/pcm-zygh-modal.js +8 -7
- package/dist/components/pcm-zygh-modal.js.map +1 -1
- package/dist/esm/error-event-C0FYX2-Z.js +31 -0
- package/dist/esm/error-event-C0FYX2-Z.js.map +1 -0
- package/dist/esm/{index-GyOE8SlD.js → index-BnNqOUZf.js} +51 -4
- package/dist/esm/index-BnNqOUZf.js.map +1 -0
- package/dist/esm/index-BuVfV0zo.js +11035 -0
- package/dist/esm/index-BuVfV0zo.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/loader.js +3 -5
- package/dist/esm/loader.js.map +1 -1
- package/dist/esm/message.service-DXVhHj6-.js +133 -0
- package/dist/esm/message.service-DXVhHj6-.js.map +1 -0
- package/dist/esm/{pcm-1zhanshi-mnms-modal_17.entry.js → pcm-1zhanshi-mnms-modal_21.entry.js} +3225 -169
- package/dist/esm/pcm-1zhanshi-mnms-modal_21.entry.js.map +1 -0
- package/dist/esm/pcm-agents.js +4 -6
- package/dist/esm/pcm-agents.js.map +1 -1
- package/dist/esm/pcm-message.entry.js +3 -3
- package/dist/esm/pcm-message.entry.js.map +1 -1
- package/dist/esm/pcm-mnms-video-modal.entry.js +5 -5
- package/dist/esm/pcm-mnms-video-modal.entry.js.map +1 -1
- package/dist/esm/pcm-mnms-zp-modal.entry.js +28 -85
- package/dist/esm/pcm-mnms-zp-modal.entry.js.map +1 -1
- package/dist/esm/sentry-reporter-CYzy4_8O.js +70 -0
- package/dist/esm/sentry-reporter-CYzy4_8O.js.map +1 -0
- package/dist/pcm-agents/index.esm.js +1 -1
- package/dist/pcm-agents/loader.esm.js.map +1 -1
- package/dist/pcm-agents/p-18a06873.entry.js +2 -0
- package/dist/pcm-agents/p-18a06873.entry.js.map +1 -0
- package/dist/pcm-agents/p-47e2e1d0.entry.js +2 -0
- package/dist/pcm-agents/p-47e2e1d0.entry.js.map +1 -0
- package/dist/pcm-agents/{p-3608c0c6.entry.js → p-7a582f00.entry.js} +2 -2
- package/dist/pcm-agents/p-7a582f00.entry.js.map +1 -0
- package/dist/pcm-agents/p-BhFnI70g.js +2 -0
- package/dist/pcm-agents/p-BhFnI70g.js.map +1 -0
- package/dist/pcm-agents/p-BuVfV0zo.js +3 -0
- package/dist/pcm-agents/p-BuVfV0zo.js.map +1 -0
- package/dist/pcm-agents/p-C0FYX2-Z.js +2 -0
- package/dist/pcm-agents/p-C0FYX2-Z.js.map +1 -0
- package/dist/pcm-agents/p-DXVhHj6-.js +2 -0
- package/dist/pcm-agents/p-DXVhHj6-.js.map +1 -0
- package/dist/pcm-agents/p-DkeaAFic.js +2 -0
- package/dist/pcm-agents/p-DkeaAFic.js.map +1 -0
- package/dist/pcm-agents/p-f5f96853.entry.js +245 -0
- package/dist/pcm-agents/p-f5f96853.entry.js.map +1 -0
- package/dist/pcm-agents/pcm-agents.esm.js +1 -1
- package/dist/pcm-agents/pcm-agents.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-message.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-mnms-video-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-mnms-zp-modal.entry.esm.js.map +1 -1
- package/dist/store/auth.store.js.map +1 -1
- package/dist/store/config.store.js.map +1 -1
- package/dist/types/components/pcm-mnms-modal/pcm-mnms-modal.d.ts +9 -4
- package/dist/types/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.d.ts +9 -4
- package/dist/types/components/pcm-mobile-input-btn/pcm-mobile-input-btn.d.ts +36 -0
- package/dist/types/components/pcm-mobile-input-btn/uploadNumberSDK.d.ts +9 -0
- package/dist/types/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.d.ts +44 -0
- package/dist/types/components/pcm-mobile-upload-btn/uploadNumberSDK.d.ts +9 -0
- package/dist/types/components/pcm-time-count-down/pcm-time-count-down.d.ts +15 -0
- package/dist/types/components/pcm-upload/pcm-upload.d.ts +54 -0
- package/dist/types/components/pcm-upload/type.d.ts +4 -0
- package/dist/types/components.d.ts +798 -30
- package/dist/types/stencil-public-runtime.d.ts +1 -1
- package/dist/types/utils/env.d.ts +2 -0
- package/dist/types/utils/utils.d.ts +30 -12
- package/package.json +70 -69
- package/dist/cjs/app-globals-BIO4q6tX.js +0 -5487
- package/dist/cjs/app-globals-BIO4q6tX.js.map +0 -1
- package/dist/cjs/exports-Dc-pQh4A.js +0 -4087
- package/dist/cjs/exports-Dc-pQh4A.js.map +0 -1
- package/dist/cjs/index-C_qhED9Z.js +0 -1538
- package/dist/cjs/index-C_qhED9Z.js.map +0 -1
- package/dist/cjs/index-CvEfNyEj.js.map +0 -1
- package/dist/cjs/pcm-1zhanshi-mnms-modal_17.cjs.entry.js.map +0 -1
- package/dist/cjs/sentry-reporter-BWFtw_aT.js.map +0 -1
- package/dist/components/p-75J0r72D.js +0 -4017
- package/dist/components/p-75J0r72D.js.map +0 -1
- package/dist/components/p-AYWZDCn8.js.map +0 -1
- package/dist/components/p-CR7WLzmM.js +0 -1303
- package/dist/components/p-CR7WLzmM.js.map +0 -1
- package/dist/components/p-CjbFHLT7.js.map +0 -1
- package/dist/components/p-D2Z8casl.js.map +0 -1
- package/dist/components/p-FjtoYPVY.js.map +0 -1
- package/dist/esm/app-globals-Chti62re.js.map +0 -1
- package/dist/esm/exports-Bs-zO1WZ.js +0 -4017
- package/dist/esm/exports-Bs-zO1WZ.js.map +0 -1
- package/dist/esm/index-Bq0K-WqZ.js +0 -1528
- package/dist/esm/index-Bq0K-WqZ.js.map +0 -1
- package/dist/esm/index-GyOE8SlD.js.map +0 -1
- package/dist/esm/pcm-1zhanshi-mnms-modal_17.entry.js.map +0 -1
- package/dist/esm/sentry-reporter-BFBS363a.js.map +0 -1
- package/dist/pcm-agents/p-2Gpw8rvH.js +0 -2
- package/dist/pcm-agents/p-2Gpw8rvH.js.map +0 -1
- package/dist/pcm-agents/p-3608c0c6.entry.js.map +0 -1
- package/dist/pcm-agents/p-60d7a0b0.entry.js +0 -2
- package/dist/pcm-agents/p-60d7a0b0.entry.js.map +0 -1
- package/dist/pcm-agents/p-9e6efc2d.entry.js +0 -2
- package/dist/pcm-agents/p-9e6efc2d.entry.js.map +0 -1
- package/dist/pcm-agents/p-BUV0S8Cc.js +0 -2
- package/dist/pcm-agents/p-BUV0S8Cc.js.map +0 -1
- package/dist/pcm-agents/p-Bq0K-WqZ.js +0 -3
- package/dist/pcm-agents/p-Bq0K-WqZ.js.map +0 -1
- package/dist/pcm-agents/p-Bs-zO1WZ.js +0 -2
- package/dist/pcm-agents/p-Bs-zO1WZ.js.map +0 -1
- package/dist/pcm-agents/p-CeRTfvY9.js +0 -2
- package/dist/pcm-agents/p-CeRTfvY9.js.map +0 -1
- package/dist/pcm-agents/p-e6c87a78.entry.js +0 -2
- package/dist/pcm-agents/p-e6c87a78.entry.js.map +0 -1
- /package/dist/types/{code/agents-sdk → Users/debugksir/Documents/pcm/sdk}/packages/pcm-agents/.stencil/store/auth.store.d.ts +0 -0
- /package/dist/types/{code/agents-sdk → Users/debugksir/Documents/pcm/sdk}/packages/pcm-agents/.stencil/store/config.store.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcm-mnms-zp-modal.entry.cjs.js","sources":["src/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.css?tag=pcm-mnms-zp-modal&encapsulation=shadow","src/global/global.css?tag=pcm-mnms-zp-modal&encapsulation=shadow","src/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.tsx"],"sourcesContent":["",":host {\r\n font-size: 16px;\r\n}\r\n\r\n/* 模态框基础样式 */\r\n.modal-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n z-index: 1000;\r\n overflow-y: auto;\r\n padding: 20px;\r\n}\r\n\r\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\r\n.fullscreen-overlay {\r\n padding: 0;\r\n background-color: rgba(0, 0, 0, 0.7);\r\n /* 改为基于父组件的全屏 */\r\n position: absolute;\r\n width: 100%;\r\n height: calc(100% - 10px);\r\n}\r\n\r\n.modal-container {\r\n background-color: #fff;\r\n border-radius: 8px;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n margin: auto;\r\n transition: all 0.3s ease-out;\r\n overflow: hidden;\r\n}\r\n\r\n/* 全屏模式样式 - 改为基于父组件 */\r\n.modal-container.fullscreen {\r\n width: 100%;\r\n max-width: none;\r\n height: 100%;\r\n border-radius: 0;\r\n margin: 0;\r\n display: flex;\r\n flex-direction: column;\r\n max-height: 100%;\r\n}\r\n\r\n/* PC端布局 */\r\n.pc-layout {\r\n width: 80%;\r\n max-width: 600px;\r\n min-width: 320px;\r\n}\r\n\r\n/* 响应式布局 */\r\n@media screen and (max-width: 768px) {\r\n .pc-layout {\r\n width: 95%;\r\n }\r\n\r\n .modal-overlay {\r\n padding: 10px 0px 0px 0px;\r\n }\r\n\r\n .modal-container.fullscreen {\r\n /* 移动端也基于父组件尺寸 */\r\n width: 100%;\r\n height: 100%;\r\n max-height: 100%;\r\n border-radius: 16px 16px 0 0;\r\n /* 保留安全区域支持 */\r\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\r\n }\r\n}\r\n\r\n/* 模态框头部样式 */\r\n.modal-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 4px 16px;\r\n height: 50px;\r\n border-bottom: 1px solid #e8e8e8;\r\n flex-shrink: 0;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #333;\r\n}\r\n\r\n.header-icon {\r\n width: 24px;\r\n height: 24px;\r\n}\r\n\r\n.close-button {\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 8px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 4px;\r\n}\r\n\r\n.close-button:hover {\r\n background-color: rgba(0, 0, 0, 0.04);\r\n}\r\n\r\n.close-button span {\r\n font-size: 24px;\r\n line-height: 1;\r\n color: #999;\r\n}\r\n\r\n.close-button:hover span {\r\n color: #666;\r\n}\r\n\r\n\r\n/* 文件上传区域通用样式 */\r\n.upload-area {\r\n cursor: pointer;\r\n width: 100%;\r\n}\r\n\r\n\r\n.upload-placeholder {\r\n transition: all 0.3s ease;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n background: rgba(0, 0, 0, 0.02);\r\n border: 1px dashed #d9d9d9;\r\n border-radius: 8px;\r\n}\r\n\r\n.upload-placeholder:hover {\r\n border: 1px dashed #1890ff;\r\n}\r\n\r\n.upload-placeholder img {\r\n margin-top: 8px;\r\n width: 50px;\r\n height: 50px;\r\n}\r\n\r\n.upload-placeholder .upload-text {\r\n margin: 4px 0;\r\n color: #332F39;\r\n font-size: 14px;\r\n}\r\n\r\n.upload-placeholder .upload-hint {\r\n font-size: 14px;\r\n color: #949AA5;\r\n margin-top: 8px;\r\n padding: 0px 10px;\r\n}\r\n\r\n\r\n/* 文件项样式 */\r\n.file-item {\r\n position: relative;\r\n padding: 16px;\r\n border: 1px solid #e2e8f0;\r\n border-radius: 8px;\r\n transition: border-color 0.3s;\r\n cursor: pointer;\r\n margin-bottom: 16px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n}\r\n\r\n.file-item:hover {\r\n border-color: #0D75FB;\r\n}\r\n\r\n.file-item-content {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.file-icon {\r\n color: #0D75FB;\r\n flex-shrink: 0;\r\n}\r\n\r\n.file-name {\r\n font-weight: 500;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n max-width: calc(100% - 50px);\r\n}\r\n\r\n.remove-file {\r\n background: transparent;\r\n border: none;\r\n color: #94a3b8;\r\n cursor: pointer;\r\n font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 4px;\r\n margin-left: 8px;\r\n border-radius: 4px;\r\n transition: all 0.2s;\r\n}\r\n\r\n.remove-file:hover {\r\n background-color: #f1f5f9;\r\n color: #475569;\r\n}\r\n\r\n.file-input {\r\n display: none;\r\n}\r\n\r\n\r\n\r\n/* 输入容器样式 */\r\n.input-container {\r\n padding: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n height: calc(100% - 50px);\r\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\r\n /* 减去header高度 */\r\n overflow-y: auto;\r\n}\r\n\r\n.input-container h3 {\r\n margin-top: 0;\r\n margin-bottom: 20px;\r\n font-size: 18px;\r\n color: #333;\r\n text-align: center;\r\n}\r\n\r\n/* JD输入区域样式 */\r\n.jd-input-section {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.jd-input-section label {\r\n display: block;\r\n margin-bottom: 8px;\r\n font-weight: 500;\r\n color: #333;\r\n}\r\n\r\n.job-description-textarea {\r\n width: calc(100% - 16px);\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n resize: vertical;\r\n font-family: inherit;\r\n font-size: 14px;\r\n line-height: 1.5;\r\n transition: border-color 0.3s;\r\n padding: 8px;\r\n}\r\n\r\n.job-description-textarea:focus {\r\n outline: none;\r\n border-color: #1890ff;\r\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\r\n}\r\n\r\n/* 简历上传区域样式 */\r\n.resume-upload-section {\r\n margin-bottom: 20px;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n.resume-upload-section label {\r\n display: block;\r\n margin-bottom: 8px;\r\n font-weight: 500;\r\n color: #333;\r\n align-self: flex-start;\r\n}\r\n\r\n\r\n/* 提交按钮通用样式 */\r\n.submit-button {\r\n margin-top: 10px;\r\n padding: 10px 30px;\r\n background: #0D75FB;\r\n color: white;\r\n border: none;\r\n border-radius: 4px;\r\n font-size: 16px;\r\n cursor: pointer;\r\n transition: all 0.3s ease;\r\n width: 100%;\r\n max-width: 400px;\r\n align-self: center;\r\n}\r\n\r\n.submit-button:hover {\r\n background-color: #40a9ff;\r\n}\r\n\r\n.submit-button:disabled {\r\n background-color: rgba(0,0,0,0.04);\r\n color: rgba(0,0,0,0.25);\r\n cursor: not-allowed;\r\n}\r\n\r\n\r\n\r\n/* AI免责声明和备案信息样式 */\r\n.ai-disclaimer {\r\n margin-top: 16px;\r\n text-align: center;\r\n font-size: 12px;\r\n color: #999;\r\n line-height: 1.5;\r\n}\r\n\r\n.ai-disclaimer p {\r\n margin: 4px 0;\r\n}\r\n\r\n.beian-info {\r\n display: flex;\r\n justify-content: center;\r\n flex-wrap: wrap;\r\n gap: 4px;\r\n}\r\n\r\n.ai-disclaimer a {\r\n color: #666;\r\n text-decoration: none;\r\n transition: color 0.2s ease;\r\n}\r\n\r\n.ai-disclaimer a:hover {\r\n color: #1890ff;\r\n text-decoration: underline;\r\n}\r\n\r\n/* 添加加载状态的样式 */\r\n.loading-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100%;\r\n padding: 24px;\r\n }\r\n \r\n .loading-spinner {\r\n width: 40px;\r\n height: 40px;\r\n border: 4px solid rgba(0, 0, 0, 0.1);\r\n border-radius: 50%;\r\n border-top-color: var(--pcm-primary-color, #1890ff);\r\n animation: spin 1s linear infinite;\r\n margin-bottom: 16px;\r\n }\r\n \r\n .loading-text {\r\n font-size: 16px;\r\n color: var(--pcm-text-color, #333);\r\n }\r\n \r\n @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n \r\n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\r\nimport {\r\n StreamCompleteEventData,\r\n ConversationStartEventData,\r\n InterviewCompleteEventData,\r\n RecordingErrorEventData,\r\n} from '../../interfaces/events';\r\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\r\nimport { authStore } from '../../../store/auth.store';\r\nimport { configStore } from '../../../store/config.store';\r\nimport { SentryReporter } from '../../utils/sentry-reporter';\r\n\r\n/**\r\n * 模拟面试\r\n */\r\n\r\n@Component({\r\n tag: 'pcm-mnms-zp-modal',\r\n styleUrls: ['pcm-mnms-zp-modal.css', '../../global/global.css'],\r\n shadow: true,\r\n})\r\nexport class MnmsZpModal {\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.job_info时,会隐藏JD输入区域。<br>\r\n * 传入customInputs.file_url或customInputs.resume_content时,会隐藏简历上传区域。<br>\r\n * 传入customInputs.file_url(或customInputs.resume_content)和customInputs.job_info时,会直接开始聊天。<br>\r\n * customInputs.resume_content:可传入json字符串,或纯文本字符串,字符串内容为简历内容。<br>\r\n * customInputs.url_callback:可传入url字符串,当报告生成后,会调用该url进行回调。该url请使用post请求,接收报告字段为report_content,会话id字段为conversation_id。\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 */\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() interviewComplete: EventEmitter<InterviewCompleteEventData>;\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 * 'drawer': 在右侧抽屉中预览\r\n * 'window': 在新窗口中打开\r\n */\r\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\r\n\r\n /**\r\n * 面试模式:text - 文本模式,video - 视频模式\r\n */\r\n @Prop() interviewMode: 'text' | 'video' = 'text';\r\n\r\n /**\r\n * 录制错误事件\r\n */\r\n @Event() recordingError: EventEmitter<RecordingErrorEventData>;\r\n\r\n /**\r\n * 是否显示复制按钮\r\n */\r\n @Prop() showCopyButton: boolean = true;\r\n\r\n /**\r\n * 是否显示点赞点踩按钮\r\n */\r\n @Prop() showFeedbackButtons: boolean = true;\r\n\r\n\r\n @State() selectedFile: File | null = null;\r\n @State() isUploading: boolean = false;\r\n @State() uploadedFileInfo: FileUploadResponse | null = null;\r\n @State() showChatModal: boolean = false;\r\n\r\n // 使用 @Element 装饰器获取组件的 host 元素\r\n @Element() hostElement: HTMLElement;\r\n\r\n @State() jobDescription: string = '';\r\n @State() isSubmitting: boolean = false;\r\n\r\n private tokenInvalidListener: () => void;\r\n private removeErrorListener: () => void;\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\r\n @Watch('isOpen')\r\n async handleIsOpenChange(newValue: boolean) {\r\n if (!newValue) {\r\n // 重置状态\r\n this.clearSelectedFile();\r\n this.showChatModal = false;\r\n this.jobDescription = '';\r\n\r\n } else {\r\n if (this.customInputs && this.customInputs.job_info) {\r\n this.jobDescription = this.customInputs.job_info;\r\n }\r\n\r\n await verifyApiKey(this.token);\r\n\r\n // 如果同时有 file_url 和 job_info,或者有会话ID,直接显示聊天模态框\r\n if (((this.customInputs?.file_url || this.customInputs?.resume_content) && this.customInputs?.job_info) || this.conversationId) {\r\n this.showChatModal = true;\r\n }\r\n }\r\n }\r\n\r\n \r\n\r\n componentWillLoad() {\r\n \r\n // 将 zIndex 存入配置缓存\r\n if (this.zIndex) {\r\n configStore.setItem('modal-zIndex', this.zIndex);\r\n }\r\n\r\n if (this.token) {\r\n authStore.setToken(this.token);\r\n }\r\n\r\n // 添加全局token无效事件监听器\r\n this.tokenInvalidListener = () => {\r\n this.tokenInvalid.emit();\r\n };\r\n\r\n // 添加全局错误监听\r\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\r\n this.someErrorEvent.emit(errorDetail);\r\n });\r\n\r\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\r\n }\r\n\r\n disconnectedCallback() {\r\n // 组件销毁时移除事件监听器\r\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\r\n // 移除错误监听器\r\n if (this.removeErrorListener) {\r\n this.removeErrorListener();\r\n }\r\n }\r\n\r\n private handleClose = () => {\r\n this.modalClosed.emit();\r\n };\r\n\r\n private handleFileChange = (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n this.selectedFile = input.files[0];\r\n }\r\n };\r\n\r\n private handleUploadClick = () => {\r\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\r\n fileInput?.click();\r\n };\r\n\r\n private clearSelectedFile = () => {\r\n this.selectedFile = null;\r\n this.uploadedFileInfo = null;\r\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\r\n if (fileInput) {\r\n fileInput.value = '';\r\n }\r\n };\r\n\r\n private async uploadFile() {\r\n if (!this.selectedFile) return;\r\n\r\n this.isUploading = true;\r\n\r\n try {\r\n // 使用 uploadFileToBackend 工具函数上传文件\r\n const result = await uploadFileToBackend(this.selectedFile, {\r\n }, {\r\n 'tags': ['resume']\r\n });\r\n\r\n this.uploadedFileInfo = result;\r\n this.uploadSuccess.emit(result);\r\n } catch (error) {\r\n console.error('文件上传错误:', error);\r\n this.clearSelectedFile();\r\n SentryReporter.captureError(error, {\r\n action: 'uploadFile',\r\n component: 'pcm-mnms-zp-modal',\r\n title: '文件上传失败'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '文件上传失败,请重试'\r\n });\r\n } finally {\r\n this.isUploading = false;\r\n }\r\n }\r\n\r\n private handleJobDescriptionChange = (event: Event) => {\r\n const textarea = event.target as HTMLTextAreaElement;\r\n this.jobDescription = textarea.value;\r\n };\r\n\r\n private handleStartInterview = async () => {\r\n // 判断是否隐藏简历上传区域\r\n const hideResumeUpload = Boolean(this.customInputs && (this.customInputs.file_url || this.customInputs.resume_content));\r\n \r\n // 如果没有预设的job_info,则需要检查用户输入\r\n if (!this.customInputs?.job_info && !this.jobDescription.trim()) {\r\n alert('请输入职位描述');\r\n return;\r\n }\r\n\r\n this.isSubmitting = true;\r\n\r\n try {\r\n // 如果需要上传文件且还没上传,先上传文件(简历为选填)\r\n if (!hideResumeUpload && this.selectedFile && !this.uploadedFileInfo) {\r\n await this.uploadFile();\r\n if (!this.uploadedFileInfo) {\r\n this.isSubmitting = false;\r\n return; // 上传失败\r\n }\r\n }\r\n\r\n // 直接显示聊天模态框\r\n this.showChatModal = true;\r\n } catch (error) {\r\n console.error('开始面试时出错:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'handleStartInterview',\r\n component: 'pcm-mnms-zp-modal',\r\n title: '开始面试时出错'\r\n });\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: '开始面试时出错,请重试'\r\n });\r\n } finally {\r\n this.isSubmitting = false;\r\n }\r\n };\r\n\r\n\r\n 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\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 // 修正这里的逻辑,确保当 customInputs.job_info 存在时,hideJdInput 为 true\r\n const hideJdInput = Boolean(this.customInputs && this.customInputs.job_info);\r\n \r\n // 判断是否隐藏简历上传区域 - 当有file_url或resume_content时都隐藏\r\n const hideResumeUpload = Boolean(this.customInputs && (this.customInputs.file_url || this.customInputs.resume_content));\r\n \r\n // 判断是否同时提供了(file_url或resume_content)和job_info\r\n const hasFileAndJob = Boolean((this.customInputs?.file_url || this.customInputs?.resume_content) && this.customInputs?.job_info);\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且没有同时提供file_url和job_info时显示 */}\r\n {!this.showChatModal && !this.conversationId && !hasFileAndJob && (\r\n <div class=\"input-container\">\r\n {/* JD输入区域 - 仅在没有customInputs.job_info时显示 */}\r\n {!hideJdInput && (\r\n <div class=\"jd-input-section\">\r\n <label htmlFor=\"job-description\">请输入职位描述 (JD)</label>\r\n <textarea\r\n id=\"job-description\"\r\n class=\"job-description-textarea\"\r\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\r\n rows={6}\r\n value={this.jobDescription}\r\n onInput={this.handleJobDescriptionChange}\r\n ></textarea>\r\n </div>\r\n )}\r\n\r\n {/* 简历上传区域 - 仅在没有customInputs.file_url或customInputs.resume_content时显示 */}\r\n {!hideResumeUpload && (\r\n <div class=\"resume-upload-section\">\r\n <label>上传简历(选填)</label>\r\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\r\n {this.selectedFile ? (\r\n <div class=\"file-item\">\r\n <div class=\"file-item-content\">\r\n <span class=\"file-icon\">📝</span>\r\n <span class=\"file-name\">{this.selectedFile.name}</span>\r\n </div>\r\n <button class=\"remove-file\" onClick={(e) => {\r\n e.stopPropagation();\r\n this.clearSelectedFile();\r\n }}>×</button>\r\n </div>\r\n ) : (\r\n <div class=\"upload-placeholder\">\r\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\r\n <p class='upload-text'>点击上传简历</p>\r\n <p class=\"upload-hint\">支持 txt、markdown、pdf、docx、doc、md 格式</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <button\r\n class=\"submit-button\"\r\n disabled={(!hideJdInput && !this.jobDescription.trim()) || this.isUploading || this.isSubmitting}\r\n onClick={this.handleStartInterview}\r\n >\r\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\r\n </button>\r\n\r\n <div class=\"ai-disclaimer\">\r\n <p>所有内容均由AI生成仅供参考</p>\r\n <p class=\"beian-info\">\r\n <span>中央网信办生成式人工智能服务备案号</span>:\r\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\r\n </p>\r\n </div>\r\n\r\n <input\r\n type=\"file\"\r\n class=\"file-input\"\r\n onChange={this.handleFileChange}\r\n />\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.isShowHeader}\r\n fullscreen={this.fullscreen}\r\n showWorkspaceHistory={this.showWorkspaceHistory}\r\n botId=\"3022316191018907\"\r\n conversationId={this.conversationId}\r\n defaultQuery={this.defaultQuery}\r\n enableTTS={false}\r\n filePreviewMode={this.filePreviewMode}\r\n showCopyButton={this.showCopyButton}\r\n showFeedbackButtons={this.showFeedbackButtons}\r\n customInputs={this.conversationId ? {} : {\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 job_info: this.customInputs?.job_info || this.jobDescription,\r\n resume_content: this.customInputs?.resume_content\r\n }}\r\n interviewMode={this.interviewMode}\r\n ></pcm-app-chat-modal>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n} "],"names":["authStore","verifyApiKey","configStore","ErrorEventBus","uploadFileToBackend","SentryReporter","h"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pcm-mnms-zp-modal.entry.cjs.js","sources":["src/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.css?tag=pcm-mnms-zp-modal&encapsulation=shadow","src/global/global.css?tag=pcm-mnms-zp-modal&encapsulation=shadow","src/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.tsx"],"sourcesContent":["",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport {\n StreamCompleteEventData,\n ConversationStartEventData,\n InterviewCompleteEventData,\n RecordingErrorEventData,\n} from '../../interfaces/events';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { Message } from '../../services/message.service';\n\n/**\n * 模拟面试\n */\n\n@Component({\n tag: 'pcm-mnms-zp-modal',\n styleUrls: ['pcm-mnms-zp-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class MnmsZpModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '模拟面试';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始模拟面试';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域。<br>\n * 传入customInputs.file_url或customInputs.resume_content时,会隐藏简历上传区域。<br>\n * 传入customInputs.file_url(或customInputs.resume_content)和customInputs.job_info时,会直接开始聊天。<br>\n * customInputs.resume_content:可传入json字符串,或纯文本字符串,字符串内容为简历内容。<br>\n * customInputs.url_callback:可传入url字符串,当报告生成后,会调用该url进行回调。该url请使用post请求,接收报告字段为report_content,会话id字段为conversation_id。\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 是否开启移动端上传(仅PC端生效)\n */\n @Prop() mobileJdInputAble: boolean = false;\n\n /**\n * 是否开启移动端上传(仅PC端生效)\n */\n @Prop() mobileUploadAble: boolean = false;\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n /**\n * 面试模式:text - 文本模式,video - 视频模式\n */\n @Prop() interviewMode: 'text' | 'video' = 'text';\n\n /**\n * 录制错误事件\n */\n @Event() recordingError: EventEmitter<RecordingErrorEventData>;\n\n /**\n * 是否显示复制按钮\n */\n @Prop() showCopyButton: boolean = true;\n\n /**\n * 是否显示点赞点踩按钮\n */\n @Prop() showFeedbackButtons: boolean = true;\n\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.showChatModal = false;\n this.jobDescription = '';\n\n } else {\n if (this.customInputs && this.customInputs.job_info) {\n this.jobDescription = this.customInputs.job_info;\n }\n\n await verifyApiKey(this.token);\n\n // 如果同时有 file_url 和 job_info,或者有会话ID,直接显示聊天模态框\n if (((this.customInputs?.file_url || this.customInputs?.resume_content) && this.customInputs?.job_info) || this.conversationId) {\n this.showChatModal = true;\n }\n }\n }\n\n\n\n componentWillLoad() {\n\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleJobDescriptionChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.jobDescription = textarea.value;\n };\n\n private handleStartInterview = async () => {\n // 如果没有预设的job_info,则需要检查用户输入\n if (!this.customInputs?.job_info && !this.jobDescription.trim()) {\n alert('请输入职位描述');\n return;\n }\n this.isSubmitting = true;\n // 判断文件是否正在上传\n if (await this.pcmUploadRef?.getIsUploading?.()) {\n Message.info('文件上传中,请稍后');\n return;\n }\n this.showChatModal = true;\n };\n\n private pcmUploadRef;\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 修正这里的逻辑,确保当 customInputs.job_info 存在时,hideJdInput 为 true\n const hideJdInput = Boolean(this.customInputs && this.customInputs.job_info);\n\n // 判断是否隐藏简历上传区域 - 当有file_url或resume_content时都隐藏\n const hideResumeUpload = Boolean(this.customInputs && (this.customInputs.file_url || this.customInputs.resume_content));\n\n // 判断是否同时提供了(file_url或resume_content)和job_info\n const hasFileAndJob = Boolean((this.customInputs?.file_url || this.customInputs?.resume_content) && this.customInputs?.job_info);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 上传界面 - 仅在不显示聊天模态框且没有会话ID且没有同时提供file_url和job_info时显示 */}\n {!this.showChatModal && !this.conversationId && !hasFileAndJob && (\n <div class=\"input-container\">\n {/* JD输入区域 - 仅在没有customInputs.job_info时显示 */}\n {!hideJdInput && (\n <div class=\"jd-input-section\">\n <label htmlFor=\"job-description\">请输入职位描述 (JD)</label>\n {\n !!this.mobileJdInputAble && (\n <pcm-mobile-input-btn\n name=\"职位描述\"\n onOk={(e) => {\n this.jobDescription = e.detail;\n }}\n />\n )\n }\n <textarea\n id=\"job-description\"\n class=\"job-description-textarea\"\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\n rows={6}\n value={this.jobDescription}\n onInput={this.handleJobDescriptionChange}\n ></textarea>\n </div>\n )}\n\n {/* 简历上传区域 - 仅在没有customInputs.file_url或customInputs.resume_content时显示 */}\n {\n !hideResumeUpload && (\n <pcm-upload\n ref={el => this.pcmUploadRef = el}\n maxFileSize={15 * 1024 * 1024}\n multiple={false}\n mobileUploadAble={this.mobileUploadAble}\n labelText=\"上传简历(选填)\"\n acceptFileSuffixList={['.txt', '.md', '.pdf', '.docx', '.doc']}\n uploadParams={{\n tags: ['resume'],\n }}\n onUploadChange={(e) => {\n const result: FileUploadResponse[] = e.detail ?? [];\n this.uploadedFileInfo = result[0];\n this.uploadSuccess.emit(this.uploadedFileInfo);\n }}\n />\n )\n }\n\n <button\n class=\"submit-button\"\n disabled={(!hideJdInput && !this.jobDescription.trim()) || this.isUploading || this.isSubmitting}\n onClick={this.handleStartInterview}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div >\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018907\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n enableTTS={false}\n filePreviewMode={this.filePreviewMode}\n showCopyButton={this.showCopyButton}\n showFeedbackButtons={this.showFeedbackButtons}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\n job_info: this.customInputs?.job_info || this.jobDescription,\n resume_content: this.customInputs?.resume_content\n }}\n interviewMode={this.interviewMode}\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} "],"names":["authStore","verifyApiKey","configStore","ErrorEventBus","Message","h"],"mappings":"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"}
|
|
@@ -1,34 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
class ErrorEventBus {
|
|
7
|
-
/**
|
|
8
|
-
* 触发错误事件
|
|
9
|
-
*/
|
|
10
|
-
static emitError(detail) {
|
|
11
|
-
const event = new CustomEvent('pcm-error', {
|
|
12
|
-
bubbles: true,
|
|
13
|
-
composed: true,
|
|
14
|
-
detail
|
|
15
|
-
});
|
|
16
|
-
document.dispatchEvent(event);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* 添加错误事件监听器
|
|
20
|
-
*/
|
|
21
|
-
static addErrorListener(callback) {
|
|
22
|
-
const handler = (event) => {
|
|
23
|
-
callback(event.detail);
|
|
24
|
-
};
|
|
25
|
-
document.addEventListener('pcm-error', handler);
|
|
26
|
-
// 返回移除监听器的函数
|
|
27
|
-
return () => {
|
|
28
|
-
document.removeEventListener('pcm-error', handler);
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
3
|
+
var index$1 = require('./index-CRlt8Nv6.js');
|
|
4
|
+
var index = require('./index-WNdOTXnX.js');
|
|
32
5
|
|
|
33
6
|
/**
|
|
34
7
|
* Sentry事件上报工具类
|
|
@@ -43,9 +16,9 @@ class SentryReporter {
|
|
|
43
16
|
static captureError(error, context) {
|
|
44
17
|
try {
|
|
45
18
|
// 添加认证信息
|
|
46
|
-
const CUser = index.configStore.getItem('pcm-sdk-CUser');
|
|
19
|
+
const CUser = index$1.configStore.getItem('pcm-sdk-CUser');
|
|
47
20
|
if (CUser) {
|
|
48
|
-
|
|
21
|
+
index.setUser({ id: String(CUser) });
|
|
49
22
|
}
|
|
50
23
|
let finalError = error;
|
|
51
24
|
// 如果提供了自定义标题,创建新的错误对象
|
|
@@ -59,10 +32,10 @@ class SentryReporter {
|
|
|
59
32
|
// 添加上下文
|
|
60
33
|
if (context) {
|
|
61
34
|
const { title, ...otherContext } = context;
|
|
62
|
-
|
|
35
|
+
index.setContext('error_context', otherContext);
|
|
63
36
|
}
|
|
64
37
|
// 上报错误
|
|
65
|
-
|
|
38
|
+
index.captureException(finalError);
|
|
66
39
|
}
|
|
67
40
|
catch (e) {
|
|
68
41
|
console.error('Sentry 上报错误失败:', e);
|
|
@@ -76,16 +49,16 @@ class SentryReporter {
|
|
|
76
49
|
static captureMessage(message, context) {
|
|
77
50
|
try {
|
|
78
51
|
// 添加认证信息
|
|
79
|
-
const CUser = index.configStore.getItem('pcm-sdk-CUser');
|
|
52
|
+
const CUser = index$1.configStore.getItem('pcm-sdk-CUser');
|
|
80
53
|
if (CUser) {
|
|
81
|
-
|
|
54
|
+
index.setUser({ id: String(CUser) });
|
|
82
55
|
}
|
|
83
56
|
// 添加上下文
|
|
84
57
|
if (context) {
|
|
85
|
-
|
|
58
|
+
index.setContext('message_context', context);
|
|
86
59
|
}
|
|
87
60
|
// 上报消息
|
|
88
|
-
|
|
61
|
+
index.captureMessage(message);
|
|
89
62
|
}
|
|
90
63
|
catch (e) {
|
|
91
64
|
console.error('Sentry 上报消息失败:', e);
|
|
@@ -93,8 +66,7 @@ class SentryReporter {
|
|
|
93
66
|
}
|
|
94
67
|
}
|
|
95
68
|
|
|
96
|
-
exports.ErrorEventBus = ErrorEventBus;
|
|
97
69
|
exports.SentryReporter = SentryReporter;
|
|
98
|
-
//# sourceMappingURL=sentry-reporter-
|
|
70
|
+
//# sourceMappingURL=sentry-reporter-tpI4WdkE.js.map
|
|
99
71
|
|
|
100
|
-
//# sourceMappingURL=sentry-reporter-
|
|
72
|
+
//# sourceMappingURL=sentry-reporter-tpI4WdkE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry-reporter-tpI4WdkE.js","sources":["src/utils/sentry-reporter.ts"],"sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport { configStore } from \"../../store/config.store\";\n\n/**\n * Sentry事件上报工具类\n * 提供统一的错误上报接口,自动添加用户认证信息\n */\nexport class SentryReporter {\n\n /**\n * 捕获并上报错误\n * @param error 错误对象\n * @param context 错误上下文\n */\n static captureError(error: any, context?: Record<string, any> & { title?: string }): void {\n try {\n // 添加认证信息\n const CUser = configStore.getItem('pcm-sdk-CUser');\n if (CUser) {\n Sentry.setUser({ id: String(CUser) });\n }\n \n let finalError = error;\n \n // 如果提供了自定义标题,创建新的错误对象\n if (context?.title) {\n finalError = new Error(context.title);\n if (error?.stack) {\n finalError.stack = error.stack;\n }\n finalError.cause = error;\n }\n \n // 添加上下文\n if (context) {\n const { title, ...otherContext } = context;\n Sentry.setContext('error_context', otherContext);\n }\n \n // 上报错误\n Sentry.captureException(finalError);\n } catch (e) {\n console.error('Sentry 上报错误失败:', e);\n }\n }\n\n /**\n * 捕获并上报消息\n * @param message 消息内容\n * @param context 消息上下文\n */\n static captureMessage(message: string, context?: Record<string, any>): void {\n try {\n // 添加认证信息\n const CUser = configStore.getItem('pcm-sdk-CUser');\n if (CUser) {\n Sentry.setUser({ id: String(CUser) });\n }\n \n // 添加上下文\n if (context) {\n Sentry.setContext('message_context', context);\n }\n \n // 上报消息\n Sentry.captureMessage(message);\n } catch (e) {\n console.error('Sentry 上报消息失败:', e);\n }\n }\n\n}"],"names":["configStore","Sentry.setUser","Sentry.setContext","Sentry.captureException","Sentry.captureMessage"],"mappings":";;;;;AAGA;;;AAGG;MACU,cAAc,CAAA;AAEzB;;;;AAIG;AACH,IAAA,OAAO,YAAY,CAAC,KAAU,EAAE,OAAkD,EAAA;AAChF,QAAA,IAAI;;YAEF,MAAM,KAAK,GAAGA,mBAAW,CAAC,OAAO,CAAC,eAAe,CAAC;YAClD,IAAI,KAAK,EAAE;AACT,gBAAAC,aAAc,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;;YAGvC,IAAI,UAAU,GAAG,KAAK;;AAGtB,YAAA,IAAI,OAAO,EAAE,KAAK,EAAE;gBAClB,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,gBAAA,IAAI,KAAK,EAAE,KAAK,EAAE;AAChB,oBAAA,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;;AAEhC,gBAAA,UAAU,CAAC,KAAK,GAAG,KAAK;;;YAI1B,IAAI,OAAO,EAAE;gBACX,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO;AAC1C,gBAAAC,gBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC;;;AAIlD,YAAAC,sBAAuB,CAAC,UAAU,CAAC;;QACnC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;;;AAItC;;;;AAIG;AACH,IAAA,OAAO,cAAc,CAAC,OAAe,EAAE,OAA6B,EAAA;AAClE,QAAA,IAAI;;YAEF,MAAM,KAAK,GAAGH,mBAAW,CAAC,OAAO,CAAC,eAAe,CAAC;YAClD,IAAI,KAAK,EAAE;AACT,gBAAAC,aAAc,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;;;YAIvC,IAAI,OAAO,EAAE;AACX,gBAAAC,gBAAiB,CAAC,iBAAiB,EAAE,OAAO,CAAC;;;AAI/C,YAAAE,oBAAqB,CAAC,OAAO,CAAC;;QAC9B,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;;;AAIvC;;;;"}
|
|
@@ -17,13 +17,17 @@
|
|
|
17
17
|
"components/pcm-mnms-modal/pcm-mnms-modal.js",
|
|
18
18
|
"components/pcm-mnms-video-modal/pcm-mnms-video-modal.js",
|
|
19
19
|
"components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.js",
|
|
20
|
+
"components/pcm-mobile-input-btn/pcm-mobile-input-btn.js",
|
|
21
|
+
"components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.js",
|
|
20
22
|
"components/pcm-msbg-modal/pcm-msbg-modal.js",
|
|
21
23
|
"components/pcm-qgqjl-modal/pcm-qgqjl-modal.js",
|
|
24
|
+
"components/pcm-time-count-down/pcm-time-count-down.js",
|
|
25
|
+
"components/pcm-upload/pcm-upload.js",
|
|
22
26
|
"components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js"
|
|
23
27
|
],
|
|
24
28
|
"compiler": {
|
|
25
29
|
"name": "@stencil/core",
|
|
26
|
-
"version": "4.
|
|
30
|
+
"version": "4.35.1",
|
|
27
31
|
"typescriptVersion": "5.5.4"
|
|
28
32
|
},
|
|
29
33
|
"collections": [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcm-1zhanshi-mnms-modal.js","sourceRoot":"","sources":["../../../../src/components/pcm-1zhanshi-mnms-modal/pcm-1zhanshi-mnms-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 } from '../../utils/utils';\r\nimport { \r\n StreamCompleteEventData, \r\n ConversationStartEventData, \r\n InterviewCompleteEventData,\r\n RecordingErrorEventData,\r\n} from '../../interfaces/events';\r\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\r\nimport { authStore } from '../../../store/auth.store';\r\nimport { configStore } from '../../../store/config.store';\r\n\r\n/**\r\n * 模拟面试\r\n */\r\n\r\n@Component({\r\n tag: 'pcm-1zhanshi-mnms-modal',\r\n styleUrls: ['pcm-1zhanshi-mnms-modal.css', '../../global/global.css'],\r\n shadow: true,\r\n})\r\nexport class ZhanshiMnmsModal {\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 * 视频录制最大时长(秒)默认120\r\n */\r\n @Prop() maxRecordingTime: number = 120;\r\n\r\n /**\r\n * 是否以全屏模式打开,移动端建议设置为true\r\n */\r\n @Prop() fullscreen: boolean = false;\r\n\r\n /**\r\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\r\n */\r\n @Prop() customInputs: Record<string, 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() interviewComplete: EventEmitter<InterviewCompleteEventData>;\r\n\r\n /**\r\n * SDK密钥验证失败事件\r\n */\r\n @Event() tokenInvalid: EventEmitter<void>;\r\n\r\n /**\r\n * 错误事件\r\n */\r\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\r\n\r\n /**\r\n * 录制错误事件\r\n */\r\n @Event() recordingError: EventEmitter<RecordingErrorEventData>;\r\n\r\n @State() selectedFile: File | null = null;\r\n @State() isUploading: boolean = false;\r\n @State() uploadedFileInfo: FileUploadResponse | null = null;\r\n @State() showChatModal: boolean = false;\r\n\r\n // 使用 @Element 装饰器获取组件的 host 元素\r\n @Element() hostElement: HTMLElement;\r\n\r\n @State() jobDescription: string = '';\r\n @State() isSubmitting: boolean = false;\r\n\r\n private tokenInvalidListener: () => void;\r\n private removeErrorListener: () => void;\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 componentWillLoad() {\r\n\r\n // 将 zIndex 存入配置缓存\r\n if (this.zIndex) {\r\n configStore.setItem('modal-zIndex', this.zIndex);\r\n }\r\n\r\n if (this.token) {\r\n authStore.setToken(this.token);\r\n }\r\n \r\n // 添加全局token无效事件监听器\r\n this.tokenInvalidListener = () => {\r\n this.tokenInvalid.emit();\r\n };\r\n // 添加全局错误监听\r\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\r\n this.someErrorEvent.emit(errorDetail);\r\n });\r\n 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\r\n private handleClose = () => {\r\n this.modalClosed.emit();\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.jobDescription = '';\r\n } else {\r\n await verifyApiKey(this.token);\r\n this.showChatModal = true;\r\n }\r\n }\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\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 {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.isShowHeader}\r\n fullscreen={this.fullscreen}\r\n botId=\"3022316191018903\"\r\n conversationId={this.conversationId}\r\n defaultQuery={this.defaultQuery}\r\n maxRecordingTime={this.maxRecordingTime}\r\n enableTTS={false}\r\n customInputs={this.conversationId ? {} : {\r\n ...this.customInputs,\r\n file_url: this.uploadedFileInfo?.cos_key,\r\n file_name: this.uploadedFileInfo?.file_name,\r\n }}\r\n interviewMode='video'\r\n ></pcm-app-chat-modal>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n} "]}
|
|
1
|
+
{"version":3,"file":"pcm-1zhanshi-mnms-modal.js","sourceRoot":"","sources":["../../../../src/components/pcm-1zhanshi-mnms-modal/pcm-1zhanshi-mnms-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport {FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { \n StreamCompleteEventData, \n ConversationStartEventData, \n InterviewCompleteEventData,\n RecordingErrorEventData,\n} from '../../interfaces/events';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\n\n/**\n * 模拟面试\n */\n\n@Component({\n tag: 'pcm-1zhanshi-mnms-modal',\n styleUrls: ['pcm-1zhanshi-mnms-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class ZhanshiMnmsModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '模拟面试';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始模拟面试';\n\n /**\n * 视频录制最大时长(秒)默认120\n */\n @Prop() maxRecordingTime: number = 120;\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 录制错误事件\n */\n @Event() recordingError: EventEmitter<RecordingErrorEventData>;\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n componentWillLoad() {\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n\n if (this.token) {\n authStore.setToken(this.token);\n }\n \n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.showChatModal = false;\n this.jobDescription = '';\n } else {\n await verifyApiKey(this.token);\n this.showChatModal = true;\n }\n }\n\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div >\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n botId=\"3022316191018903\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n maxRecordingTime={this.maxRecordingTime}\n enableTTS={false}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.uploadedFileInfo?.cos_key,\n file_name: this.uploadedFileInfo?.file_name,\n }}\n interviewMode='video'\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} "]}
|