ai-error-assistant-pro 0.0.20 → 0.0.22

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.
@@ -19,7 +19,7 @@
19
19
  <img alt="" src="../static/zan-active.png" v-else />
20
20
  </div>
21
21
  </el-tooltip>
22
- <el-popover v-model="popover" placement="top-start" trigger="manual">
22
+ <el-popover ref="popoverRef" v-model="popover" placement="top-start" trigger="manual">
23
23
  <div slot="reference">
24
24
  <el-tooltip content="踩" effect="light" placement="bottom">
25
25
  <div class="tools-icon" @click="openPopover" v-if="!listData.cai">
@@ -1,6 +1,6 @@
1
1
  <template>
2
- <div class="chat-contain" ref="chatContainer">
3
- <error-chat :question-stem="analyExercise" :businessSource ="businessSource" @on-init="errorChatInit"/>
2
+ <div class="chat-contain" ref="chatContainer" @scroll="handleScroll">
3
+ <error-chat :question-stem="analyExercise" :businessSource ="businessSource" @on-init="errorChatInit" ref="errorChat"/>
4
4
  <div v-for="(list, index) in messageData" :key="index"
5
5
  :class="{'user-list': list.type === 'user'}"
6
6
  class="message">
@@ -73,6 +73,7 @@
73
73
  </div>
74
74
  </div>
75
75
  <chat-tools v-if="list.type === 'robot'"
76
+ :ref="'chatTools' + index"
76
77
  :chatId="chatId"
77
78
  :detail-data="list"
78
79
  :sending="list.sending"
@@ -140,6 +141,7 @@ export default {
140
141
  chatId: '', // 对话id
141
142
  chatMajorId: '',
142
143
  finish: false,
144
+ lastScrollTop: 0,
143
145
  }
144
146
  },
145
147
  computed: {
@@ -159,6 +161,46 @@ export default {
159
161
  }
160
162
  },
