165 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			165 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
|  | <template> | ||
|  |   <div class="welcome-card"> | ||
|  |     <div class="welcome-title"> | ||
|  |       <div class="welcome-title-left-container"> | ||
|  |         <Icon :src="imRobotGuess" /> | ||
|  |         <p | ||
|  |           v-if="title" | ||
|  |           class="card-title" | ||
|  |         > | ||
|  |           {{ title }} | ||
|  |         </p> | ||
|  |       </div> | ||
|  |       <div | ||
|  |         class="change-wrapper" | ||
|  |         @click="changeBranchList()" | ||
|  |       > | ||
|  |         <Icon :src="refresh" /> | ||
|  |       </div> | ||
|  |     </div> | ||
|  |     <div | ||
|  |       v-for="(item, index) in showList" | ||
|  |       :key="index" | ||
|  |       class="welcome-item" | ||
|  |       @click="handleContentListItemClick(item)" | ||
|  |     > | ||
|  |       <div>{{ item.content }}</div> | ||
|  |       <Icon :src="iconRight" /> | ||
|  |     </div> | ||
|  |   </div> | ||
|  | </template> | ||
|  | 
 | ||
|  | <script lang="ts"> | ||
|  | import vue from '../adapter-vue'; | ||
|  | import imRobotGuess from '../assets/imRobotGuess.svg'; | ||
|  | import refresh from '../assets/refresh.svg'; | ||
|  | import iconRight from '../assets/iconRight.svg'; | ||
|  | import Icon from './customer-icon.vue'; | ||
|  | import { customerServicePayloadType } from '../interface'; | ||
|  | 
 | ||
|  | const { reactive, toRefs } = vue; | ||
|  | 
 | ||
|  | interface Props { | ||
|  |   payload: customerServicePayloadType; | ||
|  | } | ||
|  | 
 | ||
|  | interface welcomeBranchItem { | ||
|  |   id: string; | ||
|  |   content: string; | ||
|  |   answer: string; | ||
|  | } | ||
|  | 
 | ||
|  | export default { | ||
|  |   components: { | ||
|  |     Icon, | ||
|  |   }, | ||
|  |   props: { | ||
|  |     payload: { | ||
|  |       type: Object as () => customerServicePayloadType, | ||
|  |       default: () => ({ content: { title: '', items: [] } }), | ||
|  |     }, | ||
|  |   }, | ||
|  |   emits: ['sendMessage'], | ||
|  |   setup(props: Props, { emit }) { | ||
|  |     const data = reactive({ | ||
|  |       // title
 | ||
|  |       title: props.payload?.content?.title || '', | ||
|  |       // all branch list
 | ||
|  |       list: props.payload?.content?.items || [], | ||
|  |       // current branch list
 | ||
|  |       showList: (props.payload?.content?.items || []).slice(0, 5), | ||
|  |       // current page number
 | ||
|  |       pageNumber: 1, | ||
|  |     }); | ||
|  | 
 | ||
|  |     const handleContentListItemClick = (branch: welcomeBranchItem) => { | ||
|  |       emit('sendMessage', { text: branch.content }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     const changeBranchList = () => { | ||
|  |       if (data.pageNumber * 5 >= data.list?.length) { | ||
|  |         data.pageNumber = 0; | ||
|  |       } | ||
|  |       data.showList = data.list?.slice( | ||
|  |         data.pageNumber * 5, | ||
|  |         data.pageNumber * 5 + 5, | ||
|  |       ); | ||
|  |       data.pageNumber += 1; | ||
|  |     }; | ||
|  | 
 | ||
|  |     return { | ||
|  |       ...toRefs(data), | ||
|  |       handleContentListItemClick, | ||
|  |       imRobotGuess, | ||
|  |       refresh, | ||
|  |       iconRight, | ||
|  |       changeBranchList, | ||
|  |     }; | ||
|  |   }, | ||
|  | }; | ||
|  | </script> | ||
|  | 
 | ||
|  | <style lang="scss"> | ||
|  | .welcome-card { | ||
|  |   min-width: 250px; | ||
|  |   max-width: 350px; | ||
|  | 
 | ||
|  |   .welcome-title { | ||
|  |     display: flex; | ||
|  |     height: 40px; | ||
|  |     justify-content: space-between; | ||
|  |     align-items: center; | ||
|  |   } | ||
|  | 
 | ||
|  |   .welcome-title-left-container { | ||
|  |     display: flex; | ||
|  |     align-items: center; | ||
|  |   } | ||
|  | 
 | ||
|  |   .card-title { | ||
|  |     display: inline-block; | ||
|  |     margin-left: 8px; | ||
|  |     font-size: 16px; | ||
|  |   } | ||
|  | 
 | ||
|  |   .el-link { | ||
|  |     display: block; | ||
|  |     font-weight: 400; | ||
|  |     padding-top: 5px; | ||
|  |     padding-bottom: 5px; | ||
|  |   } | ||
|  | 
 | ||
|  |   /* stylelint-disable */ | ||
|  |   .el-link__inner { | ||
|  |     display: flex; | ||
|  |     justify-content: space-between; | ||
|  |     align-items: center; | ||
|  |   } | ||
|  |   /* stylelint-enable */ | ||
|  | 
 | ||
|  |   .branch-number { | ||
|  |     margin-left: 15px; | ||
|  |     margin-right: 15px; | ||
|  |     font-size: 20px; | ||
|  |     display: inline-block; | ||
|  |   } | ||
|  | 
 | ||
|  |   .change-wrapper { | ||
|  |     cursor: pointer; | ||
|  |   } | ||
|  | 
 | ||
|  |   .welcome-item { | ||
|  |     padding: 6px; | ||
|  |     color: #999; | ||
|  |     display: flex; | ||
|  |     justify-content: space-between; | ||
|  |     align-items: center; | ||
|  |     cursor: pointer; | ||
|  |   } | ||
|  | 
 | ||
|  |   .welcome-item:hover { | ||
|  |     background: #f2f7ff; | ||
|  |   } | ||
|  | } | ||
|  | </style> |