@tencentcloud/ai-desk-customer-vue 1.0.1 → 1.3.0

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 (43) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/assets/send_button_h5.svg +1 -0
  3. package/components/CustomerServiceChat/index-web.vue +3 -3
  4. package/components/CustomerServiceChat/message-input/index-web.vue +16 -7
  5. package/components/CustomerServiceChat/message-input/message-input-editor-web.vue +5 -2
  6. package/components/CustomerServiceChat/message-list/index-web.vue +6 -0
  7. package/components/CustomerServiceChat/message-list/message-elements/message-bubble-web.vue +14 -15
  8. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/marked.ts +1 -1
  9. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-branch.vue +25 -6
  10. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-concurrency-limit.vue +40 -0
  11. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-desk.vue +32 -8
  12. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/branch-pc.vue +93 -73
  13. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/index.vue +53 -52
  14. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/input-mobile.vue +73 -80
  15. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/label-mobile.vue +21 -24
  16. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/radios-mobile.vue +115 -116
  17. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/input-pc.vue +69 -73
  18. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/label-pc.vue +21 -25
  19. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/radio-pc.vue +87 -77
  20. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-mobile.vue +213 -200
  21. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-pc.vue +122 -113
  22. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/index.vue +7 -7
  23. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-order.vue +142 -0
  24. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-number.vue +2 -1
  25. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-star.vue +2 -1
  26. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rich-text.vue +8 -6
  27. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-stream.vue +89 -6
  28. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-plugin-web.vue +5 -0
  29. package/components/CustomerServiceChat/message-list/scroll-button/index.vue +15 -3
  30. package/components/common/BottomPopup/index.vue +1 -1
  31. package/constant.ts +10 -4
  32. package/locales/en/aidesk.ts +3 -1
  33. package/locales/fil/aidesk.ts +3 -1
  34. package/locales/id/aidesk.ts +4 -2
  35. package/locales/ja/aidesk.ts +4 -2
  36. package/locales/ms/aidesk.ts +4 -2
  37. package/locales/ru/aidesk.ts +5 -3
  38. package/locales/th/aidesk.ts +3 -1
  39. package/locales/vi/aidesk.ts +4 -2
  40. package/locales/zh_cn/aidesk.ts +4 -3
  41. package/locales/zh_tw/aidesk.ts +3 -1
  42. package/package.json +1 -1
  43. package/server.ts +53 -16
@@ -1,59 +1,60 @@
1
1
  <template>
2
- <div class="message-form">
3
- <branchPc
4
- :payload ="payload"
5
- @input-click="handleContentListItemClick"
6
- />
2
+ <div class="message-form">
3
+ <BranchPc
4
+ :payload ="payload"
5
+ @input-click="handleContentListItemClick"
6
+ />
7
+ </div>
8
+ </template>
7
9
 
