ContactMenus.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <view class="">
  3. <view class="menu_list">
  4. <view @click="menuClick(item)" v-for="item in getMenus" :key="item.idx" class="menu_list_item">
  5. <image class="menu_icon" :src="item.icon" mode=""></image>
  6. <view class="item_content">
  7. <text class="title">
  8. {{ item.title }}
  9. </text>
  10. <view class="icon">
  11. <u-badge max="99" :value="item.badge"></u-badge>
  12. <u-icon name="arrow-right" color="#999" size="18" />
  13. </view>
  14. </view>
  15. </view>
  16. </view>
  17. <view class="menu_list">
  18. <view @click="menuClick(item)" v-for="item in getFriendsMenus" :key="item.idx" class="menu_list_item">
  19. <image class="menu_icon" :src="item.icon" mode=""></image>
  20. <view class="item_content">
  21. <text class="title">
  22. {{ item.title }}
  23. </text>
  24. <view class="icon">
  25. <u-badge max="99" :value="item.badge"></u-badge>
  26. <u-icon name="arrow-right" color="#999" size="18" />
  27. </view>
  28. </view>
  29. </view>
  30. </view>
  31. <view class="menu_list">
  32. <view @click="menuClick(item)" v-for="item in getMomentsMenus" :key="item.idx" class="menu_list_item">
  33. <image class="menu_icon" :src="item.icon" mode=""></image>
  34. <view class="item_content">
  35. <text class="title">
  36. {{ item.title }}
  37. </text>
  38. <view class="icon">
  39. <u-badge max="99" :value="item.badge"></u-badge>
  40. <u-icon name="arrow-right" color="#999" size="18" />
  41. </view>
  42. </view>
  43. </view>
  44. </view>
  45. </view>
  46. </template>
  47. <script>
  48. import { mapGetters } from 'vuex';
  49. import { ContactMenuTypes } from '../../../../constant';
  50. export default {
  51. name: '',
  52. props: {},
  53. data() {
  54. return {};
  55. },
  56. computed: {
  57. ...mapGetters(['storeUnHandleFriendApplicationNum', 'storeUnHandleGroupApplicationNum']),
  58. getMenus() {
  59. return [
  60. {
  61. idx: 0,
  62. type: ContactMenuTypes.NewFriend,
  63. title: '新的好友',
  64. icon: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/contact_new_friend.png',
  65. badge: this.storeUnHandleFriendApplicationNum
  66. },
  67. {
  68. idx: 1,
  69. type: ContactMenuTypes.NewGroup,
  70. title: '新的群组',
  71. icon: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/contact_new_group.png',
  72. badge: this.storeUnHandleGroupApplicationNum
  73. }
  74. ];
  75. },
  76. getFriendsMenus() {
  77. return [
  78. {
  79. idx: 2,
  80. type: ContactMenuTypes.MyFriend,
  81. title: '我的好友',
  82. icon: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/contact_my_friend.png',
  83. badge: 0
  84. }
  85. // ,{
  86. // idx: 3,
  87. // type: ContactMenuTypes.MyGroup,
  88. // title: '我的群组',
  89. // icon: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/contact_my_group.png',
  90. // badge: 0
  91. // }
  92. // {
  93. // idx: 4,
  94. // type: ContactMenuTypes.Lable,
  95. // title: '标签',
  96. // icon: require("static/images/contact_my_lable.png"),
  97. // badge: 0
  98. // },
  99. ];
  100. },
  101. getMomentsMenus() {
  102. return [
  103. {
  104. idx: 4,
  105. type: ContactMenuTypes.Moments,
  106. title: '朋友圈',
  107. icon: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/contact_moments.png',
  108. badge: 0
  109. }
  110. ];
  111. }
  112. },
  113. methods: {
  114. menuClick({ type }) {
  115. switch (type) {
  116. case ContactMenuTypes.NewFriend:
  117. case ContactMenuTypes.NewGroup:
  118. uni.navigateTo({
  119. url: `/pages_im/pages/contact/applicationList/index?applicationType=${type}`
  120. });
  121. break;
  122. case ContactMenuTypes.MyFriend:
  123. uni.navigateTo({
  124. url: '/pages_im/pages/contact/friendList/index'
  125. });
  126. break;
  127. case ContactMenuTypes.MyGroup:
  128. uni.navigateTo({
  129. url: '/pages_im/pages/contact/groupList/index'
  130. });
  131. break;
  132. case ContactMenuTypes.Lable:
  133. uni.navigateTo({
  134. url: '/pages_im/pages/contact/lableList/index'
  135. });
  136. break;
  137. case ContactMenuTypes.Moments:
  138. uni.navigateTo({
  139. url: '/pages_im/pages/moments/index/index'
  140. });
  141. break;
  142. default:
  143. break;
  144. }
  145. }
  146. }
  147. };
  148. </script>
  149. <style lang="scss" scoped>
  150. .menu_list {
  151. margin-bottom: 24rpx;
  152. background-color: #fff;
  153. &_item {
  154. @include vCenterBox();
  155. margin: 0 44rpx;
  156. padding: 24rpx 0;
  157. color: #0c1c33;
  158. .menu_icon {
  159. width: 42px;
  160. min-width: 42px;
  161. height: 42px;
  162. min-height: 42px;
  163. }
  164. .item_content {
  165. @include btwBox();
  166. margin-left: 24rpx;
  167. width: 100%;
  168. position: relative;
  169. .icon {
  170. display: flex;
  171. .u-badge {
  172. width: fit-content;
  173. padding: 8rpx 12rpx;
  174. line-height: 18rpx;
  175. }
  176. }
  177. }
  178. }
  179. }
  180. </style>