@tencentcloud/ai-desk-customer-vue 0.3.0 → 1.0.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 (100) hide show
  1. package/CHANGELOG.md +5 -3
  2. package/README.md +153 -50
  3. package/assets/loading_message.svg +1 -0
  4. package/components/CustomerServiceChat/chat-header/index-web.vue +2 -2
  5. package/components/CustomerServiceChat/index-web.vue +77 -11
  6. package/components/CustomerServiceChat/message-input/message-input-editor-web.vue +7 -1
  7. package/components/CustomerServiceChat/message-input-toolbar/emoji-dialog-mobile/emoji-dialog-mobile.vue +2 -1
  8. package/components/CustomerServiceChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue +2 -1
  9. package/components/CustomerServiceChat/message-input-toolbar/emoji-picker/index.vue +2 -1
  10. package/components/CustomerServiceChat/message-input-toolbar/file-upload/index.vue +3 -2
  11. package/components/CustomerServiceChat/message-input-toolbar/image-upload/index.vue +4 -3
  12. package/components/CustomerServiceChat/message-input-toolbar/index-web.vue +2 -2
  13. package/components/CustomerServiceChat/message-input-toolbar/video-upload/index.vue +2 -2
  14. package/components/CustomerServiceChat/message-list/index-web.vue +16 -7
  15. package/components/CustomerServiceChat/message-list/message-elements/message-bubble-web.vue +19 -0
  16. package/components/CustomerServiceChat/message-list/message-elements/message-custom.vue +6 -2
  17. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/marked.ts +4 -0
  18. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-branch.vue +13 -4
  19. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/input-mobile.vue +4 -2
  20. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/radios-mobile.vue +4 -2
  21. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/input-pc.vue +4 -2
  22. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/radio-pc.vue +5 -3
  23. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-mobile.vue +6 -4
  24. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-pc.vue +5 -3
  25. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-product-card.vue +21 -11
  26. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-number.vue +6 -6
  27. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-star.vue +14 -14
  28. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-robot-welcome.vue +2 -6
  29. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-single-form/form-input.vue +6 -4
  30. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-stream.vue +51 -52
  31. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/styles/common.scss +1 -1
  32. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/type-writer.ts +189 -0
  33. package/components/CustomerServiceChat/message-list/message-elements/message-location.vue +2 -1
  34. package/components/CustomerServiceChat/message-list/message-elements/message-text.vue +1 -1
  35. package/components/CustomerServiceChat/message-list/message-elements/message-thinking.vue +59 -0
  36. package/components/CustomerServiceChat/message-list/message-tool/index-web.vue +1 -1
  37. package/components/CustomerServiceChat/message-list/message-tool/message-revoked.vue +1 -0
  38. package/components/CustomerServiceChat/message-list/scroll-button/index.vue +3 -1
  39. package/components/CustomerServiceChat/message-toolbar-button/index.vue +69 -0
  40. package/components/common/Dialog/index.vue +2 -2
  41. package/components/common/ImagePreviewer/index-web.vue +2 -2
  42. package/constant.ts +15 -0
  43. package/excluded-list.txt +0 -1
  44. package/index.ts +1 -6
  45. package/interface.ts +8 -0
  46. package/locales/en/TUIChat.ts +158 -0
  47. package/locales/en/aidesk.ts +16 -0
  48. package/locales/en/component.ts +6 -0
  49. package/locales/en/index.ts +26 -0
  50. package/locales/en/time.ts +37 -0
  51. package/locales/fil/TUIChat.ts +160 -0
  52. package/locales/fil/aidesk.ts +16 -0
  53. package/locales/fil/component.ts +6 -0
  54. package/locales/fil/index.ts +25 -0
  55. package/locales/fil/time.ts +18 -0
  56. package/locales/id/TUIChat.ts +164 -0
  57. package/locales/id/aidesk.ts +16 -0
  58. package/locales/id/component.ts +6 -0
  59. package/locales/id/index.ts +26 -0
  60. package/locales/id/time.ts +19 -0
  61. package/locales/index.ts +30 -0
  62. package/locales/ja/TUIChat.ts +165 -0
  63. package/locales/ja/aidesk.ts +16 -0
  64. package/locales/ja/component.ts +6 -0
  65. package/locales/ja/index.ts +26 -0
  66. package/locales/ja/time.ts +18 -0
  67. package/locales/ms/TUIChat.ts +165 -0
  68. package/locales/ms/aidesk.ts +16 -0
  69. package/locales/ms/component.ts +6 -0
  70. package/locales/ms/index.ts +26 -0
  71. package/locales/ms/time.ts +18 -0
  72. package/locales/ru/TUIChat.ts +158 -0
  73. package/locales/ru/aidesk.ts +16 -0
  74. package/locales/ru/component.ts +7 -0
  75. package/locales/ru/index.ts +26 -0
  76. package/locales/ru/time.ts +30 -0
  77. package/locales/th/TUIChat.ts +165 -0
  78. package/locales/th/aidesk.ts +16 -0
  79. package/locales/th/component.ts +6 -0
  80. package/locales/th/index.ts +26 -0
  81. package/locales/th/time.ts +18 -0
  82. package/locales/vi/TUIChat.ts +156 -0
  83. package/locales/vi/aidesk.ts +16 -0
  84. package/locales/vi/component.ts +6 -0
  85. package/locales/vi/index.ts +26 -0
  86. package/locales/vi/time.ts +18 -0
  87. package/locales/zh_cn/TUIChat.ts +158 -0
  88. package/locales/zh_cn/aidesk.ts +17 -0
  89. package/locales/zh_cn/component.ts +6 -0
  90. package/locales/zh_cn/index.ts +26 -0
  91. package/locales/zh_cn/time.ts +37 -0
  92. package/locales/zh_tw/TUIChat.ts +158 -0
  93. package/locales/zh_tw/aidesk.ts +16 -0
  94. package/locales/zh_tw/component.ts +6 -0
  95. package/locales/zh_tw/index.ts +26 -0
  96. package/locales/zh_tw/time.ts +37 -0
  97. package/package.json +2 -2
  98. package/server.ts +36 -9
  99. package/utils/index.ts +42 -17
  100. package/utils/utils.ts +4 -5
