askbot-dragon 88.0.43 → 88.1.2

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.
Files changed (38) hide show
  1. package/npminstall-debug.log +208 -0
  2. package/package.json +14 -14
  3. package/public/index.html +2 -2
  4. package/src/assets/js/obsBrowser.js +3 -2
  5. package/src/components/ActionAlertIframe.vue +1 -0
  6. package/src/components/AiGuide.vue +1 -1
  7. package/src/components/AnswerDocknowledge.vue +167 -54
  8. package/src/components/ConversationContainer.vue +16 -9
  9. package/src/components/MyEditor.vue +1 -1
  10. package/src/components/QwFeedback.vue +2 -1
  11. package/src/components/actionSatisfaction.vue +2 -2
  12. package/src/components/answerRadio.vue +59 -4
  13. package/src/components/assetDetails.vue +1 -1
  14. package/src/components/assetMessage.vue +14 -13
  15. package/src/components/associationIntention.vue +2 -2
  16. package/src/components/fielListView.vue +1 -1
  17. package/src/components/formTemplate.vue +24 -3
  18. package/src/components/intelligentSummary.vue +15 -12
  19. package/src/components/kkview.vue +0 -10
  20. package/src/components/markDownText.vue +798 -55
  21. package/src/components/myPopup.vue +14 -11
  22. package/src/components/pagination.vue +129 -0
  23. package/src/components/pdfPosition.vue +67 -67
  24. package/src/components/popup.vue +8 -7
  25. package/src/components/preview/docView.vue +114 -0
  26. package/src/components/preview/excelView.vue +199 -0
  27. package/src/components/preview/newPositionPreview.vue +385 -0
  28. package/src/components/preview/pdfView.vue +824 -0
  29. package/src/components/previewDoc.vue +1 -0
  30. package/src/components/previewPdf.vue +346 -65
  31. package/src/components/receiverMessagePlatform.vue +24 -20
  32. package/src/components/senderMessagePlatform.vue +19 -11
  33. package/src/components/tree.vue +2 -2
  34. package/src/components/welcomeKnowledgeFile.vue +5 -2
  35. package/src/components/welcomeSuggest.vue +1 -1
  36. package/src/locales/cn.json +99 -0
  37. package/src/locales/en.json +99 -0
  38. package/src/main.js +19 -0
@@ -5,40 +5,71 @@
5
5
  <template>
6
6
  <div class="answer-docknowledge">
7
7
  <div :class="['answer-docknowledge-header', msg.content.isKnowledgeSummary ? 'bgc' : '']">
8
- <div v-if="msg.content.isKnowledgeSummary" class="tips">AI为您总结生成了以下摘要</div>
9
- <div v-if="msg.content.type == 0" class="answer-text">
8
+ <div v-if="msg.content.isKnowledgeSummary" class="tips">{{$t('dragonCommon.summaryGeneratedByAI')}}</div>
9
+ <!-- <div v-if="msg.content.type == 0" class="answer-text">
10
10
  <template v-if="msg.content.renderType == 1">
11
11
  <p v-html="msg.content.text"></p>
12
12
  </template>
13
- <template v-else-if="msg.content.renderType == 2">
14
- <markDownText :chainValues="msg.content.text" :isHistory="true"></markDownText>
15
- </template>
16
13
  <template v-else>{{ msg.content.text }}</template>
17
- </div>
18
- <div v-if="msg.content.type == 1" class="answer-text">
14
+ </div> -->
15
+ <div class="answer-text">
19
16
  <template v-if="msg.content.renderType == 1">
20
17
  <p v-html="msg.content.text"></p>
21
18
  </template>
22
19
  <template v-else-if="msg.content.renderType == 2">
23
- <markDownText :chainValues="msg.content.text" :isHistory="true"></markDownText>
20
+ <!-- <markDownText :chainValues="msg.content.text" :isHistory="isHistory"></markDownText> -->
21
+ <markDownText
22
+ :chainValues="msg.content.text || ''"
23
+ :whetherRequestStream="msg.content.whetherRequestStream"
24
+ @sseOtherInfo="sseOtherInfo"
25
+ @answerDocKnowledgeFn="answerDocKnowledgeFn"
26
+ :streamRequestUrl="msg.content.streamRequestUrl"
27
+ :msgId="msg.id"
28
+ :isHistory="isHistory">
29
+ </markDownText>
30
+ </template>
31
+ <template v-else-if="msg.content.renderType == null">
32
+ <!-- <markDownText :chainValues="msg.content.text" :isHistory="isHistory"></markDownText> -->
33
+ <markDownText
34
+ :chainValues="msg.content.text || ''"
35
+ :whetherRequestStream="msg.content.whetherRequestStream"
36
+ @sseOtherInfo="sseOtherInfo"
37
+ @answerDocKnowledgeFn="answerDocKnowledgeFn"
38
+ :streamRequestUrl="msg.content.streamRequestUrl"
39
+ :msgId="msg.id"
40
+ :isHistory="isHistory">
41
+ </markDownText>
24
42
  </template>
25
43
  <template v-else>{{ msg.content.text }}</template>
26
44
  </div>
