58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <RatingStar
 | |
|     v-if="ratingTemplate.type === RATING_TEMPLATE_TYPE.STAR"
 | |
|     :ratingTemplate="ratingTemplate"
 | |
|     @sendMessage="sendCustomMessage"
 | |
|   />
 | |
|   <RatingNumber
 | |
|     v-else
 | |
|     :ratingTemplate="ratingTemplate"
 | |
|     @sendMessage="sendCustomMessage"
 | |
|   />
 | |
| </template>
 | |
| 
 | |
| <script lang="ts">
 | |
| import vue from '../../adapter-vue';
 | |
| import { JSONToObject } from '../../utils/index';
 | |
| import { RATING_TEMPLATE_TYPE } from '../../constant';
 | |
| import RatingStar from './message-rating-star.vue';
 | |
| import RatingNumber from './message-rating-number.vue';
 | |
| import { IMessageModel } from '../../interface';
 | |
| 
 | |
| const { computed } = vue;
 | |
| 
 | |
| interface Props {
 | |
|   message: IMessageModel;
 | |
| }
 | |
| 
 | |
| export default {
 | |
|   components: {
 | |
|     RatingStar,
 | |
|     RatingNumber,
 | |
|   },
 | |
|   props: {
 | |
|     message: {
 | |
|       type: Object as () => IMessageModel,
 | |
|       default: () => ({}),
 | |
|     },
 | |
|   },
 | |
|   emits: ['sendMessage'],
 | |
|   setup(props: Props, { emit }) {
 | |
|     const ratingTemplate = computed(() => {
 | |
|       const data = props.message && JSONToObject(props.message.payload.data);
 | |
|       return data?.menuContent;
 | |
|     });
 | |
| 
 | |
|     const sendCustomMessage = (data: any) => {
 | |
|       emit('sendMessage', data);
 | |
|     };
 | |
| 
 | |
|     return {
 | |
|       sendCustomMessage,
 | |
|       ratingTemplate,
 | |
|       RATING_TEMPLATE_TYPE,
 | |
|     };
 | |
|   },
 | |
| };
 | |
| </script>
 |