askbot-dragon 0.6.21 → 0.6.25

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.
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <div
3
+ class="action-satisfaction"
4
+ >
5
+ <p class="satisfaction-des" v-html="msg.content.satisfactionDes"></p>
6
+ <p
7
+ class="statisfaction-item"
8
+ @click="
9
+ sendSatisfaction(
10
+ 'USER_ACTION_TO_SATISFACTION_V2',
11
+ '满意',
12
+ msg.content.satisfactoryAnswer,
13
+ null,
14
+ msg.apiKey
15
+ )
16
+ "
17
+ >
18
+ 满意<i class="arsenal_icon arsenalangle-right-solid"></i>
19
+ </p>
20
+ <p
21
+ class="statisfaction-item end"
22
+ @click="
23
+ sendSatisfaction(
24
+ 'USER_ACTION_TO_SATISFACTION_V2',
25
+ '不满意',
26
+ msg.content.unsatisfiedAnswer,
27
+ msg.content.answerRadio,
28
+ msg.apiKey
29
+ )
30
+ "
31
+ >
32
+ 不满意<i class="arsenal_icon arsenalangle-right-solid"></i>
33
+ </p>
34
+ </div>
35
+ </template>
36
+
37
+ <script>
38
+ export default {
39
+ name: "actionSatisfaction",
40
+ props:['msg'],
41
+ methods:{
42
+ sendSatisfaction(type, choose, answer, answerRadio,answerApiKey){
43
+ this.$emit('sendSatisfaction',type, choose, answer, answerRadio,answerApiKey)
44
+ }
45
+ }
46
+ }
47
+ </script>
48
+
49
+ <style scoped lang="less">
50
+ @import url(../assets/less/converSationContainer/common);
51
+ .action-satisfaction{
52
+ .satisfaction-des{
53
+ word-wrap: break-word;
54
+ word-break: break-all;
55
+ overflow: hidden;
56
+ padding: 8px 0 10px 0;
57
+ height: auto;
58
+ border-bottom: 1px solid #EEEEEE;
59
+ }
60
+ .statisfaction-item{
61
+ padding: 8px 0;
62
+ height: 25px;
63
+ line-height: 25px;
64
+ background-color: #ffffff;
65
+ color: #366aff;
66
+ cursor:pointer;
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: space-between;
70
+ }
71
+ .end{
72
+ border-bottom-left-radius: 25px !important;
73
+ border-bottom-right-radius: 25px !important;
74
+ }
75
+ }
76
+ </style>
@@ -0,0 +1,60 @@
1
+ <template>
2
+ <div
3
+ class="action-send-to-bot"
4
+ >
5
+ <p class="other" v-html="msg.content.description"></p>
6
+ <div class="options-list">
7
+ <p
8
+ v-for="(option, index) in msg.content.options"
9
+ v-bind:class="[
10
+ index == msg.content.options.length - 1 ? 'end' : '',
11
+ 'options-item',
12
+ ]"
13
+ :key="msg.nodeId + '_' + index"
14
+ @click="$emit('onRadioClick2', option.content, option.name, msg.apiKey)"
15
+ >
16
+ {{ option.name }}<i class="arsenal_icon arsenalangle-right-solid"></i>
17
+ </p>
18
+ </div>
19
+
20
+ </div>
21
+ </template>
22
+
23
+ <script>
24
+ export default {
25
+ name: "actionSendToBot",
26
+ props:['msg']
27
+ }
28
+ </script>
29
+
30
+ <style scoped lang="less">
31
+ .action-send-to-bot{
32
+ .other {
33
+ word-wrap: break-word;
34
+ word-break: break-all;
35
+ overflow: hidden;
36
+ padding: 8px 10px 10px 0;
37
+ height: auto;
38
+ border-bottom: 1px solid #EEEEEE;
39
+ }
40
+ .options-list{
41
+ /* padding-top: 10px;*/
42
+ /*padding-right: 10px;*/
43
+ .options-item{
44
+ padding: 8px 0;
45
+ height: 25px;
46
+ line-height: 25px;
47
+ background-color: #ffffff;
48
+ color: #366aff;
49
+ cursor:pointer;
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: space-between;
53
+ }
54
+ .end{
55
+ border-bottom-left-radius: 25px !important;
56
+ border-bottom-right-radius: 25px !important;
57
+ }
58
+ }
59
+ }
60
+ </style>
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <div class="answer-dissatisfaction">
3
+ <p class="satisfaction-reply-text" v-html="msg.content.replyText"></p>
4
+ <p
5
+ v-for="(option, index) in msg.content.replyOptions"
6
+ v-bind:class="[ index == msg.content.replyOptions.length - 1 ? 'end' : '','statisfaction-item']"
7
+ :key="index"
8
+ @click="sendDissatisfaction(option,msg.apiKey)">
9
+ {{ option.name }}<i class="arsenal_icon arsenalangle-right-solid"></i>
10
+ </p>
11
+ </div>
12
+ </template>
13
+
14
+ <script>
15
+ export default {
16
+ name: "answerDissatisfaction",
17
+ data(){
18
+ return{
19
+
20
+ }
21
+ },
22
+ props:['msg'],
23
+ methods:{
24
+ sendDissatisfaction(option,apiKey){
25
+ let value = JSON.stringify({
26
+ input: option.name,
27
+ reply_text: option.answer
28
+ });
29
+ this.$emit('sendMessage','USER_ACTION_TO_DISSATISFACTION_V2',value,null,apiKey);
30
+ }
31
+ }
32
+ }
33
+ </script>
34
+
35
+ <style scoped lang="less">
36
+ .answer-dissatisfaction{
37
+ .satisfaction-reply-text{
38
+ word-wrap: break-word;
39
+ word-break: break-all;
40
+ overflow: hidden;
41
+ padding: 8px 0 10px 0;
42
+ height: auto;
43
+ border-bottom: 1px solid #EEEEEE;
44
+ }
45
+ .statisfaction-item{
46
+ padding: 8px 0;
47
+ height: 25px;
48
+ line-height: 25px;
49
+ background-color: #ffffff;
50
+ color: #366aff;
51
+ cursor:pointer;
52
+ display: flex;
53
+ align-items: center;
54
+ justify-content: space-between;
55
+ }
56
+ .end{
57
+ border-bottom-left-radius: 25px !important;
58
+ border-bottom-right-radius: 25px !important;
59
+ }
60
+ }
61
+ </style>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <div id="answer-radio">
3
+ <p class="other" v-html="msg.content.description"></p>
4
+ <div class="options-list">
5
+ <div
6
+ v-for="(option, index) in msg.content.options"
7
+ v-bind:class="[
8
+ index == msg.content.options.length - 1 ? 'end' : '',
9
+ 'options-item',
10
+ ]"
11
+ :key="msg.nodeId + '_' + index"
12
+ @click="
13
+ $emit(
14
+ 'onRadioClick',msg.id +'_' + index + '_' + option.value + '_' + option.name,option.name, msg.apiKey,msg.actionCategory
15
+ )">
16
+ {{ option.name }}<i class="arsenal_icon arsenalangle-right-solid"></i>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </template>
21
+
22
+ <script>
23
+ export default {
24
+ name: "answerRadio",
25
+ data(){
26
+ return{
27
+
28
+ }
29
+ },
30
+ props:['msg']
31
+ }
32
+ </script>
33
+
34
+ <style scoped lang="less">
35
+ #answer-radio{
36
+ .other {
37
+ word-wrap: break-word;
38
+ word-break: break-all;
39
+ overflow: hidden;
40
+ padding: 8px 10px 10px 0;
41
+ height: auto;
42
+ border-bottom: 1px solid #EEEEEE;
43
+ }
44
+ .options-list{
45
+ /* padding-top: 10px;*/
46
+ /*padding-right: 10px;*/
47
+ .options-item{
48
+ padding: 8px 0;
49
+ height: 25px;
50
+ line-height: 25px;
51
+ background-color: #ffffff;
52
+ color: #366aff;
53
+ cursor:pointer;
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: space-between;
57
+ }
58
+ .end{
59
+ border-bottom-left-radius: 25px !important;
60
+ border-bottom-right-radius: 25px !important;
61
+ }
62
+ }
63
+ }
64
+ </style>
@@ -0,0 +1,46 @@
1
+ <template>
2
+ <div
3
+ v-loading="loading"
4
+ :element-loading-text="showProgress">
5
+ <!-- <video-player
6
+ class="video-player vjs-custom-skin"
7
+ x5-video-player-type="h5"
8
+ :options="videoOptions(msg.content,msg.type)"
9
+ @pause="statechanged"
10
+ /> -->
11
+ <video
12
+ :src="src"
13
+ controls="controls"
14
+ x5-video-player-type="h5-page"
15
+ style="object-fit: contain;width: 240px;height: 160px;background-color: black;border-radius: 17px"
16
+ class="video-player vjs-custom-skin"
17
+ :id="msg.keyId"/>
18
+ </div>
19
+ </template>
20
+ <script>
21
+ export default {
22
+ name: "ask_video",
23
+ props: ["msg", "url", "localUrl", "progress"],
24
+ data() {
25
+ return {
26
+ }
27
+ },
28
+ watch: {
29
+ },
30
+ computed: {
31
+ showProgress() {
32
+ return parseInt(this.progress * 100);
33
+ },
34
+ loading() {
35
+ return this.url == null || this.url === "";
36
+ },
37
+ src() {
38
+ return (this.url != null && this.url !== '') ? this.url : this.localUrl;
39
+ }
40
+ }
41
+
42
+ }
43
+ </script>
44
+ <style scoped lang="less">
45
+
46
+ </style>
@@ -0,0 +1,91 @@
1
+ <template>
2
+ <div class="association-intention">
3
+ <div v-if=" (msgType === 'answer_welcofmetext' || msgType === 'answer_text') && !(msg.recommend&& msg.recommend.status)">
4
+ <p v-html="msg.content.replace(/\#[\u4E00-\u9FA5]{1,3}\;/gi, emotion)"></p>
5
+ </div>
6
+ <div v-if=" (msgType === 'answer_welcofmetext' || msgType === 'answer_text') && (msg.recommend&& msg.recommend.status)">
7
+ <p class="media-body-ps-text-box" v-html="msg.content.replace(/\#[\u4E00-\u9FA5]{1,3}\;/gi, emotion)"></p>
8
+ <recommend :msg="msg"></recommend>
9
+ </div>
10
+ <div v-if="msg.type === 'answer_rich_text' && !(msg.content.recommend != undefined && msg.content.recommend.status)">
11
+ <p v-html="$options.filters.imageStyle(msg.content.html)"></p>
12
+ </div>
13
+ <div v-else-if="msg.type == 'answer_rich_text' && (msg.content.recommend != undefined && msg.content.recommend.status)">
14
+ <p style="padding: 12px 0" v-html="$options.filters.imageStyle(msg.content.html)"></p>
15
+ <recommend :msg="msg.content"></recommend>
16
+ </div>
17
+ <div v-else-if="msgType === 'answer_image'" >
18
+ <div
19
+ class="association-img"
20
+ >
21
+ <!-- LPY 原生宽度适配有bug,弃用 -->
22
+ <img
23
+ :src="msg.content.url"
24
+ style="height: auto; width: auto;max-width: 240px;border-radius: 17px"
25
+ @click="onImageClick(msg.content.url)"
26
+ class="img-class"
27
+ />
28
+ </div>
29
+ <recommend :msg="msg"></recommend>
30
+ </div>
31
+ <div v-else-if="msgType === 'answer_video' || msgType === 'user_video' || msgType === 'VIDEO'"
32
+ class="media-body-ps1">
33
+ <div class="association-img">
34
+ <ask-video :msg="msg" :url="msg.content.url" :local-url="msg.content.localUrl"
35
+ :progress="msg.content.progress"></ask-video>
36
+ </div>
37
+ <div class="media-body-ps" style="border-radius: 0 0 32px 32px;">
38
+ <recommend :msg="msg"></recommend>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </template>
43
+
44
+ <script>
45
+ import askVideo from "./askVideo";
46
+ import Recommend from "./recommend";
47
+ export default {
48
+ name: "associationIntention",
49
+ components: {Recommend, askVideo},
50
+ props: ["msg",'msgType'],
51
+ filters: {
52
+ imageStyle: function (html) {
53
+ //富文本内图片自适应高度宽度
54
+ const regex = new RegExp("<img", "gi");
55
+ return html.replace(
56
+ regex,
57
+ "<img style='max-width: 100%;' onclick='imageOnClick(this)'"
58
+ );
59
+ },
60
+ },
61
+ mounted() {
62
+ console.debug('msg',this.msg)
63
+ },
64
+ methods:{
65
+ // 将匹配结果替换表情图片
66
+ emotion (res) {
67
+ console.log('res:'+res);
68
+ let word = res.replace(/\/#|\/;/gi,'')
69
+ console.log('word:'+word);
70
+ const list = ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', '不', '可以', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈', '磕头', '回头', '跳绳', '挥手', '激动', '街舞', '献吻', '左太极', '右太极']
71
+ let index = list.indexOf(word)
72
+ return `<img height="20px" src="https://guoranim.oss-cn-beijing.aliyuncs.com/emoji/${index+1}.png" align="middle">`
73
+ },
74
+ onRadioClickReco(){},
75
+ onImageClick(){},
76
+ }
77
+ }
78
+ </script>
79
+
80
+
81
+ <style scoped lang="less">
82
+ @import "../assets/less/converSationContainer/common";
83
+ .association-intention{
84
+ .association-img{
85
+ /*display: flex;
86
+ align-items: center;
87
+ justify-content: center;*/
88
+ }
89
+ }
90
+
91
+ </style>
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <div class="bot-action-satisfator">
3
+ <div class="replay">
4
+ <p class="reply-text" v-html="msg.content.reply_text"></p>
5
+ <div v-if="
6
+ msg.content.reply_options != null &&
7
+ msg.content.reply_options.length > 0
8
+ ">
9
+ <p
10
+
11
+ v-for="(option, index) in msg.content.reply_options"
12
+ v-bind:class="[
13
+ index == msg.content.reply_options.length - 1 ? 'end' : '',
14
+ 'statisfaction-item',
15
+ ]"
16
+ :key="index"
17
+ @click="
18
+ onSatisfactionClick(
19
+ 'user_action_to_unsatisfactory',
20
+ option.name,
21
+ option.answer, null,msg.apiKey
22
+ )
23
+ "
24
+ >
25
+ {{ option.name }}<i class="arsenal_icon arsenalangle-right-solid"></i>
26
+ </p>
27
+ </div>
28
+
29
+ </div>
30
+ </div>
31
+ </template>
32
+
33
+ <script>
34
+ export default {
35
+ name: "botActionSatisfactor",
36
+ props:['msg'],
37
+ methods:{
38
+ onSatisfactionClick(type, choose, answer, answerRadio,answerApiKey) {
39
+ this.$emit("onSatisfactionClick", type, choose, answer, answerRadio,answerApiKey);
40
+ },
41
+ }
42
+ }
43
+ </script>
44
+
45
+ <style scoped lang="less">
46
+ @import "../assets/less/converSationContainer/common";
47
+ .bot-action-satisfator{
48
+ .reply-text{
49
+ word-wrap: break-word;
50
+ word-break: break-all;
51
+ overflow: hidden;
52
+ padding: 8px 0 10px 0;
53
+ height: auto;
54
+ border-bottom: 1px solid #EEEEEE;
55
+ }
56
+ .statisfaction-item{
57
+ padding: 8px 0;
58
+ height: 25px;
59
+ line-height: 25px;
60
+ background-color: #ffffff;
61
+ color: #366aff;
62
+ cursor:pointer;
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: space-between;
66
+ }
67
+ .end{
68
+ border-bottom-left-radius: 25px !important;
69
+ border-bottom-right-radius: 25px !important;
70
+ }
71
+ }
72
+ </style>
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <div id="feedBack" class="companyNotRem" :class="{phoneClass:isPhone,companyClass:isCompany,notClick:isDisabled===true}">
3
- <span class="marginRight" >
3
+ <span class="feed-positive-button" >
4
4
  <el-button round class="btnClass" @click="positiveFeedback(feedBack,1)" v-html="feedBack.positiveFeedback.text" v-if="positiveClick ===false">{{feedBack.positiveFeedback.text}}</el-button>
