95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="custom">
 | |
|     <div
 | |
|       v-if="
 | |
|         payload.src === CUSTOM_MESSAGE_SRC.BRANCH ||
 | |
|           payload.src === CUSTOM_MESSAGE_SRC.BRANCH_NUMBER ||
 | |
|           (payload.src === CUSTOM_MESSAGE_SRC.ROBOT_MSG &&
 | |
|             payload.subtype !== 'welcome_msg')
 | |
|       "
 | |
|     >
 | |
|       <MessageBranch
 | |
|         :payload="payload"
 | |
|         @sendMessage="sendTextMessage"
 | |
|       />
 | |
|     </div>
 | |
|     <div
 | |
|       v-if="
 | |
|         payload.src === CUSTOM_MESSAGE_SRC.ROBOT_MSG &&
 | |
|           payload.subtype === 'welcome_msg'
 | |
|       "
 | |
|     >
 | |
|       <MessageIMRobotWelcome
 | |
|         :payload="payload"
 | |
|         @sendMessage="sendTextMessage"
 | |
|       />
 | |
|     </div>
 | |
|     <div v-if="payload.src === CUSTOM_MESSAGE_SRC.FROM_INPUT">
 | |
|       <MessageForm
 | |
|         :payload="payload"
 | |
|         @sendMessage="sendTextMessage"
 | |
|       />
 | |
|     </div>
 | |
|     <div v-if="payload.src === CUSTOM_MESSAGE_SRC.PRODUCT_CARD">
 | |
|       <MessageProductCard :payload="payload" />
 | |
|     </div>
 | |
|     <div v-if="payload.src === CUSTOM_MESSAGE_SRC.RICH_TEXT">
 | |
|       <MessageRichText :payload="payload" />
 | |
|     </div>
 | |
|     <div v-if="payload.src === CUSTOM_MESSAGE_SRC.STREAM_TEXT">
 | |
|       <MessageStream :payload="payload" />
 | |
|     </div>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script lang="ts">
 | |
| import vue from '../adapter-vue';
 | |
| import { JSONToObject } from '../utils/index';
 | |
| import { CUSTOM_MESSAGE_SRC } from '../constant';
 | |
| import { customerServicePayloadType, IMessageModel } from '../interface';
 | |
| import MessageBranch from './message-branch.vue';
 | |
| import MessageForm from './message-form/index.vue';
 | |
| import MessageIMRobotWelcome from './message-robot-welcome.vue';
 | |
| import MessageProductCard from './message-product-card.vue';
 | |
| import MessageRichText from './message-rich-text.vue';
 | |
| import MessageStream from './message-stream.vue';
 | |
| 
 | |
| const { computed } = vue;
 | |
| 
 | |
| interface Props {
 | |
|   message: IMessageModel;
 | |
| }
 | |
| 
 | |
| export default {
 | |
|   components: {
 | |
|     MessageBranch,
 | |
|     MessageForm,
 | |
|     MessageProductCard,
 | |
|     MessageRichText,
 | |
|     MessageIMRobotWelcome,
 | |
|     MessageStream,
 | |
|   },
 | |
|   props: {
 | |
|     message: {
 | |
|       type: Object as () => IMessageModel,
 | |
|       default: () => ({}),
 | |
|     },
 | |
|   },
 | |
|   emits: ['sendMessage'],
 | |
|   setup(props: Props, { emit }) {
 | |
|     const payload = computed<customerServicePayloadType>(() => {
 | |
|       return props.message && JSONToObject(props.message?.payload?.data);
 | |
|     });
 | |
| 
 | |
|     const sendTextMessage = (text: string) => {
 | |
|       emit('sendMessage', text);
 | |
|     };
 | |
|     return {
 | |
|       payload,
 | |
|       sendTextMessage,
 | |
|       CUSTOM_MESSAGE_SRC,
 | |
|     };
 | |
|   },
 | |
| };
 | |
| </script>
 |