zj-plugin-intelligent 1.2.5-beta.36 → 1.2.5-beta.38

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.
@@ -1035,7 +1035,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
1035
1035
  /***/ (function(module, exports, __webpack_require__) {
1036
1036
 
1037
1037
  "use strict";
1038
- eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.staticRenderFns = exports.render = void 0;\nvar render = exports.render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"chat-main\"\n }, [_c(\"div\", {\n staticClass: \"chat-header\"\n }, [_c(\"div\", {\n staticClass: \"header-left\"\n }, [_vm.isMobile && _vm.activeSessionId ? _c(\"button\", {\n staticClass: \"mobile-back-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"go-back-to-list\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M15 18l-6-6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])]) : _vm.isMobile ? _c(\"button\", {\n staticClass: \"mobile-menu-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"toggle-sidebar\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18M3 12h18M3 18h18\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n }\n })])]) : _vm._e(), _vm.currentAgent && (_vm.activeSessionId || _vm.messages.length > 0) ? _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_c(\"div\", {\n staticClass: \"chat-agent-avatar-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"agent-list-avatar session-avatar\",\n class: {\n \"has-agent-img\": _vm.agentInfo.avatar\n },\n style: {\n background: _vm.agentInfo.color || \"linear-gradient(135deg, #1677ff, #4096ff)\"\n }\n }, [_vm.agentInfo.avatar ? _c(\"img\", {\n staticClass: \"avatar-pic\",\n attrs: {\n src: _vm.agentInfo.avatar,\n alt: \"\"\n }\n }) : [_vm._v(_vm._s(_vm.getInitial(_vm.agentInfo.agentName || _vm.agentInfo.agentCode)))]], 2)]), _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\"\n }, [_vm._v(_vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"agent-desc\"\n }, [_vm._v(_vm._s(_vm.currentAgentDesc))])])]) : _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_vm._m(0)])]), _vm.isMobile && !_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"header-actions\"\n }, [_c(\"button\", {\n staticClass: \"mobile-header-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"agent-jump-click\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 3C6.5 3 2 6.58 2 11c0 2.03.95 3.88 2.5 5.3L3 21l4.6-1.7c1.36.45 2.86.7 4.4.7 5.5 0 10-3.58 10-8s-4.5-8-10-8z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"8\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"12\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"16\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n })])])]) : _vm._e()]), _c(\"div\", {\n ref: \"messagesRef\",\n staticClass: \"chat-body\",\n on: {\n scroll: _vm.onScrollMessages\n }\n }, [!_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"welcome welcome-default\"\n }, [_c(\"div\", {\n staticClass: \"welcome-icon\"\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 48 48\",\n width: \"64\",\n height: \"64\"\n }\n }, [_c(\"path\", {\n attrs: {\n fill: \"#e6f4ff\",\n d: \"M40 22c-2.21 0-4 1.79-4 4v10H12c-2.21 0-4-1.79-4-4V14c0-2.21 1.79-4 4-4h24c2.21 0 4 1.79 4 4v8z\"\n }\n }), _c(\"path\", {\n attrs: {\n fill: \"#1677ff\",\n d: \"M36 8c-2.21 0-4 1.79-4 4v18H8c-2.21 0-4-1.79-4-4V12c0-2.21 1.79-4 4-4h28z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"20\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"28\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n })])]), _c(\"div\", {\n staticClass: \"welcome-title\"\n }, [_vm._v(\"欢迎使用 AI 助手\")]), _c(\"div\", {\n staticClass: \"welcome-text\"\n }, [_vm._v(\"从左侧选择一个会话,或搜索助手开始新的对话\")])]) : _vm.messages.length === 0 && !_vm.loadingSessionMsg ? _c(\"div\", {\n staticClass: \"chat-empty-welcome\"\n }, [_vm.agentInfo.hasOwnProperty(\"agentCode\") ? _c(\"div\", {\n staticClass: \"welcome-card\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar-box\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar\",\n class: {\n \"has-chat-agent-img\": _vm.agentInfo.avatar\n },\n style: _vm.getChatAvatarStyle(_vm.currentAgent, _vm.agentInfo.avatar)\n }, [!_vm.agentInfo.avatar ? [_vm._v(_vm._s(_vm.getInitial(_vm.currentAgentName)))] : _vm._e()], 2)]), _c(\"div\", {\n staticClass: \"welcome-text-group\"\n }, [_c(\"div\", {\n staticClass: \"text-sm\"\n }, [_vm._v(\"您好,我是\" + _vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"text-lg\"\n }, [_vm._v(_vm._s(_vm.greeting))])])]) : _vm._e(), _c(\"div\", {\n staticClass: \"guess-box\"\n }, [_c(\"div\", {\n staticClass: \"guess-title\"\n }, [_c(\"svg\", {\n attrs: {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 24 24\",\n fill: \"#1677ff\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\"\n }\n })]), _c(\"span\", [_vm._v(\"猜您想问\")])]), _c(\"div\", {\n staticClass: \"tag-wrap\"\n }, _vm._l(_vm.agentInfo.suggestedQuestions, function (tag) {\n return _c(\"div\", {\n key: tag,\n staticClass: \"quick-tag\",\n on: {\n click: function ($event) {\n return _vm.sendQuickMsg(tag);\n }\n }\n }, [_vm._v(\" \" + _vm._s(tag) + \" \")]);\n }), 0)])]) : _vm._e(), _vm._l(_vm.messages, function (m) {\n return _c(\"div\", {\n key: m.id,\n staticClass: \"msg-row\",\n class: m.role\n }, [_c(\"div\", {\n staticClass: \"msg-main\"\n }, [_c(\"div\", {\n staticClass: \"msg-content\"\n }, [_c(\"div\", {\n staticClass: \"bubble\",\n class: m.role\n }, [m.role === \"user\" && m._sttStatus ? _c(\"div\", {\n staticClass: \"stt-bubble-wrap\"\n }, [m._sttStatus === \"pending\" ? _c(\"span\", {\n staticClass: \"stt-spinner stt-outside-icon\"\n }) : m._sttStatus === \"error\" ? _c(\"span\", {\n staticClass: \"stt-error-icon stt-outside-icon\"\n }, [_vm._v(\"!\")]) : _vm._e(), _c(\"span\", {\n staticClass: \"stt-bubble-text\"\n }, [_vm._v(_vm._s(m._sttStatus === \"pending\" ? \"转化中...\" : \"语音转文字失败\"))])]) : _vm._e(), !m._sttStatus && m.thinking ? _c(\"details\", {\n staticClass: \"thinking-details\",\n attrs: {\n open: \"\"\n }\n }, [_c(\"summary\", {\n staticClass: \"thinking-summary\"\n }, [_vm._v(\"💭 思考过程\")]), _c(\"div\", {\n staticClass: \"thinking-body\",\n domProps: {\n innerHTML: _vm._s(_vm.escapeHtml(m.thinking))\n }\n })]) : _vm._e(), !m._sttStatus && m.content && m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderStreaming(m.content, m._key))\n }\n }) : _vm._e(), !m._sttStatus && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderMarkdown(m.content))\n }\n }) : _vm._e(), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !m._sttStatus && _vm.showToolInfo && m.toolCalls && m.toolCalls.length,\n expression: \"!m._sttStatus && showToolInfo && m.toolCalls && m.toolCalls.length\"\n }],\n staticClass: \"tool-calls\"\n }, _vm._l(m.toolCalls, function (tc, ti) {\n return _c(\"div\", {\n key: ti,\n staticClass: \"tool-item\"\n }, [_c(\"span\", {\n staticClass: \"tool-badge\"\n }, [_vm._v(\"工具返回\")]), _c(\"pre\", [_vm._v(_vm._s(tc.substring(0, 300)) + _vm._s(tc.length > 300 ? \"...\" : \"\"))])]);\n }), 0), m.loading ? _c(\"div\", {\n staticClass: \"typing\",\n class: _vm.waitClass\n }, [_c(\"span\", {\n staticClass: \"phrase\"\n }, [_vm._v(\"思考中\")]), _vm._m(1, true)]) : _vm._e()]), m.role === \"assistant\" && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"msg-actions\"\n }, [_c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制\"\n },\n on: {\n click: function ($event) {\n return _vm.copyText(m.content);\n }\n }\n }, [_vm._v(\"📋 复制\")]), _c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制为图片\"\n },\n on: {\n click: function ($event) {\n return _vm.copyAsImage(m.content);\n }\n }\n }, [_vm._v(\"🖼 复制为图片\")])]) : _vm._e()])])]);\n })], 2), _c(\"div\", {\n staticClass: \"chat-footer\"\n }, [_c(\"div\", {\n staticClass: \"input-area\"\n }, [_vm.isMobile ? _c(\"button\", {\n staticClass: \"voice-btn\",\n attrs: {\n disabled: _vm.sending\n },\n on: {\n click: _vm.toggleVoiceMode\n }\n }, [!_vm.voiceMode ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M9 20h6v2H9z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18v2H3V6zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\"\n }\n })])]) : _vm._e(), !_vm.voiceMode || !_vm.isMobile ? [_c(\"textarea\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.inputText,\n expression: \"inputText\"\n }],\n ref: \"taRef\",\n staticClass: \"chat-textarea\",\n attrs: {\n placeholder: \"请输入消息\",\n maxlength: \"300\",\n disabled: _vm.sending\n },\n domProps: {\n value: _vm.inputText\n },\n on: {\n input: [function ($event) {\n if ($event.target.composing) return;\n _vm.inputText = $event.target.value;\n }, _vm.autoResizeTextarea],\n focus: _vm.onInputFocus,\n keydown: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n _vm.isMobile ? _vm.newLine($event) : _vm.sendMessage();\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n return _vm.newLine.apply(null, arguments);\n }]\n }\n }), !_vm.sending ? _c(\"button\", {\n staticClass: \"send-btn\",\n class: {\n active: _vm.inputText.trim()\n },\n attrs: {\n disabled: _vm.sending || !_vm.inputText.trim()\n },\n on: {\n click: _vm.sendMessage\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"20\",\n height: \"20\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"\n }\n })])]) : _vm._e(), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()] : [_c(\"div\", {\n staticClass: \"hold-talk-btn\",\n class: {\n recording: _vm.isRecording\n },\n on: {\n touchstart: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchStart($event);\n },\n touchmove: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchMove($event);\n },\n touchend: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchEnd.apply(null, arguments);\n }\n }\n }, [!_vm.isRecording ? _c(\"svg\", {\n staticClass: \"hold-talk-icon\",\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n })]) : _vm._e(), _c(\"span\", [_vm._v(_vm._s(_vm.isRecording ? _vm.isCancelSwipe ? \"松开取消\" : \"松手发送\" : \"按住说话\"))])]), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()], _vm.showDownBtn && _vm.messages.length !== 0 ? _c(\"div\", {\n staticClass: \"scroll-bottom-wrap\"\n }, [_c(\"div\", {\n staticClass: \"scroll-bottom-btn\",\n on: {\n click: function ($event) {\n return _vm.scrollToBottom(true);\n }\n }\n }, [_vm.sending ? _c(\"div\", {\n staticClass: \"loading-circle\"\n }) : _vm._e(), _c(\"svg\", {\n attrs: {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M6 9l6 6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])])]) : _vm._e()], 2)]), _vm.isRecording ? _c(\"div\", {\n staticClass: \"voice-recording-overlay\"\n }, [_c(\"div\", {\n staticClass: \"voice-recording-card\"\n }, [_vm._m(2), _c(\"div\", {\n staticClass: \"voice-recording-duration\"\n }, [_vm._v(_vm._s(_vm.recordDuration)), _c(\"span\", {\n staticClass: \"unit\"\n }, [_vm._v(\"s\")])]), _c(\"div\", {\n staticClass: \"voice-recording-hint\",\n class: {\n cancel: _vm.isCancelSwipe\n }\n }, [_vm.isCancelSwipe ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#ff4d4f\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#999\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n }\n })]), _vm._v(\" \" + _vm._s(_vm.isCancelSwipe ? \"松开取消发送\" : \"手指上滑 取消发送\") + \" \")])])]) : _vm._e()]);\n};\nvar staticRenderFns = exports.staticRenderFns = [function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\",\n staticStyle: {\n color: \"#bbb\"\n }\n }, [_vm._v(\"请选择助手\")])]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"span\", {\n staticClass: \"dots\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"voice-recording-wave\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatDetail.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%224b66220e-vue-loader-template%22%7D!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--13-0!./node_modules/_babel-loader@8.4.1@babel-loader/lib!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
1038
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.staticRenderFns = exports.render = void 0;\nvar render = exports.render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"chat-main\"\n }, [_c(\"div\", {\n staticClass: \"chat-header\"\n }, [_c(\"div\", {\n staticClass: \"header-left\"\n }, [_vm.isMobile && _vm.activeSessionId ? _c(\"button\", {\n staticClass: \"mobile-back-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"go-back-to-list\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M15 18l-6-6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])]) : _vm.isMobile ? _c(\"button\", {\n staticClass: \"mobile-menu-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"toggle-sidebar\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18M3 12h18M3 18h18\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n }\n })])]) : _vm._e(), _vm.currentAgent && (_vm.activeSessionId || _vm.messages.length > 0) ? _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_c(\"div\", {\n staticClass: \"chat-agent-avatar-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"agent-list-avatar session-avatar\",\n class: {\n \"has-agent-img\": _vm.agentInfo.avatar\n },\n style: {\n background: _vm.agentInfo.color || \"linear-gradient(135deg, #1677ff, #4096ff)\"\n }\n }, [_vm.agentInfo.avatar ? _c(\"img\", {\n staticClass: \"avatar-pic\",\n attrs: {\n src: _vm.agentInfo.avatar,\n alt: \"\"\n }\n }) : [_vm._v(_vm._s(_vm.getInitial(_vm.agentInfo.agentName || _vm.agentInfo.agentCode)))]], 2)]), _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\"\n }, [_vm._v(_vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"agent-desc\"\n }, [_vm._v(_vm._s(_vm.currentAgentDesc))])])]) : _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_vm._m(0)])]), _vm.isMobile && !_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"header-actions\"\n }, [_c(\"button\", {\n staticClass: \"mobile-header-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"agent-jump-click\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 3C6.5 3 2 6.58 2 11c0 2.03.95 3.88 2.5 5.3L3 21l4.6-1.7c1.36.45 2.86.7 4.4.7 5.5 0 10-3.58 10-8s-4.5-8-10-8z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"8\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"12\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"16\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n })])])]) : _vm._e()]), _c(\"div\", {\n ref: \"messagesRef\",\n staticClass: \"chat-body\",\n on: {\n scroll: _vm.onScrollMessages\n }\n }, [!_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"welcome welcome-default\"\n }, [_c(\"div\", {\n staticClass: \"welcome-icon\"\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 48 48\",\n width: \"64\",\n height: \"64\"\n }\n }, [_c(\"path\", {\n attrs: {\n fill: \"#e6f4ff\",\n d: \"M40 22c-2.21 0-4 1.79-4 4v10H12c-2.21 0-4-1.79-4-4V14c0-2.21 1.79-4 4-4h24c2.21 0 4 1.79 4 4v8z\"\n }\n }), _c(\"path\", {\n attrs: {\n fill: \"#1677ff\",\n d: \"M36 8c-2.21 0-4 1.79-4 4v18H8c-2.21 0-4-1.79-4-4V12c0-2.21 1.79-4 4-4h28z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"20\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"28\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n })])]), _c(\"div\", {\n staticClass: \"welcome-title\"\n }, [_vm._v(\"欢迎使用 AI 助手\")]), _c(\"div\", {\n staticClass: \"welcome-text\"\n }, [_vm._v(\"从左侧选择一个会话,或搜索助手开始新的对话\")])]) : _vm.messages.length === 0 && !_vm.loadingSessionMsg ? _c(\"div\", {\n staticClass: \"chat-empty-welcome\"\n }, [_vm.agentInfo.hasOwnProperty(\"agentCode\") ? _c(\"div\", {\n staticClass: \"welcome-card\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar-box\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar\",\n class: {\n \"has-chat-agent-img\": _vm.agentInfo.avatar\n },\n style: _vm.getChatAvatarStyle(_vm.currentAgent, _vm.agentInfo.avatar)\n }, [!_vm.agentInfo.avatar ? [_vm._v(_vm._s(_vm.getInitial(_vm.currentAgentName)))] : _vm._e()], 2)]), _c(\"div\", {\n staticClass: \"welcome-text-group\"\n }, [_c(\"div\", {\n staticClass: \"text-sm\"\n }, [_vm._v(\"您好,我是\" + _vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"text-lg\"\n }, [_vm._v(_vm._s(_vm.greeting))])])]) : _vm._e(), _c(\"div\", {\n staticClass: \"guess-box\"\n }, [_c(\"div\", {\n staticClass: \"guess-title\"\n }, [_c(\"svg\", {\n attrs: {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 24 24\",\n fill: \"#1677ff\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\"\n }\n })]), _c(\"span\", [_vm._v(\"猜您想问\")])]), _c(\"div\", {\n staticClass: \"tag-wrap\"\n }, _vm._l(_vm.agentInfo.suggestedQuestions, function (tag) {\n return _c(\"div\", {\n key: tag,\n staticClass: \"quick-tag\",\n on: {\n click: function ($event) {\n return _vm.sendQuickMsg(tag);\n }\n }\n }, [_vm._v(\" \" + _vm._s(tag) + \" \")]);\n }), 0)])]) : _vm._e(), _vm._l(_vm.messages, function (m) {\n return _c(\"div\", {\n key: m.id,\n staticClass: \"msg-row\",\n class: m.role\n }, [_c(\"div\", {\n staticClass: \"msg-main\"\n }, [_c(\"div\", {\n staticClass: \"msg-content\"\n }, [_c(\"div\", {\n staticClass: \"bubble\",\n class: m.role\n }, [m.role === \"user\" && m._sttStatus ? _c(\"div\", {\n staticClass: \"stt-bubble-wrap\"\n }, [m._sttStatus === \"pending\" ? _c(\"span\", {\n staticClass: \"stt-spinner stt-outside-icon\"\n }) : m._sttStatus === \"error\" ? _c(\"span\", {\n staticClass: \"stt-error-icon stt-outside-icon\"\n }, [_vm._v(\"!\")]) : _vm._e(), _c(\"span\", {\n staticClass: \"stt-bubble-text\"\n }, [_vm._v(_vm._s(m._sttStatus === \"pending\" ? \"转化中...\" : \"语音转文字失败\"))])]) : _vm._e(), !m._sttStatus && m.thinking ? _c(\"details\", {\n staticClass: \"thinking-details\",\n attrs: {\n open: \"\"\n }\n }, [_c(\"summary\", {\n staticClass: \"thinking-summary\"\n }, [_vm._v(\"💭 思考过程\")]), _c(\"div\", {\n staticClass: \"thinking-body\",\n domProps: {\n innerHTML: _vm._s(_vm.escapeHtml(m.thinking))\n }\n })]) : _vm._e(), !m._sttStatus && m.content && m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderStreaming(m.content, m._key))\n }\n }) : _vm._e(), !m._sttStatus && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderMarkdown(m.content))\n }\n }) : _vm._e(), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !m._sttStatus && _vm.showToolInfo && m.toolCalls && m.toolCalls.length,\n expression: \"!m._sttStatus && showToolInfo && m.toolCalls && m.toolCalls.length\"\n }],\n staticClass: \"tool-calls\"\n }, _vm._l(m.toolCalls, function (tc, ti) {\n return _c(\"div\", {\n key: ti,\n staticClass: \"tool-item\"\n }, [_c(\"span\", {\n staticClass: \"tool-badge\"\n }, [_vm._v(\"工具返回\")]), _c(\"pre\", [_vm._v(_vm._s(tc.substring(0, 300)) + _vm._s(tc.length > 300 ? \"...\" : \"\"))])]);\n }), 0), m.loading ? _c(\"div\", {\n staticClass: \"typing\",\n class: _vm.waitClass\n }, [_c(\"span\", {\n staticClass: \"phrase\"\n }, [_vm._v(\"思考中\")]), _vm._m(1, true)]) : _vm._e()]), m.role === \"assistant\" && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"msg-actions\"\n }, [_c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制\"\n },\n on: {\n click: function ($event) {\n return _vm.copyText(m.content);\n }\n }\n }, [_vm._v(\"📋 复制\")]), _c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制为图片\"\n },\n on: {\n click: function ($event) {\n return _vm.copyAsImage(m.content);\n }\n }\n }, [_vm._v(\"🖼 复制为图片\")])]) : _vm._e()])])]);\n })], 2), _c(\"div\", {\n staticClass: \"chat-footer\"\n }, [_c(\"div\", {\n staticClass: \"input-area\"\n }, [_vm.isMobile ? _c(\"button\", {\n staticClass: \"voice-btn\",\n attrs: {\n disabled: \"\"\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18v2H3V6zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\"\n }\n })])]) : _vm._e(), !_vm.voiceMode || !_vm.isMobile ? [_c(\"textarea\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.inputText,\n expression: \"inputText\"\n }],\n ref: \"taRef\",\n staticClass: \"chat-textarea\",\n attrs: {\n placeholder: \"请输入消息\",\n maxlength: \"300\",\n disabled: _vm.sending\n },\n domProps: {\n value: _vm.inputText\n },\n on: {\n input: [function ($event) {\n if ($event.target.composing) return;\n _vm.inputText = $event.target.value;\n }, _vm.autoResizeTextarea],\n focus: _vm.onInputFocus,\n keydown: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n _vm.isMobile ? _vm.newLine($event) : _vm.sendMessage();\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n return _vm.newLine.apply(null, arguments);\n }]\n }\n }), !_vm.sending ? _c(\"button\", {\n staticClass: \"send-btn\",\n class: {\n active: _vm.inputText.trim()\n },\n attrs: {\n disabled: _vm.sending || !_vm.inputText.trim()\n },\n on: {\n click: _vm.sendMessage\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"20\",\n height: \"20\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"\n }\n })])]) : _vm._e(), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()] : [_c(\"div\", {\n staticClass: \"hold-talk-btn\",\n class: {\n recording: _vm.isRecording\n },\n on: {\n touchstart: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchStart($event);\n },\n touchmove: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchMove($event);\n },\n touchend: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchEnd.apply(null, arguments);\n }\n }\n }, [!_vm.isRecording ? _c(\"svg\", {\n staticClass: \"hold-talk-icon\",\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n })]) : _vm._e(), _c(\"span\", [_vm._v(_vm._s(_vm.isRecording ? _vm.isCancelSwipe ? \"松开取消\" : \"松手发送\" : \"按住说话\"))])]), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()], _vm.showDownBtn && _vm.messages.length !== 0 ? _c(\"div\", {\n staticClass: \"scroll-bottom-wrap\"\n }, [_c(\"div\", {\n staticClass: \"scroll-bottom-btn\",\n on: {\n click: function ($event) {\n return _vm.scrollToBottom(true);\n }\n }\n }, [_vm.sending ? _c(\"div\", {\n staticClass: \"loading-circle\"\n }) : _vm._e(), _c(\"svg\", {\n attrs: {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M6 9l6 6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])])]) : _vm._e()], 2)]), _vm.isRecording ? _c(\"div\", {\n staticClass: \"voice-recording-overlay\"\n }, [_c(\"div\", {\n staticClass: \"voice-recording-card\"\n }, [_vm._m(2), _c(\"div\", {\n staticClass: \"voice-recording-duration\"\n }, [_vm._v(_vm._s(_vm.recordDuration)), _c(\"span\", {\n staticClass: \"unit\"\n }, [_vm._v(\"s\")])]), _c(\"div\", {\n staticClass: \"voice-recording-hint\",\n class: {\n cancel: _vm.isCancelSwipe\n }\n }, [_vm.isCancelSwipe ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#ff4d4f\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#999\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n }\n })]), _vm._v(\" \" + _vm._s(_vm.isCancelSwipe ? \"松开取消发送\" : \"手指上滑 取消发送\") + \" \")])])]) : _vm._e()]);\n};\nvar staticRenderFns = exports.staticRenderFns = [function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\",\n staticStyle: {\n color: \"#bbb\"\n }\n }, [_vm._v(\"请选择助手\")])]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"span\", {\n staticClass: \"dots\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"voice-recording-wave\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatDetail.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%224b66220e-vue-loader-template%22%7D!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--13-0!./node_modules/_babel-loader@8.4.1@babel-loader/lib!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
1039
1039
 
1040
1040
  /***/ }),
