SearchBox.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <template>
  2. <view class='search-content'>
  3. <!-- 首页搜索 -->
  4. <view class="search-box" v-if="typeFlag == 'base'" @click="toPage">
  5. <view class="search-left">
  6. <!-- <text class="icon">&#xe885;</text> -->
  7. <IconText class="icon" :code="`\ue885`" size="14" color="#BFBFBF"></IconText>
  8. <input type="text" value="" placeholder="搜索商品名称/品牌/品类" disabled="false" />
  9. </view>
  10. <text class="search-btn">搜索</text>
  11. </view>
  12. <!-- 搜索页面搜索 -->
  13. <view class="search-box1" v-if="typeFlag == 'searchPage'">
  14. <view class="search-left1">
  15. <IconText class="icon1" :code="`\ue885`" size="14" color="#BFBFBF"></IconText>
  16. <input type="text" class="input-styl1" placeholder-class="placeholder" confirm-type="search" :value="searchContent" @input="changeInput"
  17. @confirm="inputSearch" placeholder="搜索商品名称" />
  18. <!-- <text class="icon1" v-if="iconShow == true" @click="deleteContent">&#xe70e;</text> -->
  19. <IconText class="icon1" :code="`\ue88a`" size="16" color="#999"></IconText>
  20. </view>
  21. <text class="search-btn1" @click="clickCancel">取消</text>
  22. </view>
  23. </view>
  24. </template>
  25. <script lang='ts'>
  26. import {
  27. Component,
  28. Prop,
  29. Watch,
  30. Emit,
  31. Vue
  32. } from 'vue-property-decorator';
  33. @Component({})
  34. export default class SearchBox extends Vue {
  35. @Prop({
  36. default: "base"
  37. }) private typeFlag ? : string; //搜索框类型
  38. @Prop({
  39. default: ""
  40. }) private searchTitle ? : string; //搜索内容 父->子
  41. searchContent: string = ''; //搜索框内容
  42. iconShow: boolean = false; //搜索框删除icon
  43. // methods
  44. //@input修改input内容
  45. changeInput(e: any) {
  46. this.searchContent = e.detail.value;
  47. }
  48. //删除筛选内容
  49. deleteContent() {
  50. this.searchContent = '';
  51. }
  52. //跳转页面
  53. toPage() {
  54. this.$Router.push({
  55. path: '/packages/goods/search',
  56. query: {}
  57. });
  58. }
  59. // emit-----------------------
  60. @Emit('cancelEvent') //点击取消按钮
  61. //点击取消按钮
  62. clickCancel() {
  63. this.searchContent = '';
  64. }
  65. @Emit('inputSearch') //点击键盘上的搜索
  66. inputSearch() {
  67. if (this.searchContent == '') {
  68. // uni.showToast({
  69. // title: '请输入搜索内容',
  70. // icon: 'none'
  71. // });
  72. return "";
  73. } else {
  74. return this.searchContent;
  75. }
  76. }
  77. // watch-------------------
  78. @Watch('searchContent') //监听是否有搜索内容,展示删除icon
  79. changeIconShow() {
  80. this.iconShow = this.searchContent !== '';
  81. }
  82. @Watch('searchTitle') //监听父组件点击历史搜索记录,更新搜索title
  83. changeSearchContent() {
  84. if (this.searchTitle !== '') {
  85. this.searchContent = this.searchTitle || '';
  86. }
  87. }
  88. }
  89. </script>
  90. <style lang='scss' scoped>
  91. .search-content {
  92. font-size: vw(14);
  93. .search-box {
  94. @include flex-x();
  95. @include wh(348, 32);
  96. margin: 0 auto;
  97. background-color: #F6F6F6;
  98. border-radius: vw(8);
  99. .search-left {
  100. @include flex-x();
  101. .icon {
  102. margin: 0 vw(10);
  103. @include icon(14);
  104. }
  105. }
  106. .search-btn {
  107. padding-left: vw(12);
  108. margin-right: vw(13);
  109. border-left: 1px solid #E3E3E3;
  110. color: $btn-color;
  111. flex-shrink: 0;
  112. }
  113. }
  114. .search-box1 {
  115. @include flex-x();
  116. @include wh(348, 32);
  117. margin: 0 auto;
  118. .search-left1 {
  119. @include flex-x(flex-start);
  120. @include wh(293, 32);
  121. border-radius: vw(8);
  122. background-color: #F6F6F6;
  123. .icon1 {
  124. margin: 0 vw(10);
  125. @include icon(14);
  126. }
  127. .input-styl1 {
  128. width: 80%;
  129. }
  130. .placeholder{
  131. color: #999;
  132. }
  133. }
  134. .search-btn1 {
  135. padding-left: vw(12);
  136. margin-right: vw(13);
  137. color: $btn-color;
  138. }
  139. }
  140. }
  141. </style>