161
163
  methods: {
164
+ handleScroll() {
165
+ const container = this.$refs.chatContainer;
166
+ const containerRect = container.getBoundingClientRect();
167
+ // 检查所有消息中的popover是否在可视区域内
168
+ const errorRef = this.$refs.errorChat;
169
+ this.messageData.forEach((_, index) => {
170
+ const ref = this.$refs['chatTools' + index];
171
+ if (ref && ref[0]) {
172
+ // 只有当popover开启时,才去判断它的位置
173
+ if (ref[0].popover) {
174
+ // 通过 ref 属性获取 el-popover 的 DOM 元素
175
+ const popoverEl = ref[0].$refs.popoverRef.$el;
176
+ if (popoverEl) {
177
+ const popoverRect = popoverEl.getBoundingClientRect();
178
+ if (popoverRect.top < containerRect.top || popoverRect.bottom > containerRect.bottom) {
179
+ ref[0].cancelPopover();
180
+ }
181
+ }
182
+ }
183
+ }
184
+ });
185
+
186
+ // 处理 errorChat 组件内部的 chatTools popover
187
+ const errorChatRef = this.$refs.errorChat;
188
+ if (errorChatRef && errorChatRef.$refs.chatTools) {
189
+ const errorChatToolsRef = errorChatRef.$refs.chatTools;
190
+ // 只有当popover开启时,才去判断它的位置
191
+ if (errorChatToolsRef.popover) {
192
+ const popoverEl = errorChatToolsRef.$refs.popoverRef.$el;
193
+ if (popoverEl) {
194
+ const popoverRect = popoverEl.getBoundingClientRect();
195
+
196
+ // 如果popover的顶部或底部超出 主聊天容器 的可视区域,则关闭它
197
+ if (popoverRect.top < containerRect.top || popoverRect.bottom > containerRect.bottom) {
198
+ errorChatToolsRef.cancelPopover();
199
+ }
200
+ }
201
+ }
202
+ }
203
+ },
162
204
  cancelPopover() {
163
205
  this.popover = false;
164
206
  },
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="error-chat-contain">
2
+ <div class="error-chat-contain" @scroll="handleScroll">
3
3
  <div class="exercises-answer">
4
4
  <div class="exercises-answer-bg"></div>
5
5
  <p class="question-stem" v-html="questionStem.title"></p>
@@ -72,13 +72,14 @@
72
72
  </div>
73
73
  <div class="answer-content" v-if="businessSource !== '2' ">
74
74
  <div v-for="(list,index) in analysisData.recommend" :key="index" style="margin-bottom: 8px">
75
- <a :href="'https://ai-yuliao.hep.com.cn' + list.url"
75
+ <a :href="seeDetail(list.pageIndex, list.url)"
76
76
  target="_blank"
77
77
  v-if="!list.title.startsWith(chatMajorId)">{{ list.title }}
78
78
  </a>
79
79
  </div>
80
80
  </div>
81
81
  <chat-tools type="error"
82
+ ref="chatTools"
82
83
  :chatId="chatId"
83
84
  :detailData="detailData"
84
85
  @on-reanswer="reanswer" />
@@ -87,7 +88,7 @@
87
88
  </template>
88
89
  <script>
89
90
  import ChatTools from './chat-tools.vue';
90
- import { erranalysis, retryAnalysis } from '../api/index'
91
+ import {erranalysis, pdfUrlBase, retryAnalysis} from '../api/index'
91
92
  export default {
92
93
  name: 'ErrorChart',
93
94
  components: {
@@ -118,6 +119,12 @@ export default {
118
119
  }
119
120
  },
120
121
  methods: {
122
+ handleScroll() {
123
+ console.log('scroll');
124
+ if (this.$refs.chatTools) {
125
+ this.$refs.chatTools.cancelPopover();
126
+ }
127
+ },
121
128
  async getErrorAnalysis() {
122
129
  try {
123
130
  this.analysisData = {};
@@ -163,6 +170,10 @@ export default {
163
170
  throw new Error(e);
164
171
  }
165
172
  },
173
+ seeDetail(pageIndex, url){
174
+ const baseUrl = `${pdfUrlBase}/#/pdf-view?documentUrl=${encodeURIComponent(url)}&pageIndex=${pageIndex}`;
175
+ return baseUrl
176
+ },
166
177
  async reanswer(list) {
167
178
  const cache = {...this.analysisData};
168
179
  this.analysisData = {};
@@ -4,7 +4,7 @@
4
4
  <div class="ai-contain-header">
5
5
  <div class="logo-title">
6
6
  <img src="../static/logo.png" alt="" style="width: 48px; height: 48px">
7
- <span class="title-font">AI错题解</span>
7
+ <span class="title-font">AI错题解析</span>
8
8
  </div>
9
9
  <div class="icon-close" @click="closeMessage">
10
10
  <i class="el-icon-close"></i>
@@ -6546,7 +6546,7 @@ if (typeof window !== 'undefined') {
6546
6546
  // Indicate to webpack that this file can be concatenated
6547
6547
  /* harmony default export */ var setPublicPath = (null);
6548
6548
 
6549
- ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/main.vue?vue&type=template&id=04483a30&scoped=true
6549
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/main.vue?vue&type=template&id=236c26cc&scoped=true
6550
6550
  var render = function render() {
6551
6551
  var _vm = this,
6552
6552
  _c = _vm._self._c;
@@ -6644,19 +6644,23 @@ var staticRenderFns = [function () {
6644
6644
  }
6645
6645
  }), _c('span', {
6646
6646
  staticClass: "title-font"
6647
- }, [_vm._v("AI错题解")])]);
6647
+ }, [_vm._v("AI错题解析")])]);
6648
6648
  }];
6649
6649
 
6650
- ;// CONCATENATED MODULE: ./components/demo/src/main.vue?vue&type=template&id=04483a30&scoped=true
6650
+ ;// CONCATENATED MODULE: ./components/demo/src/main.vue?vue&type=template&id=236c26cc&scoped=true
6651
6651
 
