my-storage.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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 }}.00</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. uni.navigateBack()
  77. setTimeout(() => uni.$emit('noopening'))
  78. return
  79. uni.showLoading({ mask: true })
  80. _API_OrderStorage().then(res => {
  81. console.log(JSON.stringify(res.data.list), 666)
  82. this.list = res.data.list
  83. this.$nextTick(() => this.$offset('.swiper').then(res => { this.MIXIN_ScrollViewHeight = res.height })) // 设置scrollview 高)
  84. })
  85. },
  86. methods: {
  87. MIXIN_change({ detail: { current } }) {
  88. this.MIXIN_ActiveIndex = current
  89. this.MIXIN_MoveBarLeft = this.MIXIN_ActiveIndex * (this.MIXIN_ScreenWidth / this.list.length)
  90. },
  91. switchSwiper(index) { // 点击导航栏切换
  92. this.MIXIN_ActiveIndex = index
  93. this.MIXIN_MoveBarLeft = this.MIXIN_ActiveIndex * (this.MIXIN_ScreenWidth / this.list.length)
  94. }
  95. }
  96. }
  97. </script>
  98. <style lang="scss">
  99. .test {
  100. @include page();
  101. .content {
  102. @include flex(column);
  103. .swiper-nav {
  104. height: auto;
  105. min-height: 84rpx;
  106. margin-bottom: 1rpx;
  107. .item {
  108. text-align: center;
  109. box-sizing: border-box;
  110. border: 10rpx solid #FFFFFF;
  111. }
  112. text {
  113. width: 56rpx;
  114. }
  115. }
  116. .swiper-area {
  117. flex: 1;
  118. width: 100%;
  119. .swiper {
  120. height: 100%;
  121. scroll-view {
  122. .item {
  123. .name-avatar {
  124. @include flex();
  125. height: 180rpx;
  126. font-size: 32rpx;
  127. margin-top: 10rpx;
  128. background: #FFFFFF;
  129. padding: 20rpx 30rpx;
  130. box-sizing: border-box;
  131. justify-content: flex-start;
  132. .img {
  133. width: 140rpx;
  134. height: 140rpx;
  135. margin-right: 40rpx;
  136. }
  137. }
  138. .type {
  139. height: 30rpx;
  140. font-size: 26rpx;
  141. }
  142. }
  143. }
  144. }
  145. }
  146. }
  147. }
  148. </style>