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> |