6652
- ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat.vue?vue&type=template&id=75accbf1&scoped=true
6653
- var chatvue_type_template_id_75accbf1_scoped_true_render = function render() {
6652
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat.vue?vue&type=template&id=610f94f3&scoped=true
6653
+ var chatvue_type_template_id_610f94f3_scoped_true_render = function render() {
6654
6654
  var _vm = this,
6655
6655
  _c = _vm._self._c;
6656
6656
  return _c('div', {
6657
6657
  ref: "chatContainer",
6658
- staticClass: "chat-contain"
6658
+ staticClass: "chat-contain",
6659
+ on: {
6660
+ "scroll": _vm.handleScroll
6661
+ }
6659
6662
  }, [_c('error-chat', {
6663
+ ref: "errorChat",
6660
6664
  attrs: {
6661
6665
  "question-stem": _vm.analyExercise,
6662
6666
  "businessSource": _vm.businessSource
@@ -6758,6 +6762,8 @@ var chatvue_type_template_id_75accbf1_scoped_true_render = function render() {
6758
6762
  staticClass: "el-icon-arrow-right go-icon"
6759
6763
  })]);
6760
6764
  }), 0)]) : _vm._e(), list.type === 'robot' ? _c('chat-tools', {
6765
+ ref: 'chatTools' + index,
6766
+ refInFor: true,
6761
6767
  attrs: {
6762
6768
  "chatId": _vm.chatId,
6763
6769
  "detail-data": list,
@@ -6771,7 +6777,7 @@ var chatvue_type_template_id_75accbf1_scoped_true_render = function render() {
6771
6777
  }) : _vm._e()], 1)]);
6772
6778
  })], 2);
6773
6779
  };
6774
- var chatvue_type_template_id_75accbf1_scoped_true_staticRenderFns = [];
6780
+ var chatvue_type_template_id_610f94f3_scoped_true_staticRenderFns = [];
6775
6781
 
6776
6782
  ;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js
6777
6783
 
@@ -11103,8 +11109,8 @@ const getUserInfo = async (token, businessSource, fn) => {
11103
11109
  cache.session.setJSON('SRKJ_TOKEN_CACHE', token);
11104
11110
  if (fn) fn();
11105
11111
  };
11106
- ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat-tools.vue?vue&type=template&id=a40a67cc&scoped=true
11107
- var chat_toolsvue_type_template_id_a40a67cc_scoped_true_render = function render() {
11112
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat-tools.vue?vue&type=template&id=882f7ed8&scoped=true
11113
+ var chat_toolsvue_type_template_id_882f7ed8_scoped_true_render = function render() {
11108
11114
  var _vm = this,
11109
11115
  _c = _vm._self._c;
11110
11116
  return _vm.listData ? _c('div', {
@@ -11160,6 +11166,7 @@ var chat_toolsvue_type_template_id_a40a67cc_scoped_true_render = function render
11160
11166
  "src": __webpack_require__(793)
11161
11167
  }
11162
11168
  })])]), _c('el-popover', {
11169
+ ref: "popoverRef",
11163
11170
  attrs: {
11164
11171
  "placement": "top-start",
11165
11172
  "trigger": "manual"
@@ -11266,9 +11273,9 @@ var chat_toolsvue_type_template_id_a40a67cc_scoped_true_render = function render
11266
11273
  }
11267
11274
  }, [_vm._v("提交")])], 1)], 1)])])], 1)]) : _vm._e();
11268
11275
  };
11269
- var chat_toolsvue_type_template_id_a40a67cc_scoped_true_staticRenderFns = [];
11276
+ var chat_toolsvue_type_template_id_882f7ed8_scoped_true_staticRenderFns = [];
11270
11277
 
11271
- ;// CONCATENATED MODULE: ./components/demo/src/chat-tools.vue?vue&type=template&id=a40a67cc&scoped=true
11278
+ ;// CONCATENATED MODULE: ./components/demo/src/chat-tools.vue?vue&type=template&id=882f7ed8&scoped=true
11272
11279
 
11273
11280
  ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat-tools.vue?vue&type=script&lang=js
11274
11281
 
@@ -11369,10 +11376,10 @@ var chat_toolsvue_type_template_id_a40a67cc_scoped_true_staticRenderFns = [];
11369
11376
  });
11370
11377
  ;// CONCATENATED MODULE: ./components/demo/src/chat-tools.vue?vue&type=script&lang=js
11371
11378
  /* harmony default export */ var src_chat_toolsvue_type_script_lang_js = (chat_toolsvue_type_script_lang_js);
11372
- ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat-tools.vue?vue&type=style&index=0&id=a40a67cc&prod&lang=scss&scoped=true
11379
+ ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat-tools.vue?vue&type=style&index=0&id=882f7ed8&prod&lang=scss&scoped=true
11373
11380
  // extracted by mini-css-extract-plugin
11374
11381
 
11375
- ;// CONCATENATED MODULE: ./components/demo/src/chat-tools.vue?vue&type=style&index=0&id=a40a67cc&prod&lang=scss&scoped=true
11382
+ ;// CONCATENATED MODULE: ./components/demo/src/chat-tools.vue?vue&type=style&index=0&id=882f7ed8&prod&lang=scss&scoped=true
11376
11383
 
