80 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
|  | <template> | ||
|  |   <div | ||
|  |     v-if="content.type === 1" | ||
|  |     class="message-form" | ||
|  |   > | ||
|  |     <FormBranch | ||
|  |       :title="content.header" | ||
|  |       :list="content.items" | ||
|  |       @input-click="handleContentListItemClick" | ||
|  |     /> | ||
|  |   </div> | ||
|  |   <div | ||
|  |     v-else | ||
|  |     class="message-form" | ||
|  |   > | ||
|  |     <FormInput | ||
|  |       :title="content.header" | ||
|  |       @input-submit="handleFormSaveInputSubmit" | ||
|  |     /> | ||
|  |   </div> | ||
|  | </template> | ||
|  | 
 | ||
|  | <script lang="ts"> | ||
|  | import vue from '../../adapter-vue'; | ||
|  | import FormBranch from './form-branch.vue'; | ||
|  | import FormInput from './form-input.vue'; | ||
|  | 
 | ||
|  | const { computed } = vue; | ||
|  | 
 | ||
|  | interface branchItem { | ||
|  |   content: string; | ||
|  |   desc: string; | ||
|  | } | ||
|  | 
 | ||
|  | interface Props { | ||
|  |   payload: any; | ||
|  | } | ||
|  | 
 | ||
|  | export default { | ||
|  |   components: { | ||
|  |     FormBranch, | ||
|  |     FormInput, | ||
|  |   }, | ||
|  |   props: { | ||
|  |     payload: { | ||
|  |       type: Object, | ||
|  |       default: () => ({}), | ||
|  |     }, | ||
|  |   }, | ||
|  |   emits: ['sendMessage'], | ||
|  |   setup(props: Props, { emit }) { | ||
|  |     const content = computed(() => { | ||
|  |       return props.payload?.content || { | ||
|  |         type: 0, | ||
|  |         header: '', | ||
|  |         items: [], | ||
|  |       }; | ||
|  |     }); | ||
|  | 
 | ||
|  |     const handleContentListItemClick = (branch: branchItem) => { | ||
|  |       emit('sendMessage', { text: branch.content }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     const handleFormSaveInputSubmit = (text: string) => { | ||
|  |       emit('sendMessage', { text }); | ||
|  |     }; | ||
|  |     return { | ||
|  |       content, | ||
|  |       handleContentListItemClick, | ||
|  |       handleFormSaveInputSubmit, | ||
|  |     }; | ||
|  |   }, | ||
|  | }; | ||
|  | </script> | ||
|  | <style lang="scss"> | ||
|  | .message-form { | ||
|  |   max-width: 300px; | ||
|  | } | ||
|  | </style> |