askbot-dragon 1.7.26-beta → 1.7.28-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -2
- package/src/assets/js/AliyunlssUtil.js +32 -9
- package/src/components/AnswerDocknowledge.vue +101 -93
- package/src/components/ConversationContainer.vue +6 -17
- package/src/components/MyEditor.vue +1 -10
- package/src/components/askVideo.vue +2 -2
- package/src/components/formTemplate.vue +4 -14
- package/src/components/imgView.vue +32 -0
- package/src/components/intelligentSummary.vue +14 -12
- package/src/components/markDownText.vue +164 -0
- package/src/components/pdfPosition.vue +66 -58
- package/src/components/previewPdf.vue +16 -21
- package/src/components/utils/AliyunIssUtil.js +33 -12
- package/src/components/utils/ckeditor.js +59 -48
- package/src/locales/cn.json +26 -0
- package/src/locales/en.json +26 -0
- package/src/main.js +16 -0
- package/src/components/QwFeedback.vue +0 -301
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "askbot-dragon",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.28-beta",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"serve": "vue-cli-service serve",
|
|
6
6
|
"build": "vue-cli-service build",
|
|
@@ -28,10 +28,12 @@
|
|
|
28
28
|
"babel-eslint": "^10.1.0",
|
|
29
29
|
"element-ui": "^2.15.10",
|
|
30
30
|
"eslint": "^6.7.2",
|
|
31
|
+
"vue-markdown": "^2.2.4",
|
|
31
32
|
"eslint-plugin-vue": "^6.2.2",
|
|
32
33
|
"less": "^3.12.2",
|
|
33
34
|
"less-loader": "^7.0.2",
|
|
34
|
-
"vue-template-compiler": "^2.6.11"
|
|
35
|
+
"vue-template-compiler": "^2.6.11",
|
|
36
|
+
"vue-i18n": "^8.26.4"
|
|
35
37
|
},
|
|
36
38
|
"eslintConfig": {
|
|
37
39
|
"root": true,
|
|
@@ -4,7 +4,27 @@
|
|
|
4
4
|
|
|
5
5
|
const OSS = window.OSS
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const getPrivateOssConfig = () =>{
|
|
8
|
+
let mainSource = sessionStorage.getItem('_mainSource') ? sessionStorage.getItem('_mainSource') : "askbot";
|
|
9
|
+
switch (mainSource) {
|
|
10
|
+
case "askbot":
|
|
11
|
+
return {
|
|
12
|
+
region: "oss-cn-zhangjiakou",
|
|
13
|
+
accessKeyId: "LTAI4G3QtdEdwkEbihBngAsK",
|
|
14
|
+
accessKeySecret: "OwgdVfc5PeCkIgqIdug660xmiSPchn",
|
|
15
|
+
bucket: "guoranopen-zjk",
|
|
16
|
+
}
|
|
17
|
+
case "lishi":
|
|
18
|
+
return {
|
|
19
|
+
region: "oss-ap-southeast-1",
|
|
20
|
+
accessKeyId: "LTAI5tAusPLDNJJwkvUbqi2T",
|
|
21
|
+
accessKeySecret: "xqPVaunOIbvTe3g9qsXal2IZO6RftK",
|
|
22
|
+
bucket: "askbotopen-ls",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const ossConfig = {
|
|
8
28
|
region: "oss-cn-zhangjiakou",
|
|
9
29
|
//云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用STS方式来进行API访问
|
|
10
30
|
accessKeyId: "LTAI4G3QtdEdwkEbihBngAsK",
|
|
@@ -13,6 +33,8 @@ const ossConfig={
|
|
|
13
33
|
bucket: "guoranopen-zjk",
|
|
14
34
|
};
|
|
15
35
|
|
|
36
|
+
|
|
37
|
+
|
|
16
38
|
let IDX = 256, HEX = [], SIZE = 256, BUFFER;
|
|
17
39
|
while (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);
|
|
18
40
|
let mainId = sessionStorage.getItem('_mainId') ? sessionStorage.getItem('_mainId') : "";
|
|
@@ -48,8 +70,8 @@ function pathGenerate(filename) {
|
|
|
48
70
|
}
|
|
49
71
|
|
|
50
72
|
|
|
51
|
-
async function upload(
|
|
52
|
-
let ossClient = new OSS(
|
|
73
|
+
async function upload(data) {
|
|
74
|
+
let ossClient = new OSS(getPrivateOssConfig());
|
|
53
75
|
// object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
|
|
54
76
|
let objectKey = pathGenerate(data.name);
|
|
55
77
|
let result = await ossClient.put(objectKey, data);
|
|
@@ -57,8 +79,8 @@ async function upload(ossConfig, data) {
|
|
|
57
79
|
return result;
|
|
58
80
|
}
|
|
59
81
|
|
|
60
|
-
async function multipartUpload(
|
|
61
|
-
let ossClient = new OSS(
|
|
82
|
+
async function multipartUpload(data, callback,extCallback) {
|
|
83
|
+
let ossClient = new OSS(getPrivateOssConfig());
|
|
62
84
|
// object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
|
|
63
85
|
let objectKey = pathGenerate(data.name);
|
|
64
86
|
let res = await ossClient.multipartUpload(objectKey, data, {
|
|
@@ -73,7 +95,8 @@ async function multipartUpload(ossConfig, data, callback,extCallback) {
|
|
|
73
95
|
return res;
|
|
74
96
|
}
|
|
75
97
|
|
|
76
|
-
function ossFileUrl(
|
|
98
|
+
function ossFileUrl(path, cname) {
|
|
99
|
+
let ossConfig = getPrivateOssConfig()
|
|
77
100
|
if (cname == null) {
|
|
78
101
|
return '//' + ossConfig.bucket + '.' + ossConfig.region + '.aliyuncs.com/' + path;
|
|
79
102
|
} else {
|
|
@@ -81,8 +104,8 @@ function ossFileUrl(ossConfig, path, cname) {
|
|
|
81
104
|
}
|
|
82
105
|
}
|
|
83
106
|
|
|
84
|
-
function uploadImageByBase64(
|
|
85
|
-
let ossClient = new OSS(
|
|
107
|
+
function uploadImageByBase64(blob) {
|
|
108
|
+
let ossClient = new OSS(getPrivateOssConfig());
|
|
86
109
|
|
|
87
110
|
// object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形 式,实现将文件上传至当前Bucket或Bucket下的指定目录。
|
|
88
111
|
let objectKey = pathGenerate(new Date().getTime());
|
|
@@ -91,4 +114,4 @@ function uploadImageByBase64(ossConfig,blob) {
|
|
|
91
114
|
return result;
|
|
92
115
|
}
|
|
93
116
|
|
|
94
|
-
export {upload, multipartUpload, ossFileUrl,uploadImageByBase64,ossConfig}
|
|
117
|
+
export {upload, multipartUpload, ossFileUrl,uploadImageByBase64,ossConfig, getPrivateOssConfig}
|
|
@@ -16,18 +16,22 @@
|
|
|
16
16
|
<template v-if="msg.content.renderType == 1">
|
|
17
17
|
<p v-html="msg.content.text"></p>
|
|
18
18
|
</template>
|
|
19
|
+
<template v-if="msg.content.renderType == 2">
|
|
20
|
+
<markDownText :chainValues="msg.content.text" :isHistory="isHistory"></markDownText>
|
|
21
|
+
</template>
|
|
19
22
|
<template v-else>{{ msg.content.text }}</template>
|
|
20
23
|
</div>
|
|
21
24
|
<div v-if="msg.content.images && msg.content.images.length != 0" class="answer-kn-image-box">
|
|
22
25
|
<img v-for="(imageItem, imageItemIndex) in msg.content.images"
|
|
23
|
-
style="max-width: 230px;border-radius:
|
|
26
|
+
style="max-width: 230px;border-radius: 25px;margin-bottom: 15px" :src="imageItem.url"
|
|
24
27
|
:key="imageItemIndex" alt @click="lookAttach(imageItem.url, imageItem, $event)" />
|
|
25
28
|
</div>
|
|
26
29
|
</div>
|
|
27
30
|
<template v-if="!isLiBang">
|
|
28
31
|
<div class="ad-list" :class="msg.content.type == 0 ? 'ad-list-recognition' : ''">
|
|
29
32
|
<template v-if="msg.content.type == 1">
|
|
30
|
-
<div v-for="(item, itemIndex) in msg.content.list" :key="itemIndex"
|
|
33
|
+
<div v-for="(item, itemIndex) in msg.content.list" :key="itemIndex"
|
|
34
|
+
:style="{ paddingBottom: itemIndex === msg.content.list.length - 1 ? 0 : '10px' }" class="ad-list-cell">
|
|
31
35
|
<div class="alc-title">
|
|
32
36
|
<div class="alc-box">
|
|
33
37
|
<div class="alc-source-left">
|
|
@@ -174,9 +178,10 @@
|
|
|
174
178
|
/* eslint-disable */
|
|
175
179
|
import previewPdf from "./previewPdf";
|
|
176
180
|
import { isMobile } from "../assets/js/common";
|
|
181
|
+
import markDownText from "./markDownText.vue";
|
|
177
182
|
export default {
|
|
178
183
|
name: "answerDocknowledge",
|
|
179
|
-
components: { previewPdf },
|
|
184
|
+
components: { previewPdf, markDownText },
|
|
180
185
|
data () {
|
|
181
186
|
return {
|
|
182
187
|
isPC: true,
|
|
@@ -263,14 +268,14 @@ export default {
|
|
|
263
268
|
allKnowledgeList: [],
|
|
264
269
|
loadMoreFlag: false,
|
|
265
270
|
title: '',
|
|
266
|
-
folderName:'',
|
|
267
|
-
folderUrl:'',
|
|
271
|
+
folderName: '',
|
|
272
|
+
folderUrl: '',
|
|
268
273
|
previewKnowledgeId: "",
|
|
269
274
|
previewKnowledge: {},
|
|
270
275
|
previewOssPath: ""
|
|
271
276
|
}
|
|
272
277
|
},
|
|
273
|
-
props: ['msg', 'isAskLightning', 'isMessageRecord', "isApp", "isHasChat", "activeKnowledgeId", "isLiBang"],
|
|
278
|
+
props: ['msg', 'isAskLightning', 'isMessageRecord', "isApp", "isHasChat", "activeKnowledgeId", "isLiBang","isHistory"],
|
|
274
279
|
beforeMounted () {
|
|
275
280
|
},
|
|
276
281
|
watch: {
|
|
@@ -332,78 +337,78 @@ export default {
|
|
|
332
337
|
//预览图片
|
|
333
338
|
lookAttach (url, item, event) {
|
|
334
339
|
// console.log(item.knowledgeId);
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
340
|
+
// this.$http.get("/knowledge-api/internal/knowledgeBaseStructure/" + "642ffbccde420e2772f7787b")
|
|
341
|
+
// debugger
|
|
342
|
+
event.preventDefault();
|
|
343
|
+
if (this.isAskLightning == 1 && !this.isApp) {
|
|
344
|
+
window.parent.postMessage({
|
|
345
|
+
data: "bot_preview",
|
|
346
|
+
item: JSON.stringify(item),
|
|
347
|
+
url: url
|
|
348
|
+
}, "*");
|
|
349
|
+
} else {
|
|
350
|
+
// if (isMobile()) {
|
|
351
|
+
// this.$refs.previewPdf.drawer = true;
|
|
352
|
+
// this.$refs.previewPdf.previewShowPopup = false;
|
|
353
|
+
// } else {
|
|
354
|
+
// this.$refs.previewPdf.drawer = false;
|
|
355
|
+
// }
|
|
356
|
+
this.title = item.from || item.name
|
|
357
|
+
this.folderName = item.folderName
|
|
353
358
|
this.folderUrl = item.folderUrl
|
|
354
359
|
this.previewKnowledge = item;
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
} else {
|
|
366
|
-
type = this.fileType(url)
|
|
367
|
-
}
|
|
368
|
-
if (type === '' || type === 'OTHER') {
|
|
369
|
-
httpUrl = httpUrl += '?needEncrypt=true'
|
|
370
|
-
} else {
|
|
371
|
-
httpUrl = httpUrl += '?needEncrypt=false'
|
|
372
|
-
}
|
|
373
|
-
this.$http.post(httpUrl, {
|
|
374
|
-
"fileInOssPath":url
|
|
375
|
-
}).then(res =>{
|
|
376
|
-
if(res.data.code == '0') {
|
|
377
|
-
this.previewHref = res.data.data;
|
|
378
|
-
this.sourceFileType = url.substring(url.lastIndexOf('.'))
|
|
379
|
-
let isOhmPc = sessionStorage.getItem('isOhmPc')
|
|
380
|
-
if (isMobile() || isOhmPc == 'true'){
|
|
381
|
-
this.$refs.previewPdf.drawer = true;
|
|
382
|
-
this.$refs.previewPdf.previewShowPopup = true;
|
|
383
|
-
} else {
|
|
384
|
-
this.$refs.previewPdf.previewShowPopup = false;
|
|
385
|
-
this.$refs.previewPdf.drawer = true;
|
|
386
|
-
}
|
|
387
|
-
//聊一聊按钮的选中状态
|
|
388
|
-
if (this.activeKnowledgeId == item.knowledgeId){
|
|
389
|
-
this.$refs.previewPdf.previewKnowledgeId = this.activeKnowledgeId
|
|
360
|
+
this.previewKnowledgeId = item.knowledgeId
|
|
361
|
+
this.$refs.previewPdf.previewShowPopup = false;
|
|
362
|
+
this.$refs.previewPdf.drawer = false;
|
|
363
|
+
this.previewOssPath = url;
|
|
364
|
+
let index = url.lastIndexOf('?')
|
|
365
|
+
let type = ''
|
|
366
|
+
let httpUrl = '/knowledge-api/knowledge/getTemporaryCertificate'
|
|
367
|
+
if (index !== -1) {
|
|
368
|
+
url = url.substring(0, index)
|
|
369
|
+
type = this.fileType(url)
|
|
390
370
|
} else {
|
|
391
|
-
|
|
371
|
+
type = this.fileType(url)
|
|
392
372
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
this.$refs.previewPdf.isMessageRecord = this.isMessageRecord ? true : false ;
|
|
396
|
-
let index = url.indexOf("?");
|
|
397
|
-
let newFileInOssPath = url;
|
|
398
|
-
if (index !== -1){
|
|
399
|
-
newFileInOssPath = url.substring(0, url.indexOf("?"))
|
|
400
|
-
}
|
|
401
|
-
let fileName = newFileInOssPath.substring(newFileInOssPath.lastIndexOf('.'))
|
|
402
|
-
if (fileName === '.doc' || fileName === '.docx' || fileName === '.txt'|| fileName === '.html'){
|
|
403
|
-
this.$refs.previewPdf.fileName = fileName;
|
|
373
|
+
if (type === '' || type === 'OTHER' || type == 'IMAGE') {
|
|
374
|
+
httpUrl = httpUrl += '?needEncrypt=true'
|
|
404
375
|
} else {
|
|
405
|
-
|
|
376
|
+
httpUrl = httpUrl += '?needEncrypt=false'
|
|
406
377
|
}
|
|
378
|
+
this.$http.post(httpUrl, {
|
|
379
|
+
"fileInOssPath": url
|
|
380
|
+
}).then(res => {
|
|
381
|
+
if (res.data.code == '0') {
|
|
382
|
+
this.previewHref = res.data.data;
|
|
383
|
+
this.sourceFileType = url.substring(url.lastIndexOf('.'))
|
|
384
|
+
let isOhmPc = sessionStorage.getItem('isOhmPc')
|
|
385
|
+
if (isMobile() || isOhmPc == 'true') {
|
|
386
|
+
this.$refs.previewPdf.drawer = true;
|
|
387
|
+
this.$refs.previewPdf.previewShowPopup = true;
|
|
388
|
+
} else {
|
|
389
|
+
this.$refs.previewPdf.previewShowPopup = false;
|
|
390
|
+
this.$refs.previewPdf.drawer = true;
|
|
391
|
+
}
|
|
392
|
+
//聊一聊按钮的选中状态
|
|
393
|
+
if (this.activeKnowledgeId == item.knowledgeId) {
|
|
394
|
+
this.$refs.previewPdf.previewKnowledgeId = this.activeKnowledgeId
|
|
395
|
+
} else {
|
|
396
|
+
this.$refs.previewPdf.previewKnowledgeId = ""
|
|
397
|
+
}
|
|
398
|
+
this.$refs.previewPdf.fileType = type
|
|
399
|
+
this.$refs.previewPdf.tagIds = item.tagIds
|
|
400
|
+
this.$refs.previewPdf.isMessageRecord = this.isMessageRecord ? true : false;
|
|
401
|
+
let index = url.indexOf("?");
|
|
402
|
+
let newFileInOssPath = url;
|
|
403
|
+
if (index !== -1) {
|
|
404
|
+
newFileInOssPath = url.substring(0, url.indexOf("?"))
|
|
405
|
+
}
|
|
406
|
+
let fileName = newFileInOssPath.substring(newFileInOssPath.lastIndexOf('.'))
|
|
407
|
+
if (fileName === '.doc' || fileName === '.docx' || fileName === '.txt' || fileName === '.html') {
|
|
408
|
+
this.$refs.previewPdf.fileName = fileName;
|
|
409
|
+
} else {
|
|
410
|
+
this.$refs.previewPdf.fileName = '';
|
|
411
|
+
}
|
|
407
412
|
if (item.tagIds && item.tagIds.length != 0) {
|
|
408
413
|
this.$refs.previewPdf.loading = false
|
|
409
414
|
return
|
|
@@ -431,6 +436,8 @@ export default {
|
|
|
431
436
|
return 'VIDEO'
|
|
432
437
|
} else if (fileType === '.html') {
|
|
433
438
|
return 'HTML'
|
|
439
|
+
} else if (fileType === '.png' || fileType === '.jpg' || fileType === '.jpeg') {
|
|
440
|
+
return 'IMAGE'
|
|
434
441
|
} else {
|
|
435
442
|
return 'OTHER'
|
|
436
443
|
}
|
|
@@ -491,13 +498,13 @@ export default {
|
|
|
491
498
|
recommendQues (item, knowledgeId) {
|
|
492
499
|
this.$emit('recommendQues', item, knowledgeId)
|
|
493
500
|
},
|
|
494
|
-
clickFloder(item) {
|
|
501
|
+
clickFloder (item) {
|
|
495
502
|
this.$emit('clickFloder', item)
|
|
496
503
|
},
|
|
497
|
-
previewClickFloder() {
|
|
504
|
+
previewClickFloder () {
|
|
498
505
|
let item = null
|
|
499
506
|
this.msg.content.list.forEach(element => {
|
|
500
|
-
if(element.knowledgeId == this.previewKnowledgeId) {
|
|
507
|
+
if (element.knowledgeId == this.previewKnowledgeId) {
|
|
501
508
|
item = element
|
|
502
509
|
}
|
|
503
510
|
});
|
|
@@ -641,24 +648,25 @@ export default {
|
|
|
641
648
|
|
|
642
649
|
.alc-box-introduction-previewImage {
|
|
643
650
|
width: 100%;
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
651
|
+
display: block;
|
|
652
|
+
overflow: hidden;
|
|
653
|
+
text-overflow: ellipsis;
|
|
654
|
+
display: -webkit-box;
|
|
655
|
+
-webkit-line-clamp: 3;
|
|
656
|
+
-webkit-box-orient: vertical;
|
|
657
|
+
margin-top: 10px;
|
|
658
|
+
color: #616161;
|
|
659
|
+
// font-size: 12px;
|
|
660
|
+
line-height: 24px;
|
|
661
|
+
text-align: left;
|
|
662
|
+
|
|
663
|
+
img {
|
|
664
|
+
max-width: 300px;
|
|
665
|
+
width: 100%;
|
|
666
|
+
max-height: 150px;
|
|
667
|
+
margin: 10px;
|
|
668
|
+
cursor: pointer;
|
|
669
|
+
}
|
|
662
670
|
}
|
|
663
671
|
|
|
664
672
|
.alc-updateTime {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
<!-- 消息记录容器 -->
|
|
2
2
|
<template>
|
|
3
3
|
<div id="conversation">
|
|
4
|
-
<qw-feedback :msg="qwFeedbackObj"></qw-feedback>
|
|
5
4
|
<div v-for="(item, index) in processAction" :key="index">
|
|
6
5
|
<association-intention :msg="item" :msgType="item.type" :isOpen="isOpen"></association-intention>
|
|
7
6
|
</div>
|
|
@@ -38,7 +37,7 @@
|
|
|
38
37
|
</div> -->
|
|
39
38
|
|
|
40
39
|
<!-- <text-message :text="text" @submitClick="submitClick"></text-message> -->
|
|
41
|
-
<answer-docknowledge :isAskLightning="2" :msg="answerDocknowledge" :isLiBang="false"></answer-docknowledge>
|
|
40
|
+
<answer-docknowledge :isAskLightning="2" :isHasChat="true" :msg="answerDocknowledge" :isLiBang="false"></answer-docknowledge>
|
|
42
41
|
<welcomeSuggest :msg="welcomeSuggest"></welcomeSuggest>
|
|
43
42
|
<!-- <voice-component @closeVoice="closeVoice">
|
|
44
43
|
<div slot="voiceTip">
|
|
@@ -122,7 +121,6 @@ import AnswerDocknowledge from "./AnswerDocknowledge.vue";
|
|
|
122
121
|
import WelcomeKnowledgeFile from "./welcomeKnowledgeFile";
|
|
123
122
|
import WelcomeLlmCard from "./welcomeLlmCard";
|
|
124
123
|
import welcomeSuggest from "./welcomeSuggest"
|
|
125
|
-
import QwFeedback from './QwFeedback';
|
|
126
124
|
export default {
|
|
127
125
|
name: 'ConversationContainer',
|
|
128
126
|
components: {
|
|
@@ -152,8 +150,7 @@ export default {
|
|
|
152
150
|
// ChatContent,
|
|
153
151
|
AnswerDocknowledge,
|
|
154
152
|
MyEditor,
|
|
155
|
-
welcomeSuggest
|
|
156
|
-
QwFeedback
|
|
153
|
+
welcomeSuggest
|
|
157
154
|
},
|
|
158
155
|
props: {
|
|
159
156
|
messages: Array
|
|
@@ -243,7 +240,7 @@ export default {
|
|
|
243
240
|
"content": {
|
|
244
241
|
"images": [{ url: 'https://static.guoranbot.com/images/knowledge/e0f6898c6b0d47fa98e8f71ceab1bde8/安全标志--禁止标志.png' }],
|
|
245
242
|
"actionType": "answer_doc_knowledge",
|
|
246
|
-
"text": "
|
|
243
|
+
"text": "**票据管理规定**\n\n### 车票报销\n- **注意事项**:\n - 车票需注意日期与行程相符。\n - 如所附车票没有标注起止地点的,需自行注明。\n - 非同一次乘车出现票号相连的,不予报销。\n\n### 不予报销的票据\n- **国内白条及非财政部门监制的收据**:一律不予报销。\n- **预存性质的票据**:如预存话费、预存公交车费、购物卡、油卡等,原则上不予报销。\n - 确有客观需求并经部门负责人、财务负责人事先同意的,预存时需获取预付款增值税普通发票。\n - 后续每次实际消费时需取得注明预付卡卡号的消费小票,并在消费完预付卡内余额后及时进行一次性报销。\n - 无法取得消费小票的,请及时与财务同事沟通与确认解决方案。\n\n### 发票要求\n- **字迹不清或压线错格**:应重新开票。\n- **无法取得发票的费用**:公司不予报销,不允许用其他发票替代报销。\n\n### 报销单整理\n- 报销单影像审批完成进入核票流程后,报销人应将该张报销单的票据按照时间顺序分类整理,平铺、整齐的粘贴在A4纸上,票据与票据之间不能重叠遮挡,与报销单一同交到财务部。\n- 驻外人员邮寄回公司本部门的内勤人员,由部门内勤人员代为转交至财务部。\n- 财务收到单据后在汇联易系统中进行核票,纸质票据影像必须与实物一致,符合标准的单据完成审批流程后,进入待付款流程。\n\n### 出差报销\n- 员工出差必须先填写出差申请单,经审批后才能出行。\n- 若有紧急出差的情况,应填写出差申请单后,联系上级领导人进行加急审批。\n- 未填出差申请单,自行购票出行,公司有权不予报销。",
|
|
247
244
|
"list": [
|
|
248
245
|
{
|
|
249
246
|
"owner": null,
|
|
@@ -322,8 +319,9 @@ export default {
|
|
|
322
319
|
"previewImage": "https://askbot-pdf-all.oss-cn-zhangjiakou.aliyuncs.com/31623ccfe9dd4957bbd59c5823878bbe/2023/12/27/03/39/08/658b9c477cf604285f7cb81d/pdf-image-1913302477976388839.png"
|
|
323
320
|
}
|
|
324
321
|
],
|
|
325
|
-
"renderType":
|
|
326
|
-
"type": 1
|
|
322
|
+
"renderType": 2,
|
|
323
|
+
"type": 1,
|
|
324
|
+
"isHistory": true
|
|
327
325
|
},
|
|
328
326
|
"type": "answer_doc_knowledge"
|
|
329
327
|
},
|
|
@@ -10663,15 +10661,6 @@ export default {
|
|
|
10663
10661
|
}
|
|
10664
10662
|
},
|
|
10665
10663
|
answerRadios: { "content": { "options": [{ "scope": "KNOWLEDGE", "name": "本文提供了什么内容?", "value": "64915d6e098ec248701da267" }, { "scope": "KNOWLEDGE", "name": "什么是街舞穿搭指南?", "value": "64915d6e098ec248701da267" }, { "scope": "KNOWLEDGE", "name": "为什么街舞爱好者需要关注本文?", "value": "64915d6e098ec248701da267" }], "description": "了解更多", "isKnowledgeSummary": true }, "id": "knowledgeRecdNodeId", "type": "answer_radio", "sessionId": 1687251699065, "keyId": "139480f2-5af1-44fd-a7bd-a73dd7b566b7_________", "isKnowledgeSummary": true },
|
|
10666
|
-
qwFeedbackObj: {
|
|
10667
|
-
"content": {
|
|
10668
|
-
"guideText": "以下问题我已经学会了,感谢您提供的金点子,帮助我更好的成长:",
|
|
10669
|
-
"questionList": [
|
|
10670
|
-
"打印机卡纸怎么办", "打印机打印模糊", "SAP系统输入编码系统显示报错", "合同已经上传影像归档了,但是在CE中还是关联不到合同", "如何查询社保缴费基数", "如何查询公积金缴费基数"
|
|
10671
|
-
]
|
|
10672
|
-
},
|
|
10673
|
-
"type": "unidentified_feedback"
|
|
10674
|
-
},
|
|
10675
10664
|
answerRadiosPri: {
|
|
10676
10665
|
"refAttrId": null,
|
|
10677
10666
|
"createTime": null,
|
|
@@ -42,14 +42,6 @@ export default {
|
|
|
42
42
|
props: ["value", "placeholder", "havToolbar"],
|
|
43
43
|
data () {
|
|
44
44
|
return {
|
|
45
|
-
ossConfig: {
|
|
46
|
-
region: "oss-cn-zhangjiakou",
|
|
47
|
-
//云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用STS方式来进行API访问
|
|
48
|
-
accessKeyId: "LTAI4G3QtdEdwkEbihBngAsK",
|
|
49
|
-
accessKeySecret: "OwgdVfc5PeCkIgqIdug660xmiSPchn",
|
|
50
|
-
// stsToken: '<Your securityToken(STS)>',
|
|
51
|
-
bucket: "guoranopen-zjk",
|
|
52
|
-
},
|
|
53
45
|
ischecked: false,
|
|
54
46
|
text: ''
|
|
55
47
|
}
|
|
@@ -159,13 +151,12 @@ export default {
|
|
|
159
151
|
url: '',
|
|
160
152
|
}
|
|
161
153
|
let res = multipartUpload(
|
|
162
|
-
this.ossConfig,
|
|
163
154
|
file,
|
|
164
155
|
null,
|
|
165
156
|
imgInfo
|
|
166
157
|
);
|
|
167
158
|
res.then(resp => {
|
|
168
|
-
imgInfo.url = ossFileUrl(
|
|
159
|
+
imgInfo.url = ossFileUrl(resp.name)
|
|
169
160
|
resolve({
|
|
170
161
|
name: resp.name,
|
|
171
162
|
default: imgInfo.url
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</div>
|
|
27
27
|
</template>
|
|
28
28
|
<script>
|
|
29
|
-
import {
|
|
29
|
+
import {uploadImageByBase64} from "../assets/js/AliyunlssUtil";
|
|
30
30
|
|
|
31
31
|
export default {
|
|
32
32
|
name: "ask_video",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
console.debug('img.src',output)
|
|
87
87
|
let base64 = canvas.toDataURL("image/png")
|
|
88
88
|
let blob = that.dataURLtoFile(base64,'name')
|
|
89
|
-
let promise = uploadImageByBase64(
|
|
89
|
+
let promise = uploadImageByBase64(blob);
|
|
90
90
|
promise.then((res)=>{
|
|
91
91
|
console.debug("upload base64 reslut",res);
|
|
92
92
|
if (res&&res.url){
|
|
@@ -803,14 +803,6 @@ export default {
|
|
|
803
803
|
videoUploadPercent: false,
|
|
804
804
|
fileType: ['PICTURE', 'VIDEO', 'AUDIO'],
|
|
805
805
|
loading: '',
|
|
806
|
-
ossConfig: {
|
|
807
|
-
region: "oss-cn-zhangjiakou",
|
|
808
|
-
//云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用STS方式来进行API访问
|
|
809
|
-
accessKeyId: "LTAI4G3QtdEdwkEbihBngAsK",
|
|
810
|
-
accessKeySecret: "OwgdVfc5PeCkIgqIdug660xmiSPchn",
|
|
811
|
-
// stsToken: '<Your securityToken(STS)>',
|
|
812
|
-
bucket: "guoranopen-zjk",
|
|
813
|
-
},
|
|
814
806
|
hideUploadEdit: false,
|
|
815
807
|
limitNum: 1,
|
|
816
808
|
refShowPicker: false,
|
|
@@ -1505,7 +1497,6 @@ export default {
|
|
|
1505
1497
|
url: ''
|
|
1506
1498
|
}
|
|
1507
1499
|
let res = multipartUpload(
|
|
1508
|
-
this.ossConfig,
|
|
1509
1500
|
file,
|
|
1510
1501
|
null,
|
|
1511
1502
|
imageInfo
|
|
@@ -1515,10 +1506,10 @@ export default {
|
|
|
1515
1506
|
// let filePath = res.name;
|
|
1516
1507
|
imageData.urls.push({
|
|
1517
1508
|
name: file.name,
|
|
1518
|
-
url: ossFileUrl(
|
|
1509
|
+
url: ossFileUrl(res.name),
|
|
1519
1510
|
status: 'success'
|
|
1520
1511
|
})
|
|
1521
|
-
imageInfo.url = ossFileUrl(
|
|
1512
|
+
imageInfo.url = ossFileUrl(res.name)
|
|
1522
1513
|
imageInfo.status = 'success'
|
|
1523
1514
|
imageInfo.name = file.name
|
|
1524
1515
|
for (let j = 0; j < this.extInfoFieldValue[this.filedId].length; j++) {
|
|
@@ -2418,7 +2409,6 @@ export default {
|
|
|
2418
2409
|
},
|
|
2419
2410
|
};*/
|
|
2420
2411
|
let res = multipartUpload(
|
|
2421
|
-
this.ossConfig,
|
|
2422
2412
|
file,
|
|
2423
2413
|
null,
|
|
2424
2414
|
imgInfo
|
|
@@ -2431,7 +2421,7 @@ export default {
|
|
|
2431
2421
|
ossFileUrl(this.ossConfig, res.name)
|
|
2432
2422
|
);
|
|
2433
2423
|
console.log('imageData',imageData)*/
|
|
2434
|
-
imgInfo.url = ossFileUrl(
|
|
2424
|
+
imgInfo.url = ossFileUrl(res.name)
|
|
2435
2425
|
imgInfo.status = 'success'
|
|
2436
2426
|
if (data.file) {
|
|
2437
2427
|
imgInfo.name = data.file.name
|
|
@@ -2491,7 +2481,7 @@ export default {
|
|
|
2491
2481
|
console.debug("upload video progress", progress, point);
|
|
2492
2482
|
if (progress === 1) {
|
|
2493
2483
|
// this.loadingIns.close();
|
|
2494
|
-
videoData.content.url = ossFileUrl(
|
|
2484
|
+
videoData.content.url = ossFileUrl(point.name);
|
|
2495
2485
|
// this.chooseVideo({data:url},file);
|
|
2496
2486
|
|
|
2497
2487
|
} else {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<el-image-viewer :zIndex="999999" :on-close="closeViewer" :url-list="urlList" />
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
import ElementUI from 'element-ui';
|
|
9
|
+
// import ElImageViewer from ElementUI.Image.components.ImageViewer;
|
|
10
|
+
|
|
11
|
+
export default {
|
|
12
|
+
name: "imgView",
|
|
13
|
+
components: {
|
|
14
|
+
ElImageViewer: ElementUI.Image.components.ImageViewer
|
|
15
|
+
},
|
|
16
|
+
data () {
|
|
17
|
+
return {};
|
|
18
|
+
},
|
|
19
|
+
props: ["urlList"],
|
|
20
|
+
methods: {
|
|
21
|
+
closeViewer () {
|
|
22
|
+
// 关闭组件后从父级dom销毁这个挂载
|
|
23
|
+
if (this.$el.parentNode) {
|
|
24
|
+
this.$el.parentNode.removeChild(this.$el);
|
|
25
|
+
}
|
|
26
|
+
this.$emit("closeViewer");
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<style scoped></style>
|
|
@@ -3,21 +3,23 @@
|
|
|
3
3
|
<div class="summaryHeader">
|
|
4
4
|
<div class="left">
|
|
5
5
|
<i class="iconfont guoran-tongyichicun-write-29-jiqiren"></i>
|
|
6
|
-
<span
|
|
6
|
+
<span>{{ $t('dragonCommon.smartSummary') }}</span>
|
|
7
7
|
</div>
|
|
8
8
|
<div class="right">
|
|
9
9
|
<div class="regenerationBtn" @click="regeneration">
|
|
10
|
-
<template v-if="!isLoading"
|
|
10
|
+
<template v-if="!isLoading">
|
|
11
|
+
{{ $t('dragonCommon.regenerate') }}
|
|
12
|
+
</template>
|
|
11
13
|
<template v-else>
|
|
12
14
|
<img
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
height="20px"
|
|
16
|
+
width="20px"
|
|
17
|
+
src="../assets/image/loading.gif"
|
|
18
|
+
alt
|
|
19
|
+
srcset
|
|
20
|
+
style="margin-right: 6px"
|
|
19
21
|
/>
|
|
20
|
-
<span
|
|
22
|
+
<span>{{ $t('dragonCommon.generating') }}</span>
|
|
21
23
|
</template>
|
|
22
24
|
</div>
|
|
23
25
|
<i class="iconfont guoran-tongyichicun-shouqi" @click="closeSummary"></i>
|
|
@@ -28,9 +30,9 @@
|
|
|
28
30
|
</div>
|
|
29
31
|
<div class="intelligentBottom" v-if="recommendQuestions.length > 0">
|
|
30
32
|
<div class="intelligentQues"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
v-for="(item, index) in recommendQuestions"
|
|
34
|
+
:key="index"
|
|
35
|
+
@click="recommendQues(item)"
|
|
34
36
|
>
|
|
35
37
|
{{ item }}
|
|
36
38
|
</div>
|