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