wallet.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. <template>
  2. <view class="content">
  3. <view class="top-bg">
  4. </view>
  5. <view class="yue-wrap flex">
  6. <view class="yue-tit">
  7. 总资产(CNY)
  8. </view>
  9. <view class="yue-num flex">
  10. <view class="yue">
  11. {{userInfo.now_money || '0.00'}}
  12. </view>
  13. <view class="cz" @click="navto('/pages/money/recharge')">
  14. 充值
  15. <image src="../../static/icon/dz.png" mode="widthFix"></image>
  16. </view>
  17. </view>
  18. <view class="lj-wrap flex">
  19. <view class="">
  20. 累计消费:¥{{ userInfo.orderStatusSum || '0'}}
  21. </view>
  22. <view class="">
  23. 累计充值:¥{{ userInfo.recharge || '0' }}
  24. </view>
  25. </view>
  26. </view>
  27. <scroll-view scroll-y="true" class="jl-wrap" :style="{'height': maxheight}" @scrolltolower="loadData">
  28. <view>
  29. <empty v-if="navList[tabCurrentIndex].orderList.length == 0 && navList[tabCurrentIndex].loaded"></empty>
  30. <view class="jl " v-for="item in navList[tabCurrentIndex].orderList">
  31. <view class="jl-tit flex">
  32. <view class="clamp2 tit">
  33. {{item.title}}
  34. </view>
  35. <view class="price" :class="{'add':item.pm == 1,'jian': item.pm == 0}">
  36. {{item.number*1}}
  37. </view>
  38. </view>
  39. <view class="jl-mark flex">
  40. <!-- <view class="mark">
  41. {{item.mark}}
  42. </view> -->
  43. <view class="">
  44. {{item.add_time}}
  45. </view>
  46. </view>
  47. </view>
  48. <uni-load-more :status="navList[tabCurrentIndex].loadingType"></uni-load-more>
  49. </view>
  50. </scroll-view>
  51. </view>
  52. </template>
  53. <script>
  54. import {
  55. mapState,
  56. mapMutations
  57. } from 'vuex';
  58. import {
  59. spreadCommission,
  60. userBalance
  61. } from '@/api/wallet.js';
  62. import {
  63. getMoneyStyle
  64. } from '@/utils/rocessor.js';
  65. import {
  66. getUserInfo,
  67. getUser
  68. } from '@/api/user.js';
  69. import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
  70. import empty from '@/components/empty';
  71. export default {
  72. filters: {
  73. getMoneyStyle
  74. },
  75. components: {
  76. empty,
  77. uniLoadMore
  78. },
  79. onReady() {
  80. // 初始化获取页面宽度
  81. var obj = this;
  82. uni.getSystemInfo({
  83. success: resu => {
  84. const query = uni.createSelectorQuery();
  85. query.select('.jl-wrap').boundingClientRect();
  86. query.exec(function(res) {
  87. obj.maxheight = resu.windowHeight - res[0].top + 'px';
  88. });
  89. },
  90. fail: res => {}
  91. });
  92. },
  93. data() {
  94. return {
  95. // 头部图高度
  96. maxheight: '',
  97. tabCurrentIndex: 0,
  98. navList: [{
  99. state: 0,
  100. text: '收入',
  101. loadingType: 'more',
  102. orderList: [],
  103. page: 1, //当前页数
  104. limit: 10, //每次信息条数
  105. loaded: false
  106. }, {
  107. state: 2,
  108. text: '收入',
  109. loadingType: 'more',
  110. orderList: [],
  111. page: 1, //当前页数
  112. limit: 10, //每次信息条数
  113. loaded: false
  114. },
  115. {
  116. state: 1,
  117. text: '支出',
  118. loadingType: 'more',
  119. orderList: [],
  120. page: 1, //当前页数
  121. limit: 10, //每次信息条数
  122. loaded: false
  123. },
  124. ],
  125. money: '',
  126. userInfo: {}
  127. };
  128. },
  129. onLoad(options) {},
  130. onShow() {
  131. this.loadData();
  132. this.getUserInfo()
  133. },
  134. methods: {
  135. ...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
  136. getUserInfo() {
  137. getUser({}).then(({ data }) => {
  138. this.userInfo = data
  139. });
  140. },
  141. // 页面跳转
  142. navto(e) {
  143. uni.navigateTo({
  144. url: e
  145. });
  146. },
  147. //获取收入支出信息
  148. async loadData(source) {
  149. //这里是将订单挂载到tab列表下
  150. let index = this.tabCurrentIndex;
  151. let navItem = this.navList[index];
  152. let state = navItem.state;
  153. if (source === 'tabChange' && navItem.loaded === true) {
  154. //tab切换只有第一次需要加载数据
  155. return;
  156. }
  157. if (navItem.loadingType === 'loading') {
  158. //防止重复加载
  159. return;
  160. }
  161. // 修改当前对象状态为加载中
  162. navItem.loadingType = 'loading';
  163. spreadCommission({
  164. page: navItem.page,
  165. limit: navItem.limit
  166. },
  167. state
  168. )
  169. .then(({
  170. data
  171. }) => {
  172. console.log(data, '获取数据');
  173. // if (data.count > 0) {
  174. // navItem.orderList = navItem.orderList.concat(data.list);
  175. // console.log(navItem.orderList);
  176. // navItem.page++;
  177. // }
  178. if (data.length > 0) {
  179. data.forEach(item => {
  180. console.log(item.list, '内部列表')
  181. navItem.orderList = navItem.orderList.concat(item.list)
  182. })
  183. // navItem.orderList = navItem.orderList.concat(data[0].list);
  184. console.log(navItem.orderList);
  185. navItem.page++;
  186. }
  187. if (navItem.limit == data.length) {
  188. //判断是否还有数据, 有改为 more, 没有改为noMore
  189. navItem.loadingType = 'more';
  190. return;
  191. } else {
  192. //判断是否还有数据, 有改为 more, 没有改为noMore
  193. navItem.loadingType = 'noMore';
  194. }
  195. uni.hideLoading();
  196. this.$set(navItem, 'loaded', true);
  197. })
  198. .catch(e => {
  199. console.log(e);
  200. });
  201. },
  202. //swiper 切换
  203. changeTab(e) {
  204. this.tabCurrentIndex = e.target.current;
  205. this.loadData('tabChange');
  206. },
  207. //顶部tab点击
  208. tabClick(index) {
  209. this.tabCurrentIndex = index;
  210. },
  211. addmoney() {
  212. uni.navigateTo({
  213. url: '/pages/money/recharge'
  214. })
  215. }
  216. }
  217. };
  218. </script>
  219. <style lang="scss">
  220. page {
  221. background-color: #fff;
  222. height: auto;
  223. min-height: 100%;
  224. }
  225. .top-bg {
  226. background-color: #ee2f72;
  227. height: 180rpx;
  228. width: 750rpx;
  229. }
  230. .yue-wrap {
  231. width: 670rpx;
  232. height: 320rpx;
  233. margin: -160rpx auto 30rpx;
  234. background: linear-gradient(-70deg, #FF77A7, #FF4A8A);
  235. box-shadow: 0px 15rpx 22rpx 6rpx rgba(238, 47, 114, 0.1);
  236. border-radius: 25rpx;
  237. color: #fff;
  238. font-size: 26rpx;
  239. padding: 50rpx 75rpx;
  240. flex-direction: column;
  241. justify-content: space-between;
  242. align-items: flex-start;
  243. .yue-num {
  244. width: 100%;
  245. justify-content: space-between;
  246. .yue {
  247. font-size: 76rpx;
  248. font-weight: bold;
  249. }
  250. .cz {
  251. image {
  252. width: 13rpx;
  253. margin-left: 10rpx;
  254. }
  255. }
  256. }
  257. .lj-wrap {
  258. width: 100%;
  259. justify-content: space-between;
  260. font-size: 24rpx;
  261. }
  262. }
  263. .jl {
  264. width: 670rpx;
  265. margin: 0 auto 20rpx;
  266. padding: 35rpx 30rpx;
  267. background: #FFFFFF;
  268. box-shadow: 0px 0px 28px 0px rgba(48, 48, 48, 0.1);
  269. border-radius: 8px;
  270. .jl-tit {
  271. width: 100%;
  272. font-size: 28rpx;
  273. font-weight: bold;
  274. color: #333333;
  275. .tit {
  276. max-width: 450rpx;
  277. }
  278. .price {
  279. font-size: 38rpx;
  280. font-weight: bold;
  281. }
  282. .add {
  283. color: #EE2F72;
  284. &::before {
  285. content: '+';
  286. font-size: 28rpx;
  287. color: #EE2F72;
  288. }
  289. }
  290. .jian {
  291. color: #808080;
  292. &::before {
  293. content: '-';
  294. font-size: 28rpx;
  295. }
  296. }
  297. }
  298. .jl-mark {
  299. padding-top: 20rpx;
  300. width: 100%;
  301. font-size: 24rpx;
  302. font-weight: 500;
  303. color: #808080;
  304. align-items: flex-start;
  305. // justify-content: flex-end;
  306. .mark {
  307. max-width: 470rpx;
  308. }
  309. }
  310. }
  311. </style>