my-storage.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <view class="test">
  3. <custom-nav noback="noback" transparent="transparent" ref="ltm" title=" " />
  4. <view class="content">
  5. <view class="swiper-nav">
  6. <view v-for="(item, index) in list" :key="index" class="item" :class="{ active: MIXIN_ActiveIndex === index }" @tap="switchSwiper(index)">{{ item.name }}</view>
  7. <view class="moveBar" :style="{ left: MIXIN_MoveBarLeft + 'px', width: 100 / list.length + '%' }"><text></text></view>
  8. </view>
  9. <view class="swiper-area">
  10. <swiper class="swiper" :current="MIXIN_ActiveIndex" :duration="234" @change="MIXIN_change">
  11. <swiper-item v-for="(item, index) in list" :key="index">
  12. <scroll-view scroll-y :style="{ height: MIXIN_ScrollViewHeight + 'px' }">
  13. <view class="item">
  14. <view class="name-avatar">
  15. <image class="img" :src="item.img" ></image>
  16. <text>{{ item.name }}</text>
  17. </view>
  18. <view class="app-item item-space">
  19. <text>单品价</text>
  20. <text class="basecolor">¥{{ item.price }}</text>
  21. </view>
  22. <view class="app-item">
  23. <text>总库存剩余</text>
  24. <text class="basecolor">{{ item | totalNumStorage }}件</text>
  25. </view>
  26. <view class="app-item">
  27. <text>总库存价值</text>
  28. <text class="basecolor">¥{{ item | totalValueStorage | numDot }}</text>
  29. </view>
  30. <view class="app-item item-space type">
  31. <text>商品类型</text>
  32. </view>
  33. <view class="app-item" >
  34. <text>总库存价值</text>
  35. <text class="basecolor">¥{{ item | totalValueStorage | numDot }}</text>
  36. </view>
  37. <view class="app-item" v-for="(typeItem, typeIndex) in item.typeList" :key="typeIndex" v-if="typeNum(typeItem)">
  38. <text>{{ typeItem.name }}</text>
  39. <text class="basecolor">{{ typeNum(typeItem) + ' ' }}件</text>
  40. </view>
  41. </view>
  42. </scroll-view>
  43. </swiper-item>
  44. </swiper>
  45. </view>
  46. </view>
  47. </view>
  48. </template>
  49. <script>
  50. import { _API_OrderStorage } from '@/apis/order.js'
  51. export default {
  52. data() {
  53. return {
  54. title: '我的库存',
  55. list: [0, 0, 0],
  56. MIXIN_ActiveIndex: 0,
  57. MIXIN_MoveBarLeft: 0,
  58. MIXIN_ScrollViewHeight: 0,
  59. MIXIN_ScreenWidth: this.$store.state.device.screenWidth, // 屏幕宽
  60. }
  61. },
  62. computed: {
  63. typeNum(typeItem) {
  64. return typeItem => typeItem.num.reduce((t, e) => t + (+e), 0)
  65. }
  66. },
  67. filters: {
  68. totalNumStorage(val) {
  69. return val ? val.typeList.reduce((t, e) => e.num.reduce((tt, ee) => tt + Number(ee), t), 0) : 0
  70. },
  71. totalValueStorage(val) {
  72. return val ? val.typeList.reduce((t, e) => e.num.reduce((tt, ee) => tt + Number(ee), t), 0) * (+val.price) : 0
  73. }
  74. },
  75. mounted() {
  76. if (this.$store.state.userinfo.level !== '代理公司') {
  77. uni.navigateBack()
  78. setTimeout(() => uni.$emit('noopening'))
  79. return
  80. }
  81. uni.showLoading({ mask: true })
  82. _API_OrderStorage().then(res => {
  83. console.log(JSON.stringify(res.data.list), 666)
  84. this.list = res.data.list
  85. this.$nextTick(() => this.$offset('.swiper').then(res => { this.MIXIN_ScrollViewHeight = res.height })) // 设置scrollview 高)
  86. })
  87. },
  88. methods: {
  89. MIXIN_change({ detail: { current } }) {
  90. this.MIXIN_ActiveIndex = current
  91. this.MIXIN_MoveBarLeft = this.MIXIN_ActiveIndex * (this.MIXIN_ScreenWidth / this.list.length)
  92. },
  93. switchSwiper(index) { // 点击导航栏切换
  94. this.MIXIN_ActiveIndex = index
  95. this.MIXIN_MoveBarLeft = this.MIXIN_ActiveIndex * (this.MIXIN_ScreenWidth / this.list.length)
  96. }
  97. }
  98. }
  99. </script>
  100. <style lang="scss">
  101. .test {
  102. @include page();
  103. .content {
  104. @include flex(column);
  105. .swiper-nav {
  106. height: auto;
  107. min-height: 84rpx;
  108. margin-bottom: 1rpx;
  109. .item {
  110. text-align: center;
  111. box-sizing: border-box;
  112. border: 10rpx solid #FFFFFF;
  113. }
  114. text {
  115. width: 56rpx;
  116. }
  117. }
  118. .swiper-area {
  119. flex: 1;
  120. width: 100%;
  121. .swiper {
  122. height: 100%;
  123. scroll-view {
  124. .item {
  125. .name-avatar {
  126. @include flex();
  127. height: 180rpx;
  128. font-size: 32rpx;
  129. margin-top: 10rpx;
  130. background: #FFFFFF;
  131. padding: 20rpx 30rpx;
  132. box-sizing: border-box;
  133. justify-content: flex-start;
  134. .img {
  135. width: 140rpx;
  136. height: 140rpx;
  137. margin-right: 40rpx;
  138. }
  139. }
  140. .type {
  141. height: 30rpx;
  142. font-size: 26rpx;
  143. }
  144. }
  145. }
  146. }
  147. }
  148. }
  149. }
  150. </style>