效果  
 
 代码  
< template> < view class = "flexStart new-box" > < view class = "company" > < ! --  输入框样式 -- > < view class = "spaceBetween companyName"  @click. stop= "isCompany = true" > < input type= "text" : style= "result.userName.length > 0 ? 'padding-right: 90rpx !important;' : 'padding-right: 0rpx !important;'" @input= "companyInput"  v- model= "result.userName"  placeholder= "请输入文本内容"  placeholder- class = "placeholderClass"  / > < ! --  清除按钮,使用的是icon,直接拷代码会失效 -- > < view v- if = "result.userName != ''"  @click. stop= "clearCompany"  class = "close center" > < text class = "iconfont icon-icon-qingchu" > < / text> < / view> < / view> < ! --  列表循环 -- > < scroll- view v- if = "isCompany"  scroll- y= "true"  class = "companyPrick" > < view v- for = "(item,index) in filterMsg"  : key= "index"  @click= "prickCompany(item)" class = "companyPrick-item" > < ! --  每一行的字做拆分,匹配合格的返回 true  高亮 -- > < span : class = "dealStr(str) ? 'hightLight' : ''"  v- for = "(str,strIndex) in item.name" : key= "strIndex" > { { str} } < / span> < / view> < / scroll- view> < ! --  三角形样式 -- > < view v- if = "isCompany"  class = "triangle" > < / view> < / view> < / view> 
< / template> < script setup lang= "ts" > import  {  ref }  from  'vue' ; import  {  onLoad }  from  '@dcloudio/uni-app' ; const  isCompany =  ref ( false )  const  result =  ref ( {  "userName" :  "" , "userId" :  0 , } ) const  companyList =  ref ( [  { "id" :  284 , "name" :  "测试智能公司" , } , { "id" :  286 , "name" :  "北京文娱有限公司" , } , { "id" :  289 , "name" :  "广州市天河快递有限公司" , } , { "id" :  290 , "name" :  "广东天河电子科技有限公司" , } , { "id" :  291 , "name" :  "广州市天河汽车维修服务有限公司" , } , { "id" :  293 , "name" :  "智能化工厂" , } , { "id" :  294 , "name" :  "广州天河物联智能科技有限公司" , } , { "id" :  295 , "name" :  "测试工程开发" , } , { "id" :  300 , "name" :  "广东立智科技" , } , { "id" :  302 , "name" :  "广州番禺云服务科技" , } ] ) const  filterMsg =  ref ( [ ] )  function  companyInput ( )  { let  queryStringArr =  result. value. userName. split ( "" ) ; let  str =  "(.*?)" ; filterMsg. value =  [ ] ; let  regStr =  str +  queryStringArr. join ( str)  +  str; let  reg =  RegExp ( regStr,  "i" ) ;  companyList. value. map ( item  =>  { if  ( reg. test ( item. name) )  { filterMsg. value. push ( item) ; } } ) ; if  ( result. value. userName ==  '' )  { filterMsg. value =  companyList. value} } function  dealStr ( str  :  string)  { let  status =  false for  ( let  i =  0 ;  i <  result. value. userName. length;  i++ )  { if  ( result. value. userName[ i]  ==  str)  { status =  true } } return  status} function  prickCompany ( item  :  any)  { result. value. userId =  item. id as  numberresult. value. userName =  item. nameisCompany. value =  false companyInput ( ) } function  clearCompany ( )  { result. value. userId =  0 result. value. userName =  "" filterMsg. value =  companyList. value} onLoad ( ( )  =>  { filterMsg. value =  companyList. value} ) 
< / script> < style lang= "scss" > . new- box { width :  100vw; height :  100vh; flex- flow:  column; } . flexStart { display :  flex; justify- content:  flex- start; align- items:  center; } . spaceBetween { display :  flex; justify- content:  space- between; align- items:  center; } . center { display :  flex; justify- content:  center; align- items:  center; } . company { margin- top:  20vh; border- radius:  20rpx; flex- flow:  column; display :  flex; justify- content:  space- between; align- items:  flex- start; position :  relative; box- shadow:  0rpx 0rpx 20rpx 0rpx rgba ( 0 ,  82 ,  217 ,  0.3 ) ; . titleName { padding :  20rpx 32rpx 0  32rpx; font- weight:  600 ; font- size:  32rpx; } . companyName { width :  686rpx; font- family:  PingFang SC ,  PingFang SC ; font- weight:  600 ; font- size:  36rpx; position :  relative; input { padding :  20rpx 32rpx 20rpx 32rpx; width :  622rpx; color :  #3D3D3D; } . close { right :  0 ; padding :  20rpx; position :  absolute; width :  42rpx; height :  42rpx; } . icon- icon- qingchu { font- size:  36rpx; color :  rgba ( 0 ,  0 ,  0 ,  0.40 ) ; } } . companyPrick { box- shadow:  0rpx 0rpx 20rpx 0rpx rgba ( 0 ,  82 ,  217 ,  0.3 ) ; z- index:  99 ; left :  0rpx; position :  absolute; top :  140rpx; width :  622rpx; min- height:  60rpx; max- height:  400rpx; background :  #FFFFFF ; border- radius:  16rpx; padding :  20rpx 32rpx; . companyPrick- item { padding :  20rpx 0 ; font- family:  PingFang SC ,  PingFang SC ; font- weight:  600 ; font- size:  32rpx; color :  #3D3D3D; } } } . rowTime { display :  flex; flex- flow:  row; justify- content:  space- between; align- items:  center; } . hightLight { color :  rgba ( 0 ,  82 ,  217 ,  1 ) ; } . triangle { z- index:  100 ; position :  absolute; top :  120rpx; right :  68rpx; width :  0 ; height :  0 ; border- left:  10px solid transparent; border- right:  10px solid transparent; border- bottom:  10px solid white; } . placeholderClass{ color :  rgba ( 0 , 0 , 0 , 0.26 )  ! important; } 
< / style>