pcm-agents 1.0.13-beta.0 → 1.0.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/components-chat-message_32.cjs.entry.js +25 -25
- package/dist/cjs/components-chat-message_32.cjs.entry.js.map +1 -1
- package/dist/cjs/{conversation-utils-CPTJQXeq.js → conversation-utils-CPqGzavk.js} +4 -4
- package/dist/cjs/{conversation-utils-CPTJQXeq.js.map → conversation-utils-CPqGzavk.js.map} +1 -1
- package/dist/cjs/index-C_qhED9Z.js.map +1 -1
- package/dist/cjs/{index-C3Vx36CV.js → index-NE6PPZAs.js} +5 -5
- package/dist/cjs/{index-C3Vx36CV.js.map → index-NE6PPZAs.js.map} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/pcm-ats-mnms-modal.cjs.entry.js +2 -2
- package/dist/cjs/pcm-ats-mnms-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-ats-mnms-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-hr-chat-modal.cjs.entry.js +3 -3
- package/dist/cjs/pcm-hr-chat-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-hr-chat-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-htws-modal.cjs.entry.js +4 -4
- package/dist/cjs/pcm-htws-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-htws-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-jd-modal.cjs.entry.js +4 -4
- package/dist/cjs/pcm-jd-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-jd-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-jlpp-modal.cjs.entry.js +4 -4
- package/dist/cjs/pcm-jlpp-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-jlpp-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-jlsx-modal.cjs.entry.js +3 -3
- package/dist/cjs/pcm-jlsx-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-jlsx-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-jlzz-modal.cjs.entry.js +3 -3
- package/dist/cjs/pcm-jlzz-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-jlzz-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-mnct-modal.cjs.entry.js +4 -4
- package/dist/cjs/pcm-mnct-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-mnct-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-mnms-modal.cjs.entry.js +2 -2
- package/dist/cjs/pcm-mnms-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-mnms-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-qgqjl-modal.cjs.entry.js +4 -4
- package/dist/cjs/pcm-qgqjl-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-qgqjl-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-zygh-modal.cjs.entry.js +4 -4
- package/dist/cjs/pcm-zygh-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-zygh-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-zygh-v2-modal.cjs.entry.js +4 -4
- package/dist/cjs/pcm-zygh-v2-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-zygh-v2-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/{sentry-reporter-pJPEGHTa.js → sentry-reporter-DGcrp5UG.js} +3 -3
- package/dist/cjs/{sentry-reporter-pJPEGHTa.js.map → sentry-reporter-DGcrp5UG.js.map} +1 -1
- package/dist/collection/components/oem-cast-modal/oem-cast-modal.js +2 -2
- package/dist/collection/components/oem-cast-modal/oem-cast-modal.js.map +1 -1
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.css +1 -1
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.css +1 -1
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.css +1 -1
- package/dist/collection/global/global.css +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-cast-modal.js +3 -3
- package/dist/components/oem-cast-modal.js.map +1 -1
- package/dist/components/oem-htws-modal.js +6 -6
- package/dist/components/oem-htws-modal.js.map +1 -1
- package/dist/components/oem-jd-modal.js +6 -6
- package/dist/components/oem-jd-modal.js.map +1 -1
- 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 +6 -6
- package/dist/components/oem-jlsx-modal.js.map +1 -1
- package/dist/components/oem-jlzz-modal.js +6 -6
- package/dist/components/oem-jlzz-modal.js.map +1 -1
- package/dist/components/oem-mnct-modal.js +8 -8
- package/dist/components/oem-mnct-modal.js.map +1 -1
- 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 +10 -10
- package/dist/components/oem-qgqjl-modal.js.map +1 -1
- package/dist/components/oem-zygh-modal.js +6 -6
- package/dist/components/oem-zygh-modal.js.map +1 -1
- package/dist/components/{p-CiOoPWWj.js → p-0MnCPMlD.js} +4 -4
- package/dist/components/p-0MnCPMlD.js.map +1 -0
- package/dist/components/{p-DUFAbZ2P.js → p-BHGE0FbX.js} +3 -3
- package/dist/components/{p-DUFAbZ2P.js.map → p-BHGE0FbX.js.map} +1 -1
- package/dist/components/{p-CoYv1Eyd.js → p-BeWDm0mF.js} +6 -6
- package/dist/components/p-BeWDm0mF.js.map +1 -0
- package/dist/components/{p-D4uR46BC.js → p-BjsKmogW.js} +5 -5
- package/dist/components/{p-D4uR46BC.js.map → p-BjsKmogW.js.map} +1 -1
- package/dist/components/{p-BFZ8OHaC.js → p-BmauzBxj.js} +3 -3
- package/dist/components/{p-BFZ8OHaC.js.map → p-BmauzBxj.js.map} +1 -1
- package/dist/components/{p-BP2hY_fg.js → p-C-m99qtl.js} +3 -3
- package/dist/components/{p-BP2hY_fg.js.map → p-C-m99qtl.js.map} +1 -1
- package/dist/components/p-CR7WLzmM.js.map +1 -1
- package/dist/components/{p-pve4EGOe.js → p-CexN0q9e.js} +3 -3
- package/dist/components/{p-pve4EGOe.js.map → p-CexN0q9e.js.map} +1 -1
- package/dist/components/{p-wZema4At.js → p-CktuIetD.js} +4 -4
- package/dist/components/p-CktuIetD.js.map +1 -0
- package/dist/components/{p-IT_Yngxh.js → p-DAVHlXKp.js} +4 -4
- package/dist/components/p-DAVHlXKp.js.map +1 -0
- package/dist/components/{p-BnHWxLqr.js → p-DGGRMlp4.js} +3 -3
- package/dist/components/{p-BnHWxLqr.js.map → p-DGGRMlp4.js.map} +1 -1
- package/dist/components/{p-D6Fe15eA.js → p-DvyajdW9.js} +5 -5
- package/dist/components/p-DvyajdW9.js.map +1 -0
- package/dist/components/{p-15dnKCv-.js → p-OsSWj-Xy.js} +4 -4
- package/dist/components/p-OsSWj-Xy.js.map +1 -0
- package/dist/components/{p-aJ831O2z.js → p-cBiBW1uG.js} +3 -3
- package/dist/components/{p-aJ831O2z.js.map → p-cBiBW1uG.js.map} +1 -1
- package/dist/components/{p-rFVgRhXp.js → p-liZRbDRm.js} +3 -3
- package/dist/components/{p-rFVgRhXp.js.map → p-liZRbDRm.js.map} +1 -1
- package/dist/components/pcm-1zhanshi-mnms-modal.js +6 -6
- 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-ats-mnms-modal.js +6 -6
- package/dist/components/pcm-ats-mnms-modal.js.map +1 -1
- package/dist/components/pcm-card.js +1 -1
- package/dist/components/pcm-hr-chat-modal.js +3 -3
- package/dist/components/pcm-hr-chat-modal.js.map +1 -1
- package/dist/components/pcm-htws-modal.js +9 -9
- package/dist/components/pcm-htws-modal.js.map +1 -1
- package/dist/components/pcm-hyzj-modal.js +6 -6
- package/dist/components/pcm-hyzj-modal.js.map +1 -1
- package/dist/components/pcm-jd-modal.js +7 -7
- package/dist/components/pcm-jd-modal.js.map +1 -1
- package/dist/components/pcm-jlpp-modal.js +9 -9
- package/dist/components/pcm-jlpp-modal.js.map +1 -1
- package/dist/components/pcm-jlsx-modal.js +6 -6
- package/dist/components/pcm-jlsx-modal.js.map +1 -1
- package/dist/components/pcm-jlzz-modal.js +7 -7
- package/dist/components/pcm-jlzz-modal.js.map +1 -1
- package/dist/components/pcm-mnct-modal.js +8 -8
- package/dist/components/pcm-mnct-modal.js.map +1 -1
- package/dist/components/pcm-mnms-modal.js +9 -9
- package/dist/components/pcm-mnms-modal.js.map +1 -1
- package/dist/components/pcm-mnms-zp-modal.js +9 -9
- package/dist/components/pcm-mnms-zp-modal.js.map +1 -1
- package/dist/components/pcm-msbg-modal.js +6 -6
- package/dist/components/pcm-msbg-modal.js.map +1 -1
- package/dist/components/pcm-qgqjl-modal.js +10 -10
- package/dist/components/pcm-qgqjl-modal.js.map +1 -1
- package/dist/components/pcm-virtual-chat-modal.js +1 -1
- package/dist/components/pcm-zsk-chat-modal.js +3 -3
- package/dist/components/pcm-zsk-chat-modal.js.map +1 -1
- package/dist/components/pcm-zygh-modal.js +8 -8
- package/dist/components/pcm-zygh-modal.js.map +1 -1
- package/dist/components/pcm-zygh-v2-modal.js +8 -8
- package/dist/components/pcm-zygh-v2-modal.js.map +1 -1
- package/dist/esm/components-chat-message_32.entry.js +25 -25
- package/dist/esm/components-chat-message_32.entry.js.map +1 -1
- package/dist/esm/{conversation-utils-rrI9X3m3.js → conversation-utils-B9qQBoU9.js} +4 -4
- package/dist/esm/{conversation-utils-rrI9X3m3.js.map → conversation-utils-B9qQBoU9.js.map} +1 -1
- package/dist/esm/{index-DLuLpiPO.js → index-BZsU3Ilz.js} +5 -5
- package/dist/esm/{index-DLuLpiPO.js.map → index-BZsU3Ilz.js.map} +1 -1
- package/dist/esm/index-Bq0K-WqZ.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/pcm-ats-mnms-modal.entry.js +2 -2
- package/dist/esm/pcm-ats-mnms-modal.entry.js.map +1 -1
- package/dist/esm/pcm-hr-chat-modal.entry.js +3 -3
- package/dist/esm/pcm-hr-chat-modal.entry.js.map +1 -1
- package/dist/esm/pcm-htws-modal.entry.js +4 -4
- package/dist/esm/pcm-htws-modal.entry.js.map +1 -1
- package/dist/esm/pcm-jd-modal.entry.js +4 -4
- package/dist/esm/pcm-jd-modal.entry.js.map +1 -1
- package/dist/esm/pcm-jlpp-modal.entry.js +4 -4
- package/dist/esm/pcm-jlpp-modal.entry.js.map +1 -1
- package/dist/esm/pcm-jlsx-modal.entry.js +3 -3
- package/dist/esm/pcm-jlsx-modal.entry.js.map +1 -1
- package/dist/esm/pcm-jlzz-modal.entry.js +3 -3
- package/dist/esm/pcm-jlzz-modal.entry.js.map +1 -1
- package/dist/esm/pcm-mnct-modal.entry.js +4 -4
- package/dist/esm/pcm-mnct-modal.entry.js.map +1 -1
- package/dist/esm/pcm-mnms-modal.entry.js +2 -2
- package/dist/esm/pcm-mnms-modal.entry.js.map +1 -1
- package/dist/esm/pcm-qgqjl-modal.entry.js +4 -4
- package/dist/esm/pcm-qgqjl-modal.entry.js.map +1 -1
- package/dist/esm/pcm-zygh-modal.entry.js +4 -4
- package/dist/esm/pcm-zygh-modal.entry.js.map +1 -1
- package/dist/esm/pcm-zygh-v2-modal.entry.js +4 -4
- package/dist/esm/pcm-zygh-v2-modal.entry.js.map +1 -1
- package/dist/esm/{sentry-reporter-3OsnFj6Z.js → sentry-reporter-DKj9zGeA.js} +3 -3
- package/dist/esm/{sentry-reporter-3OsnFj6Z.js.map → sentry-reporter-DKj9zGeA.js.map} +1 -1
- package/dist/pcm-agents/index.esm.js +1 -1
- package/dist/pcm-agents/p-287e38d2.entry.js +2 -0
- package/dist/pcm-agents/p-287e38d2.entry.js.map +1 -0
- package/dist/pcm-agents/p-2b1d0fa4.entry.js +2 -0
- package/dist/pcm-agents/p-2b1d0fa4.entry.js.map +1 -0
- package/dist/pcm-agents/p-308ce1e2.entry.js +2 -0
- package/dist/pcm-agents/p-308ce1e2.entry.js.map +1 -0
- package/dist/pcm-agents/p-46b75987.entry.js +2 -0
- package/dist/pcm-agents/p-46b75987.entry.js.map +1 -0
- package/dist/pcm-agents/p-54c334ed.entry.js +2 -0
- package/dist/pcm-agents/p-54c334ed.entry.js.map +1 -0
- package/dist/pcm-agents/p-56a6ff18.entry.js +2 -0
- package/dist/pcm-agents/p-56a6ff18.entry.js.map +1 -0
- package/dist/pcm-agents/p-58e74eb8.entry.js +2 -0
- package/dist/pcm-agents/p-58e74eb8.entry.js.map +1 -0
- package/dist/pcm-agents/p-72681fff.entry.js +2 -0
- package/dist/pcm-agents/p-72681fff.entry.js.map +1 -0
- package/dist/pcm-agents/p-8a1d14a4.entry.js +2 -0
- package/dist/pcm-agents/p-8a1d14a4.entry.js.map +1 -0
- package/dist/pcm-agents/p-Bq0K-WqZ.js.map +1 -1
- package/dist/pcm-agents/p-DMw86Tpp.js +2 -0
- package/dist/pcm-agents/{p-DLAkzyJq.js.map → p-DMw86Tpp.js.map} +1 -1
- package/dist/pcm-agents/{p-xUIsri78.js → p-DcmmWiOJ.js} +2 -2
- package/dist/pcm-agents/{p-xUIsri78.js.map → p-DcmmWiOJ.js.map} +1 -1
- package/dist/pcm-agents/p-XrL7lktO.js +2 -0
- package/dist/pcm-agents/{p-BKzMDQ2I.js.map → p-XrL7lktO.js.map} +1 -1
- package/dist/pcm-agents/p-c74c49fa.entry.js +2 -0
- package/dist/pcm-agents/p-c74c49fa.entry.js.map +1 -0
- package/dist/pcm-agents/p-d63af61c.entry.js +2 -0
- package/dist/pcm-agents/p-d63af61c.entry.js.map +1 -0
- package/dist/pcm-agents/p-dfe97adc.entry.js +2 -0
- package/dist/pcm-agents/p-dfe97adc.entry.js.map +1 -0
- package/dist/pcm-agents/p-e8e8fac7.entry.js +8 -0
- package/dist/pcm-agents/p-e8e8fac7.entry.js.map +1 -0
- package/dist/pcm-agents/pcm-agents.esm.js +1 -1
- package/dist/pcm-agents/pcm-ats-mnms-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-hr-chat-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-htws-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-jd-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-jlpp-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-jlsx-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-jlzz-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-mnct-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-mnms-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-qgqjl-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-zygh-modal.entry.esm.js.map +1 -1
- package/dist/pcm-agents/pcm-zygh-v2-modal.entry.esm.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/p-15dnKCv-.js.map +0 -1
- package/dist/components/p-CiOoPWWj.js.map +0 -1
- package/dist/components/p-CoYv1Eyd.js.map +0 -1
- package/dist/components/p-D6Fe15eA.js.map +0 -1
- package/dist/components/p-IT_Yngxh.js.map +0 -1
- package/dist/components/p-wZema4At.js.map +0 -1
- package/dist/pcm-agents/p-142e0b95.entry.js +0 -2
- package/dist/pcm-agents/p-142e0b95.entry.js.map +0 -1
- package/dist/pcm-agents/p-249bc153.entry.js +0 -2
- package/dist/pcm-agents/p-249bc153.entry.js.map +0 -1
- package/dist/pcm-agents/p-61261a8e.entry.js +0 -2
- package/dist/pcm-agents/p-61261a8e.entry.js.map +0 -1
- package/dist/pcm-agents/p-6cbfeac1.entry.js +0 -2
- package/dist/pcm-agents/p-6cbfeac1.entry.js.map +0 -1
- package/dist/pcm-agents/p-76a4381a.entry.js +0 -2
- package/dist/pcm-agents/p-76a4381a.entry.js.map +0 -1
- package/dist/pcm-agents/p-791e2973.entry.js +0 -2
- package/dist/pcm-agents/p-791e2973.entry.js.map +0 -1
- package/dist/pcm-agents/p-BKzMDQ2I.js +0 -2
- package/dist/pcm-agents/p-DLAkzyJq.js +0 -2
- package/dist/pcm-agents/p-a84acb61.entry.js +0 -2
- package/dist/pcm-agents/p-a84acb61.entry.js.map +0 -1
- package/dist/pcm-agents/p-abe95426.entry.js +0 -2
- package/dist/pcm-agents/p-abe95426.entry.js.map +0 -1
- package/dist/pcm-agents/p-b5183e44.entry.js +0 -2
- package/dist/pcm-agents/p-b5183e44.entry.js.map +0 -1
- package/dist/pcm-agents/p-ba8010dc.entry.js +0 -8
- package/dist/pcm-agents/p-ba8010dc.entry.js.map +0 -1
- package/dist/pcm-agents/p-cf76fe7f.entry.js +0 -2
- package/dist/pcm-agents/p-cf76fe7f.entry.js.map +0 -1
- package/dist/pcm-agents/p-e641baa8.entry.js +0 -2
- package/dist/pcm-agents/p-e641baa8.entry.js.map +0 -1
- package/dist/pcm-agents/p-fa4728f1.entry.js +0 -2
- package/dist/pcm-agents/p-fa4728f1.entry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"p-CoYv1Eyd.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,kBAAkB,GAAG,mgaAAmga;;ACA9ha,MAAM,WAAW,GAAG,wyzBAAwyzB;;ACA5zzB,MAAM,OAAO,GAAG,2wBAA2wB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/pcm-app-chat-modal/pcm-app-chat-modal.css?tag=pcm-app-chat-modal&encapsulation=shadow","src/global/markdown.css?tag=pcm-app-chat-modal&encapsulation=shadow","src/global/host.css?tag=pcm-app-chat-modal&encapsulation=shadow"],"sourcesContent":[":host {\r\n display: block;\r\n font-size: 16px;\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 overflow-y: auto;\r\n z-index: 1000;\r\n}\r\n\r\n/* 全屏模式下的overlay样式 */\r\n.fullscreen-overlay {\r\n padding: 0;\r\n /* 改为基于父组件的全屏 */\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.modal-container {\r\n background: white;\r\n border-radius: 8px;\r\n width: 100%;\r\n max-width: 900px;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n margin: 5vh auto auto auto;\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/* 确保内容区域也使用 flex 布局并占满剩余空间 */\r\n.modal-container.fullscreen>div:not(.modal-header):not(.initial-upload) {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n overflow: hidden;\r\n /* 防止内容溢出 */\r\n height: 100%;\r\n}\r\n\r\n/* PC端布局 */\r\n.pc-layout {\r\n width: 80%;\r\n max-width: 800px;\r\n /* height: 80vh; */\r\n /* max-height: 700px; */\r\n min-width: 320px;\r\n min-height: 400px;\r\n}\r\n\r\n.video-preview.placeholder {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: #eaeaea;\r\n}\r\n\r\n.placeholder-status {\r\n color: #00000066;\r\n}\r\n\r\n.placeholder-status p {\r\n font-size: 16px;\r\n}\r\n\r\n.waiting-message p {\r\n margin: 0;\r\n font-size: 16px;\r\n color: white;\r\n font-weight: 500;\r\n}\r\n\r\n.recording-container {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n.video-container {\r\n width: 100%;\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n margin-bottom: 20px;\r\n}\r\n\r\n.video-area {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n.stop-recording-button {\r\n width: 100%;\r\n height: 100%;\r\n font-size: 16px;\r\n background: #f44336;\r\n border-radius: 6px;\r\n color: white;\r\n border: none;\r\n cursor: pointer;\r\n}\r\n\r\n.stop-recording-button:hover {\r\n background: #d32f2f;\r\n}\r\n\r\n.play-audio-container {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\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 min-height: 50px;\r\n border-bottom: 1px solid #e8e8e8;\r\n flex-shrink: 0;\r\n /* 防止头部被压缩 */\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.header-left > div {\r\n font-size: 16px;\r\n}\r\n\r\n.header-title-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n}\r\n\r\n.header-title-group > div:first-child {\r\n font-size: 16px;\r\n}\r\n\r\n.header-disclaimer {\r\n font-size: 11px;\r\n color: #999;\r\n line-height: 1;\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.chat-container {\r\n background-image: url(https://pub.pincaimao.com/static/web/images/login/bg_login_m.png);\r\n background-size: 100%;\r\n height: 100%;\r\n border-radius: 0px 0px 8px 8px;\r\n}\r\n\r\n.chat-history {\r\n position: relative;\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 20px;\r\n scroll-behavior: smooth;\r\n height: 60vh;\r\n min-height: 400px;\r\n max-height: 900px;\r\n}\r\n\r\n/* 添加全屏模式下的样式 */\r\n.fullscreen .chat-history {\r\n height: auto;\r\n flex: 1 1 auto;\r\n}\r\n\r\n.message-input {\r\n padding: 16px;\r\n border-top: 1px solid #eee;\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n}\r\n\r\n.message-input input {\r\n flex: 1;\r\n padding: 8px 12px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n outline: none;\r\n transition: border-color 0.2s ease;\r\n}\r\n\r\n.message-input input:focus {\r\n border-color: #bbb;\r\n}\r\n\r\n/* 消息样式 */\r\n.message {\r\n margin-bottom: 16px;\r\n opacity: 1;\r\n transition: opacity 0.3s ease;\r\n}\r\n\r\n.message-content {\r\n max-width: 70%;\r\n padding: 8px 12px;\r\n border-radius: 8px;\r\n word-break: break-word;\r\n}\r\n\r\n.message-content p {\r\n margin: 0;\r\n word-break: break-word;\r\n}\r\n\r\n.user-message {\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n\r\n.agent-message {\r\n display: flex;\r\n justify-content: flex-start;\r\n}\r\n\r\n.user-message .message-content {\r\n background-color: #007bff;\r\n color: white;\r\n}\r\n\r\n.agent-message .message-content {\r\n background-color: #f1f1f1;\r\n}\r\n\r\n.message-time {\r\n font-size: 12px;\r\n color: #999;\r\n margin-top: 4px;\r\n display: block;\r\n}\r\n\r\n/** 结束对话按钮 */\r\n.cancel-button {\r\n width: 150px;\r\n height: 38px;\r\n background: #0d75fb;\r\n color: #fff;\r\n border: none;\r\n margin-bottom: 10px;\r\n cursor: pointer;\r\n border-radius: 6px;\r\n}\r\n\r\n.cancel-button.disabled {\r\n background: #d9d9d9;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* 发送按钮样式 */\r\n.send-button {\r\n width: 38px;\r\n height: 38px;\r\n border-radius: 16px;\r\n background: #0d75fb;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n transition: background-color 0.2s ease;\r\n}\r\n\r\n.send-button img {\r\n width: 24px;\r\n height: 24px;\r\n}\r\n\r\n.send-button:hover {\r\n background: #0a62d6;\r\n}\r\n\r\n.send-button.disabled {\r\n background: #d9d9d9;\r\n cursor: not-allowed;\r\n}\r\n\r\n.empty-state {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n color: #999;\r\n text-align: center;\r\n}\r\n\r\n.loading-container {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: rgba(255, 255, 255, 0.98);\r\n z-index: 1;\r\n opacity: 1;\r\n transition: opacity 0.3s ease;\r\n}\r\n\r\n.loading-container p {\r\n margin-top: 16px;\r\n color: #666;\r\n font-size: 14px;\r\n}\r\n\r\n.loading-spinner {\r\n width: 40px;\r\n height: 40px;\r\n border: 3px solid #f3f3f3;\r\n border-top: 3px solid #1890ff;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n/* 修改 messages-wrapper 的样式 */\r\n.messages-wrapper {\r\n width: 100%;\r\n min-height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n /* 当内容少时,将内容放在底部 */\r\n justify-content: flex-end;\r\n}\r\n\r\n/* 当有很多消息时,取消固定在底部 */\r\n.messages-wrapper.has-overflow {\r\n justify-content: flex-start;\r\n}\r\n\r\n.suggested-questions {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 16px;\r\n}\r\n\r\n.suggested-question {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 8px 12px;\r\n background-color: #f3f4f6;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n color: #374151;\r\n transition: background-color 0.2s;\r\n}\r\n\r\n.suggested-question:hover {\r\n background-color: #e5e7eb;\r\n}\r\n\r\n.arrow-right {\r\n margin-left: 8px;\r\n}\r\n\r\n.loading-suggestions {\r\n display: flex;\r\n justify-content: center;\r\n padding: 16px;\r\n}\r\n\r\n.loading-spinner-small {\r\n width: 20px;\r\n height: 20px;\r\n border: 2px solid #e5e7eb;\r\n border-top-color: #6b7280;\r\n border-radius: 50%;\r\n animation: spin 0.8s linear infinite;\r\n}\r\n\r\n/* 添加上传按钮样式 */\r\n.upload-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 color: #666;\r\n border-radius: 4px;\r\n transition: background-color 0.2s;\r\n}\r\n\r\n.upload-button:hover {\r\n background-color: rgba(0, 0, 0, 0.04);\r\n}\r\n\r\n.upload-button svg {\r\n width: 20px;\r\n height: 20px;\r\n}\r\n\r\n/* 隐藏原生文件输入框 */\r\n.file-input {\r\n display: none;\r\n}\r\n\r\n/* 添加文件名显示区域样式 */\r\n.selected-file {\r\n font-size: 12px;\r\n color: #666;\r\n margin-left: 8px;\r\n max-width: 150px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.input-wrapper {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n padding: 0 4px;\r\n background: white;\r\n}\r\n\r\n.input-wrapper input {\r\n border: none;\r\n flex: 1;\r\n padding: 8px;\r\n outline: none;\r\n}\r\n\r\n.input-wrapper:focus-within {\r\n border-color: #bbb;\r\n}\r\n\r\n/* 文件预览区域样式 */\r\n.file-preview {\r\n padding: 8px 16px;\r\n border-top: 1px solid #eee;\r\n background-color: #f9f9f9;\r\n}\r\n\r\n.recording-section {\r\n border-top: 1px solid #eee;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n padding: 10px 20px 0px 20px;\r\n border-radius: 14px 14px 0 0;\r\n flex: 0 0 auto;\r\n}\r\n\r\n.recording-section .video-preview {\r\n width: 100%;\r\n height: 200px;\r\n max-width: 400px;\r\n position: relative;\r\n margin-bottom: 10px;\r\n border: 1px solid #ddd;\r\n border-radius: 12px;\r\n overflow: hidden;\r\n}\r\n\r\n.recording-section video {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n}\r\n\r\n/* 修改 recording-status 样式 */\r\n.recording-status {\r\n position: absolute;\r\n top: 10px;\r\n left: 10px;\r\n background-color: rgba(0, 0, 0, 0.6);\r\n color: white;\r\n padding: 4px 8px;\r\n border-radius: 4px;\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n font-size: 14px;\r\n z-index: 0;\r\n}\r\n\r\n.recording-status .recording-dot {\r\n display: inline-block;\r\n width: 10px;\r\n height: 10px;\r\n background-color: red;\r\n border-radius: 50%;\r\n margin-right: 5px;\r\n animation: blink 1s infinite;\r\n}\r\n\r\n.recording-status.warning {\r\n color: #ff4d4f;\r\n animation: blink 1s infinite;\r\n}\r\n\r\n@keyframes blink {\r\n 0% {\r\n opacity: 1;\r\n }\r\n\r\n 50% {\r\n opacity: 0.5;\r\n }\r\n\r\n 100% {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n.recording-section .stop-recording-button {\r\n background-color: #f44336;\r\n color: white;\r\n border: none;\r\n cursor: pointer;\r\n font-weight: bold;\r\n}\r\n\r\n.recording-section .stop-recording-button:hover {\r\n background-color: #d32f2f;\r\n}\r\n\r\n.fullscreen {\r\n width: 100vw;\r\n border-radius: 0;\r\n height: 100vh;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n}\r\n\r\n.recording-controls {\r\n margin-top: 10px;\r\n height: 53px;\r\n width: 100%;\r\n max-width: 400px;\r\n display: flex;\r\n justify-content: center;\r\n}\r\n\r\n.recording-controls .waiting-message {\r\n text-align: center;\r\n color: white;\r\n font-size: 16px;\r\n background-color: #0d75fb;\r\n border-radius: 6px;\r\n width: 95%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n cursor: pointer;\r\n}\r\n\r\n.recording-controls .waiting-message.loading {\r\n background: #faad14;\r\n}\r\n\r\n.recording-controls .waiting-message p {\r\n margin: 0;\r\n font-size: 16px;\r\n color: white;\r\n font-weight: 500;\r\n}\r\n\r\n.recording-controls .stop-recording-button {\r\n background-color: #dc3545;\r\n color: white;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 16px;\r\n}\r\n\r\n.recording-controls .stop-recording-button:hover {\r\n background-color: #c82333;\r\n}\r\n\r\n/* 添加禁用状态的样式 */\r\n.recording-controls .stop-recording-button.disabled {\r\n background: #ccc;\r\n cursor: not-allowed;\r\n}\r\n\r\n.recording-controls .stop-recording-button.disabled:hover {\r\n background: #ccc;\r\n}\r\n\r\n/* 添加进度条和数字进度的样式 */\r\n.progress-container {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n max-width: 400px;\r\n margin-top: 10px;\r\n padding: 0 5px;\r\n}\r\n\r\n.progress-bar-container {\r\n height: 4px;\r\n background-color: #e5e5e5;\r\n border-radius: 2px;\r\n overflow: hidden;\r\n margin-right: 10px;\r\n width: 75px;\r\n}\r\n\r\n.progress-bar {\r\n height: 100%;\r\n background-image: linear-gradient(111deg, #4a9fff 0%, #1058ff 100%);\r\n border-radius: 2px;\r\n transition: width 0.3s ease;\r\n}\r\n\r\n.progress-text {\r\n font-size: 14px;\r\n color: #666;\r\n white-space: nowrap;\r\n}\r\n\r\n/* 重新设计文本输入区域样式 */\r\n.text-input-area {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n height: 100%;\r\n padding: 0px 16px 16px 16px;\r\n border-radius: 8px;\r\n border: none;\r\n /* 确保容器本身没有边框 */\r\n}\r\n\r\n/* 修改文本输入框样式 */\r\n.text-answer-input {\r\n flex: 1;\r\n min-height: 80px;\r\n padding: 12px 12px 0px 12px;\r\n border: 1px solid #ddd;\r\n border-radius: 8px 8px 0 0;\r\n resize: none;\r\n font-size: 16px;\r\n background-color: #fff;\r\n border-bottom: none;\r\n outline: none;\r\n /* 移除默认的焦点轮廓 */\r\n}\r\n\r\n/* 修改工具栏样式 */\r\n.input-toolbar {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n padding: 8px 12px;\r\n background-color: #fff;\r\n border: 1px solid #ddd;\r\n border-top: none;\r\n border-radius: 0 0 8px 8px;\r\n}\r\n\r\n/* 当输入框获得焦点时,修改边框颜色 */\r\n.text-answer-input:focus {\r\n border-color: rgb(74, 144, 226);\r\n border-bottom: none;\r\n}\r\n\r\n.text-answer-input:focus+.input-toolbar {\r\n border-color: rgb(74, 144, 226);\r\n border-top: none;\r\n}\r\n\r\n/* 左侧工具按钮区域 */\r\n.toolbar-actions {\r\n width: 32px;\r\n height: 32px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n margin-right: 10px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 6px;\r\n}\r\n\r\n.toolbar-actions:hover {\r\n background-color: #f0f0f0;\r\n}\r\n\r\n/* 修改工具按钮样式,确保居中 */\r\n.toolbar-button {\r\n background: transparent;\r\n border: none;\r\n color: #666;\r\n cursor: pointer;\r\n padding: 0;\r\n margin: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n/* 确保按钮内部的内容也居中 */\r\n.toolbar-button>div,\r\n.toolbar-button>svg {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n/* 发送按钮样式 */\r\n.submit-text-button {\r\n padding: 6px 16px;\r\n background-color: #4a90e2;\r\n color: white;\r\n border: none;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n font-weight: 500;\r\n cursor: pointer;\r\n transition: background-color 0.2s;\r\n}\r\n\r\n.submit-text-button:hover:not(.disabled) {\r\n background-color: #3a7bc8;\r\n}\r\n\r\n.submit-text-button.disabled {\r\n background-color: #b3b3b3;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* 语音输入按钮样式 */\r\n.toolbar-button.recording {\r\n background-color: rgba(255, 0, 0, 0.1);\r\n color: #ff3b30;\r\n animation: pulse 1.5s infinite;\r\n}\r\n\r\n.toolbar-button.converting {\r\n background-color: rgba(0, 122, 255, 0.1);\r\n color: #007aff;\r\n}\r\n\r\n.toolbar-button .recording-time {\r\n font-size: 12px;\r\n margin-left: 4px;\r\n}\r\n\r\n.converting-indicator {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.converting-indicator svg {\r\n animation: spin 1.5s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n@keyframes pulse {\r\n 0% {\r\n box-shadow: 0 0 0 0 rgba(255, 0, 0, 0.4);\r\n }\r\n\r\n 70% {\r\n box-shadow: 0 0 0 6px rgba(255, 0, 0, 0);\r\n }\r\n\r\n 100% {\r\n box-shadow: 0 0 0 0 rgba(255, 0, 0, 0);\r\n }\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: 0;\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.workspace-section {\r\n width: 100%;\r\n padding: 0px 16px 16px;\r\n}\r\n\r\n.workspace-toolbar {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: end;\r\n gap: 12px;\r\n position: relative;\r\n}\r\n\r\n.workspace-button {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 8px 16px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 6px;\r\n background: white;\r\n color: #666;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n}\r\n\r\n.workspace-button:hover {\r\n border-color: #4096ff;\r\n color: #4096ff;\r\n box-shadow: 0 2px 4px rgba(64, 150, 255, 0.1);\r\n}\r\n\r\n.workspace-button svg {\r\n flex-shrink: 0;\r\n}\r\n\r\n/* 结束面试按钮样式 */\r\n.workspace-button.end-interview-button {\r\n background: #ff4d4f;\r\n color: white;\r\n border-color: #ff4d4f;\r\n}\r\n\r\n.workspace-button.end-interview-button:hover:not(:disabled) {\r\n background: #ff7875;\r\n border-color: #ff7875;\r\n color: white;\r\n box-shadow: 0 2px 4px rgba(255, 77, 79, 0.2);\r\n}\r\n\r\n.workspace-button.end-interview-button:disabled {\r\n background: #d9d9d9;\r\n border-color: #d9d9d9;\r\n color: #999;\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n}\r\n\r\n/* 数字人容器样式 */\r\n.digital-human-wrapper {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 120px;\r\n height: 80px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 8px;\r\n background: #fafafa;\r\n overflow: hidden;\r\n position: absolute;\r\n right: 0px;\r\n}\r\n\r\n\r\n/* 历史会话抽屉样式 */\r\n.history-drawer-content {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.conversation-list {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 8px 0;\r\n}\r\n\r\n.loading-conversations,\r\n.empty-conversations {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 40px 20px;\r\n color: #999;\r\n}\r\n\r\n.loading-conversations .loading-spinner-small {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.conversation-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n margin: 0 8px 4px 8px;\r\n border-radius: 8px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n border: 1px solid transparent;\r\n}\r\n\r\n.conversation-item:hover {\r\n background: #f5f5f5;\r\n}\r\n\r\n.conversation-item.active {\r\n background: #e6f7ff;\r\n border-color: #1890ff;\r\n}\r\n\r\n.conversation-info {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.conversation-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n color: #262626;\r\n margin-bottom: 4px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.conversation-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #8c8c8c;\r\n}\r\n\r\n.conversation-time {\r\n flex-shrink: 0;\r\n}\r\n\r\n.message-count {\r\n flex-shrink: 0;\r\n}\r\n\r\n.conversation-status {\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n font-size: 11px;\r\n font-weight: 500;\r\n}\r\n\r\n.conversation-status.completed {\r\n background: #f6ffed;\r\n color: #52c41a;\r\n}\r\n\r\n.conversation-status.running {\r\n background: #fff7e6;\r\n color: #fa8c16;\r\n}\r\n\r\n.current-indicator {\r\n flex-shrink: 0;\r\n color: #1890ff;\r\n margin-left: 8px;\r\n}","\r\n.markdown-body {\r\n --base-size-4: 4px;\r\n --base-size-8: 8px;\r\n --base-size-16: 16px;\r\n --base-size-24: 24px;\r\n --base-size-40: 40px;\r\n --base-text-weight-normal: 400;\r\n --base-text-weight-medium: 500;\r\n --base-text-weight-semibold: 600;\r\n --fontStack-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;\r\n --fgColor-accent: Highlight;\r\n }\r\n \r\n @media (prefers-color-scheme: dark) {\r\n \r\n .markdown-body,\r\n [data-theme=\"dark\"] {\r\n /* dark */\r\n color-scheme: dark;\r\n --focus-outlineColor: #0969da;\r\n --fgColor-default: #1f2328;\r\n --fgColor-muted: #59636e;\r\n --fgColor-accent: #0969da;\r\n --fgColor-success: #1a7f37;\r\n --fgColor-attention: #9a6700;\r\n --fgColor-danger: #d1242f;\r\n --fgColor-done: #8250df;\r\n --bgColor-default: #ffffff;\r\n --bgColor-muted: #f6f8fa;\r\n --bgColor-neutral-muted: #818b981f;\r\n --bgColor-attention-muted: #fff8c5;\r\n --borderColor-default: #d1d9e0;\r\n --borderColor-muted: #d1d9e0b3;\r\n --borderColor-neutral-muted: #d1d9e0b3;\r\n --borderColor-accent-emphasis: #0969da;\r\n --borderColor-success-emphasis: #1a7f37;\r\n --borderColor-attention-emphasis: #9a6700;\r\n --borderColor-danger-emphasis: #cf222e;\r\n --borderColor-done-emphasis: #8250df;\r\n --color-prettylights-syntax-comment: #59636e;\r\n --color-prettylights-syntax-constant: #0550ae;\r\n --color-prettylights-syntax-constant-other-reference-link: #0a3069;\r\n --color-prettylights-syntax-entity: #6639ba;\r\n --color-prettylights-syntax-storage-modifier-import: #1f2328;\r\n --color-prettylights-syntax-entity-tag: #0550ae;\r\n --color-prettylights-syntax-keyword: #cf222e;\r\n --color-prettylights-syntax-string: #0a3069;\r\n --color-prettylights-syntax-variable: #953800;\r\n --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;\r\n --color-prettylights-syntax-brackethighlighter-angle: #59636e;\r\n --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;\r\n --color-prettylights-syntax-invalid-illegal-bg: #82071e;\r\n --color-prettylights-syntax-carriage-return-text: #f6f8fa;\r\n --color-prettylights-syntax-carriage-return-bg: #cf222e;\r\n --color-prettylights-syntax-string-regexp: #116329;\r\n --color-prettylights-syntax-markup-list: #3b2300;\r\n --color-prettylights-syntax-markup-heading: #0550ae;\r\n --color-prettylights-syntax-markup-italic: #1f2328;\r\n --color-prettylights-syntax-markup-bold: #1f2328;\r\n --color-prettylights-syntax-markup-deleted-text: #82071e;\r\n --color-prettylights-syntax-markup-deleted-bg: #ffebe9;\r\n --color-prettylights-syntax-markup-inserted-text: #116329;\r\n --color-prettylights-syntax-markup-inserted-bg: #dafbe1;\r\n --color-prettylights-syntax-markup-changed-text: #953800;\r\n --color-prettylights-syntax-markup-changed-bg: #ffd8b5;\r\n --color-prettylights-syntax-markup-ignored-text: #d1d9e0;\r\n --color-prettylights-syntax-markup-ignored-bg: #0550ae;\r\n --color-prettylights-syntax-meta-diff-range: #8250df;\r\n --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;\r\n }\r\n }\r\n \r\n @media (prefers-color-scheme: light) {\r\n \r\n .markdown-body,\r\n [data-theme=\"light\"] {\r\n /* light */\r\n color-scheme: light;\r\n --focus-outlineColor: #0969da;\r\n --fgColor-default: #1f2328;\r\n --fgColor-muted: #59636e;\r\n --fgColor-accent: #0969da;\r\n --fgColor-success: #1a7f37;\r\n --fgColor-attention: #9a6700;\r\n --fgColor-danger: #d1242f;\r\n --fgColor-done: #8250df;\r\n --bgColor-default: #ffffff;\r\n --bgColor-muted: #f6f8fa;\r\n --bgColor-neutral-muted: #818b981f;\r\n --bgColor-attention-muted: #fff8c5;\r\n --borderColor-default: #d1d9e0;\r\n --borderColor-muted: #d1d9e0b3;\r\n --borderColor-neutral-muted: #d1d9e0b3;\r\n --borderColor-accent-emphasis: #0969da;\r\n --borderColor-success-emphasis: #1a7f37;\r\n --borderColor-attention-emphasis: #9a6700;\r\n --borderColor-danger-emphasis: #cf222e;\r\n --borderColor-done-emphasis: #8250df;\r\n --color-prettylights-syntax-comment: #59636e;\r\n --color-prettylights-syntax-constant: #0550ae;\r\n --color-prettylights-syntax-constant-other-reference-link: #0a3069;\r\n --color-prettylights-syntax-entity: #6639ba;\r\n --color-prettylights-syntax-storage-modifier-import: #1f2328;\r\n --color-prettylights-syntax-entity-tag: #0550ae;\r\n --color-prettylights-syntax-keyword: #cf222e;\r\n --color-prettylights-syntax-string: #0a3069;\r\n --color-prettylights-syntax-variable: #953800;\r\n --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;\r\n --color-prettylights-syntax-brackethighlighter-angle: #59636e;\r\n --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;\r\n --color-prettylights-syntax-invalid-illegal-bg: #82071e;\r\n --color-prettylights-syntax-carriage-return-text: #f6f8fa;\r\n --color-prettylights-syntax-carriage-return-bg: #cf222e;\r\n --color-prettylights-syntax-string-regexp: #116329;\r\n --color-prettylights-syntax-markup-list: #3b2300;\r\n --color-prettylights-syntax-markup-heading: #0550ae;\r\n --color-prettylights-syntax-markup-italic: #1f2328;\r\n --color-prettylights-syntax-markup-bold: #1f2328;\r\n --color-prettylights-syntax-markup-deleted-text: #82071e;\r\n --color-prettylights-syntax-markup-deleted-bg: #ffebe9;\r\n --color-prettylights-syntax-markup-inserted-text: #116329;\r\n --color-prettylights-syntax-markup-inserted-bg: #dafbe1;\r\n --color-prettylights-syntax-markup-changed-text: #953800;\r\n --color-prettylights-syntax-markup-changed-bg: #ffd8b5;\r\n --color-prettylights-syntax-markup-ignored-text: #d1d9e0;\r\n --color-prettylights-syntax-markup-ignored-bg: #0550ae;\r\n --color-prettylights-syntax-meta-diff-range: #8250df;\r\n --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;\r\n }\r\n }\r\n \r\n .markdown-body {\r\n -ms-text-size-adjust: 100%;\r\n -webkit-text-size-adjust: 100%;\r\n margin: 0;\r\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Noto Sans\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\";\r\n font-size: 16px;\r\n line-height: 1.5;\r\n word-wrap: break-word;\r\n }\r\n \r\n .markdown-body .octicon {\r\n display: inline-block;\r\n fill: currentColor;\r\n vertical-align: text-bottom;\r\n }\r\n \r\n .markdown-body h1:hover .anchor .octicon-link:before,\r\n .markdown-body h2:hover .anchor .octicon-link:before,\r\n .markdown-body h3:hover .anchor .octicon-link:before,\r\n .markdown-body h4:hover .anchor .octicon-link:before,\r\n .markdown-body h5:hover .anchor .octicon-link:before,\r\n .markdown-body h6:hover .anchor .octicon-link:before {\r\n width: 16px;\r\n height: 16px;\r\n content: ' ';\r\n display: inline-block;\r\n background-color: currentColor;\r\n -webkit-mask-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>\");\r\n mask-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>\");\r\n }\r\n \r\n .markdown-body details,\r\n .markdown-body figcaption,\r\n .markdown-body figure {\r\n display: block;\r\n }\r\n \r\n .markdown-body summary {\r\n display: list-item;\r\n }\r\n \r\n .markdown-body [hidden] {\r\n display: none !important;\r\n }\r\n \r\n .markdown-body a {\r\n background-color: transparent;\r\n color: var(--fgColor-accent);\r\n text-decoration: none;\r\n }\r\n \r\n .markdown-body abbr[title] {\r\n border-bottom: none;\r\n -webkit-text-decoration: underline dotted;\r\n text-decoration: underline dotted;\r\n }\r\n \r\n .markdown-body b,\r\n .markdown-body strong {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n }\r\n \r\n .markdown-body dfn {\r\n font-style: italic;\r\n }\r\n \r\n .markdown-body h1 {\r\n margin: .67em 0;\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n padding-bottom: .3em;\r\n font-size: 1.5em;\r\n border-bottom: 1px solid var(--borderColor-muted);\r\n }\r\n \r\n .markdown-body mark {\r\n background-color: var(--bgColor-attention-muted);\r\n color: var(--fgColor-default);\r\n }\r\n \r\n .markdown-body small {\r\n font-size: 90%;\r\n }\r\n \r\n .markdown-body sub,\r\n .markdown-body sup {\r\n font-size: 75%;\r\n line-height: 0;\r\n position: relative;\r\n vertical-align: baseline;\r\n }\r\n \r\n .markdown-body sub {\r\n bottom: -0.25em;\r\n }\r\n \r\n .markdown-body sup {\r\n top: -0.5em;\r\n }\r\n \r\n .markdown-body img {\r\n border-style: none;\r\n max-width: 100%;\r\n box-sizing: content-box;\r\n }\r\n \r\n .markdown-body code,\r\n .markdown-body kbd,\r\n .markdown-body pre,\r\n .markdown-body samp {\r\n font-family: monospace;\r\n font-size: 1em;\r\n }\r\n \r\n .markdown-body figure {\r\n margin: 1em var(--base-size-40);\r\n }\r\n \r\n .markdown-body hr {\r\n box-sizing: content-box;\r\n overflow: hidden;\r\n background: transparent;\r\n border-bottom: 1px solid var(--borderColor-muted);\r\n height: .25em;\r\n padding: 0;\r\n margin: var(--base-size-24) 0;\r\n background-color: var(--borderColor-default);\r\n border: 0;\r\n }\r\n \r\n .markdown-body input {\r\n font: inherit;\r\n margin: 0;\r\n overflow: visible;\r\n font-family: inherit;\r\n font-size: inherit;\r\n line-height: inherit;\r\n }\r\n \r\n .markdown-body [type=button],\r\n .markdown-body [type=reset],\r\n .markdown-body [type=submit] {\r\n -webkit-appearance: button;\r\n appearance: button;\r\n }\r\n \r\n .markdown-body [type=checkbox],\r\n .markdown-body [type=radio] {\r\n box-sizing: border-box;\r\n padding: 0;\r\n }\r\n \r\n .markdown-body [type=number]::-webkit-inner-spin-button,\r\n .markdown-body [type=number]::-webkit-outer-spin-button {\r\n height: auto;\r\n }\r\n \r\n .markdown-body [type=search]::-webkit-search-cancel-button,\r\n .markdown-body [type=search]::-webkit-search-decoration {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n }\r\n \r\n .markdown-body ::-webkit-input-placeholder {\r\n color: inherit;\r\n opacity: .54;\r\n }\r\n \r\n .markdown-body ::-webkit-file-upload-button {\r\n -webkit-appearance: button;\r\n appearance: button;\r\n font: inherit;\r\n }\r\n \r\n .markdown-body a:hover {\r\n text-decoration: underline;\r\n }\r\n \r\n .markdown-body ::placeholder {\r\n color: var(--fgColor-muted);\r\n opacity: 1;\r\n }\r\n \r\n .markdown-body hr::before {\r\n display: table;\r\n content: \"\";\r\n }\r\n \r\n .markdown-body hr::after {\r\n display: table;\r\n clear: both;\r\n content: \"\";\r\n }\r\n \r\n .markdown-body table {\r\n border-spacing: 0;\r\n border-collapse: collapse;\r\n display: block;\r\n width: max-content;\r\n max-width: 100%;\r\n overflow: auto;\r\n font-variant: tabular-nums;\r\n }\r\n \r\n .markdown-body td,\r\n .markdown-body th {\r\n padding: 0;\r\n }\r\n \r\n .markdown-body details summary {\r\n cursor: pointer;\r\n }\r\n \r\n .markdown-body a:focus,\r\n .markdown-body [role=button]:focus,\r\n .markdown-body input[type=radio]:focus,\r\n .markdown-body input[type=checkbox]:focus {\r\n outline: 2px solid var(--focus-outlineColor);\r\n outline-offset: -2px;\r\n box-shadow: none;\r\n }\r\n \r\n .markdown-body a:focus:not(:focus-visible),\r\n .markdown-body [role=button]:focus:not(:focus-visible),\r\n .markdown-body input[type=radio]:focus:not(:focus-visible),\r\n .markdown-body input[type=checkbox]:focus:not(:focus-visible) {\r\n outline: solid 1px transparent;\r\n }\r\n \r\n .markdown-body a:focus-visible,\r\n .markdown-body [role=button]:focus-visible,\r\n .markdown-body input[type=radio]:focus-visible,\r\n .markdown-body input[type=checkbox]:focus-visible {\r\n outline: 2px solid var(--focus-outlineColor);\r\n outline-offset: -2px;\r\n box-shadow: none;\r\n }\r\n \r\n .markdown-body a:not([class]):focus,\r\n .markdown-body a:not([class]):focus-visible,\r\n .markdown-body input[type=radio]:focus,\r\n .markdown-body input[type=radio]:focus-visible,\r\n .markdown-body input[type=checkbox]:focus,\r\n .markdown-body input[type=checkbox]:focus-visible {\r\n outline-offset: 0;\r\n }\r\n \r\n .markdown-body kbd {\r\n display: inline-block;\r\n padding: var(--base-size-4);\r\n font: 11px var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\r\n line-height: 10px;\r\n color: var(--fgColor-default);\r\n vertical-align: middle;\r\n background-color: var(--bgColor-muted);\r\n border: solid 1px var(--borderColor-neutral-muted);\r\n border-bottom-color: var(--borderColor-neutral-muted);\r\n border-radius: 6px;\r\n box-shadow: inset 0 -1px 0 var(--borderColor-neutral-muted);\r\n }\r\n \r\n .markdown-body h1,\r\n .markdown-body h2,\r\n .markdown-body h3,\r\n .markdown-body h4,\r\n .markdown-body h5,\r\n .markdown-body h6 {\r\n margin-top: var(--base-size-24);\r\n margin-bottom: var(--base-size-16);\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n line-height: 1.25;\r\n }\r\n \r\n .markdown-body h2 {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n padding-bottom: .3em;\r\n font-size: 1.2em;\r\n border-bottom: 1px solid var(--borderColor-muted);\r\n }\r\n \r\n .markdown-body h3 {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n font-size: 1.05em;\r\n }\r\n \r\n .markdown-body h4 {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n font-size: 0.875em;\r\n }\r\n \r\n .markdown-body h5 {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n font-size: .85em;\r\n }\r\n \r\n .markdown-body h6 {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n font-size: .80em;\r\n color: var(--fgColor-muted);\r\n }\r\n \r\n .markdown-body p {\r\n margin-top: 0;\r\n margin-bottom: 10px;\r\n }\r\n \r\n .markdown-body blockquote {\r\n margin: 0;\r\n padding: 0 1em;\r\n color: var(--fgColor-muted);\r\n border-left: .25em solid var(--borderColor-default);\r\n }\r\n \r\n .markdown-body ul,\r\n .markdown-body ol {\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n padding-left: 2em;\r\n }\r\n \r\n .markdown-body ol ol,\r\n .markdown-body ul ol {\r\n list-style-type: lower-roman;\r\n }\r\n \r\n .markdown-body ul ul ol,\r\n .markdown-body ul ol ol,\r\n .markdown-body ol ul ol,\r\n .markdown-body ol ol ol {\r\n list-style-type: lower-alpha;\r\n }\r\n \r\n .markdown-body dd {\r\n margin-left: 0;\r\n }\r\n \r\n .markdown-body tt,\r\n .markdown-body code,\r\n .markdown-body samp {\r\n font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\r\n font-size: 12px;\r\n }\r\n \r\n .markdown-body pre {\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\r\n font-size: 12px;\r\n word-wrap: normal;\r\n }\r\n \r\n .markdown-body .octicon {\r\n display: inline-block;\r\n overflow: visible !important;\r\n vertical-align: text-bottom;\r\n fill: currentColor;\r\n }\r\n \r\n .markdown-body input::-webkit-outer-spin-button,\r\n .markdown-body input::-webkit-inner-spin-button {\r\n margin: 0;\r\n appearance: none;\r\n }\r\n \r\n .markdown-body .mr-2 {\r\n margin-right: var(--base-size-8, 8px) !important;\r\n }\r\n \r\n .markdown-body::before {\r\n display: table;\r\n content: \"\";\r\n }\r\n \r\n .markdown-body::after {\r\n display: table;\r\n clear: both;\r\n content: \"\";\r\n }\r\n \r\n .markdown-body>*:first-child {\r\n margin-top: 0 !important;\r\n }\r\n \r\n .markdown-body>*:last-child {\r\n margin-bottom: 0 !important;\r\n }\r\n \r\n .markdown-body a:not([href]) {\r\n color: inherit;\r\n text-decoration: none;\r\n }\r\n \r\n .markdown-body .absent {\r\n color: var(--fgColor-danger);\r\n }\r\n \r\n .markdown-body .anchor {\r\n float: left;\r\n padding-right: var(--base-size-4);\r\n margin-left: -20px;\r\n line-height: 1;\r\n }\r\n \r\n .markdown-body .anchor:focus {\r\n outline: none;\r\n }\r\n \r\n .markdown-body p,\r\n .markdown-body blockquote,\r\n .markdown-body ul,\r\n .markdown-body ol,\r\n .markdown-body dl,\r\n .markdown-body table,\r\n .markdown-body pre,\r\n .markdown-body details {\r\n margin-top: 0;\r\n margin-bottom: var(--base-size-16);\r\n font-size: 16px;\r\n font-weight: 400;\r\n }\r\n \r\n .markdown-body blockquote>:first-child {\r\n margin-top: 0;\r\n }\r\n \r\n .markdown-body blockquote>:last-child {\r\n margin-bottom: 0;\r\n }\r\n \r\n .markdown-body h1 .octicon-link,\r\n .markdown-body h2 .octicon-link,\r\n .markdown-body h3 .octicon-link,\r\n .markdown-body h4 .octicon-link,\r\n .markdown-body h5 .octicon-link,\r\n .markdown-body h6 .octicon-link {\r\n color: var(--fgColor-default);\r\n vertical-align: middle;\r\n visibility: hidden;\r\n }\r\n \r\n .markdown-body h1:hover .anchor,\r\n .markdown-body h2:hover .anchor,\r\n .markdown-body h3:hover .anchor,\r\n .markdown-body h4:hover .anchor,\r\n .markdown-body h5:hover .anchor,\r\n .markdown-body h6:hover .anchor {\r\n text-decoration: none;\r\n }\r\n \r\n .markdown-body h1:hover .anchor .octicon-link,\r\n .markdown-body h2:hover .anchor .octicon-link,\r\n .markdown-body h3:hover .anchor .octicon-link,\r\n .markdown-body h4:hover .anchor .octicon-link,\r\n .markdown-body h5:hover .anchor .octicon-link,\r\n .markdown-body h6:hover .anchor .octicon-link {\r\n visibility: visible;\r\n }\r\n \r\n .markdown-body h1 tt,\r\n .markdown-body h1 code,\r\n .markdown-body h2 tt,\r\n .markdown-body h2 code,\r\n .markdown-body h3 tt,\r\n .markdown-body h3 code,\r\n .markdown-body h4 tt,\r\n .markdown-body h4 code,\r\n .markdown-body h5 tt,\r\n .markdown-body h5 code,\r\n .markdown-body h6 tt,\r\n .markdown-body h6 code {\r\n padding: 0 .2em;\r\n font-size: inherit;\r\n }\r\n \r\n .markdown-body summary h1,\r\n .markdown-body summary h2,\r\n .markdown-body summary h3,\r\n .markdown-body summary h4,\r\n .markdown-body summary h5,\r\n .markdown-body summary h6 {\r\n display: inline-block;\r\n }\r\n \r\n .markdown-body summary h1 .anchor,\r\n .markdown-body summary h2 .anchor,\r\n .markdown-body summary h3 .anchor,\r\n .markdown-body summary h4 .anchor,\r\n .markdown-body summary h5 .anchor,\r\n .markdown-body summary h6 .anchor {\r\n margin-left: -40px;\r\n }\r\n \r\n .markdown-body summary h1,\r\n .markdown-body summary h2 {\r\n padding-bottom: 0;\r\n border-bottom: 0;\r\n }\r\n \r\n .markdown-body ul.no-list,\r\n .markdown-body ol.no-list {\r\n padding: 0;\r\n list-style-type: none;\r\n }\r\n \r\n .markdown-body ol[type=\"a s\"] {\r\n list-style-type: lower-alpha;\r\n }\r\n \r\n .markdown-body ol[type=\"A s\"] {\r\n list-style-type: upper-alpha;\r\n }\r\n \r\n .markdown-body ol[type=\"i s\"] {\r\n list-style-type: lower-roman;\r\n }\r\n \r\n .markdown-body ol[type=\"I s\"] {\r\n list-style-type: upper-roman;\r\n }\r\n \r\n .markdown-body ol[type=\"1\"] {\r\n list-style-type: decimal;\r\n }\r\n \r\n .markdown-body div>ol:not([type]) {\r\n list-style-type: decimal;\r\n }\r\n \r\n .markdown-body ul ul,\r\n .markdown-body ul ol,\r\n .markdown-body ol ol,\r\n .markdown-body ol ul {\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n }\r\n \r\n .markdown-body li>p {\r\n margin-top: var(--base-size-16);\r\n }\r\n \r\n .markdown-body li+li {\r\n margin-top: .25em;\r\n }\r\n \r\n .markdown-body dl {\r\n padding: 0;\r\n }\r\n \r\n .markdown-body dl dt {\r\n padding: 0;\r\n margin-top: var(--base-size-16);\r\n font-size: 1em;\r\n font-style: italic;\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n }\r\n \r\n .markdown-body dl dd {\r\n padding: 0 var(--base-size-16);\r\n margin-bottom: var(--base-size-16);\r\n }\r\n \r\n .markdown-body table th {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n }\r\n \r\n .markdown-body table th,\r\n .markdown-body table td {\r\n padding: 6px 13px;\r\n border: 1px solid var(--borderColor-default);\r\n }\r\n \r\n .markdown-body table td>:last-child {\r\n margin-bottom: 0;\r\n }\r\n \r\n .markdown-body table tr {\r\n background-color: var(--bgColor-default);\r\n border-top: 1px solid var(--borderColor-muted);\r\n }\r\n \r\n .markdown-body table tr:nth-child(2n) {\r\n background-color: var(--bgColor-muted);\r\n }\r\n \r\n .markdown-body table img {\r\n background-color: transparent;\r\n }\r\n \r\n .markdown-body img[align=right] {\r\n padding-left: 20px;\r\n }\r\n \r\n .markdown-body img[align=left] {\r\n padding-right: 20px;\r\n }\r\n \r\n .markdown-body .emoji {\r\n max-width: none;\r\n vertical-align: text-top;\r\n background-color: transparent;\r\n }\r\n \r\n .markdown-body span.frame {\r\n display: block;\r\n overflow: hidden;\r\n }\r\n \r\n .markdown-body span.frame>span {\r\n display: block;\r\n float: left;\r\n width: auto;\r\n padding: 7px;\r\n margin: 13px 0 0;\r\n overflow: hidden;\r\n border: 1px solid var(--borderColor-default);\r\n }\r\n \r\n .markdown-body span.frame span img {\r\n display: block;\r\n float: left;\r\n }\r\n \r\n .markdown-body span.frame span span {\r\n display: block;\r\n padding: 5px 0 0;\r\n clear: both;\r\n color: var(--fgColor-default);\r\n }\r\n \r\n .markdown-body span.align-center {\r\n display: block;\r\n overflow: hidden;\r\n clear: both;\r\n }\r\n \r\n .markdown-body span.align-center>span {\r\n display: block;\r\n margin: 13px auto 0;\r\n overflow: hidden;\r\n text-align: center;\r\n }\r\n \r\n .markdown-body span.align-center span img {\r\n margin: 0 auto;\r\n text-align: center;\r\n }\r\n \r\n .markdown-body span.align-right {\r\n display: block;\r\n overflow: hidden;\r\n clear: both;\r\n }\r\n \r\n .markdown-body span.align-right>span {\r\n display: block;\r\n margin: 13px 0 0;\r\n overflow: hidden;\r\n text-align: right;\r\n }\r\n \r\n .markdown-body span.align-right span img {\r\n margin: 0;\r\n text-align: right;\r\n }\r\n \r\n .markdown-body span.float-left {\r\n display: block;\r\n float: left;\r\n margin-right: 13px;\r\n overflow: hidden;\r\n }\r\n \r\n .markdown-body span.float-left span {\r\n margin: 13px 0 0;\r\n }\r\n \r\n .markdown-body span.float-right {\r\n display: block;\r\n float: right;\r\n margin-left: 13px;\r\n overflow: hidden;\r\n }\r\n \r\n .markdown-body span.float-right>span {\r\n display: block;\r\n margin: 13px auto 0;\r\n overflow: hidden;\r\n text-align: right;\r\n }\r\n \r\n .markdown-body code,\r\n .markdown-body tt {\r\n padding: .2em .4em;\r\n margin: 0;\r\n font-size: 85%;\r\n white-space: break-spaces;\r\n background-color: var(--bgColor-neutral-muted);\r\n border-radius: 6px;\r\n }\r\n \r\n .markdown-body code br,\r\n .markdown-body tt br {\r\n display: none;\r\n }\r\n \r\n .markdown-body del code {\r\n text-decoration: inherit;\r\n }\r\n \r\n .markdown-body samp {\r\n font-size: 85%;\r\n }\r\n \r\n .markdown-body pre code {\r\n font-size: 100%;\r\n }\r\n \r\n .markdown-body pre>code {\r\n padding: 0;\r\n margin: 0;\r\n word-break: normal;\r\n white-space: pre;\r\n background: transparent;\r\n border: 0;\r\n }\r\n \r\n .markdown-body .highlight {\r\n margin-bottom: var(--base-size-16);\r\n }\r\n \r\n .markdown-body .highlight pre {\r\n margin-bottom: 0;\r\n word-break: normal;\r\n }\r\n \r\n .markdown-body .highlight pre,\r\n .markdown-body pre {\r\n padding: var(--base-size-16);\r\n overflow: auto;\r\n font-size: 85%;\r\n line-height: 1.45;\r\n color: var(--fgColor-default);\r\n background-color: var(--bgColor-muted);\r\n border-radius: 6px;\r\n }\r\n \r\n .markdown-body pre code,\r\n .markdown-body pre tt {\r\n display: inline;\r\n max-width: auto;\r\n padding: 0;\r\n margin: 0;\r\n overflow: visible;\r\n line-height: inherit;\r\n word-wrap: normal;\r\n background-color: transparent;\r\n border: 0;\r\n }\r\n \r\n .markdown-body .csv-data td,\r\n .markdown-body .csv-data th {\r\n padding: 5px;\r\n overflow: hidden;\r\n font-size: 12px;\r\n line-height: 1;\r\n text-align: left;\r\n white-space: nowrap;\r\n }\r\n \r\n .markdown-body .csv-data .blob-num {\r\n padding: 10px var(--base-size-8) 9px;\r\n text-align: right;\r\n background: var(--bgColor-default);\r\n border: 0;\r\n }\r\n \r\n .markdown-body .csv-data tr {\r\n border-top: 0;\r\n }\r\n \r\n .markdown-body .csv-data th {\r\n font-weight: var(--base-text-weight-semibold, 600);\r\n background: var(--bgColor-muted);\r\n border-top: 0;\r\n }\r\n \r\n .markdown-body [data-footnote-ref]::before {\r\n content: \"[\";\r\n }\r\n \r\n .markdown-body [data-footnote-ref]::after {\r\n content: \"]\";\r\n }\r\n \r\n .markdown-body .footnotes {\r\n font-size: 12px;\r\n color: var(--fgColor-muted);\r\n border-top: 1px solid var(--borderColor-default);\r\n }\r\n \r\n .markdown-body .footnotes ol {\r\n padding-left: var(--base-size-16);\r\n }\r\n \r\n .markdown-body .footnotes ol ul {\r\n display: inline-block;\r\n padding-left: var(--base-size-16);\r\n margin-top: var(--base-size-16);\r\n }\r\n \r\n .markdown-body .footnotes li {\r\n position: relative;\r\n }\r\n \r\n .markdown-body .footnotes li:target::before {\r\n position: absolute;\r\n top: calc(var(--base-size-8)*-1);\r\n right: calc(var(--base-size-8)*-1);\r\n bottom: calc(var(--base-size-8)*-1);\r\n left: calc(var(--base-size-24)*-1);\r\n pointer-events: none;\r\n content: \"\";\r\n border: 2px solid var(--borderColor-accent-emphasis);\r\n border-radius: 6px;\r\n }\r\n \r\n .markdown-body .footnotes li:target {\r\n color: var(--fgColor-default);\r\n }\r\n \r\n .markdown-body .footnotes .data-footnote-backref g-emoji {\r\n font-family: monospace;\r\n }\r\n \r\n .markdown-body body:has(:modal) {\r\n padding-right: var(--dialog-scrollgutter) !important;\r\n }\r\n \r\n .markdown-body .pl-c {\r\n color: var(--color-prettylights-syntax-comment);\r\n }\r\n \r\n .markdown-body .pl-c1,\r\n .markdown-body .pl-s .pl-v {\r\n color: var(--color-prettylights-syntax-constant);\r\n }\r\n \r\n .markdown-body .pl-e,\r\n .markdown-body .pl-en {\r\n color: var(--color-prettylights-syntax-entity);\r\n }\r\n \r\n .markdown-body .pl-smi,\r\n .markdown-body .pl-s .pl-s1 {\r\n color: var(--color-prettylights-syntax-storage-modifier-import);\r\n }\r\n \r\n .markdown-body .pl-ent {\r\n color: var(--color-prettylights-syntax-entity-tag);\r\n }\r\n \r\n .markdown-body .pl-k {\r\n color: var(--color-prettylights-syntax-keyword);\r\n }\r\n \r\n .markdown-body .pl-s,\r\n .markdown-body .pl-pds,\r\n .markdown-body .pl-s .pl-pse .pl-s1,\r\n .markdown-body .pl-sr,\r\n .markdown-body .pl-sr .pl-cce,\r\n .markdown-body .pl-sr .pl-sre,\r\n .markdown-body .pl-sr .pl-sra {\r\n color: var(--color-prettylights-syntax-string);\r\n }\r\n \r\n .markdown-body .pl-v,\r\n .markdown-body .pl-smw {\r\n color: var(--color-prettylights-syntax-variable);\r\n }\r\n \r\n .markdown-body .pl-bu {\r\n color: var(--color-prettylights-syntax-brackethighlighter-unmatched);\r\n }\r\n \r\n .markdown-body .pl-ii {\r\n color: var(--color-prettylights-syntax-invalid-illegal-text);\r\n background-color: var(--color-prettylights-syntax-invalid-illegal-bg);\r\n }\r\n \r\n .markdown-body .pl-c2 {\r\n color: var(--color-prettylights-syntax-carriage-return-text);\r\n background-color: var(--color-prettylights-syntax-carriage-return-bg);\r\n }\r\n \r\n .markdown-body .pl-sr .pl-cce {\r\n font-weight: bold;\r\n color: var(--color-prettylights-syntax-string-regexp);\r\n }\r\n \r\n .markdown-body .pl-ml {\r\n color: var(--color-prettylights-syntax-markup-list);\r\n }\r\n \r\n .markdown-body .pl-mh,\r\n .markdown-body .pl-mh .pl-en,\r\n .markdown-body .pl-ms {\r\n font-weight: bold;\r\n color: var(--color-prettylights-syntax-markup-heading);\r\n }\r\n \r\n .markdown-body .pl-mi {\r\n font-style: italic;\r\n color: var(--color-prettylights-syntax-markup-italic);\r\n }\r\n \r\n .markdown-body .pl-mb {\r\n font-weight: bold;\r\n color: var(--color-prettylights-syntax-markup-bold);\r\n }\r\n \r\n .markdown-body .pl-md {\r\n color: var(--color-prettylights-syntax-markup-deleted-text);\r\n background-color: var(--color-prettylights-syntax-markup-deleted-bg);\r\n }\r\n \r\n .markdown-body .pl-mi1 {\r\n color: var(--color-prettylights-syntax-markup-inserted-text);\r\n background-color: var(--color-prettylights-syntax-markup-inserted-bg);\r\n }\r\n \r\n .markdown-body .pl-mc {\r\n color: var(--color-prettylights-syntax-markup-changed-text);\r\n background-color: var(--color-prettylights-syntax-markup-changed-bg);\r\n }\r\n \r\n .markdown-body .pl-mi2 {\r\n color: var(--color-prettylights-syntax-markup-ignored-text);\r\n background-color: var(--color-prettylights-syntax-markup-ignored-bg);\r\n }\r\n \r\n .markdown-body .pl-mdr {\r\n font-weight: bold;\r\n color: var(--color-prettylights-syntax-meta-diff-range);\r\n }\r\n \r\n .markdown-body .pl-ba {\r\n color: var(--color-prettylights-syntax-brackethighlighter-angle);\r\n }\r\n \r\n .markdown-body .pl-sg {\r\n color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);\r\n }\r\n \r\n .markdown-body .pl-corl {\r\n text-decoration: underline;\r\n color: var(--color-prettylights-syntax-constant-other-reference-link);\r\n }\r\n \r\n .markdown-body [role=button]:focus:not(:focus-visible),\r\n .markdown-body [role=tabpanel][tabindex=\"0\"]:focus:not(:focus-visible),\r\n .markdown-body button:focus:not(:focus-visible),\r\n .markdown-body summary:focus:not(:focus-visible),\r\n .markdown-body a:focus:not(:focus-visible) {\r\n outline: none;\r\n box-shadow: none;\r\n }\r\n \r\n .markdown-body [tabindex=\"0\"]:focus:not(:focus-visible),\r\n .markdown-body details-dialog:focus:not(:focus-visible) {\r\n outline: none;\r\n }\r\n \r\n .markdown-body g-emoji {\r\n display: inline-block;\r\n min-width: 1ch;\r\n font-family: \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\r\n font-size: 1em;\r\n font-style: normal !important;\r\n font-weight: var(--base-text-weight-normal, 400);\r\n line-height: 1;\r\n vertical-align: -0.075em;\r\n }\r\n \r\n .markdown-body g-emoji img {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n \r\n .markdown-body .task-list-item {\r\n list-style-type: none;\r\n }\r\n \r\n .markdown-body .task-list-item label {\r\n font-weight: var(--base-text-weight-normal, 400);\r\n }\r\n \r\n .markdown-body .task-list-item.enabled label {\r\n cursor: pointer;\r\n }\r\n \r\n .markdown-body .task-list-item+.task-list-item {\r\n margin-top: var(--base-size-4);\r\n }\r\n \r\n .markdown-body .task-list-item .handle {\r\n display: none;\r\n }\r\n \r\n .markdown-body .task-list-item-checkbox {\r\n margin: 0 .2em .25em -1.4em;\r\n vertical-align: middle;\r\n }\r\n \r\n .markdown-body ul:dir(rtl) .task-list-item-checkbox {\r\n margin: 0 -1.6em .25em .2em;\r\n }\r\n \r\n .markdown-body ol:dir(rtl) .task-list-item-checkbox {\r\n margin: 0 -1.6em .25em .2em;\r\n }\r\n \r\n .markdown-body .contains-task-list:hover .task-list-item-convert-container,\r\n .markdown-body .contains-task-list:focus-within .task-list-item-convert-container {\r\n display: block;\r\n width: auto;\r\n height: 24px;\r\n overflow: visible;\r\n clip: auto;\r\n }\r\n \r\n .markdown-body ::-webkit-calendar-picker-indicator {\r\n filter: invert(50%);\r\n }\r\n \r\n .markdown-body .markdown-alert {\r\n padding: var(--base-size-8) var(--base-size-16);\r\n margin-bottom: var(--base-size-16);\r\n color: inherit;\r\n border-left: .25em solid var(--borderColor-default);\r\n }\r\n \r\n .markdown-body .markdown-alert>:first-child {\r\n margin-top: 0;\r\n }\r\n \r\n .markdown-body .markdown-alert>:last-child {\r\n margin-bottom: 0;\r\n }\r\n \r\n .markdown-body .markdown-alert .markdown-alert-title {\r\n display: flex;\r\n font-weight: var(--base-text-weight-medium, 500);\r\n align-items: center;\r\n line-height: 1;\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-note {\r\n border-left-color: var(--borderColor-accent-emphasis);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title {\r\n color: var(--fgColor-accent);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-important {\r\n border-left-color: var(--borderColor-done-emphasis);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title {\r\n color: var(--fgColor-done);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-warning {\r\n border-left-color: var(--borderColor-attention-emphasis);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title {\r\n color: var(--fgColor-attention);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-tip {\r\n border-left-color: var(--borderColor-success-emphasis);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title {\r\n color: var(--fgColor-success);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-caution {\r\n border-left-color: var(--borderColor-danger-emphasis);\r\n }\r\n \r\n .markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title {\r\n color: var(--fgColor-danger);\r\n }\r\n \r\n .markdown-body>*:first-child>.heading-element:first-child {\r\n margin-top: 0 !important;\r\n }\r\n \r\n .markdown-body .highlight pre:has(+.zeroclipboard-container) {\r\n min-height: 52px;\r\n }",":host {\r\n /* 字体相关属性 */\r\n font-size: 16px;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n font-weight: normal;\r\n font-style: normal;\r\n font-variant: normal;\r\n line-height: 1.5;\r\n letter-spacing: normal;\r\n word-spacing: normal;\r\n \r\n /* 文本相关属性 */\r\n color: #333; /* 重置文字颜色,避免继承外部的red */\r\n text-align: left;\r\n text-indent: 0;\r\n text-transform: none;\r\n white-space: normal;\r\n word-wrap: normal;\r\n word-break: normal;\r\n \r\n /* 可见性 */\r\n visibility: visible;\r\n \r\n /* 列表相关 */\r\n list-style: none;\r\n list-style-image: none;\r\n list-style-position: outside;\r\n list-style-type: disc;\r\n \r\n /* 表格相关 */\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n caption-side: top;\r\n empty-cells: show;\r\n table-layout: auto;\r\n \r\n /* 引用 */\r\n quotes: auto;\r\n \r\n /* 光标 */\r\n cursor: auto;\r\n \r\n /* 文本方向 */\r\n direction: ltr;\r\n \r\n /* 打印相关 */\r\n orphans: 2;\r\n widows: 2;\r\n page-break-inside: auto;\r\n \r\n /* 其他可能被继承的属性 */\r\n text-decoration: none;\r\n text-shadow: none;\r\n \r\n /* 确保组件有独立的盒模型 */\r\n box-sizing: border-box;\r\n \r\n /* 重置一些可能影响布局的继承属性 */\r\n writing-mode: horizontal-tb;\r\n text-orientation: mixed;\r\n}"],"version":3}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"p-D6Fe15eA.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/components-upload/components-upload.css?tag=components-upload&encapsulation=shadow","src/global/global.css?tag=components-upload&encapsulation=shadow","src/global/host.css?tag=components-upload&encapsulation=shadow","src/components/components-upload/components-upload.tsx"],"sourcesContent":[".upload-area{\r\n max-height: 300px;\r\n overflow-y: auto;\r\n}\r\n.upload-actions {\r\n display: flex;\r\n gap: 12px;\r\n margin-top: 12px;\r\n width: 100%;\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 z-index: 1000;\r\n overflow-y: auto;\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: auto;\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: 5vh auto auto 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 cursor: pointer;\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 text-align: center;\r\n white-space: normal;\r\n word-wrap: break-word;\r\n word-break: break-all;\r\n line-height: 1.4;\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 min-width: 30px;\r\n min-height: 30px;\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}\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}\r\n\r\n/* 面试设置区域 */\r\n.interview-settings-section {\r\n margin-bottom: 24px;\r\n padding: 20px;\r\n background-color: #f8f9fa;\r\n border-radius: 8px;\r\n border: 1px solid #e9ecef;\r\n}\r\n\r\n.settings-row {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.settings-row:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n.settings-label {\r\n display: block;\r\n font-weight: 500;\r\n color: #333;\r\n margin-bottom: 12px;\r\n font-size: 14px;\r\n}\r\n\r\n/* 题目数量滑块样式 */\r\n.question-number-section {\r\n width: 100%;\r\n}\r\n\r\n.slider-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.question-slider {\r\n flex: 1;\r\n height: 6px;\r\n background: #ddd;\r\n outline: none;\r\n border-radius: 3px;\r\n -webkit-appearance: none;\r\n appearance: none;\r\n}\r\n\r\n.question-slider::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.question-slider::-moz-range-thumb {\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n border: none;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.slider-value {\r\n font-weight: 600;\r\n color: #0D75FB;\r\n font-size: 14px;\r\n min-width: 30px;\r\n text-align: center;\r\n}\r\n\r\n/* 开关样式 */\r\n.analysis-toggle-section {\r\n width: 100%;\r\n}\r\n\r\n.toggle-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.toggle-switch {\r\n position: relative;\r\n display: inline-block;\r\n width: 44px;\r\n height: 24px;\r\n}\r\n\r\n.toggle-switch input {\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\n.toggle-slider {\r\n position: absolute;\r\n cursor: pointer;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: #ccc;\r\n transition: 0.3s;\r\n border-radius: 24px;\r\n}\r\n\r\n.toggle-slider:before {\r\n position: absolute;\r\n content: \"\";\r\n height: 18px;\r\n width: 18px;\r\n left: 3px;\r\n bottom: 3px;\r\n background-color: white;\r\n transition: 0.3s;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\ninput:checked + .toggle-slider {\r\n background-color: #0D75FB;\r\n}\r\n\r\ninput:checked + .toggle-slider:before {\r\n transform: translateX(20px);\r\n}\r\n\r\n.toggle-text {\r\n font-size: 14px;\r\n color: #666;\r\n font-weight: 500;\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/* 历史会话按钮 */\r\n.header-history-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: #bbb;\r\n cursor: pointer;\r\n font-size: 13px;\r\n font-family: inherit;\r\n line-height: 1;\r\n transition: all 0.2s ease;\r\n flex-shrink: 0;\r\n white-space: nowrap;\r\n}\r\n\r\n.header-history-button svg {\r\n width: 16px;\r\n height: 16px;\r\n display: block;\r\n flex-shrink: 0;\r\n}\r\n\r\n.header-history-button:hover {\r\n background-color: rgba(0, 0, 0, 0.04);\r\n color: #666;\r\n}\r\n\r\n.header-history-button:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* 历史会话抽屉内容 */\r\n.history-drawer-content {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.conversation-list {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 8px 0;\r\n}\r\n\r\n.loading-conversations,\r\n.empty-conversations {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 40px 20px;\r\n color: #999;\r\n}\r\n\r\n.loading-conversations .loading-spinner-small {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.conversation-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n margin: 0 8px 4px 8px;\r\n border-radius: 8px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n border: 1px solid transparent;\r\n}\r\n\r\n.conversation-item:hover {\r\n background: #f5f5f5;\r\n}\r\n\r\n.conversation-info {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.conversation-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n color: #262626;\r\n margin-bottom: 4px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.conversation-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #8c8c8c;\r\n}\r\n\r\n.conversation-time {\r\n flex-shrink: 0;\r\n}\r\n\r\n.message-count {\r\n flex-shrink: 0;\r\n}\r\n\r\n.conversation-status {\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n font-size: 11px;\r\n font-weight: 500;\r\n}\r\n\r\n.conversation-status.completed {\r\n background: #f6ffed;\r\n color: #52c41a;\r\n}\r\n\r\n.conversation-status.running {\r\n background: #fff7e6;\r\n color: #fa8c16;\r\n}\r\n\r\n.header-history-entry {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 8px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: #e6f7ff;\r\n color: #1890ff;\r\n cursor: pointer;\r\n font-size: 12px;\r\n font-family: inherit;\r\n line-height: 1;\r\n white-space: nowrap;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.header-history-entry:hover {\r\n background: #bae7ff;\r\n color: #0958d9;\r\n transform: translateY(-1px);\r\n}\r\n\r\n.header-history-entry:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n.history-pagination {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding: 12px 16px 16px;\r\n border-top: 1px solid #f0f0f0;\r\n}\r\n\r\n.history-pagination-button {\r\n min-width: 72px;\r\n padding: 6px 12px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 6px;\r\n background: #fff;\r\n color: #595959;\r\n cursor: pointer;\r\n font-size: 12px;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.history-pagination-button:hover:not(:disabled) {\r\n border-color: #1890ff;\r\n color: #1890ff;\r\n background: #e6f7ff;\r\n}\r\n\r\n.history-pagination-button:disabled {\r\n border-color: #f0f0f0;\r\n color: #bfbfbf;\r\n background: #fafafa;\r\n cursor: not-allowed;\r\n}\r\n\r\n.history-pagination-info {\r\n flex: 1;\r\n text-align: center;\r\n color: #8c8c8c;\r\n font-size: 12px;\r\n}\r\n \r\n",":host {\r\n /* 字体相关属性 */\r\n font-size: 16px;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n font-weight: normal;\r\n font-style: normal;\r\n font-variant: normal;\r\n line-height: 1.5;\r\n letter-spacing: normal;\r\n word-spacing: normal;\r\n \r\n /* 文本相关属性 */\r\n color: #333; /* 重置文字颜色,避免继承外部的red */\r\n text-align: left;\r\n text-indent: 0;\r\n text-transform: none;\r\n white-space: normal;\r\n word-wrap: normal;\r\n word-break: normal;\r\n \r\n /* 可见性 */\r\n visibility: visible;\r\n \r\n /* 列表相关 */\r\n list-style: none;\r\n list-style-image: none;\r\n list-style-position: outside;\r\n list-style-type: disc;\r\n \r\n /* 表格相关 */\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n caption-side: top;\r\n empty-cells: show;\r\n table-layout: auto;\r\n \r\n /* 引用 */\r\n quotes: auto;\r\n \r\n /* 光标 */\r\n cursor: auto;\r\n \r\n /* 文本方向 */\r\n direction: ltr;\r\n \r\n /* 打印相关 */\r\n orphans: 2;\r\n widows: 2;\r\n page-break-inside: auto;\r\n \r\n /* 其他可能被继承的属性 */\r\n text-decoration: none;\r\n text-shadow: none;\r\n \r\n /* 确保组件有独立的盒模型 */\r\n box-sizing: border-box;\r\n \r\n /* 重置一些可能影响布局的继承属性 */\r\n writing-mode: horizontal-tb;\r\n text-orientation: mixed;\r\n}","import { Component, h, State, Element, Prop, Event, EventEmitter, Method } from \"@stencil/core\";\r\nimport { FileUploadResponse, FileUploadResponseWithState, FileUploadState, formatFileSize, uploadFileToBackend } from \"../../utils/utils\";\r\nimport { Message } from \"../../services/message.service\";\r\nimport { SentryReporter } from \"../../utils/sentry-reporter\";\r\n\r\n\r\nexport type UploadFailedEvent = {\r\n error: Error;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n tag: 'components-upload',\r\n styleUrls: ['components-upload.css', '../../global/global.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class ComponentsUpload {\r\n /**\r\n * 是否支持多文件上传\r\n */\r\n @Prop() multiple: boolean = false;\r\n /**\r\n * 是否开启移动端上传\r\n */\r\n @Prop() mobileUploadAble: boolean = false;\r\n\r\n /**\r\n * 支持的文件后缀列表(需要带上小数点.)\r\n */\r\n @Prop() acceptFileSuffixList: string[] = [];\r\n /**\r\n * 最大文件数\r\n */\r\n @Prop() maxFileCount: number = Infinity;\r\n /**\r\n * 最大文件大小\r\n */\r\n @Prop() maxFileSize: number = Infinity;\r\n /**\r\n * 上传请求头\r\n */\r\n @Prop() uploadHeaders?: Record<string, any>;\r\n /**\r\n * 上传请求参数\r\n */\r\n @Prop() uploadParams?: Record<string, any>;\r\n /**\r\n * 自定义上传文本\r\n */\r\n @Prop() uploadText: string = '点击上传简历';\r\n /**\r\n * 默认文件列表(预填充文件)\r\n */\r\n @Prop() defaultFileList?: FileUploadResponse[];\r\n /**\r\n * 是否禁用上传(禁用时只显示文件,不允许修改)\r\n */\r\n @Prop() disabled: boolean = false;\r\n /**\r\n * 上传失败监听\r\n */\r\n @Event() uploadFailed: EventEmitter<UploadFailedEvent>;\r\n /**\r\n * 上传文件变化监听\r\n */\r\n @Event() uploadChange: EventEmitter<FileUploadResponse[]>;\r\n\r\n\r\n @Element() hostElement: HTMLElement;\r\n @State() selectedFiles: FileUploadResponseWithState[] | null = null;\r\n\r\n componentWillLoad() {\r\n // 如果有默认文件列表,则初始化 selectedFiles\r\n if (this.defaultFileList && this.defaultFileList.length > 0) {\r\n this.selectedFiles = this.defaultFileList.map(file => ({\r\n ...file,\r\n state: FileUploadState.Success,\r\n }));\r\n }\r\n }\r\n\r\n @Method()\r\n async getIsUploading() {\r\n return !!this.selectedFiles?.some(item => item.state === FileUploadState.Uploading);\r\n }\r\n\r\n /**\r\n * 清除已选择的文件\r\n */\r\n @Method()\r\n async clearSelectedFiles() {\r\n this.selectedFiles = null;\r\n this.clearSelectedFile(); // 同时清除input的值\r\n }\r\n\r\n private handleUploadClick = () => {\r\n if (this.disabled) return;\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 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(file: File): Promise<FileUploadResponseWithState> {\r\n try {\r\n const result = await uploadFileToBackend(file, this.uploadHeaders || {}, this.uploadParams || {});\r\n return {\r\n ...result,\r\n file,\r\n file_name: file.name,\r\n file_size: file.size,\r\n state: FileUploadState.Success,\r\n }\r\n } catch (error) {\r\n this.clearSelectedFile();\r\n SentryReporter.captureError(error, {\r\n action: 'uploadFile',\r\n component: 'pcm-mnms-modal',\r\n title: '文件上传失败'\r\n });\r\n this.uploadFailed.emit({\r\n error: error,\r\n message: '文件上传失败,请重试'\r\n });\r\n return {\r\n file,\r\n error,\r\n state: FileUploadState.Failed,\r\n }\r\n }\r\n }\r\n\r\n private handleFileChange = async (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n\r\n if (this.multiple) {\r\n // 多选\r\n const files = Array.from(input.files || []);\r\n if (files.length === 0) return;\r\n\r\n // 验证文件数量限制\r\n const currentFileCount = this.selectedFiles?.length || 0;\r\n const remainingSlots = this.maxFileCount - currentFileCount;\r\n if (files.length > remainingSlots) {\r\n Message.info(`最多只能上传 ${this.maxFileCount} 个文件,当前已选择 ${currentFileCount} 个`);\r\n return;\r\n }\r\n\r\n const validFiles: File[] = [];\r\n const invalidFiles: string[] = [];\r\n\r\n // 验证每个文件\r\n files.forEach(file => {\r\n // 检测文件后缀名\r\n if (this.acceptFileSuffixList?.length) {\r\n const suffix = '.' + file.name.split('.').pop()?.toLowerCase();\r\n if (!this.acceptFileSuffixList.includes(suffix)) {\r\n invalidFiles.push(`${file.name}(格式不支持)`);\r\n return;\r\n }\r\n }\r\n // 检测文件大小\r\n if (this.maxFileSize < file.size) {\r\n invalidFiles.push(`${file.name}(文件过大)`);\r\n return;\r\n }\r\n validFiles.push(file);\r\n });\r\n\r\n // 提示无效文件\r\n if (invalidFiles.length > 0) {\r\n const supportedFormats = this.acceptFileSuffixList?.length ? this.acceptFileSuffixList.join('、') : '';\r\n const maxSizeText = this.maxFileSize !== Infinity ? formatFileSize(this.maxFileSize) : '';\r\n Message.info(`以下文件无法上传:${invalidFiles.join('、')}。${supportedFormats ? `支持格式:${supportedFormats}。` : ''}${maxSizeText ? `最大文件大小:${maxSizeText}。` : ''}`);\r\n }\r\n\r\n if (validFiles.length === 0) {\r\n this.clearSelectedFile();\r\n return;\r\n }\r\n\r\n // 为有效文件创建初始状态\r\n const newFileItems: FileUploadResponseWithState[] = validFiles.map(file => ({\r\n file,\r\n file_name: file.name,\r\n file_size: file.size,\r\n state: FileUploadState.Uploading,\r\n cos_key: '',\r\n error: undefined,\r\n }));\r\n\r\n // 添加到现有文件列表\r\n this.selectedFiles = [\r\n ...(this.selectedFiles || []),\r\n ...newFileItems\r\n ];\r\n\r\n // 依次上传文件\r\n for (let i = 0; i < validFiles.length; i++) {\r\n const file = validFiles[i];\r\n const uploadResult = await this.uploadFile(file);\r\n\r\n // 更新对应文件的状态\r\n if (this.selectedFiles) {\r\n const currentFileCount = this.selectedFiles.length;\r\n const targetIndex = currentFileCount - validFiles.length + i;\r\n if (targetIndex >= 0 && targetIndex < this.selectedFiles.length) {\r\n this.selectedFiles[targetIndex] = uploadResult;\r\n // 触发重新渲染\r\n this.selectedFiles = [...this.selectedFiles];\r\n }\r\n }\r\n }\r\n\r\n this.clearSelectedFile();\r\n this.emitUploadChange();\r\n } else {\r\n // 单选\r\n const file = input.files?.[0];\r\n if (!file) return;\r\n // 检测文件是否符合后缀名\r\n if (this.acceptFileSuffixList?.length) {\r\n const suffix = '.' + file.name.split('.').pop()?.toLowerCase();\r\n if (!this.acceptFileSuffixList.includes(suffix)) {\r\n Message.info(`请上传 ${this.acceptFileSuffixList.join('、')} 格式的文件`);\r\n return;\r\n }\r\n }\r\n // 检测文件大小是否超出限制\r\n if (this.maxFileSize < file.size) {\r\n Message.info(`文件大小不能超过 ${formatFileSize(this.maxFileSize) ?? '-'}`);\r\n return;\r\n }\r\n this.selectedFiles = [{\r\n file,\r\n file_name: file.name,\r\n file_size: file.size,\r\n state: FileUploadState.Uploading,\r\n cos_key: '',\r\n error: undefined,\r\n }];\r\n const uploadResult = await this.uploadFile(file);\r\n this.selectedFiles = [uploadResult];\r\n this.clearSelectedFile();\r\n this.emitUploadChange();\r\n }\r\n };\r\n\r\n private emitUploadChange = () => {\r\n this.uploadChange.emit(this.selectedFiles?.filter(item => item.state === FileUploadState.Success).map?.(item => ({\r\n cos_key: item.cos_key,\r\n file_name: item.file_name,\r\n file_size: item.file_size,\r\n ext: item.ext,\r\n })));\r\n }\r\n\r\n private uploadBtn() {\r\n return <div style={{ width: '100%' }}>\r\n {\r\n !!this.mobileUploadAble && <components-mobile-upload-btn\r\n multiple={this.multiple}\r\n acceptFileSuffixList={this.acceptFileSuffixList}\r\n maxFileCount={this.maxFileCount}\r\n maxFileSize={this.maxFileSize}\r\n uploadHeaders={this.uploadHeaders}\r\n uploadParams={this.uploadParams}\r\n onOk={e => {\r\n this.selectedFiles = [\r\n ...(this.selectedFiles ?? []),\r\n ...(e.detail ?? []).map(item => ({\r\n ...item,\r\n state: FileUploadState.Success,\r\n }))\r\n ]\r\n this.emitUploadChange();\r\n }}\r\n />\r\n }\r\n <div class=\"upload-placeholder\" onClick={this.handleUploadClick}>\r\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\r\n <p class='upload-text'>{this.uploadText}</p>\r\n {\r\n !!this.acceptFileSuffixList?.length && <p class=\"upload-hint\">支持 {this.acceptFileSuffixList.join('、')} 格式。</p>\r\n }\r\n {\r\n !!this.maxFileSize && this.maxFileSize !== Infinity && <p class=\"upload-hint\">文件大小不能超过 {formatFileSize(this.maxFileSize) ?? ''}。</p>\r\n }\r\n {\r\n !!this.maxFileCount && this.maxFileCount !== Infinity && <p class=\"upload-hint\">最多上传 {this.maxFileCount} 个文件。</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div class=\"resume-upload-section\">\r\n <div class=\"upload-area\">\r\n <div>\r\n {\r\n this.selectedFiles?.map?.((item, index) => {\r\n return <div class=\"file-item\">\r\n <div class=\"file-item-content\">\r\n <span class=\"file-icon\">📝</span>\r\n <span class=\"file-name\" style={item.state === FileUploadState.Failed ? { color: 'red', textDecoration: 'line-through' } : undefined}>{item?.file_name}</span>\r\n {\r\n item.state === FileUploadState.Failed && <span style={{ color: 'red', marginLeft: '4px' }}>({item.error?.message ?? '上传失败'})</span>\r\n }\r\n </div>\r\n {!this.disabled && <button class=\"remove-file\" onClick={(e) => {\r\n e.stopPropagation();\r\n this.selectedFiles = this.selectedFiles?.filter((_, itemIndex) => index !== itemIndex);\r\n this.emitUploadChange();\r\n }}>×</button>}\r\n </div>\r\n })\r\n }\r\n </div>\r\n\r\n </div>\r\n {\r\n !this.disabled && (this.multiple ? <div class=\"upload-actions\">\r\n {\r\n (this.selectedFiles?.length ?? 0) < this.maxFileCount && this.uploadBtn()\r\n }\r\n </div> : <div class=\"upload-actions\">\r\n {\r\n !this.selectedFiles?.length && this.uploadBtn()\r\n }\r\n </div>)\r\n }\r\n </div>\r\n <input\r\n type=\"file\"\r\n class=\"file-input\"\r\n multiple={this.multiple}\r\n onChange={this.handleFileChange}\r\n />\r\n </div>\r\n )\r\n }\r\n}"],"version":3}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"p-IT_Yngxh.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/components-thousand-resume-wrapper/components-thousand-resume-wrapper.css?tag=components-thousand-resume-wrapper&encapsulation=shadow","src/global/global.css?tag=components-thousand-resume-wrapper&encapsulation=shadow","src/global/host.css?tag=components-thousand-resume-wrapper&encapsulation=shadow","src/components/components-thousand-resume-wrapper/components-thousand-resume-wrapper.tsx"],"sourcesContent":["/* Loading 状态 */\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 padding: 80px 20px;\r\n background: #fff;\r\n}\r\n\r\n.loading-spinner {\r\n width: 48px;\r\n height: 48px;\r\n border: 4px solid #e8e8e8;\r\n border-top-color: #0D75FB;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n.loading-text {\r\n font-size: 18px;\r\n font-weight: 500;\r\n color: #333;\r\n margin-top: 24px;\r\n margin-bottom: 8px;\r\n}\r\n\r\n.loading-subtext {\r\n font-size: 14px;\r\n color: #666;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.loading-dots {\r\n display: flex;\r\n gap: 8px;\r\n}\r\n\r\n.dot {\r\n width: 8px;\r\n height: 8px;\r\n border-radius: 50%;\r\n background-color: #0D75FB;\r\n animation: pulse 1.5s ease-in-out infinite;\r\n}\r\n\r\n.dot.delay-1 {\r\n animation-delay: 0.2s;\r\n}\r\n\r\n.dot.delay-2 {\r\n animation-delay: 0.4s;\r\n}\r\n\r\n@keyframes pulse {\r\n 0%, 100% {\r\n opacity: 0.4;\r\n transform: scale(0.8);\r\n }\r\n 50% {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n}\r\n\r\n/* 错误状态 */\r\n.error-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 80px 20px;\r\n background: #fff;\r\n}\r\n\r\n.error-icon {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 48px;\r\n height: 48px;\r\n border-radius: 50%;\r\n background-color: #fee2e2;\r\n color: #ef4444;\r\n font-size: 24px;\r\n font-weight: bold;\r\n}\r\n\r\n.error-text {\r\n font-size: 16px;\r\n font-weight: 500;\r\n color: #666;\r\n margin-top: 16px;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.retry-button {\r\n padding: 10px 24px;\r\n background-color: #0D75FB;\r\n color: #fff;\r\n border: none;\r\n border-radius: 6px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: background-color 0.2s;\r\n}\r\n\r\n.retry-button:hover {\r\n background-color: #0a5fd9;\r\n}\r\n\r\n/* 分析视图 */\r\n.analysis-container {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n padding: 20px;\r\n background: #fff;\r\n}\r\n\r\n.analysis-header {\r\n flex-shrink: 0;\r\n padding-bottom: 16px;\r\n}\r\n\r\n.analysis-title {\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: #333;\r\n margin-bottom: 8px;\r\n}\r\n\r\n.analysis-desc {\r\n font-size: 14px;\r\n color: #666;\r\n margin-bottom: 16px;\r\n}\r\n\r\n/* Tab 样式 */\r\n.tab-container {\r\n display: flex;\r\n gap: 8px;\r\n padding: 4px;\r\n background-color: #f5f5f5;\r\n border-radius: 8px;\r\n}\r\n\r\n.tab-button {\r\n padding: 8px 16px;\r\n background: transparent;\r\n border: none;\r\n border-radius: 6px;\r\n font-size: 14px;\r\n color: #666;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n}\r\n\r\n.tab-button:hover {\r\n color: #333;\r\n}\r\n\r\n.tab-button.active {\r\n background-color: #0D75FB;\r\n color: #fff;\r\n}\r\n\r\n/* iframe 容器 */\r\n.iframe-container {\r\n flex: 1;\r\n width: 100%;\r\n min-height: 400px;\r\n height: 85vh;\r\n overflow: hidden;\r\n padding: 20px;\r\n}\r\n\r\n.iframe-container iframe {\r\n width: 100%;\r\n height: 100%;\r\n border: none;\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: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n justify-content: center;\r\n align-items: flex-start;\r\n}\r\n\r\n.fullscreen-overlay {\r\n background: rgba(0, 0, 0, 0.8);\r\n}\r\n\r\n.modal-container {\r\n background: #fff;\r\n border-radius: 12px;\r\n width: 90%;\r\n max-width: 1200px;\r\n height: 90vh;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);\r\n}\r\n\r\n.fullscreen {\r\n width: 100%;\r\n height: 100%;\r\n max-width: 100%;\r\n border-radius: 0;\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: 16px 20px;\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: 12px;\r\n}\r\n\r\n.header-icon {\r\n width: 32px;\r\n height: 32px;\r\n object-fit: contain;\r\n}\r\n\r\n.close-button {\r\n background: transparent;\r\n border: none;\r\n font-size: 24px;\r\n color: #666;\r\n cursor: pointer;\r\n padding: 4px 8px;\r\n line-height: 1;\r\n}\r\n\r\n.close-button:hover {\r\n color: #333;\r\n}\r\n\r\n/* 响应式 */\r\n@media screen and (max-width: 768px) {\r\n .modal-container {\r\n width: 100%;\r\n height: 100%;\r\n max-width: 100%;\r\n border-radius: 0;\r\n }\r\n\r\n .analysis-title {\r\n font-size: 18px;\r\n }\r\n\r\n .tab-container {\r\n flex-wrap: wrap;\r\n }\r\n\r\n .tab-button {\r\n padding: 6px 12px;\r\n font-size: 12px;\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 z-index: 1000;\r\n overflow-y: auto;\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: auto;\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: 5vh auto auto 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 cursor: pointer;\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 text-align: center;\r\n white-space: normal;\r\n word-wrap: break-word;\r\n word-break: break-all;\r\n line-height: 1.4;\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 min-width: 30px;\r\n min-height: 30px;\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}\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}\r\n\r\n/* 面试设置区域 */\r\n.interview-settings-section {\r\n margin-bottom: 24px;\r\n padding: 20px;\r\n background-color: #f8f9fa;\r\n border-radius: 8px;\r\n border: 1px solid #e9ecef;\r\n}\r\n\r\n.settings-row {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.settings-row:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n.settings-label {\r\n display: block;\r\n font-weight: 500;\r\n color: #333;\r\n margin-bottom: 12px;\r\n font-size: 14px;\r\n}\r\n\r\n/* 题目数量滑块样式 */\r\n.question-number-section {\r\n width: 100%;\r\n}\r\n\r\n.slider-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.question-slider {\r\n flex: 1;\r\n height: 6px;\r\n background: #ddd;\r\n outline: none;\r\n border-radius: 3px;\r\n -webkit-appearance: none;\r\n appearance: none;\r\n}\r\n\r\n.question-slider::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.question-slider::-moz-range-thumb {\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n border: none;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.slider-value {\r\n font-weight: 600;\r\n color: #0D75FB;\r\n font-size: 14px;\r\n min-width: 30px;\r\n text-align: center;\r\n}\r\n\r\n/* 开关样式 */\r\n.analysis-toggle-section {\r\n width: 100%;\r\n}\r\n\r\n.toggle-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.toggle-switch {\r\n position: relative;\r\n display: inline-block;\r\n width: 44px;\r\n height: 24px;\r\n}\r\n\r\n.toggle-switch input {\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\n.toggle-slider {\r\n position: absolute;\r\n cursor: pointer;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: #ccc;\r\n transition: 0.3s;\r\n border-radius: 24px;\r\n}\r\n\r\n.toggle-slider:before {\r\n position: absolute;\r\n content: \"\";\r\n height: 18px;\r\n width: 18px;\r\n left: 3px;\r\n bottom: 3px;\r\n background-color: white;\r\n transition: 0.3s;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\ninput:checked + .toggle-slider {\r\n background-color: #0D75FB;\r\n}\r\n\r\ninput:checked + .toggle-slider:before {\r\n transform: translateX(20px);\r\n}\r\n\r\n.toggle-text {\r\n font-size: 14px;\r\n color: #666;\r\n font-weight: 500;\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/* 历史会话按钮 */\r\n.header-history-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: #bbb;\r\n cursor: pointer;\r\n font-size: 13px;\r\n font-family: inherit;\r\n line-height: 1;\r\n transition: all 0.2s ease;\r\n flex-shrink: 0;\r\n white-space: nowrap;\r\n}\r\n\r\n.header-history-button svg {\r\n width: 16px;\r\n height: 16px;\r\n display: block;\r\n flex-shrink: 0;\r\n}\r\n\r\n.header-history-button:hover {\r\n background-color: rgba(0, 0, 0, 0.04);\r\n color: #666;\r\n}\r\n\r\n.header-history-button:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* 历史会话抽屉内容 */\r\n.history-drawer-content {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.conversation-list {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 8px 0;\r\n}\r\n\r\n.loading-conversations,\r\n.empty-conversations {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 40px 20px;\r\n color: #999;\r\n}\r\n\r\n.loading-conversations .loading-spinner-small {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.conversation-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n margin: 0 8px 4px 8px;\r\n border-radius: 8px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n border: 1px solid transparent;\r\n}\r\n\r\n.conversation-item:hover {\r\n background: #f5f5f5;\r\n}\r\n\r\n.conversation-info {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.conversation-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n color: #262626;\r\n margin-bottom: 4px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.conversation-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #8c8c8c;\r\n}\r\n\r\n.conversation-time {\r\n flex-shrink: 0;\r\n}\r\n\r\n.message-count {\r\n flex-shrink: 0;\r\n}\r\n\r\n.conversation-status {\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n font-size: 11px;\r\n font-weight: 500;\r\n}\r\n\r\n.conversation-status.completed {\r\n background: #f6ffed;\r\n color: #52c41a;\r\n}\r\n\r\n.conversation-status.running {\r\n background: #fff7e6;\r\n color: #fa8c16;\r\n}\r\n\r\n.header-history-entry {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 8px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: #e6f7ff;\r\n color: #1890ff;\r\n cursor: pointer;\r\n font-size: 12px;\r\n font-family: inherit;\r\n line-height: 1;\r\n white-space: nowrap;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.header-history-entry:hover {\r\n background: #bae7ff;\r\n color: #0958d9;\r\n transform: translateY(-1px);\r\n}\r\n\r\n.header-history-entry:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n.history-pagination {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding: 12px 16px 16px;\r\n border-top: 1px solid #f0f0f0;\r\n}\r\n\r\n.history-pagination-button {\r\n min-width: 72px;\r\n padding: 6px 12px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 6px;\r\n background: #fff;\r\n color: #595959;\r\n cursor: pointer;\r\n font-size: 12px;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.history-pagination-button:hover:not(:disabled) {\r\n border-color: #1890ff;\r\n color: #1890ff;\r\n background: #e6f7ff;\r\n}\r\n\r\n.history-pagination-button:disabled {\r\n border-color: #f0f0f0;\r\n color: #bfbfbf;\r\n background: #fafafa;\r\n cursor: not-allowed;\r\n}\r\n\r\n.history-pagination-info {\r\n flex: 1;\r\n text-align: center;\r\n color: #8c8c8c;\r\n font-size: 12px;\r\n}\r\n \r\n",":host {\r\n /* 字体相关属性 */\r\n font-size: 16px;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n font-weight: normal;\r\n font-style: normal;\r\n font-variant: normal;\r\n line-height: 1.5;\r\n letter-spacing: normal;\r\n word-spacing: normal;\r\n \r\n /* 文本相关属性 */\r\n color: #333; /* 重置文字颜色,避免继承外部的red */\r\n text-align: left;\r\n text-indent: 0;\r\n text-transform: none;\r\n white-space: normal;\r\n word-wrap: normal;\r\n word-break: normal;\r\n \r\n /* 可见性 */\r\n visibility: visible;\r\n \r\n /* 列表相关 */\r\n list-style: none;\r\n list-style-image: none;\r\n list-style-position: outside;\r\n list-style-type: disc;\r\n \r\n /* 表格相关 */\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n caption-side: top;\r\n empty-cells: show;\r\n table-layout: auto;\r\n \r\n /* 引用 */\r\n quotes: auto;\r\n \r\n /* 光标 */\r\n cursor: auto;\r\n \r\n /* 文本方向 */\r\n direction: ltr;\r\n \r\n /* 打印相关 */\r\n orphans: 2;\r\n widows: 2;\r\n page-break-inside: auto;\r\n \r\n /* 其他可能被继承的属性 */\r\n text-decoration: none;\r\n text-shadow: none;\r\n \r\n /* 确保组件有独立的盒模型 */\r\n box-sizing: border-box;\r\n \r\n /* 重置一些可能影响布局的继承属性 */\r\n writing-mode: horizontal-tb;\r\n text-orientation: mixed;\r\n}","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { PCM_DOMAIN, sendSSERequest } from '../../utils/utils';\r\nimport { ConversationStartEventData, StreamCompleteEventData, InterviewCompleteEventData } 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 { verifyApiKey } from '../../utils/utils';\r\n\r\n/**\r\n * 千岗千简历分析包装组件\r\n * 支持 optimizationType:\r\n * - 0: 直接改写(不使用此组件,使用 pcm-app-chat-modal)\r\n * - 1: 改进建议(发起流式请求后显示改进建议 iframe)\r\n * - 2: 深度分析(发起流式请求后显示包含三个 Tab 的分析视图)\r\n */\r\n\r\n@Component({\r\n tag: 'components-thousand-resume-wrapper',\r\n styleUrls: ['components-thousand-resume-wrapper.css', '../../global/global.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class ComponentsThousandResumeWrapper {\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 * 会话ID,传入继续对话,否则创建新会话\r\n */\r\n @Prop({ mutable: true }) conversationId?: string;\r\n\r\n /**\r\n * 机器人ID\r\n */\r\n @Prop() botId: string = '45444431062634496';\r\n\r\n /**\r\n * 优化类型<br>\r\n * 1: 改进建议 - 显示改进建议 iframe<br>\r\n * 2: 深度分析 - 显示包含三个 Tab 的分析视图(深度分析、改进建议、简历内容)\r\n */\r\n @Prop() optimizationType: number = 1;\r\n\r\n /**\r\n * 自定义输入参数\r\n */\r\n @Prop() customInputs: Record<string, any> = {};\r\n\r\n /**\r\n * 默认查询文本\r\n */\r\n @Prop() defaultQuery: string = '生成简历格式数据';\r\n\r\n /**\r\n * 模态框标题\r\n */\r\n @Prop() modalTitle: string = '千岗千简历';\r\n\r\n /**\r\n * 应用图标URL\r\n */\r\n @Prop() icon?: string;\r\n\r\n /**\r\n * 是否以全屏模式打开。全屏范围基于父容器,而非浏览器视口;移动端建议设置为 true\r\n */\r\n @Prop() fullscreen: boolean = false;\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 * 当点击模态框关闭时触发\r\n */\r\n @Event() modalClosed: EventEmitter<void>;\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() streamComplete: EventEmitter<StreamCompleteEventData>;\r\n\r\n /**\r\n * 当聊天完成时触发\r\n */\r\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\r\n\r\n /**\r\n * 错误事件\r\n */\r\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\r\n\r\n /**\r\n * SDK密钥验证失败事件\r\n */\r\n @Event() tokenInvalid: EventEmitter<void>;\r\n\r\n @State() isLoading: boolean = true;\r\n @State() internalConversationId?: string;\r\n @State() error: string = '';\r\n @State() activeTab: 'analysis' | 'suggestions' | 'resume' = 'analysis';\r\n\r\n @Element() hostElement: HTMLElement;\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 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.isLoading = true;\r\n this.internalConversationId = undefined;\r\n this.error = '';\r\n this.activeTab = 'analysis';\r\n } else {\r\n await verifyApiKey(this.token);\r\n\r\n if (this.conversationId) {\r\n // 有历史会话ID,直接显示结果\r\n this.internalConversationId = this.conversationId;\r\n this.isLoading = false;\r\n } else {\r\n // 新会话,发起流式请求\r\n await this.startChatStream();\r\n }\r\n }\r\n }\r\n\r\n componentWillLoad() {\r\n if (this.zIndex) {\r\n configStore.setItem('modal-zIndex', this.zIndex);\r\n }\r\n if (this.token) {\r\n authStore.setToken(this.token);\r\n }\r\n verifyApiKey(this.token);\r\n\r\n this.tokenInvalidListener = () => {\r\n this.tokenInvalid.emit();\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 componentDidLoad() {\r\n if (this.isOpen) {\r\n this.handleIsOpenChange(true);\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\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 * 发起流式请求\r\n */\r\n private startChatStream = async () => {\r\n this.isLoading = true;\r\n this.error = '';\r\n\r\n const requestData = {\r\n bot_id: this.botId,\r\n response_mode: 'streaming',\r\n conversation_id: this.conversationId,\r\n query: this.defaultQuery,\r\n inputs: {\r\n ...this.customInputs,\r\n optimization_type: this.optimizationType,\r\n },\r\n };\r\n\r\n let tempConversationId: string | undefined;\r\n\r\n await sendSSERequest({\r\n url: '/sdk/v1/chat/chat-messages',\r\n method: 'POST',\r\n data: requestData,\r\n onMessage: data => {\r\n // 获取 conversation_id\r\n if (data.conversation_id && !tempConversationId) {\r\n tempConversationId = data.conversation_id;\r\n this.internalConversationId = data.conversation_id;\r\n this.conversationStart.emit({\r\n conversation_id: data.conversation_id,\r\n event: data.event,\r\n message_id: data.message_id,\r\n id: data.id,\r\n });\r\n }\r\n\r\n // 检查任务结束\r\n if (data.event === 'node_finished' && data.data?.title?.includes('聘才猫任务结束')) {\r\n this.isLoading = false;\r\n this.interviewComplete.emit({\r\n conversation_id: this.internalConversationId,\r\n });\r\n }\r\n\r\n // 检查 message_end\r\n if (data.event === 'message_end') {\r\n this.streamComplete.emit({\r\n conversation_id: data.conversation_id || '',\r\n event: data.event,\r\n message_id: data.message_id,\r\n id: data.id,\r\n });\r\n }\r\n\r\n // 检查错误\r\n if (data.event === 'error') {\r\n this.isLoading = false;\r\n this.error = data.data?.message || data.message || '请求失败';\r\n ErrorEventBus.emitError({\r\n error: data.data,\r\n message: this.error,\r\n });\r\n }\r\n },\r\n onError: error => {\r\n console.error('SSE 请求错误:', error);\r\n this.isLoading = false;\r\n this.error = '请求失败,请重试';\r\n ErrorEventBus.emitError({\r\n error: error,\r\n message: this.error,\r\n });\r\n },\r\n onComplete: () => {\r\n this.isLoading = false;\r\n },\r\n });\r\n };\r\n\r\n /**\r\n * 重试按钮点击\r\n */\r\n private handleRetry = () => {\r\n this.startChatStream();\r\n };\r\n\r\n /**\r\n * Tab 切换\r\n */\r\n private handleTabChange = (tab: 'analysis' | 'suggestions' | 'resume') => {\r\n this.activeTab = tab;\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 };\r\n\r\n const overlayClass = {\r\n 'modal-overlay': true,\r\n 'fullscreen-overlay': this.fullscreen,\r\n };\r\n\r\n const tabItems = [\r\n { key: 'analysis', label: '深度分析' },\r\n { key: 'suggestions', label: '改进建议' },\r\n { key: 'resume', label: '优化版本' },\r\n ];\r\n\r\n const iframeUrl = this.optimizationType === 1\r\n ? `${PCM_DOMAIN}/reportNode/thousandResume?conversationId=${this.internalConversationId}&referrer=sdk&reportType=suggestions&showHeader=1&token=${this.token}`\r\n : `${PCM_DOMAIN}/reportNode/thousandResume?conversationId=${this.internalConversationId}&referrer=sdk&reportType=${this.activeTab}&token=${this.token}`;\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 {/* Loading 状态 */}\r\n {this.isLoading && (\r\n <div class=\"loading-container\">\r\n <div class=\"loading-spinner\"></div>\r\n <p class=\"loading-text\">AI 正在分析您的简历</p>\r\n <p class=\"loading-subtext\">请耐心等待...</p>\r\n <div class=\"loading-dots\">\r\n <span class=\"dot\"></span>\r\n <span class=\"dot delay-1\"></span>\r\n <span class=\"dot delay-2\"></span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* 错误状态 */}\r\n {!this.isLoading && this.error && (\r\n <div class=\"error-container\">\r\n <span class=\"error-icon\">!</span>\r\n <p class=\"error-text\">{this.error}</p>\r\n <button class=\"retry-button\" onClick={this.handleRetry}>重新分析</button>\r\n </div>\r\n )}\r\n\r\n {/* optimizationType=1: 改进建议 */}\r\n {!this.isLoading && !this.error && this.optimizationType === 1 && this.internalConversationId && (\r\n <div class=\"iframe-container\">\r\n <iframe src={iframeUrl} frameborder=\"0\"></iframe>\r\n </div>\r\n )}\r\n\r\n {/* optimizationType=2: 深度分析 */}\r\n {!this.isLoading && !this.error && this.optimizationType === 2 && this.internalConversationId && (\r\n <div class=\"analysis-container\">\r\n <div class=\"analysis-header\">\r\n <h1 class=\"analysis-title\">深度分析报告</h1>\r\n <p class=\"analysis-desc\">全面诊断 + 改进建议 + 优化版本</p>\r\n <div class=\"tab-container\">\r\n {tabItems.map(item => (\r\n <button\r\n class={{\r\n 'tab-button': true,\r\n 'active': this.activeTab === item.key\r\n }}\r\n onClick={() => this.handleTabChange(item.key as 'analysis' | 'suggestions' | 'resume')}\r\n >\r\n {item.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div class=\"iframe-container\">\r\n <iframe src={iframeUrl} frameborder=\"0\"></iframe>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}"],"version":3}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"p-wZema4At.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/components-mobile-upload-btn/uploadNumberSDK.ts","src/components/components-mobile-upload-btn/components-mobile-upload-btn.css?tag=components-mobile-upload-btn&encapsulation=shadow","src/global/global.css?tag=components-mobile-upload-btn&encapsulation=shadow","src/global/host.css?tag=components-mobile-upload-btn&encapsulation=shadow","src/components/components-mobile-upload-btn/components-mobile-upload-btn.tsx"],"sourcesContent":["import { sendHttpRequest } from \"../../utils/utils\";\r\n\r\n// 文件上传流水号SDK\r\nconst uploadNumberSDK = {\r\n number: '',\r\n isWorking: false,\r\n close: async function (params?: {\r\n onOk?: () => void;\r\n onError?: () => void;\r\n }) {\r\n const { onOk, onError } = params ?? {};\r\n const { number } = this;\r\n if (number) {\r\n const result = await sendHttpRequest({\r\n url: `/sdk/v1/update_id/${number}`,\r\n method: 'delete',\r\n });\r\n if (result.success) {\r\n this.number = '';\r\n onOk?.();\r\n } else {\r\n onError?.();\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default uploadNumberSDK;",".upload-area {\r\n max-height: 300px;\r\n overflow-y: auto;\r\n}\r\n\r\n.upload-actions {\r\n display: flex;\r\n gap: 12px;\r\n margin-top: 12px;\r\n width: 100%;\r\n}\r\n\r\n.upload-placeholder {\r\n width: 100%;\r\n cursor: pointer;\r\n}\r\n\r\n.upload-placeholder img {\r\n display: block;\r\n margin: 0 auto;\r\n}\r\n\r\n.upload-placeholder p {\r\n text-align: center;\r\n}\r\n\r\n.upload-text {\r\n margin: 8px 0;\r\n}\r\n\r\n.upload-hint {\r\n font-size: 12px;\r\n color: #999999;\r\n}\r\n\r\n.file-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 8px 0;\r\n}\r\n\r\n.file-item-content {\r\n display: flex;\r\n align-items: center;\r\n min-width: 0;\r\n}\r\n\r\n.file-name {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.remove-file {\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n font-size: 18px;\r\n}\r\n\r\n.mobile-upload {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.btn {\r\n position: relative;\r\n padding: 4px 8px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n overflow: hidden;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n white-space: nowrap;\r\n}\r\n\r\n.btn::after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.btn:hover::after {\r\n background-color: rgba(0,0,0,0.04);\r\n}\r\n\r\n.btn-link {\r\n color: #0D75FB;\r\n}\r\n\r\n.btn-default {\r\n background-color: #ffffff;\r\n color: #0D75FB;\r\n border: 1px solid #0D75FB;\r\n}\r\n\r\n.btn-primary {\r\n background-color: #0D75FB;\r\n color: #ffffff;\r\n}\r\n\r\n\r\n.loading {\r\n font-size: 12px;\r\n color: #999999;\r\n}\r\n\r\n.mask {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\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: 10000;\r\n}\r\n\r\n.mask .upload-wrapper {\r\n width: 540px;\r\n max-width: 80%;\r\n max-height: 80%;\r\n background-color: #ffffff;\r\n padding: 32px 24px;\r\n border-radius: 16px;\r\n overflow-y: auto;\r\n}\r\n\r\n.mask .upload-wrapper .upload-box {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n.time-expire {\r\n margin: 8px 0;\r\n text-align: center;\r\n font-size: 12px;\r\n color: #555555;\r\n}\r\n\r\n.time-count-down {\r\n margin-left: 8px;\r\n color: #0D75FB;\r\n}\r\n\r\n.alert-tip {\r\n margin-top: 8px;\r\n text-align: center;\r\n font-size: 12px;\r\n color: #999999;\r\n}\r\n\r\n.qrcode-wrapper {\r\n width: 160px;\r\n height: 160px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n border: 1px solid #e5e5e5;\r\n border-radius: 4px;\r\n padding: 1px;\r\n}\r\n\r\n.qrcode-wrapper .qrcode {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.modal-footer {\r\n margin-top: 32px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.modal-footer .btn {\r\n min-width: 100px;\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 z-index: 1000;\r\n overflow-y: auto;\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: auto;\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: 5vh auto auto 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 cursor: pointer;\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 text-align: center;\r\n white-space: normal;\r\n word-wrap: break-word;\r\n word-break: break-all;\r\n line-height: 1.4;\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 min-width: 30px;\r\n min-height: 30px;\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}\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}\r\n\r\n/* 面试设置区域 */\r\n.interview-settings-section {\r\n margin-bottom: 24px;\r\n padding: 20px;\r\n background-color: #f8f9fa;\r\n border-radius: 8px;\r\n border: 1px solid #e9ecef;\r\n}\r\n\r\n.settings-row {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.settings-row:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n.settings-label {\r\n display: block;\r\n font-weight: 500;\r\n color: #333;\r\n margin-bottom: 12px;\r\n font-size: 14px;\r\n}\r\n\r\n/* 题目数量滑块样式 */\r\n.question-number-section {\r\n width: 100%;\r\n}\r\n\r\n.slider-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.question-slider {\r\n flex: 1;\r\n height: 6px;\r\n background: #ddd;\r\n outline: none;\r\n border-radius: 3px;\r\n -webkit-appearance: none;\r\n appearance: none;\r\n}\r\n\r\n.question-slider::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.question-slider::-moz-range-thumb {\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n border: none;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.slider-value {\r\n font-weight: 600;\r\n color: #0D75FB;\r\n font-size: 14px;\r\n min-width: 30px;\r\n text-align: center;\r\n}\r\n\r\n/* 开关样式 */\r\n.analysis-toggle-section {\r\n width: 100%;\r\n}\r\n\r\n.toggle-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.toggle-switch {\r\n position: relative;\r\n display: inline-block;\r\n width: 44px;\r\n height: 24px;\r\n}\r\n\r\n.toggle-switch input {\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\n.toggle-slider {\r\n position: absolute;\r\n cursor: pointer;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: #ccc;\r\n transition: 0.3s;\r\n border-radius: 24px;\r\n}\r\n\r\n.toggle-slider:before {\r\n position: absolute;\r\n content: \"\";\r\n height: 18px;\r\n width: 18px;\r\n left: 3px;\r\n bottom: 3px;\r\n background-color: white;\r\n transition: 0.3s;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\ninput:checked + .toggle-slider {\r\n background-color: #0D75FB;\r\n}\r\n\r\ninput:checked + .toggle-slider:before {\r\n transform: translateX(20px);\r\n}\r\n\r\n.toggle-text {\r\n font-size: 14px;\r\n color: #666;\r\n font-weight: 500;\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/* 历史会话按钮 */\r\n.header-history-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: #bbb;\r\n cursor: pointer;\r\n font-size: 13px;\r\n font-family: inherit;\r\n line-height: 1;\r\n transition: all 0.2s ease;\r\n flex-shrink: 0;\r\n white-space: nowrap;\r\n}\r\n\r\n.header-history-button svg {\r\n width: 16px;\r\n height: 16px;\r\n display: block;\r\n flex-shrink: 0;\r\n}\r\n\r\n.header-history-button:hover {\r\n background-color: rgba(0, 0, 0, 0.04);\r\n color: #666;\r\n}\r\n\r\n.header-history-button:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* 历史会话抽屉内容 */\r\n.history-drawer-content {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.conversation-list {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 8px 0;\r\n}\r\n\r\n.loading-conversations,\r\n.empty-conversations {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 40px 20px;\r\n color: #999;\r\n}\r\n\r\n.loading-conversations .loading-spinner-small {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.conversation-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n margin: 0 8px 4px 8px;\r\n border-radius: 8px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n border: 1px solid transparent;\r\n}\r\n\r\n.conversation-item:hover {\r\n background: #f5f5f5;\r\n}\r\n\r\n.conversation-info {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.conversation-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n color: #262626;\r\n margin-bottom: 4px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.conversation-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #8c8c8c;\r\n}\r\n\r\n.conversation-time {\r\n flex-shrink: 0;\r\n}\r\n\r\n.message-count {\r\n flex-shrink: 0;\r\n}\r\n\r\n.conversation-status {\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n font-size: 11px;\r\n font-weight: 500;\r\n}\r\n\r\n.conversation-status.completed {\r\n background: #f6ffed;\r\n color: #52c41a;\r\n}\r\n\r\n.conversation-status.running {\r\n background: #fff7e6;\r\n color: #fa8c16;\r\n}\r\n\r\n.header-history-entry {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 8px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: #e6f7ff;\r\n color: #1890ff;\r\n cursor: pointer;\r\n font-size: 12px;\r\n font-family: inherit;\r\n line-height: 1;\r\n white-space: nowrap;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.header-history-entry:hover {\r\n background: #bae7ff;\r\n color: #0958d9;\r\n transform: translateY(-1px);\r\n}\r\n\r\n.header-history-entry:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n.history-pagination {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding: 12px 16px 16px;\r\n border-top: 1px solid #f0f0f0;\r\n}\r\n\r\n.history-pagination-button {\r\n min-width: 72px;\r\n padding: 6px 12px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 6px;\r\n background: #fff;\r\n color: #595959;\r\n cursor: pointer;\r\n font-size: 12px;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.history-pagination-button:hover:not(:disabled) {\r\n border-color: #1890ff;\r\n color: #1890ff;\r\n background: #e6f7ff;\r\n}\r\n\r\n.history-pagination-button:disabled {\r\n border-color: #f0f0f0;\r\n color: #bfbfbf;\r\n background: #fafafa;\r\n cursor: not-allowed;\r\n}\r\n\r\n.history-pagination-info {\r\n flex: 1;\r\n text-align: center;\r\n color: #8c8c8c;\r\n font-size: 12px;\r\n}\r\n \r\n",":host {\r\n /* 字体相关属性 */\r\n font-size: 16px;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n font-weight: normal;\r\n font-style: normal;\r\n font-variant: normal;\r\n line-height: 1.5;\r\n letter-spacing: normal;\r\n word-spacing: normal;\r\n \r\n /* 文本相关属性 */\r\n color: #333; /* 重置文字颜色,避免继承外部的red */\r\n text-align: left;\r\n text-indent: 0;\r\n text-transform: none;\r\n white-space: normal;\r\n word-wrap: normal;\r\n word-break: normal;\r\n \r\n /* 可见性 */\r\n visibility: visible;\r\n \r\n /* 列表相关 */\r\n list-style: none;\r\n list-style-image: none;\r\n list-style-position: outside;\r\n list-style-type: disc;\r\n \r\n /* 表格相关 */\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n caption-side: top;\r\n empty-cells: show;\r\n table-layout: auto;\r\n \r\n /* 引用 */\r\n quotes: auto;\r\n \r\n /* 光标 */\r\n cursor: auto;\r\n \r\n /* 文本方向 */\r\n direction: ltr;\r\n \r\n /* 打印相关 */\r\n orphans: 2;\r\n widows: 2;\r\n page-break-inside: auto;\r\n \r\n /* 其他可能被继承的属性 */\r\n text-decoration: none;\r\n text-shadow: none;\r\n \r\n /* 确保组件有独立的盒模型 */\r\n box-sizing: border-box;\r\n \r\n /* 重置一些可能影响布局的继承属性 */\r\n writing-mode: horizontal-tb;\r\n text-orientation: mixed;\r\n}","import { Component, Prop, State, Event, h, EventEmitter, Method } from \"@stencil/core\";\r\nimport { FileUploadResponse, sendHttpRequest, PCM_DOMAIN } from \"../../utils/utils\";\r\nimport uploadNumberSDK from \"./uploadNumberSDK\";\r\nimport { Message } from \"../../services/message.service\";\r\nimport qrcode from 'qrcode-generator'\r\n\r\n@Component({\r\n tag: 'components-mobile-upload-btn',\r\n styleUrls: ['components-mobile-upload-btn.css', '../../global/global.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class ComponentsMobileUploadBtn {\r\n /**\r\n * 是否支持多文件上传\r\n */\r\n @Prop() multiple: boolean = false;\r\n /**\r\n * 支持的文件后缀列表(需要带上小数点.)\r\n */\r\n @Prop() acceptFileSuffixList: string[] = [];\r\n /**\r\n * 最大文件数\r\n */\r\n @Prop() maxFileCount: number = Infinity;\r\n /**\r\n * 最大文件大小\r\n */\r\n @Prop() maxFileSize: number = Infinity;\r\n /**\r\n * 上传请求头\r\n */\r\n @Prop() uploadHeaders?: Record<string, unknown>;\r\n /**\r\n * 上传请求参数\r\n */\r\n @Prop() uploadParams?: Record<string, unknown>;\r\n /**\r\n * 是否使用上传区域样式\r\n */\r\n @Prop() uploadAreaMode: boolean = false;\r\n /**\r\n * 是否禁用上传\r\n */\r\n @Prop() disabled: boolean = false;\r\n /**\r\n * 默认文件列表\r\n */\r\n @Prop() defaultFileList: FileUploadResponse[] = [];\r\n /**\r\n * 上传区域提示文本\r\n */\r\n @Prop() uploadText: string = '点击上传简历';\r\n @State() QR_CODE_VALID_TIME: number = 0;\r\n @State() open: boolean = false;\r\n @State() mobileUrl: string = '';\r\n @State() setStartMobileUpload: boolean = false;\r\n @State() startMobileUploadLoading: boolean = false;\r\n @State() qrcodeStatus: 'active' | 'expired' | 'loading' | undefined = 'loading';\r\n @State() value: FileUploadResponse[] = [];\r\n @State() mobileUploadFiles: FileUploadResponse[] = [];\r\n @State() expireTime: string = ''; // 过期时间\r\n\r\n @Event() ok: EventEmitter<FileUploadResponse[]>;\r\n\r\n componentWillLoad(): void {\r\n this.value = [...this.defaultFileList];\r\n }\r\n\r\n @Method()\r\n async getIsUploading(): Promise<boolean> {\r\n return this.startMobileUploadLoading;\r\n }\r\n\r\n @Method()\r\n async clearSelectedFiles(): Promise<void> {\r\n this.value = [];\r\n }\r\n\r\n private setStartMobileUploadWrapper = (e: boolean) => {\r\n uploadNumberSDK.isWorking = e;\r\n this.setStartMobileUpload = e;\r\n }\r\n\r\n @State() qrcodeUrl: string = '';\r\n private setMobileUrlWrapper = (e: string) => {\r\n this.mobileUrl = e;\r\n if (e) {\r\n const qr = qrcode(0, 'M');\r\n qr.addData(e);\r\n qr.make();\r\n this.qrcodeUrl = qr.createDataURL(4, 0);\r\n } else {\r\n this.qrcodeUrl = '';\r\n }\r\n }\r\n\r\n // 轮询流水号数据\r\n private pollingQueryNumberInfo = async (num: string): Promise<void> => {\r\n const res = await sendHttpRequest({\r\n url: `/sdk/v1/update_id/${num}/status`,\r\n method: 'get',\r\n });\r\n if (res?.success) {\r\n const resData: {\r\n update_id?: any;\r\n tags?: any;\r\n status?: any;\r\n file_list?: any;\r\n user_id?: any;\r\n cfg?: any;\r\n iat?: any;\r\n exp?: any;\r\n } = res.data ?? {};\r\n const { file_list } = resData;\r\n this.mobileUploadFiles = file_list ?? [];\r\n }\r\n if (uploadNumberSDK.isWorking) {\r\n setTimeout(() => {\r\n this.pollingQueryNumberInfo(num);\r\n }, 3000);\r\n }\r\n }\r\n\r\n private handleStartMobileUpload = async () => {\r\n const that = this;\r\n this.qrcodeStatus = 'loading';\r\n this.startMobileUploadLoading = true;\r\n const params = this.uploadParams ?? {};\r\n const tags = Array.isArray(params.tags) ? params.tags as string[] : undefined;\r\n const reqData: {\r\n tags?: string[];\r\n cfg?: Record<string, any>;\r\n is_knowledge_doc?: boolean,\r\n } = {\r\n is_knowledge_doc: false,\r\n tags,\r\n cfg: {\r\n maxSize: that.maxFileSize,\r\n maxCount: that.multiple ? that.maxFileCount : 1,\r\n fromUserName: '',\r\n fromUserId: '',\r\n customAccept: that.acceptFileSuffixList.join(','),\r\n upload: that.uploadParams,\r\n },\r\n }\r\n const res = await sendHttpRequest({\r\n url: `/sdk/v1/update_id`,\r\n method: 'post',\r\n data: reqData,\r\n });\r\n if (res?.success) {\r\n const resData: {\r\n update_id?: any;\r\n tags?: any;\r\n status?: any;\r\n file_list?: any;\r\n user_id?: any;\r\n cfg?: any;\r\n iat?: any;\r\n exp?: any;\r\n now?: any;\r\n custom_data?: any;\r\n } = res.data ?? {};\r\n uploadNumberSDK.number = resData.update_id;\r\n // 计算过期时间:创建后+1小时\r\n const expireDate = new Date(Date.now() + 3600 * 1000);\r\n this.expireTime = `${expireDate.getHours().toString().padStart(2, '0')}:${expireDate.getMinutes().toString().padStart(2, '0')}`;\r\n const theMobileUrl = `${PCM_DOMAIN}/agents/uploadFileByCode?num=${uploadNumberSDK.number}`;\r\n this.setMobileUrlWrapper(theMobileUrl)\r\n this.setStartMobileUploadWrapper(true);\r\n this.qrcodeStatus = 'active';\r\n // 开启轮询\r\n this.pollingQueryNumberInfo(uploadNumberSDK.number);\r\n }\r\n this.startMobileUploadLoading = false;\r\n }\r\n\r\n // 取消手机上传\r\n @State() cancelLoading = false;\r\n private cancelMobileUpload = async (clearValue: boolean = true) => {\r\n this.cancelLoading = true;\r\n await uploadNumberSDK.close({\r\n onError() {\r\n Message.info('取消失败');\r\n }\r\n })\r\n this.cancelLoading = false;\r\n this.QR_CODE_VALID_TIME = 0;\r\n this.expireTime = '';\r\n this.setStartMobileUploadWrapper(false);\r\n this.setMobileUrlWrapper('');\r\n this.qrcodeStatus = 'expired';\r\n if (clearValue) {\r\n this.mobileUploadFiles = [];\r\n }\r\n this.open = false;\r\n }\r\n\r\n // 删除文件\r\n private handleDelete = async (cos_key: any) => {\r\n const res = await sendHttpRequest({\r\n url: `/sdk/v1/update_id/${uploadNumberSDK.number}/file`,\r\n method: 'delete',\r\n params: {\r\n update_id: uploadNumberSDK.number,\r\n cos_key,\r\n }\r\n });\r\n if (res?.success) {\r\n this.mobileUploadFiles = this.mobileUploadFiles.filter(it => it.cos_key !== cos_key);\r\n this.value = this.value.filter(it => it.cos_key !== cos_key);\r\n this.ok.emit(this.value);\r\n }\r\n }\r\n\r\n\r\n private handleOpenUpload = (): void => {\r\n if (this.disabled) return;\r\n if (this.maxFileCount <= this.value.length) {\r\n Message.info('文件数量已达到上限!');\r\n return;\r\n }\r\n this.mobileUploadFiles = [];\r\n this.open = true;\r\n this.handleStartMobileUpload();\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {this.uploadAreaMode ? <div class=\"upload-area-mode\">\r\n <div class=\"upload-area\">\r\n {this.value.map((item, index) => <div class=\"file-item\" key={item.cos_key || index}>\r\n <div class=\"file-item-content\">\r\n <span class=\"file-icon\">📝</span>\r\n <span class=\"file-name\">{item.file_name}</span>\r\n </div>\r\n {!this.disabled && <button class=\"remove-file\" onClick={(event) => {\r\n event.stopPropagation();\r\n this.handleDelete(item.cos_key);\r\n }}>×</button>}\r\n </div>)}\r\n </div>\r\n {!this.disabled && this.value.length < this.maxFileCount && <div class=\"upload-actions\">\r\n <div class=\"upload-placeholder\" onClick={this.handleOpenUpload}>\r\n <img src=\"https://pub.pincaimao.com/static/web/images/home/i_upload.png\" />\r\n <p class=\"upload-text\">{this.uploadText}</p>\r\n {!!this.acceptFileSuffixList.length && <p class=\"upload-hint\">支持 {this.acceptFileSuffixList.join('、')} 格式。</p>}\r\n </div>\r\n </div>}\r\n </div> : <div class=\"mobile-upload\">\r\n <div class=\"btn btn-link\" onClick={this.handleOpenUpload}>扫码上传</div>\r\n </div>}\r\n {\r\n this.open && <div class=\"mask\">\r\n <div class=\"upload-wrapper\">\r\n {\r\n this.setStartMobileUpload ? <div class=\"upload-box\">\r\n <div class=\"qrcode-wrapper\">\r\n {\r\n this.qrcodeStatus === 'active' && <img class=\"qrcode\" src={this.qrcodeUrl} />\r\n }\r\n {\r\n this.qrcodeStatus === 'loading' && <span class=\"loading\">加载中...</span>\r\n }\r\n {\r\n this.qrcodeStatus === 'expired' && <div\r\n class=\"btn btn-link\"\r\n onClick={this.handleStartMobileUpload}\r\n >重新获取</div>\r\n }\r\n </div>\r\n <div class=\"time-expire\">\r\n 二维码有效期至 {this.expireTime}\r\n </div>\r\n <div class=\"alert-tip\">\r\n 上传过程中请不要关闭此弹窗\r\n </div>\r\n {\r\n this.qrcodeStatus === 'active' && <div\r\n style={{ marginTop: '12px', fontSize: '12px' }}\r\n class=\"btn btn-link\"\r\n onClick={() => {\r\n navigator.clipboard\r\n .writeText(this.mobileUrl)\r\n .then(() => {\r\n Message.success(\"已复制到剪贴板\");\r\n })\r\n .catch(() => {\r\n Message.error(\"复制失败\");\r\n });\r\n }}\r\n >复制二维码地址</div>\r\n }\r\n </div> : (this.startMobileUploadLoading && <span class=\"loading\">加载中...</span>)\r\n }\r\n {/* 上传文件列表 */}\r\n <div style={{ marginTop: '12px' }}>\r\n {\r\n this.mobileUploadFiles.map((item, index) => {\r\n return <div class=\"file-item\" key={index}>\r\n <div class=\"file-item-content\">\r\n <span class=\"file-icon\">📝</span>\r\n <span class=\"file-name\">{item?.file_name}</span>\r\n </div>\r\n <button class=\"remove-file\" onClick={(e) => {\r\n e.stopPropagation();\r\n this.handleDelete(item.cos_key)\r\n }}>×</button>\r\n </div>\r\n })\r\n }\r\n </div>\r\n <div class=\"modal-footer\">\r\n <div class=\"btn btn-default\" onClick={() => this.cancelMobileUpload()}>取消</div>\r\n <div class=\"btn btn-primary\" onClick={() => {\r\n if (this.value.length + this.mobileUploadFiles.length > this.maxFileCount) {\r\n Message.info(`最多只能选择${this.maxFileCount}个文件,请删除多余文件!`);\r\n return;\r\n }\r\n this.value = this.multiple\r\n ? [...this.value, ...this.mobileUploadFiles]\r\n : this.mobileUploadFiles.slice(0, 1);\r\n this.ok.emit(this.value);\r\n this.cancelMobileUpload(false);\r\n }}>完成</div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n}"],"version":3}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,g as i,h as o}from"./p-Bq0K-WqZ.js";import{a as n,v as r,c as a}from"./p-BKzMDQ2I.js";import{E as s}from"./p-C0FYX2-Z.js";const l="";const d='.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0, 0, 0, 0.5);display:flex;z-index:1000;overflow-y:auto}.fullscreen-overlay{padding:0;background-color:rgba(0, 0, 0, 0.7);position:absolute;width:100%;height:auto}.modal-container{background-color:#fff;border-radius:8px;width:100%;display:flex;flex-direction:column;position:relative;margin:5vh auto auto auto;transition:all 0.3s ease-out;overflow:hidden}.modal-container.fullscreen{width:100%;max-width:none;height:100%;border-radius:0;margin:0;display:flex;flex-direction:column;max-height:100%}.pc-layout{width:80%;max-width:600px;min-width:320px}@media screen and (max-width: 768px){.pc-layout{width:95%}.modal-overlay{padding:10px 0px 0px 0px}.modal-container.fullscreen{width:100%;height:100%;max-height:100%;border-radius:16px 16px 0 0;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:4px 16px;height:50px;border-bottom:1px solid #e8e8e8;flex-shrink:0}.header-left{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:600;color:#333}.header-icon{width:24px;height:24px}.close-button{background:transparent;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:4px}.close-button:hover{background-color:rgba(0, 0, 0, 0.04)}.close-button span{font-size:24px;line-height:1;color:#999}.close-button:hover span{color:#666}.upload-area{cursor:pointer;width:100%}.upload-placeholder{transition:all 0.3s ease;display:flex;flex-direction:column;align-items:center;background:rgba(0, 0, 0, 0.02);border:1px dashed #d9d9d9;border-radius:8px;cursor:pointer}.upload-placeholder:hover{border:1px dashed #1890ff}.upload-placeholder img{margin-top:8px;width:50px;height:50px}.upload-placeholder .upload-text{margin:4px 0;color:#332F39;font-size:14px}.upload-placeholder .upload-hint{font-size:14px;color:#949AA5;margin-top:8px;padding:0px 10px;text-align:center;white-space:normal;word-wrap:break-word;word-break:break-all;line-height:1.4}.file-item{position:relative;padding:16px;border:1px solid #e2e8f0;border-radius:8px;transition:border-color 0.3s;cursor:pointer;margin-bottom:16px;display:flex;justify-content:space-between;align-items:center}.file-item:hover{border-color:#0D75FB}.file-item-content{display:flex;align-items:center;gap:8px;flex:1;min-width:0;overflow:hidden}.file-icon{color:#0D75FB;flex-shrink:0}.file-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 50px)}.remove-file{background:transparent;border:none;color:#94a3b8;cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;padding:4px;margin-left:8px;border-radius:4px;transition:all 0.2s;min-width:30px;min-height:30px}.remove-file:hover{background-color:#f1f5f9;color:#475569}.file-input{display:none}.input-container{padding:20px;display:flex;flex-direction:column;height:calc(100% - 50px);background:linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;overflow-y:auto}.input-container h3{margin-top:0;margin-bottom:20px;font-size:18px;color:#333;text-align:center}.jd-input-section{margin-bottom:20px}.jd-input-section label{display:block;margin-bottom:8px;font-weight:500;color:#333}.job-description-textarea{width:calc(100% - 16px);border:1px solid #ddd;border-radius:4px;resize:vertical;font-family:inherit;font-size:14px;line-height:1.5;transition:border-color 0.3s;padding:8px}.job-description-textarea:focus{outline:none;border-color:#1890ff;box-shadow:0 0 0 2px rgba(24, 144, 255, 0.2)}.resume-upload-section{margin-bottom:20px;width:100%;display:flex;flex-direction:column}.resume-upload-section label{display:block;margin-bottom:8px;font-weight:500;color:#333}.interview-settings-section{margin-bottom:24px;padding:20px;background-color:#f8f9fa;border-radius:8px;border:1px solid #e9ecef}.settings-row{margin-bottom:20px}.settings-row:last-child{margin-bottom:0}.settings-label{display:block;font-weight:500;color:#333;margin-bottom:12px;font-size:14px}.question-number-section{width:100%}.slider-container{display:flex;align-items:center;gap:12px}.question-slider{flex:1;height:6px;background:#ddd;outline:none;border-radius:3px;-webkit-appearance:none;appearance:none}.question-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;background:#0D75FB;cursor:pointer;border-radius:50%;box-shadow:0 2px 4px rgba(0, 0, 0, 0.2)}.question-slider::-moz-range-thumb{width:20px;height:20px;background:#0D75FB;cursor:pointer;border-radius:50%;border:none;box-shadow:0 2px 4px rgba(0, 0, 0, 0.2)}.slider-value{font-weight:600;color:#0D75FB;font-size:14px;min-width:30px;text-align:center}.analysis-toggle-section{width:100%}.toggle-container{display:flex;align-items:center;gap:12px}.toggle-switch{position:relative;display:inline-block;width:44px;height:24px}.toggle-switch input{opacity:0;width:0;height:0}.toggle-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:0.3s;border-radius:24px}.toggle-slider:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background-color:white;transition:0.3s;border-radius:50%;box-shadow:0 2px 4px rgba(0, 0, 0, 0.2)}input:checked+.toggle-slider{background-color:#0D75FB}input:checked+.toggle-slider:before{transform:translateX(20px)}.toggle-text{font-size:14px;color:#666;font-weight:500}.submit-button{margin-top:10px;padding:10px 30px;background:#0D75FB;color:white;border:none;border-radius:4px;font-size:16px;cursor:pointer;transition:all 0.3s ease;width:100%;max-width:400px;align-self:center}.submit-button:hover{background-color:#40a9ff}.submit-button:disabled{background-color:rgba(0,0,0,0.04);color:rgba(0,0,0,0.25);cursor:not-allowed}.ai-disclaimer{margin-top:16px;text-align:center;font-size:12px;color:#999;line-height:1.5}.ai-disclaimer p{margin:4px 0}.beian-info{display:flex;justify-content:center;flex-wrap:wrap;gap:4px}.ai-disclaimer a{color:#666;text-decoration:none;transition:color 0.2s ease}.ai-disclaimer a:hover{color:#1890ff;text-decoration:underline}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:24px}.loading-spinner{width:40px;height:40px;border:4px solid rgba(0, 0, 0, 0.1);border-radius:50%;border-top-color:var(--pcm-primary-color, #1890ff);animation:spin 1s linear infinite;margin-bottom:16px}.loading-text{font-size:16px;color:var(--pcm-text-color, #333)}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.header-history-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:4px 8px;border:none;border-radius:4px;background:transparent;color:#bbb;cursor:pointer;font-size:13px;font-family:inherit;line-height:1;transition:all 0.2s ease;flex-shrink:0;white-space:nowrap}.header-history-button svg{width:16px;height:16px;display:block;flex-shrink:0}.header-history-button:hover{background-color:rgba(0, 0, 0, 0.04);color:#666}.header-history-button:focus-visible{outline:2px solid rgba(13, 117, 251, 0.35);outline-offset:2px}.history-drawer-content{height:100%;display:flex;flex-direction:column}.conversation-list{flex:1;overflow-y:auto;padding:8px 0}.loading-conversations,.empty-conversations{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;color:#999}.loading-conversations .loading-spinner-small{margin-bottom:12px}.conversation-item{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;margin:0 8px 4px 8px;border-radius:8px;cursor:pointer;transition:all 0.2s ease;border:1px solid transparent}.conversation-item:hover{background:#f5f5f5}.conversation-info{flex:1;min-width:0}.conversation-title{font-size:14px;font-weight:500;color:#262626;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversation-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:#8c8c8c}.conversation-time{flex-shrink:0}.message-count{flex-shrink:0}.conversation-status{padding:2px 6px;border-radius:4px;font-size:11px;font-weight:500}.conversation-status.completed{background:#f6ffed;color:#52c41a}.conversation-status.running{background:#fff7e6;color:#fa8c16}.header-history-entry{display:inline-flex;align-items:center;justify-content:center;margin-left:8px;padding:4px 8px;border:none;border-radius:4px;background:#e6f7ff;color:#1890ff;cursor:pointer;font-size:12px;font-family:inherit;line-height:1;white-space:nowrap;transition:all 0.2s ease}.header-history-entry:hover{background:#bae7ff;color:#0958d9;transform:translateY(-1px)}.header-history-entry:focus-visible{outline:2px solid rgba(13, 117, 251, 0.35);outline-offset:2px}.history-pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px 16px;border-top:1px solid #f0f0f0}.history-pagination-button{min-width:72px;padding:6px 12px;border:1px solid #d9d9d9;border-radius:6px;background:#fff;color:#595959;cursor:pointer;font-size:12px;transition:all 0.2s ease}.history-pagination-button:hover:not(:disabled){border-color:#1890ff;color:#1890ff;background:#e6f7ff}.history-pagination-button:disabled{border-color:#f0f0f0;color:#bfbfbf;background:#fafafa;cursor:not-allowed}.history-pagination-info{flex:1;text-align:center;color:#8c8c8c;font-size:12px}';const p=":host{font-size:16px;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;font-weight:normal;font-style:normal;font-variant:normal;line-height:1.5;letter-spacing:normal;word-spacing:normal;color:#333;text-align:left;text-indent:0;text-transform:none;white-space:normal;word-wrap:normal;word-break:normal;visibility:visible;list-style:none;list-style-image:none;list-style-position:outside;list-style-type:disc;border-collapse:separate;border-spacing:0;caption-side:top;empty-cells:show;table-layout:auto;quotes:auto;cursor:auto;direction:ltr;orphans:2;widows:2;page-break-inside:auto;text-decoration:none;text-shadow:none;box-sizing:border-box;writing-mode:horizontal-tb;text-orientation:mixed}";const c=class{constructor(i){e(this,i);this.modalClosed=t(this,"modalClosed");this.uploadSuccess=t(this,"uploadSuccess");this.streamComplete=t(this,"streamComplete");this.conversationStart=t(this,"conversationStart");this.interviewComplete=t(this,"interviewComplete");this.tokenInvalid=t(this,"tokenInvalid");this.someErrorEvent=t(this,"someErrorEvent");this.recordingError=t(this,"recordingError")}modalTitle="模拟面试";token;isOpen=false;modalClosed;icon;zIndex=1e3;isShowHeader=true;isNeedClose=true;conversationId;defaultQuery="请开始模拟面试";maxRecordingTime=120;waitingTime=10;fullscreen=false;customInputs={};digitalId;openingIndex=0;enableVirtualHuman=false;showEndInterviewButton=false;uploadSuccess;streamComplete;conversationStart;interviewComplete;tokenInvalid;someErrorEvent;recordingError;selectedFile=null;isUploading=false;uploadedFileInfo=null;showChatModal=false;get hostElement(){return i(this)}jobDescription="";isSubmitting=false;tokenInvalidListener;removeErrorListener;virtualChatModalRef=null;handleTokenChange(e){if(e&&e!==n.getToken()){n.setToken(e)}}async handleIsOpenChange(e){if(!e){if(this.virtualChatModalRef){await this.virtualChatModalRef.setComponentActive(false)}this.resetState()}else{await r(this.token);this.showChatModal=true}}componentWillLoad(){if(this.zIndex){a.setItem("modal-zIndex",this.zIndex)}if(this.token){n.setToken(this.token)}this.tokenInvalidListener=()=>{this.tokenInvalid.emit()};this.removeErrorListener=s.addErrorListener((e=>{this.someErrorEvent.emit(e)}));document.addEventListener("pcm-token-invalid",this.tokenInvalidListener)}disconnectedCallback(){document.removeEventListener("pcm-token-invalid",this.tokenInvalidListener);if(this.removeErrorListener){this.removeErrorListener()}}resetState(){this.showChatModal=false;this.jobDescription="";this.isSubmitting=false;this.selectedFile=null;this.isUploading=false;this.uploadedFileInfo=null}handleClose=()=>{this.modalClosed.emit()};render(){if(!this.isOpen)return null;const e={zIndex:String(this.zIndex)};const t={"modal-container":true,fullscreen:this.fullscreen,"pc-layout":true};const i={"modal-overlay":true,"fullscreen-overlay":this.fullscreen};const n=this.conversationId&&!this.showChatModal;return o("div",{class:i,style:e},o("div",{class:t},this.isShowHeader&&o("div",{class:"modal-header"},o("div",{class:"header-left"},this.icon&&o("img",{src:this.icon,class:"header-icon",alt:"应用图标"}),o("div",null,this.modalTitle)),this.isNeedClose&&o("button",{class:"close-button",onClick:this.handleClose},o("span",null,"×"))),n&&o("div",{class:"loading-container"},o("div",{class:"loading-spinner"}),o("p",{class:"loading-text"},"正在加载对话...")),this.showChatModal&&o("div",null,this.enableVirtualHuman&&this.digitalId?o("pcm-virtual-chat-modal",{ref:e=>this.virtualChatModalRef=e,isOpen:true,fullscreen:this.fullscreen,botId:"137635156700770304",digitalId:this.digitalId,openingIndex:this.openingIndex,conversationId:this.conversationId,defaultQuery:this.defaultQuery,showEndInterviewButton:this.showEndInterviewButton,waitingTime:this.waitingTime,customInputs:{...this.customInputs,file_url:this.customInputs?.file_url||this.uploadedFileInfo?.cos_key,file_name:this.customInputs?.file_name||this.uploadedFileInfo?.file_name,job_info:this.customInputs?.job_info||this.jobDescription,interview_type:"1"}}):o("pcm-app-chat-modal",{isOpen:true,modalTitle:this.modalTitle,icon:this.icon,isShowHeader:this.isShowHeader,isNeedClose:this.isNeedClose,fullscreen:this.fullscreen,botId:"137635156700770304",digitalId:this.digitalId,showEndInterviewButton:this.showEndInterviewButton,conversationId:this.conversationId,defaultQuery:this.defaultQuery,maxRecordingTime:this.maxRecordingTime,waitingTime:this.waitingTime,customInputs:{...this.customInputs,file_url:this.uploadedFileInfo?.cos_key,file_name:this.uploadedFileInfo?.file_name},interviewMode:"video"}))))}static get watchers(){return{token:["handleTokenChange"],isOpen:["handleIsOpenChange"]}}};c.style=l+(d+p);export{c as pcm_ats_mnms_modal};
|
|
2
|
-
//# sourceMappingURL=p-142e0b95.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["pcmAtsMnmsModalCss","globalCss","hostCss","AtsMnmsModal","modalTitle","token","isOpen","modalClosed","icon","zIndex","isShowHeader","isNeedClose","conversationId","defaultQuery","maxRecordingTime","waitingTime","fullscreen","customInputs","digitalId","openingIndex","enableVirtualHuman","showEndInterviewButton","uploadSuccess","streamComplete","conversationStart","interviewComplete","tokenInvalid","someErrorEvent","recordingError","selectedFile","isUploading","uploadedFileInfo","showChatModal","jobDescription","isSubmitting","tokenInvalidListener","removeErrorListener","virtualChatModalRef","handleTokenChange","newToken","authStore","getToken","setToken","handleIsOpenChange","newValue","this","setComponentActive","resetState","verifyApiKey","componentWillLoad","configStore","setItem","emit","ErrorEventBus","addErrorListener","errorDetail","document","addEventListener","disconnectedCallback","removeEventListener","handleClose","render","modalStyle","String","containerClass","overlayClass","isLoading","h","class","style","src","alt","onClick","ref","el","botId","file_url","cos_key","file_name","job_info","interview_type","interviewMode"],"sources":["src/components/pcm-ats-mnms-modal/pcm-ats-mnms-modal.css?tag=pcm-ats-mnms-modal&encapsulation=shadow","src/global/global.css?tag=pcm-ats-mnms-modal&encapsulation=shadow","src/global/host.css?tag=pcm-ats-mnms-modal&encapsulation=shadow","src/components/pcm-ats-mnms-modal/pcm-ats-mnms-modal.tsx"],"sourcesContent":[null,"/* 模态框基础样式 */\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 z-index: 1000;\r\n overflow-y: auto;\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: auto;\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: 5vh auto auto 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 cursor: pointer;\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 text-align: center;\r\n white-space: normal;\r\n word-wrap: break-word;\r\n word-break: break-all;\r\n line-height: 1.4;\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 min-width: 30px;\r\n min-height: 30px;\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}\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}\r\n\r\n/* 面试设置区域 */\r\n.interview-settings-section {\r\n margin-bottom: 24px;\r\n padding: 20px;\r\n background-color: #f8f9fa;\r\n border-radius: 8px;\r\n border: 1px solid #e9ecef;\r\n}\r\n\r\n.settings-row {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.settings-row:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n.settings-label {\r\n display: block;\r\n font-weight: 500;\r\n color: #333;\r\n margin-bottom: 12px;\r\n font-size: 14px;\r\n}\r\n\r\n/* 题目数量滑块样式 */\r\n.question-number-section {\r\n width: 100%;\r\n}\r\n\r\n.slider-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.question-slider {\r\n flex: 1;\r\n height: 6px;\r\n background: #ddd;\r\n outline: none;\r\n border-radius: 3px;\r\n -webkit-appearance: none;\r\n appearance: none;\r\n}\r\n\r\n.question-slider::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.question-slider::-moz-range-thumb {\r\n width: 20px;\r\n height: 20px;\r\n background: #0D75FB;\r\n cursor: pointer;\r\n border-radius: 50%;\r\n border: none;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.slider-value {\r\n font-weight: 600;\r\n color: #0D75FB;\r\n font-size: 14px;\r\n min-width: 30px;\r\n text-align: center;\r\n}\r\n\r\n/* 开关样式 */\r\n.analysis-toggle-section {\r\n width: 100%;\r\n}\r\n\r\n.toggle-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n}\r\n\r\n.toggle-switch {\r\n position: relative;\r\n display: inline-block;\r\n width: 44px;\r\n height: 24px;\r\n}\r\n\r\n.toggle-switch input {\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\n.toggle-slider {\r\n position: absolute;\r\n cursor: pointer;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: #ccc;\r\n transition: 0.3s;\r\n border-radius: 24px;\r\n}\r\n\r\n.toggle-slider:before {\r\n position: absolute;\r\n content: \"\";\r\n height: 18px;\r\n width: 18px;\r\n left: 3px;\r\n bottom: 3px;\r\n background-color: white;\r\n transition: 0.3s;\r\n border-radius: 50%;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\ninput:checked + .toggle-slider {\r\n background-color: #0D75FB;\r\n}\r\n\r\ninput:checked + .toggle-slider:before {\r\n transform: translateX(20px);\r\n}\r\n\r\n.toggle-text {\r\n font-size: 14px;\r\n color: #666;\r\n font-weight: 500;\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/* 历史会话按钮 */\r\n.header-history-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: #bbb;\r\n cursor: pointer;\r\n font-size: 13px;\r\n font-family: inherit;\r\n line-height: 1;\r\n transition: all 0.2s ease;\r\n flex-shrink: 0;\r\n white-space: nowrap;\r\n}\r\n\r\n.header-history-button svg {\r\n width: 16px;\r\n height: 16px;\r\n display: block;\r\n flex-shrink: 0;\r\n}\r\n\r\n.header-history-button:hover {\r\n background-color: rgba(0, 0, 0, 0.04);\r\n color: #666;\r\n}\r\n\r\n.header-history-button:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* 历史会话抽屉内容 */\r\n.history-drawer-content {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.conversation-list {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 8px 0;\r\n}\r\n\r\n.loading-conversations,\r\n.empty-conversations {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 40px 20px;\r\n color: #999;\r\n}\r\n\r\n.loading-conversations .loading-spinner-small {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.conversation-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n margin: 0 8px 4px 8px;\r\n border-radius: 8px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n border: 1px solid transparent;\r\n}\r\n\r\n.conversation-item:hover {\r\n background: #f5f5f5;\r\n}\r\n\r\n.conversation-info {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.conversation-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n color: #262626;\r\n margin-bottom: 4px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.conversation-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n color: #8c8c8c;\r\n}\r\n\r\n.conversation-time {\r\n flex-shrink: 0;\r\n}\r\n\r\n.message-count {\r\n flex-shrink: 0;\r\n}\r\n\r\n.conversation-status {\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n font-size: 11px;\r\n font-weight: 500;\r\n}\r\n\r\n.conversation-status.completed {\r\n background: #f6ffed;\r\n color: #52c41a;\r\n}\r\n\r\n.conversation-status.running {\r\n background: #fff7e6;\r\n color: #fa8c16;\r\n}\r\n\r\n.header-history-entry {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 8px;\r\n padding: 4px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: #e6f7ff;\r\n color: #1890ff;\r\n cursor: pointer;\r\n font-size: 12px;\r\n font-family: inherit;\r\n line-height: 1;\r\n white-space: nowrap;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.header-history-entry:hover {\r\n background: #bae7ff;\r\n color: #0958d9;\r\n transform: translateY(-1px);\r\n}\r\n\r\n.header-history-entry:focus-visible {\r\n outline: 2px solid rgba(13, 117, 251, 0.35);\r\n outline-offset: 2px;\r\n}\r\n\r\n.history-pagination {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding: 12px 16px 16px;\r\n border-top: 1px solid #f0f0f0;\r\n}\r\n\r\n.history-pagination-button {\r\n min-width: 72px;\r\n padding: 6px 12px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 6px;\r\n background: #fff;\r\n color: #595959;\r\n cursor: pointer;\r\n font-size: 12px;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.history-pagination-button:hover:not(:disabled) {\r\n border-color: #1890ff;\r\n color: #1890ff;\r\n background: #e6f7ff;\r\n}\r\n\r\n.history-pagination-button:disabled {\r\n border-color: #f0f0f0;\r\n color: #bfbfbf;\r\n background: #fafafa;\r\n cursor: not-allowed;\r\n}\r\n\r\n.history-pagination-info {\r\n flex: 1;\r\n text-align: center;\r\n color: #8c8c8c;\r\n font-size: 12px;\r\n}\r\n \r\n",":host {\r\n /* 字体相关属性 */\r\n font-size: 16px;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n font-weight: normal;\r\n font-style: normal;\r\n font-variant: normal;\r\n line-height: 1.5;\r\n letter-spacing: normal;\r\n word-spacing: normal;\r\n \r\n /* 文本相关属性 */\r\n color: #333; /* 重置文字颜色,避免继承外部的red */\r\n text-align: left;\r\n text-indent: 0;\r\n text-transform: none;\r\n white-space: normal;\r\n word-wrap: normal;\r\n word-break: normal;\r\n \r\n /* 可见性 */\r\n visibility: visible;\r\n \r\n /* 列表相关 */\r\n list-style: none;\r\n list-style-image: none;\r\n list-style-position: outside;\r\n list-style-type: disc;\r\n \r\n /* 表格相关 */\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n caption-side: top;\r\n empty-cells: show;\r\n table-layout: auto;\r\n \r\n /* 引用 */\r\n quotes: auto;\r\n \r\n /* 光标 */\r\n cursor: auto;\r\n \r\n /* 文本方向 */\r\n direction: ltr;\r\n \r\n /* 打印相关 */\r\n orphans: 2;\r\n widows: 2;\r\n page-break-inside: auto;\r\n \r\n /* 其他可能被继承的属性 */\r\n text-decoration: none;\r\n text-shadow: none;\r\n \r\n /* 确保组件有独立的盒模型 */\r\n box-sizing: border-box;\r\n \r\n /* 重置一些可能影响布局的继承属性 */\r\n writing-mode: horizontal-tb;\r\n text-orientation: mixed;\r\n}","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-ats-mnms-modal',\r\n styleUrls: ['pcm-ats-mnms-modal.css', '../../global/global.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class AtsMnmsModal {\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 * 等待录制时间(秒)默认10\r\n */\r\n @Prop() waitingTime: number = 10;\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 * 虚拟数字人ID,指定则开启虚拟数字人功能\r\n */\r\n @Prop() digitalId?: string;\r\n\r\n /**\r\n * 数字人开场白索引,用于选择开场白和开场视频(可选:0, 1, 2)\r\n * 0、您好,我是聘才猫 AI 面试助手。很高兴为你主持这场面试!在开始前,请确保:身处安静、光线充足的环境。网络顺畅,摄像头和麦克风工作正常。现在我正在查看本次面试的相关信息,为您生成专属面试题,马上就好,请稍等片刻。</br>\r\n * 1、您好,我是您的 AI 面试助手。欢迎参加本次AI面试!为了获得最佳效果,请确认:您在安静、明亮的环境中。您的网络稳定,摄像头和麦克风已开启。我们正在后台为您准备本次专属面试内容,很快开始,请稍候。<br>\r\n * 2、您好,我是您的 AI 面试助手。面试马上开始。趁此片刻,请快速确认:周围安静吗?光线足够吗?网络没问题?摄像头和麦克风准备好了吗?我们正在为您加载个性化的面试环节,稍等就好!\r\n */\r\n @Prop() openingIndex: number = 0;\r\n\r\n /**\r\n * 是否启用全屏虚拟数字人模式,此模式下面试结果只会通过interviewComplete事件返回或者通过url_callback回调返回\r\n */\r\n @Prop() enableVirtualHuman: boolean = false;\r\n\r\n /**\r\n * 是否显示结束面试按钮\r\n */\r\n @Prop() showEndInterviewButton: 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() 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 // 添加对子组件的引用\r\n private virtualChatModalRef: HTMLPcmVirtualChatModalElement | 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\r\n @Watch('isOpen')\r\n async handleIsOpenChange(newValue: boolean) {\r\n if (!newValue) {\r\n // 当模态框关闭时,调用子组件方法停止所有活动\r\n if (this.virtualChatModalRef) {\r\n await this.virtualChatModalRef.setComponentActive(false);\r\n }\r\n // 重置状态\r\n this.resetState();\r\n } else {\r\n await verifyApiKey(this.token);\r\n this.showChatModal = true;\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 /**\r\n * 重置组件状态\r\n */\r\n private resetState() {\r\n this.showChatModal = false;\r\n this.jobDescription = '';\r\n this.isSubmitting = false;\r\n this.selectedFile = null;\r\n this.isUploading = false;\r\n this.uploadedFileInfo = null;\r\n }\r\n\r\n private handleClose = () => {\r\n this.modalClosed.emit();\r\n };\r\n\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 {this.enableVirtualHuman && this.digitalId ? (\r\n <pcm-virtual-chat-modal\r\n ref={el => this.virtualChatModalRef = el}\r\n isOpen={true}\r\n fullscreen={this.fullscreen}\r\n botId=\"137635156700770304\"\r\n digitalId={this.digitalId}\r\n openingIndex={this.openingIndex}\r\n conversationId={this.conversationId}\r\n defaultQuery={this.defaultQuery}\r\n showEndInterviewButton={this.showEndInterviewButton}\r\n waitingTime={this.waitingTime}\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 job_info: this.customInputs?.job_info || this.jobDescription,\r\n interview_type: \"1\"\r\n }}\r\n ></pcm-virtual-chat-modal>\r\n ) : (\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 fullscreen={this.fullscreen}\r\n botId=\"137635156700770304\"\r\n digitalId={this.digitalId}\r\n showEndInterviewButton={this.showEndInterviewButton}\r\n conversationId={this.conversationId}\r\n defaultQuery={this.defaultQuery}\r\n maxRecordingTime={this.maxRecordingTime}\r\n waitingTime={this.waitingTime}\r\n customInputs={{\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 )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n} "],"mappings":"+IAAA,MAAMA,EAAqB,GCA3B,MAAMC,EAAY,ysSCAlB,MAAMC,EAAU,4wB,MCqBHC,EAAY,M,iYAIbC,WAAqB,OAKCC,MAKLC,OAAkB,MAKlCC,YAKDC,KAKAC,OAAkB,IAKlBC,aAAwB,KAKxBC,YAAuB,KAKNC,eAKjBC,aAAuB,UAKvBC,iBAA2B,IAK3BC,YAAsB,GAKtBC,WAAsB,MAKtBC,aAAuC,GAKvCC,UAQAC,aAAuB,EAKvBC,mBAA8B,MAK9BC,uBAAkC,MAKjCC,cAKAC,eAKAC,kBAKAC,kBAKAC,aAKAC,eAKAC,eAEAC,aAA4B,KAC5BC,YAAuB,MACvBC,iBAA8C,KAC9CC,cAAyB,M,iCAKzBC,eAAyB,GACzBC,aAAwB,MAEzBC,qBACAC,oBAGAC,oBAA6D,KAGrE,iBAAAC,CAAkBC,GAEd,GAAIA,GAAYA,IAAaC,EAAUC,WAAY,CAC/CD,EAAUE,SAASH,E,EAM3B,wBAAMI,CAAmBC,GACrB,IAAKA,EAAU,CAEX,GAAIC,KAAKR,oBAAqB,OACpBQ,KAAKR,oBAAoBS,mBAAmB,M,CAGtDD,KAAKE,Y,KACF,OACGC,EAAaH,KAAKxC,OACxBwC,KAAKb,cAAgB,I,EAI7B,iBAAAiB,GAGI,GAAIJ,KAAKpC,OAAQ,CACbyC,EAAYC,QAAQ,eAAgBN,KAAKpC,O,CAG7C,GAAIoC,KAAKxC,MAAO,CACZmC,EAAUE,SAASG,KAAKxC,M,CAI5BwC,KAAKV,qBAAuB,KACxBU,KAAKnB,aAAa0B,MAAM,EAG5BP,KAAKT,oBAAsBiB,EAAcC,kBAAkBC,IACvDV,KAAKlB,eAAeyB,KAAKG,EAAY,IAEzCC,SAASC,iBAAiB,oBAAqBZ,KAAKV,qB,CAGxD,oBAAAuB,GAEIF,SAASG,oBAAoB,oBAAqBd,KAAKV,sBAEvD,GAAIU,KAAKT,oBAAqB,CAC1BS,KAAKT,qB,EAOL,UAAAW,GACJF,KAAKb,cAAgB,MACrBa,KAAKZ,eAAiB,GACtBY,KAAKX,aAAe,MACpBW,KAAKhB,aAAe,KACpBgB,KAAKf,YAAc,MACnBe,KAAKd,iBAAmB,I,CAGpB6B,YAAc,KAClBf,KAAKtC,YAAY6C,MAAM,EAO3B,MAAAS,GACI,IAAKhB,KAAKvC,OAAQ,OAAO,KAEzB,MAAMwD,EAAa,CACfrD,OAAQsD,OAAOlB,KAAKpC,SAGxB,MAAMuD,EAAiB,CACnB,kBAAmB,KACnBhD,WAAc6B,KAAK7B,WACnB,YAAa,MAGjB,MAAMiD,EAAe,CACjB,gBAAiB,KACjB,qBAAsBpB,KAAK7B,YAI/B,MAAMkD,EAAYrB,KAAKjC,iBAAmBiC,KAAKb,cAG/C,OACImC,EAAA,OAAKC,MAAOH,EAAcI,MAAOP,GAC7BK,EAAK,OAAAC,MAAOJ,GACPnB,KAAKnC,cACFyD,EAAK,OAAAC,MAAM,gBACPD,EAAK,OAAAC,MAAM,eACNvB,KAAKrC,MAAQ2D,EAAK,OAAAG,IAAKzB,KAAKrC,KAAM4D,MAAM,cAAcG,IAAI,SAC3DJ,EAAA,WAAMtB,KAAKzC,aAEdyC,KAAKlC,aACFwD,EAAQ,UAAAC,MAAM,eAAeI,QAAS3B,KAAKe,aACvCO,EAAc,mBAO7BD,GACGC,EAAK,OAAAC,MAAM,qBACPD,EAAK,OAAAC,MAAM,oBACXD,EAAA,KAAGC,MAAM,gBAAc,cAK9BvB,KAAKb,eACFmC,EAAA,WACKtB,KAAKzB,oBAAsByB,KAAK3B,UAC7BiD,EAAA,0BACIM,IAAKC,GAAM7B,KAAKR,oBAAsBqC,EACtCpE,OAAQ,KACRU,WAAY6B,KAAK7B,WACjB2D,MAAM,qBACNzD,UAAW2B,KAAK3B,UAChBC,aAAc0B,KAAK1B,aACnBP,eAAgBiC,KAAKjC,eACrBC,aAAcgC,KAAKhC,aACnBQ,uBAAwBwB,KAAKxB,uBAC7BN,YAAa8B,KAAK9B,YAClBE,aAAc,IACP4B,KAAK5B,aACR2D,SAAU/B,KAAK5B,cAAc2D,UAAY/B,KAAKd,kBAAkB8C,QAChEC,UAAWjC,KAAK5B,cAAc6D,WAAajC,KAAKd,kBAAkB+C,UAClEC,SAAUlC,KAAK5B,cAAc8D,UAAYlC,KAAKZ,eAC9C+C,eAAgB,OAIxBb,EAAA,sBACI7D,OAAQ,KACRF,WAAYyC,KAAKzC,WACjBI,KAAMqC,KAAKrC,KACXE,aAAcmC,KAAKnC,aACnBC,YAAakC,KAAKlC,YAClBK,WAAY6B,KAAK7B,WACjB2D,MAAM,qBACNzD,UAAW2B,KAAK3B,UAChBG,uBAAwBwB,KAAKxB,uBAC7BT,eAAgBiC,KAAKjC,eACrBC,aAAcgC,KAAKhC,aACnBC,iBAAkB+B,KAAK/B,iBACvBC,YAAa8B,KAAK9B,YAClBE,aAAc,IACP4B,KAAK5B,aACR2D,SAAU/B,KAAKd,kBAAkB8C,QACjCC,UAAWjC,KAAKd,kBAAkB+C,WAEtCG,cAAc,Y","ignoreList":[]}
|