index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <template>
  2. <view class="tab_bar">
  3. <view class="tabbarBox">
  4. <view :class="item.key === 'chat'?'handleBox chatBox ':'handleBox'" v-for="(item) in tabBarList" :key="item.key + 'tab_bar'">
  5. <view class="menuBox" @click="goPages(item)">
  6. <view class="menuIcon">
  7. <view class="message-style" v-if="item.key === 'chat' && messageCount > 0">
  8. </view>
  9. <view v-if="item.key === 'chat'" class="chat-box">
  10. <image v-if="item.key != selectIndex" class="img" :src="item.iconPath"></image>
  11. <image v-else class="img" :src="item.selectedIconPath"></image>
  12. </view>
  13. <template v-else>
  14. <image v-if="item.key != selectIndex" class="img" :src="item.iconPath"></image>
  15. <image v-else class="img" :src="item.selectedIconPath"></image>
  16. </template>
  17. </view>
  18. <view class="menuName" v-if="item.key !== 'chat'">
  19. <text :class="item.key == selectIndex ? 'TextColor' : 'Text'">{{ item.text }}</text>
  20. </view>
  21. </view>
  22. </view>
  23. <!-- <view class="handleBox">1</view>
  24. <view class="handleBox chatBox">2</view>
  25. <view class="handleBox">3</view> -->
  26. </view>
  27. <view class="bar-bottom"></view>
  28. </view>
  29. </template>
  30. <script>
  31. import { onMounted } from 'vue';
  32. import store from '@/store'
  33. export default {
  34. props: {
  35. page: {
  36. type: String,
  37. default: "home"
  38. }
  39. },
  40. watch: {
  41. page: {
  42. handler(value) {
  43. this.selectIndex = value;
  44. },
  45. immediate: true,
  46. deep: true
  47. }
  48. },
  49. data() {
  50. return {
  51. selectIndex: null,
  52. userType: uni.getStorageSync('userType') || 1, //读取本地存储
  53. messageCount: store.state.user.messageCount
  54. }
  55. },
  56. computed: {
  57. //获取当前页面
  58. tabBarList() {
  59. if (this.userType === 1) {
  60. return [
  61. {
  62. "pagePath": "/pages/index",
  63. "iconPath": "/static/images/tabbar/home.png",
  64. "selectedIconPath": "/static/images/tabbar/home_.png",
  65. "text": "首页",
  66. key: 'home'
  67. },
  68. {
  69. "pagePath": "/pages/mallMenu",
  70. "iconPath": "/static/images/tabbar/class.png",
  71. "selectedIconPath": "/static/images/tabbar/class_.png",
  72. "text": "分类",
  73. key: 'class'
  74. },
  75. {
  76. "pagePath": "/pages/chat",
  77. "iconPath": "/static/images/tabbar/chat.png",
  78. "selectedIconPath": "/static/images/tabbar/chat_.png",
  79. "text": "消息",
  80. key: 'chat'
  81. },
  82. {
  83. "pagePath": "/pages/classify",
  84. "iconPath": "/static/images/tabbar/work.png",
  85. "selectedIconPath": "/static/images/tabbar/work_.png",
  86. "text": "订单",
  87. key: 'order'
  88. },
  89. {
  90. "pagePath": "/pages/mine/index",
  91. "iconPath": "/static/images/tabbar/mine.png",
  92. "selectedIconPath": "/static/images/tabbar/mine_.png",
  93. "text": "我的",
  94. key: 'mine'
  95. }
  96. ]
  97. }
  98. return [
  99. {
  100. "pagePath": "/pages/index",
  101. "iconPath": "/static/images/tabbar/home.png",
  102. "selectedIconPath": "/static/images/tabbar/home_.png",
  103. "text": "首页",
  104. key: 'home'
  105. },
  106. {
  107. "pagePath": "/pages/mallMenu",
  108. "iconPath": "/static/images/tabbar/class.png",
  109. "selectedIconPath": "/static/images/tabbar/class_.png",
  110. "text": "分类",
  111. key: 'class'
  112. },
  113. // {
  114. // "pagePath": "/pages/release",
  115. // "iconPath": "/static/images/tabbar/class.png",
  116. // "selectedIconPath": "/static/images/tabbar/class_.png",
  117. // "text": "发布",
  118. // key:'release'
  119. // },
  120. {
  121. "pagePath": "/pages/chat",
  122. "iconPath": "/static/images/tabbar/chat.png",
  123. "selectedIconPath": "/static/images/tabbar/chat_.png",
  124. "text": "消息",
  125. key: 'chat'
  126. },
  127. {
  128. "pagePath": "/pages/classify",
  129. "iconPath": "/static/images/tabbar/work.png",
  130. "selectedIconPath": "/static/images/tabbar/work_.png",
  131. "text": "订单",
  132. key: 'order'
  133. },
  134. {
  135. "pagePath": "/pages/mine/index",
  136. "iconPath": "/static/images/tabbar/mine.png",
  137. "selectedIconPath": "/static/images/tabbar/mine_.png",
  138. "text": "我的",
  139. key: 'mine'
  140. }
  141. ]
  142. }
  143. },
  144. //uniapp子组件不支持应用生命周期,所以只能用vue生命周期
  145. created() {
  146. },
  147. onMounted() {
  148. },
  149. methods: {
  150. //进入tabble页
  151. goPages(page) {
  152. uni.switchTab({
  153. url: page.pagePath
  154. })
  155. },
  156. },
  157. }
  158. </script>
  159. <style lang="scss">
  160. .tab_bar {
  161. width: 100vw;
  162. height: 160rpx;
  163. position: fixed;
  164. bottom: 0rpx;
  165. /* 模糊大小就是靠的blur这个函数中的数值大小 */
  166. // backdrop-filter: blur(10px);
  167. // border-radius: 60rpx;
  168. // background-color: #fff;
  169. .tabbarBox {
  170. display: flex;
  171. margin-top: 20rpx;
  172. justify-content: space-between;
  173. // height: 100%;
  174. background-image: url(data:image/png;base64,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AACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGhAcAcAAAAAgAYEdwAAAAAAaEBwBwAAAACABgR3AAAAAABoQHAHAAAAAIAGBHcAAAAAAGjg/3IyVIFSlPmWAAAAAElFTkSuQmCC); // 替换为你的图片路径
  175. background-size: cover; // 图片覆盖整个 tabbarBox 区域
  176. background-repeat: no-repeat; // 防止图片重复
  177. background-position: center; // 图片居中显示
  178. // position: relative;
  179. .handleBox {
  180. width: 20vw;
  181. height: 110rpx;
  182. display: flex;
  183. align-items: center;
  184. justify-content: center;
  185. flex-direction: column;
  186. padding-top: 8rpx;
  187. .menuBox {
  188. padding: 0rpx 20rpx;
  189. width: 120rpx;
  190. height: 98%;
  191. text-align: center;
  192. .img {
  193. width: 50rpx;
  194. height: 50rpx;
  195. }
  196. }
  197. }
  198. .chatBox{
  199. position: relative;
  200. bottom: 23px;
  201. }
  202. }
  203. .bar-bottom {
  204. width: 100%;
  205. height: 100%;
  206. background: #fff;
  207. }
  208. }
  209. .Text {
  210. font-size: 24rpx;
  211. font-weight: 350;
  212. line-height: 24rpx;
  213. text-align: center;
  214. color: #000000;
  215. }
  216. .TextColor {
  217. @extend .Text;
  218. font-weight: 500;
  219. }
  220. .menuIcon {
  221. position: relative;
  222. top: 16rpx;
  223. }
  224. .message-style {
  225. background: rgba(239, 68, 68, 1);
  226. color: #fff;
  227. display: flex;
  228. align-items: center;
  229. justify-content: center;
  230. width: 10px;
  231. height: 10px;
  232. border-radius: 10px;
  233. position: absolute;
  234. right: 0;
  235. z-index: 3;
  236. }
  237. .chat-box {
  238. width: 90rpx;
  239. height: 90rpx;
  240. background: #D94342;
  241. box-shadow: 0px 14px 34px 0px rgba(217, 67, 66, 0.46);
  242. border-radius: 50%;
  243. display: flex;
  244. align-items: center;
  245. justify-content: center;
  246. }
  247. </style>