@tencentcloud/ai-desk-customer-vue 1.1.0 → 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 (37) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/components/CustomerServiceChat/index-web.vue +3 -3
  3. package/components/CustomerServiceChat/message-list/index-web.vue +1 -0
  4. package/components/CustomerServiceChat/message-list/message-elements/message-bubble-web.vue +14 -15
  5. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/marked.ts +1 -1
  6. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-branch.vue +25 -6
  7. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-concurrency-limit.vue +40 -0
  8. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-desk.vue +21 -4
  9. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/branch-pc.vue +93 -73
  10. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/index.vue +53 -52
  11. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/input-mobile.vue +73 -80
  12. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/label-mobile.vue +21 -24
  13. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/radios-mobile.vue +115 -116
  14. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/input-pc.vue +69 -73
  15. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/label-pc.vue +21 -25
  16. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/radio-pc.vue +87 -77
  17. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-mobile.vue +213 -200
  18. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-pc.vue +122 -113
  19. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/index.vue +7 -7
  20. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-order.vue +142 -0
  21. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rich-text.vue +5 -1
  22. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-stream.vue +25 -1
  23. package/components/CustomerServiceChat/message-list/scroll-button/index.vue +15 -3
  24. package/components/common/BottomPopup/index.vue +1 -1
  25. package/constant.ts +10 -4
  26. package/locales/en/aidesk.ts +3 -1
  27. package/locales/fil/aidesk.ts +3 -1
  28. package/locales/id/aidesk.ts +4 -2
  29. package/locales/ja/aidesk.ts +4 -2
  30. package/locales/ms/aidesk.ts +4 -2
  31. package/locales/ru/aidesk.ts +5 -3
  32. package/locales/th/aidesk.ts +3 -1
  33. package/locales/vi/aidesk.ts +4 -2
  34. package/locales/zh_cn/aidesk.ts +4 -3
  35. package/locales/zh_tw/aidesk.ts +3 -1
  36. package/package.json +1 -1
  37. package/server.ts +6 -1
@@ -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>
@@ -1,95 +1,91 @@
1
1
  <template>
2
- <div class="form-input-box">
3
- <div class="form-input-line">
4
- <input
5
- v-model="text"
6
- :class="['form-input',validator? 'form-input-validate':'']"
7
- :placeholder="placeholder"
8
- @change="onInputChanged"
9
- >
10
- <div v-if="validator" class="validator-line">
11
- {{ TUITranslateService.t("AIDesk.请填写必填项") }}
2
+ <div class="form-input-box">
3
+ <div class="form-input-line">
4
+ <input
5
+ v-model="text"
6
+ :class="['form-input',validator && !isDisabled ? 'form-input-validate':'']"
7
+ :placeholder="placeholder"
8
+ @change="onInputChanged"
9
+ :disabled="isDisabled"
10
+ >
11
+ <div v-if="validator && !isDisabled" class="validator-line">
12
+ {{ TUITranslateService.t("AIDesk.请填写必填项") }}
12
13
  </div>
13
- </div>
14
-
15
14
  </div>
15
+ </div>
16
16
  </template>
17
17
  <script lang="ts">
18
18
  import vue from '../../../../../../../../adapter-vue';
19
19
  import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
20
- const { computed, ref} = vue;
21
-
22
- interface FormItem{
23
- name:string;
24
- value:string;
25
- }
26
-
20
+ const { ref } = vue;
27
21
 
28
22
  export default {
29
- props:{
30
- placeholder:{
31
- type:String,
32
- default:''
33
- },
34
- variableValue:{
35
- type:String,
36
- default:''
37
- },
38
- name:{
39
- type:String,
40
- default:'',
41
- },
42
- isRequired:{
43
- type:Number,
44
- default:0,
45
- },
46
- nodeStatus:{
47
- type:Number,
48
- default:0
49
- },
50
- validator:{
51
- type:Boolean,
52
- default:false
53
- }
23
+ props: {
24
+ placeholder: {
25
+ type: String,
26
+ default: ''
27
+ },
28
+ variableValue: {
29
+ type: String,
30
+ default: ''
31
+ },
32
+ name: {
33
+ type: String,
34
+ default: '',
54
35
  },
55
- emits:['input-change'],
56
- setup(props, {emit}){
57
- const text = ref<string>('');
58
- if(props.variableValue.length!=0){
59
- text.value = props.variableValue;
60
- }
61
- const onInputChanged = ():void => {
62
- emit('input-change',{name:props.name,value:text.value});
63
- };
64
- return {
65
- text,
66
- onInputChanged,
67
- TUITranslateService
68
- }
36
+ isRequired: {
37
+ type: Number,
38
+ default: 0,
39
+ },
40
+ validator: {
41
+ type: Boolean,
42
+ default: false
43
+ },
44
+ isDisabled: {
45
+ type: Boolean,
46
+ default: false
47
+ }
48
+ },
49
+ emits:['input-change'],
50
+ setup(props, {emit}){
51
+ const text = ref<string>('');
52
+ if (props.variableValue.length != 0) {
53
+ text.value = props.variableValue;
69
54
  }
55
+ const onInputChanged = ():void => {
56
+ emit('input-change',{name:props.name,value:text.value});
57
+ };
58
+ return {
59
+ text,
60
+ onInputChanged,
61
+ TUITranslateService
62
+ }
63
+ }
70
64
  }
71
65
  </script>
72
66
  <style lang="scss">
73
-
67
+ input:disabled {
68
+ background-color: #dbdbdb;
69
+ opacity: 0.5;
70
+ }
74
71
  .form-input-line {
75
- display:flex;
76
- margin-bottom: 10px;
77
- flex-direction: column;
72
+ display: flex;
73
+ margin-bottom: 10px;
74
+ flex-direction: column;
78
75
  }
79
76
  .form-input {
80
- flex:1;
81
- height: 27px;
82
- border-radius: 5px;
83
- border-color: transparent;
84
- width:300px;
85
- padding:5px 8px;
77
+ flex: 1;
78
+ height: 27px;
79
+ border-radius: 5px;
80
+ border-color: transparent;
81
+ padding: 5px 8px;
86
82
  }
87
83
  .form-input-validate {
88
- border:1px solid #e54545;
84
+ border: 1px solid #e54545;
89
85
  }
90
86
  .validator-line {
91
- font-size: 12px;
92
- color:#e54545;
93
- margin-top: 3px;
87
+ font-size: 12px;
88
+ color: #e54545;
89
+ margin-top: 3px;
94
90
  }
95
- </style>
91
+ </style>