8
- </div>
9
- </template>
10
-
11
- <script lang="ts">
12
- import vue from '../../../../../../../adapter-vue';
13
- import BranchPc from './branch-pc.vue';
14
- import { customerServicePayloadType } from '../../../../../../../interface';
15
- const { computed} = vue;
16
-
17
- interface branchItem {
18
- content: string;
19
- desc: string;
20
- }
21
-
22
- interface Props {
23
- payload: customerServicePayloadType;
24
- }
25
-
26
- export default {
27
- components: {
28
- BranchPc
29
- },
30
- props: {
31
- payload: {
32
- type: Object,
33
- default: () => ({}),
34
- },
10
+ <script lang="ts">
11
+ import vue from '../../../../../../../adapter-vue';
12
+ import BranchPc from './branch-pc.vue';
13
+ import { customerServicePayloadType } from '../../../../../../../interface';
14
+ const { computed} = vue;
15
+
16
+ interface branchItem {
17
+ content: string;
18
+ desc: string;
19
+ }
20
+
21
+ interface Props {
22
+ payload: customerServicePayloadType;
23
+ }
24
+
25
+ export default {
26
+ components: {
27
+ BranchPc
28
+ },
29
+ props: {
30
+ payload: {
31
+ type: Object,
32
+ default: () => ({}),
35
33
  },
36
- emits: ['sendMessage'],
37
- setup(props: Props, { emit }) {
34
+ },
35
+ emits: ['sendMessage', 'heightChanged'],
36
+ setup(props: Props, { emit }) {
38
37
  const payload = computed<customerServicePayloadType>(() => {
39
38
  return props.payload;
40
39
  });
41
- const handleContentListItemClick = (branch: branchItem) => {
42
- emit('sendMessage', { text: branch.content });
43
- };
44
-
45
- const handleFormSaveInputSubmit = (text: string) => {
46
- emit('sendMessage', { text });
47
- };
48
- return {
49
- payload,
50
- handleContentListItemClick,
51
- handleFormSaveInputSubmit,
52
- };
53
- },
54
- };
55
- </script>
56
- <style lang="scss">
40
+ const handleContentListItemClick = (branch: branchItem) => {
41
+ emit('sendMessage', { text: branch.content });
42
+ };
43
+
44
+ const handleFormSaveInputSubmit = (text: string) => {
45
+ emit('sendMessage', { text });
46
+ };
47
+ return {
48
+ payload,
49
+ handleContentListItemClick,
50
+ handleFormSaveInputSubmit,
51
+ };
52
+ },
53
+ mounted() {
54
+ this.$emit('heightChanged');
55
+ }
56
+ };
57
+ </script>
58
+ <style lang="scss">
57
59
 
58
- </style>
59
-
60
+ </style>
@@ -1,104 +1,97 @@
1
1
  <template>
2
- <div class="form-input-box-mobile">
3
- <LabelMobile :name="name" :is-required="isRequired" />
4
- <div class="form-input-line">
5
- <input
6
- class="form-input-mobile"
7
- v-model="text"
8
- :placeholder="placeholder"
9
- @input="onInputChanged"
10
- >
11
- <div v-if="validator" class="validator-line">
12
- {{TUITranslateService.t("AIDesk.请填写必填项")}}
13
- </div>
2
+ <div class="form-input-box-mobile">
3
+ <LabelMobile :name="name" :is-required="isRequired" />
4
+ <div class="form-input-line">
5
+ <input
6
+ class="form-input-mobile"
7
+ v-model="text"
8
+ :placeholder="placeholder"
9
+ @input="onInputChanged"
10
+ >
11
+ <div v-if="validator" class="validator-line">
12
+ {{ TUITranslateService.t("AIDesk.请填写必填项") }}
14
13
  </div>
15
-
16
14
  </div>
15
+
16
+ </div>
17
17
  </template>
18
18
  <script lang="ts">
19
19
  import vue from '../../../../../../../../adapter-vue';
20
20
  import LabelMobile from './label-mobile.vue';
21
21
  import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
22
- const { computed, ref} = vue;
23
-
24
- interface FormItem{
25
- name:string;
26
- value:string;
27
- }
28
-
22
+ const { ref } = vue;
29
23
 
30
24
  export default {
31
- components:{
32
- LabelMobile
25
+ components: {
26
+ LabelMobile
27
+ },
28
+ props: {
29
+ placeholder: {
30
+ type: String,
31
+ default: ''
32
+ },
33
+ variableValue: {
34
+ type: String,
35
+ default: ''
33
36
  },
34
- props:{
35
- placeholder:{
36
- type:String,
37
- default:''
38
- },
39
- variableValue:{
40
- type:String,
41
- default:''
42
- },
43
- name:{
44
- type:String,
45
- default:'',
46
- },
47
- isRequired:{
48
- type:Number,
49
- default:0,
50
- },
51
- nodeStatus:{
52
- type:Number,
53
- default:0
54
- },
55
- validator:{
56
- type:Boolean,
57
- default:false
58
- }
37
+ name: {
38
+ type: String,
39
+ default:'',
59
40
  },
60
- emits:['input-change'],
61
- setup(props, {emit}){
62
- const text = ref<string>('');
63
- if(props.variableValue.length!=0){
64
- text.value = props.variableValue;
65
- }
66
- const onInputChanged = ():void => {
67
- emit('input-change',{name:props.name,value:text.value});
68
- };
69
- return {
70
- text,
71
- onInputChanged,
72
- props,
73
- TUITranslateService
74
- }
41
+ isRequired: {
42
+ type: Number,
43
+ default: 0,
44
+ },
45
+ nodeStatus: {
46
+ type: Number,
47
+ default: 0
48
+ },
49
+ validator: {
50
+ type: Boolean,
51
+ default: false
52
+ }
53
+ },
54
+ emits:['input-change'],
55
+ setup(props, {emit}){
56
+ const text = ref<string>('');
57
+ if (props.variableValue.length != 0){
58
+ text.value = props.variableValue;
59
+ }
60
+ const onInputChanged = ():void => {
61
+ emit('input-change',{name:props.name,value:text.value});
62
+ };
63
+ return {
64
+ text,
65
+ onInputChanged,
66
+ props,
67
+ TUITranslateService
75
68
  }
69
+ }
76
70
  }
77
71
  </script>
78
72
  <style lang="scss">
79
73
  .form-input-box-mobile{
80
- display:flex;
81
- flex-direction: row;
82
- align-items: center;
83
- margin:0 16px;
84
- border-bottom:1px solid #e7e7e7;
85
- padding-top:5px;
74
+ display: flex;
75
+ flex-direction: row;
76
+ align-items: center;
77
+ margin: 0 16px;
78
+ border-bottom: 1px solid #e7e7e7;
79
+ padding-top: 5px;
86
80
  }
87
81
  .form-input-line {
88
- display:flex;
89
- margin-bottom: 10px;
90
- flex:1;
91
- flex-direction: column;
92
-
82
+ display:flex;
83
+ margin-bottom: 10px;
84
+ flex:1;
85
+ flex-direction: column;
93
86
  }
94
87
  .form-input-mobile {
95
- border-color:transparent;
96
- padding:5px 8px;
97
- font-size:14px;
88
+ border-color: transparent;
89
+ padding: 5px 8px;
90
+ font-size: 14px;
98
91
  }
99
92
  .validator-line {
100
- font-size: 12px;
101
- color:#e54545;
102
- margin-top: 3px;
93
+ font-size: 12px;
94
+ color:#e54545;
95
+ margin-top: 3px;
103
96
  }
104
- </style>
97
+ </style>
@@ -1,32 +1,29 @@
1
1
  <template>
2
- <div class="form-label">
3
- {{ name }}
4
- <div v-if="isRequired" style="color: red;">
5
- &nbsp;*
6
- </div>
2
+ <div class="form-label">
3
+ {{ name }}
4
+ <div v-if="isRequired" style="color: red;">
5
+ &nbsp;*
7
6
  </div>
7
+ </div>
8
8
  </template>
9
9
  <script lang="ts">
10
- export default {
11
- props:{
12
- name:{
13
- type:String,
14
- default:''
15
- },
16
- isRequired:{
17
- type:Number,
18
- default:0
19
- }
20
- },
21
- setup(props){
22
-
23
- }
24
- }
10
+ export default {
11
+ props: {
12
+ name: {
13
+ type: String,
14
+ default: ''
15
+ },
16
+ isRequired: {
17
+ type: Number,
18
+ default: 0
19
+ }
20
+ },
21
+ }
25
22
  </script>
26
23
  <style lang="scss">
27
24
  .form-label {
28
- display:flex;
29
- width:70px;
30
- padding-bottom: 8px;
25
+ display:flex;
26
+ width:70px;
27
+ padding-bottom: 8px;
31
28
  }
32
- </style>
29
+ </style>
@@ -1,30 +1,29 @@
1
1
  <template>
2
- <div class="label-container">
3
- <div>
4
- <Label :name="name" :is-required="isRequired"/>
5
- </div>
6
- <div class="radio-container">
7
- <div v-if="validator" class="validator-line">
8
- {{ TUITranslateService.t("AIDesk.请填写必填项") }}
2
+ <div class="label-container">
3
+ <div>
4
+ <Label :name="name" :is-required="isRequired"/>
5
+ </div>
6
+ <div class="radio-container">
7
+ <div v-if="validator" class="validator-line">
8
+ {{ TUITranslateService.t("AIDesk.请填写必填项") }}
9
+ </div>
10
+ <div class="form-radio-box-mobile" v-for="(item,index) in chooseItemList" :key="index">
11
+ <div class="radio-container-uni" @click="clickItem(index)">
12
+ <div class="radio-icon-uni">
13
+ <div v-if="isUniFrameWork">
14
+ <image :src="changeSelectedIcon(item)" alt="" style="width: 20px; height: 20px; vertical-align: middle;"/>
15
+ </div>
16
+ <div v-else>
17
+ <img :src="changeSelectedIcon(item)" alt="" style="width: 20px; height: 20px; vertical-align: middle;"/>
9
18
  </div>
10
- <div class="form-radio-box-mobile" v-for="(item,index) in chooseItemList" :key="index">
11
- <div class="radio-container-uni" @click="clickItem(index)">
12
- <div class="radio-icon-uni">
13
- <div v-if="isUniFrameWork">
14
- <image :src="changeSelectedIcon(item)" alt="" style="width: 20px; height: 20px; vertical-align: middle;"/>
15
- </div>
16
- <div v-else>
17
- <img :src="changeSelectedIcon(item)" alt="" style="width: 20px; height: 20px; vertical-align: middle;"/>
18
- </div>
19
- </div>
20
- <div class="radio-label-uni">
21
- {{ item }}
22
- </div>
23
- </div>
24
- </div>
19
+ </div>
20
+ <div class="radio-label-uni">
21
+ {{ item }}
22
+ </div>
25
23
  </div>
26
-
24
+ </div>
27
25
  </div>
26
+ </div>
28
27
  </template>
29
28
  <script lang="ts">
30
29
  import Label from './label-mobile.vue';
@@ -32,112 +31,112 @@ import vue from '../../../../../../../../adapter-vue';
32
31
  import Icon from '../../customer-icon.vue';
33
32
  import radioUncheckIcon from '../../../../../../../../assets/radio-uncheck.png';
34
33
  import radioCheckIcon from '../../../../../../../../assets/radio-check.png';
35
- import { isPC, isH5,isWeChat, isUniFrameWork } from '../../../../../../../../utils/env';
34
+ import { isUniFrameWork } from '../../../../../../../../utils/env';
36
35
  import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
37
- const { ref} = vue;
36
+ const { ref } = vue;
38
37
  export default {
39
- components:{
40
- Label,
41
- Icon
38
+ components: {
39
+ Label,
40
+ Icon
41
+ },
42
+ props: {
43
+ chooseItemList: {
44
+ type: Array,
45
+ default: []
42
46
  },
43
- props:{
44
- chooseItemList:{
45
- type:Array,
46
- default:[]
47
- },
48
- name:{
49
- type:String,
50
- default:'',
51
- },
52
- isRequired:{
53
- type:Number,
54
- default:0,
55
- },
56
- validator:{
57
- type:Boolean,
58
- default:false
59
- }
47
+ name: {
48
+ type: String,
49
+ default: '',
60
50
  },
61
- emits:['input-change'],
62
- setup(props,{emit}){
63
- const selectedOption = ref<string>('');
64
- const checkedIcon = ref<string>('');
65
- const changeSelectedIcon = (name:any) => {
66
- if(selectedOption.value === name)
67
- return radioCheckIcon;
68
- else
69
- return radioUncheckIcon;
70
- }
71
-
72
- const clickItem=(index:number) => {
73
- selectedOption.value = props.chooseItemList[index] as string;
74
- emit('input-change',{name:props.name,value:selectedOption.value});
75
- }
51
+ isRequired: {
52
+ type: Number,
53
+ default: 0,
54
+ },
55
+ validator: {
56
+ type: Boolean,
57
+ default: false
58
+ }
59
+ },
60
+ emits:['input-change'],
61
+ setup(props,{emit}){
62
+ const selectedOption = ref<string>('');
63
+ const checkedIcon = ref<string>('');
64
+ const changeSelectedIcon = (name:any) => {
65
+ if (selectedOption.value === name) {
66
+ return radioCheckIcon;
67
+ } else {
68
+ return radioUncheckIcon;
69
+ }
70
+ }
71
+
72
+ const clickItem = (index:number) => {
73
+ selectedOption.value = props.chooseItemList[index] as string;
74
+ emit('input-change',{name:props.name,value:selectedOption.value});
75
+ }
76
76
 
77
- const onInputChanged = ():void => {
78
- emit('input-change',{name:props.name,value:selectedOption.value});
79
- };
80
- return {
81
- onInputChanged,
82
- selectedOption,
83
- clickItem,
84
- isUniFrameWork,
85
- radioUncheckIcon,
86
- radioCheckIcon,
87
- changeSelectedIcon,
88
- checkedIcon,
89
- TUITranslateService
90
- }
77
+ const onInputChanged = ():void => {
78
+ emit('input-change',{name:props.name,value:selectedOption.value});
79
+ };
80
+ return {
81
+ onInputChanged,
82
+ selectedOption,
83
+ clickItem,
84
+ isUniFrameWork,
85
+ radioUncheckIcon,
86
+ radioCheckIcon,
87
+ changeSelectedIcon,
88
+ checkedIcon,
89
+ TUITranslateService
91
90
  }
91
+ }
92
92
  }
93
93
  </script>
94
94
  <style lang="scss">
95
95
  .label-container{
96
- display:flex;
97
- padding:0 16px;
96
+ display:flex;
97
+ padding:0 16px;
98
98
  }
99
99
  .radio-container {
100
- display:flex;
101
- flex-direction: column;
102
- margin-left:16px;
103
-
104
- width:100%;
100
+ display:flex;
101
+ flex-direction: column;
102
+ margin-left:16px;
103
+ width:100%;
105
104
  }
106
105
 
107
106
  .form-radio-box-mobile{
108
- margin-bottom: 5px;
109
- padding:10px 0;
110
- border-bottom: 1px solid #e7e7e7;
107
+ margin-bottom: 5px;
108
+ padding:10px 0;
109
+ border-bottom: 1px solid #e7e7e7;
111
110
  }
112
111
 
113
112
  input[type="radio"] {
114
- display: none;
115
- +label {
116
- position: relative;
117
- cursor: pointer;
118
- &::before {
119
- content: "";
120
- position: absolute;
121
- left: -24px;
122
- top: 0px;
123
- border-radius: 50%;
124
- // border: 1px solid #6f686a;
125
- width: 20px;
126
- height: 20px;
127
- background-image: url('../../../../../../../../assets/radio-uncheck.png');
128
- background-size: cover;
129
- background-position: center;
130
- }
131
- &::after {
113
+ display: none;
114
+ +label {
115
+ position: relative;
116
+ cursor: pointer;
117
+ &::before {
132
118
  content: "";
133
119
  position: absolute;
134
120
  left: -24px;
135
121
  top: 0px;
136
122
  border-radius: 50%;
123
+ // border: 1px solid #6f686a;
137
124
  width: 20px;
138
125
  height: 20px;
139
- }
140
- }
126
+ background-image: url('../../../../../../../../assets/radio-uncheck.png');
127
+ background-size: cover;
128
+ background-position: center;
129
+ }
130
+ &::after {
131
+ content: "";
132
+ position: absolute;
133
+ left: -24px;
134
+ top: 0px;
135
+ border-radius: 50%;
136
+ width: 20px;
137
+ height: 20px;
138
+ }
139
+ }
141
140
  &:checked {
142
141
  + label::after {
143
142
  background-image: url('../../../../../../../../assets/radio-check.png');
@@ -146,18 +145,18 @@ input[type="radio"] {
146
145
  }
147
146
  }
148
147
 
149
- .radio-container-uni{
150
- display:flex;
151
- flex-direction: row;
152
- width: 100%;
153
- align-items: center;
154
- .radio-icon-uni {
155
- margin-right:5px;
156
- }
148
+ .radio-container-uni {
149
+ display: flex;
150
+ flex-direction: row;
151
+ width: 100%;
152
+ align-items: center;
153
+ .radio-icon-uni {
154
+ margin-right:5px;
155
+ }
157
156
  }
158
157
  .validator-line {
159
- font-size: 12px;
160
- color:#e54545;
161
- margin-top: 3px;
158
+ font-size: 12px;
159
+ color: #e54545;
160
+ margin-top: 3px;
162
161
  }
163
- </style>
162
+ </style>