@@ -50,8 +50,8 @@ const { ref, onMounted, onUnmounted, watch } = vue;
50
50
 
51
51
  interface IProps {
52
52
  displayType: ToolbarDisplayType;
53
- isH5EmojiShow:boolean;
54
- isH5ToolShow:boolean;
53
+ isH5EmojiShow?:boolean;
54
+ isH5ToolShow?:boolean;
55
55
  }
56
56
  interface IEmits {
57
57
  (e: 'scrollToLatestMessage'): void;
@@ -10,7 +10,7 @@
10
10
  <div :class="['video-upload', !isPC && 'video-upload-h5']">
11
11
  <input
12
12
  ref="inputRef"
13
- title="视频"
13
+ :title="TUITranslateService.t('视频')"
14
14
  type="file"
15
15
  data-type="video"
16
16
  accept="video/*"
@@ -27,8 +27,8 @@ import {
27
27
  IConversationModel,
28
28
  SendMessageParams,
29
29
  SendMessageOptions,
30
+ TUITranslateService
30
31
  } from '@tencentcloud/chat-uikit-engine';
31
- import { TUIGlobal } from '@tencentcloud/universal-api';
32
32
  import vue from '../../../../adapter-vue';
33
33
  import { isPC } from '../../../../utils/env';
34
34
  import ToolbarItemContainer from '../toolbar-item-container/index.vue';
@@ -68,8 +68,9 @@
68
68
  @resendMessage="resendMessage(item)"
69
69
  >
70
70
  <template #messageElement>
71
+ <MessageThinking v-if="isThinkingMessage(item)"/>
71
72
  <MessageText
72
- v-if="item.type === TYPES.MSG_TEXT"
73
+ v-else-if="item.type === TYPES.MSG_TEXT"
73
74
  :content="item.getMessageContent()"
74
75
  />
75
76
  <ProgressMessage
@@ -175,7 +176,7 @@
175
176
 
176
177
  <script lang="ts" setup>
177
178
  import vue from '../../../adapter-vue';
178
- const { ref, nextTick, computed, onMounted, onUnmounted } = vue;
179
+ const { ref, nextTick, computed, onMounted, onUnmounted } = vue;
179
180
  import TUIChatEngine, {
180
181
  IMessageModel,
181
182
  TUIStore,
@@ -203,6 +204,7 @@ import MessageVideo from './message-elements/message-video-web.vue';
203
204
  import MessageTool from './message-tool/index-web.vue';
204
205
  import MessageRevoked from './message-tool/message-revoked.vue';
205
206
  import MessagePlugin from '../message-list/message-elements/message-desk/message-plugin-web.vue';
207
+ import MessageThinking from './message-elements/message-thinking.vue';
206
208
  import ScrollButton from './scroll-button/index.vue';
207
209
  import { isPluginMessage } from './message-elements/message-desk/index';
208
210
  import Dialog from '../../common/Dialog/index.vue';
@@ -214,9 +216,8 @@ import {
214
216
  isEnabledMessageReadReceiptGlobal,
215
217
  deepCopy,
216
218
  } from '../../../utils/utils';
217
- import { isMessageInvisible } from '../../../utils/index';
218
- // import {TUICustomerServer} from '../../../server';
219
- import {isCustomerConversation} from '../../../index';
219
+ import { isMessageInvisible, isThinkingMessage, isThinkingMessageOverTime } from '../../../utils/index';
220
+ import { isCustomerConversation } from '../../../index';
220
221
 
221
222
  interface ScrollConfig {
222
223
  scrollToMessage?: IMessageModel;
@@ -328,19 +329,26 @@ onUnmounted(() => {
328
329
  });
329
330
 
330
331
  async function onMessageListUpdated(list: IMessageModel[]) {
331
- if(!isCustomerConversation(currentConversationID.value)){
332
+ if (!isCustomerConversation(currentConversationID.value)) {
332
333
  return;
333
334
  }
334
335
  observer?.disconnect();
335
336
  const oldLastMessage = currentLastMessage.value;
336
337
  let hasEmojiReaction = false;
337
338
  allMessageList.value = list;
338
- messageList.value = list.filter((message) => {
339
+
340
+ messageList.value = list.filter((message, index) => {
339
341
  if (message.reactionList?.length && !message.isDeleted) {
340
342
  hasEmojiReaction = true;
341
343
  }
344
+
345
+ // 判断是否结束
346
+ if (isThinkingMessage(message)) {
347
+ return isThinkingMessageOverTime(message);
348
+ }
342
349
  return !message.isDeleted && !isMessageInvisible(message as any);
343
350
  });
351
+
344
352
  if (!messageList.value?.length) {
345
353
  currentLastMessage.value = {};
346
354
  return;
@@ -695,6 +703,7 @@ function setAudioPlayed(messageID: string) {
695
703
  };
696
704
  }
697
705
 
706
+
698
707
  defineExpose({
699
708
  scrollToLatestMessage,
700
709
  });
@@ -44,6 +44,7 @@
44
44
  isNoPadding && isBlink ? 'blink-shadow' : '',
45
45
  !isNoPadding && isBlink ? 'blink-content' : '',
46
46
  isMultiBranchMsg?'multi-branch-message':'',
47
+ (isProductCardMessage && isH5) ? 'product-message-bubble-h5' : (isProductCardMessage ? 'product-message-bubble' : ''),
47
48
  isPC ? '':'body-mobile',
48
49
  ]"
49
50
  >
@@ -141,6 +142,7 @@ import loadingIcon from '../../../../assets/loading.png';
141
142
  import customerAvatar from '../../../../assets/customer_avatar.png';
142
143
  import { shallowCopyMessage } from '../../../../utils/utils';
143
144
  import { isPC,isH5 } from '../../../../utils/env';
145
+ import { CUSTOM_MESSAGE_SRC } from '../../../../constant';
144
146
  const { computed, toRefs } = vue;
145
147
 
146
148
  interface IProps {
@@ -213,6 +215,15 @@ const isMultiBranchMsg = computed(()=>{
213
215
  });
214
216
 
215
217
 
218
+ const isProductCardMessage = computed(()=>{
219
+ if (message.value?.type == "TIMCustomElem") {
220
+ if (JSON.parse(message.value.payload.data).src === CUSTOM_MESSAGE_SRC.PRODUCT_CARD) {
221
+ return true;
222
+ }
223
+ }
224
+ return false;
225
+ });
226
+
216
227
  const isNoPadding = computed(() => {
217
228
  return (
218
229
  !hasEmojiReaction.value
@@ -400,6 +411,14 @@ function scrollTo(scrollHeight: number) {
400
411
  border-radius: 0 10px 10px;
401
412
  padding: 0px;
402
413
  }
414
+
415
+ .product-message-bubble {
416
+ background: #f3f4f7 !important ;
417
+ }
418
+
419
+ .product-message-bubble-h5 {
420
+ background: #fff !important ;
421
+ }
403
422
 
404
423
  .content-out {
405
424
  background: linear-gradient(26deg, #1C66E5 2.07%, #03C8FD 152.75%);
@@ -1,5 +1,9 @@
1
1
  <template>
2
- <div>[自定义消息]</div>
2
+ <div>{{TUITranslateService.t("TUIChat.[自定义消息]")}}</div>
3
3
  </template>
4
4
 
5
- <script lang="ts" setup></script>
5
+ <script lang="ts" setup>
6
+ import {
7
+ TUITranslateService,
8
+ } from '@tencentcloud/chat-uikit-engine';
9
+ </script>
@@ -15,6 +15,10 @@ export const marked = new Marked(
15
15
  `;
16
16
  },
17
17
  link(this: any, href: string | null, title: string | null, text: string) {
18
+ // a 标签 href 如果异常(包含非 ASCII 字符),则当成普通文本处理
19
+ if (href && /[^\x00-\x7F]/g.test(href)) {
20
+ return text;
21
+ }
18
22
  return `<a target="_blank" rel="noreferrer noopenner" class="message-marked_link" href="${href || ''}" title="${title}">${text}</a>`;
19
23
  },
20
24
  },
@@ -8,10 +8,9 @@
8
8
  {{ content.header || content.title }}
9
9
  </div>
10
10
  <div
11
- v-if="!isSelected"
12
11
  v-for="(item, index) in content.items"
13
12
  :key="index"
14
- class="branch-body branch-bubble branch-item"
13
+ :class="['branch-body','branch-bubble','branch-item',isSelected ? 'branch-item-selected' : '']"
15
14
  :style="{ borderWidth: content.header ? '1px 0 0px 0' : '' }"
16
15
  @click="handleContentListItemClick(item)"
17
16
  >
@@ -61,8 +60,10 @@ export default {
61
60
  });
62
61
 
63
62
  const handleContentListItemClick = (branch: branchItem) => {
64
- isSelected.value = true;
65
- emit('sendMessage', { text: branch.content });
63
+ if(!isSelected.value) {
64
+ isSelected.value = true;
65
+ emit('sendMessage', { text: branch.content });
66
+ }
66
67
  };
67
68
 
68
69
  return {
@@ -117,4 +118,12 @@ export default {
117
118
  flex-direction:column;
118
119
  align-items: flex-start;
119
120
  }
121
+ .branch-item-selected {
122
+ cursor:none;
123
+ color: #a0a7b8;
124
+ opacity:0.6;
125
+ }
126
+ .branch-title-icon {
127
+ margin-right: 5px;
128
+ }
120
129
  </style>
@@ -9,7 +9,7 @@
9
9
  @input="onInputChanged"
10
10
  >
11
11
  <div v-if="validator" class="validator-line">
12
- 请填写必填项
12
+ {{TUITranslateService.t("AIDesk.请填写必填项")}}
13
13
  </div>
14
14
  </div>
15
15
 
@@ -18,6 +18,7 @@
18
18
  <script lang="ts">
19
19
  import vue from '../../../../../../../../adapter-vue';
20
20
  import LabelMobile from './label-mobile.vue';
21
+ import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
21
22
  const { computed, ref} = vue;
22
23
 
23
24
  interface FormItem{
@@ -68,7 +69,8 @@ export default {
68
69
  return {
69
70
  text,
70
71
  onInputChanged,
71
- props
72
+ props,
73
+ TUITranslateService
72
74
  }
73
75
  }
74
76
  }
@@ -5,7 +5,7 @@
5
5
  </div>
6
6
  <div class="radio-container">
7
7
  <div v-if="validator" class="validator-line">
8
- 请填写必填项
8
+ {{ TUITranslateService.t("AIDesk.请填写必填项") }}
9
9
  </div>
10
10
  <div class="form-radio-box-mobile" v-for="(item,index) in chooseItemList" :key="index">
11
11
  <div class="radio-container-uni" @click="clickItem(index)">
@@ -33,6 +33,7 @@ import Icon from '../../customer-icon.vue';
33
33
  import radioUncheckIcon from '../../../../../../../../assets/radio-uncheck.png';
34
34
  import radioCheckIcon from '../../../../../../../../assets/radio-check.png';
35
35
  import { isPC, isH5,isWeChat, isUniFrameWork } from '../../../../../../../../utils/env';
36
+ import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
36
37
  const { ref} = vue;
37
38
  export default {
38
39
  components:{
@@ -84,7 +85,8 @@ export default {
84
85
  radioUncheckIcon,
85
86
  radioCheckIcon,
86
87
  changeSelectedIcon,
87
- checkedIcon
88
+ checkedIcon,
89
+ TUITranslateService
88
90
  }
89
91
  }
90
92
  }
@@ -8,7 +8,7 @@
8
8
  @change="onInputChanged"
9
9
  >
10
10
  <div v-if="validator" class="validator-line">
11
- 请填写必填项
11
+ {{ TUITranslateService.t("AIDesk.请填写必填项") }}
12
12
  </div>
13
13
  </div>
14
14
 
@@ -16,6 +16,7 @@
16
16
  </template>
17
17
  <script lang="ts">
18
18
  import vue from '../../../../../../../../adapter-vue';
19
+ import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
19
20
  const { computed, ref} = vue;
20
21
 
21
22
  interface FormItem{
@@ -62,7 +63,8 @@ export default {
62
63
  };
63
64
  return {
64
65
  text,
65
- onInputChanged
66
+ onInputChanged,
67
+ TUITranslateService
66
68
  }
67
69
  }
68
70
  }
@@ -2,7 +2,7 @@
2
2
  <div>
3
3
  <div class="radio-container-pc">
4
4
  <div v-if="validator" class="validator-line">
5
- 请填写必填项
5
+ {{ TUITranslateService.t("AIDesk.请填写必填项") }}
6
6
  </div>
7
7
  <div class="form-radio-box-pc" v-for="(item,index) in chooseItemList" :key="index">
8
8
  <div class="radio-container-pc-icon" @click="clickItem(index)">
@@ -22,7 +22,8 @@
22
22
  import vue from '../../../../../../../../adapter-vue';
23
23
  import radioUncheckIcon from '../../../../../../../../assets/radio-uncheck.png';
24
24
  import radioCheckIcon from '../../../../../../../../assets/radio-check.png';
25
- const { ref} = vue;
25
+ import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
26
+ const { ref } = vue;
26
27
  export default {
27
28
  props:{
28
29
  chooseItemList:{
@@ -68,7 +69,8 @@ export default {
68
69
  radioUncheckIcon,
69
70
  radioCheckIcon,
70
71
  changeSelectedIcon,
71
- checkedIcon
72
+ checkedIcon,
73
+ TUITranslateService
72
74
  }
73
75
  }
74
76
  }
@@ -3,7 +3,7 @@
3
3
  <div v-if="!finishSubmit && props.payload.nodeStatus == 0" class="before-form">
4
4
  <Icon :src="iconForm" width="60px" height="60px" style="margin:5px 4px"/>
5
5
  <div class="form-button" @click="clickShowDialog">
6
- 立即填写
6
+ {{TUITranslateService.t("AIDesk.立即填写")}}
7
7
  </div>
8
8
  </div>
9
9
  <div class="edit-form">
@@ -46,7 +46,7 @@
46
46
  </div>
47
47
  <div class="button-container"v-if="!finishSubmit && props.payload.nodeStatus == 0">
48
48
  <div class="button" @click="handleSendForm">
49
- 提交
49
+ {{TUITranslateService.t("AIDesk.提交")}}
50
50
  </div>
51
51
 
52
52
  </div>
@@ -62,7 +62,7 @@
62
62
  </div>
63
63
 
64
64
  <div class="form-button" @click="clickShowDialog">
65
- 查看内容
65
+ {{TUITranslateService.t("AIDesk.查看内容")}}
66
66
  </div>
67
67
  </div>
68
68
  </div>
@@ -80,6 +80,7 @@ import RadioMobile from './component-mobile/radios-mobile.vue';
80
80
  import LabelMobile from './component-mobile/label-mobile.vue';
81
81
  import FormPopup from './component-mobile/form-popup.vue';
82
82
  import { CUSTOM_MESSAGE_SRC } from '../../../../../../../constant';
83
+ import {TUITranslateService} from '@tencentcloud/chat-uikit-engine';
83
84
  const { ref , onMounted,computed} = vue;
84
85
  interface Props {
85
86
  payload: customerServicePayloadType;
@@ -194,7 +195,8 @@ export default {
194
195
  handleInputChange,
195
196
  handleSendForm,
196
197
  closeDialog,
197
- isValid
198
+ isValid,
199
+ TUITranslateService
198
200
  }
199
201
  }
200
202
  }
@@ -6,7 +6,7 @@
6
6
  </div>
7
7
  <div class="form-finish-title-right" v-if="finishSubmit || props.payload.nodeStatus == 2" >
8
8
  <Icon :src="iconSucess" style="margin:0px 4px"/>
9
- 已提交
9
+ {{TUITranslateService.t("AIDesk.已提交")}}
10
10
  </div>
11
11
  </div>
12
12
 
@@ -28,7 +28,7 @@
28
28
 
29
29
  <div class="button-container"v-if="!finishSubmit && props.payload.nodeStatus == 0">
30
30
  <div class="button" @click="handleSendForm">
31
- 提交
31
+ {{TUITranslateService.t("AIDesk.提交")}}
32
32
  </div>
33
33
 
34
34
  </div>
@@ -44,6 +44,7 @@ import RadioPC from './component-pc/radio-pc.vue';
44
44
  import Icon from '../customer-icon.vue';
45
45
  import iconSucess from '../../../../../../../assets/icon_success.png';
46
46
  import { CUSTOM_MESSAGE_SRC } from '../../../../../../../constant';
47
+ import {TUITranslateService} from '@tencentcloud/chat-uikit-engine';
47
48
  const { ref, onMounted } = vue;
48
49
  interface Props {
49
50
  payload: customerServicePayloadType;
@@ -147,7 +148,8 @@ export default {
147
148
  mapValue,
148
149
  isSubmit,
149
150
  checkTip,
150
- isValid
151
+ isValid,
152
+ TUITranslateService
151
153
  };
152
154
  },
153
155
  };
@@ -21,7 +21,7 @@
21
21
  {{ props.payload.content.desc }}
22
22
  </div>
23
23
  <div class="product-card-link" @click="jumpProductCard">
24
- 跳转
24
+ {{TUITranslateService.t("AIDesk.跳转")}}
25
25
  </div>
26
26
  </div>
27
27
  </div>
@@ -31,7 +31,7 @@
31
31
  <script lang="ts">
32
32
  import { customerServicePayloadType } from '../../../../../../interface';
33
33
  import { isApp } from '../../../../../../utils/env';
34
-
34
+ import {TUITranslateService} from '@tencentcloud/chat-uikit-engine';
35
35
  // eslint-disable-next-line
36
36
  declare var uni: any;
37
37
 
@@ -67,38 +67,42 @@ export default {
67
67
  props,
68
68
  isApp,
69
69
  jumpProductCard,
70
+ TUITranslateService
70
71
  };
71
72
  },
72
73
  };
73
74
  </script>
74
75
  <style lang="scss" scoped>
75
76
  .message-product-card {
76
- min-width: 224px;
77
- max-width: 288px;
77
+ min-width: 200px;
78
+ max-width: 400px;
78
79
  display: flex;
79
- padding: 10px;
80
80
 
81
81
  .product-img {
82
82
  width: 75px;
83
83
  height: 75px;
84
84
  border-radius: 10px;
85
+ flex-shrink: 0;
86
+ object-fit: cover;
85
87
  }
86
88
 
87
89
  .product-card-information {
88
90
  width:100%;
89
- margin-left: 12px;
91
+ margin-left: 15px;
90
92
  margin-right:5px;
91
93
  display: flex;
92
94
  flex-direction: column;
93
95
  justify-content: space-between;
94
96
 
95
97
  .product-card-title {
96
- font-size: 16px;
97
- max-width: 165px;
98
+ max-width: 200px;
99
+ min-width: 100px;
100
+ color: #000000;
101
+ font-size: 14px;
98
102
  display: -webkit-box;
99
103
  overflow: hidden;
100
104
  text-overflow: ellipsis;
101
- -webkit-line-clamp: 3;
105
+ -webkit-line-clamp: 2;
102
106
  -webkit-box-orient: vertical;
103
107
  word-break: break-all;
104
108
  }
@@ -106,23 +110,29 @@ export default {
106
110
  .product-card-description-block {
107
111
  display:flex;
108
112
  justify-content: space-between;
113
+ align-items: center;
114
+ gap: 5px;
109
115
  }
110
116
 
111
117
  .product-card-description {
112
- font-size: 14px;
113
- max-width: 165px;
118
+ font-size: 12px;
119
+ max-width: 60px;
114
120
  color: #1c66e5;
115
121
  overflow: hidden;
116
122
  text-overflow: ellipsis;
117
123
  white-space: nowrap;
118
124
  font-weight: 600;
125
+ flex: 0 1 60px;
119
126
  }
120
127
 
121
128
  .product-card-link {
129
+ cursor: pointer;
122
130
  background-color: #1c66e5;
123
131
  color:#ffffff;
124
132
  padding:2px 12px;
125
133
  border-radius: 12px;
134
+ flex: 0 0 auto;
135
+ margin-left: auto;
126
136
  }
127
137
  }
128
138
  }
@@ -5,7 +5,7 @@
5
5
  </p>
6
6
 
7
7
  <div class="rating-card">
8
- <span class="card-title">请对本次服务进行评价</span>
8
+ <span class="card-title">{{ TUITranslateService.t("AIDesk.请对本次服务进行评价") }}</span>
9
9
  <div class="card-wrapper">
10
10
  <div style="max-width: 250px">
11
11
  <div
@@ -27,11 +27,11 @@
27
27
  </div>
28
28
  </div>
29
29
  </div>
30
- <div :style="{ marginTop: 10 + 'px', marginBottom: 10 + 'px' }">
30
+ <div :style="{ marginTop: 10 + 'px', marginBottom: 10 + 'px', wordBreak: 'normal' }">
31
31
  {{
32
32
  hoverValue === -1
33
33
  ? selectValue === -1
34
- ? "如果满意请给好评哦~"
34
+ ? TUITranslateService.t("AIDesk.如果满意请给好评哦~")
35
35
  : desc[selectValue]
36
36
  : desc[hoverValue]
37
37
  }}
@@ -41,7 +41,7 @@
41
41
  :disabled="hasReply || hasExpire"
42
42
  @click="submitRatingStar"
43
43
  >
44
- 提交评价
44
+ {{ TUITranslateService.t("AIDesk.提交评价") }}
45
45
  </button>
46
46
  </div>
47
47
  <p
@@ -60,6 +60,7 @@
60
60
  import vue from '../../../../../../../adapter-vue';
61
61
  import { CUSTOM_MESSAGE_SRC } from '../../../../../../../constant';
62
62
  import { ratingTemplateType } from '../../../../../../../interface';
63
+ import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
63
64
  const { computed, ref, watchEffect } = vue;
64
65
 
65
66
  interface Props {
@@ -148,6 +149,7 @@ export default {
148
149
  setValue,
149
150
  setHoverValue,
150
151
  submitRatingStar,
152
+ TUITranslateService
151
153
  };
152
154
  },
153
155
  };
@@ -172,7 +174,6 @@ export default {
172
174
 
173
175
  .rating-card {
174
176
  min-width: 270px;
175
- width: 50%;
176
177
  background: #fbfbfb;
177
178
  border-radius: 20px;
178
179
  border: 0;
@@ -202,7 +203,6 @@ export default {
202
203
  }
203
204
 
204
205
  .submit-button {
205
- width: 50%;
206
206
  height: 50px;
207
207
  background-color: #0365f9;
208
208
  font-size: 18px;
@@ -4,7 +4,7 @@
4
4
  {{ props.ratingTemplate.head }}
5
5
  </p>
6
6
  <div class="rating-card">
7
- <span class="card-title">请对本次服务进行评价</span>
7
+ <span class="card-title">{{ TUITranslateService.t("AIDesk.请对本次服务进行评价") }}</span>
8
8
  <div class="card-wrapper">
9
9
  <div style="max-width: 200px">
10
10
  <div
@@ -30,11 +30,11 @@
30
30
  </div>
31
31
  </div>
32
32
  </div>
33
- <div :style="{ marginTop: 10 + 'px', marginBottom: 10 + 'px' }">
33
+ <div :style="{ marginTop: 10 + 'px', marginBottom: 10 + 'px', wordBreak: 'normal' }">
34
34
  {{
35
35
  hoverValue === -1
36
36
  ? value === -1
37
- ? "如果满意请给好评哦~"
37
+ ? TUITranslateService.t("AIDesk.如果满意请给好评哦~")
38
38
  : desc[value]
39
39
  : desc[hoverValue]
40
40
  }}
@@ -44,7 +44,7 @@
44
44
  :disabled="hasReply || hasExpire"
45
45
  @click="submitRatingStar"
46
46
  >
47
- 提交评价
47
+ {{ TUITranslateService.t("AIDesk.提交评价") }}
48
48
  </button>
49
49
  </div>
50
50
  <p
@@ -66,6 +66,7 @@ import { ratingTemplateType } from '../../../../../../../interface';
66
66
  import star from '../../../../../../../assets/star.png';
67
67
  import starLine from '../../../../../../../assets/starLine.png';
68
68
  import Icon from '../customer-icon.vue';
69
+ import { TUITranslateService } from '@tencentcloud/chat-uikit-engine';
69
70
  const { computed, ref, watchEffect } = vue;
70
71
 
71
72
  interface Props {
@@ -169,6 +170,7 @@ export default {
169
170
  submitRatingStar,
170
171
  star,
171
172
  starLine,
173
+ TUITranslateService
172
174
  };
173
175
  },
174
176
  };
@@ -193,7 +195,6 @@ export default {
193
195
 
194
196
  .rating-card {
195
197
  min-width: 250px;
196
- width: 50%;
197
198
  background: #fbfbfb;
198
199
  border-radius: 20px;
199
200
  border: 0;
@@ -223,15 +224,14 @@ export default {
223
224
  }
224
225
 
225
226
  .submit-button {
226
- width: 40%;
227
- height: 35px;
228
- background-color: #0365f9;
229
- font-size: 14px;
230
- font-weight: 400;
231
- color: white;
232
- border: 0;
233
- border-radius: 8px;
234
- cursor: pointer;
227
+ height: 35px;
228
+ background-color: #0365f9;
229
+ font-size: 14px;
230
+ font-weight: 400;
231
+ color: white;
232
+ border: 0;
233
+ border-radius: 8px;
234
+ cursor: pointer;
235
235
  }
236
236
 
237
237
  </style>