11377
11384
  ;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js
11378
11385
  /* globals __VUE_SSR_CONTEXT__ */
@@ -11483,22 +11490,25 @@ function normalizeComponent(
11483
11490
 
11484
11491
  var component = normalizeComponent(
11485
11492
  src_chat_toolsvue_type_script_lang_js,
11486
- chat_toolsvue_type_template_id_a40a67cc_scoped_true_render,
11487
- chat_toolsvue_type_template_id_a40a67cc_scoped_true_staticRenderFns,
11493
+ chat_toolsvue_type_template_id_882f7ed8_scoped_true_render,
11494
+ chat_toolsvue_type_template_id_882f7ed8_scoped_true_staticRenderFns,
11488
11495
  false,
11489
11496
  null,
11490
- "a40a67cc",
11497
+ "882f7ed8",
11491
11498
  null
11492
11499
 
11493
11500
  )
11494
11501
 
11495
11502
  /* harmony default export */ var chat_tools = (component.exports);
11496
- ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/error-chat.vue?vue&type=template&id=750eca81&scoped=true
11497
- var error_chatvue_type_template_id_750eca81_scoped_true_render = function render() {
11503
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/error-chat.vue?vue&type=template&id=f32a40f0&scoped=true
11504
+ var error_chatvue_type_template_id_f32a40f0_scoped_true_render = function render() {
11498
11505
  var _vm = this,
11499
11506
  _c = _vm._self._c;
11500
11507
  return _c('div', {
11501
- staticClass: "error-chat-contain"
11508
+ staticClass: "error-chat-contain",
11509
+ on: {
11510
+ "scroll": _vm.handleScroll
11511
+ }
11502
11512
  }, [_c('div', {
11503
11513
  staticClass: "exercises-answer"
11504
11514
  }, [_c('div', {
@@ -11622,11 +11632,12 @@ var error_chatvue_type_template_id_750eca81_scoped_true_render = function render
11622
11632
  }
11623
11633
  }, [!list.title.startsWith(_vm.chatMajorId) ? _c('a', {
11624
11634
  attrs: {
11625
- "href": 'https://ai-yuliao.hep.com.cn' + list.url,
11635
+ "href": _vm.seeDetail(list.pageIndex, list.url),
11626
11636
  "target": "_blank"
11627
11637
  }
11628
11638
  }, [_vm._v(_vm._s(list.title) + " ")]) : _vm._e()]);
11629
11639
  }), 0) : _vm._e(), _c('chat-tools', {
11640
+ ref: "chatTools",
11630
11641
  attrs: {
11631
11642
  "type": "error",
11632
11643
  "chatId": _vm.chatId,
@@ -11637,7 +11648,7 @@ var error_chatvue_type_template_id_750eca81_scoped_true_render = function render
11637
11648
  }
11638
11649
  })], 1)]);
11639
11650
  };
11640
- var error_chatvue_type_template_id_750eca81_scoped_true_staticRenderFns = [function () {
11651
+ var error_chatvue_type_template_id_f32a40f0_scoped_true_staticRenderFns = [function () {
11641
11652
  var _vm = this,
11642
11653
  _c = _vm._self._c;
11643
11654
  return _c('div', {
@@ -11656,7 +11667,7 @@ var error_chatvue_type_template_id_750eca81_scoped_true_staticRenderFns = [funct
11656
11667
  })]);
11657
11668
  }];
11658
11669
 
11659
- ;// CONCATENATED MODULE: ./components/demo/src/error-chat.vue?vue&type=template&id=750eca81&scoped=true
11670
+ ;// CONCATENATED MODULE: ./components/demo/src/error-chat.vue?vue&type=template&id=f32a40f0&scoped=true
11660
11671
 
11661
11672
  ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/error-chat.vue?vue&type=script&lang=js
11662
11673
 
@@ -11695,6 +11706,12 @@ var error_chatvue_type_template_id_750eca81_scoped_true_staticRenderFns = [funct
11695
11706
  }
11696
11707
  },