1041
1041
 
@@ -3346,7 +3346,7 @@ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../.
3346
3346
  /*! no static exports found */
3347
3347
  /***/ (function(module, exports, __webpack_require__) {
3348
3348
 
3349
- eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n/* ── Sidebar ── */\\n.chat-sidebar[data-v-46646bec] {\\n width: 300px;\\n min-width: 300px;\\n background: #fff;\\n border-right: 1px solid #e8e8e8;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 14px 8px 14px 16px;\\n border-bottom: 1px solid #e8e8e8;\\n flex-shrink: 0;\\n}\\n.sidebar-header i[data-v-46646bec]{\\n font-size: 20px;\\n cursor: pointer;\\n}\\n.sidebar-header img[data-v-46646bec]{\\n cursor: pointer;\\n}\\n.sidebar-title[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 600;\\n color: #333;\\n}\\n.sidebar-search[data-v-46646bec] {\\n padding: 8px 16px;\\n flex-shrink: 0;\\n position: relative;\\n z-index: 20;\\n}\\n.sidebar-search .search-wrap[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n position: relative;\\n}\\n.sidebar-search .search-icon[data-v-46646bec] {\\n position: absolute;\\n left: 12px;\\n flex-shrink: 0;\\n pointer-events: none;\\n}\\n.sidebar-search .search-input[data-v-46646bec] {\\n width: 100%;\\n height: 32px;\\n border-radius: 16px;\\n background: #f5f5f5;\\n border: 1px solid transparent;\\n font-size: 13px;\\n padding: 0 32px 0 34px;\\n outline: none;\\n box-sizing: border-box;\\n transition: all 0.2s;\\n}\\n.sidebar-search .search-input[data-v-46646bec]:focus {\\n background: #fff;\\n border: 1px solid #1677ff;\\n}\\n.sidebar-search .search-clear[data-v-46646bec] {\\n position: absolute;\\n right: 10px;\\n cursor: pointer;\\n flex-shrink: 0;\\n}\\n.search-suggestions[data-v-46646bec] {\\n position: absolute;\\n top: 100%;\\n left: 16px;\\n right: 16px;\\n background: #fff;\\n border: 1px solid #e8e8e8;\\n border-radius: 8px;\\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\\n z-index: 100;\\n max-height: 240px;\\n overflow-y: auto;\\n margin-top: 4px;\\n}\\n.suggestion-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 10px 12px;\\n cursor: pointer;\\n transition: background 0.15s;\\n}\\n.suggestion-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px;\\n height: 28px;\\n border-radius: 6px;\\n background: linear-gradient(135deg, #1677ff, #4096ff);\\n color: #fff;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 13px;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n.suggestion-name[data-v-46646bec] {\\n font-size: 14px;\\n font-weight: 500;\\n color: #333;\\n white-space: nowrap;\\n}\\n.suggestion-desc[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.sidebar-list[data-v-46646bec] {\\n flex: 1;\\n overflow-y: auto;\\n padding: 8px 0;\\n}\\n.session-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n padding: 6px 16px;\\n padding-bottom: 10px;\\n cursor: pointer;\\n border-bottom: 1px solid #f5f5f5;\\n transition: background 0.15s;\\n position: relative;\\n gap: 10px;\\n border-radius: 4px;\\n touch-action: manipulation;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-left-item[data-v-46646bec] {\\n margin-left: 5px;\\n}\\n.session-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.session-item.active[data-v-46646bec] {\\n background: #F5F5F5;\\n}\\n.session-avatar[data-v-46646bec] {\\n width: 44px !important;\\n height: 44px !important;\\n border-radius: 50% !important;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px !important;\\n font-weight: 600;\\n color: #fff;\\n flex-shrink: 0;\\n overflow: hidden;\\n}\\n.avatar-pic[data-v-46646bec] {\\n width: 85%;\\n height: 85%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.session-info[data-v-46646bec] {\\n flex: 1;\\n min-width: 0;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-agent[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 500;\\n color: #333;\\n margin-bottom: 2px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-preview[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-time[data-v-46646bec] {\\n font-size: 11px;\\n color: #bbb;\\n flex-shrink: 0;\\n margin-left: 8px;\\n margin-right: 4px;\\n}\\n.session-delete[data-v-46646bec] {\\n position: absolute;\\n right: 4px;\\n top: 20px;\\n transform: translateY(-50%);\\n opacity: 0;\\n transition: opacity 0.15s;\\n width: 28px;\\n height: 28px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border: none;\\n background: transparent;\\n padding: 0;\\n color: #333;\\n cursor: pointer;\\n}\\n.session-delete svg[data-v-46646bec] {\\n color: #333;\\n}\\n.session-item:hover .session-delete[data-v-46646bec] {\\n opacity: 1;\\n}\\n.sidebar-loading[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n gap: 12px;\\n}\\n.sidebar-loading .loading-spinner[data-v-46646bec] {\\n width: 24px;\\n height: 24px;\\n border: 2.5px solid #e8e8e8;\\n border-top-color: #1677ff;\\n border-radius: 50%;\\n animation: sidebar-spin-46646bec 0.7s linear infinite;\\n}\\n@keyframes sidebar-spin-46646bec {\\nto { transform: rotate(360deg);\\n}\\n}\\n.sidebar-empty[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n}\\n.empty-icon[data-v-46646bec] {\\n font-size: 36px;\\n margin-bottom: 8px;\\n}\\n.empty-hint[data-v-46646bec] {\\n font-size: 12px;\\n color: #d9d9d9;\\n margin-top: 4px;\\n}\\n\\n/* agent-list-avatar base */\\n.agent-list-avatar[data-v-46646bec] {\\n background-repeat: no-repeat;\\n background-position: center;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: #fff;\\n font-size: 22px;\\n font-weight: 600;\\n border-radius: 8px;\\n width: 92px;\\n height: 106px;\\n}\\n.agent-list-avatar.has-agent-img[data-v-46646bec] {\\n background-size: cover;\\n}\\n\\n/* suggestion-avatar overrides */\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px !important;\\n height: 28px !important;\\n border-radius: 8px !important;\\n font-size: 12px !important;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n\\n/* Desktop responsive */\\n.chat-sidebar[data-v-46646bec] {\\n width: min(300px, 32vw);\\n}\\n\\n/* ── Mobile (max-width: 768px) ── */\\n@media screen and (max-width: 768px) {\\n.chat-sidebar[data-v-46646bec] {\\n position: absolute;\\n inset: 0 auto 0 0;\\n width: min(82vw, 320px);\\n min-width: auto;\\n max-width: 320px;\\n height: 100%;\\n border-right: none;\\n box-shadow: 8px 0 24px rgba(15, 23, 42, 0.12);\\n transform: translateX(-100%);\\n transition: transform 0.24s ease;\\n}\\n.chat-sidebar.open[data-v-46646bec] {\\n transform: translateX(0);\\n}\\n.sidebar-back-btn[data-v-46646bec] {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 36px;\\n height: 36px;\\n border: none;\\n border-radius: 10px;\\n background: transparent;\\n color: #333;\\n cursor: pointer;\\n flex-shrink: 0;\\n position: absolute;\\n left: 8px;\\n top: 50%;\\n transform: translateY(-50%);\\n padding: 0;\\n}\\n.sidebar-back-btn svg[data-v-46646bec] {\\n display: block;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar[data-v-46646bec] {\\n position: relative !important;\\n width: 100% !important;\\n max-width: 100% !important;\\n min-width: 100% !important;\\n height: 100%;\\n transform: translateX(0) !important;\\n box-shadow: none !important;\\n border-right: none;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 14px 16px;\\n position: relative;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header img[data-v-46646bec] {\\n position: absolute;\\n right: 16px;\\n top: 50%;\\n transform: translateY(-50%);\\n width: 22px;\\n height: 22px;\\n -o-object-fit: contain;\\n object-fit: contain;\\n cursor: pointer;\\n}\\n.session-delete[data-v-46646bec] {\\n display: none;\\n}\\n\\n /* 搜索清除按钮放大触摸区域 */\\n.sidebar-search .search-clear[data-v-46646bec] {\\n width: 20px;\\n height: 20px;\\n padding: 12px;\\n right: -2px;\\n box-sizing: content-box;\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatSidebar.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--7-oneOf-1-1!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--7-oneOf-1-2!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
3349
+ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n/* ── Sidebar ── */\\n.chat-sidebar[data-v-46646bec] {\\n width: 300px;\\n min-width: 300px;\\n background: #fff;\\n border-right: 1px solid #e8e8e8;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 14px 8px 14px 16px;\\n border-bottom: 1px solid #e8e8e8;\\n flex-shrink: 0;\\n}\\n.sidebar-header i[data-v-46646bec]{\\n font-size: 20px;\\n cursor: pointer;\\n}\\n.sidebar-header img[data-v-46646bec]{\\n cursor: pointer;\\n}\\n.sidebar-title[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 600;\\n color: #333;\\n}\\n.sidebar-search[data-v-46646bec] {\\n padding: 8px 16px;\\n flex-shrink: 0;\\n position: relative;\\n z-index: 20;\\n}\\n.sidebar-search .search-wrap[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n position: relative;\\n}\\n.sidebar-search .search-icon[data-v-46646bec] {\\n position: absolute;\\n left: 12px;\\n flex-shrink: 0;\\n pointer-events: none;\\n}\\n.sidebar-search .search-input[data-v-46646bec] {\\n width: 100%;\\n height: 32px;\\n border-radius: 16px;\\n background: #f5f5f5;\\n border: 1px solid transparent;\\n font-size: 13px;\\n padding: 0 32px 0 34px;\\n outline: none;\\n box-sizing: border-box;\\n transition: all 0.2s;\\n}\\n.sidebar-search .search-input[data-v-46646bec]:focus {\\n background: #fff;\\n border: 1px solid #1677ff;\\n}\\n.sidebar-search .search-clear[data-v-46646bec] {\\n position: absolute;\\n right: 10px;\\n cursor: pointer;\\n flex-shrink: 0;\\n}\\n.search-suggestions[data-v-46646bec] {\\n position: absolute;\\n top: 100%;\\n left: 16px;\\n right: 16px;\\n background: #fff;\\n border: 1px solid #e8e8e8;\\n border-radius: 8px;\\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\\n z-index: 100;\\n max-height: 240px;\\n overflow-y: auto;\\n margin-top: 4px;\\n}\\n.suggestion-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 10px 12px;\\n cursor: pointer;\\n transition: background 0.15s;\\n}\\n.suggestion-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px;\\n height: 28px;\\n border-radius: 6px;\\n background: linear-gradient(135deg, #1677ff, #4096ff);\\n color: #fff;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 13px;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n.suggestion-name[data-v-46646bec] {\\n font-size: 14px;\\n font-weight: 500;\\n color: #333;\\n white-space: nowrap;\\n}\\n.suggestion-desc[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.sidebar-list[data-v-46646bec] {\\n flex: 1;\\n overflow-y: auto;\\n padding: 8px 0;\\n}\\n.session-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n padding: 6px 16px;\\n padding-bottom: 10px;\\n cursor: pointer;\\n border-bottom: 1px solid #f5f5f5;\\n transition: background 0.15s;\\n position: relative;\\n gap: 10px;\\n border-radius: 4px;\\n touch-action: manipulation;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-left-item[data-v-46646bec] {\\n margin-left: 5px;\\n}\\n.session-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.session-item.active[data-v-46646bec] {\\n background: #F5F5F5;\\n}\\n.session-avatar[data-v-46646bec] {\\n width: 44px !important;\\n height: 44px !important;\\n border-radius: 50% !important;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px !important;\\n font-weight: 600;\\n color: #fff;\\n flex-shrink: 0;\\n overflow: hidden;\\n}\\n.avatar-pic[data-v-46646bec] {\\n width: 85%;\\n height: 85%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.session-info[data-v-46646bec] {\\n flex: 1;\\n min-width: 0;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-agent[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 500;\\n color: #333;\\n margin-bottom: 2px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-preview[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-time[data-v-46646bec] {\\n font-size: 11px;\\n color: #bbb;\\n flex-shrink: 0;\\n margin-left: 8px;\\n margin-right: 4px;\\n}\\n.session-delete[data-v-46646bec] {\\n position: absolute;\\n right: 4px;\\n top: 20px;\\n transform: translateY(-50%);\\n opacity: 0;\\n transition: opacity 0.15s;\\n width: 28px;\\n height: 28px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border: none;\\n background: transparent;\\n padding: 0;\\n color: #333;\\n cursor: pointer;\\n}\\n.session-delete svg[data-v-46646bec] {\\n color: #333;\\n}\\n.session-item:hover .session-delete[data-v-46646bec] {\\n opacity: 1;\\n}\\n.sidebar-loading[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n gap: 12px;\\n}\\n.sidebar-loading .loading-spinner[data-v-46646bec] {\\n width: 24px;\\n height: 24px;\\n border: 2.5px solid #e8e8e8;\\n border-top-color: #1677ff;\\n border-radius: 50%;\\n animation: sidebar-spin-46646bec 0.7s linear infinite;\\n}\\n@keyframes sidebar-spin-46646bec {\\nto { transform: rotate(360deg);\\n}\\n}\\n.sidebar-empty[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n}\\n.empty-icon[data-v-46646bec] {\\n font-size: 36px;\\n margin-bottom: 8px;\\n}\\n.empty-hint[data-v-46646bec] {\\n font-size: 12px;\\n color: #d9d9d9;\\n margin-top: 4px;\\n}\\n\\n/* agent-list-avatar base */\\n.agent-list-avatar[data-v-46646bec] {\\n background-repeat: no-repeat;\\n background-position: center;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: #fff;\\n font-size: 22px;\\n font-weight: 600;\\n border-radius: 8px;\\n width: 92px;\\n height: 106px;\\n}\\n.agent-list-avatar.has-agent-img[data-v-46646bec] {\\n background-size: cover;\\n}\\n\\n/* suggestion-avatar overrides */\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px !important;\\n height: 28px !important;\\n border-radius: 8px !important;\\n font-size: 12px !important;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n\\n/* Desktop responsive */\\n.chat-sidebar[data-v-46646bec] {\\n width: min(300px, 32vw);\\n}\\n\\n/* ── Mobile (max-width: 768px) ── */\\n@media screen and (max-width: 768px) {\\n.chat-sidebar[data-v-46646bec] {\\n position: absolute;\\n inset: 0 auto 0 0;\\n width: min(82vw, 320px);\\n min-width: auto;\\n max-width: 320px;\\n height: 100%;\\n border-right: none;\\n transform: translateX(-100%);\\n transition: transform 0.24s ease;\\n}\\n.chat-sidebar.open[data-v-46646bec] {\\n transform: translateX(0);\\n}\\n.sidebar-back-btn[data-v-46646bec] {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 36px;\\n height: 36px;\\n border: none;\\n border-radius: 10px;\\n background: transparent;\\n color: #333;\\n cursor: pointer;\\n flex-shrink: 0;\\n position: absolute;\\n left: 8px;\\n top: 50%;\\n transform: translateY(-50%);\\n padding: 0;\\n}\\n.sidebar-back-btn svg[data-v-46646bec] {\\n display: block;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar[data-v-46646bec] {\\n position: relative !important;\\n width: 100% !important;\\n max-width: 100% !important;\\n min-width: 100% !important;\\n height: 100%;\\n transform: translateX(0) !important;\\n box-shadow: none !important;\\n border-right: none;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 14px 16px;\\n position: relative;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header img[data-v-46646bec] {\\n position: absolute;\\n right: 16px;\\n top: 50%;\\n transform: translateY(-50%);\\n width: 22px;\\n height: 22px;\\n -o-object-fit: contain;\\n object-fit: contain;\\n cursor: pointer;\\n}\\n.session-delete[data-v-46646bec] {\\n display: none;\\n}\\n\\n /* 搜索清除按钮放大触摸区域 */\\n.sidebar-search .search-clear[data-v-46646bec] {\\n width: 20px;\\n height: 20px;\\n padding: 12px;\\n right: -2px;\\n box-sizing: content-box;\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatSidebar.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--7-oneOf-1-1!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--7-oneOf-1-2!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
3350
3350
 
3351
3351
  /***/ }),
3352
3352
 
@@ -12608,7 +12608,7 @@ eval("module.exports = function(originalModule) {\n\tif (!originalModule.webpack
12608
12608
  /*! exports provided: name, version, main, private, scripts, dependencies, devDependencies, browserslist, directories, keywords, license, default */
12609
12609
  /***/ (function(module) {
12610
12610
 
12611
- eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.36\\\",\\\"main\\\":\\\"lib/ZjPluginIntelligent.umd.min.js\\\",\\\"private\\\":false,\\\"scripts\\\":{\\\"serve\\\":\\\"vue-cli-service serve\\\",\\\"build\\\":\\\"vue-cli-service build\\\",\\\"lib\\\":\\\"vue-cli-service build --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\",\\\"lib:test\\\":\\\"vue-cli-service build --mode test --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\"},\\\"dependencies\\\":{\\\"html2canvas\\\":\\\"^1.4.1\\\",\\\"markdown-it\\\":\\\"^14.1.0\\\"},\\\"devDependencies\\\":{\\\"@babel/preset-env\\\":\\\"^7.14.9\\\",\\\"@vue/cli-plugin-babel\\\":\\\"~4.5.0\\\",\\\"@vue/cli-plugin-eslint\\\":\\\"^4.5.13\\\",\\\"@vue/cli-plugin-vuex\\\":\\\"~4.5.0\\\",\\\"@vue/cli-service\\\":\\\"~4.5.0\\\",\\\"axios\\\":\\\"^0.27.2\\\",\\\"babel-eslint\\\":\\\"^10.1.0\\\",\\\"babel-plugin-component\\\":\\\"^1.1.1\\\",\\\"compression-webpack-plugin\\\":\\\"^6.0.3\\\",\\\"core-js\\\":\\\"^3.6.5\\\",\\\"element-ui\\\":\\\"^2.15.4\\\",\\\"eslint\\\":\\\"^7.30.0\\\",\\\"eslint-plugin-vue\\\":\\\"^7.13.0\\\",\\\"js-cookie\\\":\\\"^2.2.1\\\",\\\"node-sass\\\":\\\"^4.12.0\\\",\\\"obs-upload\\\":\\\"^1.0.4-alpha.0\\\",\\\"reconnecting-websocket\\\":\\\"^4.4.0\\\",\\\"sass-loader\\\":\\\"^8.0.2\\\",\\\"snowflake-id\\\":\\\"^1.1.0\\\",\\\"vue\\\":\\\"^2.6.11\\\",\\\"vue-template-compiler\\\":\\\"^2.6.11\\\",\\\"vuex\\\":\\\"^3.4.0\\\",\\\"pako\\\":\\\"^2.1.0\\\",\\\"webpack-bundle-analyzer\\\":\\\"^4.4.2\\\"},\\\"browserslist\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"not dead\\\"],\\\"directories\\\":{\\\"lib\\\":\\\"lib\\\"},\\\"keywords\\\":[],\\\"license\\\":\\\"ISC\\\"}\");\n\n//# sourceURL=webpack://ZjPluginIntelligent/./package.json?");
12611
+ eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.38\\\",\\\"main\\\":\\\"lib/ZjPluginIntelligent.umd.min.js\\\",\\\"private\\\":false,\\\"scripts\\\":{\\\"serve\\\":\\\"vue-cli-service serve\\\",\\\"build\\\":\\\"vue-cli-service build\\\",\\\"lib\\\":\\\"vue-cli-service build --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\",\\\"lib:test\\\":\\\"vue-cli-service build --mode test --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\"},\\\"dependencies\\\":{\\\"html2canvas\\\":\\\"^1.4.1\\\",\\\"markdown-it\\\":\\\"^14.1.0\\\"},\\\"devDependencies\\\":{\\\"@babel/preset-env\\\":\\\"^7.14.9\\\",\\\"@vue/cli-plugin-babel\\\":\\\"~4.5.0\\\",\\\"@vue/cli-plugin-eslint\\\":\\\"^4.5.13\\\",\\\"@vue/cli-plugin-vuex\\\":\\\"~4.5.0\\\",\\\"@vue/cli-service\\\":\\\"~4.5.0\\\",\\\"axios\\\":\\\"^0.27.2\\\",\\\"babel-eslint\\\":\\\"^10.1.0\\\",\\\"babel-plugin-component\\\":\\\"^1.1.1\\\",\\\"compression-webpack-plugin\\\":\\\"^6.0.3\\\",\\\"core-js\\\":\\\"^3.6.5\\\",\\\"element-ui\\\":\\\"^2.15.4\\\",\\\"eslint\\\":\\\"^7.30.0\\\",\\\"eslint-plugin-vue\\\":\\\"^7.13.0\\\",\\\"js-cookie\\\":\\\"^2.2.1\\\",\\\"node-sass\\\":\\\"^4.12.0\\\",\\\"obs-upload\\\":\\\"^1.0.4-alpha.0\\\",\\\"reconnecting-websocket\\\":\\\"^4.4.0\\\",\\\"sass-loader\\\":\\\"^8.0.2\\\",\\\"snowflake-id\\\":\\\"^1.1.0\\\",\\\"vue\\\":\\\"^2.6.11\\\",\\\"vue-template-compiler\\\":\\\"^2.6.11\\\",\\\"vuex\\\":\\\"^3.4.0\\\",\\\"pako\\\":\\\"^2.1.0\\\",\\\"webpack-bundle-analyzer\\\":\\\"^4.4.2\\\"},\\\"browserslist\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"not dead\\\"],\\\"directories\\\":{\\\"lib\\\":\\\"lib\\\"},\\\"keywords\\\":[],\\\"license\\\":\\\"ISC\\\"}\");\n\n//# sourceURL=webpack://ZjPluginIntelligent/./package.json?");
12612
12612
 
12613
12613
  /***/ }),
12614
12614
 
@@ -13500,7 +13500,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
13500
13500
  /***/ (function(module, exports, __webpack_require__) {
13501
13501
 
13502
13502
  "use strict";
13503
- eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.getAuth = getAuth;\nexports.setAuth = setAuth;\nexports.setBaseURL = setBaseURL;\nexports.setToken = setToken;\nexports.signQueryParams = signQueryParams;\n__webpack_require__(/*! core-js/modules/es.error.cause.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.error.cause.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.constructor.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.filter.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.map.js\");\nvar _axios = _interopRequireDefault(__webpack_require__(/*! axios */ \"./node_modules/_axios@0.27.2@axios/index.js\"));\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _message = __webpack_require__(/*! @lib/utils/message.js */ \"./src/lib/utils/message.js\");\n/*\r\n * @Author: 高瑞廷 2419056691@qq.com\r\n * @Date: 2026-06-04 11:27:13\r\n * @LastEditors: 高瑞廷 2419056691@qq.com\r\n * @LastEditTime: 2026-07-17 14:22:37\r\n * @FilePath: \\zjkj-nodejs-npm_customer-client\\src\\lib\\utils\\request.js\r\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r\n */\n\nlet runtimeAK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_AK || '';\nlet runtimeSK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_SK || '';\nlet runtimeToken = '';\n\n// let _user = '202007091611352'\n// let _companyNo = '201912241159840'\nlet _user = '';\nlet _companyNo = '';\nlet runtimeBaseURL = \"https://ai.jybtech.cn\" || false;\nconst CryptoJS = __webpack_require__(/*! crypto-js */ \"./node_modules/_crypto-js@4.2.0@crypto-js/index.js\");\nconst service = _axios.default.create({\n baseURL: runtimeBaseURL,\n timeout: 15000\n});\nfunction hmacSha256Base64(rawSignStr, sk) {\n const hmac = CryptoJS.HmacSHA256(rawSignStr, sk);\n // 转为 Base64\n return CryptoJS.enc.Base64.stringify(hmac);\n}\nfunction setAuth(ak, sk, user, companyNo, token) {\n runtimeAK = ak || '';\n runtimeSK = sk || '';\n _user = user;\n _companyNo = companyNo;\n runtimeToken = token || '';\n}\nfunction setToken(token) {\n runtimeToken = token || '';\n}\nfunction getAuth() {\n return {\n ak: runtimeAK,\n sk: runtimeSK,\n token: runtimeToken,\n user: _user,\n companyNo: _companyNo\n };\n}\nfunction setBaseURL(url) {\n runtimeBaseURL = url || '';\n service.defaults.baseURL = runtimeBaseURL;\n}\nfunction signQueryParams(params, secretKey) {\n const keys = Object.keys(params).filter(k => k !== 'ak' && k !== 'sign').sort();\n const raw = keys.map(k => `${k}=${params[k] || ''}`).join('&');\n return hmacSha256Base64(raw, secretKey);\n}\nservice.interceptors.request.use(config => {\n // 流式接口跳过 Header 签名\n if (config.url.includes('/chat/stream')) {\n return config;\n }\n const ts = Date.now().toString();\n const token = runtimeToken || (0, _cookie.getToken)();\n const externalUser = _user || '';\n const signParts = [];\n // 1. 第一位:token(有值才加入)\n if (_companyNo) {\n signParts.push(`companyNo=${_companyNo}`);\n }\n if (token) {\n signParts.push(`token=${token}`);\n }\n // 2. 第二位:user(有值才加入)\n if (externalUser) {\n signParts.push(`user=${externalUser}`);\n }\n // 3. 第三位:ts(必选,永远存在)\n signParts.push(`ts=${ts}`);\n\n // 拼接最终待签字符串\n const signStr = signParts.join('&');\n // 计算签名\n const sign = hmacSha256Base64(signStr, runtimeSK);\n if (_companyNo) {\n config.headers['X-Company-No'] = _companyNo;\n }\n\n // 设置请求头\n config.headers['X-AK'] = runtimeAK;\n config.headers['X-Ts'] = ts;\n config.headers['X-Sign'] = sign;\n if (token) {\n config.headers['X-Auth-Token'] = `${token}`;\n config.headers.Authorization = `Bearer ${token}`;\n }\n config.headers['X-External-User'] = externalUser;\n config.headers['Content-Type'] = 'application/json';\n\n // console.log('排序后key:', sortedKeys)\n\n return config;\n}, error => Promise.reject(error));\nservice.interceptors.response.use(response => {\n const res = response.data;\n if (res.code === 200) {\n return res;\n } else if (res.code === 40101) {\n (0, _message.showMessage)('登录已过期,请重新登录');\n return Promise.reject(new Error(res.message));\n } else {\n (0, _message.showMessage)(res.message || '请求失败');\n return Promise.reject(new Error(res.message));\n }\n}, error => {\n (0, _message.showMessage)(error.message || '网络异常');\n return Promise.reject(error);\n});\nvar _default = exports.default = service;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/utils/request.js?");
13503
+ eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.getAuth = getAuth;\nexports.setAuth = setAuth;\nexports.setBaseURL = setBaseURL;\nexports.setToken = setToken;\nexports.signQueryParams = signQueryParams;\n__webpack_require__(/*! core-js/modules/es.error.cause.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.error.cause.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.constructor.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.filter.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.map.js\");\nvar _axios = _interopRequireDefault(__webpack_require__(/*! axios */ \"./node_modules/_axios@0.27.2@axios/index.js\"));\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _message = __webpack_require__(/*! @lib/utils/message.js */ \"./src/lib/utils/message.js\");\n/*\r\n * @Author: 高瑞廷 2419056691@qq.com\r\n * @Date: 2026-06-04 11:27:13\r\n * @LastEditors: 高瑞廷 2419056691@qq.com\r\n * @LastEditTime: 2026-07-20 11:11:13\r\n * @FilePath: \\zjkj-nodejs-npm_customer-client\\src\\lib\\utils\\request.js\r\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r\n */\n\nlet runtimeAK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_AK || '';\nlet runtimeSK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_SK || '';\nlet runtimeToken = '';\n\n// let _user = '202007091611352'\n// let _companyNo = '201912241159840'\nlet _user = '';\nlet _companyNo = '';\nlet runtimeBaseURL = \"https://ai.jybtech.cn\" || false;\nconst CryptoJS = __webpack_require__(/*! crypto-js */ \"./node_modules/_crypto-js@4.2.0@crypto-js/index.js\");\nconst service = _axios.default.create({\n baseURL: runtimeBaseURL,\n timeout: 15000\n});\nfunction hmacSha256Base64(rawSignStr, sk) {\n const hmac = CryptoJS.HmacSHA256(rawSignStr, sk);\n // 转为 Base64\n return CryptoJS.enc.Base64.stringify(hmac);\n}\nfunction setAuth(ak, sk, user, companyNo, token) {\n runtimeAK = ak || '';\n runtimeSK = sk || '';\n _user = user;\n _companyNo = companyNo;\n runtimeToken = token || '';\n}\nfunction setToken(token) {\n runtimeToken = token || '';\n}\nfunction getAuth() {\n return {\n ak: runtimeAK,\n sk: runtimeSK,\n token: runtimeToken,\n user: _user,\n companyNo: _companyNo\n };\n}\nfunction setBaseURL(url) {\n runtimeBaseURL = url || '';\n service.defaults.baseURL = runtimeBaseURL;\n}\nfunction signQueryParams(params, secretKey) {\n const keys = Object.keys(params).filter(k => k !== 'ak' && k !== 'sign').sort();\n const raw = keys.map(k => `${k}=${params[k] || ''}`).join('&');\n return hmacSha256Base64(raw, secretKey);\n}\nservice.interceptors.request.use(config => {\n // 流式接口跳过 Header 签名\n if (config.url.includes('/chat/stream')) {\n return config;\n }\n const ts = Date.now().toString();\n const token = runtimeToken || (0, _cookie.getToken)();\n const externalUser = _user || '';\n const signParts = [];\n // 1. 第一位:token(有值才加入)\n if (_companyNo) {\n signParts.push(`companyNo=${_companyNo}`);\n }\n if (token) {\n signParts.push(`token=${token}`);\n }\n // 2. 第二位:user(有值才加入)\n if (externalUser) {\n signParts.push(`user=${externalUser}`);\n }\n // 3. 第三位:ts(必选,永远存在)\n signParts.push(`ts=${ts}`);\n\n // 拼接最终待签字符串\n const signStr = signParts.join('&');\n // 计算签名\n const sign = hmacSha256Base64(signStr, runtimeSK);\n if (_companyNo) {\n config.headers['X-Company-No'] = _companyNo;\n }\n\n // 设置请求头\n config.headers['X-AK'] = runtimeAK;\n config.headers['X-Ts'] = ts;\n config.headers['X-Sign'] = sign;\n if (token) {\n config.headers['X-Auth-Token'] = `${token}`;\n config.headers.Authorization = `Bearer ${token}`;\n }\n config.headers['X-External-User'] = externalUser;\n config.headers['Content-Type'] = 'application/json';\n\n // console.log('排序后key:', sortedKeys)\n\n return config;\n}, error => Promise.reject(error));\nservice.interceptors.response.use(response => {\n const res = response.data;\n if (res.code === 200) {\n return res;\n } else if (res.code === 40101) {\n (0, _message.showMessage)('登录已过期,请重新登录');\n return Promise.reject(new Error(res.message));\n } else {\n (0, _message.showMessage)(res.message || '请求失败');\n return Promise.reject(new Error(res.message));\n }\n}, error => {\n (0, _message.showMessage)(error.message || '网络异常');\n return Promise.reject(error);\n});\nvar _default = exports.default = service;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/utils/request.js?");
13504
13504
 
13505
13505
  /***/ }),
13506
13506
 
@@ -1044,7 +1044,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
1044
1044
  /***/ (function(module, exports, __webpack_require__) {
1045
1045
 
1046
1046
  "use strict";
1047
- eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.staticRenderFns = exports.render = void 0;\nvar render = exports.render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"chat-main\"\n }, [_c(\"div\", {\n staticClass: \"chat-header\"\n }, [_c(\"div\", {\n staticClass: \"header-left\"\n }, [_vm.isMobile && _vm.activeSessionId ? _c(\"button\", {\n staticClass: \"mobile-back-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"go-back-to-list\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M15 18l-6-6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])]) : _vm.isMobile ? _c(\"button\", {\n staticClass: \"mobile-menu-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"toggle-sidebar\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18M3 12h18M3 18h18\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n }\n })])]) : _vm._e(), _vm.currentAgent && (_vm.activeSessionId || _vm.messages.length > 0) ? _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_c(\"div\", {\n staticClass: \"chat-agent-avatar-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"agent-list-avatar session-avatar\",\n class: {\n \"has-agent-img\": _vm.agentInfo.avatar\n },\n style: {\n background: _vm.agentInfo.color || \"linear-gradient(135deg, #1677ff, #4096ff)\"\n }\n }, [_vm.agentInfo.avatar ? _c(\"img\", {\n staticClass: \"avatar-pic\",\n attrs: {\n src: _vm.agentInfo.avatar,\n alt: \"\"\n }\n }) : [_vm._v(_vm._s(_vm.getInitial(_vm.agentInfo.agentName || _vm.agentInfo.agentCode)))]], 2)]), _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\"\n }, [_vm._v(_vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"agent-desc\"\n }, [_vm._v(_vm._s(_vm.currentAgentDesc))])])]) : _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_vm._m(0)])]), _vm.isMobile && !_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"header-actions\"\n }, [_c(\"button\", {\n staticClass: \"mobile-header-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"agent-jump-click\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 3C6.5 3 2 6.58 2 11c0 2.03.95 3.88 2.5 5.3L3 21l4.6-1.7c1.36.45 2.86.7 4.4.7 5.5 0 10-3.58 10-8s-4.5-8-10-8z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"8\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"12\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"16\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n })])])]) : _vm._e()]), _c(\"div\", {\n ref: \"messagesRef\",\n staticClass: \"chat-body\",\n on: {\n scroll: _vm.onScrollMessages\n }\n }, [!_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"welcome welcome-default\"\n }, [_c(\"div\", {\n staticClass: \"welcome-icon\"\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 48 48\",\n width: \"64\",\n height: \"64\"\n }\n }, [_c(\"path\", {\n attrs: {\n fill: \"#e6f4ff\",\n d: \"M40 22c-2.21 0-4 1.79-4 4v10H12c-2.21 0-4-1.79-4-4V14c0-2.21 1.79-4 4-4h24c2.21 0 4 1.79 4 4v8z\"\n }\n }), _c(\"path\", {\n attrs: {\n fill: \"#1677ff\",\n d: \"M36 8c-2.21 0-4 1.79-4 4v18H8c-2.21 0-4-1.79-4-4V12c0-2.21 1.79-4 4-4h28z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"20\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"28\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n })])]), _c(\"div\", {\n staticClass: \"welcome-title\"\n }, [_vm._v(\"欢迎使用 AI 助手\")]), _c(\"div\", {\n staticClass: \"welcome-text\"\n }, [_vm._v(\"从左侧选择一个会话,或搜索助手开始新的对话\")])]) : _vm.messages.length === 0 && !_vm.loadingSessionMsg ? _c(\"div\", {\n staticClass: \"chat-empty-welcome\"\n }, [_vm.agentInfo.hasOwnProperty(\"agentCode\") ? _c(\"div\", {\n staticClass: \"welcome-card\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar-box\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar\",\n class: {\n \"has-chat-agent-img\": _vm.agentInfo.avatar\n },\n style: _vm.getChatAvatarStyle(_vm.currentAgent, _vm.agentInfo.avatar)\n }, [!_vm.agentInfo.avatar ? [_vm._v(_vm._s(_vm.getInitial(_vm.currentAgentName)))] : _vm._e()], 2)]), _c(\"div\", {\n staticClass: \"welcome-text-group\"\n }, [_c(\"div\", {\n staticClass: \"text-sm\"\n }, [_vm._v(\"您好,我是\" + _vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"text-lg\"\n }, [_vm._v(_vm._s(_vm.greeting))])])]) : _vm._e(), _c(\"div\", {\n staticClass: \"guess-box\"\n }, [_c(\"div\", {\n staticClass: \"guess-title\"\n }, [_c(\"svg\", {\n attrs: {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 24 24\",\n fill: \"#1677ff\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\"\n }\n })]), _c(\"span\", [_vm._v(\"猜您想问\")])]), _c(\"div\", {\n staticClass: \"tag-wrap\"\n }, _vm._l(_vm.agentInfo.suggestedQuestions, function (tag) {\n return _c(\"div\", {\n key: tag,\n staticClass: \"quick-tag\",\n on: {\n click: function ($event) {\n return _vm.sendQuickMsg(tag);\n }\n }\n }, [_vm._v(\" \" + _vm._s(tag) + \" \")]);\n }), 0)])]) : _vm._e(), _vm._l(_vm.messages, function (m) {\n return _c(\"div\", {\n key: m.id,\n staticClass: \"msg-row\",\n class: m.role\n }, [_c(\"div\", {\n staticClass: \"msg-main\"\n }, [_c(\"div\", {\n staticClass: \"msg-content\"\n }, [_c(\"div\", {\n staticClass: \"bubble\",\n class: m.role\n }, [m.role === \"user\" && m._sttStatus ? _c(\"div\", {\n staticClass: \"stt-bubble-wrap\"\n }, [m._sttStatus === \"pending\" ? _c(\"span\", {\n staticClass: \"stt-spinner stt-outside-icon\"\n }) : m._sttStatus === \"error\" ? _c(\"span\", {\n staticClass: \"stt-error-icon stt-outside-icon\"\n }, [_vm._v(\"!\")]) : _vm._e(), _c(\"span\", {\n staticClass: \"stt-bubble-text\"\n }, [_vm._v(_vm._s(m._sttStatus === \"pending\" ? \"转化中...\" : \"语音转文字失败\"))])]) : _vm._e(), !m._sttStatus && m.thinking ? _c(\"details\", {\n staticClass: \"thinking-details\",\n attrs: {\n open: \"\"\n }\n }, [_c(\"summary\", {\n staticClass: \"thinking-summary\"\n }, [_vm._v(\"💭 思考过程\")]), _c(\"div\", {\n staticClass: \"thinking-body\",\n domProps: {\n innerHTML: _vm._s(_vm.escapeHtml(m.thinking))\n }\n })]) : _vm._e(), !m._sttStatus && m.content && m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderStreaming(m.content, m._key))\n }\n }) : _vm._e(), !m._sttStatus && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderMarkdown(m.content))\n }\n }) : _vm._e(), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !m._sttStatus && _vm.showToolInfo && m.toolCalls && m.toolCalls.length,\n expression: \"!m._sttStatus && showToolInfo && m.toolCalls && m.toolCalls.length\"\n }],\n staticClass: \"tool-calls\"\n }, _vm._l(m.toolCalls, function (tc, ti) {\n return _c(\"div\", {\n key: ti,\n staticClass: \"tool-item\"\n }, [_c(\"span\", {\n staticClass: \"tool-badge\"\n }, [_vm._v(\"工具返回\")]), _c(\"pre\", [_vm._v(_vm._s(tc.substring(0, 300)) + _vm._s(tc.length > 300 ? \"...\" : \"\"))])]);\n }), 0), m.loading ? _c(\"div\", {\n staticClass: \"typing\",\n class: _vm.waitClass\n }, [_c(\"span\", {\n staticClass: \"phrase\"\n }, [_vm._v(\"思考中\")]), _vm._m(1, true)]) : _vm._e()]), m.role === \"assistant\" && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"msg-actions\"\n }, [_c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制\"\n },\n on: {\n click: function ($event) {\n return _vm.copyText(m.content);\n }\n }\n }, [_vm._v(\"📋 复制\")]), _c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制为图片\"\n },\n on: {\n click: function ($event) {\n return _vm.copyAsImage(m.content);\n }\n }\n }, [_vm._v(\"🖼 复制为图片\")])]) : _vm._e()])])]);\n })], 2), _c(\"div\", {\n staticClass: \"chat-footer\"\n }, [_c(\"div\", {\n staticClass: \"input-area\"\n }, [_vm.isMobile ? _c(\"button\", {\n staticClass: \"voice-btn\",\n attrs: {\n disabled: _vm.sending\n },\n on: {\n click: _vm.toggleVoiceMode\n }\n }, [!_vm.voiceMode ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M9 20h6v2H9z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18v2H3V6zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\"\n }\n })])]) : _vm._e(), !_vm.voiceMode || !_vm.isMobile ? [_c(\"textarea\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.inputText,\n expression: \"inputText\"\n }],\n ref: \"taRef\",\n staticClass: \"chat-textarea\",\n attrs: {\n placeholder: \"请输入消息\",\n maxlength: \"300\",\n disabled: _vm.sending\n },\n domProps: {\n value: _vm.inputText\n },\n on: {\n input: [function ($event) {\n if ($event.target.composing) return;\n _vm.inputText = $event.target.value;\n }, _vm.autoResizeTextarea],\n focus: _vm.onInputFocus,\n keydown: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n _vm.isMobile ? _vm.newLine($event) : _vm.sendMessage();\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n return _vm.newLine.apply(null, arguments);\n }]\n }\n }), !_vm.sending ? _c(\"button\", {\n staticClass: \"send-btn\",\n class: {\n active: _vm.inputText.trim()\n },\n attrs: {\n disabled: _vm.sending || !_vm.inputText.trim()\n },\n on: {\n click: _vm.sendMessage\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"20\",\n height: \"20\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"\n }\n })])]) : _vm._e(), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()] : [_c(\"div\", {\n staticClass: \"hold-talk-btn\",\n class: {\n recording: _vm.isRecording\n },\n on: {\n touchstart: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchStart($event);\n },\n touchmove: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchMove($event);\n },\n touchend: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchEnd.apply(null, arguments);\n }\n }\n }, [!_vm.isRecording ? _c(\"svg\", {\n staticClass: \"hold-talk-icon\",\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n })]) : _vm._e(), _c(\"span\", [_vm._v(_vm._s(_vm.isRecording ? _vm.isCancelSwipe ? \"松开取消\" : \"松手发送\" : \"按住说话\"))])]), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()], _vm.showDownBtn && _vm.messages.length !== 0 ? _c(\"div\", {\n staticClass: \"scroll-bottom-wrap\"\n }, [_c(\"div\", {\n staticClass: \"scroll-bottom-btn\",\n on: {\n click: function ($event) {\n return _vm.scrollToBottom(true);\n }\n }\n }, [_vm.sending ? _c(\"div\", {\n staticClass: \"loading-circle\"\n }) : _vm._e(), _c(\"svg\", {\n attrs: {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M6 9l6 6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])])]) : _vm._e()], 2)]), _vm.isRecording ? _c(\"div\", {\n staticClass: \"voice-recording-overlay\"\n }, [_c(\"div\", {\n staticClass: \"voice-recording-card\"\n }, [_vm._m(2), _c(\"div\", {\n staticClass: \"voice-recording-duration\"\n }, [_vm._v(_vm._s(_vm.recordDuration)), _c(\"span\", {\n staticClass: \"unit\"\n }, [_vm._v(\"s\")])]), _c(\"div\", {\n staticClass: \"voice-recording-hint\",\n class: {\n cancel: _vm.isCancelSwipe\n }\n }, [_vm.isCancelSwipe ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#ff4d4f\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#999\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n }\n })]), _vm._v(\" \" + _vm._s(_vm.isCancelSwipe ? \"松开取消发送\" : \"手指上滑 取消发送\") + \" \")])])]) : _vm._e()]);\n};\nvar staticRenderFns = exports.staticRenderFns = [function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\",\n staticStyle: {\n color: \"#bbb\"\n }\n }, [_vm._v(\"请选择助手\")])]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"span\", {\n staticClass: \"dots\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"voice-recording-wave\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatDetail.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%224b66220e-vue-loader-template%22%7D!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--13-0!./node_modules/_babel-loader@8.4.1@babel-loader/lib!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
1047
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.staticRenderFns = exports.render = void 0;\nvar render = exports.render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"chat-main\"\n }, [_c(\"div\", {\n staticClass: \"chat-header\"\n }, [_c(\"div\", {\n staticClass: \"header-left\"\n }, [_vm.isMobile && _vm.activeSessionId ? _c(\"button\", {\n staticClass: \"mobile-back-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"go-back-to-list\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M15 18l-6-6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])]) : _vm.isMobile ? _c(\"button\", {\n staticClass: \"mobile-menu-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"toggle-sidebar\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18M3 12h18M3 18h18\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n }\n })])]) : _vm._e(), _vm.currentAgent && (_vm.activeSessionId || _vm.messages.length > 0) ? _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_c(\"div\", {\n staticClass: \"chat-agent-avatar-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"agent-list-avatar session-avatar\",\n class: {\n \"has-agent-img\": _vm.agentInfo.avatar\n },\n style: {\n background: _vm.agentInfo.color || \"linear-gradient(135deg, #1677ff, #4096ff)\"\n }\n }, [_vm.agentInfo.avatar ? _c(\"img\", {\n staticClass: \"avatar-pic\",\n attrs: {\n src: _vm.agentInfo.avatar,\n alt: \"\"\n }\n }) : [_vm._v(_vm._s(_vm.getInitial(_vm.agentInfo.agentName || _vm.agentInfo.agentCode)))]], 2)]), _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\"\n }, [_vm._v(_vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"agent-desc\"\n }, [_vm._v(_vm._s(_vm.currentAgentDesc))])])]) : _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_vm._m(0)])]), _vm.isMobile && !_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"header-actions\"\n }, [_c(\"button\", {\n staticClass: \"mobile-header-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"agent-jump-click\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 3C6.5 3 2 6.58 2 11c0 2.03.95 3.88 2.5 5.3L3 21l4.6-1.7c1.36.45 2.86.7 4.4.7 5.5 0 10-3.58 10-8s-4.5-8-10-8z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"8\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"12\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"16\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n })])])]) : _vm._e()]), _c(\"div\", {\n ref: \"messagesRef\",\n staticClass: \"chat-body\",\n on: {\n scroll: _vm.onScrollMessages\n }\n }, [!_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"welcome welcome-default\"\n }, [_c(\"div\", {\n staticClass: \"welcome-icon\"\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 48 48\",\n width: \"64\",\n height: \"64\"\n }\n }, [_c(\"path\", {\n attrs: {\n fill: \"#e6f4ff\",\n d: \"M40 22c-2.21 0-4 1.79-4 4v10H12c-2.21 0-4-1.79-4-4V14c0-2.21 1.79-4 4-4h24c2.21 0 4 1.79 4 4v8z\"\n }\n }), _c(\"path\", {\n attrs: {\n fill: \"#1677ff\",\n d: \"M36 8c-2.21 0-4 1.79-4 4v18H8c-2.21 0-4-1.79-4-4V12c0-2.21 1.79-4 4-4h28z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"20\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"28\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n })])]), _c(\"div\", {\n staticClass: \"welcome-title\"\n }, [_vm._v(\"欢迎使用 AI 助手\")]), _c(\"div\", {\n staticClass: \"welcome-text\"\n }, [_vm._v(\"从左侧选择一个会话,或搜索助手开始新的对话\")])]) : _vm.messages.length === 0 && !_vm.loadingSessionMsg ? _c(\"div\", {\n staticClass: \"chat-empty-welcome\"\n }, [_vm.agentInfo.hasOwnProperty(\"agentCode\") ? _c(\"div\", {\n staticClass: \"welcome-card\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar-box\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar\",\n class: {\n \"has-chat-agent-img\": _vm.agentInfo.avatar\n },\n style: _vm.getChatAvatarStyle(_vm.currentAgent, _vm.agentInfo.avatar)\n }, [!_vm.agentInfo.avatar ? [_vm._v(_vm._s(_vm.getInitial(_vm.currentAgentName)))] : _vm._e()], 2)]), _c(\"div\", {\n staticClass: \"welcome-text-group\"\n }, [_c(\"div\", {\n staticClass: \"text-sm\"\n }, [_vm._v(\"您好,我是\" + _vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"text-lg\"\n }, [_vm._v(_vm._s(_vm.greeting))])])]) : _vm._e(), _c(\"div\", {\n staticClass: \"guess-box\"\n }, [_c(\"div\", {\n staticClass: \"guess-title\"\n }, [_c(\"svg\", {\n attrs: {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 24 24\",\n fill: \"#1677ff\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\"\n }\n })]), _c(\"span\", [_vm._v(\"猜您想问\")])]), _c(\"div\", {\n staticClass: \"tag-wrap\"\n }, _vm._l(_vm.agentInfo.suggestedQuestions, function (tag) {\n return _c(\"div\", {\n key: tag,\n staticClass: \"quick-tag\",\n on: {\n click: function ($event) {\n return _vm.sendQuickMsg(tag);\n }\n }\n }, [_vm._v(\" \" + _vm._s(tag) + \" \")]);\n }), 0)])]) : _vm._e(), _vm._l(_vm.messages, function (m) {\n return _c(\"div\", {\n key: m.id,\n staticClass: \"msg-row\",\n class: m.role\n }, [_c(\"div\", {\n staticClass: \"msg-main\"\n }, [_c(\"div\", {\n staticClass: \"msg-content\"\n }, [_c(\"div\", {\n staticClass: \"bubble\",\n class: m.role\n }, [m.role === \"user\" && m._sttStatus ? _c(\"div\", {\n staticClass: \"stt-bubble-wrap\"\n }, [m._sttStatus === \"pending\" ? _c(\"span\", {\n staticClass: \"stt-spinner stt-outside-icon\"\n }) : m._sttStatus === \"error\" ? _c(\"span\", {\n staticClass: \"stt-error-icon stt-outside-icon\"\n }, [_vm._v(\"!\")]) : _vm._e(), _c(\"span\", {\n staticClass: \"stt-bubble-text\"\n }, [_vm._v(_vm._s(m._sttStatus === \"pending\" ? \"转化中...\" : \"语音转文字失败\"))])]) : _vm._e(), !m._sttStatus && m.thinking ? _c(\"details\", {\n staticClass: \"thinking-details\",\n attrs: {\n open: \"\"\n }\n }, [_c(\"summary\", {\n staticClass: \"thinking-summary\"\n }, [_vm._v(\"💭 思考过程\")]), _c(\"div\", {\n staticClass: \"thinking-body\",\n domProps: {\n innerHTML: _vm._s(_vm.escapeHtml(m.thinking))\n }\n })]) : _vm._e(), !m._sttStatus && m.content && m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderStreaming(m.content, m._key))\n }\n }) : _vm._e(), !m._sttStatus && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderMarkdown(m.content))\n }\n }) : _vm._e(), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !m._sttStatus && _vm.showToolInfo && m.toolCalls && m.toolCalls.length,\n expression: \"!m._sttStatus && showToolInfo && m.toolCalls && m.toolCalls.length\"\n }],\n staticClass: \"tool-calls\"\n }, _vm._l(m.toolCalls, function (tc, ti) {\n return _c(\"div\", {\n key: ti,\n staticClass: \"tool-item\"\n }, [_c(\"span\", {\n staticClass: \"tool-badge\"\n }, [_vm._v(\"工具返回\")]), _c(\"pre\", [_vm._v(_vm._s(tc.substring(0, 300)) + _vm._s(tc.length > 300 ? \"...\" : \"\"))])]);\n }), 0), m.loading ? _c(\"div\", {\n staticClass: \"typing\",\n class: _vm.waitClass\n }, [_c(\"span\", {\n staticClass: \"phrase\"\n }, [_vm._v(\"思考中\")]), _vm._m(1, true)]) : _vm._e()]), m.role === \"assistant\" && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"msg-actions\"\n }, [_c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制\"\n },\n on: {\n click: function ($event) {\n return _vm.copyText(m.content);\n }\n }\n }, [_vm._v(\"📋 复制\")]), _c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制为图片\"\n },\n on: {\n click: function ($event) {\n return _vm.copyAsImage(m.content);\n }\n }\n }, [_vm._v(\"🖼 复制为图片\")])]) : _vm._e()])])]);\n })], 2), _c(\"div\", {\n staticClass: \"chat-footer\"\n }, [_c(\"div\", {\n staticClass: \"input-area\"\n }, [_vm.isMobile ? _c(\"button\", {\n staticClass: \"voice-btn\",\n attrs: {\n disabled: \"\"\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18v2H3V6zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\"\n }\n })])]) : _vm._e(), !_vm.voiceMode || !_vm.isMobile ? [_c(\"textarea\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.inputText,\n expression: \"inputText\"\n }],\n ref: \"taRef\",\n staticClass: \"chat-textarea\",\n attrs: {\n placeholder: \"请输入消息\",\n maxlength: \"300\",\n disabled: _vm.sending\n },\n domProps: {\n value: _vm.inputText\n },\n on: {\n input: [function ($event) {\n if ($event.target.composing) return;\n _vm.inputText = $event.target.value;\n }, _vm.autoResizeTextarea],\n focus: _vm.onInputFocus,\n keydown: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n _vm.isMobile ? _vm.newLine($event) : _vm.sendMessage();\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n return _vm.newLine.apply(null, arguments);\n }]\n }\n }), !_vm.sending ? _c(\"button\", {\n staticClass: \"send-btn\",\n class: {\n active: _vm.inputText.trim()\n },\n attrs: {\n disabled: _vm.sending || !_vm.inputText.trim()\n },\n on: {\n click: _vm.sendMessage\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"20\",\n height: \"20\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"\n }\n })])]) : _vm._e(), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()] : [_c(\"div\", {\n staticClass: \"hold-talk-btn\",\n class: {\n recording: _vm.isRecording\n },\n on: {\n touchstart: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchStart($event);\n },\n touchmove: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchMove($event);\n },\n touchend: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchEnd.apply(null, arguments);\n }\n }\n }, [!_vm.isRecording ? _c(\"svg\", {\n staticClass: \"hold-talk-icon\",\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n })]) : _vm._e(), _c(\"span\", [_vm._v(_vm._s(_vm.isRecording ? _vm.isCancelSwipe ? \"松开取消\" : \"松手发送\" : \"按住说话\"))])]), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()], _vm.showDownBtn && _vm.messages.length !== 0 ? _c(\"div\", {\n staticClass: \"scroll-bottom-wrap\"\n }, [_c(\"div\", {\n staticClass: \"scroll-bottom-btn\",\n on: {\n click: function ($event) {\n return _vm.scrollToBottom(true);\n }\n }\n }, [_vm.sending ? _c(\"div\", {\n staticClass: \"loading-circle\"\n }) : _vm._e(), _c(\"svg\", {\n attrs: {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M6 9l6 6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])])]) : _vm._e()], 2)]), _vm.isRecording ? _c(\"div\", {\n staticClass: \"voice-recording-overlay\"\n }, [_c(\"div\", {\n staticClass: \"voice-recording-card\"\n }, [_vm._m(2), _c(\"div\", {\n staticClass: \"voice-recording-duration\"\n }, [_vm._v(_vm._s(_vm.recordDuration)), _c(\"span\", {\n staticClass: \"unit\"\n }, [_vm._v(\"s\")])]), _c(\"div\", {\n staticClass: \"voice-recording-hint\",\n class: {\n cancel: _vm.isCancelSwipe\n }\n }, [_vm.isCancelSwipe ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#ff4d4f\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#999\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n }\n })]), _vm._v(\" \" + _vm._s(_vm.isCancelSwipe ? \"松开取消发送\" : \"手指上滑 取消发送\") + \" \")])])]) : _vm._e()]);\n};\nvar staticRenderFns = exports.staticRenderFns = [function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\",\n staticStyle: {\n color: \"#bbb\"\n }\n }, [_vm._v(\"请选择助手\")])]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"span\", {\n staticClass: \"dots\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"voice-recording-wave\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatDetail.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%224b66220e-vue-loader-template%22%7D!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--13-0!./node_modules/_babel-loader@8.4.1@babel-loader/lib!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
1048
1048
 
1049
1049
  /***/ }),
