index.vue 13 KB

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