11697
11708
  methods: {
11709
+ handleScroll() {
11710
+ console.log('scroll');
11711
+ if (this.$refs.chatTools) {
11712
+ this.$refs.chatTools.cancelPopover();
11713
+ }
11714
+ },
11698
11715
  async getErrorAnalysis() {
11699
11716
  try {
11700
11717
  this.analysisData = {};
@@ -11747,6 +11764,10 @@ var error_chatvue_type_template_id_750eca81_scoped_true_staticRenderFns = [funct
11747
11764
  throw new Error(e);
11748
11765
  }
11749
11766
  },
11767
+ seeDetail(pageIndex, url) {
11768
+ const baseUrl = `${pdfUrlBase}/#/pdf-view?documentUrl=${encodeURIComponent(url)}&pageIndex=${pageIndex}`;
11769
+ return baseUrl;
11770
+ },
11750
11771
  async reanswer(list) {
11751
11772
  const cache = {
11752
11773
  ...this.analysisData
@@ -11787,10 +11808,10 @@ var error_chatvue_type_template_id_750eca81_scoped_true_staticRenderFns = [funct
11787
11808
  });
11788
11809
  ;// CONCATENATED MODULE: ./components/demo/src/error-chat.vue?vue&type=script&lang=js
11789
11810
  /* harmony default export */ var src_error_chatvue_type_script_lang_js = (error_chatvue_type_script_lang_js);
11790
- ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/error-chat.vue?vue&type=style&index=0&id=750eca81&prod&lang=scss&scoped=true
11811
+ ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/error-chat.vue?vue&type=style&index=0&id=f32a40f0&prod&lang=scss&scoped=true
11791
11812
  // extracted by mini-css-extract-plugin
11792
11813
 
11793
- ;// CONCATENATED MODULE: ./components/demo/src/error-chat.vue?vue&type=style&index=0&id=750eca81&prod&lang=scss&scoped=true
11814
+ ;// CONCATENATED MODULE: ./components/demo/src/error-chat.vue?vue&type=style&index=0&id=f32a40f0&prod&lang=scss&scoped=true
11794
11815
 
11795
11816
  ;// CONCATENATED MODULE: ./components/demo/src/error-chat.vue
11796
11817
 
@@ -11803,11 +11824,11 @@ var error_chatvue_type_template_id_750eca81_scoped_true_staticRenderFns = [funct
11803
11824
 
11804
11825
  var error_chat_component = normalizeComponent(
11805
11826
  src_error_chatvue_type_script_lang_js,
11806
- error_chatvue_type_template_id_750eca81_scoped_true_render,
11807
- error_chatvue_type_template_id_750eca81_scoped_true_staticRenderFns,
11827
+ error_chatvue_type_template_id_f32a40f0_scoped_true_render,
11828
+ error_chatvue_type_template_id_f32a40f0_scoped_true_staticRenderFns,
11808
11829
  false,
11809
11830
  null,
11810
- "750eca81",
11831
+ "f32a40f0",
11811
11832
  null
11812
11833
 
11813
11834
  )
@@ -14358,7 +14379,8 @@ const signal = controller.signal;
14358
14379
  chatId: '',
14359
14380
  // 对话id
14360
14381
  chatMajorId: '',
14361
- finish: false
14382
+ finish: false,
14383
+ lastScrollTop: 0
14362
14384
  };
14363
14385
  },
14364
14386
  computed: {
@@ -14378,6 +14400,46 @@ const signal = controller.signal;
14378
14400
  }
14379
14401
  },
14380
14402
  methods: {
14403
+ handleScroll() {
14404
+ const container = this.$refs.chatContainer;
14405
+ const containerRect = container.getBoundingClientRect();
14406
+ // 检查所有消息中的popover是否在可视区域内
14407
+ const errorRef = this.$refs.errorChat;
14408
+ this.messageData.forEach((_, index) => {
14409
+ const ref = this.$refs['chatTools' + index];
14410
+ if (ref && ref[0]) {
14411
+ // 只有当popover开启时,才去判断它的位置
14412
+ if (ref[0].popover) {
14413
+ // 通过 ref 属性获取 el-popover 的 DOM 元素
14414
+ const popoverEl = ref[0].$refs.popoverRef.$el;
14415
+ if (popoverEl) {
14416
+ const popoverRect = popoverEl.getBoundingClientRect();
14417
+ if (popoverRect.top < containerRect.top || popoverRect.bottom > containerRect.bottom) {
14418
+ ref[0].cancelPopover();
14419
+ }
14420
+ }
14421
+ }
14422
+ }
14423
+ });
14424
+
14425
+ // 处理 errorChat 组件内部的 chatTools popover
14426
+ const errorChatRef = this.$refs.errorChat;
14427
+ if (errorChatRef && errorChatRef.$refs.chatTools) {
14428
+ const errorChatToolsRef = errorChatRef.$refs.chatTools;
14429
+ // 只有当popover开启时,才去判断它的位置
14430
+ if (errorChatToolsRef.popover) {
14431
+ const popoverEl = errorChatToolsRef.$refs.popoverRef.$el;
14432
+ if (popoverEl) {
14433
+ const popoverRect = popoverEl.getBoundingClientRect();
14434
+
14435
+ // 如果popover的顶部或底部超出 主聊天容器 的可视区域,则关闭它
14436
+ if (popoverRect.top < containerRect.top || popoverRect.bottom > containerRect.bottom) {
14437
+ errorChatToolsRef.cancelPopover();
14438
+ }
14439
+ }
14440
+ }
14441
+ }
14442
+ },
14381
14443
  cancelPopover() {
14382
14444
  this.popover = false;
14383
14445
  },
@@ -14594,10 +14656,10 @@ const signal = controller.signal;
14594
14656
  });
