pcm-agents 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components-chat-message_33.cjs.entry.js +5 -5
- package/dist/cjs/components-oem-virtual-chat-modal.cjs.entry.js +1 -1
- package/dist/cjs/{conversation-utils-Ut-DjZGS.js → conversation-utils-BTK7DAnU.js} +3 -3
- package/dist/cjs/{conversation-utils-Ut-DjZGS.js.map → conversation-utils-BTK7DAnU.js.map} +1 -1
- package/dist/cjs/{index-BJXw-mBt.js → index-dOB1Ub7w.js} +3 -3
- package/dist/cjs/{index-BJXw-mBt.js.map → index-dOB1Ub7w.js.map} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/oem-htws-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-jd-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-jlpp-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-jlzz-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-mnct-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-mnms-modal.cjs.entry.js +1 -1
- package/dist/cjs/oem-qgqjl-modal.cjs.entry.js +2 -2
- package/dist/cjs/pcm-hr-chat-modal.cjs.entry.js +1 -1
- package/dist/cjs/pcm-jlsx-modal.cjs.entry.js +1 -1
- package/dist/collection/components/components-chat-message/components-chat-message.js +3 -2
- package/dist/collection/components/components-chat-message/components-chat-message.js.map +1 -1
- package/dist/components/components-chat-message.js +1 -1
- package/dist/components/components-digital-human.js +1 -1
- package/dist/components/components-export-records-modal.js +1 -1
- package/dist/components/components-mobile-input-btn.js +1 -1
- package/dist/components/components-mobile-upload-btn.js +1 -1
- package/dist/components/components-oem-virtual-chat-modal.js +1 -1
- package/dist/components/components-position-selector.js +1 -1
- package/dist/components/components-thousand-resume-wrapper.js +1 -1
- package/dist/components/components-upload.js +1 -1
- package/dist/components/components-voice-input-btn.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/oem-htws-modal.js +5 -5
- package/dist/components/oem-jd-modal.js +5 -5
- package/dist/components/oem-jlpp-modal.js +7 -7
- package/dist/components/oem-jlsx-modal.js +5 -5
- package/dist/components/oem-jlzz-modal.js +5 -5
- package/dist/components/oem-mnct-modal.js +7 -7
- package/dist/components/oem-mnms-modal.js +8 -8
- package/dist/components/oem-qgqjl-modal.js +9 -9
- package/dist/components/oem-zygh-modal.js +5 -5
- package/dist/components/{p-DUzMuUXg.js → p-BFRi3q0W.js} +3 -3
- package/dist/components/{p-DUzMuUXg.js.map → p-BFRi3q0W.js.map} +1 -1
- package/dist/components/{p-CzFTb8J3.js → p-BM3Uw2oP.js} +3 -3
- package/dist/components/{p-CzFTb8J3.js.map → p-BM3Uw2oP.js.map} +1 -1
- package/dist/components/{p-Co9TJcgO.js → p-BSePHX12.js} +3 -3
- package/dist/components/{p-Co9TJcgO.js.map → p-BSePHX12.js.map} +1 -1
- package/dist/components/{p-JbxUsVe3.js → p-BcfnFx-r.js} +3 -3
- package/dist/components/{p-JbxUsVe3.js.map → p-BcfnFx-r.js.map} +1 -1
- package/dist/components/{p-PVcS8Z81.js → p-BmdNpdnF.js} +3 -3
- package/dist/components/{p-PVcS8Z81.js.map → p-BmdNpdnF.js.map} +1 -1
- package/dist/components/{p-A7OBthUL.js → p-CHYVHkii.js} +4 -4
- package/dist/components/{p-A7OBthUL.js.map → p-CHYVHkii.js.map} +1 -1
- package/dist/components/{p-DMcvouAq.js → p-CJP8puRZ.js} +5 -5
- package/dist/components/{p-DMcvouAq.js.map → p-CJP8puRZ.js.map} +1 -1
- package/dist/components/{p-cML-tdcc.js → p-DIODYCBp.js} +6 -5
- package/dist/components/p-DIODYCBp.js.map +1 -0
- package/dist/components/{p-DjY3Uc0V.js → p-DMgFwD2E.js} +3 -3
- package/dist/components/{p-DjY3Uc0V.js.map → p-DMgFwD2E.js.map} +1 -1
- package/dist/components/{p-D1Zbs1E9.js → p-DZZVv7rD.js} +3 -3
- package/dist/components/{p-D1Zbs1E9.js.map → p-DZZVv7rD.js.map} +1 -1
- package/dist/components/{p-5bswLwh6.js → p-N4zIHizC.js} +3 -3
- package/dist/components/{p-5bswLwh6.js.map → p-N4zIHizC.js.map} +1 -1
- package/dist/components/{p-BV5z8A4a.js → p-bN8cV-6p.js} +3 -3
- package/dist/components/{p-BV5z8A4a.js.map → p-bN8cV-6p.js.map} +1 -1
- package/dist/components/{p-DoiGRCSv.js → p-e6CMjPaS.js} +3 -3
- package/dist/components/{p-DoiGRCSv.js.map → p-e6CMjPaS.js.map} +1 -1
- package/dist/components/{p-D1MNPWYG.js → p-eCq8pG8p.js} +3 -3
- package/dist/components/{p-D1MNPWYG.js.map → p-eCq8pG8p.js.map} +1 -1
- package/dist/components/pcm-1zhanshi-mnms-modal.js +5 -5
- package/dist/components/pcm-app-chat-modal.js +1 -1
- package/dist/components/pcm-ats-mnms-modal.js +5 -5
- package/dist/components/pcm-card.js +1 -1
- package/dist/components/pcm-hr-chat-modal.js +2 -2
- package/dist/components/pcm-htws-modal.js +8 -8
- package/dist/components/pcm-hyzj-modal.js +5 -5
- package/dist/components/pcm-jd-modal.js +6 -6
- package/dist/components/pcm-jlpp-modal.js +8 -8
- package/dist/components/pcm-jlsx-modal.js +5 -5
- package/dist/components/pcm-jlzz-modal.js +6 -6
- package/dist/components/pcm-mnct-modal.js +7 -7
- package/dist/components/pcm-mnms-modal.js +8 -8
- package/dist/components/pcm-mnms-zp-modal.js +8 -8
- package/dist/components/pcm-msbg-modal.js +5 -5
- package/dist/components/pcm-qgqjl-modal.js +9 -9
- package/dist/components/pcm-virtual-chat-modal.js +1 -1
- package/dist/components/pcm-zsk-chat-modal.js +2 -2
- package/dist/components/pcm-zygh-modal.js +7 -7
- package/dist/components/pcm-zygh-v2-modal.js +7 -7
- package/dist/esm/components-chat-message_33.entry.js +5 -5
- package/dist/esm/components-oem-virtual-chat-modal.entry.js +1 -1
- package/dist/esm/{conversation-utils-DhbVyrpx.js → conversation-utils-Bxa39xP4.js} +3 -3
- package/dist/esm/{conversation-utils-DhbVyrpx.js.map → conversation-utils-Bxa39xP4.js.map} +1 -1
- package/dist/esm/{index-D8Ey1n8b.js → index-DW5FTRQw.js} +3 -3
- package/dist/esm/{index-D8Ey1n8b.js.map → index-DW5FTRQw.js.map} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/oem-htws-modal.entry.js +1 -1
- package/dist/esm/oem-jd-modal.entry.js +1 -1
- package/dist/esm/oem-jlpp-modal.entry.js +1 -1
- package/dist/esm/oem-jlzz-modal.entry.js +1 -1
- package/dist/esm/oem-mnct-modal.entry.js +1 -1
- package/dist/esm/oem-mnms-modal.entry.js +1 -1
- package/dist/esm/oem-qgqjl-modal.entry.js +2 -2
- package/dist/esm/pcm-hr-chat-modal.entry.js +1 -1
- package/dist/esm/pcm-jlsx-modal.entry.js +1 -1
- package/dist/pcm-agents/index.esm.js +1 -1
- package/dist/pcm-agents/p-2ad0a639.entry.js +8 -0
- package/dist/pcm-agents/{p-11426012.entry.js.map → p-2ad0a639.entry.js.map} +1 -1
- package/dist/pcm-agents/{p-66cb43c9.entry.js → p-3c4c7332.entry.js} +2 -2
- package/dist/pcm-agents/{p-f92d70a8.entry.js → p-41adab36.entry.js} +2 -2
- package/dist/pcm-agents/{p-030c829e.entry.js → p-49f7746b.entry.js} +2 -2
- package/dist/pcm-agents/{p-b3ff7816.entry.js → p-4b452f16.entry.js} +2 -2
- package/dist/pcm-agents/{p-75efc351.entry.js → p-586a52b1.entry.js} +2 -2
- package/dist/pcm-agents/{p-CXe7oxeN.js → p-CXfG5cJs.js} +2 -2
- package/dist/pcm-agents/{p-CXe7oxeN.js.map → p-CXfG5cJs.js.map} +1 -1
- package/dist/pcm-agents/{p-B3osOuvR.js → p-D9uI2bAc.js} +2 -2
- package/dist/pcm-agents/{p-B3osOuvR.js.map → p-D9uI2bAc.js.map} +1 -1
- package/dist/pcm-agents/{p-1fdb05d7.entry.js → p-a269af7b.entry.js} +2 -2
- package/dist/pcm-agents/{p-b071ed75.entry.js → p-b127df53.entry.js} +2 -2
- package/dist/pcm-agents/{p-646b6128.entry.js → p-d6ac43b7.entry.js} +2 -2
- package/dist/pcm-agents/{p-c2c3e968.entry.js → p-e41f71b7.entry.js} +2 -2
- package/dist/pcm-agents/{p-4732c615.entry.js → p-f083cc3e.entry.js} +2 -2
- package/dist/pcm-agents/pcm-agents.esm.js +1 -1
- package/package.json +1 -1
- package/dist/components/p-cML-tdcc.js.map +0 -1
- package/dist/pcm-agents/p-11426012.entry.js +0 -8
- /package/dist/pcm-agents/{p-66cb43c9.entry.js.map → p-3c4c7332.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-f92d70a8.entry.js.map → p-41adab36.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-030c829e.entry.js.map → p-49f7746b.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-b3ff7816.entry.js.map → p-4b452f16.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-75efc351.entry.js.map → p-586a52b1.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-1fdb05d7.entry.js.map → p-a269af7b.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-b071ed75.entry.js.map → p-b127df53.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-646b6128.entry.js.map → p-d6ac43b7.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-c2c3e968.entry.js.map → p-e41f71b7.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-4732c615.entry.js.map → p-f083cc3e.entry.js.map} +0 -0
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var index$1 = require('./index-C_qhED9Z.js');
|
|
4
4
|
var index = require('./index-D5RimYc5.js');
|
|
5
|
-
var index$2 = require('./index-
|
|
5
|
+
var index$2 = require('./index-dOB1Ub7w.js');
|
|
6
6
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
7
7
|
var sentryReporter = require('./sentry-reporter-uulX7WVC.js');
|
|
8
|
-
var config_store = require('./config.store-BIjicJY9.js');
|
|
9
8
|
var message_service = require('./message.service-BLgUOl2N.js');
|
|
9
|
+
var config_store = require('./config.store-BIjicJY9.js');
|
|
10
10
|
var messageUtils = require('./message-utils-C8eJnzLy.js');
|
|
11
|
-
var conversationUtils = require('./conversation-utils-
|
|
11
|
+
var conversationUtils = require('./conversation-utils-BTK7DAnU.js');
|
|
12
12
|
require('./exports-Dc-pQh4A.js');
|
|
13
13
|
|
|
14
14
|
var clipboard$1 = {exports: {}};
|
|
@@ -1109,7 +1109,7 @@ const ComponentsChatMessage = class {
|
|
|
1109
1109
|
});
|
|
1110
1110
|
// 成功回调
|
|
1111
1111
|
this.clipboard.on('success', (e) => {
|
|
1112
|
-
|
|
1112
|
+
message_service.Message.success(this.strings.copySuccess);
|
|
1113
1113
|
e.clearSelection();
|
|
1114
1114
|
});
|
|
1115
1115
|
// 失败回调
|
|
@@ -1429,7 +1429,7 @@ const ComponentsChatMessage = class {
|
|
|
1429
1429
|
}
|
|
1430
1430
|
}
|
|
1431
1431
|
render() {
|
|
1432
|
-
return (index$1.h("div", { key: '
|
|
1432
|
+
return (index$1.h("div", { key: 'c992493bf85531cb9dc3887a86454ea5c562f1b6', class: "message-round" }, this.renderUserMessage(), this.renderAssistantMessage()));
|
|
1433
1433
|
}
|
|
1434
1434
|
};
|
|
1435
1435
|
ComponentsChatMessage.style = markdownCss$2 + (componentsChatMessageCss + hostCss$t);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var messageUtils = require('./message-utils-C8eJnzLy.js');
|
|
6
6
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
7
7
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-dOB1Ub7w.js');
|
|
4
4
|
var sentryReporter = require('./sentry-reporter-uulX7WVC.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
|
|
@@ -102,6 +102,6 @@ async function fetchHistoryConversations(botId, componentName, lastId = '', limi
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
exports.fetchHistoryConversations = fetchHistoryConversations;
|
|
105
|
-
//# sourceMappingURL=conversation-utils-
|
|
105
|
+
//# sourceMappingURL=conversation-utils-BTK7DAnU.js.map
|
|
106
106
|
|
|
107
|
-
//# sourceMappingURL=conversation-utils-
|
|
107
|
+
//# sourceMappingURL=conversation-utils-BTK7DAnU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-utils-
|
|
1
|
+
{"version":3,"file":"conversation-utils-BTK7DAnU.js","sources":["src/utils/conversation-utils.ts"],"sourcesContent":["import { sendHttpRequest } from './utils';\r\nimport { SentryReporter } from './sentry-reporter';\r\nimport { ErrorEventBus } from './error-event';\r\nimport { ConversationItem, ConversationPageResult, ConversationDetail } from '../interfaces/chat';\r\n\r\ninterface ConversationApiItem {\r\n id: string;\r\n name?: string;\r\n created_at: number | string;\r\n updated_at: number | string;\r\n status?: string;\r\n message_count?: number;\r\n inputs?: any;\r\n}\r\n\r\ninterface ConversationApiData {\r\n data?: ConversationApiItem[];\r\n items?: ConversationApiItem[];\r\n has_more?: boolean;\r\n}\r\n\r\n/**\r\n * 格式化会话时间戳为可读字符串\r\n */\r\nfunction formatConversationTime(createdAt: number | string): string {\r\n try {\r\n const timestamp = typeof createdAt === 'string' ? parseInt(createdAt, 10) : createdAt;\r\n if (isNaN(timestamp) || timestamp <= 0) {\r\n return '未知时间';\r\n }\r\n\r\n const createdTime = new Date(timestamp * 1000);\r\n if (isNaN(createdTime.getTime())) {\r\n return '未知时间';\r\n }\r\n\r\n const now = new Date();\r\n const diffDays = Math.floor((now.getTime() - createdTime.getTime()) / (1000 * 60 * 60 * 24));\r\n const hh = createdTime.getHours().toString().padStart(2, '0');\r\n const mm = createdTime.getMinutes().toString().padStart(2, '0');\r\n const month = (createdTime.getMonth() + 1).toString().padStart(2, '0');\r\n const day = createdTime.getDate().toString().padStart(2, '0');\r\n\r\n if (diffDays === 0) {\r\n return `今天 ${hh}:${mm}`;\r\n }\r\n\r\n if (diffDays === 1) {\r\n return `昨天 ${hh}:${mm}`;\r\n }\r\n\r\n if (diffDays > 1 && diffDays < 7) {\r\n const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];\r\n return `${weekdays[createdTime.getDay()]} ${hh}:${mm}`;\r\n }\r\n\r\n return `${month}-${day} ${hh}:${mm}`;\r\n } catch {\r\n return '时间解析失败';\r\n }\r\n}\r\n\r\n/**\r\n * 获取历史会话列表\r\n * @param botId 机器人 ID\r\n * @param componentName 调用组件名称\r\n * @param lastId 上一页最后一条会话 ID,空字符串表示第一页\r\n * @param limit 每页数量\r\n * @returns 游标分页结果\r\n */\r\nexport async function fetchHistoryConversations(\r\n botId: string,\r\n componentName: string,\r\n lastId: string = '',\r\n limit: number = 20,\r\n): Promise<ConversationPageResult> {\r\n try {\r\n const result = await sendHttpRequest<ConversationApiData>({\r\n url: '/sdk/v1/chat/conversations',\r\n method: 'GET',\r\n data: {\r\n bot_id: botId,\r\n last_id: lastId,\r\n limit,\r\n },\r\n });\r\n\r\n if (result.success && result.data) {\r\n const rawConversations: ConversationApiItem[] = result.data.data || result.data.items || [];\r\n const hasMore = typeof result.data.has_more === 'boolean'\r\n ? result.data.has_more\r\n : rawConversations.length > limit;\r\n const conversations: ConversationItem[] = rawConversations.slice(0, limit).map((conv: ConversationApiItem) => ({\r\n id: conv.id,\r\n name: conv.name || '新会话',\r\n created_at: Number(conv.created_at),\r\n updated_at: Number(conv.updated_at),\r\n status: conv.status,\r\n message_count: conv.message_count || 0,\r\n timeDisplay: formatConversationTime(conv.created_at),\r\n inputs: conv.inputs,\r\n }));\r\n\r\n return {\r\n items: conversations,\r\n hasMore,\r\n nextCursor: conversations.length > 0 ? conversations[conversations.length - 1].id : '',\r\n };\r\n }\r\n\r\n return {\r\n items: [],\r\n hasMore: false,\r\n nextCursor: '',\r\n };\r\n } catch (error) {\r\n console.error('获取历史会话失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'fetchHistoryConversations',\r\n component: componentName,\r\n title: '获取历史会话失败',\r\n });\r\n ErrorEventBus.emitError({ error, message: '获取历史会话失败' });\r\n\r\n return {\r\n items: [],\r\n hasMore: false,\r\n nextCursor: '',\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 获取单个会话详情\r\n * @param conversationId 会话 ID\r\n * @param componentName 调用组件名称\r\n * @returns 会话详情\r\n */\r\nexport async function fetchConversationDetail(\r\n conversationId: string,\r\n componentName: string,\r\n): Promise<ConversationDetail | null> {\r\n try {\r\n const result = await sendHttpRequest<{ data: ConversationDetail }>({\r\n url: '/sdk/v1/chat/conversation',\r\n method: 'GET',\r\n data: {\r\n conversation_id: conversationId,\r\n },\r\n });\r\n\r\n if (result.success && result.data?.data) {\r\n return result.data.data;\r\n }\r\n\r\n return null;\r\n } catch (error) {\r\n console.error('获取会话详情失败:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'fetchConversationDetail',\r\n component: componentName,\r\n title: '获取会话详情失败',\r\n });\r\n ErrorEventBus.emitError({ error, message: '获取会话详情失败' });\r\n\r\n return null;\r\n }\r\n}\r\n"],"names":["sendHttpRequest","SentryReporter","ErrorEventBus"],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ onChange('token', value => {
|
|
|
33
33
|
}
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
const version = "1.0.
|
|
36
|
+
const version = "1.0.9";
|
|
37
37
|
|
|
38
38
|
// 导入环境变量
|
|
39
39
|
function format(first, middle, last) {
|
|
@@ -752,6 +752,6 @@ exports.uploadFileByUrl = uploadFileByUrl;
|
|
|
752
752
|
exports.uploadFileToBackend = uploadFileToBackend;
|
|
753
753
|
exports.verifyApiKey = verifyApiKey;
|
|
754
754
|
exports.verifySmsCode = verifySmsCode;
|
|
755
|
-
//# sourceMappingURL=index-
|
|
755
|
+
//# sourceMappingURL=index-dOB1Ub7w.js.map
|
|
756
756
|
|
|
757
|
-
//# sourceMappingURL=index-
|
|
757
|
+
//# sourceMappingURL=index-dOB1Ub7w.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-dOB1Ub7w.js","sources":["src/utils/env.ts","store/auth.store.ts"],"sourcesContent":["// 默认 API 域名\r\nconst DEFAULT_API_DOMAIN = 'https://api.pincaimao.com/agents/platform';\r\nconst DEFAULT_PCM_DOMAIN = 'https://www.pincaimao.com';\r\n\r\n\r\n// 从环境变量获取 API 域名,如果未设置则使用默认值\r\nexport const API_DOMAIN = process.env.API_DOMAIN || DEFAULT_API_DOMAIN;\r\nexport const PCM_DOMAIN = process.env.PCM_DOMAIN || DEFAULT_PCM_DOMAIN;\r\n\r\n// 导出其他环境变量\r\nexport const ENV = {\r\n API_DOMAIN,\r\n PCM_DOMAIN,\r\n // 可以添加其他环境变量\r\n}; ","// src/store/auth.store.ts\r\nimport { createStore } from '@stencil/store';\r\n\r\nexport const { state: authState, onChange } = createStore({\r\n token: localStorage.getItem('pcm-sdk-auth-token') || null\r\n});\r\n\r\n// 添加一些辅助方法\r\nexport const authStore = {\r\n getToken: () => authState.token,\r\n setToken: (token: string) => {\r\n authState.token = token;\r\n localStorage.setItem('pcm-sdk-auth-token', token);\r\n },\r\n clearToken: () => {\r\n authState.token = null;\r\n localStorage.removeItem('pcm-sdk-auth-token');\r\n }\r\n};\r\n\r\n// 自动保存到localStorage\r\nonChange('token', value => {\r\n if (value) {\r\n localStorage.setItem('pcm-sdk-auth-token', value);\r\n } else {\r\n localStorage.removeItem('pcm-sdk-auth-token');\r\n }\r\n});"],"names":["createStore"],"mappings":";;;;AAAA;AAKA;AACO,MAAM,UAAU,GAAG,2CAA4C;AACzD,MAAA,UAAU,GAAG;;ACP1B;AAGO,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAGA,wBAAW,CAAC;IACxD,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI;AACtD,CAAA,CAAC;AAEF;AACa,MAAA,SAAS,GAAG;AACvB,IAAA,QAAQ,EAAE,MAAM,SAAS,CAAC,KAAK;AAC/B,IAAA,QAAQ,EAAE,CAAC,KAAa,KAAI;AAC1B,QAAA,SAAS,CAAC,KAAK,GAAG,KAAK;AACvB,QAAA,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC;KAClD;IACD,UAAU,EAAE,MAAK;AACf,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,UAAU,CAAC,oBAAoB,CAAC;;;AAIjD;AACA,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAG;IACxB,IAAI,KAAK,EAAE;AACT,QAAA,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC;;SAC5C;AACL,QAAA,YAAY,CAAC,UAAU,CAAC,oBAAoB,CAAC;;AAEjD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var message_service = require('./message.service-BLgUOl2N.js');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var sentryReporter = require('./sentry-reporter-uulX7WVC.js');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var message_service = require('./message.service-BLgUOl2N.js');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var message_service = require('./message.service-BLgUOl2N.js');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var message_service = require('./message.service-BLgUOl2N.js');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var message_service = require('./message.service-BLgUOl2N.js');
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var message_service = require('./message.service-BLgUOl2N.js');
|
|
8
|
-
var conversationUtils = require('./conversation-utils-
|
|
8
|
+
var conversationUtils = require('./conversation-utils-BTK7DAnU.js');
|
|
9
9
|
require('./sentry-reporter-uulX7WVC.js');
|
|
10
10
|
require('./exports-Dc-pQh4A.js');
|
|
11
11
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$1 = require('./index-
|
|
4
|
+
var index$1 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
6
6
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
7
7
|
var sentryReporter = require('./sentry-reporter-uulX7WVC.js');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-C_qhED9Z.js');
|
|
4
|
-
var index$2 = require('./index-
|
|
4
|
+
var index$2 = require('./index-dOB1Ub7w.js');
|
|
5
5
|
var messageUtils = require('./message-utils-C8eJnzLy.js');
|
|
6
6
|
var errorEvent = require('./error-event-J_ZWIqWF.js');
|
|
7
7
|
var config_store = require('./config.store-BIjicJY9.js');
|
|
@@ -5,6 +5,7 @@ import ClipboardJS from "clipboard";
|
|
|
5
5
|
import { sendHttpRequest, getCosPresignedUrl, getCosPreviewUrl } from "../../utils/utils";
|
|
6
6
|
import { ErrorEventBus } from "../../utils/error-event";
|
|
7
7
|
import { SentryReporter } from "../../utils/sentry-reporter";
|
|
8
|
+
import { Message } from "../../services/message.service";
|
|
8
9
|
import stringsZh from "./components-chat-message.i18n.zh.json";
|
|
9
10
|
import stringsEn from "./components-chat-message.i18n.en.json";
|
|
10
11
|
export class ComponentsChatMessage {
|
|
@@ -135,7 +136,7 @@ export class ComponentsChatMessage {
|
|
|
135
136
|
});
|
|
136
137
|
// 成功回调
|
|
137
138
|
this.clipboard.on('success', (e) => {
|
|
138
|
-
|
|
139
|
+
Message.success(this.strings.copySuccess);
|
|
139
140
|
e.clearSelection();
|
|
140
141
|
});
|
|
141
142
|
// 失败回调
|
|
@@ -455,7 +456,7 @@ export class ComponentsChatMessage {
|
|
|
455
456
|
}
|
|
456
457
|
}
|
|
457
458
|
render() {
|
|
458
|
-
return (h("div", { key: '
|
|
459
|
+
return (h("div", { key: 'c992493bf85531cb9dc3887a86454ea5c562f1b6', class: "message-round" }, this.renderUserMessage(), this.renderAssistantMessage()));
|
|
459
460
|
}
|
|
460
461
|
static get is() { return "components-chat-message"; }
|
|
461
462
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components-chat-message.js","sourceRoot":"","sources":["../../../../src/components/components-chat-message/components-chat-message.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, Element, Event, EventEmitter, State } from '@stencil/core';\r\nimport { marked } from 'marked';\r\nimport extendedTables from 'marked-extended-tables';\r\nimport ClipboardJS from 'clipboard';\r\nimport { ChatMessage } from '../../interfaces/chat';\r\nimport { sendHttpRequest, getCosPresignedUrl, getCosPreviewUrl } from '../../utils/utils';\r\nimport { ErrorEventBus } from '../../utils/error-event';\r\nimport { SentryReporter } from '../../utils/sentry-reporter';\r\nimport stringsZh from './components-chat-message.i18n.zh.json';\r\nimport stringsEn from './components-chat-message.i18n.en.json';\r\n\r\n@Component({\r\n tag: 'components-chat-message',\r\n styleUrls: ['../../global/markdown.css', 'components-chat-message.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class ComponentsChatMessage {\r\n /**\r\n * 消息数据\r\n */\r\n @Prop() message: ChatMessage;\r\n\r\n /**\r\n * 是否显示点赞点踩按钮 \r\n */\r\n @Prop() showFeedbackButtons: boolean = true;\r\n\r\n /**\r\n * 机器人ID\r\n */\r\n @Prop() botId?: string;\r\n\r\n /**\r\n * 语言设置\r\n */\r\n @Prop() locale?: string;\r\n\r\n\r\n // 使用 @Element 装饰器获取组件的 host 元素\r\n @Element() hostElement: HTMLElement;\r\n\r\n /**\r\n * 国际化字符串\r\n */\r\n @State() strings: any;\r\n\r\n /**\r\n * 点赞点踩状态\r\n */\r\n @State() feedbackStatus: 'like' | 'dislike' | null = null;\r\n\r\n /**\r\n * ClipboardJS 实例\r\n */\r\n private clipboard: ClipboardJS | null = null;\r\n\r\n /**\r\n * 视频播放URLs缓存\r\n */\r\n @State() videoUrls: { [key: string]: string } = {};\r\n\r\n /**\r\n * 用户头像URL\r\n */\r\n @Prop() userAvatar?: string;\r\n\r\n /**\r\n * 助手头像URL\r\n */\r\n @Prop() assistantAvatar?: string;\r\n\r\n /**\r\n * 是否显示复制按钮\r\n */\r\n @Prop() showCopyButton: boolean = true;\r\n\r\n /**\r\n * 附件预览模式\r\n * 'drawer': 在右侧抽屉中预览\r\n * 'window': 在新窗口中打开\r\n */\r\n @Prop() filePreviewMode: 'drawer' | 'window' = 'drawer';\r\n\r\n /**\r\n * 是否显示助手消息内容\r\n * false时显示加载中动画,true时显示正常消息内容\r\n */\r\n @Prop() showAssistantMessage: boolean = true;\r\n\r\n /**\r\n * 是否显示“保存职位”按钮(仅JD助手智能体生效)\r\n */\r\n @Prop() showSaveJdButton: boolean = false;\r\n\r\n /**\r\n * 保存职位按钮文本\r\n */\r\n @Prop() saveJdButtonText: string = '保存职位';\r\n\r\n /**\r\n * 保存职位事件\r\n */\r\n @Event() saveJd: EventEmitter<{\r\n isOk: boolean;\r\n message?: string;\r\n data?: Record<string, string>;\r\n }>;\r\n\r\n @Event() filePreviewRequest: EventEmitter<{\r\n url?: string,\r\n fileName: string,\r\n content?: string,\r\n contentType: 'file' | 'markdown' | 'text'\r\n }>;\r\n\r\n /**\r\n * 重试事件\r\n */\r\n @Event() retryRequest: EventEmitter<string>; // 传递消息ID\r\n\r\n constructor() {\r\n // 配置 marked 选项\r\n marked.use(extendedTables);\r\n marked.setOptions({\r\n breaks: true,\r\n gfm: true\r\n });\r\n }\r\n\r\n /**\r\n * 组件加载时检查消息是否已有反馈状态\r\n */\r\n async componentWillLoad() {\r\n // 加载国际化字符串\r\n this.strings = this.locale === 'en' ? stringsEn : stringsZh;\r\n\r\n // 如果消息已经有反馈状态,初始化feedbackStatus\r\n if (this.message && this.message.feedback) {\r\n this.feedbackStatus = this.message.feedback.rating as 'like' | 'dislike' | null;\r\n }\r\n }\r\n\r\n /**\r\n * 每次渲染后尝试初始化 ClipboardJS(按钮可能在后续渲染中才出现)\r\n */\r\n componentDidRender() {\r\n this.initClipboard();\r\n }\r\n\r\n /**\r\n * 组件卸载时销毁 ClipboardJS\r\n */\r\n disconnectedCallback() {\r\n if (this.clipboard) {\r\n this.clipboard.destroy();\r\n this.clipboard = null;\r\n }\r\n }\r\n\r\n /**\r\n * 初始化 ClipboardJS\r\n */\r\n private initClipboard() {\r\n // 从 Shadow DOM 中获取复制按钮\r\n const copyButton = this.hostElement.shadowRoot?.querySelector('.copy-button');\r\n if (!copyButton) {\r\n return;\r\n }\r\n\r\n // 如果已经初始化过,不重复创建\r\n if (this.clipboard) {\r\n return;\r\n }\r\n\r\n // 初始化 ClipboardJS,传入 container 解决 Shadow DOM 问题\r\n this.clipboard = new ClipboardJS(copyButton as Element, {\r\n container: this.hostElement.shadowRoot as unknown as Element,\r\n });\r\n\r\n // 成功回调\r\n this.clipboard.on('success', (e) => {\r\n alert(this.strings.copySuccess);\r\n e.clearSelection();\r\n });\r\n\r\n // 失败回调\r\n this.clipboard.on('error', (e) => {\r\n console.error('复制失败:', e);\r\n ErrorEventBus.emitError({\r\n error: e,\r\n message: '复制内容失败',\r\n });\r\n });\r\n }\r\n\r\n // 保存到职位库\r\n @State() saveJdLoading: boolean = false;\r\n private async handleSaveJd(job_info: string) {\r\n this.saveJdLoading = true;\r\n const bot_id = '78798567376007168';\r\n const response = await sendHttpRequest({\r\n url: '/sdk/v1/chat/workflow/block-run',\r\n method: 'POST',\r\n data: {\r\n bot_id,\r\n inputs: {\r\n job_info,\r\n }\r\n }\r\n });\r\n if (response.success && response.data?.data?.outputs?.json_data) {\r\n try {\r\n // 兼容纯JSON和Markdown格式的JSON (```json ... ```)\r\n let jsonText = response.data.data.outputs.json_data.trim();\r\n const markdownJsonMatch = jsonText.match(/```json\\s*([\\s\\S]*?)\\s*```/);\r\n if (markdownJsonMatch) {\r\n jsonText = markdownJsonMatch[1].trim();\r\n }\r\n const result = JSON.parse(jsonText);\r\n this.saveJd.emit({\r\n isOk: true,\r\n message: this.strings.saveSuccess,\r\n data: result,\r\n });\r\n } catch (error) {\r\n console.error('解析JSON失败:', error);\r\n this.saveJd.emit({\r\n isOk: false,\r\n message: this.strings.parseJsonFailed,\r\n });\r\n }\r\n } else {\r\n this.saveJd.emit({\r\n isOk: false,\r\n message: this.strings.saveFailed,\r\n });\r\n }\r\n this.saveJdLoading = false;\r\n }\r\n\r\n // 渲染用户消息部分\r\n private renderUserMessage() {\r\n if (!this.message?.query?.trim()) return null;\r\n const htmlContent = this.message.query ? marked(this.message.query) : '';\r\n\r\n return (\r\n <div class={{ 'user-message-container': true }}>\r\n {this.userAvatar && (\r\n <div class=\"avatar user-avatar\">\r\n <img src={this.userAvatar} />\r\n </div>\r\n )}\r\n <div class=\"message-bubble user-message\">\r\n <div innerHTML={htmlContent}></div>\r\n {this.renderInputs()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 渲染助手消息部分\r\n private renderAssistantMessage() {\r\n if (!this.message.answer && !this.message.isStreaming) return null;\r\n\r\n // 如果showAssistantMessage为false,显示加载中状态\r\n if (!this.showAssistantMessage) {\r\n return (\r\n <div class={{ 'assistant-message-container': true }}>\r\n {this.assistantAvatar && (\r\n <div class=\"avatar assistant-avatar\">\r\n <img src={this.assistantAvatar} />\r\n </div>\r\n )}\r\n <div class=\"message-bubble\">\r\n <div class=\"assistant-message\">\r\n {this.strings.pleaseWait}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 只有在开始流式输出且还没有内容时才显示loading\r\n const showLoading = this.message.isStreaming && !this.message.answer;\r\n const htmlContent = this.message.answer ? marked(this.message.answer) : '';\r\n\r\n // 展示保存到职位库按钮\r\n // const showSaveJdButton = this.showSaveJdButton && this.botId == '3022316191018873' && this.message?.answer?.includes(\"岗位职责\") && this.message?.answer?.includes(\"任职要求\");\r\n const showSaveJdButton = this.showSaveJdButton && this.botId == '3022316191018873';\r\n\r\n return (\r\n <div class={{ 'assistant-message-container': true }}>\r\n {this.assistantAvatar && (\r\n <div class=\"avatar assistant-avatar\">\r\n <img src={this.assistantAvatar} />\r\n </div>\r\n )}\r\n <div class=\"message-bubble \">\r\n <div class=\"assistant-message\">\r\n <div\r\n class=\"markdown-content markdown-body\"\r\n innerHTML={showLoading ?\r\n this.strings.pleaseWait :\r\n htmlContent\r\n }\r\n ></div>\r\n </div>\r\n {!showLoading && this.message.answer && !this.message.isStreaming && (\r\n <div class=\"message-actions\">\r\n {/* 根据父组件传入的属性决定是否显示重试按钮 */}\r\n {this.message.showRetryButton && (\r\n <button class=\"action-button retry-button\" onClick={() => this.handleRetry()} title={this.strings.retry}>\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"23 4 23 10 17 10\"></polyline>\r\n <polyline points=\"1 20 1 14 7 14\"></polyline>\r\n <path d=\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\"></path>\r\n </svg>\r\n </span>\r\n {this.strings.retry}\r\n </button>\r\n )}\r\n\r\n {this.showCopyButton && (\r\n <button\r\n class=\"action-button copy-button\"\r\n title={this.strings.copy}\r\n data-clipboard-text={this.message.answer || ''}\r\n >\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\r\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\r\n </svg>\r\n </span>\r\n {this.strings.copy}\r\n </button>\r\n )}\r\n\r\n {showSaveJdButton && (\r\n <button class=\"action-button\" onClick={() => this.handleSaveJd(this.message.answer)} title={this.saveJdButtonText} disabled={this.saveJdLoading}>\r\n {this.saveJdLoading ? this.strings.processing : this.saveJdButtonText}\r\n </button>\r\n )}\r\n\r\n {this.showFeedbackButtons && (\r\n <>\r\n <button\r\n class={`action-button icon-only ${this.feedbackStatus === 'like' ? 'active' : ''}`}\r\n title={this.strings.like}\r\n onClick={() => this.handleLike()}\r\n >\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"></path>\r\n </svg>\r\n </span>\r\n </button>\r\n <button\r\n class={`action-button icon-only ${this.feedbackStatus === 'dislike' ? 'active' : ''}`}\r\n title={this.strings.dislike}\r\n onClick={() => this.handleDislike()}\r\n >\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"></path>\r\n </svg>\r\n </span>\r\n </button>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getFileName(fileUrl: string): string {\r\n const parts = fileUrl.split('/');\r\n return parts[parts.length - 1];\r\n }\r\n\r\n\r\n // 添加处理文本内容点击的方法\r\n private handleContentClick(title: string, content: string, contentType: 'markdown' | 'text' = 'text') {\r\n this.filePreviewRequest.emit({\r\n fileName: title,\r\n content: content,\r\n contentType: contentType\r\n });\r\n }\r\n\r\n // 加载视频播放URL\r\n private async loadVideoUrl(cosKey: string) {\r\n if (this.videoUrls[cosKey]) {\r\n return; // 已经加载过了\r\n }\r\n\r\n const videoUrl = await getCosPresignedUrl(cosKey);\r\n if (videoUrl) {\r\n this.videoUrls = {\r\n ...this.videoUrls,\r\n [cosKey]: videoUrl\r\n };\r\n }\r\n }\r\n\r\n // 修改处理文件点击的方法\r\n private async handleFileClick(fileUrl: string, fileName: string) {\r\n // 判断是否为 HTTP/HTTPS URL\r\n const isHttpUrl = /^https?:\\/\\//i.test(fileUrl);\r\n\r\n if (isHttpUrl) {\r\n if (this.filePreviewMode === 'drawer') {\r\n this.filePreviewRequest.emit({\r\n url: fileUrl,\r\n fileName: fileName,\r\n contentType: 'file'\r\n });\r\n } else {\r\n window.open(fileUrl, '_blank');\r\n }\r\n return;\r\n }\r\n\r\n // COS Key:判断文件类型并获取相应的URL\r\n const isImage = /\\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i.test(fileName);\r\n\r\n // 图片直接使用预签名URL,其他文件使用文档预览URL\r\n const previewUrl = isImage\r\n ? await getCosPresignedUrl(fileUrl)\r\n : await getCosPreviewUrl(fileUrl);\r\n\r\n if (previewUrl) {\r\n if (this.filePreviewMode === 'drawer') {\r\n this.filePreviewRequest.emit({\r\n url: previewUrl,\r\n fileName: fileName,\r\n contentType: 'file'\r\n });\r\n } else {\r\n window.open(previewUrl, '_blank');\r\n }\r\n } else {\r\n console.error('无法获取预览URL');\r\n SentryReporter.captureError('无法获取预览URL', {\r\n action: 'handleFileClick',\r\n component: 'components-chat-message',\r\n title: '无法获取预览URL'\r\n });\r\n ErrorEventBus.emitError({\r\n error: '无法获取预览URL',\r\n message: '无法获取预览URL',\r\n });\r\n }\r\n }\r\n\r\n // 修改渲染文件项的部分\r\n private renderFileItem(fileName: string, fileUrl: string, index: number) {\r\n return (\r\n <div key={index} class=\"file-card\" onClick={() => this.handleFileClick(fileUrl, fileName)}>\r\n <div class=\"file-card-icon\" style={{ background: 'linear-gradient(45deg, #ff5600, #ff8344)' }}>\r\n <img src=\"https://pub.pincaimao.com/static/web/images/home/i_file.png\"></img>\r\n </div>\r\n <div class=\"file-card-content\">\r\n <div class=\"file-card-type\">[{this.strings.attachmentInfo}]</div>\r\n <div class=\"file-card-name\">{fileName}</div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 修改渲染输入数据的方法\r\n private renderInputs() {\r\n if (!this.message.inputs) return null;\r\n\r\n // 检查是否所有字段都为 null、undefined 或空字符串\r\n const hasValidInput = Object.keys(this.message.inputs).some(key => {\r\n const value = this.message.inputs[key];\r\n return value !== null && value !== undefined && value !== '' &&\r\n !key.startsWith('hide_') && key !== 'answer';\r\n });\r\n\r\n // 如果没有有效输入,返回 null\r\n if (!hasValidInput) return null;\r\n\r\n return (\r\n <div class=\"inputs-container\">\r\n {Object.keys(this.message.inputs).map((key, index) => {\r\n const value = this.message.inputs[key];\r\n if (value && !key.startsWith('hide_') && key !== 'answer') {\r\n if (key === 'video_url') {\r\n // 渲染视频播放区域\r\n const cosKey = value;\r\n const videoUrl = this.videoUrls[cosKey];\r\n\r\n // 如果还没有加载视频URL,异步加载\r\n if (!videoUrl) {\r\n this.loadVideoUrl(cosKey);\r\n }\r\n\r\n return (\r\n <div class=\"video-inputs-container\">\r\n <div key={index} class=\"video-container\">\r\n {videoUrl ? (\r\n <video\r\n key={cosKey}\r\n controls\r\n preload=\"metadata\"\r\n onLoadedMetaData={(e) => {\r\n // 确保进度条正确显示\r\n const video = e.target as HTMLVideoElement;\r\n video.currentTime = 0.01;\r\n }}\r\n controlsList=\"nodownload\"\r\n style={{\r\n width: '250px',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n borderRadius: '8px',\r\n marginTop: '8px'\r\n }}\r\n >\r\n <source src={videoUrl} type=\"video/webm\" />\r\n <source src={videoUrl} type=\"video/mp4\" />\r\n <source src={videoUrl} type=\"video/ogg\" />\r\n {this.strings.browserNotSupportVideo}\r\n </video>\r\n ) : (\r\n <div class=\"video-loading\">\r\n <div class=\"loading-spinner\"></div>\r\n <span>{this.strings.loadingVideo}</span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n } else if (key === 'file_url') {\r\n if ((value?.split?.(\",\")?.length || 0) > 1) {\r\n const fileList = value.split(',');\r\n const fileNames = this.message.inputs?.file_name?.split?.(',') || [];\r\n return (\r\n <div key={index}>\r\n {fileList.map((fileUrl, fileIndex) => {\r\n const fileName = fileNames[fileIndex] || this.getFileName(fileUrl);\r\n return this.renderFileItem(fileName, fileUrl, fileIndex);\r\n })}\r\n </div>\r\n );\r\n } else {\r\n // 优先使用 file_name 属性,如果不存在则从 file_url 提取文件名\r\n const fileName = this.message.inputs.file_name || this.getFileName(value);\r\n return this.renderFileItem(fileName, value, index);\r\n }\r\n } else if (key === 'file_urls') {\r\n // 始终将 file_urls 视为逗号分隔的字符串\r\n const fileList = typeof value === 'string' ? value.split(',') : [value.toString()];\r\n\r\n // 同样将 file_names 视为逗号分隔的字符串\r\n const fileNames = this.message.inputs.file_names ?\r\n (typeof this.message.inputs.file_names === 'string' ?\r\n this.message.inputs.file_names.split(',') :\r\n [this.message.inputs.file_names.toString()]) :\r\n [];\r\n\r\n return (\r\n <div key={index}>\r\n {fileList.map((fileUrl, fileIndex) => {\r\n // 使用对应的文件名,如果不存在则从URL提取\r\n const fileName = fileNames[fileIndex] || this.getFileName(fileUrl);\r\n return this.renderFileItem(fileName, fileUrl, fileIndex);\r\n })}\r\n </div>\r\n );\r\n } else if (key === 'job_info' || key === 'rule') {\r\n const title = key === 'job_info' ? this.strings.jobInfo : this.strings.evaluationRule;\r\n const content = typeof value === 'string' ? value : JSON.stringify(value, null, 2);\r\n\r\n return (\r\n <div key={index} class=\"file-card\" onClick={() => this.handleContentClick(title, content)}>\r\n <div class=\"file-card-icon\" style={{ background: '#0d75fb' }}>\r\n <img src=\"https://pub.pincaimao.com/static/web/images/home/i_position.png\"></img>\r\n </div>\r\n <div class=\"file-card-content\">\r\n <div class=\"file-card-type\">[{title}]</div>\r\n <div class=\"file-card-name\">{content.length > 50 ? content.substring(0, 50) + '...' : content}</div>\r\n </div>\r\n </div>\r\n );\r\n } else if (key === 'input') {\r\n return <div key={index} class=\"input-metadata\">{`${value}`}</div>;\r\n }\r\n }\r\n return null;\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n /**\r\n * 处理点赞操作\r\n */\r\n private async handleLike() {\r\n // 如果当前已经是点赞状态,则取消点赞\r\n const newStatus = this.feedbackStatus === 'like' ? null : 'like';\r\n\r\n // 发送请求到服务器\r\n await this.submitFeedback(newStatus);\r\n }\r\n\r\n /**\r\n * 处理点踩操作\r\n */\r\n private async handleDislike() {\r\n // 如果当前已经是点踩状态,则取消点踩\r\n const newStatus = this.feedbackStatus === 'dislike' ? null : 'dislike';\r\n\r\n // 发送请求到服务器\r\n await this.submitFeedback(newStatus);\r\n }\r\n\r\n /**\r\n * 提交反馈到服务器\r\n */\r\n private async submitFeedback(rating: 'like' | 'dislike' | null) {\r\n if (!this.message.id) {\r\n console.error('消息ID不存在,无法提交反馈');\r\n SentryReporter.captureError('消息ID不存在,无法提交反馈', {\r\n action: 'submitFeedback',\r\n component: 'components-chat-message',\r\n title: '无法提交反馈'\r\n });\r\n ErrorEventBus.emitError({\r\n error: '消息ID不存在,无法提交反馈',\r\n message: '消息ID不存在,无法提交反馈',\r\n });\r\n return;\r\n }\r\n\r\n try {\r\n const result = await sendHttpRequest({\r\n url: `/sdk/v1/chat/messages/${this.message.id}/feedbacks`,\r\n method: 'POST',\r\n data: {\r\n rating,\r\n bot_id: this.botId,\r\n content: '',\r\n }\r\n });\r\n if (result.success) {\r\n // 更新本地状态\r\n this.feedbackStatus = rating;\r\n\r\n // 更新消息对象中的反馈状态,创建新对象以确保引用变化\r\n if (this.message && this.message.feedback) {\r\n this.message = {\r\n ...this.message,\r\n feedback: {\r\n ...this.message.feedback,\r\n rating\r\n }\r\n };\r\n }\r\n\r\n console.log('反馈提交成功');\r\n } else {\r\n console.error('反馈提交失败:', result.message);\r\n }\r\n } catch (error) {\r\n console.error('提交反馈时发生错误:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'submitFeedback',\r\n component: 'components-chat-message',\r\n title: '提交反馈失败'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * 处理重试操作\r\n */\r\n private handleRetry() {\r\n if (this.message.id) {\r\n this.retryRequest.emit(this.message.id);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div class=\"message-round\">\r\n {this.renderUserMessage()}\r\n {this.renderAssistantMessage()}\r\n </div>\r\n );\r\n }\r\n} "]}
|
|
1
|
+
{"version":3,"file":"components-chat-message.js","sourceRoot":"","sources":["../../../../src/components/components-chat-message/components-chat-message.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAgB,KAAK,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,cAAc,MAAM,wBAAwB,CAAC;AACpD,OAAO,WAAW,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,SAAS,MAAM,wCAAwC,CAAC;AAC/D,OAAO,SAAS,MAAM,wCAAwC,CAAC;AAO/D,MAAM,OAAO,qBAAqB;IAC9B;;OAEG;IACK,OAAO,CAAc;IAE7B;;OAEG;IACK,mBAAmB,GAAY,IAAI,CAAC;IAE5C;;OAEG;IACK,KAAK,CAAU;IAEvB;;OAEG;IACK,MAAM,CAAU;IAGxB,+BAA+B;IACpB,WAAW,CAAc;IAEpC;;OAEG;IACM,OAAO,CAAM;IAEtB;;OAEG;IACM,cAAc,GAA8B,IAAI,CAAC;IAE1D;;OAEG;IACK,SAAS,GAAuB,IAAI,CAAC;IAE7C;;OAEG;IACM,SAAS,GAA8B,EAAE,CAAC;IAEnD;;OAEG;IACK,UAAU,CAAU;IAE5B;;OAEG;IACK,eAAe,CAAU;IAEjC;;OAEG;IACK,cAAc,GAAY,IAAI,CAAC;IAEvC;;;;OAIG;IACK,eAAe,GAAwB,QAAQ,CAAC;IAExD;;;OAGG;IACK,oBAAoB,GAAY,IAAI,CAAC;IAE7C;;OAEG;IACK,gBAAgB,GAAY,KAAK,CAAC;IAE1C;;OAEG;IACK,gBAAgB,GAAW,MAAM,CAAC;IAE1C;;OAEG;IACM,MAAM,CAIZ;IAEM,kBAAkB,CAKxB;IAEH;;OAEG;IACM,YAAY,CAAuB,CAAC,SAAS;IAEtD;QACI,eAAe;QACf,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3B,MAAM,CAAC,UAAU,CAAC;YACd,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,IAAI;SACZ,CAAC,CAAC;KACN;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACnB,WAAW;QACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5D,gCAAgC;QAChC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAmC,CAAC;QACpF,CAAC;IACL,CAAC;IAED;;OAEG;IACH,kBAAkB;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,oBAAoB;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa;QACjB,uBAAuB;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,UAAqB,EAAE;YACpD,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,UAAgC;SAC/D,CAAC,CAAC;QAEH,OAAO;QACP,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO;QACP,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1B,aAAa,CAAC,SAAS,CAAC;gBACpB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,QAAQ;aACpB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,SAAS;IACA,aAAa,GAAY,KAAK,CAAC;IAChC,KAAK,CAAC,YAAY,CAAC,QAAgB;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,mBAAmB,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;YACnC,GAAG,EAAE,iCAAiC;YACtC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACF,MAAM;gBACN,MAAM,EAAE;oBACJ,QAAQ;iBACX;aACJ;SACJ,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC9D,IAAI,CAAC;gBACD,4CAA4C;gBAC5C,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC3D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACvE,IAAI,iBAAiB,EAAE,CAAC;oBACpB,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3C,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;oBACjC,IAAI,EAAE,MAAM;iBACf,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;iBACxC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;aACnC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED,WAAW;IACH,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzE,OAAO,CACH,WAAK,KAAK,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE;YACzC,IAAI,CAAC,UAAU,IAAI,CAChB,WAAK,KAAK,EAAC,oBAAoB;gBAC3B,WAAK,GAAG,EAAE,IAAI,CAAC,UAAU,GAAI,CAC3B,CACT;YACD,WAAK,KAAK,EAAC,6BAA6B;gBACpC,WAAK,SAAS,EAAE,WAAW,GAAQ;gBAClC,IAAI,CAAC,YAAY,EAAE,CAClB,CACJ,CACT,CAAC;IACN,CAAC;IAED,WAAW;IACH,sBAAsB;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEnE,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7B,OAAO,CACH,WAAK,KAAK,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE;gBAC9C,IAAI,CAAC,eAAe,IAAI,CACrB,WAAK,KAAK,EAAC,yBAAyB;oBAChC,WAAK,GAAG,EAAE,IAAI,CAAC,eAAe,GAAI,CAChC,CACT;gBACD,WAAK,KAAK,EAAC,gBAAgB;oBACvB,WAAK,KAAK,EAAC,mBAAmB,IACzB,IAAI,CAAC,OAAO,CAAC,UAAU,CACtB,CACJ,CACJ,CACT,CAAC;QACN,CAAC;QAED,6BAA6B;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,aAAa;QACb,0KAA0K;QAC1K,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,IAAI,kBAAkB,CAAC;QAEnF,OAAO,CACH,WAAK,KAAK,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE;YAC9C,IAAI,CAAC,eAAe,IAAI,CACrB,WAAK,KAAK,EAAC,yBAAyB;gBAChC,WAAK,GAAG,EAAE,IAAI,CAAC,eAAe,GAAI,CAChC,CACT;YACD,WAAK,KAAK,EAAC,iBAAiB;gBACxB,WAAK,KAAK,EAAC,mBAAmB;oBAC1B,WACI,KAAK,EAAC,gCAAgC,EACtC,SAAS,EAAE,WAAW,CAAC,CAAC;4BACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;4BACzB,WAAW,GAEZ,CACL;gBACL,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CACjE,WAAK,KAAK,EAAC,iBAAiB;oBAEvB,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,CAC7B,cAAQ,KAAK,EAAC,4BAA4B,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;wBACnG,YAAM,KAAK,EAAC,aAAa;4BACrB,WAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,kBAAc,GAAG,oBAAgB,OAAO,qBAAiB,OAAO;gCAChL,gBAAU,MAAM,EAAC,kBAAkB,GAAY;gCAC/C,gBAAU,MAAM,EAAC,gBAAgB,GAAY;gCAC7C,YAAM,CAAC,EAAC,qEAAqE,GAAQ,CACnF,CACH;wBACN,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,CACZ;oBAEA,IAAI,CAAC,cAAc,IAAI,CACpB,cACI,KAAK,EAAC,2BAA2B,EACjC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,yBACH,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE;wBAE9C,YAAM,KAAK,EAAC,aAAa;4BACrB,WAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,kBAAc,GAAG,oBAAgB,OAAO,qBAAiB,OAAO;gCAChL,YAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,GAAQ;gCAC9D,YAAM,CAAC,EAAC,yDAAyD,GAAQ,CACvE,CACH;wBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,CACZ;oBAEA,gBAAgB,IAAI,CACjB,cAAQ,KAAK,EAAC,eAAe,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,IAC1I,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAChE,CACZ;oBAEA,IAAI,CAAC,mBAAmB,IAAI,CACzB;wBACI,cACI,KAAK,EAAE,2BAA2B,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAClF,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;4BAEhC,YAAM,KAAK,EAAC,aAAa;gCACrB,WAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,kBAAc,GAAG,oBAAgB,OAAO,qBAAiB,OAAO;oCAChL,YAAM,CAAC,EAAC,qHAAqH,GAAQ,CACnI,CACH,CACF;wBACT,cACI,KAAK,EAAE,2BAA2B,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EACrF,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;4BAEnC,YAAM,KAAK,EAAC,aAAa;gCACrB,WAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,kBAAc,GAAG,oBAAgB,OAAO,qBAAiB,OAAO;oCAChL,YAAM,CAAC,EAAC,uIAAuI,GAAQ,CACrJ,CACH,CACF,CACV,CACN,CACC,CACT,CACC,CACJ,CACT,CAAC;IACN,CAAC;IAEO,WAAW,CAAC,OAAe;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAGD,gBAAgB;IACR,kBAAkB,CAAC,KAAa,EAAE,OAAe,EAAE,cAAmC,MAAM;QAChG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YACzB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,WAAW;SAC3B,CAAC,CAAC;IACP,CAAC;IAED,YAAY;IACJ,KAAK,CAAC,YAAY,CAAC,MAAc;QACrC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,SAAS;QACrB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,GAAG;gBACb,GAAG,IAAI,CAAC,SAAS;gBACjB,CAAC,MAAM,CAAC,EAAE,QAAQ;aACrB,CAAC;QACN,CAAC;IACL,CAAC;IAED,cAAc;IACN,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,QAAgB;QAC3D,uBAAuB;QACvB,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBACzB,GAAG,EAAE,OAAO;oBACZ,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,MAAM;iBACtB,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC;YACD,OAAO;QACX,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,qCAAqC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErE,6BAA6B;QAC7B,MAAM,UAAU,GAAG,OAAO;YACtB,CAAC,CAAC,MAAM,kBAAkB,CAAC,OAAO,CAAC;YACnC,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBACzB,GAAG,EAAE,UAAU;oBACf,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,MAAM;iBACtB,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE;gBACrC,MAAM,EAAE,iBAAiB;gBACzB,SAAS,EAAE,yBAAyB;gBACpC,KAAK,EAAE,WAAW;aACrB,CAAC,CAAC;YACH,aAAa,CAAC,SAAS,CAAC;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,WAAW;aACvB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,aAAa;IACL,cAAc,CAAC,QAAgB,EAAE,OAAe,EAAE,KAAa;QACnE,OAAO,CACH,WAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;YACrF,WAAK,KAAK,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,0CAA0C,EAAE;gBACzF,WAAK,GAAG,EAAC,6DAA6D,GAAO,CAC3E;YACN,WAAK,KAAK,EAAC,mBAAmB;gBAC1B,WAAK,KAAK,EAAC,gBAAgB;;oBAAG,IAAI,CAAC,OAAO,CAAC,cAAc;wBAAQ;gBACjE,WAAK,KAAK,EAAC,gBAAgB,IAAE,QAAQ,CAAO,CAC1C,CACJ,CACT,CAAC;IACN,CAAC;IAED,cAAc;IACN,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEtC,kCAAkC;QAClC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;gBACxD,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,QAAQ,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAEhC,OAAO,CACH,WAAK,KAAK,EAAC,kBAAkB,IACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACxD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;oBACtB,WAAW;oBACX,MAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAExC,oBAAoB;oBACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACZ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;oBAC9B,CAAC;oBAED,OAAO,CACH,WAAK,KAAK,EAAC,wBAAwB;wBAC/B,WAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,iBAAiB,IACnC,QAAQ,CAAC,CAAC,CAAC,CACR,aACI,GAAG,EAAE,MAAM,EACX,QAAQ,QACR,OAAO,EAAC,UAAU,EAClB,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE;gCACpB,YAAY;gCACZ,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B,CAAC;gCAC3C,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;4BAC7B,CAAC,EACD,YAAY,EAAC,YAAY,EACzB,KAAK,EAAE;gCACH,KAAK,EAAE,OAAO;gCACd,MAAM,EAAE,MAAM;gCACd,SAAS,EAAE,OAAO;gCAClB,YAAY,EAAE,KAAK;gCACnB,SAAS,EAAE,KAAK;6BACnB;4BAED,cAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC,YAAY,GAAG;4BAC3C,cAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC,WAAW,GAAG;4BAC1C,cAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC,WAAW,GAAG;4BACzC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAChC,CACX,CAAC,CAAC,CAAC,CACA,WAAK,KAAK,EAAC,eAAe;4BACtB,WAAK,KAAK,EAAC,iBAAiB,GAAO;4BACnC,gBAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAQ,CACtC,CACT,CACC,CACJ,CACT,CAAC;gBACN,CAAC;qBAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wBACrE,OAAO,CACH,WAAK,GAAG,EAAE,KAAK,IACV,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;4BACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;4BACnE,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;wBAC7D,CAAC,CAAC,CACA,CACT,CAAC;oBACN,CAAC;yBAAM,CAAC;wBACJ,2CAA2C;wBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wBAC1E,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBACvD,CAAC;gBACL,CAAC;qBAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;oBAC7B,2BAA2B;oBAC3B,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAEnF,4BAA4B;oBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBAC9C,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;4BACjD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC3C,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;wBAClD,EAAE,CAAC;oBAEP,OAAO,CACH,WAAK,GAAG,EAAE,KAAK,IACV,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;wBACjC,wBAAwB;wBACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;wBACnE,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;oBAC7D,CAAC,CAAC,CACA,CACT,CAAC;gBACN,CAAC;qBAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBAC9C,MAAM,KAAK,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;oBACtF,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAEnF,OAAO,CACH,WAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;wBACrF,WAAK,KAAK,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;4BACxD,WAAK,GAAG,EAAC,iEAAiE,GAAO,CAC/E;wBACN,WAAK,KAAK,EAAC,mBAAmB;4BAC1B,WAAK,KAAK,EAAC,gBAAgB;;gCAAG,KAAK;oCAAQ;4BAC3C,WAAK,KAAK,EAAC,gBAAgB,IAAE,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAO,CAClG,CACJ,CACT,CAAC;gBACN,CAAC;qBAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;oBACzB,OAAO,WAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,gBAAgB,IAAE,GAAG,KAAK,EAAE,CAAO,CAAC;gBACtE,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CACA,CACT,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACpB,oBAAoB;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAEjE,WAAW;QACX,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa;QACvB,oBAAoB;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvE,WAAW;QACX,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,MAAiC;QAC1D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChC,cAAc,CAAC,YAAY,CAAC,gBAAgB,EAAE;gBAC1C,MAAM,EAAE,gBAAgB;gBACxB,SAAS,EAAE,yBAAyB;gBACpC,KAAK,EAAE,QAAQ;aAClB,CAAC,CAAC;YACH,aAAa,CAAC,SAAS,CAAC;gBACpB,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACjC,GAAG,EAAE,yBAAyB,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY;gBACzD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE;oBACF,MAAM;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,OAAO,EAAE,EAAE;iBACd;aACJ,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,SAAS;gBACT,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;gBAE7B,4BAA4B;gBAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACxC,IAAI,CAAC,OAAO,GAAG;wBACX,GAAG,IAAI,CAAC,OAAO;wBACf,QAAQ,EAAE;4BACN,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;4BACxB,MAAM;yBACT;qBACJ,CAAC;gBACN,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACnC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE;gBAC/B,MAAM,EAAE,gBAAgB;gBACxB,SAAS,EAAE,yBAAyB;gBACpC,KAAK,EAAE,QAAQ;aAClB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACK,WAAW;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAED,MAAM;QACF,OAAO,CACH,4DAAK,KAAK,EAAC,eAAe;YACrB,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,sBAAsB,EAAE,CAC5B,CACT,CAAC;IACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import { Component, Prop, h, Element, Event, EventEmitter, State } from '@stencil/core';\r\nimport { marked } from 'marked';\r\nimport extendedTables from 'marked-extended-tables';\r\nimport ClipboardJS from 'clipboard';\r\nimport { ChatMessage } from '../../interfaces/chat';\r\nimport { sendHttpRequest, getCosPresignedUrl, getCosPreviewUrl } from '../../utils/utils';\r\nimport { ErrorEventBus } from '../../utils/error-event';\r\nimport { SentryReporter } from '../../utils/sentry-reporter';\r\nimport { Message } from '../../services/message.service';\r\nimport stringsZh from './components-chat-message.i18n.zh.json';\r\nimport stringsEn from './components-chat-message.i18n.en.json';\r\n\r\n@Component({\r\n tag: 'components-chat-message',\r\n styleUrls: ['../../global/markdown.css', 'components-chat-message.css', '../../global/host.css'],\r\n shadow: true,\r\n})\r\nexport class ComponentsChatMessage {\r\n /**\r\n * 消息数据\r\n */\r\n @Prop() message: ChatMessage;\r\n\r\n /**\r\n * 是否显示点赞点踩按钮 \r\n */\r\n @Prop() showFeedbackButtons: boolean = true;\r\n\r\n /**\r\n * 机器人ID\r\n */\r\n @Prop() botId?: string;\r\n\r\n /**\r\n * 语言设置\r\n */\r\n @Prop() locale?: string;\r\n\r\n\r\n // 使用 @Element 装饰器获取组件的 host 元素\r\n @Element() hostElement: HTMLElement;\r\n\r\n /**\r\n * 国际化字符串\r\n */\r\n @State() strings: any;\r\n\r\n /**\r\n * 点赞点踩状态\r\n */\r\n @State() feedbackStatus: 'like' | 'dislike' | null = null;\r\n\r\n /**\r\n * ClipboardJS 实例\r\n */\r\n private clipboard: ClipboardJS | null = null;\r\n\r\n /**\r\n * 视频播放URLs缓存\r\n */\r\n @State() videoUrls: { [key: string]: string } = {};\r\n\r\n /**\r\n * 用户头像URL\r\n */\r\n @Prop() userAvatar?: string;\r\n\r\n /**\r\n * 助手头像URL\r\n */\r\n @Prop() assistantAvatar?: string;\r\n\r\n /**\r\n * 是否显示复制按钮\r\n */\r\n @Prop() showCopyButton: boolean = true;\r\n\r\n /**\r\n * 附件预览模式\r\n * 'drawer': 在右侧抽屉中预览\r\n * 'window': 在新窗口中打开\r\n */\r\n @Prop() filePreviewMode: 'drawer' | 'window' = 'drawer';\r\n\r\n /**\r\n * 是否显示助手消息内容\r\n * false时显示加载中动画,true时显示正常消息内容\r\n */\r\n @Prop() showAssistantMessage: boolean = true;\r\n\r\n /**\r\n * 是否显示“保存职位”按钮(仅JD助手智能体生效)\r\n */\r\n @Prop() showSaveJdButton: boolean = false;\r\n\r\n /**\r\n * 保存职位按钮文本\r\n */\r\n @Prop() saveJdButtonText: string = '保存职位';\r\n\r\n /**\r\n * 保存职位事件\r\n */\r\n @Event() saveJd: EventEmitter<{\r\n isOk: boolean;\r\n message?: string;\r\n data?: Record<string, string>;\r\n }>;\r\n\r\n @Event() filePreviewRequest: EventEmitter<{\r\n url?: string,\r\n fileName: string,\r\n content?: string,\r\n contentType: 'file' | 'markdown' | 'text'\r\n }>;\r\n\r\n /**\r\n * 重试事件\r\n */\r\n @Event() retryRequest: EventEmitter<string>; // 传递消息ID\r\n\r\n constructor() {\r\n // 配置 marked 选项\r\n marked.use(extendedTables);\r\n marked.setOptions({\r\n breaks: true,\r\n gfm: true\r\n });\r\n }\r\n\r\n /**\r\n * 组件加载时检查消息是否已有反馈状态\r\n */\r\n async componentWillLoad() {\r\n // 加载国际化字符串\r\n this.strings = this.locale === 'en' ? stringsEn : stringsZh;\r\n\r\n // 如果消息已经有反馈状态,初始化feedbackStatus\r\n if (this.message && this.message.feedback) {\r\n this.feedbackStatus = this.message.feedback.rating as 'like' | 'dislike' | null;\r\n }\r\n }\r\n\r\n /**\r\n * 每次渲染后尝试初始化 ClipboardJS(按钮可能在后续渲染中才出现)\r\n */\r\n componentDidRender() {\r\n this.initClipboard();\r\n }\r\n\r\n /**\r\n * 组件卸载时销毁 ClipboardJS\r\n */\r\n disconnectedCallback() {\r\n if (this.clipboard) {\r\n this.clipboard.destroy();\r\n this.clipboard = null;\r\n }\r\n }\r\n\r\n /**\r\n * 初始化 ClipboardJS\r\n */\r\n private initClipboard() {\r\n // 从 Shadow DOM 中获取复制按钮\r\n const copyButton = this.hostElement.shadowRoot?.querySelector('.copy-button');\r\n if (!copyButton) {\r\n return;\r\n }\r\n\r\n // 如果已经初始化过,不重复创建\r\n if (this.clipboard) {\r\n return;\r\n }\r\n\r\n // 初始化 ClipboardJS,传入 container 解决 Shadow DOM 问题\r\n this.clipboard = new ClipboardJS(copyButton as Element, {\r\n container: this.hostElement.shadowRoot as unknown as Element,\r\n });\r\n\r\n // 成功回调\r\n this.clipboard.on('success', (e) => {\r\n Message.success(this.strings.copySuccess);\r\n e.clearSelection();\r\n });\r\n\r\n // 失败回调\r\n this.clipboard.on('error', (e) => {\r\n console.error('复制失败:', e);\r\n ErrorEventBus.emitError({\r\n error: e,\r\n message: '复制内容失败',\r\n });\r\n });\r\n }\r\n\r\n // 保存到职位库\r\n @State() saveJdLoading: boolean = false;\r\n private async handleSaveJd(job_info: string) {\r\n this.saveJdLoading = true;\r\n const bot_id = '78798567376007168';\r\n const response = await sendHttpRequest({\r\n url: '/sdk/v1/chat/workflow/block-run',\r\n method: 'POST',\r\n data: {\r\n bot_id,\r\n inputs: {\r\n job_info,\r\n }\r\n }\r\n });\r\n if (response.success && response.data?.data?.outputs?.json_data) {\r\n try {\r\n // 兼容纯JSON和Markdown格式的JSON (```json ... ```)\r\n let jsonText = response.data.data.outputs.json_data.trim();\r\n const markdownJsonMatch = jsonText.match(/```json\\s*([\\s\\S]*?)\\s*```/);\r\n if (markdownJsonMatch) {\r\n jsonText = markdownJsonMatch[1].trim();\r\n }\r\n const result = JSON.parse(jsonText);\r\n this.saveJd.emit({\r\n isOk: true,\r\n message: this.strings.saveSuccess,\r\n data: result,\r\n });\r\n } catch (error) {\r\n console.error('解析JSON失败:', error);\r\n this.saveJd.emit({\r\n isOk: false,\r\n message: this.strings.parseJsonFailed,\r\n });\r\n }\r\n } else {\r\n this.saveJd.emit({\r\n isOk: false,\r\n message: this.strings.saveFailed,\r\n });\r\n }\r\n this.saveJdLoading = false;\r\n }\r\n\r\n // 渲染用户消息部分\r\n private renderUserMessage() {\r\n if (!this.message?.query?.trim()) return null;\r\n const htmlContent = this.message.query ? marked(this.message.query) : '';\r\n\r\n return (\r\n <div class={{ 'user-message-container': true }}>\r\n {this.userAvatar && (\r\n <div class=\"avatar user-avatar\">\r\n <img src={this.userAvatar} />\r\n </div>\r\n )}\r\n <div class=\"message-bubble user-message\">\r\n <div innerHTML={htmlContent}></div>\r\n {this.renderInputs()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 渲染助手消息部分\r\n private renderAssistantMessage() {\r\n if (!this.message.answer && !this.message.isStreaming) return null;\r\n\r\n // 如果showAssistantMessage为false,显示加载中状态\r\n if (!this.showAssistantMessage) {\r\n return (\r\n <div class={{ 'assistant-message-container': true }}>\r\n {this.assistantAvatar && (\r\n <div class=\"avatar assistant-avatar\">\r\n <img src={this.assistantAvatar} />\r\n </div>\r\n )}\r\n <div class=\"message-bubble\">\r\n <div class=\"assistant-message\">\r\n {this.strings.pleaseWait}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 只有在开始流式输出且还没有内容时才显示loading\r\n const showLoading = this.message.isStreaming && !this.message.answer;\r\n const htmlContent = this.message.answer ? marked(this.message.answer) : '';\r\n\r\n // 展示保存到职位库按钮\r\n // const showSaveJdButton = this.showSaveJdButton && this.botId == '3022316191018873' && this.message?.answer?.includes(\"岗位职责\") && this.message?.answer?.includes(\"任职要求\");\r\n const showSaveJdButton = this.showSaveJdButton && this.botId == '3022316191018873';\r\n\r\n return (\r\n <div class={{ 'assistant-message-container': true }}>\r\n {this.assistantAvatar && (\r\n <div class=\"avatar assistant-avatar\">\r\n <img src={this.assistantAvatar} />\r\n </div>\r\n )}\r\n <div class=\"message-bubble \">\r\n <div class=\"assistant-message\">\r\n <div\r\n class=\"markdown-content markdown-body\"\r\n innerHTML={showLoading ?\r\n this.strings.pleaseWait :\r\n htmlContent\r\n }\r\n ></div>\r\n </div>\r\n {!showLoading && this.message.answer && !this.message.isStreaming && (\r\n <div class=\"message-actions\">\r\n {/* 根据父组件传入的属性决定是否显示重试按钮 */}\r\n {this.message.showRetryButton && (\r\n <button class=\"action-button retry-button\" onClick={() => this.handleRetry()} title={this.strings.retry}>\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"23 4 23 10 17 10\"></polyline>\r\n <polyline points=\"1 20 1 14 7 14\"></polyline>\r\n <path d=\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\"></path>\r\n </svg>\r\n </span>\r\n {this.strings.retry}\r\n </button>\r\n )}\r\n\r\n {this.showCopyButton && (\r\n <button\r\n class=\"action-button copy-button\"\r\n title={this.strings.copy}\r\n data-clipboard-text={this.message.answer || ''}\r\n >\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\r\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\r\n </svg>\r\n </span>\r\n {this.strings.copy}\r\n </button>\r\n )}\r\n\r\n {showSaveJdButton && (\r\n <button class=\"action-button\" onClick={() => this.handleSaveJd(this.message.answer)} title={this.saveJdButtonText} disabled={this.saveJdLoading}>\r\n {this.saveJdLoading ? this.strings.processing : this.saveJdButtonText}\r\n </button>\r\n )}\r\n\r\n {this.showFeedbackButtons && (\r\n <>\r\n <button\r\n class={`action-button icon-only ${this.feedbackStatus === 'like' ? 'active' : ''}`}\r\n title={this.strings.like}\r\n onClick={() => this.handleLike()}\r\n >\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"></path>\r\n </svg>\r\n </span>\r\n </button>\r\n <button\r\n class={`action-button icon-only ${this.feedbackStatus === 'dislike' ? 'active' : ''}`}\r\n title={this.strings.dislike}\r\n onClick={() => this.handleDislike()}\r\n >\r\n <span class=\"button-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"></path>\r\n </svg>\r\n </span>\r\n </button>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getFileName(fileUrl: string): string {\r\n const parts = fileUrl.split('/');\r\n return parts[parts.length - 1];\r\n }\r\n\r\n\r\n // 添加处理文本内容点击的方法\r\n private handleContentClick(title: string, content: string, contentType: 'markdown' | 'text' = 'text') {\r\n this.filePreviewRequest.emit({\r\n fileName: title,\r\n content: content,\r\n contentType: contentType\r\n });\r\n }\r\n\r\n // 加载视频播放URL\r\n private async loadVideoUrl(cosKey: string) {\r\n if (this.videoUrls[cosKey]) {\r\n return; // 已经加载过了\r\n }\r\n\r\n const videoUrl = await getCosPresignedUrl(cosKey);\r\n if (videoUrl) {\r\n this.videoUrls = {\r\n ...this.videoUrls,\r\n [cosKey]: videoUrl\r\n };\r\n }\r\n }\r\n\r\n // 修改处理文件点击的方法\r\n private async handleFileClick(fileUrl: string, fileName: string) {\r\n // 判断是否为 HTTP/HTTPS URL\r\n const isHttpUrl = /^https?:\\/\\//i.test(fileUrl);\r\n\r\n if (isHttpUrl) {\r\n if (this.filePreviewMode === 'drawer') {\r\n this.filePreviewRequest.emit({\r\n url: fileUrl,\r\n fileName: fileName,\r\n contentType: 'file'\r\n });\r\n } else {\r\n window.open(fileUrl, '_blank');\r\n }\r\n return;\r\n }\r\n\r\n // COS Key:判断文件类型并获取相应的URL\r\n const isImage = /\\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i.test(fileName);\r\n\r\n // 图片直接使用预签名URL,其他文件使用文档预览URL\r\n const previewUrl = isImage\r\n ? await getCosPresignedUrl(fileUrl)\r\n : await getCosPreviewUrl(fileUrl);\r\n\r\n if (previewUrl) {\r\n if (this.filePreviewMode === 'drawer') {\r\n this.filePreviewRequest.emit({\r\n url: previewUrl,\r\n fileName: fileName,\r\n contentType: 'file'\r\n });\r\n } else {\r\n window.open(previewUrl, '_blank');\r\n }\r\n } else {\r\n console.error('无法获取预览URL');\r\n SentryReporter.captureError('无法获取预览URL', {\r\n action: 'handleFileClick',\r\n component: 'components-chat-message',\r\n title: '无法获取预览URL'\r\n });\r\n ErrorEventBus.emitError({\r\n error: '无法获取预览URL',\r\n message: '无法获取预览URL',\r\n });\r\n }\r\n }\r\n\r\n // 修改渲染文件项的部分\r\n private renderFileItem(fileName: string, fileUrl: string, index: number) {\r\n return (\r\n <div key={index} class=\"file-card\" onClick={() => this.handleFileClick(fileUrl, fileName)}>\r\n <div class=\"file-card-icon\" style={{ background: 'linear-gradient(45deg, #ff5600, #ff8344)' }}>\r\n <img src=\"https://pub.pincaimao.com/static/web/images/home/i_file.png\"></img>\r\n </div>\r\n <div class=\"file-card-content\">\r\n <div class=\"file-card-type\">[{this.strings.attachmentInfo}]</div>\r\n <div class=\"file-card-name\">{fileName}</div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // 修改渲染输入数据的方法\r\n private renderInputs() {\r\n if (!this.message.inputs) return null;\r\n\r\n // 检查是否所有字段都为 null、undefined 或空字符串\r\n const hasValidInput = Object.keys(this.message.inputs).some(key => {\r\n const value = this.message.inputs[key];\r\n return value !== null && value !== undefined && value !== '' &&\r\n !key.startsWith('hide_') && key !== 'answer';\r\n });\r\n\r\n // 如果没有有效输入,返回 null\r\n if (!hasValidInput) return null;\r\n\r\n return (\r\n <div class=\"inputs-container\">\r\n {Object.keys(this.message.inputs).map((key, index) => {\r\n const value = this.message.inputs[key];\r\n if (value && !key.startsWith('hide_') && key !== 'answer') {\r\n if (key === 'video_url') {\r\n // 渲染视频播放区域\r\n const cosKey = value;\r\n const videoUrl = this.videoUrls[cosKey];\r\n\r\n // 如果还没有加载视频URL,异步加载\r\n if (!videoUrl) {\r\n this.loadVideoUrl(cosKey);\r\n }\r\n\r\n return (\r\n <div class=\"video-inputs-container\">\r\n <div key={index} class=\"video-container\">\r\n {videoUrl ? (\r\n <video\r\n key={cosKey}\r\n controls\r\n preload=\"metadata\"\r\n onLoadedMetaData={(e) => {\r\n // 确保进度条正确显示\r\n const video = e.target as HTMLVideoElement;\r\n video.currentTime = 0.01;\r\n }}\r\n controlsList=\"nodownload\"\r\n style={{\r\n width: '250px',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n borderRadius: '8px',\r\n marginTop: '8px'\r\n }}\r\n >\r\n <source src={videoUrl} type=\"video/webm\" />\r\n <source src={videoUrl} type=\"video/mp4\" />\r\n <source src={videoUrl} type=\"video/ogg\" />\r\n {this.strings.browserNotSupportVideo}\r\n </video>\r\n ) : (\r\n <div class=\"video-loading\">\r\n <div class=\"loading-spinner\"></div>\r\n <span>{this.strings.loadingVideo}</span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n } else if (key === 'file_url') {\r\n if ((value?.split?.(\",\")?.length || 0) > 1) {\r\n const fileList = value.split(',');\r\n const fileNames = this.message.inputs?.file_name?.split?.(',') || [];\r\n return (\r\n <div key={index}>\r\n {fileList.map((fileUrl, fileIndex) => {\r\n const fileName = fileNames[fileIndex] || this.getFileName(fileUrl);\r\n return this.renderFileItem(fileName, fileUrl, fileIndex);\r\n })}\r\n </div>\r\n );\r\n } else {\r\n // 优先使用 file_name 属性,如果不存在则从 file_url 提取文件名\r\n const fileName = this.message.inputs.file_name || this.getFileName(value);\r\n return this.renderFileItem(fileName, value, index);\r\n }\r\n } else if (key === 'file_urls') {\r\n // 始终将 file_urls 视为逗号分隔的字符串\r\n const fileList = typeof value === 'string' ? value.split(',') : [value.toString()];\r\n\r\n // 同样将 file_names 视为逗号分隔的字符串\r\n const fileNames = this.message.inputs.file_names ?\r\n (typeof this.message.inputs.file_names === 'string' ?\r\n this.message.inputs.file_names.split(',') :\r\n [this.message.inputs.file_names.toString()]) :\r\n [];\r\n\r\n return (\r\n <div key={index}>\r\n {fileList.map((fileUrl, fileIndex) => {\r\n // 使用对应的文件名,如果不存在则从URL提取\r\n const fileName = fileNames[fileIndex] || this.getFileName(fileUrl);\r\n return this.renderFileItem(fileName, fileUrl, fileIndex);\r\n })}\r\n </div>\r\n );\r\n } else if (key === 'job_info' || key === 'rule') {\r\n const title = key === 'job_info' ? this.strings.jobInfo : this.strings.evaluationRule;\r\n const content = typeof value === 'string' ? value : JSON.stringify(value, null, 2);\r\n\r\n return (\r\n <div key={index} class=\"file-card\" onClick={() => this.handleContentClick(title, content)}>\r\n <div class=\"file-card-icon\" style={{ background: '#0d75fb' }}>\r\n <img src=\"https://pub.pincaimao.com/static/web/images/home/i_position.png\"></img>\r\n </div>\r\n <div class=\"file-card-content\">\r\n <div class=\"file-card-type\">[{title}]</div>\r\n <div class=\"file-card-name\">{content.length > 50 ? content.substring(0, 50) + '...' : content}</div>\r\n </div>\r\n </div>\r\n );\r\n } else if (key === 'input') {\r\n return <div key={index} class=\"input-metadata\">{`${value}`}</div>;\r\n }\r\n }\r\n return null;\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n /**\r\n * 处理点赞操作\r\n */\r\n private async handleLike() {\r\n // 如果当前已经是点赞状态,则取消点赞\r\n const newStatus = this.feedbackStatus === 'like' ? null : 'like';\r\n\r\n // 发送请求到服务器\r\n await this.submitFeedback(newStatus);\r\n }\r\n\r\n /**\r\n * 处理点踩操作\r\n */\r\n private async handleDislike() {\r\n // 如果当前已经是点踩状态,则取消点踩\r\n const newStatus = this.feedbackStatus === 'dislike' ? null : 'dislike';\r\n\r\n // 发送请求到服务器\r\n await this.submitFeedback(newStatus);\r\n }\r\n\r\n /**\r\n * 提交反馈到服务器\r\n */\r\n private async submitFeedback(rating: 'like' | 'dislike' | null) {\r\n if (!this.message.id) {\r\n console.error('消息ID不存在,无法提交反馈');\r\n SentryReporter.captureError('消息ID不存在,无法提交反馈', {\r\n action: 'submitFeedback',\r\n component: 'components-chat-message',\r\n title: '无法提交反馈'\r\n });\r\n ErrorEventBus.emitError({\r\n error: '消息ID不存在,无法提交反馈',\r\n message: '消息ID不存在,无法提交反馈',\r\n });\r\n return;\r\n }\r\n\r\n try {\r\n const result = await sendHttpRequest({\r\n url: `/sdk/v1/chat/messages/${this.message.id}/feedbacks`,\r\n method: 'POST',\r\n data: {\r\n rating,\r\n bot_id: this.botId,\r\n content: '',\r\n }\r\n });\r\n if (result.success) {\r\n // 更新本地状态\r\n this.feedbackStatus = rating;\r\n\r\n // 更新消息对象中的反馈状态,创建新对象以确保引用变化\r\n if (this.message && this.message.feedback) {\r\n this.message = {\r\n ...this.message,\r\n feedback: {\r\n ...this.message.feedback,\r\n rating\r\n }\r\n };\r\n }\r\n\r\n console.log('反馈提交成功');\r\n } else {\r\n console.error('反馈提交失败:', result.message);\r\n }\r\n } catch (error) {\r\n console.error('提交反馈时发生错误:', error);\r\n SentryReporter.captureError(error, {\r\n action: 'submitFeedback',\r\n component: 'components-chat-message',\r\n title: '提交反馈失败'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * 处理重试操作\r\n */\r\n private handleRetry() {\r\n if (this.message.id) {\r\n this.retryRequest.emit(this.message.id);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div class=\"message-round\">\r\n {this.renderUserMessage()}\r\n {this.renderAssistantMessage()}\r\n </div>\r\n );\r\n }\r\n} "]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsChatMessage$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsChatMessage$1, d as defineCustomElement$1 } from './p-DIODYCBp.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsChatMessage = ComponentsChatMessage$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsDigitalHuman$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsDigitalHuman$1, d as defineCustomElement$1 } from './p-DMgFwD2E.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsDigitalHuman = ComponentsDigitalHuman$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsExportRecordsModal$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsExportRecordsModal$1, d as defineCustomElement$1 } from './p-BM3Uw2oP.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsExportRecordsModal = ComponentsExportRecordsModal$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsMobileInputBtn$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsMobileInputBtn$1, d as defineCustomElement$1 } from './p-DZZVv7rD.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsMobileInputBtn = ComponentsMobileInputBtn$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsMobileUploadBtn$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsMobileUploadBtn$1, d as defineCustomElement$1 } from './p-N4zIHizC.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsMobileUploadBtn = ComponentsMobileUploadBtn$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsOemVirtualChatModal$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsOemVirtualChatModal$1, d as defineCustomElement$1 } from './p-e6CMjPaS.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsOemVirtualChatModal = ComponentsOemVirtualChatModal$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsPositionSelector$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsPositionSelector$1, d as defineCustomElement$1 } from './p-bN8cV-6p.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsPositionSelector = ComponentsPositionSelector$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsThousandResumeWrapper$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsThousandResumeWrapper$1, d as defineCustomElement$1 } from './p-BcfnFx-r.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsThousandResumeWrapper = ComponentsThousandResumeWrapper$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsUpload$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsUpload$1, d as defineCustomElement$1 } from './p-CHYVHkii.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsUpload = ComponentsUpload$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ComponentsVoiceInputBtn$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { C as ComponentsVoiceInputBtn$1, d as defineCustomElement$1 } from './p-BmdNpdnF.js';
|
|
2
2
|
|
|
3
3
|
const ComponentsVoiceInputBtn = ComponentsVoiceInputBtn$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|