You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

64 lines
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. this.NAV_TO(`/pages/msg/chat?id=${item.id}&name=${item.name}`)
  33. }
  34. },
  35. computed: {
  36. // 用户输入关键字搜索时的列表
  37. searchList() {
  38. if (!this.searchText) {
  39. return []
  40. }
  41. return Object.entries(this.GET_GLOBAL('user'))
  42. .filter(([id, item]) => item.name.includes(this.searchText))
  43. .map(([id, item]) => ({
  44. ...item,
  45. type: 'user',
  46. id
  47. }))
  48. }
  49. }
  50. }
  51. </script>
  52. <style lang="less">
  53. page {
  54. padding-top: 100rpx;
  55. }
  56. </style>