index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <u-picker
  3. showToolbar
  4. :show="showPicker"
  5. :immediateChange='true'
  6. :columns="[options?options:option]"
  7. keyName='text'
  8. :cancelText="$t('settings.cancelText')"
  9. :confirmText="$t('settings.confirmText')"
  10. @cancel="showPicker = false"
  11. @confirm="onConfirm"
  12. >
  13. <view class="search-box" v-if="hasSearch==true">
  14. <view class="input-wrap">
  15. <u-search
  16. bgColor='#f2f2f2'
  17. :showAction='false'
  18. :placeholder="$t('base.common.inputPlaceholder')"
  19. @search="search"
  20. @clear='search'
  21. v-model="searchText">
  22. </u-search>
  23. <view class="search-btn" @click="search">{{$t("customer_meter.search")}}</view>
  24. </view>
  25. </view>
  26. </u-picker>
  27. </template>
  28. <script>
  29. export default {
  30. data(){
  31. return {
  32. showPicker:false,
  33. searchText:'',
  34. options:null,
  35. }
  36. },
  37. props:{
  38. kind:{
  39. type:String,
  40. },
  41. hasSearch:{
  42. type:Boolean,
  43. default: false,
  44. },
  45. option:{
  46. type:Array,
  47. default:[],
  48. }
  49. },
  50. methods:{
  51. onConfirm(item){
  52. console.log("选择框信息、已选择信息、",this.options,item)
  53. this.showPicker=false
  54. this.$emit('onConfirm',item.value[0],this.kind)
  55. },
  56. search(){
  57. // this.$emit('search',this.searchText,this.kind)
  58. if(this.searchText){
  59. let arr=[]
  60. this.option.forEach(item=>{
  61. if(item.text.indexOf(this.searchText) != -1 ){
  62. arr.push(item)
  63. }
  64. })
  65. console.log(arr);
  66. this.options=arr
  67. }else{
  68. this.options=JSON.parse(JSON.stringify(this.option))
  69. }
  70. }
  71. }
  72. }
  73. </script>
  74. <style lang="less" scoped>
  75. .search-box{
  76. padding: 10px 16px 0;
  77. .input-wrap{
  78. flex: 1;
  79. display: flex;
  80. background-color: #f2f2f2;
  81. border-radius: 100rpx;
  82. align-items: center;
  83. margin-right: 20rpx;
  84. .search-btn{
  85. align-items: center;
  86. margin-right: 32rpx;
  87. padding-left: 20rpx;
  88. height: 44rpx;
  89. line-height: 44rpx;
  90. color: #333;
  91. border-left: 1px solid #d3d3d3;
  92. }
  93. }
  94. }
  95. </style>