14595
14657
  ;// CONCATENATED MODULE: ./components/demo/src/chat.vue?vue&type=script&lang=js
14596
14658
  /* harmony default export */ var src_chatvue_type_script_lang_js = (chatvue_type_script_lang_js);
14597
- ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat.vue?vue&type=style&index=0&id=75accbf1&prod&lang=scss&scoped=true
14659
+ ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/chat.vue?vue&type=style&index=0&id=610f94f3&prod&lang=scss&scoped=true
14598
14660
  // extracted by mini-css-extract-plugin
14599
14661
 
14600
- ;// CONCATENATED MODULE: ./components/demo/src/chat.vue?vue&type=style&index=0&id=75accbf1&prod&lang=scss&scoped=true
14662
+ ;// CONCATENATED MODULE: ./components/demo/src/chat.vue?vue&type=style&index=0&id=610f94f3&prod&lang=scss&scoped=true
14601
14663
 
14602
14664
  ;// CONCATENATED MODULE: ./components/demo/src/chat.vue
14603
14665
 
@@ -14610,11 +14672,11 @@ const signal = controller.signal;
14610
14672
 
14611
14673
  var chat_component = normalizeComponent(
14612
14674
  src_chatvue_type_script_lang_js,
14613
- chatvue_type_template_id_75accbf1_scoped_true_render,
14614
- chatvue_type_template_id_75accbf1_scoped_true_staticRenderFns,
14675
+ chatvue_type_template_id_610f94f3_scoped_true_render,
14676
+ chatvue_type_template_id_610f94f3_scoped_true_staticRenderFns,
14615
14677
  false,
14616
14678
  null,
14617
- "75accbf1",
14679
+ "610f94f3",
14618
14680
  null
14619
14681
 
14620
14682
  )
@@ -14878,10 +14940,10 @@ var api = init(defaultConverter, { path: '/' });
14878
14940
  });
14879
14941
  ;// CONCATENATED MODULE: ./components/demo/src/main.vue?vue&type=script&lang=js
14880
14942
  /* harmony default export */ var src_mainvue_type_script_lang_js = (mainvue_type_script_lang_js);
14881
- ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/main.vue?vue&type=style&index=0&id=04483a30&prod&lang=scss&scoped=true
14943
+ ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/demo/src/main.vue?vue&type=style&index=0&id=236c26cc&prod&lang=scss&scoped=true
14882
14944
  // extracted by mini-css-extract-plugin
14883
14945
 
14884
- ;// CONCATENATED MODULE: ./components/demo/src/main.vue?vue&type=style&index=0&id=04483a30&prod&lang=scss&scoped=true
14946
+ ;// CONCATENATED MODULE: ./components/demo/src/main.vue?vue&type=style&index=0&id=236c26cc&prod&lang=scss&scoped=true
14885
14947
 
14886
14948
  ;// CONCATENATED MODULE: ./components/demo/src/main.vue
14887
14949
 
@@ -14898,7 +14960,7 @@ var main_component = normalizeComponent(
14898
14960
  staticRenderFns,
14899
14961
  false,
14900
14962
  null,
14901
- "04483a30",
14963
+ "236c26cc",
14902
14964
  null
14903
14965
 
14904
14966
  )