1050
1050
 
@@ -3355,7 +3355,7 @@ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../.
3355
3355
  /*! no static exports found */
3356
3356
  /***/ (function(module, exports, __webpack_require__) {
3357
3357
 
3358
- eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n/* ── Sidebar ── */\\n.chat-sidebar[data-v-46646bec] {\\n width: 300px;\\n min-width: 300px;\\n background: #fff;\\n border-right: 1px solid #e8e8e8;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 14px 8px 14px 16px;\\n border-bottom: 1px solid #e8e8e8;\\n flex-shrink: 0;\\n}\\n.sidebar-header i[data-v-46646bec]{\\n font-size: 20px;\\n cursor: pointer;\\n}\\n.sidebar-header img[data-v-46646bec]{\\n cursor: pointer;\\n}\\n.sidebar-title[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 600;\\n color: #333;\\n}\\n.sidebar-search[data-v-46646bec] {\\n padding: 8px 16px;\\n flex-shrink: 0;\\n position: relative;\\n z-index: 20;\\n}\\n.sidebar-search .search-wrap[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n position: relative;\\n}\\n.sidebar-search .search-icon[data-v-46646bec] {\\n position: absolute;\\n left: 12px;\\n flex-shrink: 0;\\n pointer-events: none;\\n}\\n.sidebar-search .search-input[data-v-46646bec] {\\n width: 100%;\\n height: 32px;\\n border-radius: 16px;\\n background: #f5f5f5;\\n border: 1px solid transparent;\\n font-size: 13px;\\n padding: 0 32px 0 34px;\\n outline: none;\\n box-sizing: border-box;\\n transition: all 0.2s;\\n}\\n.sidebar-search .search-input[data-v-46646bec]:focus {\\n background: #fff;\\n border: 1px solid #1677ff;\\n}\\n.sidebar-search .search-clear[data-v-46646bec] {\\n position: absolute;\\n right: 10px;\\n cursor: pointer;\\n flex-shrink: 0;\\n}\\n.search-suggestions[data-v-46646bec] {\\n position: absolute;\\n top: 100%;\\n left: 16px;\\n right: 16px;\\n background: #fff;\\n border: 1px solid #e8e8e8;\\n border-radius: 8px;\\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\\n z-index: 100;\\n max-height: 240px;\\n overflow-y: auto;\\n margin-top: 4px;\\n}\\n.suggestion-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 10px 12px;\\n cursor: pointer;\\n transition: background 0.15s;\\n}\\n.suggestion-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px;\\n height: 28px;\\n border-radius: 6px;\\n background: linear-gradient(135deg, #1677ff, #4096ff);\\n color: #fff;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 13px;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n.suggestion-name[data-v-46646bec] {\\n font-size: 14px;\\n font-weight: 500;\\n color: #333;\\n white-space: nowrap;\\n}\\n.suggestion-desc[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.sidebar-list[data-v-46646bec] {\\n flex: 1;\\n overflow-y: auto;\\n padding: 8px 0;\\n}\\n.session-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n padding: 6px 16px;\\n padding-bottom: 10px;\\n cursor: pointer;\\n border-bottom: 1px solid #f5f5f5;\\n transition: background 0.15s;\\n position: relative;\\n gap: 10px;\\n border-radius: 4px;\\n touch-action: manipulation;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-left-item[data-v-46646bec] {\\n margin-left: 5px;\\n}\\n.session-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.session-item.active[data-v-46646bec] {\\n background: #F5F5F5;\\n}\\n.session-avatar[data-v-46646bec] {\\n width: 44px !important;\\n height: 44px !important;\\n border-radius: 50% !important;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px !important;\\n font-weight: 600;\\n color: #fff;\\n flex-shrink: 0;\\n overflow: hidden;\\n}\\n.avatar-pic[data-v-46646bec] {\\n width: 85%;\\n height: 85%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.session-info[data-v-46646bec] {\\n flex: 1;\\n min-width: 0;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-agent[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 500;\\n color: #333;\\n margin-bottom: 2px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-preview[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-time[data-v-46646bec] {\\n font-size: 11px;\\n color: #bbb;\\n flex-shrink: 0;\\n margin-left: 8px;\\n margin-right: 4px;\\n}\\n.session-delete[data-v-46646bec] {\\n position: absolute;\\n right: 4px;\\n top: 20px;\\n transform: translateY(-50%);\\n opacity: 0;\\n transition: opacity 0.15s;\\n width: 28px;\\n height: 28px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border: none;\\n background: transparent;\\n padding: 0;\\n color: #333;\\n cursor: pointer;\\n}\\n.session-delete svg[data-v-46646bec] {\\n color: #333;\\n}\\n.session-item:hover .session-delete[data-v-46646bec] {\\n opacity: 1;\\n}\\n.sidebar-loading[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n gap: 12px;\\n}\\n.sidebar-loading .loading-spinner[data-v-46646bec] {\\n width: 24px;\\n height: 24px;\\n border: 2.5px solid #e8e8e8;\\n border-top-color: #1677ff;\\n border-radius: 50%;\\n animation: sidebar-spin-46646bec 0.7s linear infinite;\\n}\\n@keyframes sidebar-spin-46646bec {\\nto { transform: rotate(360deg);\\n}\\n}\\n.sidebar-empty[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n}\\n.empty-icon[data-v-46646bec] {\\n font-size: 36px;\\n margin-bottom: 8px;\\n}\\n.empty-hint[data-v-46646bec] {\\n font-size: 12px;\\n color: #d9d9d9;\\n margin-top: 4px;\\n}\\n\\n/* agent-list-avatar base */\\n.agent-list-avatar[data-v-46646bec] {\\n background-repeat: no-repeat;\\n background-position: center;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: #fff;\\n font-size: 22px;\\n font-weight: 600;\\n border-radius: 8px;\\n width: 92px;\\n height: 106px;\\n}\\n.agent-list-avatar.has-agent-img[data-v-46646bec] {\\n background-size: cover;\\n}\\n\\n/* suggestion-avatar overrides */\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px !important;\\n height: 28px !important;\\n border-radius: 8px !important;\\n font-size: 12px !important;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n\\n/* Desktop responsive */\\n.chat-sidebar[data-v-46646bec] {\\n width: min(300px, 32vw);\\n}\\n\\n/* ── Mobile (max-width: 768px) ── */\\n@media screen and (max-width: 768px) {\\n.chat-sidebar[data-v-46646bec] {\\n position: absolute;\\n inset: 0 auto 0 0;\\n width: min(82vw, 320px);\\n min-width: auto;\\n max-width: 320px;\\n height: 100%;\\n border-right: none;\\n box-shadow: 8px 0 24px rgba(15, 23, 42, 0.12);\\n transform: translateX(-100%);\\n transition: transform 0.24s ease;\\n}\\n.chat-sidebar.open[data-v-46646bec] {\\n transform: translateX(0);\\n}\\n.sidebar-back-btn[data-v-46646bec] {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 36px;\\n height: 36px;\\n border: none;\\n border-radius: 10px;\\n background: transparent;\\n color: #333;\\n cursor: pointer;\\n flex-shrink: 0;\\n position: absolute;\\n left: 8px;\\n top: 50%;\\n transform: translateY(-50%);\\n padding: 0;\\n}\\n.sidebar-back-btn svg[data-v-46646bec] {\\n display: block;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar[data-v-46646bec] {\\n position: relative !important;\\n width: 100% !important;\\n max-width: 100% !important;\\n min-width: 100% !important;\\n height: 100%;\\n transform: translateX(0) !important;\\n box-shadow: none !important;\\n border-right: none;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 14px 16px;\\n position: relative;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header img[data-v-46646bec] {\\n position: absolute;\\n right: 16px;\\n top: 50%;\\n transform: translateY(-50%);\\n width: 22px;\\n height: 22px;\\n -o-object-fit: contain;\\n object-fit: contain;\\n cursor: pointer;\\n}\\n.session-delete[data-v-46646bec] {\\n display: none;\\n}\\n\\n /* 搜索清除按钮放大触摸区域 */\\n.sidebar-search .search-clear[data-v-46646bec] {\\n width: 20px;\\n height: 20px;\\n padding: 12px;\\n right: -2px;\\n box-sizing: content-box;\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatSidebar.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--7-oneOf-1-1!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--7-oneOf-1-2!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
3358
+ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n/* ── Sidebar ── */\\n.chat-sidebar[data-v-46646bec] {\\n width: 300px;\\n min-width: 300px;\\n background: #fff;\\n border-right: 1px solid #e8e8e8;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 14px 8px 14px 16px;\\n border-bottom: 1px solid #e8e8e8;\\n flex-shrink: 0;\\n}\\n.sidebar-header i[data-v-46646bec]{\\n font-size: 20px;\\n cursor: pointer;\\n}\\n.sidebar-header img[data-v-46646bec]{\\n cursor: pointer;\\n}\\n.sidebar-title[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 600;\\n color: #333;\\n}\\n.sidebar-search[data-v-46646bec] {\\n padding: 8px 16px;\\n flex-shrink: 0;\\n position: relative;\\n z-index: 20;\\n}\\n.sidebar-search .search-wrap[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n position: relative;\\n}\\n.sidebar-search .search-icon[data-v-46646bec] {\\n position: absolute;\\n left: 12px;\\n flex-shrink: 0;\\n pointer-events: none;\\n}\\n.sidebar-search .search-input[data-v-46646bec] {\\n width: 100%;\\n height: 32px;\\n border-radius: 16px;\\n background: #f5f5f5;\\n border: 1px solid transparent;\\n font-size: 13px;\\n padding: 0 32px 0 34px;\\n outline: none;\\n box-sizing: border-box;\\n transition: all 0.2s;\\n}\\n.sidebar-search .search-input[data-v-46646bec]:focus {\\n background: #fff;\\n border: 1px solid #1677ff;\\n}\\n.sidebar-search .search-clear[data-v-46646bec] {\\n position: absolute;\\n right: 10px;\\n cursor: pointer;\\n flex-shrink: 0;\\n}\\n.search-suggestions[data-v-46646bec] {\\n position: absolute;\\n top: 100%;\\n left: 16px;\\n right: 16px;\\n background: #fff;\\n border: 1px solid #e8e8e8;\\n border-radius: 8px;\\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\\n z-index: 100;\\n max-height: 240px;\\n overflow-y: auto;\\n margin-top: 4px;\\n}\\n.suggestion-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 10px 12px;\\n cursor: pointer;\\n transition: background 0.15s;\\n}\\n.suggestion-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px;\\n height: 28px;\\n border-radius: 6px;\\n background: linear-gradient(135deg, #1677ff, #4096ff);\\n color: #fff;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 13px;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n.suggestion-name[data-v-46646bec] {\\n font-size: 14px;\\n font-weight: 500;\\n color: #333;\\n white-space: nowrap;\\n}\\n.suggestion-desc[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.sidebar-list[data-v-46646bec] {\\n flex: 1;\\n overflow-y: auto;\\n padding: 8px 0;\\n}\\n.session-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n padding: 6px 16px;\\n padding-bottom: 10px;\\n cursor: pointer;\\n border-bottom: 1px solid #f5f5f5;\\n transition: background 0.15s;\\n position: relative;\\n gap: 10px;\\n border-radius: 4px;\\n touch-action: manipulation;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-left-item[data-v-46646bec] {\\n margin-left: 5px;\\n}\\n.session-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.session-item.active[data-v-46646bec] {\\n background: #F5F5F5;\\n}\\n.session-avatar[data-v-46646bec] {\\n width: 44px !important;\\n height: 44px !important;\\n border-radius: 50% !important;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px !important;\\n font-weight: 600;\\n color: #fff;\\n flex-shrink: 0;\\n overflow: hidden;\\n}\\n.avatar-pic[data-v-46646bec] {\\n width: 85%;\\n height: 85%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.session-info[data-v-46646bec] {\\n flex: 1;\\n min-width: 0;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-agent[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 500;\\n color: #333;\\n margin-bottom: 2px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-preview[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-time[data-v-46646bec] {\\n font-size: 11px;\\n color: #bbb;\\n flex-shrink: 0;\\n margin-left: 8px;\\n margin-right: 4px;\\n}\\n.session-delete[data-v-46646bec] {\\n position: absolute;\\n right: 4px;\\n top: 20px;\\n transform: translateY(-50%);\\n opacity: 0;\\n transition: opacity 0.15s;\\n width: 28px;\\n height: 28px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border: none;\\n background: transparent;\\n padding: 0;\\n color: #333;\\n cursor: pointer;\\n}\\n.session-delete svg[data-v-46646bec] {\\n color: #333;\\n}\\n.session-item:hover .session-delete[data-v-46646bec] {\\n opacity: 1;\\n}\\n.sidebar-loading[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n gap: 12px;\\n}\\n.sidebar-loading .loading-spinner[data-v-46646bec] {\\n width: 24px;\\n height: 24px;\\n border: 2.5px solid #e8e8e8;\\n border-top-color: #1677ff;\\n border-radius: 50%;\\n animation: sidebar-spin-46646bec 0.7s linear infinite;\\n}\\n@keyframes sidebar-spin-46646bec {\\nto { transform: rotate(360deg);\\n}\\n}\\n.sidebar-empty[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n}\\n.empty-icon[data-v-46646bec] {\\n font-size: 36px;\\n margin-bottom: 8px;\\n}\\n.empty-hint[data-v-46646bec] {\\n font-size: 12px;\\n color: #d9d9d9;\\n margin-top: 4px;\\n}\\n\\n/* agent-list-avatar base */\\n.agent-list-avatar[data-v-46646bec] {\\n background-repeat: no-repeat;\\n background-position: center;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: #fff;\\n font-size: 22px;\\n font-weight: 600;\\n border-radius: 8px;\\n width: 92px;\\n height: 106px;\\n}\\n.agent-list-avatar.has-agent-img[data-v-46646bec] {\\n background-size: cover;\\n}\\n\\n/* suggestion-avatar overrides */\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px !important;\\n height: 28px !important;\\n border-radius: 8px !important;\\n font-size: 12px !important;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n\\n/* Desktop responsive */\\n.chat-sidebar[data-v-46646bec] {\\n width: min(300px, 32vw);\\n}\\n\\n/* ── Mobile (max-width: 768px) ── */\\n@media screen and (max-width: 768px) {\\n.chat-sidebar[data-v-46646bec] {\\n position: absolute;\\n inset: 0 auto 0 0;\\n width: min(82vw, 320px);\\n min-width: auto;\\n max-width: 320px;\\n height: 100%;\\n border-right: none;\\n transform: translateX(-100%);\\n transition: transform 0.24s ease;\\n}\\n.chat-sidebar.open[data-v-46646bec] {\\n transform: translateX(0);\\n}\\n.sidebar-back-btn[data-v-46646bec] {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 36px;\\n height: 36px;\\n border: none;\\n border-radius: 10px;\\n background: transparent;\\n color: #333;\\n cursor: pointer;\\n flex-shrink: 0;\\n position: absolute;\\n left: 8px;\\n top: 50%;\\n transform: translateY(-50%);\\n padding: 0;\\n}\\n.sidebar-back-btn svg[data-v-46646bec] {\\n display: block;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar[data-v-46646bec] {\\n position: relative !important;\\n width: 100% !important;\\n max-width: 100% !important;\\n min-width: 100% !important;\\n height: 100%;\\n transform: translateX(0) !important;\\n box-shadow: none !important;\\n border-right: none;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 14px 16px;\\n position: relative;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header img[data-v-46646bec] {\\n position: absolute;\\n right: 16px;\\n top: 50%;\\n transform: translateY(-50%);\\n width: 22px;\\n height: 22px;\\n -o-object-fit: contain;\\n object-fit: contain;\\n cursor: pointer;\\n}\\n.session-delete[data-v-46646bec] {\\n display: none;\\n}\\n\\n /* 搜索清除按钮放大触摸区域 */\\n.sidebar-search .search-clear[data-v-46646bec] {\\n width: 20px;\\n height: 20px;\\n padding: 12px;\\n right: -2px;\\n box-sizing: content-box;\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatSidebar.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--7-oneOf-1-1!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--7-oneOf-1-2!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
3359
3359
 
3360
3360
  /***/ }),
3361
3361
 
@@ -12617,7 +12617,7 @@ eval("module.exports = function(originalModule) {\n\tif (!originalModule.webpack
12617
12617
  /*! exports provided: name, version, main, private, scripts, dependencies, devDependencies, browserslist, directories, keywords, license, default */
12618
12618
  /***/ (function(module) {
12619
12619
 
12620
- eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.36\\\",\\\"main\\\":\\\"lib/ZjPluginIntelligent.umd.min.js\\\",\\\"private\\\":false,\\\"scripts\\\":{\\\"serve\\\":\\\"vue-cli-service serve\\\",\\\"build\\\":\\\"vue-cli-service build\\\",\\\"lib\\\":\\\"vue-cli-service build --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\",\\\"lib:test\\\":\\\"vue-cli-service build --mode test --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\"},\\\"dependencies\\\":{\\\"html2canvas\\\":\\\"^1.4.1\\\",\\\"markdown-it\\\":\\\"^14.1.0\\\"},\\\"devDependencies\\\":{\\\"@babel/preset-env\\\":\\\"^7.14.9\\\",\\\"@vue/cli-plugin-babel\\\":\\\"~4.5.0\\\",\\\"@vue/cli-plugin-eslint\\\":\\\"^4.5.13\\\",\\\"@vue/cli-plugin-vuex\\\":\\\"~4.5.0\\\",\\\"@vue/cli-service\\\":\\\"~4.5.0\\\",\\\"axios\\\":\\\"^0.27.2\\\",\\\"babel-eslint\\\":\\\"^10.1.0\\\",\\\"babel-plugin-component\\\":\\\"^1.1.1\\\",\\\"compression-webpack-plugin\\\":\\\"^6.0.3\\\",\\\"core-js\\\":\\\"^3.6.5\\\",\\\"element-ui\\\":\\\"^2.15.4\\\",\\\"eslint\\\":\\\"^7.30.0\\\",\\\"eslint-plugin-vue\\\":\\\"^7.13.0\\\",\\\"js-cookie\\\":\\\"^2.2.1\\\",\\\"node-sass\\\":\\\"^4.12.0\\\",\\\"obs-upload\\\":\\\"^1.0.4-alpha.0\\\",\\\"reconnecting-websocket\\\":\\\"^4.4.0\\\",\\\"sass-loader\\\":\\\"^8.0.2\\\",\\\"snowflake-id\\\":\\\"^1.1.0\\\",\\\"vue\\\":\\\"^2.6.11\\\",\\\"vue-template-compiler\\\":\\\"^2.6.11\\\",\\\"vuex\\\":\\\"^3.4.0\\\",\\\"pako\\\":\\\"^2.1.0\\\",\\\"webpack-bundle-analyzer\\\":\\\"^4.4.2\\\"},\\\"browserslist\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"not dead\\\"],\\\"directories\\\":{\\\"lib\\\":\\\"lib\\\"},\\\"keywords\\\":[],\\\"license\\\":\\\"ISC\\\"}\");\n\n//# sourceURL=webpack://ZjPluginIntelligent/./package.json?");
12620
+ eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.38\\\",\\\"main\\\":\\\"lib/ZjPluginIntelligent.umd.min.js\\\",\\\"private\\\":false,\\\"scripts\\\":{\\\"serve\\\":\\\"vue-cli-service serve\\\",\\\"build\\\":\\\"vue-cli-service build\\\",\\\"lib\\\":\\\"vue-cli-service build --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\",\\\"lib:test\\\":\\\"vue-cli-service build --mode test --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\"},\\\"dependencies\\\":{\\\"html2canvas\\\":\\\"^1.4.1\\\",\\\"markdown-it\\\":\\\"^14.1.0\\\"},\\\"devDependencies\\\":{\\\"@babel/preset-env\\\":\\\"^7.14.9\\\",\\\"@vue/cli-plugin-babel\\\":\\\"~4.5.0\\\",\\\"@vue/cli-plugin-eslint\\\":\\\"^4.5.13\\\",\\\"@vue/cli-plugin-vuex\\\":\\\"~4.5.0\\\",\\\"@vue/cli-service\\\":\\\"~4.5.0\\\",\\\"axios\\\":\\\"^0.27.2\\\",\\\"babel-eslint\\\":\\\"^10.1.0\\\",\\\"babel-plugin-component\\\":\\\"^1.1.1\\\",\\\"compression-webpack-plugin\\\":\\\"^6.0.3\\\",\\\"core-js\\\":\\\"^3.6.5\\\",\\\"element-ui\\\":\\\"^2.15.4\\\",\\\"eslint\\\":\\\"^7.30.0\\\",\\\"eslint-plugin-vue\\\":\\\"^7.13.0\\\",\\\"js-cookie\\\":\\\"^2.2.1\\\",\\\"node-sass\\\":\\\"^4.12.0\\\",\\\"obs-upload\\\":\\\"^1.0.4-alpha.0\\\",\\\"reconnecting-websocket\\\":\\\"^4.4.0\\\",\\\"sass-loader\\\":\\\"^8.0.2\\\",\\\"snowflake-id\\\":\\\"^1.1.0\\\",\\\"vue\\\":\\\"^2.6.11\\\",\\\"vue-template-compiler\\\":\\\"^2.6.11\\\",\\\"vuex\\\":\\\"^3.4.0\\\",\\\"pako\\\":\\\"^2.1.0\\\",\\\"webpack-bundle-analyzer\\\":\\\"^4.4.2\\\"},\\\"browserslist\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"not dead\\\"],\\\"directories\\\":{\\\"lib\\\":\\\"lib\\\"},\\\"keywords\\\":[],\\\"license\\\":\\\"ISC\\\"}\");\n\n//# sourceURL=webpack://ZjPluginIntelligent/./package.json?");
12621
12621
 
12622
12622
  /***/ }),
12623
12623
 
@@ -13509,7 +13509,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
13509
13509
  /***/ (function(module, exports, __webpack_require__) {
13510
13510
 
13511
13511
  "use strict";
13512
- eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.getAuth = getAuth;\nexports.setAuth = setAuth;\nexports.setBaseURL = setBaseURL;\nexports.setToken = setToken;\nexports.signQueryParams = signQueryParams;\n__webpack_require__(/*! core-js/modules/es.error.cause.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.error.cause.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.constructor.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.filter.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.map.js\");\nvar _axios = _interopRequireDefault(__webpack_require__(/*! axios */ \"./node_modules/_axios@0.27.2@axios/index.js\"));\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _message = __webpack_require__(/*! @lib/utils/message.js */ \"./src/lib/utils/message.js\");\n/*\r\n * @Author: 高瑞廷 2419056691@qq.com\r\n * @Date: 2026-06-04 11:27:13\r\n * @LastEditors: 高瑞廷 2419056691@qq.com\r\n * @LastEditTime: 2026-07-17 14:22:37\r\n * @FilePath: \\zjkj-nodejs-npm_customer-client\\src\\lib\\utils\\request.js\r\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r\n */\n\nlet runtimeAK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_AK || '';\nlet runtimeSK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_SK || '';\nlet runtimeToken = '';\n\n// let _user = '202007091611352'\n// let _companyNo = '201912241159840'\nlet _user = '';\nlet _companyNo = '';\nlet runtimeBaseURL = \"https://ai.jybtech.cn\" || false;\nconst CryptoJS = __webpack_require__(/*! crypto-js */ \"./node_modules/_crypto-js@4.2.0@crypto-js/index.js\");\nconst service = _axios.default.create({\n baseURL: runtimeBaseURL,\n timeout: 15000\n});\nfunction hmacSha256Base64(rawSignStr, sk) {\n const hmac = CryptoJS.HmacSHA256(rawSignStr, sk);\n // 转为 Base64\n return CryptoJS.enc.Base64.stringify(hmac);\n}\nfunction setAuth(ak, sk, user, companyNo, token) {\n runtimeAK = ak || '';\n runtimeSK = sk || '';\n _user = user;\n _companyNo = companyNo;\n runtimeToken = token || '';\n}\nfunction setToken(token) {\n runtimeToken = token || '';\n}\nfunction getAuth() {\n return {\n ak: runtimeAK,\n sk: runtimeSK,\n token: runtimeToken,\n user: _user,\n companyNo: _companyNo\n };\n}\nfunction setBaseURL(url) {\n runtimeBaseURL = url || '';\n service.defaults.baseURL = runtimeBaseURL;\n}\nfunction signQueryParams(params, secretKey) {\n const keys = Object.keys(params).filter(k => k !== 'ak' && k !== 'sign').sort();\n const raw = keys.map(k => `${k}=${params[k] || ''}`).join('&');\n return hmacSha256Base64(raw, secretKey);\n}\nservice.interceptors.request.use(config => {\n // 流式接口跳过 Header 签名\n if (config.url.includes('/chat/stream')) {\n return config;\n }\n const ts = Date.now().toString();\n const token = runtimeToken || (0, _cookie.getToken)();\n const externalUser = _user || '';\n const signParts = [];\n // 1. 第一位:token(有值才加入)\n if (_companyNo) {\n signParts.push(`companyNo=${_companyNo}`);\n }\n if (token) {\n signParts.push(`token=${token}`);\n }\n // 2. 第二位:user(有值才加入)\n if (externalUser) {\n signParts.push(`user=${externalUser}`);\n }\n // 3. 第三位:ts(必选,永远存在)\n signParts.push(`ts=${ts}`);\n\n // 拼接最终待签字符串\n const signStr = signParts.join('&');\n // 计算签名\n const sign = hmacSha256Base64(signStr, runtimeSK);\n if (_companyNo) {\n config.headers['X-Company-No'] = _companyNo;\n }\n\n // 设置请求头\n config.headers['X-AK'] = runtimeAK;\n config.headers['X-Ts'] = ts;\n config.headers['X-Sign'] = sign;\n if (token) {\n config.headers['X-Auth-Token'] = `${token}`;\n config.headers.Authorization = `Bearer ${token}`;\n }\n config.headers['X-External-User'] = externalUser;\n config.headers['Content-Type'] = 'application/json';\n\n // console.log('排序后key:', sortedKeys)\n\n return config;\n}, error => Promise.reject(error));\nservice.interceptors.response.use(response => {\n const res = response.data;\n if (res.code === 200) {\n return res;\n } else if (res.code === 40101) {\n (0, _message.showMessage)('登录已过期,请重新登录');\n return Promise.reject(new Error(res.message));\n } else {\n (0, _message.showMessage)(res.message || '请求失败');\n return Promise.reject(new Error(res.message));\n }\n}, error => {\n (0, _message.showMessage)(error.message || '网络异常');\n return Promise.reject(error);\n});\nvar _default = exports.default = service;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/utils/request.js?");
13512
+ eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.getAuth = getAuth;\nexports.setAuth = setAuth;\nexports.setBaseURL = setBaseURL;\nexports.setToken = setToken;\nexports.signQueryParams = signQueryParams;\n__webpack_require__(/*! core-js/modules/es.error.cause.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.error.cause.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.constructor.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.filter.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.map.js\");\nvar _axios = _interopRequireDefault(__webpack_require__(/*! axios */ \"./node_modules/_axios@0.27.2@axios/index.js\"));\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _message = __webpack_require__(/*! @lib/utils/message.js */ \"./src/lib/utils/message.js\");\n/*\r\n * @Author: 高瑞廷 2419056691@qq.com\r\n * @Date: 2026-06-04 11:27:13\r\n * @LastEditors: 高瑞廷 2419056691@qq.com\r\n * @LastEditTime: 2026-07-20 11:11:13\r\n * @FilePath: \\zjkj-nodejs-npm_customer-client\\src\\lib\\utils\\request.js\r\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r\n */\n\nlet runtimeAK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_AK || '';\nlet runtimeSK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_SK || '';\nlet runtimeToken = '';\n\n// let _user = '202007091611352'\n// let _companyNo = '201912241159840'\nlet _user = '';\nlet _companyNo = '';\nlet runtimeBaseURL = \"https://ai.jybtech.cn\" || false;\nconst CryptoJS = __webpack_require__(/*! crypto-js */ \"./node_modules/_crypto-js@4.2.0@crypto-js/index.js\");\nconst service = _axios.default.create({\n baseURL: runtimeBaseURL,\n timeout: 15000\n});\nfunction hmacSha256Base64(rawSignStr, sk) {\n const hmac = CryptoJS.HmacSHA256(rawSignStr, sk);\n // 转为 Base64\n return CryptoJS.enc.Base64.stringify(hmac);\n}\nfunction setAuth(ak, sk, user, companyNo, token) {\n runtimeAK = ak || '';\n runtimeSK = sk || '';\n _user = user;\n _companyNo = companyNo;\n runtimeToken = token || '';\n}\nfunction setToken(token) {\n runtimeToken = token || '';\n}\nfunction getAuth() {\n return {\n ak: runtimeAK,\n sk: runtimeSK,\n token: runtimeToken,\n user: _user,\n companyNo: _companyNo\n };\n}\nfunction setBaseURL(url) {\n runtimeBaseURL = url || '';\n service.defaults.baseURL = runtimeBaseURL;\n}\nfunction signQueryParams(params, secretKey) {\n const keys = Object.keys(params).filter(k => k !== 'ak' && k !== 'sign').sort();\n const raw = keys.map(k => `${k}=${params[k] || ''}`).join('&');\n return hmacSha256Base64(raw, secretKey);\n}\nservice.interceptors.request.use(config => {\n // 流式接口跳过 Header 签名\n if (config.url.includes('/chat/stream')) {\n return config;\n }\n const ts = Date.now().toString();\n const token = runtimeToken || (0, _cookie.getToken)();\n const externalUser = _user || '';\n const signParts = [];\n // 1. 第一位:token(有值才加入)\n if (_companyNo) {\n signParts.push(`companyNo=${_companyNo}`);\n }\n if (token) {\n signParts.push(`token=${token}`);\n }\n // 2. 第二位:user(有值才加入)\n if (externalUser) {\n signParts.push(`user=${externalUser}`);\n }\n // 3. 第三位:ts(必选,永远存在)\n signParts.push(`ts=${ts}`);\n\n // 拼接最终待签字符串\n const signStr = signParts.join('&');\n // 计算签名\n const sign = hmacSha256Base64(signStr, runtimeSK);\n if (_companyNo) {\n config.headers['X-Company-No'] = _companyNo;\n }\n\n // 设置请求头\n config.headers['X-AK'] = runtimeAK;\n config.headers['X-Ts'] = ts;\n config.headers['X-Sign'] = sign;\n if (token) {\n config.headers['X-Auth-Token'] = `${token}`;\n config.headers.Authorization = `Bearer ${token}`;\n }\n config.headers['X-External-User'] = externalUser;\n config.headers['Content-Type'] = 'application/json';\n\n // console.log('排序后key:', sortedKeys)\n\n return config;\n}, error => Promise.reject(error));\nservice.interceptors.response.use(response => {\n const res = response.data;\n if (res.code === 200) {\n return res;\n } else if (res.code === 40101) {\n (0, _message.showMessage)('登录已过期,请重新登录');\n return Promise.reject(new Error(res.message));\n } else {\n (0, _message.showMessage)(res.message || '请求失败');\n return Promise.reject(new Error(res.message));\n }\n}, error => {\n (0, _message.showMessage)(error.message || '网络异常');\n return Promise.reject(error);\n});\nvar _default = exports.default = service;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/utils/request.js?");
13513
13513
 
13514
13514
  /***/ }),
13515
13515
 
@@ -1044,7 +1044,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
1044
1044
  /***/ (function(module, exports, __webpack_require__) {
1045
1045
 
1046
1046
  "use strict";
1047
- eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.staticRenderFns = exports.render = void 0;\nvar render = exports.render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"chat-main\"\n }, [_c(\"div\", {\n staticClass: \"chat-header\"\n }, [_c(\"div\", {\n staticClass: \"header-left\"\n }, [_vm.isMobile && _vm.activeSessionId ? _c(\"button\", {\n staticClass: \"mobile-back-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"go-back-to-list\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M15 18l-6-6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])]) : _vm.isMobile ? _c(\"button\", {\n staticClass: \"mobile-menu-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"toggle-sidebar\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18M3 12h18M3 18h18\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n }\n })])]) : _vm._e(), _vm.currentAgent && (_vm.activeSessionId || _vm.messages.length > 0) ? _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_c(\"div\", {\n staticClass: \"chat-agent-avatar-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"agent-list-avatar session-avatar\",\n class: {\n \"has-agent-img\": _vm.agentInfo.avatar\n },\n style: {\n background: _vm.agentInfo.color || \"linear-gradient(135deg, #1677ff, #4096ff)\"\n }\n }, [_vm.agentInfo.avatar ? _c(\"img\", {\n staticClass: \"avatar-pic\",\n attrs: {\n src: _vm.agentInfo.avatar,\n alt: \"\"\n }\n }) : [_vm._v(_vm._s(_vm.getInitial(_vm.agentInfo.agentName || _vm.agentInfo.agentCode)))]], 2)]), _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\"\n }, [_vm._v(_vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"agent-desc\"\n }, [_vm._v(_vm._s(_vm.currentAgentDesc))])])]) : _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_vm._m(0)])]), _vm.isMobile && !_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"header-actions\"\n }, [_c(\"button\", {\n staticClass: \"mobile-header-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"agent-jump-click\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 3C6.5 3 2 6.58 2 11c0 2.03.95 3.88 2.5 5.3L3 21l4.6-1.7c1.36.45 2.86.7 4.4.7 5.5 0 10-3.58 10-8s-4.5-8-10-8z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"8\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"12\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"16\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n })])])]) : _vm._e()]), _c(\"div\", {\n ref: \"messagesRef\",\n staticClass: \"chat-body\",\n on: {\n scroll: _vm.onScrollMessages\n }\n }, [!_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"welcome welcome-default\"\n }, [_c(\"div\", {\n staticClass: \"welcome-icon\"\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 48 48\",\n width: \"64\",\n height: \"64\"\n }\n }, [_c(\"path\", {\n attrs: {\n fill: \"#e6f4ff\",\n d: \"M40 22c-2.21 0-4 1.79-4 4v10H12c-2.21 0-4-1.79-4-4V14c0-2.21 1.79-4 4-4h24c2.21 0 4 1.79 4 4v8z\"\n }\n }), _c(\"path\", {\n attrs: {\n fill: \"#1677ff\",\n d: \"M36 8c-2.21 0-4 1.79-4 4v18H8c-2.21 0-4-1.79-4-4V12c0-2.21 1.79-4 4-4h28z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"20\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"28\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n })])]), _c(\"div\", {\n staticClass: \"welcome-title\"\n }, [_vm._v(\"欢迎使用 AI 助手\")]), _c(\"div\", {\n staticClass: \"welcome-text\"\n }, [_vm._v(\"从左侧选择一个会话,或搜索助手开始新的对话\")])]) : _vm.messages.length === 0 && !_vm.loadingSessionMsg ? _c(\"div\", {\n staticClass: \"chat-empty-welcome\"\n }, [_vm.agentInfo.hasOwnProperty(\"agentCode\") ? _c(\"div\", {\n staticClass: \"welcome-card\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar-box\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar\",\n class: {\n \"has-chat-agent-img\": _vm.agentInfo.avatar\n },\n style: _vm.getChatAvatarStyle(_vm.currentAgent, _vm.agentInfo.avatar)\n }, [!_vm.agentInfo.avatar ? [_vm._v(_vm._s(_vm.getInitial(_vm.currentAgentName)))] : _vm._e()], 2)]), _c(\"div\", {\n staticClass: \"welcome-text-group\"\n }, [_c(\"div\", {\n staticClass: \"text-sm\"\n }, [_vm._v(\"您好,我是\" + _vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"text-lg\"\n }, [_vm._v(_vm._s(_vm.greeting))])])]) : _vm._e(), _c(\"div\", {\n staticClass: \"guess-box\"\n }, [_c(\"div\", {\n staticClass: \"guess-title\"\n }, [_c(\"svg\", {\n attrs: {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 24 24\",\n fill: \"#1677ff\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\"\n }\n })]), _c(\"span\", [_vm._v(\"猜您想问\")])]), _c(\"div\", {\n staticClass: \"tag-wrap\"\n }, _vm._l(_vm.agentInfo.suggestedQuestions, function (tag) {\n return _c(\"div\", {\n key: tag,\n staticClass: \"quick-tag\",\n on: {\n click: function ($event) {\n return _vm.sendQuickMsg(tag);\n }\n }\n }, [_vm._v(\" \" + _vm._s(tag) + \" \")]);\n }), 0)])]) : _vm._e(), _vm._l(_vm.messages, function (m) {\n return _c(\"div\", {\n key: m.id,\n staticClass: \"msg-row\",\n class: m.role\n }, [_c(\"div\", {\n staticClass: \"msg-main\"\n }, [_c(\"div\", {\n staticClass: \"msg-content\"\n }, [_c(\"div\", {\n staticClass: \"bubble\",\n class: m.role\n }, [m.role === \"user\" && m._sttStatus ? _c(\"div\", {\n staticClass: \"stt-bubble-wrap\"\n }, [m._sttStatus === \"pending\" ? _c(\"span\", {\n staticClass: \"stt-spinner stt-outside-icon\"\n }) : m._sttStatus === \"error\" ? _c(\"span\", {\n staticClass: \"stt-error-icon stt-outside-icon\"\n }, [_vm._v(\"!\")]) : _vm._e(), _c(\"span\", {\n staticClass: \"stt-bubble-text\"\n }, [_vm._v(_vm._s(m._sttStatus === \"pending\" ? \"转化中...\" : \"语音转文字失败\"))])]) : _vm._e(), !m._sttStatus && m.thinking ? _c(\"details\", {\n staticClass: \"thinking-details\",\n attrs: {\n open: \"\"\n }\n }, [_c(\"summary\", {\n staticClass: \"thinking-summary\"\n }, [_vm._v(\"💭 思考过程\")]), _c(\"div\", {\n staticClass: \"thinking-body\",\n domProps: {\n innerHTML: _vm._s(_vm.escapeHtml(m.thinking))\n }\n })]) : _vm._e(), !m._sttStatus && m.content && m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderStreaming(m.content, m._key))\n }\n }) : _vm._e(), !m._sttStatus && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderMarkdown(m.content))\n }\n }) : _vm._e(), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !m._sttStatus && _vm.showToolInfo && m.toolCalls && m.toolCalls.length,\n expression: \"!m._sttStatus && showToolInfo && m.toolCalls && m.toolCalls.length\"\n }],\n staticClass: \"tool-calls\"\n }, _vm._l(m.toolCalls, function (tc, ti) {\n return _c(\"div\", {\n key: ti,\n staticClass: \"tool-item\"\n }, [_c(\"span\", {\n staticClass: \"tool-badge\"\n }, [_vm._v(\"工具返回\")]), _c(\"pre\", [_vm._v(_vm._s(tc.substring(0, 300)) + _vm._s(tc.length > 300 ? \"...\" : \"\"))])]);\n }), 0), m.loading ? _c(\"div\", {\n staticClass: \"typing\",\n class: _vm.waitClass\n }, [_c(\"span\", {\n staticClass: \"phrase\"\n }, [_vm._v(\"思考中\")]), _vm._m(1, true)]) : _vm._e()]), m.role === \"assistant\" && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"msg-actions\"\n }, [_c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制\"\n },\n on: {\n click: function ($event) {\n return _vm.copyText(m.content);\n }\n }\n }, [_vm._v(\"📋 复制\")]), _c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制为图片\"\n },\n on: {\n click: function ($event) {\n return _vm.copyAsImage(m.content);\n }\n }\n }, [_vm._v(\"🖼 复制为图片\")])]) : _vm._e()])])]);\n })], 2), _c(\"div\", {\n staticClass: \"chat-footer\"\n }, [_c(\"div\", {\n staticClass: \"input-area\"\n }, [_vm.isMobile ? _c(\"button\", {\n staticClass: \"voice-btn\",\n attrs: {\n disabled: _vm.sending\n },\n on: {\n click: _vm.toggleVoiceMode\n }\n }, [!_vm.voiceMode ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M9 20h6v2H9z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18v2H3V6zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\"\n }\n })])]) : _vm._e(), !_vm.voiceMode || !_vm.isMobile ? [_c(\"textarea\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.inputText,\n expression: \"inputText\"\n }],\n ref: \"taRef\",\n staticClass: \"chat-textarea\",\n attrs: {\n placeholder: \"请输入消息\",\n maxlength: \"300\",\n disabled: _vm.sending\n },\n domProps: {\n value: _vm.inputText\n },\n on: {\n input: [function ($event) {\n if ($event.target.composing) return;\n _vm.inputText = $event.target.value;\n }, _vm.autoResizeTextarea],\n focus: _vm.onInputFocus,\n keydown: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n _vm.isMobile ? _vm.newLine($event) : _vm.sendMessage();\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n return _vm.newLine.apply(null, arguments);\n }]\n }\n }), !_vm.sending ? _c(\"button\", {\n staticClass: \"send-btn\",\n class: {\n active: _vm.inputText.trim()\n },\n attrs: {\n disabled: _vm.sending || !_vm.inputText.trim()\n },\n on: {\n click: _vm.sendMessage\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"20\",\n height: \"20\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"\n }\n })])]) : _vm._e(), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()] : [_c(\"div\", {\n staticClass: \"hold-talk-btn\",\n class: {\n recording: _vm.isRecording\n },\n on: {\n touchstart: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchStart($event);\n },\n touchmove: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchMove($event);\n },\n touchend: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchEnd.apply(null, arguments);\n }\n }\n }, [!_vm.isRecording ? _c(\"svg\", {\n staticClass: \"hold-talk-icon\",\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n })]) : _vm._e(), _c(\"span\", [_vm._v(_vm._s(_vm.isRecording ? _vm.isCancelSwipe ? \"松开取消\" : \"松手发送\" : \"按住说话\"))])]), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()], _vm.showDownBtn && _vm.messages.length !== 0 ? _c(\"div\", {\n staticClass: \"scroll-bottom-wrap\"\n }, [_c(\"div\", {\n staticClass: \"scroll-bottom-btn\",\n on: {\n click: function ($event) {\n return _vm.scrollToBottom(true);\n }\n }\n }, [_vm.sending ? _c(\"div\", {\n staticClass: \"loading-circle\"\n }) : _vm._e(), _c(\"svg\", {\n attrs: {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M6 9l6 6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])])]) : _vm._e()], 2)]), _vm.isRecording ? _c(\"div\", {\n staticClass: \"voice-recording-overlay\"\n }, [_c(\"div\", {\n staticClass: \"voice-recording-card\"\n }, [_vm._m(2), _c(\"div\", {\n staticClass: \"voice-recording-duration\"\n }, [_vm._v(_vm._s(_vm.recordDuration)), _c(\"span\", {\n staticClass: \"unit\"\n }, [_vm._v(\"s\")])]), _c(\"div\", {\n staticClass: \"voice-recording-hint\",\n class: {\n cancel: _vm.isCancelSwipe\n }\n }, [_vm.isCancelSwipe ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#ff4d4f\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#999\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n }\n })]), _vm._v(\" \" + _vm._s(_vm.isCancelSwipe ? \"松开取消发送\" : \"手指上滑 取消发送\") + \" \")])])]) : _vm._e()]);\n};\nvar staticRenderFns = exports.staticRenderFns = [function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\",\n staticStyle: {\n color: \"#bbb\"\n }\n }, [_vm._v(\"请选择助手\")])]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"span\", {\n staticClass: \"dots\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"voice-recording-wave\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatDetail.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%224b66220e-vue-loader-template%22%7D!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--13-0!./node_modules/_babel-loader@8.4.1@babel-loader/lib!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
1047
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.staticRenderFns = exports.render = void 0;\nvar render = exports.render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"chat-main\"\n }, [_c(\"div\", {\n staticClass: \"chat-header\"\n }, [_c(\"div\", {\n staticClass: \"header-left\"\n }, [_vm.isMobile && _vm.activeSessionId ? _c(\"button\", {\n staticClass: \"mobile-back-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"go-back-to-list\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M15 18l-6-6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])]) : _vm.isMobile ? _c(\"button\", {\n staticClass: \"mobile-menu-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"toggle-sidebar\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18M3 12h18M3 18h18\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n }\n })])]) : _vm._e(), _vm.currentAgent && (_vm.activeSessionId || _vm.messages.length > 0) ? _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_c(\"div\", {\n staticClass: \"chat-agent-avatar-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"agent-list-avatar session-avatar\",\n class: {\n \"has-agent-img\": _vm.agentInfo.avatar\n },\n style: {\n background: _vm.agentInfo.color || \"linear-gradient(135deg, #1677ff, #4096ff)\"\n }\n }, [_vm.agentInfo.avatar ? _c(\"img\", {\n staticClass: \"avatar-pic\",\n attrs: {\n src: _vm.agentInfo.avatar,\n alt: \"\"\n }\n }) : [_vm._v(_vm._s(_vm.getInitial(_vm.agentInfo.agentName || _vm.agentInfo.agentCode)))]], 2)]), _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\"\n }, [_vm._v(_vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"agent-desc\"\n }, [_vm._v(_vm._s(_vm.currentAgentDesc))])])]) : _c(\"div\", {\n staticClass: \"agent-info\"\n }, [_vm._m(0)])]), _vm.isMobile && !_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"header-actions\"\n }, [_c(\"button\", {\n staticClass: \"mobile-header-btn\",\n attrs: {\n type: \"button\"\n },\n on: {\n click: function ($event) {\n return _vm.$emit(\"agent-jump-click\");\n }\n }\n }, [_c(\"svg\", {\n attrs: {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 3C6.5 3 2 6.58 2 11c0 2.03.95 3.88 2.5 5.3L3 21l4.6-1.7c1.36.45 2.86.7 4.4.7 5.5 0 10-3.58 10-8s-4.5-8-10-8z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"8\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"12\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"16\",\n cy: \"11\",\n r: \"1.3\",\n fill: \"#fff\"\n }\n })])])]) : _vm._e()]), _c(\"div\", {\n ref: \"messagesRef\",\n staticClass: \"chat-body\",\n on: {\n scroll: _vm.onScrollMessages\n }\n }, [!_vm.activeSessionId ? _c(\"div\", {\n staticClass: \"welcome welcome-default\"\n }, [_c(\"div\", {\n staticClass: \"welcome-icon\"\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 48 48\",\n width: \"64\",\n height: \"64\"\n }\n }, [_c(\"path\", {\n attrs: {\n fill: \"#e6f4ff\",\n d: \"M40 22c-2.21 0-4 1.79-4 4v10H12c-2.21 0-4-1.79-4-4V14c0-2.21 1.79-4 4-4h24c2.21 0 4 1.79 4 4v8z\"\n }\n }), _c(\"path\", {\n attrs: {\n fill: \"#1677ff\",\n d: \"M36 8c-2.21 0-4 1.79-4 4v18H8c-2.21 0-4-1.79-4-4V12c0-2.21 1.79-4 4-4h28z\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"20\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n }), _c(\"circle\", {\n attrs: {\n cx: \"28\",\n cy: \"28\",\n r: \"3\",\n fill: \"#fff\"\n }\n })])]), _c(\"div\", {\n staticClass: \"welcome-title\"\n }, [_vm._v(\"欢迎使用 AI 助手\")]), _c(\"div\", {\n staticClass: \"welcome-text\"\n }, [_vm._v(\"从左侧选择一个会话,或搜索助手开始新的对话\")])]) : _vm.messages.length === 0 && !_vm.loadingSessionMsg ? _c(\"div\", {\n staticClass: \"chat-empty-welcome\"\n }, [_vm.agentInfo.hasOwnProperty(\"agentCode\") ? _c(\"div\", {\n staticClass: \"welcome-card\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar-box\"\n }, [_c(\"div\", {\n staticClass: \"welcome-avatar\",\n class: {\n \"has-chat-agent-img\": _vm.agentInfo.avatar\n },\n style: _vm.getChatAvatarStyle(_vm.currentAgent, _vm.agentInfo.avatar)\n }, [!_vm.agentInfo.avatar ? [_vm._v(_vm._s(_vm.getInitial(_vm.currentAgentName)))] : _vm._e()], 2)]), _c(\"div\", {\n staticClass: \"welcome-text-group\"\n }, [_c(\"div\", {\n staticClass: \"text-sm\"\n }, [_vm._v(\"您好,我是\" + _vm._s(_vm.currentAgentName))]), _c(\"div\", {\n staticClass: \"text-lg\"\n }, [_vm._v(_vm._s(_vm.greeting))])])]) : _vm._e(), _c(\"div\", {\n staticClass: \"guess-box\"\n }, [_c(\"div\", {\n staticClass: \"guess-title\"\n }, [_c(\"svg\", {\n attrs: {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 24 24\",\n fill: \"#1677ff\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\"\n }\n })]), _c(\"span\", [_vm._v(\"猜您想问\")])]), _c(\"div\", {\n staticClass: \"tag-wrap\"\n }, _vm._l(_vm.agentInfo.suggestedQuestions, function (tag) {\n return _c(\"div\", {\n key: tag,\n staticClass: \"quick-tag\",\n on: {\n click: function ($event) {\n return _vm.sendQuickMsg(tag);\n }\n }\n }, [_vm._v(\" \" + _vm._s(tag) + \" \")]);\n }), 0)])]) : _vm._e(), _vm._l(_vm.messages, function (m) {\n return _c(\"div\", {\n key: m.id,\n staticClass: \"msg-row\",\n class: m.role\n }, [_c(\"div\", {\n staticClass: \"msg-main\"\n }, [_c(\"div\", {\n staticClass: \"msg-content\"\n }, [_c(\"div\", {\n staticClass: \"bubble\",\n class: m.role\n }, [m.role === \"user\" && m._sttStatus ? _c(\"div\", {\n staticClass: \"stt-bubble-wrap\"\n }, [m._sttStatus === \"pending\" ? _c(\"span\", {\n staticClass: \"stt-spinner stt-outside-icon\"\n }) : m._sttStatus === \"error\" ? _c(\"span\", {\n staticClass: \"stt-error-icon stt-outside-icon\"\n }, [_vm._v(\"!\")]) : _vm._e(), _c(\"span\", {\n staticClass: \"stt-bubble-text\"\n }, [_vm._v(_vm._s(m._sttStatus === \"pending\" ? \"转化中...\" : \"语音转文字失败\"))])]) : _vm._e(), !m._sttStatus && m.thinking ? _c(\"details\", {\n staticClass: \"thinking-details\",\n attrs: {\n open: \"\"\n }\n }, [_c(\"summary\", {\n staticClass: \"thinking-summary\"\n }, [_vm._v(\"💭 思考过程\")]), _c(\"div\", {\n staticClass: \"thinking-body\",\n domProps: {\n innerHTML: _vm._s(_vm.escapeHtml(m.thinking))\n }\n })]) : _vm._e(), !m._sttStatus && m.content && m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderStreaming(m.content, m._key))\n }\n }) : _vm._e(), !m._sttStatus && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"final-content\",\n domProps: {\n innerHTML: _vm._s(_vm.renderMarkdown(m.content))\n }\n }) : _vm._e(), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !m._sttStatus && _vm.showToolInfo && m.toolCalls && m.toolCalls.length,\n expression: \"!m._sttStatus && showToolInfo && m.toolCalls && m.toolCalls.length\"\n }],\n staticClass: \"tool-calls\"\n }, _vm._l(m.toolCalls, function (tc, ti) {\n return _c(\"div\", {\n key: ti,\n staticClass: \"tool-item\"\n }, [_c(\"span\", {\n staticClass: \"tool-badge\"\n }, [_vm._v(\"工具返回\")]), _c(\"pre\", [_vm._v(_vm._s(tc.substring(0, 300)) + _vm._s(tc.length > 300 ? \"...\" : \"\"))])]);\n }), 0), m.loading ? _c(\"div\", {\n staticClass: \"typing\",\n class: _vm.waitClass\n }, [_c(\"span\", {\n staticClass: \"phrase\"\n }, [_vm._v(\"思考中\")]), _vm._m(1, true)]) : _vm._e()]), m.role === \"assistant\" && m.content && !m.loading ? _c(\"div\", {\n staticClass: \"msg-actions\"\n }, [_c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制\"\n },\n on: {\n click: function ($event) {\n return _vm.copyText(m.content);\n }\n }\n }, [_vm._v(\"📋 复制\")]), _c(\"span\", {\n staticClass: \"action-btn\",\n attrs: {\n title: \"复制为图片\"\n },\n on: {\n click: function ($event) {\n return _vm.copyAsImage(m.content);\n }\n }\n }, [_vm._v(\"🖼 复制为图片\")])]) : _vm._e()])])]);\n })], 2), _c(\"div\", {\n staticClass: \"chat-footer\"\n }, [_c(\"div\", {\n staticClass: \"input-area\"\n }, [_vm.isMobile ? _c(\"button\", {\n staticClass: \"voice-btn\",\n attrs: {\n disabled: \"\"\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"22\",\n height: \"22\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M3 6h18v2H3V6zm0 5h18v2H3v-2zm0 5h18v2H3v-2z\"\n }\n })])]) : _vm._e(), !_vm.voiceMode || !_vm.isMobile ? [_c(\"textarea\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.inputText,\n expression: \"inputText\"\n }],\n ref: \"taRef\",\n staticClass: \"chat-textarea\",\n attrs: {\n placeholder: \"请输入消息\",\n maxlength: \"300\",\n disabled: _vm.sending\n },\n domProps: {\n value: _vm.inputText\n },\n on: {\n input: [function ($event) {\n if ($event.target.composing) return;\n _vm.inputText = $event.target.value;\n }, _vm.autoResizeTextarea],\n focus: _vm.onInputFocus,\n keydown: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n _vm.isMobile ? _vm.newLine($event) : _vm.sendMessage();\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n return _vm.newLine.apply(null, arguments);\n }]\n }\n }), !_vm.sending ? _c(\"button\", {\n staticClass: \"send-btn\",\n class: {\n active: _vm.inputText.trim()\n },\n attrs: {\n disabled: _vm.sending || !_vm.inputText.trim()\n },\n on: {\n click: _vm.sendMessage\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"20\",\n height: \"20\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"\n }\n })])]) : _vm._e(), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()] : [_c(\"div\", {\n staticClass: \"hold-talk-btn\",\n class: {\n recording: _vm.isRecording\n },\n on: {\n touchstart: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchStart($event);\n },\n touchmove: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchMove($event);\n },\n touchend: function ($event) {\n $event.preventDefault();\n return _vm.onRecordTouchEnd.apply(null, arguments);\n }\n }\n }, [!_vm.isRecording ? _c(\"svg\", {\n staticClass: \"hold-talk-icon\",\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 14a3 3 0 003-3V5a3 3 0 00-6 0v6a3 3 0 003 3z\"\n }\n }), _c(\"path\", {\n attrs: {\n d: \"M17 11a5 5 0 01-10 0H5a7 7 0 0014 0h-2z\"\n }\n }), _c(\"rect\", {\n attrs: {\n x: \"11\",\n y: \"17\",\n width: \"2\",\n height: \"4\",\n rx: \"1\"\n }\n })]) : _vm._e(), _c(\"span\", [_vm._v(_vm._s(_vm.isRecording ? _vm.isCancelSwipe ? \"松开取消\" : \"松手发送\" : \"按住说话\"))])]), _vm.sending ? _c(\"button\", {\n staticClass: \"stop-btn\",\n on: {\n click: _vm.stopAgent\n }\n }, [_c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"18\",\n height: \"18\",\n fill: \"currentColor\"\n }\n }, [_c(\"rect\", {\n attrs: {\n x: \"6\",\n y: \"6\",\n width: \"12\",\n height: \"12\",\n rx: \"2\"\n }\n })])]) : _vm._e()], _vm.showDownBtn && _vm.messages.length !== 0 ? _c(\"div\", {\n staticClass: \"scroll-bottom-wrap\"\n }, [_c(\"div\", {\n staticClass: \"scroll-bottom-btn\",\n on: {\n click: function ($event) {\n return _vm.scrollToBottom(true);\n }\n }\n }, [_vm.sending ? _c(\"div\", {\n staticClass: \"loading-circle\"\n }) : _vm._e(), _c(\"svg\", {\n attrs: {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M6 9l6 6 6-6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }\n })])])]) : _vm._e()], 2)]), _vm.isRecording ? _c(\"div\", {\n staticClass: \"voice-recording-overlay\"\n }, [_c(\"div\", {\n staticClass: \"voice-recording-card\"\n }, [_vm._m(2), _c(\"div\", {\n staticClass: \"voice-recording-duration\"\n }, [_vm._v(_vm._s(_vm.recordDuration)), _c(\"span\", {\n staticClass: \"unit\"\n }, [_vm._v(\"s\")])]), _c(\"div\", {\n staticClass: \"voice-recording-hint\",\n class: {\n cancel: _vm.isCancelSwipe\n }\n }, [_vm.isCancelSwipe ? _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#ff4d4f\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n }\n })]) : _c(\"svg\", {\n attrs: {\n viewBox: \"0 0 24 24\",\n width: \"16\",\n height: \"16\",\n fill: \"#999\"\n }\n }, [_c(\"path\", {\n attrs: {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n }\n })]), _vm._v(\" \" + _vm._s(_vm.isCancelSwipe ? \"松开取消发送\" : \"手指上滑 取消发送\") + \" \")])])]) : _vm._e()]);\n};\nvar staticRenderFns = exports.staticRenderFns = [function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"agent-text\"\n }, [_c(\"div\", {\n staticClass: \"agent-name\",\n staticStyle: {\n color: \"#bbb\"\n }\n }, [_vm._v(\"请选择助手\")])]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"span\", {\n staticClass: \"dots\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}, function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"voice-recording-wave\"\n }, [_c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\"), _c(\"span\")]);\n}];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatDetail.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%224b66220e-vue-loader-template%22%7D!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--13-0!./node_modules/_babel-loader@8.4.1@babel-loader/lib!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
1048
1048
 
1049
1049
  /***/ }),
