25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

65 satır
1.4 KiB

  1. <template>
  2. <view id="contact" class="page">
  3. <!-- 顶部搜索栏 -->
  4. <l-banner v-model="searchText" placeholder="搜索公司名/部门名/职员姓名" type="search" noSearchButton fixed fill />
  5. <!-- 树形列表 -->
  6. <l-organize-tree v-if="ready && !searchText" @userClick="userClick" />
  7. <!-- 如果用户输入了搜索关键字,只列出用户 -->
  8. <view v-else-if="ready" class="user-item-list">
  9. <l-organize-single-item v-for="item of searchList" @click="userClick" :key="item.id" :item="item" />
  10. </view>
  11. </view>
  12. </template>
  13. <script>
  14. export default {
  15. data() {
  16. return {
  17. treeRoot: {},
  18. searchText: '',
  19. ready: true
  20. }
  21. },
  22. onPullDownRefresh() {
  23. this.ready = false
  24. this.$nextTick(() => {
  25. this.ready = true
  26. uni.stopPullDownRefresh()
  27. })
  28. },
  29. methods: {
  30. // 处理点击用户的场合,跳转到消息页
  31. userClick(item) {
  32. return
  33. this.NAV_TO(`/pages/msg/chat?id=${item.id}&name=${item.name}`)
  34. }
  35. },
  36. computed: {
  37. // 用户输入关键字搜索时的列表
  38. searchList() {
  39. if (!this.searchText) {
  40. return []
  41. }
  42. return Object.entries(this.GET_GLOBAL('user'))
  43. .filter(([id, item]) => item.name.includes(this.searchText))
  44. .map(([id, item]) => ({
  45. ...item,
  46. type: 'user',
  47. id
  48. }))
  49. }
  50. }
  51. }
  52. </script>
  53. <style lang="less">
  54. page {
  55. padding-top: 100rpx;
  56. }
  57. </style>