zj-plugin-intelligent 1.2.5-beta.11 → 1.2.5-beta.12
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.
|
@@ -975,7 +975,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
|
|
|
975
975
|
/***/ (function(module, exports, __webpack_require__) {
|
|
976
976
|
|
|
977
977
|
"use strict";
|
|
978
|
-
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;\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.find.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.find.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 _apichat = __webpack_require__(/*! @lib/api/apichat */ \"./src/lib/api/apichat.js\");\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _ChatSidebar = _interopRequireDefault(__webpack_require__(/*! ./ChatSidebar.vue */ \"./src/lib/components/chatMain/ChatSidebar.vue\"));\nvar _AgentSelector = _interopRequireDefault(__webpack_require__(/*! ./AgentSelector.vue */ \"./src/lib/components/chatMain/AgentSelector.vue\"));\nvar _ChatDetail = _interopRequireDefault(__webpack_require__(/*! ./ChatDetail.vue */ \"./src/lib/components/chatMain/ChatDetail.vue\"));\nvar _default = exports.default = {\n name: 'ChatMain',\n components: {\n ChatSidebar: _ChatSidebar.default,\n AgentSelector: _AgentSelector.default,\n ChatDetail: _ChatDetail.default\n },\n props: {\n Ak: {\n type: String,\n default: ''\n },\n Sk: {\n type: String,\n default: ''\n },\n imAccount: {\n type: String,\n default: ''\n },\n companyNo: {\n type: String,\n default: ''\n },\n isIntelShow: {\n default: false,\n type: Boolean\n },\n chatImToken: {\n default: '',\n type: String\n }\n },\n data() {\n // 首次渲染前检测窗口宽度,避免 H5 端先显示 PC 布局再切换导致闪烁\n const _isMobile = typeof window !== 'undefined' && window.innerWidth <= 768;\n return {\n agentList: [],\n currentAgent: '',\n currentAgentDesc: '',\n sessionsLoaded: false,\n sessionList: [],\n activeSessionId: '',\n loadingMore: false,\n showAgentSelect: !_isMobile,\n isMobile: _isMobile,\n showSidebar: false,\n showH5List: _isMobile,\n agentInfo: {},\n _swipeStartX: 0,\n _swipeStartY: 0\n };\n },\n created() {\n if (this.Ak || this.Sk) {\n (0, _apichat.setApiAuth)(this.Ak, this.Sk, this.imAccount, this.companyNo, this.chatImToken);\n }\n this.loadAgents();\n this.loadSessions();\n },\n mounted() {\n this.updateViewportState();\n window.addEventListener('resize', this.updateViewportState, {\n passive: true\n });\n },\n watch: {},\n methods: {\n // ── H5 侧滑手势 ──\n onSwipeTouchStart(e) {\n if (!this.isMobile) return;\n this._swipeStartX = e.touches[0].clientX;\n this._swipeStartY = e.touches[0].clientY;\n },\n onSwipeTouchEnd(e) {\n if (!this.isMobile) return;\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const diffX = endX - this._swipeStartX;\n const diffY = endY - this._swipeStartY;\n\n // 从左侧边缘开始滑动(30px 内),向右滑动超过 60px,且水平距离明显大于垂直距离\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n if (this.showH5List) {\n // 列表页 → 原生返回\n this.handleNativeBack();\n } else if (!this.showAgentSelect) {\n // 详情页/欢迎页 → 返回列表\n this.goBackToList();\n }\n },\n handleNewSessionInternal() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n updateViewportState() {\n if (typeof window === 'undefined') return;\n const nextIsMobile = window.innerWidth <= 768;\n const wasMobile = this.isMobile;\n this.isMobile = nextIsMobile;\n if (!nextIsMobile) {\n this.showSidebar = false;\n this.showH5List = false;\n } else if (!wasMobile && nextIsMobile) {\n if (this.sessionList.length > 0 && !this.activeSessionId) {\n this.showH5List = true;\n this.showAgentSelect = false;\n }\n }\n },\n toggleSidebar() {\n if (!this.isMobile) return;\n this.showSidebar = !this.showSidebar;\n },\n closeSidebar() {\n this.showSidebar = false;\n },\n handleNativeBack() {\n if (this.$hybrid && typeof this.$hybrid.closePage === 'function') {\n this.$hybrid.closePage();\n } else if (window.history.length > 1) {\n window.history.back();\n }\n },\n handleSidebarBack() {\n this.handleNativeBack();\n },\n agentjumpclick() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.activeSessionId = '';\n this.showAgentSelect = true;\n this.showH5List = false;\n this.closeSidebar();\n },\n goBackToList() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n if (cd) {\n if (cd.eventSource) {\n cd.eventSource.close();\n cd.eventSource = null;\n }\n cd.sending = false;\n cd.clearWaitTimer();\n cd.messages = [];\n cd.contentCache = {};\n }\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.agentInfo = {};\n this.showH5List = true;\n this.showAgentSelect = false;\n this.closeSidebar();\n },\n loadAgents() {\n (0, _apichat.getChatAgents)().then(list => {\n this.agentList = list || [];\n }).catch(() => {});\n },\n loadSessions() {\n (0, _apichat.getSessionList)().then(list => {\n if (!this.activeSessionId) {\n this.sessionList = list || [];\n if (this.sessionList.length > 0) {\n if (this.isMobile) {\n this.showAgentSelect = false;\n this.showH5List = true;\n this.showSidebar = false;\n } else {\n this.switchSession(this.sessionList[0]);\n }\n }\n if (this.sessionList.length === 0) {\n this.showAgentSelect = true;\n this.showH5List = false;\n }\n } else {\n this.sessionList = list || [];\n let _item = list.find(res => res.sessionId == this.activeSessionId);\n try {\n if (_item && _item.suggestedQuestions) {\n _item.suggestedQuestions = JSON.parse(_item.suggestedQuestions);\n }\n _item && (this.agentInfo = _item);\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n }\n }).catch(() => {});\n },\n startChatWithAgent(agent) {\n console.log('选择了助手', agent.agentCode, this.currentAgent);\n if (agent.agentCode == this.currentAgent) {\n return;\n }\n this.currentAgent = agent.agentCode;\n this.currentAgentDesc = agent.description || '';\n this.agentInfo = {};\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n const existing = this.sessionList.find(s => s.agentCode === agent.agentCode);\n if (existing) {\n this.switchSession(existing);\n } else {\n this.handleNewSession();\n }\n },\n handleNewSession() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n addWelcomeMessage(agent) {\n const cd = this.$refs.chatDetail;\n if (cd) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n },\n async switchSession(s) {\n let cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n if (this.activeSessionId === s.sessionId) return;\n\n // 移动端刚切换 showH5List=false,ChatDetail 尚未渲染完成,需要等待 nextTick\n if (!cd) {\n await this.$nextTick();\n cd = this.$refs.chatDetail;\n }\n if (cd) {\n cd.contentCache = {};\n cd.messages = [];\n cd.msgPage = 1;\n cd.msgTotal = 0;\n cd.loadingSessionMsg = true;\n }\n this.activeSessionId = s.sessionId;\n this.currentAgent = s.agentCode;\n this.agentInfo = s;\n try {\n if (s.suggestedQuestions) {\n this.agentInfo.suggestedQuestions = JSON.parse(s.suggestedQuestions);\n } else {\n this.agentInfo.suggestedQuestions = [];\n }\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n const agent = this.agentList.find(a => a.agentCode === s.agentCode);\n this.currentAgentDesc = agent ? agent.description || '' : '';\n (0, _apichat.syncToken)((0, _cookie.getToken)(), s.sessionId);\n try {\n const res = await (0, _apichat.getSessionMessages)(s.sessionId, 1, 10);\n const list = Array.isArray(res) ? res : res.list || [];\n if (cd) {\n cd.msgTotal = res.total || list.length;\n cd.msgPage = 1;\n const asAsc = (list || []).slice().reverse();\n cd.messages = asAsc.map(m => ({\n role: m.role,\n content: m.content || '',\n thinking: m.thinking || '',\n toolCalls: [],\n agentName: m.role === 'assistant' ? s.agentName || '' : '',\n createTime: m.createTime || null,\n _key: m.createTime ? 'msg_' + m.createTime : 'msg_' + Date.now() + '_' + Math.random()\n }));\n if (cd.messages.length === 0 && agent) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n cd.loadingSessionMsg = false;\n await this.$nextTick();\n this.$nextTick(() => {\n cd.scrollToBottomOnce();\n cd.checkScrollBottom();\n });\n }\n } catch (e) {\n if (cd) {\n cd.messages = [];\n cd.loadingSessionMsg = false;\n }\n }\n },\n handleDeleteSession(s) {\n this.$confirm(`确认删除「${s.agentName || s.agentCode}」的会话?`, '提示', {\n type: 'warning'\n }).then(() => {\n (0, _apichat.deleteSession)(s.sessionId).then(() => {\n if (this.activeSessionId === s.sessionId) {\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n const cd = this.$refs.chatDetail;\n if (cd) {\n cd.messages = [];\n cd.contentCache = {};\n }\n if (this.isMobile) {\n this.showH5List = false;\n this.showAgentSelect = true;\n } else {\n this.showAgentSelect = true;\n }\n }\n this.loadSessions();\n });\n }).catch(() => {});\n },\n closeOldSession() {}\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.updateViewportState);\n }\n};\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.vue?./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/_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");
|
|
978
|
+
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;\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.find.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.find.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 _apichat = __webpack_require__(/*! @lib/api/apichat */ \"./src/lib/api/apichat.js\");\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _ChatSidebar = _interopRequireDefault(__webpack_require__(/*! ./ChatSidebar.vue */ \"./src/lib/components/chatMain/ChatSidebar.vue\"));\nvar _AgentSelector = _interopRequireDefault(__webpack_require__(/*! ./AgentSelector.vue */ \"./src/lib/components/chatMain/AgentSelector.vue\"));\nvar _ChatDetail = _interopRequireDefault(__webpack_require__(/*! ./ChatDetail.vue */ \"./src/lib/components/chatMain/ChatDetail.vue\"));\nvar _default = exports.default = {\n name: 'ChatMain',\n components: {\n ChatSidebar: _ChatSidebar.default,\n AgentSelector: _AgentSelector.default,\n ChatDetail: _ChatDetail.default\n },\n props: {\n Ak: {\n type: String,\n default: ''\n },\n Sk: {\n type: String,\n default: ''\n },\n imAccount: {\n type: String,\n default: ''\n },\n companyNo: {\n type: String,\n default: ''\n },\n isIntelShow: {\n default: false,\n type: Boolean\n },\n chatImToken: {\n default: '',\n type: String\n }\n },\n data() {\n // 首次渲染前检测窗口宽度,避免 H5 端先显示 PC 布局再切换导致闪烁\n const _isMobile = typeof window !== 'undefined' && window.innerWidth <= 768;\n return {\n agentList: [],\n currentAgent: '',\n currentAgentDesc: '',\n sessionsLoaded: false,\n sessionList: [],\n activeSessionId: '',\n loadingMore: false,\n showAgentSelect: !_isMobile,\n isMobile: _isMobile,\n showSidebar: false,\n showH5List: _isMobile,\n agentInfo: {},\n _swipeStartX: 0,\n _swipeStartY: 0,\n _swipeHandled: false\n };\n },\n created() {\n if (this.Ak || this.Sk) {\n (0, _apichat.setApiAuth)(this.Ak, this.Sk, this.imAccount, this.companyNo, this.chatImToken);\n }\n this.loadAgents();\n this.loadSessions();\n },\n mounted() {\n this.updateViewportState();\n window.addEventListener('resize', this.updateViewportState, {\n passive: true\n });\n // Android WebView 兼容:在 document 级别监听 touchmove/touchend\n // 避免可滚动子元素消费事件后不冒泡到父级\n document.addEventListener('touchmove', this._onSwipeMove, {\n passive: true\n });\n document.addEventListener('touchend', this._onSwipeEnd, {\n passive: true\n });\n },\n watch: {},\n methods: {\n // ── H5 侧滑手势 ──\n onSwipeTouchStart(e) {\n if (!this.isMobile) return;\n this._swipeStartX = e.touches[0].clientX;\n this._swipeStartY = e.touches[0].clientY;\n this._swipeHandled = false;\n },\n // 在 touchmove 中实时检测(绕过 Android 可滚动区域冒泡问题)\n _onSwipeMove(e) {\n if (!this.isMobile || this._swipeHandled) return;\n const moveX = e.touches[0].clientX;\n const moveY = e.touches[0].clientY;\n const diffX = moveX - this._swipeStartX;\n const diffY = moveY - this._swipeStartY;\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n this._swipeHandled = true;\n this._triggerSwipeAction();\n },\n // touchend 检测(兜底,兼容不支持 touchmove 的场景)\n _onSwipeEnd(e) {\n if (!this.isMobile || this._swipeHandled) return;\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const diffX = endX - this._swipeStartX;\n const diffY = endY - this._swipeStartY;\n\n // 从左侧边缘开始滑动(30px 内),向右滑动超过 60px,且水平距离明显大于垂直距离\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n this._swipeHandled = true;\n this._triggerSwipeAction();\n },\n _triggerSwipeAction() {\n if (this.showH5List) {\n // 列表页 → 原生返回\n this.handleNativeBack();\n } else if (!this.showAgentSelect) {\n // 详情页/欢迎页 → 返回列表\n this.goBackToList();\n }\n },\n handleNewSessionInternal() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n updateViewportState() {\n if (typeof window === 'undefined') return;\n const nextIsMobile = window.innerWidth <= 768;\n const wasMobile = this.isMobile;\n this.isMobile = nextIsMobile;\n if (!nextIsMobile) {\n this.showSidebar = false;\n this.showH5List = false;\n } else if (!wasMobile && nextIsMobile) {\n if (this.sessionList.length > 0 && !this.activeSessionId) {\n this.showH5List = true;\n this.showAgentSelect = false;\n }\n }\n },\n toggleSidebar() {\n if (!this.isMobile) return;\n this.showSidebar = !this.showSidebar;\n },\n closeSidebar() {\n this.showSidebar = false;\n },\n handleNativeBack() {\n if (this.$hybrid && typeof this.$hybrid.closePage === 'function') {\n this.$hybrid.closePage();\n } else if (window.history.length > 1) {\n window.history.back();\n }\n },\n handleSidebarBack() {\n this.handleNativeBack();\n },\n agentjumpclick() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.activeSessionId = '';\n this.showAgentSelect = true;\n this.showH5List = false;\n this.closeSidebar();\n },\n goBackToList() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n if (cd) {\n if (cd.eventSource) {\n cd.eventSource.close();\n cd.eventSource = null;\n }\n cd.sending = false;\n cd.clearWaitTimer();\n cd.messages = [];\n cd.contentCache = {};\n }\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.agentInfo = {};\n this.showH5List = true;\n this.showAgentSelect = false;\n this.closeSidebar();\n },\n loadAgents() {\n (0, _apichat.getChatAgents)().then(list => {\n this.agentList = list || [];\n }).catch(() => {});\n },\n loadSessions() {\n (0, _apichat.getSessionList)().then(list => {\n if (!this.activeSessionId) {\n this.sessionList = list || [];\n if (this.sessionList.length > 0) {\n if (this.isMobile) {\n this.showAgentSelect = false;\n this.showH5List = true;\n this.showSidebar = false;\n } else {\n this.switchSession(this.sessionList[0]);\n }\n }\n if (this.sessionList.length === 0) {\n this.showAgentSelect = true;\n this.showH5List = false;\n }\n } else {\n this.sessionList = list || [];\n let _item = list.find(res => res.sessionId == this.activeSessionId);\n try {\n if (_item && _item.suggestedQuestions) {\n _item.suggestedQuestions = JSON.parse(_item.suggestedQuestions);\n }\n _item && (this.agentInfo = _item);\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n }\n }).catch(() => {});\n },\n startChatWithAgent(agent) {\n console.log('选择了助手', agent.agentCode, this.currentAgent);\n if (agent.agentCode == this.currentAgent) {\n return;\n }\n this.currentAgent = agent.agentCode;\n this.currentAgentDesc = agent.description || '';\n this.agentInfo = {};\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n const existing = this.sessionList.find(s => s.agentCode === agent.agentCode);\n if (existing) {\n this.switchSession(existing);\n } else {\n this.handleNewSession();\n }\n },\n handleNewSession() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n addWelcomeMessage(agent) {\n const cd = this.$refs.chatDetail;\n if (cd) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n },\n async switchSession(s) {\n let cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n if (this.activeSessionId === s.sessionId) return;\n\n // 移动端刚切换 showH5List=false,ChatDetail 尚未渲染完成,需要等待 nextTick\n if (!cd) {\n await this.$nextTick();\n cd = this.$refs.chatDetail;\n }\n if (cd) {\n cd.contentCache = {};\n cd.messages = [];\n cd.msgPage = 1;\n cd.msgTotal = 0;\n cd.loadingSessionMsg = true;\n }\n this.activeSessionId = s.sessionId;\n this.currentAgent = s.agentCode;\n this.agentInfo = s;\n try {\n if (s.suggestedQuestions) {\n this.agentInfo.suggestedQuestions = JSON.parse(s.suggestedQuestions);\n } else {\n this.agentInfo.suggestedQuestions = [];\n }\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n const agent = this.agentList.find(a => a.agentCode === s.agentCode);\n this.currentAgentDesc = agent ? agent.description || '' : '';\n (0, _apichat.syncToken)((0, _cookie.getToken)(), s.sessionId);\n try {\n const res = await (0, _apichat.getSessionMessages)(s.sessionId, 1, 10);\n const list = Array.isArray(res) ? res : res.list || [];\n if (cd) {\n cd.msgTotal = res.total || list.length;\n cd.msgPage = 1;\n const asAsc = (list || []).slice().reverse();\n cd.messages = asAsc.map(m => ({\n role: m.role,\n content: m.content || '',\n thinking: m.thinking || '',\n toolCalls: [],\n agentName: m.role === 'assistant' ? s.agentName || '' : '',\n createTime: m.createTime || null,\n _key: m.createTime ? 'msg_' + m.createTime : 'msg_' + Date.now() + '_' + Math.random()\n }));\n if (cd.messages.length === 0 && agent) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n cd.loadingSessionMsg = false;\n await this.$nextTick();\n this.$nextTick(() => {\n cd.scrollToBottomOnce();\n cd.checkScrollBottom();\n });\n }\n } catch (e) {\n if (cd) {\n cd.messages = [];\n cd.loadingSessionMsg = false;\n }\n }\n },\n handleDeleteSession(s) {\n this.$confirm(`确认删除「${s.agentName || s.agentCode}」的会话?`, '提示', {\n type: 'warning'\n }).then(() => {\n (0, _apichat.deleteSession)(s.sessionId).then(() => {\n if (this.activeSessionId === s.sessionId) {\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n const cd = this.$refs.chatDetail;\n if (cd) {\n cd.messages = [];\n cd.contentCache = {};\n }\n if (this.isMobile) {\n this.showH5List = false;\n this.showAgentSelect = true;\n } else {\n this.showAgentSelect = true;\n }\n }\n this.loadSessions();\n });\n }).catch(() => {});\n },\n closeOldSession() {}\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.updateViewportState);\n document.removeEventListener('touchmove', this._onSwipeMove);\n document.removeEventListener('touchend', this._onSwipeEnd);\n }\n};\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.vue?./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/_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");
|
|
979
979
|
|
|
980
980
|
/***/ }),
|
|
981
981
|
|
|
@@ -1059,7 +1059,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
|
|
|
1059
1059
|
/***/ (function(module, exports, __webpack_require__) {
|
|
1060
1060
|
|
|
1061
1061
|
"use strict";
|
|
1062
|
-
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-layout\",\n class: {\n \"is-mobile\": _vm.isMobile,\n \"sidebar-open\": _vm.showSidebar,\n \"h5-list-mode\": _vm.isMobile && _vm.showH5List\n },\n on: {\n touchstart: _vm.onSwipeTouchStart
|
|
1062
|
+
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-layout\",\n class: {\n \"is-mobile\": _vm.isMobile,\n \"sidebar-open\": _vm.showSidebar,\n \"h5-list-mode\": _vm.isMobile && _vm.showH5List\n },\n on: {\n \"&touchstart\": function ($event) {\n return _vm.onSwipeTouchStart.apply(null, arguments);\n }\n }\n }, [_vm.isMobile && _vm.showSidebar && !_vm.showH5List ? _c(\"div\", {\n staticClass: \"sidebar-mask\",\n on: {\n click: _vm.closeSidebar\n }\n }) : _vm._e(), _c(\"ChatSidebar\", {\n attrs: {\n sessions: _vm.sessionList,\n activeSessionId: _vm.activeSessionId,\n isMobile: _vm.isMobile,\n isIntelShow: _vm.isIntelShow\n },\n on: {\n \"sidebar-back\": _vm.handleSidebarBack,\n \"agent-jump-click\": _vm.agentjumpclick,\n \"switch-session\": _vm.switchSession,\n \"delete-session\": _vm.handleDeleteSession,\n \"start-chat-from-search\": _vm.startChatWithAgent\n }\n }), _vm.showAgentSelect ? _c(\"AgentSelector\", {\n attrs: {\n agentList: _vm.agentList,\n isMobile: _vm.isMobile\n },\n on: {\n \"select-agent\": _vm.startChatWithAgent,\n \"go-back\": _vm.goBackToList\n }\n }) : !_vm.showH5List ? _c(\"ChatDetail\", {\n ref: \"chatDetail\",\n attrs: {\n isMobile: _vm.isMobile,\n activeSessionId: _vm.activeSessionId,\n currentAgent: _vm.currentAgent,\n agentInfo: _vm.agentInfo,\n currentAgentDesc: _vm.currentAgentDesc,\n agentList: _vm.agentList\n },\n on: {\n \"go-back-to-list\": _vm.goBackToList,\n \"toggle-sidebar\": _vm.toggleSidebar,\n \"agent-jump-click\": _vm.agentjumpclick,\n \"close-sidebar\": _vm.closeSidebar,\n \"session-refresh\": _vm.loadSessions,\n \"start-session\": _vm.handleNewSessionInternal\n }\n }) : _vm._e()], 1);\n};\nvar staticRenderFns = exports.staticRenderFns = [];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.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");
|
|
1063
1063
|
|
|
1064
1064
|
/***/ }),
|
|
1065
1065
|
|
|
@@ -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}\\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}\\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}\\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}\\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-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}\\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}\\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}\\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}\\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}\\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-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}\\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.
|
|
12611
|
+
eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.12\\\",\\\"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
|
|
|
@@ -984,7 +984,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
|
|
|
984
984
|
/***/ (function(module, exports, __webpack_require__) {
|
|
985
985
|
|
|
986
986
|
"use strict";
|
|
987
|
-
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;\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.find.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.find.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 _apichat = __webpack_require__(/*! @lib/api/apichat */ \"./src/lib/api/apichat.js\");\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _ChatSidebar = _interopRequireDefault(__webpack_require__(/*! ./ChatSidebar.vue */ \"./src/lib/components/chatMain/ChatSidebar.vue\"));\nvar _AgentSelector = _interopRequireDefault(__webpack_require__(/*! ./AgentSelector.vue */ \"./src/lib/components/chatMain/AgentSelector.vue\"));\nvar _ChatDetail = _interopRequireDefault(__webpack_require__(/*! ./ChatDetail.vue */ \"./src/lib/components/chatMain/ChatDetail.vue\"));\nvar _default = exports.default = {\n name: 'ChatMain',\n components: {\n ChatSidebar: _ChatSidebar.default,\n AgentSelector: _AgentSelector.default,\n ChatDetail: _ChatDetail.default\n },\n props: {\n Ak: {\n type: String,\n default: ''\n },\n Sk: {\n type: String,\n default: ''\n },\n imAccount: {\n type: String,\n default: ''\n },\n companyNo: {\n type: String,\n default: ''\n },\n isIntelShow: {\n default: false,\n type: Boolean\n },\n chatImToken: {\n default: '',\n type: String\n }\n },\n data() {\n // 首次渲染前检测窗口宽度,避免 H5 端先显示 PC 布局再切换导致闪烁\n const _isMobile = typeof window !== 'undefined' && window.innerWidth <= 768;\n return {\n agentList: [],\n currentAgent: '',\n currentAgentDesc: '',\n sessionsLoaded: false,\n sessionList: [],\n activeSessionId: '',\n loadingMore: false,\n showAgentSelect: !_isMobile,\n isMobile: _isMobile,\n showSidebar: false,\n showH5List: _isMobile,\n agentInfo: {},\n _swipeStartX: 0,\n _swipeStartY: 0\n };\n },\n created() {\n if (this.Ak || this.Sk) {\n (0, _apichat.setApiAuth)(this.Ak, this.Sk, this.imAccount, this.companyNo, this.chatImToken);\n }\n this.loadAgents();\n this.loadSessions();\n },\n mounted() {\n this.updateViewportState();\n window.addEventListener('resize', this.updateViewportState, {\n passive: true\n });\n },\n watch: {},\n methods: {\n // ── H5 侧滑手势 ──\n onSwipeTouchStart(e) {\n if (!this.isMobile) return;\n this._swipeStartX = e.touches[0].clientX;\n this._swipeStartY = e.touches[0].clientY;\n },\n onSwipeTouchEnd(e) {\n if (!this.isMobile) return;\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const diffX = endX - this._swipeStartX;\n const diffY = endY - this._swipeStartY;\n\n // 从左侧边缘开始滑动(30px 内),向右滑动超过 60px,且水平距离明显大于垂直距离\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n if (this.showH5List) {\n // 列表页 → 原生返回\n this.handleNativeBack();\n } else if (!this.showAgentSelect) {\n // 详情页/欢迎页 → 返回列表\n this.goBackToList();\n }\n },\n handleNewSessionInternal() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n updateViewportState() {\n if (typeof window === 'undefined') return;\n const nextIsMobile = window.innerWidth <= 768;\n const wasMobile = this.isMobile;\n this.isMobile = nextIsMobile;\n if (!nextIsMobile) {\n this.showSidebar = false;\n this.showH5List = false;\n } else if (!wasMobile && nextIsMobile) {\n if (this.sessionList.length > 0 && !this.activeSessionId) {\n this.showH5List = true;\n this.showAgentSelect = false;\n }\n }\n },\n toggleSidebar() {\n if (!this.isMobile) return;\n this.showSidebar = !this.showSidebar;\n },\n closeSidebar() {\n this.showSidebar = false;\n },\n handleNativeBack() {\n if (this.$hybrid && typeof this.$hybrid.closePage === 'function') {\n this.$hybrid.closePage();\n } else if (window.history.length > 1) {\n window.history.back();\n }\n },\n handleSidebarBack() {\n this.handleNativeBack();\n },\n agentjumpclick() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.activeSessionId = '';\n this.showAgentSelect = true;\n this.showH5List = false;\n this.closeSidebar();\n },\n goBackToList() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n if (cd) {\n if (cd.eventSource) {\n cd.eventSource.close();\n cd.eventSource = null;\n }\n cd.sending = false;\n cd.clearWaitTimer();\n cd.messages = [];\n cd.contentCache = {};\n }\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.agentInfo = {};\n this.showH5List = true;\n this.showAgentSelect = false;\n this.closeSidebar();\n },\n loadAgents() {\n (0, _apichat.getChatAgents)().then(list => {\n this.agentList = list || [];\n }).catch(() => {});\n },\n loadSessions() {\n (0, _apichat.getSessionList)().then(list => {\n if (!this.activeSessionId) {\n this.sessionList = list || [];\n if (this.sessionList.length > 0) {\n if (this.isMobile) {\n this.showAgentSelect = false;\n this.showH5List = true;\n this.showSidebar = false;\n } else {\n this.switchSession(this.sessionList[0]);\n }\n }\n if (this.sessionList.length === 0) {\n this.showAgentSelect = true;\n this.showH5List = false;\n }\n } else {\n this.sessionList = list || [];\n let _item = list.find(res => res.sessionId == this.activeSessionId);\n try {\n if (_item && _item.suggestedQuestions) {\n _item.suggestedQuestions = JSON.parse(_item.suggestedQuestions);\n }\n _item && (this.agentInfo = _item);\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n }\n }).catch(() => {});\n },\n startChatWithAgent(agent) {\n console.log('选择了助手', agent.agentCode, this.currentAgent);\n if (agent.agentCode == this.currentAgent) {\n return;\n }\n this.currentAgent = agent.agentCode;\n this.currentAgentDesc = agent.description || '';\n this.agentInfo = {};\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n const existing = this.sessionList.find(s => s.agentCode === agent.agentCode);\n if (existing) {\n this.switchSession(existing);\n } else {\n this.handleNewSession();\n }\n },\n handleNewSession() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n addWelcomeMessage(agent) {\n const cd = this.$refs.chatDetail;\n if (cd) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n },\n async switchSession(s) {\n let cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n if (this.activeSessionId === s.sessionId) return;\n\n // 移动端刚切换 showH5List=false,ChatDetail 尚未渲染完成,需要等待 nextTick\n if (!cd) {\n await this.$nextTick();\n cd = this.$refs.chatDetail;\n }\n if (cd) {\n cd.contentCache = {};\n cd.messages = [];\n cd.msgPage = 1;\n cd.msgTotal = 0;\n cd.loadingSessionMsg = true;\n }\n this.activeSessionId = s.sessionId;\n this.currentAgent = s.agentCode;\n this.agentInfo = s;\n try {\n if (s.suggestedQuestions) {\n this.agentInfo.suggestedQuestions = JSON.parse(s.suggestedQuestions);\n } else {\n this.agentInfo.suggestedQuestions = [];\n }\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n const agent = this.agentList.find(a => a.agentCode === s.agentCode);\n this.currentAgentDesc = agent ? agent.description || '' : '';\n (0, _apichat.syncToken)((0, _cookie.getToken)(), s.sessionId);\n try {\n const res = await (0, _apichat.getSessionMessages)(s.sessionId, 1, 10);\n const list = Array.isArray(res) ? res : res.list || [];\n if (cd) {\n cd.msgTotal = res.total || list.length;\n cd.msgPage = 1;\n const asAsc = (list || []).slice().reverse();\n cd.messages = asAsc.map(m => ({\n role: m.role,\n content: m.content || '',\n thinking: m.thinking || '',\n toolCalls: [],\n agentName: m.role === 'assistant' ? s.agentName || '' : '',\n createTime: m.createTime || null,\n _key: m.createTime ? 'msg_' + m.createTime : 'msg_' + Date.now() + '_' + Math.random()\n }));\n if (cd.messages.length === 0 && agent) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n cd.loadingSessionMsg = false;\n await this.$nextTick();\n this.$nextTick(() => {\n cd.scrollToBottomOnce();\n cd.checkScrollBottom();\n });\n }\n } catch (e) {\n if (cd) {\n cd.messages = [];\n cd.loadingSessionMsg = false;\n }\n }\n },\n handleDeleteSession(s) {\n this.$confirm(`确认删除「${s.agentName || s.agentCode}」的会话?`, '提示', {\n type: 'warning'\n }).then(() => {\n (0, _apichat.deleteSession)(s.sessionId).then(() => {\n if (this.activeSessionId === s.sessionId) {\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n const cd = this.$refs.chatDetail;\n if (cd) {\n cd.messages = [];\n cd.contentCache = {};\n }\n if (this.isMobile) {\n this.showH5List = false;\n this.showAgentSelect = true;\n } else {\n this.showAgentSelect = true;\n }\n }\n this.loadSessions();\n });\n }).catch(() => {});\n },\n closeOldSession() {}\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.updateViewportState);\n }\n};\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.vue?./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/_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");
|
|
987
|
+
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;\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.find.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.find.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 _apichat = __webpack_require__(/*! @lib/api/apichat */ \"./src/lib/api/apichat.js\");\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _ChatSidebar = _interopRequireDefault(__webpack_require__(/*! ./ChatSidebar.vue */ \"./src/lib/components/chatMain/ChatSidebar.vue\"));\nvar _AgentSelector = _interopRequireDefault(__webpack_require__(/*! ./AgentSelector.vue */ \"./src/lib/components/chatMain/AgentSelector.vue\"));\nvar _ChatDetail = _interopRequireDefault(__webpack_require__(/*! ./ChatDetail.vue */ \"./src/lib/components/chatMain/ChatDetail.vue\"));\nvar _default = exports.default = {\n name: 'ChatMain',\n components: {\n ChatSidebar: _ChatSidebar.default,\n AgentSelector: _AgentSelector.default,\n ChatDetail: _ChatDetail.default\n },\n props: {\n Ak: {\n type: String,\n default: ''\n },\n Sk: {\n type: String,\n default: ''\n },\n imAccount: {\n type: String,\n default: ''\n },\n companyNo: {\n type: String,\n default: ''\n },\n isIntelShow: {\n default: false,\n type: Boolean\n },\n chatImToken: {\n default: '',\n type: String\n }\n },\n data() {\n // 首次渲染前检测窗口宽度,避免 H5 端先显示 PC 布局再切换导致闪烁\n const _isMobile = typeof window !== 'undefined' && window.innerWidth <= 768;\n return {\n agentList: [],\n currentAgent: '',\n currentAgentDesc: '',\n sessionsLoaded: false,\n sessionList: [],\n activeSessionId: '',\n loadingMore: false,\n showAgentSelect: !_isMobile,\n isMobile: _isMobile,\n showSidebar: false,\n showH5List: _isMobile,\n agentInfo: {},\n _swipeStartX: 0,\n _swipeStartY: 0,\n _swipeHandled: false\n };\n },\n created() {\n if (this.Ak || this.Sk) {\n (0, _apichat.setApiAuth)(this.Ak, this.Sk, this.imAccount, this.companyNo, this.chatImToken);\n }\n this.loadAgents();\n this.loadSessions();\n },\n mounted() {\n this.updateViewportState();\n window.addEventListener('resize', this.updateViewportState, {\n passive: true\n });\n // Android WebView 兼容:在 document 级别监听 touchmove/touchend\n // 避免可滚动子元素消费事件后不冒泡到父级\n document.addEventListener('touchmove', this._onSwipeMove, {\n passive: true\n });\n document.addEventListener('touchend', this._onSwipeEnd, {\n passive: true\n });\n },\n watch: {},\n methods: {\n // ── H5 侧滑手势 ──\n onSwipeTouchStart(e) {\n if (!this.isMobile) return;\n this._swipeStartX = e.touches[0].clientX;\n this._swipeStartY = e.touches[0].clientY;\n this._swipeHandled = false;\n },\n // 在 touchmove 中实时检测(绕过 Android 可滚动区域冒泡问题)\n _onSwipeMove(e) {\n if (!this.isMobile || this._swipeHandled) return;\n const moveX = e.touches[0].clientX;\n const moveY = e.touches[0].clientY;\n const diffX = moveX - this._swipeStartX;\n const diffY = moveY - this._swipeStartY;\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n this._swipeHandled = true;\n this._triggerSwipeAction();\n },\n // touchend 检测(兜底,兼容不支持 touchmove 的场景)\n _onSwipeEnd(e) {\n if (!this.isMobile || this._swipeHandled) return;\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const diffX = endX - this._swipeStartX;\n const diffY = endY - this._swipeStartY;\n\n // 从左侧边缘开始滑动(30px 内),向右滑动超过 60px,且水平距离明显大于垂直距离\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n this._swipeHandled = true;\n this._triggerSwipeAction();\n },\n _triggerSwipeAction() {\n if (this.showH5List) {\n // 列表页 → 原生返回\n this.handleNativeBack();\n } else if (!this.showAgentSelect) {\n // 详情页/欢迎页 → 返回列表\n this.goBackToList();\n }\n },\n handleNewSessionInternal() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n updateViewportState() {\n if (typeof window === 'undefined') return;\n const nextIsMobile = window.innerWidth <= 768;\n const wasMobile = this.isMobile;\n this.isMobile = nextIsMobile;\n if (!nextIsMobile) {\n this.showSidebar = false;\n this.showH5List = false;\n } else if (!wasMobile && nextIsMobile) {\n if (this.sessionList.length > 0 && !this.activeSessionId) {\n this.showH5List = true;\n this.showAgentSelect = false;\n }\n }\n },\n toggleSidebar() {\n if (!this.isMobile) return;\n this.showSidebar = !this.showSidebar;\n },\n closeSidebar() {\n this.showSidebar = false;\n },\n handleNativeBack() {\n if (this.$hybrid && typeof this.$hybrid.closePage === 'function') {\n this.$hybrid.closePage();\n } else if (window.history.length > 1) {\n window.history.back();\n }\n },\n handleSidebarBack() {\n this.handleNativeBack();\n },\n agentjumpclick() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.activeSessionId = '';\n this.showAgentSelect = true;\n this.showH5List = false;\n this.closeSidebar();\n },\n goBackToList() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n if (cd) {\n if (cd.eventSource) {\n cd.eventSource.close();\n cd.eventSource = null;\n }\n cd.sending = false;\n cd.clearWaitTimer();\n cd.messages = [];\n cd.contentCache = {};\n }\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.agentInfo = {};\n this.showH5List = true;\n this.showAgentSelect = false;\n this.closeSidebar();\n },\n loadAgents() {\n (0, _apichat.getChatAgents)().then(list => {\n this.agentList = list || [];\n }).catch(() => {});\n },\n loadSessions() {\n (0, _apichat.getSessionList)().then(list => {\n if (!this.activeSessionId) {\n this.sessionList = list || [];\n if (this.sessionList.length > 0) {\n if (this.isMobile) {\n this.showAgentSelect = false;\n this.showH5List = true;\n this.showSidebar = false;\n } else {\n this.switchSession(this.sessionList[0]);\n }\n }\n if (this.sessionList.length === 0) {\n this.showAgentSelect = true;\n this.showH5List = false;\n }\n } else {\n this.sessionList = list || [];\n let _item = list.find(res => res.sessionId == this.activeSessionId);\n try {\n if (_item && _item.suggestedQuestions) {\n _item.suggestedQuestions = JSON.parse(_item.suggestedQuestions);\n }\n _item && (this.agentInfo = _item);\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n }\n }).catch(() => {});\n },\n startChatWithAgent(agent) {\n console.log('选择了助手', agent.agentCode, this.currentAgent);\n if (agent.agentCode == this.currentAgent) {\n return;\n }\n this.currentAgent = agent.agentCode;\n this.currentAgentDesc = agent.description || '';\n this.agentInfo = {};\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n const existing = this.sessionList.find(s => s.agentCode === agent.agentCode);\n if (existing) {\n this.switchSession(existing);\n } else {\n this.handleNewSession();\n }\n },\n handleNewSession() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n addWelcomeMessage(agent) {\n const cd = this.$refs.chatDetail;\n if (cd) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n },\n async switchSession(s) {\n let cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n if (this.activeSessionId === s.sessionId) return;\n\n // 移动端刚切换 showH5List=false,ChatDetail 尚未渲染完成,需要等待 nextTick\n if (!cd) {\n await this.$nextTick();\n cd = this.$refs.chatDetail;\n }\n if (cd) {\n cd.contentCache = {};\n cd.messages = [];\n cd.msgPage = 1;\n cd.msgTotal = 0;\n cd.loadingSessionMsg = true;\n }\n this.activeSessionId = s.sessionId;\n this.currentAgent = s.agentCode;\n this.agentInfo = s;\n try {\n if (s.suggestedQuestions) {\n this.agentInfo.suggestedQuestions = JSON.parse(s.suggestedQuestions);\n } else {\n this.agentInfo.suggestedQuestions = [];\n }\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n const agent = this.agentList.find(a => a.agentCode === s.agentCode);\n this.currentAgentDesc = agent ? agent.description || '' : '';\n (0, _apichat.syncToken)((0, _cookie.getToken)(), s.sessionId);\n try {\n const res = await (0, _apichat.getSessionMessages)(s.sessionId, 1, 10);\n const list = Array.isArray(res) ? res : res.list || [];\n if (cd) {\n cd.msgTotal = res.total || list.length;\n cd.msgPage = 1;\n const asAsc = (list || []).slice().reverse();\n cd.messages = asAsc.map(m => ({\n role: m.role,\n content: m.content || '',\n thinking: m.thinking || '',\n toolCalls: [],\n agentName: m.role === 'assistant' ? s.agentName || '' : '',\n createTime: m.createTime || null,\n _key: m.createTime ? 'msg_' + m.createTime : 'msg_' + Date.now() + '_' + Math.random()\n }));\n if (cd.messages.length === 0 && agent) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n cd.loadingSessionMsg = false;\n await this.$nextTick();\n this.$nextTick(() => {\n cd.scrollToBottomOnce();\n cd.checkScrollBottom();\n });\n }\n } catch (e) {\n if (cd) {\n cd.messages = [];\n cd.loadingSessionMsg = false;\n }\n }\n },\n handleDeleteSession(s) {\n this.$confirm(`确认删除「${s.agentName || s.agentCode}」的会话?`, '提示', {\n type: 'warning'\n }).then(() => {\n (0, _apichat.deleteSession)(s.sessionId).then(() => {\n if (this.activeSessionId === s.sessionId) {\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n const cd = this.$refs.chatDetail;\n if (cd) {\n cd.messages = [];\n cd.contentCache = {};\n }\n if (this.isMobile) {\n this.showH5List = false;\n this.showAgentSelect = true;\n } else {\n this.showAgentSelect = true;\n }\n }\n this.loadSessions();\n });\n }).catch(() => {});\n },\n closeOldSession() {}\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.updateViewportState);\n document.removeEventListener('touchmove', this._onSwipeMove);\n document.removeEventListener('touchend', this._onSwipeEnd);\n }\n};\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.vue?./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/_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");
|
|
988
988
|
|
|
989
989
|
/***/ }),
|
|
990
990
|
|
|
@@ -1068,7 +1068,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
|
|
|
1068
1068
|
/***/ (function(module, exports, __webpack_require__) {
|
|
1069
1069
|
|
|
1070
1070
|
"use strict";
|
|
1071
|
-
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-layout\",\n class: {\n \"is-mobile\": _vm.isMobile,\n \"sidebar-open\": _vm.showSidebar,\n \"h5-list-mode\": _vm.isMobile && _vm.showH5List\n },\n on: {\n touchstart: _vm.onSwipeTouchStart
|
|
1071
|
+
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-layout\",\n class: {\n \"is-mobile\": _vm.isMobile,\n \"sidebar-open\": _vm.showSidebar,\n \"h5-list-mode\": _vm.isMobile && _vm.showH5List\n },\n on: {\n \"&touchstart\": function ($event) {\n return _vm.onSwipeTouchStart.apply(null, arguments);\n }\n }\n }, [_vm.isMobile && _vm.showSidebar && !_vm.showH5List ? _c(\"div\", {\n staticClass: \"sidebar-mask\",\n on: {\n click: _vm.closeSidebar\n }\n }) : _vm._e(), _c(\"ChatSidebar\", {\n attrs: {\n sessions: _vm.sessionList,\n activeSessionId: _vm.activeSessionId,\n isMobile: _vm.isMobile,\n isIntelShow: _vm.isIntelShow\n },\n on: {\n \"sidebar-back\": _vm.handleSidebarBack,\n \"agent-jump-click\": _vm.agentjumpclick,\n \"switch-session\": _vm.switchSession,\n \"delete-session\": _vm.handleDeleteSession,\n \"start-chat-from-search\": _vm.startChatWithAgent\n }\n }), _vm.showAgentSelect ? _c(\"AgentSelector\", {\n attrs: {\n agentList: _vm.agentList,\n isMobile: _vm.isMobile\n },\n on: {\n \"select-agent\": _vm.startChatWithAgent,\n \"go-back\": _vm.goBackToList\n }\n }) : !_vm.showH5List ? _c(\"ChatDetail\", {\n ref: \"chatDetail\",\n attrs: {\n isMobile: _vm.isMobile,\n activeSessionId: _vm.activeSessionId,\n currentAgent: _vm.currentAgent,\n agentInfo: _vm.agentInfo,\n currentAgentDesc: _vm.currentAgentDesc,\n agentList: _vm.agentList\n },\n on: {\n \"go-back-to-list\": _vm.goBackToList,\n \"toggle-sidebar\": _vm.toggleSidebar,\n \"agent-jump-click\": _vm.agentjumpclick,\n \"close-sidebar\": _vm.closeSidebar,\n \"session-refresh\": _vm.loadSessions,\n \"start-session\": _vm.handleNewSessionInternal\n }\n }) : _vm._e()], 1);\n};\nvar staticRenderFns = exports.staticRenderFns = [];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.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");
|
|
1072
1072
|
|
|
1073
1073
|
/***/ }),
|
|
1074
1074
|
|
|
@@ -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}\\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}\\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}\\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}\\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-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}\\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}\\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}\\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}\\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}\\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-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}\\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.
|
|
12620
|
+
eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.12\\\",\\\"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
|
|
|
@@ -984,7 +984,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
|
|
|
984
984
|
/***/ (function(module, exports, __webpack_require__) {
|
|
985
985
|
|
|
986
986
|
"use strict";
|
|
987
|
-
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;\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.find.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.find.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 _apichat = __webpack_require__(/*! @lib/api/apichat */ \"./src/lib/api/apichat.js\");\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _ChatSidebar = _interopRequireDefault(__webpack_require__(/*! ./ChatSidebar.vue */ \"./src/lib/components/chatMain/ChatSidebar.vue\"));\nvar _AgentSelector = _interopRequireDefault(__webpack_require__(/*! ./AgentSelector.vue */ \"./src/lib/components/chatMain/AgentSelector.vue\"));\nvar _ChatDetail = _interopRequireDefault(__webpack_require__(/*! ./ChatDetail.vue */ \"./src/lib/components/chatMain/ChatDetail.vue\"));\nvar _default = exports.default = {\n name: 'ChatMain',\n components: {\n ChatSidebar: _ChatSidebar.default,\n AgentSelector: _AgentSelector.default,\n ChatDetail: _ChatDetail.default\n },\n props: {\n Ak: {\n type: String,\n default: ''\n },\n Sk: {\n type: String,\n default: ''\n },\n imAccount: {\n type: String,\n default: ''\n },\n companyNo: {\n type: String,\n default: ''\n },\n isIntelShow: {\n default: false,\n type: Boolean\n },\n chatImToken: {\n default: '',\n type: String\n }\n },\n data() {\n // 首次渲染前检测窗口宽度,避免 H5 端先显示 PC 布局再切换导致闪烁\n const _isMobile = typeof window !== 'undefined' && window.innerWidth <= 768;\n return {\n agentList: [],\n currentAgent: '',\n currentAgentDesc: '',\n sessionsLoaded: false,\n sessionList: [],\n activeSessionId: '',\n loadingMore: false,\n showAgentSelect: !_isMobile,\n isMobile: _isMobile,\n showSidebar: false,\n showH5List: _isMobile,\n agentInfo: {},\n _swipeStartX: 0,\n _swipeStartY: 0\n };\n },\n created() {\n if (this.Ak || this.Sk) {\n (0, _apichat.setApiAuth)(this.Ak, this.Sk, this.imAccount, this.companyNo, this.chatImToken);\n }\n this.loadAgents();\n this.loadSessions();\n },\n mounted() {\n this.updateViewportState();\n window.addEventListener('resize', this.updateViewportState, {\n passive: true\n });\n },\n watch: {},\n methods: {\n // ── H5 侧滑手势 ──\n onSwipeTouchStart(e) {\n if (!this.isMobile) return;\n this._swipeStartX = e.touches[0].clientX;\n this._swipeStartY = e.touches[0].clientY;\n },\n onSwipeTouchEnd(e) {\n if (!this.isMobile) return;\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const diffX = endX - this._swipeStartX;\n const diffY = endY - this._swipeStartY;\n\n // 从左侧边缘开始滑动(30px 内),向右滑动超过 60px,且水平距离明显大于垂直距离\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n if (this.showH5List) {\n // 列表页 → 原生返回\n this.handleNativeBack();\n } else if (!this.showAgentSelect) {\n // 详情页/欢迎页 → 返回列表\n this.goBackToList();\n }\n },\n handleNewSessionInternal() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n updateViewportState() {\n if (typeof window === 'undefined') return;\n const nextIsMobile = window.innerWidth <= 768;\n const wasMobile = this.isMobile;\n this.isMobile = nextIsMobile;\n if (!nextIsMobile) {\n this.showSidebar = false;\n this.showH5List = false;\n } else if (!wasMobile && nextIsMobile) {\n if (this.sessionList.length > 0 && !this.activeSessionId) {\n this.showH5List = true;\n this.showAgentSelect = false;\n }\n }\n },\n toggleSidebar() {\n if (!this.isMobile) return;\n this.showSidebar = !this.showSidebar;\n },\n closeSidebar() {\n this.showSidebar = false;\n },\n handleNativeBack() {\n if (this.$hybrid && typeof this.$hybrid.closePage === 'function') {\n this.$hybrid.closePage();\n } else if (window.history.length > 1) {\n window.history.back();\n }\n },\n handleSidebarBack() {\n this.handleNativeBack();\n },\n agentjumpclick() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.activeSessionId = '';\n this.showAgentSelect = true;\n this.showH5List = false;\n this.closeSidebar();\n },\n goBackToList() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n if (cd) {\n if (cd.eventSource) {\n cd.eventSource.close();\n cd.eventSource = null;\n }\n cd.sending = false;\n cd.clearWaitTimer();\n cd.messages = [];\n cd.contentCache = {};\n }\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.agentInfo = {};\n this.showH5List = true;\n this.showAgentSelect = false;\n this.closeSidebar();\n },\n loadAgents() {\n (0, _apichat.getChatAgents)().then(list => {\n this.agentList = list || [];\n }).catch(() => {});\n },\n loadSessions() {\n (0, _apichat.getSessionList)().then(list => {\n if (!this.activeSessionId) {\n this.sessionList = list || [];\n if (this.sessionList.length > 0) {\n if (this.isMobile) {\n this.showAgentSelect = false;\n this.showH5List = true;\n this.showSidebar = false;\n } else {\n this.switchSession(this.sessionList[0]);\n }\n }\n if (this.sessionList.length === 0) {\n this.showAgentSelect = true;\n this.showH5List = false;\n }\n } else {\n this.sessionList = list || [];\n let _item = list.find(res => res.sessionId == this.activeSessionId);\n try {\n if (_item && _item.suggestedQuestions) {\n _item.suggestedQuestions = JSON.parse(_item.suggestedQuestions);\n }\n _item && (this.agentInfo = _item);\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n }\n }).catch(() => {});\n },\n startChatWithAgent(agent) {\n console.log('选择了助手', agent.agentCode, this.currentAgent);\n if (agent.agentCode == this.currentAgent) {\n return;\n }\n this.currentAgent = agent.agentCode;\n this.currentAgentDesc = agent.description || '';\n this.agentInfo = {};\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n const existing = this.sessionList.find(s => s.agentCode === agent.agentCode);\n if (existing) {\n this.switchSession(existing);\n } else {\n this.handleNewSession();\n }\n },\n handleNewSession() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n addWelcomeMessage(agent) {\n const cd = this.$refs.chatDetail;\n if (cd) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n },\n async switchSession(s) {\n let cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n if (this.activeSessionId === s.sessionId) return;\n\n // 移动端刚切换 showH5List=false,ChatDetail 尚未渲染完成,需要等待 nextTick\n if (!cd) {\n await this.$nextTick();\n cd = this.$refs.chatDetail;\n }\n if (cd) {\n cd.contentCache = {};\n cd.messages = [];\n cd.msgPage = 1;\n cd.msgTotal = 0;\n cd.loadingSessionMsg = true;\n }\n this.activeSessionId = s.sessionId;\n this.currentAgent = s.agentCode;\n this.agentInfo = s;\n try {\n if (s.suggestedQuestions) {\n this.agentInfo.suggestedQuestions = JSON.parse(s.suggestedQuestions);\n } else {\n this.agentInfo.suggestedQuestions = [];\n }\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n const agent = this.agentList.find(a => a.agentCode === s.agentCode);\n this.currentAgentDesc = agent ? agent.description || '' : '';\n (0, _apichat.syncToken)((0, _cookie.getToken)(), s.sessionId);\n try {\n const res = await (0, _apichat.getSessionMessages)(s.sessionId, 1, 10);\n const list = Array.isArray(res) ? res : res.list || [];\n if (cd) {\n cd.msgTotal = res.total || list.length;\n cd.msgPage = 1;\n const asAsc = (list || []).slice().reverse();\n cd.messages = asAsc.map(m => ({\n role: m.role,\n content: m.content || '',\n thinking: m.thinking || '',\n toolCalls: [],\n agentName: m.role === 'assistant' ? s.agentName || '' : '',\n createTime: m.createTime || null,\n _key: m.createTime ? 'msg_' + m.createTime : 'msg_' + Date.now() + '_' + Math.random()\n }));\n if (cd.messages.length === 0 && agent) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n cd.loadingSessionMsg = false;\n await this.$nextTick();\n this.$nextTick(() => {\n cd.scrollToBottomOnce();\n cd.checkScrollBottom();\n });\n }\n } catch (e) {\n if (cd) {\n cd.messages = [];\n cd.loadingSessionMsg = false;\n }\n }\n },\n handleDeleteSession(s) {\n this.$confirm(`确认删除「${s.agentName || s.agentCode}」的会话?`, '提示', {\n type: 'warning'\n }).then(() => {\n (0, _apichat.deleteSession)(s.sessionId).then(() => {\n if (this.activeSessionId === s.sessionId) {\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n const cd = this.$refs.chatDetail;\n if (cd) {\n cd.messages = [];\n cd.contentCache = {};\n }\n if (this.isMobile) {\n this.showH5List = false;\n this.showAgentSelect = true;\n } else {\n this.showAgentSelect = true;\n }\n }\n this.loadSessions();\n });\n }).catch(() => {});\n },\n closeOldSession() {}\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.updateViewportState);\n }\n};\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.vue?./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/_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");
|
|
987
|
+
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;\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.find.js */ \"./node_modules/_core-js@3.45.1@core-js/modules/es.iterator.find.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 _apichat = __webpack_require__(/*! @lib/api/apichat */ \"./src/lib/api/apichat.js\");\nvar _cookie = __webpack_require__(/*! @lib/utils/cookie.js */ \"./src/lib/utils/cookie.js\");\nvar _ChatSidebar = _interopRequireDefault(__webpack_require__(/*! ./ChatSidebar.vue */ \"./src/lib/components/chatMain/ChatSidebar.vue\"));\nvar _AgentSelector = _interopRequireDefault(__webpack_require__(/*! ./AgentSelector.vue */ \"./src/lib/components/chatMain/AgentSelector.vue\"));\nvar _ChatDetail = _interopRequireDefault(__webpack_require__(/*! ./ChatDetail.vue */ \"./src/lib/components/chatMain/ChatDetail.vue\"));\nvar _default = exports.default = {\n name: 'ChatMain',\n components: {\n ChatSidebar: _ChatSidebar.default,\n AgentSelector: _AgentSelector.default,\n ChatDetail: _ChatDetail.default\n },\n props: {\n Ak: {\n type: String,\n default: ''\n },\n Sk: {\n type: String,\n default: ''\n },\n imAccount: {\n type: String,\n default: ''\n },\n companyNo: {\n type: String,\n default: ''\n },\n isIntelShow: {\n default: false,\n type: Boolean\n },\n chatImToken: {\n default: '',\n type: String\n }\n },\n data() {\n // 首次渲染前检测窗口宽度,避免 H5 端先显示 PC 布局再切换导致闪烁\n const _isMobile = typeof window !== 'undefined' && window.innerWidth <= 768;\n return {\n agentList: [],\n currentAgent: '',\n currentAgentDesc: '',\n sessionsLoaded: false,\n sessionList: [],\n activeSessionId: '',\n loadingMore: false,\n showAgentSelect: !_isMobile,\n isMobile: _isMobile,\n showSidebar: false,\n showH5List: _isMobile,\n agentInfo: {},\n _swipeStartX: 0,\n _swipeStartY: 0,\n _swipeHandled: false\n };\n },\n created() {\n if (this.Ak || this.Sk) {\n (0, _apichat.setApiAuth)(this.Ak, this.Sk, this.imAccount, this.companyNo, this.chatImToken);\n }\n this.loadAgents();\n this.loadSessions();\n },\n mounted() {\n this.updateViewportState();\n window.addEventListener('resize', this.updateViewportState, {\n passive: true\n });\n // Android WebView 兼容:在 document 级别监听 touchmove/touchend\n // 避免可滚动子元素消费事件后不冒泡到父级\n document.addEventListener('touchmove', this._onSwipeMove, {\n passive: true\n });\n document.addEventListener('touchend', this._onSwipeEnd, {\n passive: true\n });\n },\n watch: {},\n methods: {\n // ── H5 侧滑手势 ──\n onSwipeTouchStart(e) {\n if (!this.isMobile) return;\n this._swipeStartX = e.touches[0].clientX;\n this._swipeStartY = e.touches[0].clientY;\n this._swipeHandled = false;\n },\n // 在 touchmove 中实时检测(绕过 Android 可滚动区域冒泡问题)\n _onSwipeMove(e) {\n if (!this.isMobile || this._swipeHandled) return;\n const moveX = e.touches[0].clientX;\n const moveY = e.touches[0].clientY;\n const diffX = moveX - this._swipeStartX;\n const diffY = moveY - this._swipeStartY;\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n this._swipeHandled = true;\n this._triggerSwipeAction();\n },\n // touchend 检测(兜底,兼容不支持 touchmove 的场景)\n _onSwipeEnd(e) {\n if (!this.isMobile || this._swipeHandled) return;\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const diffX = endX - this._swipeStartX;\n const diffY = endY - this._swipeStartY;\n\n // 从左侧边缘开始滑动(30px 内),向右滑动超过 60px,且水平距离明显大于垂直距离\n if (this._swipeStartX > 30) return;\n if (diffX < 60) return;\n if (Math.abs(diffX) < Math.abs(diffY) * 2) return;\n this._swipeHandled = true;\n this._triggerSwipeAction();\n },\n _triggerSwipeAction() {\n if (this.showH5List) {\n // 列表页 → 原生返回\n this.handleNativeBack();\n } else if (!this.showAgentSelect) {\n // 详情页/欢迎页 → 返回列表\n this.goBackToList();\n }\n },\n handleNewSessionInternal() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n updateViewportState() {\n if (typeof window === 'undefined') return;\n const nextIsMobile = window.innerWidth <= 768;\n const wasMobile = this.isMobile;\n this.isMobile = nextIsMobile;\n if (!nextIsMobile) {\n this.showSidebar = false;\n this.showH5List = false;\n } else if (!wasMobile && nextIsMobile) {\n if (this.sessionList.length > 0 && !this.activeSessionId) {\n this.showH5List = true;\n this.showAgentSelect = false;\n }\n }\n },\n toggleSidebar() {\n if (!this.isMobile) return;\n this.showSidebar = !this.showSidebar;\n },\n closeSidebar() {\n this.showSidebar = false;\n },\n handleNativeBack() {\n if (this.$hybrid && typeof this.$hybrid.closePage === 'function') {\n this.$hybrid.closePage();\n } else if (window.history.length > 1) {\n window.history.back();\n }\n },\n handleSidebarBack() {\n this.handleNativeBack();\n },\n agentjumpclick() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.activeSessionId = '';\n this.showAgentSelect = true;\n this.showH5List = false;\n this.closeSidebar();\n },\n goBackToList() {\n const cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n if (cd) {\n if (cd.eventSource) {\n cd.eventSource.close();\n cd.eventSource = null;\n }\n cd.sending = false;\n cd.clearWaitTimer();\n cd.messages = [];\n cd.contentCache = {};\n }\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n this.agentInfo = {};\n this.showH5List = true;\n this.showAgentSelect = false;\n this.closeSidebar();\n },\n loadAgents() {\n (0, _apichat.getChatAgents)().then(list => {\n this.agentList = list || [];\n }).catch(() => {});\n },\n loadSessions() {\n (0, _apichat.getSessionList)().then(list => {\n if (!this.activeSessionId) {\n this.sessionList = list || [];\n if (this.sessionList.length > 0) {\n if (this.isMobile) {\n this.showAgentSelect = false;\n this.showH5List = true;\n this.showSidebar = false;\n } else {\n this.switchSession(this.sessionList[0]);\n }\n }\n if (this.sessionList.length === 0) {\n this.showAgentSelect = true;\n this.showH5List = false;\n }\n } else {\n this.sessionList = list || [];\n let _item = list.find(res => res.sessionId == this.activeSessionId);\n try {\n if (_item && _item.suggestedQuestions) {\n _item.suggestedQuestions = JSON.parse(_item.suggestedQuestions);\n }\n _item && (this.agentInfo = _item);\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n }\n }).catch(() => {});\n },\n startChatWithAgent(agent) {\n console.log('选择了助手', agent.agentCode, this.currentAgent);\n if (agent.agentCode == this.currentAgent) {\n return;\n }\n this.currentAgent = agent.agentCode;\n this.currentAgentDesc = agent.description || '';\n this.agentInfo = {};\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n const existing = this.sessionList.find(s => s.agentCode === agent.agentCode);\n if (existing) {\n this.switchSession(existing);\n } else {\n this.handleNewSession();\n }\n },\n handleNewSession() {\n if (!this.currentAgent) return;\n if (this.activeSessionId) this.closeOldSession();\n (0, _apichat.startSession)(this.currentAgent).then(res => {\n this.activeSessionId = res.sessionId || '';\n this.loadSessions();\n const agent = this.agentList.find(a => a.agentCode === this.currentAgent);\n if (agent) this.addWelcomeMessage(agent);\n }).catch(() => {});\n },\n addWelcomeMessage(agent) {\n const cd = this.$refs.chatDetail;\n if (cd) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n },\n async switchSession(s) {\n let cd = this.$refs.chatDetail;\n if (cd && cd.sending) {\n this.$message.warning('AI正在生成内容,暂时请不要切换对话');\n return;\n }\n this.showAgentSelect = false;\n this.closeSidebar();\n if (this.isMobile) {\n this.showH5List = false;\n }\n if (this.activeSessionId === s.sessionId) return;\n\n // 移动端刚切换 showH5List=false,ChatDetail 尚未渲染完成,需要等待 nextTick\n if (!cd) {\n await this.$nextTick();\n cd = this.$refs.chatDetail;\n }\n if (cd) {\n cd.contentCache = {};\n cd.messages = [];\n cd.msgPage = 1;\n cd.msgTotal = 0;\n cd.loadingSessionMsg = true;\n }\n this.activeSessionId = s.sessionId;\n this.currentAgent = s.agentCode;\n this.agentInfo = s;\n try {\n if (s.suggestedQuestions) {\n this.agentInfo.suggestedQuestions = JSON.parse(s.suggestedQuestions);\n } else {\n this.agentInfo.suggestedQuestions = [];\n }\n } catch (err) {\n this.agentInfo.questionArr = [];\n console.warn('快捷提问解析失败', err);\n }\n const agent = this.agentList.find(a => a.agentCode === s.agentCode);\n this.currentAgentDesc = agent ? agent.description || '' : '';\n (0, _apichat.syncToken)((0, _cookie.getToken)(), s.sessionId);\n try {\n const res = await (0, _apichat.getSessionMessages)(s.sessionId, 1, 10);\n const list = Array.isArray(res) ? res : res.list || [];\n if (cd) {\n cd.msgTotal = res.total || list.length;\n cd.msgPage = 1;\n const asAsc = (list || []).slice().reverse();\n cd.messages = asAsc.map(m => ({\n role: m.role,\n content: m.content || '',\n thinking: m.thinking || '',\n toolCalls: [],\n agentName: m.role === 'assistant' ? s.agentName || '' : '',\n createTime: m.createTime || null,\n _key: m.createTime ? 'msg_' + m.createTime : 'msg_' + Date.now() + '_' + Math.random()\n }));\n if (cd.messages.length === 0 && agent) {\n const _agent = this.agentList.find(x => x.agentCode === this.currentAgent);\n cd.greeting = _agent ? _agent.greeting || '很高兴为您服务,请问有什么可以帮到您?' : '';\n }\n cd.loadingSessionMsg = false;\n await this.$nextTick();\n this.$nextTick(() => {\n cd.scrollToBottomOnce();\n cd.checkScrollBottom();\n });\n }\n } catch (e) {\n if (cd) {\n cd.messages = [];\n cd.loadingSessionMsg = false;\n }\n }\n },\n handleDeleteSession(s) {\n this.$confirm(`确认删除「${s.agentName || s.agentCode}」的会话?`, '提示', {\n type: 'warning'\n }).then(() => {\n (0, _apichat.deleteSession)(s.sessionId).then(() => {\n if (this.activeSessionId === s.sessionId) {\n this.activeSessionId = '';\n this.currentAgent = '';\n this.currentAgentDesc = '';\n const cd = this.$refs.chatDetail;\n if (cd) {\n cd.messages = [];\n cd.contentCache = {};\n }\n if (this.isMobile) {\n this.showH5List = false;\n this.showAgentSelect = true;\n } else {\n this.showAgentSelect = true;\n }\n }\n this.loadSessions();\n });\n }).catch(() => {});\n },\n closeOldSession() {}\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.updateViewportState);\n document.removeEventListener('touchmove', this._onSwipeMove);\n document.removeEventListener('touchend', this._onSwipeEnd);\n }\n};\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.vue?./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/_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");
|
|
988
988
|
|
|
989
989
|
/***/ }),
|
|
990
990
|
|
|
@@ -1068,7 +1068,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
|
|
|
1068
1068
|
/***/ (function(module, exports, __webpack_require__) {
|
|
1069
1069
|
|
|
1070
1070
|
"use strict";
|
|
1071
|
-
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-layout\",\n class: {\n \"is-mobile\": _vm.isMobile,\n \"sidebar-open\": _vm.showSidebar,\n \"h5-list-mode\": _vm.isMobile && _vm.showH5List\n },\n on: {\n touchstart: _vm.onSwipeTouchStart
|
|
1071
|
+
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-layout\",\n class: {\n \"is-mobile\": _vm.isMobile,\n \"sidebar-open\": _vm.showSidebar,\n \"h5-list-mode\": _vm.isMobile && _vm.showH5List\n },\n on: {\n \"&touchstart\": function ($event) {\n return _vm.onSwipeTouchStart.apply(null, arguments);\n }\n }\n }, [_vm.isMobile && _vm.showSidebar && !_vm.showH5List ? _c(\"div\", {\n staticClass: \"sidebar-mask\",\n on: {\n click: _vm.closeSidebar\n }\n }) : _vm._e(), _c(\"ChatSidebar\", {\n attrs: {\n sessions: _vm.sessionList,\n activeSessionId: _vm.activeSessionId,\n isMobile: _vm.isMobile,\n isIntelShow: _vm.isIntelShow\n },\n on: {\n \"sidebar-back\": _vm.handleSidebarBack,\n \"agent-jump-click\": _vm.agentjumpclick,\n \"switch-session\": _vm.switchSession,\n \"delete-session\": _vm.handleDeleteSession,\n \"start-chat-from-search\": _vm.startChatWithAgent\n }\n }), _vm.showAgentSelect ? _c(\"AgentSelector\", {\n attrs: {\n agentList: _vm.agentList,\n isMobile: _vm.isMobile\n },\n on: {\n \"select-agent\": _vm.startChatWithAgent,\n \"go-back\": _vm.goBackToList\n }\n }) : !_vm.showH5List ? _c(\"ChatDetail\", {\n ref: \"chatDetail\",\n attrs: {\n isMobile: _vm.isMobile,\n activeSessionId: _vm.activeSessionId,\n currentAgent: _vm.currentAgent,\n agentInfo: _vm.agentInfo,\n currentAgentDesc: _vm.currentAgentDesc,\n agentList: _vm.agentList\n },\n on: {\n \"go-back-to-list\": _vm.goBackToList,\n \"toggle-sidebar\": _vm.toggleSidebar,\n \"agent-jump-click\": _vm.agentjumpclick,\n \"close-sidebar\": _vm.closeSidebar,\n \"session-refresh\": _vm.loadSessions,\n \"start-session\": _vm.handleNewSessionInternal\n }\n }) : _vm._e()], 1);\n};\nvar staticRenderFns = exports.staticRenderFns = [];\nrender._withStripped = true;\n\n//# sourceURL=webpack://ZjPluginIntelligent/./src/lib/components/chatMain/index.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");
|
|
1072
1072
|
|
|
1073
1073
|
/***/ }),
|
|
1074
1074
|
|
|
@@ -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}\\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}\\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}\\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}\\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-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}\\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}\\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}\\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}\\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}\\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-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}\\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.
|
|
12620
|
+
eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"zj-plugin-intelligent\\\",\\\"version\\\":\\\"1.2.5-beta.12\\\",\\\"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
|
|