SearchPortalPage.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <view class="search-portal-container">
  3. <input class="input" type="text" v-model="keyword" :placeholder="$t('common.search')" @input="search">
  4. <SearchResultView :query="keyword" :options="options" v-if="keyword && keyword.trim()"/>
  5. <view v-else class="tip-container">
  6. <text>请输入关键字进行搜索</text>
  7. </view>
  8. </view>
  9. </template>
  10. <script>
  11. import SearchResultView from "./SearchResultView";
  12. import store from "../../store";
  13. export default {
  14. name: "SearchPortalPage",
  15. components: {SearchResultView},
  16. data() {
  17. return {
  18. keyword: '',
  19. type: 'all',
  20. options: {
  21. user: true,
  22. contact: true,
  23. conversation: true,
  24. group: true,
  25. }
  26. }
  27. },
  28. onLoad(option) {
  29. let queryOption = (query) => option[query] ? option[query] === 'true' : true;
  30. this.options.user = queryOption('user')
  31. this.options.group = queryOption('group')
  32. this.options.contact = queryOption('contact')
  33. this.options.conversation = queryOption('conversation')
  34. },
  35. methods: {
  36. search() {
  37. store.setSearchQuery(this.keyword, this.options)
  38. }
  39. }
  40. }
  41. </script>
  42. <style scoped>
  43. .search-portal-container {
  44. height: 100vh;
  45. position: relative;
  46. }
  47. .search-portal-container input {
  48. padding: 5px 10px;
  49. height: 35px;
  50. box-sizing: border-box;
  51. border-bottom: 1px solid lightgrey;
  52. position: fixed;
  53. width: 100%;
  54. top: 0;
  55. left: 0;
  56. background-color: white;
  57. z-index: 99;
  58. }
  59. .search-portal-container .tip-container {
  60. display: flex;
  61. height: 100%;
  62. justify-content: center;
  63. align-items: center;
  64. color: grey;
  65. }
  66. </style>