5
5
  <el-button round class="btnClassActive" v-html="feedBack.positiveFeedback.text" v-if="positiveClick ===true">{{feedBack.positiveFeedback.text}}</el-button>
6
6
  </span>
7
- <span class="marginRight">
7
+ <span class="feed-negative-button">
8
8
  <el-button round class="btnClass" @click="positiveFeedback(feedBack,2)" v-html="feedBack.negativeFeedback.text" v-if="negativeClick ===false">{{feedBack.negativeFeedback.text}}</el-button>
9
9
  <el-button round class="btnClassActive" v-html="feedBack.negativeFeedback.text" v-if="negativeClick ===true">{{feedBack.negativeFeedback.text}}</el-button>
10
10
  </span>
@@ -82,26 +82,41 @@ name: "feedBack",
82
82
  </script>
83
83
 
84
84
  <style scoped lang="less">
85
-
85
+ #feedBack{
86
+ .feed-positive-button{
87
+ background: #FFFFFF;
88
+ margin-right: 8px;
89
+ /deep/.el-button{
90
+ border: 1px solid #BBCDFF;
91
+ color: #366aff;
92
+ border-radius: 14px;
93
+ font-weight: 400;
94
+ }
95
+ }
96
+ .feed-negative-button{
97
+ background: #FFFFFF;
98
+ /deep/.el-button{
99
+ border: 1px solid #BEC5DB;
100
+ color: #616161;
101
+ border-radius: 14px;
102
+ font-weight: 400;
103
+ }
104
+ }
105
+ /deep/.el-button.is-round{
106
+ padding: 9px 20px;
107
+ }
108
+ }
86
109
  .phoneClass{
87
110
  width: 100vw;
88
111
  text-align: center;
89
112
  margin: 0 auto;
90
113
  line-height: 56px;
91
- .marginRight{
92
- margin-right: 10px;
93
- margin-left: 10px;
94
- }
95
114
  .el-button{
96
115
  min-width: 60px;
97
116
  height: 36px;
98
117
  line-height: 0.9;
99
118
  }
100
119
  }
101
- .btnClass{
102
- color: #4C61E1;
103
- border-color: #4C61E1
104
- }
105
120
  .btnClassActive{
106
121
  color: #ffffff;
107
122
  background-color: #4C61E1
@@ -112,10 +127,6 @@ name: "feedBack",
112
127
  text-align: center;
113
128
  margin: 0 auto;
114
129
  line-height: 56px;
115
- .marginRight{
116
- margin-right: 10px;
117
- margin-left: 10px;
118
- }
119
130
  .el-button{
120
131
  min-width: 60px;
121
132
  height: 36px;