1050
1050
 
@@ -3355,7 +3355,7 @@ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../.
3355
3355
  /*! no static exports found */
3356
3356
  /***/ (function(module, exports, __webpack_require__) {
3357
3357
 
3358
- eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n/* ── Sidebar ── */\\n.chat-sidebar[data-v-46646bec] {\\n width: 300px;\\n min-width: 300px;\\n background: #fff;\\n border-right: 1px solid #e8e8e8;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 14px 8px 14px 16px;\\n border-bottom: 1px solid #e8e8e8;\\n flex-shrink: 0;\\n}\\n.sidebar-header i[data-v-46646bec]{\\n font-size: 20px;\\n cursor: pointer;\\n}\\n.sidebar-header img[data-v-46646bec]{\\n cursor: pointer;\\n}\\n.sidebar-title[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 600;\\n color: #333;\\n}\\n.sidebar-search[data-v-46646bec] {\\n padding: 8px 16px;\\n flex-shrink: 0;\\n position: relative;\\n z-index: 20;\\n}\\n.sidebar-search .search-wrap[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n position: relative;\\n}\\n.sidebar-search .search-icon[data-v-46646bec] {\\n position: absolute;\\n left: 12px;\\n flex-shrink: 0;\\n pointer-events: none;\\n}\\n.sidebar-search .search-input[data-v-46646bec] {\\n width: 100%;\\n height: 32px;\\n border-radius: 16px;\\n background: #f5f5f5;\\n border: 1px solid transparent;\\n font-size: 13px;\\n padding: 0 32px 0 34px;\\n outline: none;\\n box-sizing: border-box;\\n transition: all 0.2s;\\n}\\n.sidebar-search .search-input[data-v-46646bec]:focus {\\n background: #fff;\\n border: 1px solid #1677ff;\\n}\\n.sidebar-search .search-clear[data-v-46646bec] {\\n position: absolute;\\n right: 10px;\\n cursor: pointer;\\n flex-shrink: 0;\\n}\\n.search-suggestions[data-v-46646bec] {\\n position: absolute;\\n top: 100%;\\n left: 16px;\\n right: 16px;\\n background: #fff;\\n border: 1px solid #e8e8e8;\\n border-radius: 8px;\\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\\n z-index: 100;\\n max-height: 240px;\\n overflow-y: auto;\\n margin-top: 4px;\\n}\\n.suggestion-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 10px 12px;\\n cursor: pointer;\\n transition: background 0.15s;\\n}\\n.suggestion-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px;\\n height: 28px;\\n border-radius: 6px;\\n background: linear-gradient(135deg, #1677ff, #4096ff);\\n color: #fff;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 13px;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n.suggestion-name[data-v-46646bec] {\\n font-size: 14px;\\n font-weight: 500;\\n color: #333;\\n white-space: nowrap;\\n}\\n.suggestion-desc[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.sidebar-list[data-v-46646bec] {\\n flex: 1;\\n overflow-y: auto;\\n padding: 8px 0;\\n}\\n.session-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n padding: 6px 16px;\\n padding-bottom: 10px;\\n cursor: pointer;\\n border-bottom: 1px solid #f5f5f5;\\n transition: background 0.15s;\\n position: relative;\\n gap: 10px;\\n border-radius: 4px;\\n touch-action: manipulation;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-left-item[data-v-46646bec] {\\n margin-left: 5px;\\n}\\n.session-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.session-item.active[data-v-46646bec] {\\n background: #F5F5F5;\\n}\\n.session-avatar[data-v-46646bec] {\\n width: 44px !important;\\n height: 44px !important;\\n border-radius: 50% !important;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px !important;\\n font-weight: 600;\\n color: #fff;\\n flex-shrink: 0;\\n overflow: hidden;\\n}\\n.avatar-pic[data-v-46646bec] {\\n width: 85%;\\n height: 85%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.session-info[data-v-46646bec] {\\n flex: 1;\\n min-width: 0;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-agent[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 500;\\n color: #333;\\n margin-bottom: 2px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-preview[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-time[data-v-46646bec] {\\n font-size: 11px;\\n color: #bbb;\\n flex-shrink: 0;\\n margin-left: 8px;\\n margin-right: 4px;\\n}\\n.session-delete[data-v-46646bec] {\\n position: absolute;\\n right: 4px;\\n top: 20px;\\n transform: translateY(-50%);\\n opacity: 0;\\n transition: opacity 0.15s;\\n width: 28px;\\n height: 28px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border: none;\\n background: transparent;\\n padding: 0;\\n color: #333;\\n cursor: pointer;\\n}\\n.session-delete svg[data-v-46646bec] {\\n color: #333;\\n}\\n.session-item:hover .session-delete[data-v-46646bec] {\\n opacity: 1;\\n}\\n.sidebar-loading[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n gap: 12px;\\n}\\n.sidebar-loading .loading-spinner[data-v-46646bec] {\\n width: 24px;\\n height: 24px;\\n border: 2.5px solid #e8e8e8;\\n border-top-color: #1677ff;\\n border-radius: 50%;\\n animation: sidebar-spin-46646bec 0.7s linear infinite;\\n}\\n@keyframes sidebar-spin-46646bec {\\nto { transform: rotate(360deg);\\n}\\n}\\n.sidebar-empty[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n}\\n.empty-icon[data-v-46646bec] {\\n font-size: 36px;\\n margin-bottom: 8px;\\n}\\n.empty-hint[data-v-46646bec] {\\n font-size: 12px;\\n color: #d9d9d9;\\n margin-top: 4px;\\n}\\n\\n/* agent-list-avatar base */\\n.agent-list-avatar[data-v-46646bec] {\\n background-repeat: no-repeat;\\n background-position: center;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: #fff;\\n font-size: 22px;\\n font-weight: 600;\\n border-radius: 8px;\\n width: 92px;\\n height: 106px;\\n}\\n.agent-list-avatar.has-agent-img[data-v-46646bec] {\\n background-size: cover;\\n}\\n\\n/* suggestion-avatar overrides */\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px !important;\\n height: 28px !important;\\n border-radius: 8px !important;\\n font-size: 12px !important;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n\\n/* Desktop responsive */\\n.chat-sidebar[data-v-46646bec] {\\n width: min(300px, 32vw);\\n}\\n\\n/* ── Mobile (max-width: 768px) ── */\\n@media screen and (max-width: 768px) {\\n.chat-sidebar[data-v-46646bec] {\\n position: absolute;\\n inset: 0 auto 0 0;\\n width: min(82vw, 320px);\\n min-width: auto;\\n max-width: 320px;\\n height: 100%;\\n border-right: none;\\n box-shadow: 8px 0 24px rgba(15, 23, 42, 0.12);\\n transform: translateX(-100%);\\n transition: transform 0.24s ease;\\n}\\n.chat-sidebar.open[data-v-46646bec] {\\n transform: translateX(0);\\n}\\n.sidebar-back-btn[data-v-46646bec] {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 36px;\\n height: 36px;\\n border: none;\\n border-radius: 10px;\\n background: transparent;\\n color: #333;\\n cursor: pointer;\\n flex-shrink: 0;\\n position: absolute;\\n left: 8px;\\n top: 50%;\\n transform: translateY(-50%);\\n padding: 0;\\n}\\n.sidebar-back-btn svg[data-v-46646bec] {\\n display: block;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar[data-v-46646bec] {\\n position: relative !important;\\n width: 100% !important;\\n max-width: 100% !important;\\n min-width: 100% !important;\\n height: 100%;\\n transform: translateX(0) !important;\\n box-shadow: none !important;\\n border-right: none;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 14px 16px;\\n position: relative;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header img[data-v-46646bec] {\\n position: absolute;\\n right: 16px;\\n top: 50%;\\n transform: translateY(-50%);\\n width: 22px;\\n height: 22px;\\n -o-object-fit: contain;\\n object-fit: contain;\\n cursor: pointer;\\n}\\n.session-delete[data-v-46646bec] {\\n display: none;\\n}\\n\\n /* 搜索清除按钮放大触摸区域 */\\n.sidebar-search .search-clear[data-v-46646bec] {\\n width: 20px;\\n height: 20px;\\n padding: 12px;\\n right: -2px;\\n box-sizing: content-box;\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatSidebar.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--7-oneOf-1-1!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--7-oneOf-1-2!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
3358
+ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n/* ── Sidebar ── */\\n.chat-sidebar[data-v-46646bec] {\\n width: 300px;\\n min-width: 300px;\\n background: #fff;\\n border-right: 1px solid #e8e8e8;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 14px 8px 14px 16px;\\n border-bottom: 1px solid #e8e8e8;\\n flex-shrink: 0;\\n}\\n.sidebar-header i[data-v-46646bec]{\\n font-size: 20px;\\n cursor: pointer;\\n}\\n.sidebar-header img[data-v-46646bec]{\\n cursor: pointer;\\n}\\n.sidebar-title[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 600;\\n color: #333;\\n}\\n.sidebar-search[data-v-46646bec] {\\n padding: 8px 16px;\\n flex-shrink: 0;\\n position: relative;\\n z-index: 20;\\n}\\n.sidebar-search .search-wrap[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n position: relative;\\n}\\n.sidebar-search .search-icon[data-v-46646bec] {\\n position: absolute;\\n left: 12px;\\n flex-shrink: 0;\\n pointer-events: none;\\n}\\n.sidebar-search .search-input[data-v-46646bec] {\\n width: 100%;\\n height: 32px;\\n border-radius: 16px;\\n background: #f5f5f5;\\n border: 1px solid transparent;\\n font-size: 13px;\\n padding: 0 32px 0 34px;\\n outline: none;\\n box-sizing: border-box;\\n transition: all 0.2s;\\n}\\n.sidebar-search .search-input[data-v-46646bec]:focus {\\n background: #fff;\\n border: 1px solid #1677ff;\\n}\\n.sidebar-search .search-clear[data-v-46646bec] {\\n position: absolute;\\n right: 10px;\\n cursor: pointer;\\n flex-shrink: 0;\\n}\\n.search-suggestions[data-v-46646bec] {\\n position: absolute;\\n top: 100%;\\n left: 16px;\\n right: 16px;\\n background: #fff;\\n border: 1px solid #e8e8e8;\\n border-radius: 8px;\\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\\n z-index: 100;\\n max-height: 240px;\\n overflow-y: auto;\\n margin-top: 4px;\\n}\\n.suggestion-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 10px 12px;\\n cursor: pointer;\\n transition: background 0.15s;\\n}\\n.suggestion-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px;\\n height: 28px;\\n border-radius: 6px;\\n background: linear-gradient(135deg, #1677ff, #4096ff);\\n color: #fff;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 13px;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n.suggestion-name[data-v-46646bec] {\\n font-size: 14px;\\n font-weight: 500;\\n color: #333;\\n white-space: nowrap;\\n}\\n.suggestion-desc[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.sidebar-list[data-v-46646bec] {\\n flex: 1;\\n overflow-y: auto;\\n padding: 8px 0;\\n}\\n.session-item[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n padding: 6px 16px;\\n padding-bottom: 10px;\\n cursor: pointer;\\n border-bottom: 1px solid #f5f5f5;\\n transition: background 0.15s;\\n position: relative;\\n gap: 10px;\\n border-radius: 4px;\\n touch-action: manipulation;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-left-item[data-v-46646bec] {\\n margin-left: 5px;\\n}\\n.session-item[data-v-46646bec]:hover {\\n background: #f5f7fa;\\n}\\n.session-item.active[data-v-46646bec] {\\n background: #F5F5F5;\\n}\\n.session-avatar[data-v-46646bec] {\\n width: 44px !important;\\n height: 44px !important;\\n border-radius: 50% !important;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px !important;\\n font-weight: 600;\\n color: #fff;\\n flex-shrink: 0;\\n overflow: hidden;\\n}\\n.avatar-pic[data-v-46646bec] {\\n width: 85%;\\n height: 85%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.session-info[data-v-46646bec] {\\n flex: 1;\\n min-width: 0;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-agent[data-v-46646bec] {\\n font-size: 15px;\\n font-weight: 500;\\n color: #333;\\n margin-bottom: 2px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-preview[data-v-46646bec] {\\n font-size: 12px;\\n color: #999;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.session-time[data-v-46646bec] {\\n font-size: 11px;\\n color: #bbb;\\n flex-shrink: 0;\\n margin-left: 8px;\\n margin-right: 4px;\\n}\\n.session-delete[data-v-46646bec] {\\n position: absolute;\\n right: 4px;\\n top: 20px;\\n transform: translateY(-50%);\\n opacity: 0;\\n transition: opacity 0.15s;\\n width: 28px;\\n height: 28px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border: none;\\n background: transparent;\\n padding: 0;\\n color: #333;\\n cursor: pointer;\\n}\\n.session-delete svg[data-v-46646bec] {\\n color: #333;\\n}\\n.session-item:hover .session-delete[data-v-46646bec] {\\n opacity: 1;\\n}\\n.sidebar-loading[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n gap: 12px;\\n}\\n.sidebar-loading .loading-spinner[data-v-46646bec] {\\n width: 24px;\\n height: 24px;\\n border: 2.5px solid #e8e8e8;\\n border-top-color: #1677ff;\\n border-radius: 50%;\\n animation: sidebar-spin-46646bec 0.7s linear infinite;\\n}\\n@keyframes sidebar-spin-46646bec {\\nto { transform: rotate(360deg);\\n}\\n}\\n.sidebar-empty[data-v-46646bec] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n color: #bbb;\\n font-size: 14px;\\n padding-bottom: 40px;\\n}\\n.empty-icon[data-v-46646bec] {\\n font-size: 36px;\\n margin-bottom: 8px;\\n}\\n.empty-hint[data-v-46646bec] {\\n font-size: 12px;\\n color: #d9d9d9;\\n margin-top: 4px;\\n}\\n\\n/* agent-list-avatar base */\\n.agent-list-avatar[data-v-46646bec] {\\n background-repeat: no-repeat;\\n background-position: center;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: #fff;\\n font-size: 22px;\\n font-weight: 600;\\n border-radius: 8px;\\n width: 92px;\\n height: 106px;\\n}\\n.agent-list-avatar.has-agent-img[data-v-46646bec] {\\n background-size: cover;\\n}\\n\\n/* suggestion-avatar overrides */\\n.suggestion-avatar[data-v-46646bec] {\\n width: 28px !important;\\n height: 28px !important;\\n border-radius: 8px !important;\\n font-size: 12px !important;\\n font-weight: 600;\\n flex-shrink: 0;\\n}\\n\\n/* Desktop responsive */\\n.chat-sidebar[data-v-46646bec] {\\n width: min(300px, 32vw);\\n}\\n\\n/* ── Mobile (max-width: 768px) ── */\\n@media screen and (max-width: 768px) {\\n.chat-sidebar[data-v-46646bec] {\\n position: absolute;\\n inset: 0 auto 0 0;\\n width: min(82vw, 320px);\\n min-width: auto;\\n max-width: 320px;\\n height: 100%;\\n border-right: none;\\n transform: translateX(-100%);\\n transition: transform 0.24s ease;\\n}\\n.chat-sidebar.open[data-v-46646bec] {\\n transform: translateX(0);\\n}\\n.sidebar-back-btn[data-v-46646bec] {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 36px;\\n height: 36px;\\n border: none;\\n border-radius: 10px;\\n background: transparent;\\n color: #333;\\n cursor: pointer;\\n flex-shrink: 0;\\n position: absolute;\\n left: 8px;\\n top: 50%;\\n transform: translateY(-50%);\\n padding: 0;\\n}\\n.sidebar-back-btn svg[data-v-46646bec] {\\n display: block;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar[data-v-46646bec] {\\n position: relative !important;\\n width: 100% !important;\\n max-width: 100% !important;\\n min-width: 100% !important;\\n height: 100%;\\n transform: translateX(0) !important;\\n box-shadow: none !important;\\n border-right: none;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header[data-v-46646bec] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 14px 16px;\\n position: relative;\\n}\\n.chat-layout.h5-list-mode .chat-sidebar .sidebar-header img[data-v-46646bec] {\\n position: absolute;\\n right: 16px;\\n top: 50%;\\n transform: translateY(-50%);\\n width: 22px;\\n height: 22px;\\n -o-object-fit: contain;\\n object-fit: contain;\\n cursor: pointer;\\n}\\n.session-delete[data-v-46646bec] {\\n display: none;\\n}\\n\\n /* 搜索清除按钮放大触摸区域 */\\n.sidebar-search .search-clear[data-v-46646bec] {\\n width: 20px;\\n height: 20px;\\n padding: 12px;\\n right: -2px;\\n box-sizing: content-box;\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/ChatSidebar.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--7-oneOf-1-1!./node_modules/_vue-loader@15.11.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--7-oneOf-1-2!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--1-0!./node_modules/_vue-loader@15.11.1@vue-loader/lib??vue-loader-options");
3359
3359
 
3360
3360
  /***/ }),
3361
3361
 
@@ -12617,7 +12617,7 @@ eval("module.exports = function(originalModule) {\n\tif (!originalModule.webpack
12617
12617
  /*! exports provided: name, version, main, private, scripts, dependencies, devDependencies, browserslist, directories, keywords, license, default */
12618
12618
  /***/ (function(module) {
12619
12619
 
12620
- eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.36\\\",\\\"main\\\":\\\"lib/ZjPluginIntelligent.umd.min.js\\\",\\\"private\\\":false,\\\"scripts\\\":{\\\"serve\\\":\\\"vue-cli-service serve\\\",\\\"build\\\":\\\"vue-cli-service build\\\",\\\"lib\\\":\\\"vue-cli-service build --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\",\\\"lib:test\\\":\\\"vue-cli-service build --mode test --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\"},\\\"dependencies\\\":{\\\"html2canvas\\\":\\\"^1.4.1\\\",\\\"markdown-it\\\":\\\"^14.1.0\\\"},\\\"devDependencies\\\":{\\\"@babel/preset-env\\\":\\\"^7.14.9\\\",\\\"@vue/cli-plugin-babel\\\":\\\"~4.5.0\\\",\\\"@vue/cli-plugin-eslint\\\":\\\"^4.5.13\\\",\\\"@vue/cli-plugin-vuex\\\":\\\"~4.5.0\\\",\\\"@vue/cli-service\\\":\\\"~4.5.0\\\",\\\"axios\\\":\\\"^0.27.2\\\",\\\"babel-eslint\\\":\\\"^10.1.0\\\",\\\"babel-plugin-component\\\":\\\"^1.1.1\\\",\\\"compression-webpack-plugin\\\":\\\"^6.0.3\\\",\\\"core-js\\\":\\\"^3.6.5\\\",\\\"element-ui\\\":\\\"^2.15.4\\\",\\\"eslint\\\":\\\"^7.30.0\\\",\\\"eslint-plugin-vue\\\":\\\"^7.13.0\\\",\\\"js-cookie\\\":\\\"^2.2.1\\\",\\\"node-sass\\\":\\\"^4.12.0\\\",\\\"obs-upload\\\":\\\"^1.0.4-alpha.0\\\",\\\"reconnecting-websocket\\\":\\\"^4.4.0\\\",\\\"sass-loader\\\":\\\"^8.0.2\\\",\\\"snowflake-id\\\":\\\"^1.1.0\\\",\\\"vue\\\":\\\"^2.6.11\\\",\\\"vue-template-compiler\\\":\\\"^2.6.11\\\",\\\"vuex\\\":\\\"^3.4.0\\\",\\\"pako\\\":\\\"^2.1.0\\\",\\\"webpack-bundle-analyzer\\\":\\\"^4.4.2\\\"},\\\"browserslist\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"not dead\\\"],\\\"directories\\\":{\\\"lib\\\":\\\"lib\\\"},\\\"keywords\\\":[],\\\"license\\\":\\\"ISC\\\"}\");\n\n//# sourceURL=webpack://ZjPluginIntelligent/./package.json?");
12620
+ eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.38\\\",\\\"main\\\":\\\"lib/ZjPluginIntelligent.umd.min.js\\\",\\\"private\\\":false,\\\"scripts\\\":{\\\"serve\\\":\\\"vue-cli-service serve\\\",\\\"build\\\":\\\"vue-cli-service build\\\",\\\"lib\\\":\\\"vue-cli-service build --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\",\\\"lib:test\\\":\\\"vue-cli-service build --mode test --target lib --name ZjPluginIntelligent --dest lib src/lib/index.js\\\"},\\\"dependencies\\\":{\\\"html2canvas\\\":\\\"^1.4.1\\\",\\\"markdown-it\\\":\\\"^14.1.0\\\"},\\\"devDependencies\\\":{\\\"@babel/preset-env\\\":\\\"^7.14.9\\\",\\\"@vue/cli-plugin-babel\\\":\\\"~4.5.0\\\",\\\"@vue/cli-plugin-eslint\\\":\\\"^4.5.13\\\",\\\"@vue/cli-plugin-vuex\\\":\\\"~4.5.0\\\",\\\"@vue/cli-service\\\":\\\"~4.5.0\\\",\\\"axios\\\":\\\"^0.27.2\\\",\\\"babel-eslint\\\":\\\"^10.1.0\\\",\\\"babel-plugin-component\\\":\\\"^1.1.1\\\",\\\"compression-webpack-plugin\\\":\\\"^6.0.3\\\",\\\"core-js\\\":\\\"^3.6.5\\\",\\\"element-ui\\\":\\\"^2.15.4\\\",\\\"eslint\\\":\\\"^7.30.0\\\",\\\"eslint-plugin-vue\\\":\\\"^7.13.0\\\",\\\"js-cookie\\\":\\\"^2.2.1\\\",\\\"node-sass\\\":\\\"^4.12.0\\\",\\\"obs-upload\\\":\\\"^1.0.4-alpha.0\\\",\\\"reconnecting-websocket\\\":\\\"^4.4.0\\\",\\\"sass-loader\\\":\\\"^8.0.2\\\",\\\"snowflake-id\\\":\\\"^1.1.0\\\",\\\"vue\\\":\\\"^2.6.11\\\",\\\"vue-template-compiler\\\":\\\"^2.6.11\\\",\\\"vuex\\\":\\\"^3.4.0\\\",\\\"pako\\\":\\\"^2.1.0\\\",\\\"webpack-bundle-analyzer\\\":\\\"^4.4.2\\\"},\\\"browserslist\\\":[\\\"> 1%\\\",\\\"last 2 versions\\\",\\\"not dead\\\"],\\\"directories\\\":{\\\"lib\\\":\\\"lib\\\"},\\\"keywords\\\":[],\\\"license\\\":\\\"ISC\\\"}\");\n\n//# sourceURL=webpack://ZjPluginIntelligent/./package.json?");
12621
12621
 
12622
12622
  /***/ }),
12623
12623
 
@@ -13509,7 +13509,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
13509
13509
  /***/ (function(module, exports, __webpack_require__) {
13510
13510
 
13511
13511
  "use strict";
13512
- eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.getAuth = getAuth;\nexports.setAuth = setAuth;\nexports.setBaseURL = setBaseURL;\nexports.setToken = setToken;\nexports.signQueryParams = signQueryParams;\n__webpack_require__(/*! core-js/modules/es.error.cause.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.error.cause.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.constructor.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.filter.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.map.js\");\nvar _axios = _interopRequireDefault(__webpack_require__(/*! axios */ \"./node_modules/_axios@0.27.2@axios/index.js\"));\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _message = __webpack_require__(/*! @lib/utils/message.js */ \"./src/lib/utils/message.js\");\n/*\r\n * @Author: 高瑞廷 2419056691@qq.com\r\n * @Date: 2026-06-04 11:27:13\r\n * @LastEditors: 高瑞廷 2419056691@qq.com\r\n * @LastEditTime: 2026-07-17 14:22:37\r\n * @FilePath: \\zjkj-nodejs-npm_customer-client\\src\\lib\\utils\\request.js\r\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r\n */\n\nlet runtimeAK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_AK || '';\nlet runtimeSK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_SK || '';\nlet runtimeToken = '';\n\n// let _user = '202007091611352'\n// let _companyNo = '201912241159840'\nlet _user = '';\nlet _companyNo = '';\nlet runtimeBaseURL = \"https://ai.jybtech.cn\" || false;\nconst CryptoJS = __webpack_require__(/*! crypto-js */ \"./node_modules/_crypto-js@4.2.0@crypto-js/index.js\");\nconst service = _axios.default.create({\n baseURL: runtimeBaseURL,\n timeout: 15000\n});\nfunction hmacSha256Base64(rawSignStr, sk) {\n const hmac = CryptoJS.HmacSHA256(rawSignStr, sk);\n // 转为 Base64\n return CryptoJS.enc.Base64.stringify(hmac);\n}\nfunction setAuth(ak, sk, user, companyNo, token) {\n runtimeAK = ak || '';\n runtimeSK = sk || '';\n _user = user;\n _companyNo = companyNo;\n runtimeToken = token || '';\n}\nfunction setToken(token) {\n runtimeToken = token || '';\n}\nfunction getAuth() {\n return {\n ak: runtimeAK,\n sk: runtimeSK,\n token: runtimeToken,\n user: _user,\n companyNo: _companyNo\n };\n}\nfunction setBaseURL(url) {\n runtimeBaseURL = url || '';\n service.defaults.baseURL = runtimeBaseURL;\n}\nfunction signQueryParams(params, secretKey) {\n const keys = Object.keys(params).filter(k => k !== 'ak' && k !== 'sign').sort();\n const raw = keys.map(k => `${k}=${params[k] || ''}`).join('&');\n return hmacSha256Base64(raw, secretKey);\n}\nservice.interceptors.request.use(config => {\n // 流式接口跳过 Header 签名\n if (config.url.includes('/chat/stream')) {\n return config;\n }\n const ts = Date.now().toString();\n const token = runtimeToken || (0, _cookie.getToken)();\n const externalUser = _user || '';\n const signParts = [];\n // 1. 第一位:token(有值才加入)\n if (_companyNo) {\n signParts.push(`companyNo=${_companyNo}`);\n }\n if (token) {\n signParts.push(`token=${token}`);\n }\n // 2. 第二位:user(有值才加入)\n if (externalUser) {\n signParts.push(`user=${externalUser}`);\n }\n // 3. 第三位:ts(必选,永远存在)\n signParts.push(`ts=${ts}`);\n\n // 拼接最终待签字符串\n const signStr = signParts.join('&');\n // 计算签名\n const sign = hmacSha256Base64(signStr, runtimeSK);\n if (_companyNo) {\n config.headers['X-Company-No'] = _companyNo;\n }\n\n // 设置请求头\n config.headers['X-AK'] = runtimeAK;\n config.headers['X-Ts'] = ts;\n config.headers['X-Sign'] = sign;\n if (token) {\n config.headers['X-Auth-Token'] = `${token}`;\n config.headers.Authorization = `Bearer ${token}`;\n }\n config.headers['X-External-User'] = externalUser;\n config.headers['Content-Type'] = 'application/json';\n\n // console.log('排序后key:', sortedKeys)\n\n return config;\n}, error => Promise.reject(error));\nservice.interceptors.response.use(response => {\n const res = response.data;\n if (res.code === 200) {\n return res;\n } else if (res.code === 40101) {\n (0, _message.showMessage)('登录已过期,请重新登录');\n return Promise.reject(new Error(res.message));\n } else {\n (0, _message.showMessage)(res.message || '请求失败');\n return Promise.reject(new Error(res.message));\n }\n}, error => {\n (0, _message.showMessage)(error.message || '网络异常');\n return Promise.reject(error);\n});\nvar _default = exports.default = service;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/utils/request.js?");
13512
+ eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/_@babel_runtime@7.28.4@@babel/runtime/helpers/interopRequireDefault.js\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.getAuth = getAuth;\nexports.setAuth = setAuth;\nexports.setBaseURL = setBaseURL;\nexports.setToken = setToken;\nexports.signQueryParams = signQueryParams;\n__webpack_require__(/*! core-js/modules/es.error.cause.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.error.cause.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.constructor.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.filter.js\");\n__webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.map.js\");\nvar _axios = _interopRequireDefault(__webpack_require__(/*! axios */ \"./node_modules/_axios@0.27.2@axios/index.js\"));\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _message = __webpack_require__(/*! @lib/utils/message.js */ \"./src/lib/utils/message.js\");\n/*\r\n * @Author: 高瑞廷 2419056691@qq.com\r\n * @Date: 2026-06-04 11:27:13\r\n * @LastEditors: 高瑞廷 2419056691@qq.com\r\n * @LastEditTime: 2026-07-20 11:11:13\r\n * @FilePath: \\zjkj-nodejs-npm_customer-client\\src\\lib\\utils\\request.js\r\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r\n */\n\nlet runtimeAK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_AK || '';\nlet runtimeSK = Object({\"NODE_ENV\":\"test\",\"VUE_APP_API\":\"https://api.qgbtech.cn\",\"VUE_APP_BASE_API\":\"https://ai.jybtech.cn\",\"VUE_APP_NAME\":\"development\",\"BASE_URL\":\"/\"}).VUE_APP_BASE_SK || '';\nlet runtimeToken = '';\n\n// let _user = '202007091611352'\n// let _companyNo = '201912241159840'\nlet _user = '';\nlet _companyNo = '';\nlet runtimeBaseURL = \"https://ai.jybtech.cn\" || false;\nconst CryptoJS = __webpack_require__(/*! crypto-js */ \"./node_modules/_crypto-js@4.2.0@crypto-js/index.js\");\nconst service = _axios.default.create({\n baseURL: runtimeBaseURL,\n timeout: 15000\n});\nfunction hmacSha256Base64(rawSignStr, sk) {\n const hmac = CryptoJS.HmacSHA256(rawSignStr, sk);\n // 转为 Base64\n return CryptoJS.enc.Base64.stringify(hmac);\n}\nfunction setAuth(ak, sk, user, companyNo, token) {\n runtimeAK = ak || '';\n runtimeSK = sk || '';\n _user = user;\n _companyNo = companyNo;\n runtimeToken = token || '';\n}\nfunction setToken(token) {\n runtimeToken = token || '';\n}\nfunction getAuth() {\n return {\n ak: runtimeAK,\n sk: runtimeSK,\n token: runtimeToken,\n user: _user,\n companyNo: _companyNo\n };\n}\nfunction setBaseURL(url) {\n runtimeBaseURL = url || '';\n service.defaults.baseURL = runtimeBaseURL;\n}\nfunction signQueryParams(params, secretKey) {\n const keys = Object.keys(params).filter(k => k !== 'ak' && k !== 'sign').sort();\n const raw = keys.map(k => `${k}=${params[k] || ''}`).join('&');\n return hmacSha256Base64(raw, secretKey);\n}\nservice.interceptors.request.use(config => {\n // 流式接口跳过 Header 签名\n if (config.url.includes('/chat/stream')) {\n return config;\n }\n const ts = Date.now().toString();\n const token = runtimeToken || (0, _cookie.getToken)();\n const externalUser = _user || '';\n const signParts = [];\n // 1. 第一位:token(有值才加入)\n if (_companyNo) {\n signParts.push(`companyNo=${_companyNo}`);\n }\n if (token) {\n signParts.push(`token=${token}`);\n }\n // 2. 第二位:user(有值才加入)\n if (externalUser) {\n signParts.push(`user=${externalUser}`);\n }\n // 3. 第三位:ts(必选,永远存在)\n signParts.push(`ts=${ts}`);\n\n // 拼接最终待签字符串\n const signStr = signParts.join('&');\n // 计算签名\n const sign = hmacSha256Base64(signStr, runtimeSK);\n if (_companyNo) {\n config.headers['X-Company-No'] = _companyNo;\n }\n\n // 设置请求头\n config.headers['X-AK'] = runtimeAK;\n config.headers['X-Ts'] = ts;\n config.headers['X-Sign'] = sign;\n if (token) {\n config.headers['X-Auth-Token'] = `${token}`;\n config.headers.Authorization = `Bearer ${token}`;\n }\n config.headers['X-External-User'] = externalUser;\n config.headers['Content-Type'] = 'application/json';\n\n // console.log('排序后key:', sortedKeys)\n\n return config;\n}, error => Promise.reject(error));\nservice.interceptors.response.use(response => {\n const res = response.data;\n if (res.code === 200) {\n return res;\n } else if (res.code === 40101) {\n (0, _message.showMessage)('登录已过期,请重新登录');\n return Promise.reject(new Error(res.message));\n } else {\n (0, _message.showMessage)(res.message || '请求失败');\n return Promise.reject(new Error(res.message));\n }\n}, error => {\n (0, _message.showMessage)(error.message || '网络异常');\n return Promise.reject(error);\n});\nvar _default = exports.default = service;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/utils/request.js?");
13513
13513
 
13514
13514
  /***/ }),
13515
13515
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zj-plugin-intelligent",
3
- "version": "1.2.5-beta.36",
3
+ "version": "1.2.5-beta.38",
4
4
  "main": "lib/ZjPluginIntelligent.umd.min.js",
5
5
  "private": false,
6
6
  "scripts": {