27
- <div v-if="msg.content.images && msg.content.images.length != 0" class="answer-kn-image-box">
28
- <img v-for="(imageItem, imageItemIndex) in msg.content.images"
29
- style="max-width: 230px;border-radius: 25px;margin-bottom: 15px" :src="imageItem.url"
30
- :key="imageItemIndex" alt @click="lookAttach(imageItem.url, imageItem, $event)" />
31
- </div>
45
+ <template v-if="isPC">
46
+ <div v-if="msg.content.images && msg.content.images.length != 0" class="answer-kn-image-box-pc">
47
+ <img v-for="(imageItem, imageItemIndex) in msg.content.images"
48
+ style="max-width: 230px;" :src="imageItem.url"
49
+ v-show="showImage || imageItemIndex < 2"
50
+ :key="imageItemIndex" alt @click="lookAttach(imageItem.url, imageItem, $event)" />
51
+ <div class="img-placeholder" v-if="msg.content.images.length > 2 && !showImage" @click="showImage = true">
52
+ +{{ msg.content.images.length - 2 }}
53
+ </div>
54
+ </div>
55
+ </template>
56
+ <template v-else>
57
+ <div v-if="msg.content.images && msg.content.images.length != 0" class="answer-kn-image-box-mobile">
58
+ <img v-for="(imageItem, imageItemIndex) in msg.content.images"
59
+ style="max-width: 230px;" :src="imageItem.url"
60
+ :key="imageItemIndex" alt @click="lookAttach(imageItem.url, imageItem, $event)" />
61
+ </div>
62
+ </template>
32
63
  </div>
33
64
  <template v-if="!isLiBang">
34
- <div class="ad-list" :class="msg.content.type == 0 ? 'ad-list-recognition' : ''">
65
+ <div class="ad-list" :class="msg.content.type == 0 || msg.content.type == 2 ? 'ad-list-recognition' : ''">
35
66
  <template v-if="msg.content.type == 1">
36
67
  <div v-for="(item, itemIndex) in msg.content.list" :key="itemIndex"
37
68
  :style="{ paddingBottom: itemIndex === msg.content.list.length - 1 ? 0 : '10px' }" class="ad-list-cell">
38
69
  <div class="alc-title">
39
70
  <div class="alc-box">
40
71
  <div class="alc-source-left">
41
- <span class="source-form">出自</span>
72
+ <span class="source-form">{{$t('dragonCommon.from')}}</span>
42
73
  <img class="alc-title-icon" height="24px" width="24px" :src="getIconSrc(item)" alt=""
43
74
  srcset="">
44
75
  <span class="alc-title-from">{{ item.from }}</span>
@@ -58,28 +89,28 @@
58
89
  {{ docSource[item.source] }}
59
90
  </div>
60
91
  <div v-show="item.url" class="alc-content-text">
61
- <span @click="lookAttach(item.url, item, $event)" class="aci-view">查看 ></span>
92
+ <span @click="lookAttach(item.url, item, $event)" class="aci-view">{{$t('dragonCommon.check')}} ></span>
62
93
  </div>
63
94
  </div>
64
95
  </div>
65
96
  <div class="alc-content" v-if="false">
66
97
  <div v-if="msg.content.type == 1" class="alc-content-text">
67
98
  {{ item.introduction }}
68
- <span @click="lookAttach(item.url, item, $event)" class="aci-view">查看原文 ></span>
99
+ <span @click="lookAttach(item.url, item, $event)" class="aci-view">{{$t('dragonCommon.viewOriginal')}} ></span>
69
100
  </div>
70
- <span v-if="!isPC" class="alc-title-updateTime">最后更新时间: {{ item.updateTime }}</span>
101
+ <span v-if="!isPC" class="alc-title-updateTime">{{$t('dragonCommon.lastUpdateTime')}}: {{ item.updateTime }}</span>
71
102
  <div v-if="false" class="alc-content-info">
72
103
  <div class="alcc-box">
73
- <span class="aci-owner">所有者: {{ item.owner }}</span>
74
- <span class="aci-enterprise">所属企业: {{ item.enterprise }}</span>
75
- <span class="aci-source">文件来源: {{ item.source }}</span>
104
+ <span class="aci-owner">{{$t('dragonCommon.owner')}}: {{ item.owner }}</span>
105
+ <span class="aci-enterprise">{{$t('dragonCommon.enterprise')}}: {{ item.enterprise }}</span>
106
+ <span class="aci-source">{{$t('dragonCommon.source')}}: {{ item.source }}</span>
76
107
  </div>
77
108
  </div>
78
109
  </div>
79
110
  </div>
80
111
  </template>
81
- <template v-if="msg.content.type == 0">
82
- <div v-for="(item, itemIndex) in msg.content.list" :key="itemIndex" class="ad-list-cell-recognition">
112
+ <template v-if="msg.content.type == 0 || msg.content.type == 2">
113
+ <div v-for="(item, itemIndex) in msg.content.list" :key="itemIndex" class="ad-list-cell-recognition" :id="item.knowledgeId + knowledgeIndex">
83
114
  <div class="alc-source-name" @click="lookAttach(item.url, item, $event)">
84
115
  <img class="alc-title-icon" height="18px" width="18px" :src="getIconSrc(item)" alt srcset />
85
116
  <span class="alc-title-from">{{ item.from }}</span>
@@ -90,7 +121,7 @@
90
121
  </div>
91
122
  </div>
92
123
  </template>
93
- <div class="ad-loadmore" v-if="loadMoreFlag" @click="lazyLoadKnowledegList">查看更多</div>
124
+ <div class="ad-loadmore" v-if="loadMoreFlag" @click="lazyLoadKnowledegList">{{$t('dragonCommon.viewMore')}}</div>
94
125
  </div>
95
126
  </template>
96
127
  <template v-if="isLiBang">
@@ -100,7 +131,7 @@
100
131
  <div class="libang_title">
101
132
  <div class="libang_box">
102
133
  <div class="libang_source_left">
103
- <span class="source-form">出自</span>
134
+ <span class="source-form">{{$t('dragonCommon.from')}}</span>
104
135
  <img class="libang_title_icon" height="24px" width="24px" :src="getIconSrc(item)" alt=""
105
136
  srcset="">
106
137
  <span class="libang_title_from">{{ item.from }}</span>
@@ -126,7 +157,7 @@
126
157
  </div>
127
158
  </div>
128
159
  <div v-show="item.url" class="libang_content_text">
129
- <span @click="lookAttach(item.url, item, $event)" class="aci-view">查看 ></span>
160
+ <span @click="lookAttach(item.url, item, $event)" class="aci-view">{{$t('dragonCommon.check')}} ></span>
130
161
  </div>
131
162
  </div>
132
163
  </div>
@@ -146,14 +177,14 @@
146
177
  </div> -->
147
178
  </div>
148
179
  </template>
149
- <template v-if="msg.content.type == 0">
180
+ <template v-if="msg.content.type == 0 || msg.content.type == 2">
150
181
  <div v-for="(item, itemIndex) in msg.content.list" :key="itemIndex"
151
- class="libang_list_cell_recognition" @click="lookAttach(item.url, item, $event)">
182
+ class="libang_list_cell_recognition" @click="lookAttach(item.url, item, $event)" :id="item.knowledgeId + knowledgeIndex">
152
183
  <div class="libang_list_cell_left" >
153
184
  <div class="libang_source_name" >
154
185
  <img class="libang_title_icon" height="18px" width="18px" :src="getIconSrc(item)" alt srcset />
155
186
  <span class="libang_title_from">{{ item.from }}</span>
156
- <div v-show="docSource[item.source]" v-if="false" class="upload_source">
187
+ <div v-show="docSource[item.source]" v-if="!isLiBang" class="upload_source">
157
188
  -{{ docSource[item.source] }}
158
189
  </div>
159
190
  </div>
@@ -165,7 +196,7 @@
165
196
  <i class="iconfont guoran-right" @click="lookAttach(item.url, item, $event)"></i>
166
197
  </div>
167
198
  </template>
168
- <div class="ad-loadmore" v-if="loadMoreFlag" @click="lazyLoadKnowledegList">查看更多</div>
199
+ <div class="ad-loadmore" v-if="loadMoreFlag" @click="lazyLoadKnowledegList">{{$t('dragonCommon.viewMore')}}</div>
169
200
  </div>
170
201
  </template>
171
202
 
@@ -199,15 +230,7 @@ export default {
199
230
  // CORP_LOCAL_FILE: '来源于企业知识库',
200
231
  // FEISHU: '来源于飞书-云文档'
201
232
  // },
202
- docSource: {
203
- LOCAL_FILE: "个人知识",
204
- CREATED_BY_ONESELF: "个人知识",
205
- WECHAT: "个人知识",
206
- AUTO_SYN_FROM_LOCAL_FILE: "个人知识",
207
- YUQUE: "企业知识",
208
- CORP_LOCAL_FILE: '企业知识',
209
- FEISHU: '企业知识'
210
- },
233
+ docSource: {},
211
234
  imageObj: {
212
235
  PDF: 'pdf1',
213
236
  pdf: 'pdf1',
@@ -275,10 +298,11 @@ export default {
275
298
  folderUrl: '',
276
299
  previewKnowledgeId: "",
277
300
  previewKnowledge: {},
278
- previewOssPath: ""
301
+ previewOssPath: "",
302
+ showImage: false
279
303
  }
280
304
  },
281
- props: ['msg', 'isAskLightning', 'isMessageRecord', "isApp", "isHasChat", "activeKnowledgeId", "isLiBang","isHistory"],
305
+ props: ['msg', 'isAskLightning', 'isMessageRecord', "isApp", "isHasChat", "activeKnowledgeId", "isLiBang","isHistory","knowledgeIndex"],
282
306
  beforeMounted () {
283
307
  },
284
308
  watch: {
@@ -298,15 +322,16 @@ export default {
298
322
  // }
299
323
  },
300
324
  created () {
301
- var system = {};
302
- system.pingtai = /(Win32|Win16|WinCE|Mac68K|MacIntel|MacIntel|MacPPC|Linux mips64)/i.test(navigator.platform);
303
- if (system.pingtai) {
304
- //电脑
305
- this.isPC = true;
306
- } else {
307
- //手机
308
- this.isPC = false;
309
- }
325
+ // var system = {};
326
+ // system.pingtai = /(Win32|Win16|WinCE|Mac68K|MacIntel|MacIntel|MacPPC|Linux mips64)/i.test(navigator.platform);
327
+ // if (system.pingtai) {
328
+ // //电脑
329
+ // this.isPC = true;
330
+ // } else {
331
+ // //手机
332
+ // this.isPC = false;
333
+ // }
334
+ this.isPC = !isMobile()
310
335
  // this.msg.content.list.forEach(element => {
311
336
  // console.log(this.imageObj[element.format],1111);
312
337
  // element.src = 'https://static.guoranbot.com/cdn-office-website/askbot_doc/' + this.imageObj[element.format] + '.png';
@@ -316,6 +341,16 @@ export default {
316
341
  // });
317
342
  },
318
343
  mounted () {
344
+ this.$i18n.locale = sessionStorage.getItem("systemLanguage") || 'cn';
345
+ this.docSource = {
346
+ LOCAL_FILE: this.$t('dragonCommon.personalknowledge'),
347
+ CREATED_BY_ONESELF: this.$t('dragonCommon.personalknowledge'),
348
+ WECHAT: this.$t('dragonCommon.personalknowledge'),
349
+ AUTO_SYN_FROM_LOCAL_FILE: this.$t('dragonCommon.personalknowledge'),
350
+ YUQUE: this.$t('dragonCommon.enterpriseknowledge'),
351
+ CORP_LOCAL_FILE: this.$t('dragonCommon.enterpriseknowledge'),
352
+ FEISHU: this.$t('dragonCommon.enterpriseknowledge'),
353
+ }
319
354
  console.log(this.msg.content, 'this.msg.content');
320
355
  // if(this.msg.content.type == 1) {
321
356
 
@@ -329,6 +364,24 @@ export default {
329
364
  }
330
365
  },
331
366
  methods: {
367
+ answerDocKnowledgeFn(){
368
+ console.log(
369
+ "answerDocKnowledgeFn 2"
370
+ );
371
+ this.$emit('answerDocKnowledgeFn');
372
+ },
373
+ // 知识类型消息 推荐、关联文档、图片
374
+ sseOtherInfo(msgId, eventId, data){
375
+ if (eventId === "matched") {
376
+ console.log("matched: ", this.msg.content.type);
377
+
378
+ if (JSON.parse(data.content).length > 0) {
379
+ this.$set(this.msg.content, "list", JSON.parse(data.content));
380
+ }
381
+ } else {
382
+ this.$emit("sseOtherInfo",msgId, eventId, data);
383
+ }
384
+ },
332
385
  getIconSrc (element) {
333
386
  if ((element.format === "txt" || element.format === "html") && element.source === "WECHAT") {
334
387
  return require("../assets/image/filtType/wechat.png")
@@ -356,6 +409,11 @@ export default {
356
409
  // } else {
357
410
  // this.$refs.previewPdf.drawer = false;
358
411
  // }
412
+ //该事件是为了打开新的弹框时关闭上一个弹框
413
+ window.parent.postMessage({
414
+ type: "close_drawer",
415
+ data:this.knowledgeIndex
416
+ }, "*");
359
417
  this.title = item.from || item.name
360
418
  this.folderName = item.folderName
361
419
  this.folderUrl = item.folderUrl
@@ -378,6 +436,7 @@ export default {
378
436
  } else {
379
437
  httpUrl = httpUrl += '?needEncrypt=false'
380
438
  }
439
+ this.$refs.previewPdf.getOssPath(url);
381
440
  this.$http.post(httpUrl, {
382
441
  "fileInOssPath": url
383
442
  }).then(res => {
@@ -399,7 +458,10 @@ export default {
399
458
  this.$refs.previewPdf.previewKnowledgeId = ""
400
459
  }
401
460
  this.$refs.previewPdf.fileType = type
402
- this.$refs.previewPdf.tagIds = item.tagIds
461
+ this.$refs.previewPdf.tagIds = item.tagIds;
462
+ if (item.tagIds && item.tagIds.length > 0){
463
+ this.$refs.previewPdf.getLocationInfo();
464
+ }
403
465
  this.$refs.previewPdf.isMessageRecord = this.isMessageRecord ? true : false;
404
466
  let index = url.indexOf("?");
405
467
  let newFileInOssPath = url;
@@ -412,7 +474,7 @@ export default {
412
474
  } else {
413
475
  this.$refs.previewPdf.fileName = '';
414
476
  }
415
- if (item.tagIds && item.tagIds.length != 0) {
477
+ if (item.tagIds && item.tagIds.length != 0 && this.$refs.previewPdf.newFileType !== 'PPT') {
416
478
  this.$refs.previewPdf.loading = false
417
479
  return
418
480
  }
@@ -421,7 +483,7 @@ export default {
421
483
  this.$refs.previewPdf.getBolb(item)
422
484
  }
423
485
  this.$refs.previewPdf.loadIframe(item)
424
- this.$refs.previewPdf.showSummary = true;
486
+ this.$refs.previewPdf.showSummary = false;
425
487
  })
426
488
  }
427
489
  })
@@ -561,8 +623,59 @@ export default {
561
623
  }
562
624
  }
563
625
 
564
- .answer-kn-image-box {
626
+ // .answer-kn-image-box {
627
+ // margin-bottom: 10px;
628
+ // }
629
+ .answer-kn-image-box-pc {
630
+ margin-bottom: 10px;
631
+ display: flex;
632
+ width: 100%;
633
+ overflow: hidden;
634
+ overflow-x: auto;
635
+ img {
636
+ width: 120px;
637
+ height: 120px;
638
+ border-radius: 5px;
639
+ object-fit: cover;
640
+ margin-right: 10px;
641
+ margin-bottom: 10px;
642
+ cursor: pointer;
643
+ flex: none;
644
+ }
645
+ .img-placeholder {
646
+ width: 120px;
647
+ height: 120px;
648
+ border-radius: 5px;
649
+ margin-right: 10px;
650
+ margin-bottom: 10px;
651
+ cursor: pointer;
652
+ border: 1px dashed #d9d9d9;
653
+ color: #366aff;
654
+ flex: none;
655
+ display: flex;
656
+ align-items: center;
657
+ justify-content: center;
658
+ font-size: 22px;
659
+ }
660
+ .img-placeholder:hover {
661
+ border: 1px dashed #366aff;
662
+ }
663
+ }
664
+ .answer-kn-image-box-mobile {
565
665
  margin-bottom: 10px;
666
+ display: flex;
667
+ width: 100%;
668
+ overflow: hidden;
669
+ overflow-x: auto;
670
+ img {
671
+ width: 35vw;
672
+ height: 35vw;
673
+ border-radius: 5px;
674
+ object-fit: cover;
675
+ margin-right: 10px;
676
+ margin-bottom: 10px;
677
+ flex: none;
678
+ }
566
679
  }
567
680
  }
568
681
 
@@ -46,7 +46,7 @@
46
46
  <answer-dissatisfaction :msg="answerDiss"></answer-dissatisfaction>
47
47
  <feed-back :feedBack="feedBack"></feed-back>
48
48
  <voice-compontent></voice-compontent> -->
49
- <ai-guide :aiGuide="ActionAiGuideObj"></ai-guide>
49
+ <!-- <ai-guide :aiGuide="ActionAiGuideObj"></ai-guide> -->
50
50
  <!-- <answer-voice :msg="answerVoiceObj"></answer-voice> -->
51
51
  <!-- <answer-voice :msg="answerVoiceObj"></answer-voice> -->
52
52
  <!-- <div v-for="(item,index) in processAction" :key="index">
@@ -122,8 +122,8 @@ export default {
122
122
  // TextMessage,
123
123
  // FeedBack,
124
124
  // VoiceCompontent,
125
- AiGuide,
126
- AnswerVoice,
125
+ // AiGuide,
126
+ // AnswerVoice,
127
127
  FormTemplate,
128
128
  // FormTemplate,
129
129
  // FileType,
@@ -213,7 +213,14 @@ export default {
213
213
  }
214
214
  },
215
215
  answerDocknowledge: {"actionCategory":null,"apiKey":null,"content":{"searchResult":null,"images":null,"llmBotPluginId":null,"srcContentId":null,"list":[{"owner":"15901107866","tagId":"67492d69c3fc616496d7708e","enterprise":null,"tagIds":["67492d69c3fc616496d7708e","67492d69c3fc616496d7708d"],"format":"pdf","srcContentId":"8ae8631d27d5fc9e0d6429c32ce02463","updateTime":"2024-11-29 10:56:41","avatar":"https://guoranopen-zjk.oss-cn-zhangjiakou.aliyuncs.com/ab0f90737c8b4f2d85ba2157e4473110/2024/10/22/15/29/2d00b3ee264f6b588bc39c87cd71ff86/zrx651dojth.jpeg","source":"LOCAL_FILE","srcContent":"\"\",,,,,,,,,,,,,,,, \"\",境内出差标准(人民币),,,,,,,,,,,,,,, \"\",,,,,,,,,,,,,,,, \"\",,职称,,住宿标准,,出差补贴,,,,,,,,,, \"\",,,,,,,,,,,出差补贴,,,,, \"\",,,(实报实销),,,,,,,,,,,,, \"\",职级,职称,,,,,,,,,,,,,, \"\",,甲类地,,,乙类地,,,丙类地,,,甲类,,,乙丙类,, \"\",,,,,,,,,,,,,,,, \"\",,,区,区,区,地区,地区,,,,,,,,, \"\",24-20,\"总裁/高级副总裁/副总裁/总经理/首 席技术专家/首席幕僚长/总裁资深特 别助理/总监/副总经理/资深技术专家 /专业总监\",无固定限额,无,,,,,,,,,,,, \"\",19-18,\"副总监/资深研究员/专业副总监/高级 经理/高级研究员/专业高级经理\",700,600,500,100/天,80/天,,,,,,,,, \"\",17,\"经理/副经理/专业经理/资深专员/研 究员/资深化学师/资深工程师/经理级 销售/资深销售\",500,400,350,,,,,,,,,,, \"\",16,\"高级主任/高级专员/高级销售/高级工 程师/主任/专员/销售专员/工程师\",400,300,250,,,,,,,,,,, \"\",15 以下,\"初级专员/初级销售专员/助理工程师/ 文员\",300,250,200,,,,,,,,,,, ","url":"https://guoranwisdom.oss-cn-zhangjiakou.aliyuncs.com/ab0f90737c8b4f2d85ba2157e4473110/2024/11/29/10/56/bb94d33df583b246fd77034eaafe52cd/753yywz8dh.pdf","knowledgeId":"67492d62ff865b253159dd5d","folderUrl":null,"reRankShowScore":"69.53","knowledgePartId":"6MnZdZMB5ZPhLd1ZZb9J","from":"立邦中国差旅管理办法2023.pdf","folderName":null,"introduction":"\"\",,,,,,,,,,,,,,,, \"\",境内出差标准(人民币),,,,,,,,,,,,,,, \"\",,,,,,,,,,,,,,,, \"\",,职称,,住宿标准,,出差补贴,,,,,,,,,, \"\",,,,,,,,,,,出差补贴,,,,, \"\",,,(实报实销),,,,,,,,,,,,, \"\",职级,职称,,,,,,,,,,,,,, \"\",,甲类地,,,乙类地,,,丙类地,,,甲类,,,乙丙类,, \"\",,,,,,,,,,,,,,,, \"\",,,区,区,区,地区,地区,,,,,,,,, \"\",24-20,\"总裁/高级副总裁/副总裁/总经理/首 席技术专家/首席幕僚长/总裁资深特 别助理/总监/副总经理/资深技术专家 /专业总监\",无固定限额,无,,,,,,,,,,,, \"\",19-18,\"副总监/资深研究员/专业副总监/高级 经理/高级研究员/专业高级经理\",700,600,500,100/天,80/天,,,,,,,,, \"\",17,\"经理/副经理/专业经理/资深专员/研 究员/资深化学师/资深工程师/经理级 销售/资深销售\",500,400,350,,,,,,,,,,, \"\",16,\"高级主任/高级专员/高级销售/高级工 程师/主任/专员/销售专员/工程师\",400,300,250,,,,,,,,,,, \"\",15 以下,\"初级专员/初级销售专员/助理工程师/ 文员\",300,250,200,,,,,,,,,,, ","previewImage":null}],"type":0,"srcContent":null,"whetherRequestStream":null,"knowledgeId":null,"actionType":"answer_doc_knowledge","async":null,"stream":null,"knowledgePartId":null,"recommendItems":["离境出差的标准是什么?","出差审批流程是怎样的?","差旅费报销标准有哪些?"],"text":"### 境内出差标准\n\n| 职级 | 职称 | 甲类地住宿标准 | 乙类地住宿标准 | 丙类地住宿标准 | 出差补贴 |\n| --- | --- | --- | --- | --- | --- |\n| 24-20 | 总裁/高级副总裁/副总裁/总经理/首席技术专家/首席幕僚长/总裁资深特别助理/总监/副总经理/资深技术专家/专业总监 | 无固定限额 | 无固定限额 | 无固定限额 | 无 |\n| 19-18 | 副总监/资深研究员/专业副总监/高级经理/高级研究员/专业高级经理 | 700 | 600 | 500 | 100/天 |\n| 17 | 经理/副经理/专业经理/资深专员/研究员/资深化学师/资深工程师/经理级销售/资深销售 | 500 | 400 | 350 | 无 |\n| 16 | 高级主任/高级专员/高级销售/高级工程师/主任/专员/销售专员/工程师 | 400 | 300 | 250 | 无 |\n| 15 以下 | 初级专员/初级销售专员/助理工程师/文员 | 300 | 250 | 200 | 无 |\n\n**备注**:\n- 甲类地区:指北京、上海、广州、深圳。\n- 乙类地区:地级以上城市。\n- 丙类地区:指甲、乙类地区以外的地区。","renderType":2,"streamRequestUrl":null},"id":null,"intentId":null,"msgId":"67492de6524fbe07a2190b90","nodeId":null,"recordId":24190,"type":"answer_doc_knowledge"},
216
-
216
+ answerDocknowledge4: {
217
+ "content":{"images":[
218
+ {"url":"https://guoranwisdom.oss-cn-zhangjiakou.aliyuncs.com/ab0f90737c8b4f2d85ba2157e4473110/2024/12/25/12/38/58/676b8b26643e014bc160fb76/image1.jpeg"},
219
+ {"url":"https://itsm.mengniu.cn/o/bk_itsm/api/misc/download_rich_file/?file_path=/data/app/code/USERRES/richText/56389331cd62b3c1a47e22d499cd565e"},
220
+ {"url":"https://guoranopen-zjk.oss-cn-zhangjiakou.aliyuncs.com/front-oss/31623ccfe9dd4957bbd59c5823878bbe/2025/01/07/17/39/3fccf81e21cbcfaf7c0e1a69a848b5c0/1eeb31f8-1d9b-4d70-8cfd-4750f48c95ee.png"},
221
+ {"url":"https://guoranwisdom.oss-cn-zhangjiakou.aliyuncs.com/ab0f90737c8b4f2d85ba2157e4473110/2024/12/25/12/38/58/676b8b26643e014bc160fb76/image1.jpeg"},
222
+ {"url":"https://guoranwisdom.oss-cn-zhangjiakou.aliyuncs.com/ab0f90737c8b4f2d85ba2157e4473110/2024/12/25/12/38/58/676b8b26643e014bc160fb76/image1.jpeg"}],
223
+ "list":[{"owner":"吴明岩","tagId":"676b8c634bd318749f3383df","tagIds":["676b8c634bd318749f3383df"],"format":"docx","srcContentId":"4709b61b79242a90a2a5d5cb9b63f815","updateTime":"2024-12-31 14:56:16","avatar":"https://guoranopen-zjk.oss-cn-zhangjiakou.aliyuncs.com/2022/06/09/07/14/2dbcf1fa-f461-47e8-8e5b-3875df9d7b36/dynamicImage.942908447673894217.cmp.png","source":"CORP_LOCAL_FILE","srcContent":"在人际交往中,我们都怀揣着真诚与善意,希望收获真挚的友情。然而,并非所有人都值得我们倾心相待、深交厚谊。 有些人在相处过程中,会不自觉地流露出轻视与不屑,他们的言行犹如一把把利刃,悄无声息地刺伤我们的心灵。 倘若你身边有人经常如此对待你,那你可要提高警惕,因为这样的人,恐怕并非真心挚友,不值得你深交。","url":"https://guoranwisdom.oss-cn-zhangjiakou.aliyuncs.com/ab0f90737c8b4f2d85ba2157e4473110/2024/12/25/12/33/38120169a2cea918ef08e35e9065c8fa/838120169a2cea91.docx","knowledgeId":"676b8b26643e014bc160fb76","reRankShowScore":"97.66","knowledgePartId":"lPWAG5QBvcIPGxbfPEOj","from":"经常这样对待你的人,其实就是在轻视你,看不起你,不值得深交","folderName":"1225测试(所有文件均重新学习)-勿删","introduction":"在人际交往中,我们都怀揣着真诚与善意,希望收获真挚的友情。然而,并非所有人都值得我们倾心相待、深交厚谊。 有些人在相处过程中,会不自觉地流露出轻视与不屑,他们的言行犹如一把把利刃,悄无声息地刺伤我们的心灵。 倘若你身边有人经常如此对待你,那你可要提高警惕,因为这样的人,恐怕并非真心挚友,不值得你深交。"}],"type":2,"whetherRequestStream":false,"actionType":"answer_doc_knowledge","stream":true,"text":"**在人际交往中,我们都怀揣着真诚与善意,希望收获真挚的友情。然而,并非所有人都值得我们倾心相待、深交厚谊。** 有些人在相处过程中,会不自觉地流露出轻视与不屑,他们的言行犹如一把把利刃,悄无声息地刺伤我们的心灵。倘若你身边有人经常如此对待你,那你可要提高警惕,因为这样的人,恐怕并非真心挚友,不值得你深交。","streamRequestUrl":"https://app.test.askbot.cn/dialog-api/dialog/stream/v2/678484ea6e6197579e9b861b"},"msgId":"678484e654b1d43f0f0ae87d","recordId":27079,"type":"answer_doc_knowledge"},
217
224
  ActionAiGuideObj: {
218
225
  // 智能引导
219
226
  type: "answer_intellect_guide",
@@ -10488,7 +10495,7 @@ export default {
10488
10495
  footerStyleValue: "果然大模型"
10489
10496
  },
10490
10497
  {
10491
- content: "尊敬的各位:<br/><br/>大家好!<br/><br/>很高兴地通知大家,我们的项目已经成功上线!<br/><br/>这是一个重要的里程碑,我们的团队在过去几个月中付出了艰苦的努力,最终实现了这一目标。我们应该感谢所有参与这个项目的人,他们的努力和投入使我们能够取得这一成就。<br/><br/>我们的项目上线后,将为我们的客户提供更好的服务,更多的功能,更快的响应时间,更高的可用性。<br/><br/>我们将继续努力,不断改进和完善我们的项目,以满足客户的需求。<br/><br/>再次感谢大家的支持!<br/><br/>谢谢!<br/><br/>此致<br/><br/>敬礼(--来源于ChatGPT)",
10498
+ content: "尊敬的各位:\n 大家好!<br/><br/>很高兴地通知大家,我们的项目已经成功上线!<br/><br/>这是一个重要的里程碑,我们的团队在过去几个月中付出了艰苦的努力,最终实现了这一目标。我们应该感谢所有参与这个项目的人,他们的努力和投入使我们能够取得这一成就。<br/><br/>我们的项目上线后,将为我们的客户提供更好的服务,更多的功能,更快的响应时间,更高的可用性。<br/><br/>我们将继续努力,不断改进和完善我们的项目,以满足客户的需求。<br/><br/>再次感谢大家的支持!<br/><br/>谢谢!<br/><br/>此致<br/><br/>敬礼(--来源于ChatGPT)",
10492
10499
  type: 'answer_text',
10493
10500
  id: '60df03aeeea6014311dc4285',
10494
10501
  intentId: 6064,
@@ -10511,7 +10518,7 @@ export default {
10511
10518
  }
10512
10519
  }
10513
10520
  ],
10514
- inLoading: true,
10521
+ inLoading: false,
10515
10522
  dataNote: 0,
10516
10523
  timer: null,
10517
10524
  finished: false,
@@ -10796,9 +10803,9 @@ export default {
10796
10803
  console.debug('this.dataNote', this.dataNote)
10797
10804
  }, 1000)
10798
10805
 
10799
- setTimeout(() => {
10800
- this.inLoading = true
10801
- }, 2000)
10806
+ // setTimeout(() => {
10807
+ // this.inLoading = true
10808
+ // }, 2000)
10802
10809
  setTimeout(() => {
10803
10810
  this.finished = true
10804
10811
  this.dataNote = 10
@@ -17,7 +17,7 @@
17
17
  p-id="74841"
18
18
  />
19
19
  </svg>
20
- 上传图片或附件
20
+ {{$t('dragonCommon.uploadImgFile')}}
21
21
  </button>
22
22
  </div>
23
23
  <div
@@ -92,7 +92,7 @@
92
92
  <!-- <span @click="changeActivePage" class="switch-page-btn"
93
93
  >换一批</span
94
94
  > -->
95
- <span @click="showMore" class="switch-page-btn">查看更多</span>
95
+ <span @click="showMore" class="switch-page-btn">{{$t('dragonCommon.viewMore')}}</span>
96
96
  </div>
97
97
  </div>
98
98
  </template>
@@ -112,6 +112,7 @@ export default {
112
112
  },
113
113
  props: ["msg"],
114
114
  mounted() {
115
+ this.$i18n.locale = sessionStorage.getItem("systemLanguage") || 'cn';
115
116
  console.log(this.msg, "msg");
116
117
  // 关键词推荐 前端分页
117
118
  this.msg.content.questionList = this.msg.content.questionList.slice(0, 20);
@@ -17,7 +17,7 @@
17
17
  )
18
18
  "
19
19
  >
20
- 满意
20
+ {{$t('dragonCommon.satisfaction')}}
21
21
  </div>
22
22
  <div
23
23
  class="statisfaction-item"
@@ -32,7 +32,7 @@
32
32
  )
33
33
  "
34
34
  >
35
- 不满意
35
+ {{$t('dragonCommon.unsatisfied')}}
36
36
  </div>
37
37
  </div>
38
38
 
@@ -4,16 +4,22 @@
4
4
  v-if="msg.content.description && !msg.content.isKnowledgeSummary"></p>
5
5
  <div class="bottom-link" v-if="msg.content.description && !msg.content.isKnowledgeSummary"></div>
6
6
  <div :class="['options-list', msg.content.isKnowledgeSummary ? 'isKnowledgeSummary' : '']">
7
- <div v-if="msg.content.isKnowledgeSummary" class="tips">AI为您推荐了以下内容</div>
7
+ <div v-if="msg.content.isKnowledgeSummary" class="tips">{{$t('dragonCommon.AIrecommends')}}</div>
8
8
  <div v-for="(option, index) in showOptions" class="options-item"
9
9
  :class="index !== msg.content.options.length - 1 ? 'recommend-item' : 'last-item'" :key="msg.nodeId + '_' + index"
10
10
  @click="radioClick(msg, option, index)">
11
- <span> {{ getFilteredName(option.name) }}</span>
11
+ <!-- <el-tooltip :disabled="!isMobile" class="item" effect="dark" :content="$t('dragonCommon.clickme')" placement="top">
12
+ <span class="options-item-name"> {{ getFilteredName(option.name) }}</span>
13
+ </el-tooltip> -->
14
+ <div class="tooltip-wrapper">
15
+ <span class="tooltip-text options-item-name"> {{ getFilteredName(option.name) }}</span>
16
+ <span v-if="!isMobile" class="tooltip-content">{{$t('dragonCommon.clickme')}}</span>
17
+ </div>
12
18
  <i class="arsenal_icon arsenalangle-right-solid"></i>
13
19
  </div>
14
20
  </div>
15
21
  <div v-if="showPage" class="switch-page">
16
- <span @click="changeActivePage" class="switch-page-btn">换一批</span>
22
+ <span @click="changeActivePage" class="switch-page-btn">{{$t('dragonCommon.refresh')}}</span>
17
23
  <!-- <span @click="showMore" class="switch-page-btn">查看更多</span> -->
18
24
  </div>
19
25
  </div>
@@ -34,6 +40,8 @@ export default {
34
40
  },
35
41
  props: ['msg'],
36
42
  mounted() {
43
+ console.log("askbot-dragon: systemLanguage", sessionStorage.getItem("systemLanguage"));
44
+ this.$i18n.locale = sessionStorage.getItem("systemLanguage") || 'cn';
37
45
  console.log(this.msg, 'msg');
38
46
  // 关键词推荐 前端分页
39
47
  if ((this.msg.id == "recdNodeId" || this.msg.content.groupVisible) && this.msg.content.options.length > this.pageSize) {
@@ -100,7 +108,49 @@ export default {
100
108
 
101
109
  }
102
110
  </script>
103
-
111
+ <style lang="less">
112
+ /* 包裹元素,相对定位,用于定位提示框 */
113
+ .tooltip-wrapper {
114
+ position: relative;
115
+ display: inline-block;
116
+ }
117
+ /* 实际要显示的文本内容 */
118
+ /* 提示框样式 */
119
+ .tooltip-content {
120
+ visibility: hidden;
121
+ background-color: #333;
122
+ color: white;
123
+ text-align: center;
124
+ border-radius: 6px;
125
+ padding: 5px 10px;
126
+ position: absolute;
127
+ z-index: 1;
128
+ bottom: 100%;
129
+ left: 50%;
130
+ transform: translateX(-50%);
131
+ white-space: nowrap;
132
+ opacity: 0;
133
+ transition: opacity 0.3s;
134
+ }
135
+ /* 提示框下方的小三角样式(使用伪元素实现) */
136
+ .tooltip-content::after {
137
+ content: "";
138
+ position: absolute;
139
+ top: 100%;
140
+ left: 50%;
141
+ margin-left: -5px;
142
+ border-width: 5px;
143
+ border-style: solid;
144
+ border-color: #333 transparent transparent transparent;
145
+ }
146
+ /* 鼠标悬浮在包裹元素上时,显示提示框 */
147
+ .tooltip-wrapper:hover{
148
+ .tooltip-content {
149
+ visibility: visible !important;
150
+ opacity: 0.8;
151
+ }
152
+ }
153
+ </style>
104
154
  <style scoped lang="less">
105
155
  #answer-radio {
106
156
  .switch-page {
@@ -150,8 +200,13 @@ export default {
150
200
  align-items: center;
151
201
  justify-content: space-between;
152
202
 
203
+ .options-item-name {
204
+ flex: auto;
205
+ }
153
206
 
154
207
  i {
208
+ width: 16px;
209
+ flex: none;
155
210
  padding-left: 10px;
156
211
  }
157
212
 
@@ -2,7 +2,7 @@
2
2
  <div class="asset">
3
3
  <div class="asset-details">
4
4
  <section class="details-title">
5
- <p>您正在咨询</p>
5
+ <p>{{$t('dragonCommon.youareconsulting')}}</p>
6
6
  <span @click="rotateClick" class="rotate">
7
7
  <i class="arsenal_icon arsenalangle-up-solid"></i>
8
8
  </span>