金诚优选前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

291 lines
6.7 KiB

  1. <template>
  2. <view>
  3. <lf-nav title="余额" :showIcon="true" :spreadOut="false" bgColor="transparent" titleColor="#fff"></lf-nav>
  4. <view class="head">
  5. <view class="bg-left"></view>
  6. <view class="bg-right"></view>
  7. <view class="head-content">
  8. <view>
  9. <text class="lf-iconfont icon-yuebao lf-font-50"></text>
  10. </view>
  11. <view class="point">
  12. <text>{{ num || 0 }}</text>
  13. <text class="label">()</text>
  14. </view>
  15. </view>
  16. </view>
  17. <view class="main">
  18. <view class="lf-row-between lf-m-b-30">
  19. <view class="lf-font-32 lf-color-black lf-font-bold">余额变动明细</view>
  20. <picker mode='date' :value="date" @change="dateChange">
  21. <view style="width: 440rpx; text-align: right;">
  22. <text>{{ date || '2021-09-01' }}</text>
  23. <text class="lf-iconfont icon-xiangyou lf-font-24 lf-m-l-10"></text>
  24. </view>
  25. </picker>
  26. </view>
  27. <view class="item" v-for="(item, index) in 10" :key="index">
  28. <view class="lf-row-between">
  29. <text class="lf-font-36 lf-color-black lf-font-bold" :class="{'lf-color-price': index % 2}">{{ index % 2 ? '-250' : '+80' }}</text>
  30. <text class="lf-font-24 lf-color-555">线上-商城内消费</text>
  31. </view>
  32. <view class="lf-row-between lf-m-t-20">
  33. <text class="lf-font-24 lf-color-555">¥374.38</text>
  34. <text class="lf-font-24 lf-color-777">2021-09-01 18:27:58</text>
  35. </view>
  36. </view>
  37. </view>
  38. </view>
  39. </template>
  40. <script>
  41. import { pageLogin, getUrl, config, is } from '@/common/js/utils.js';
  42. export default {
  43. data(){
  44. return {
  45. date: '',
  46. // activeIndex: 0,
  47. // tabList: [{
  48. // id: 0,
  49. // name: "收入",
  50. // init: false,
  51. // page: 0,
  52. // more: true,
  53. // show: false
  54. // }, {
  55. // id: 1,
  56. // name: "支出",
  57. // init: false,
  58. // page: 0,
  59. // more: true,
  60. // show: false
  61. // }],
  62. // dataList: {
  63. // 0: [],
  64. // 1: []
  65. // },
  66. list: [],
  67. show: false,
  68. page: 0,
  69. more: true,
  70. token: this.getToken(),
  71. num: "",
  72. showText: '正在加载下一页数据',
  73. config: ''
  74. }
  75. },
  76. onLoad(e){
  77. // TODO 将list数据渲染到页面上,,根据date请求筛选
  78. // 第三方平台配置颜色
  79. var bgConfig = this.$cookieStorage.get('globalConfig') || '';
  80. this.setData({
  81. config: bgConfig
  82. }); // var status=0,page=1;
  83. // this.queryBalanceList(token);
  84. // var status = e.type ? e.type : 0;
  85. // var page = this.tabList[status].page;
  86. // pageLogin(getUrl(), token => {
  87. // this.setData({
  88. // 'token': token
  89. // });
  90. // this.queryBalanceList(token, status, page);
  91. // this.queryUserSum(token);
  92. // });
  93. this.queryBalanceList();
  94. this.queryUserSum(this.token);
  95. },
  96. methods: {
  97. dateChange(event){
  98. this.date = event.detail.value;
  99. },
  100. queryBalanceList() {
  101. // var type = status ? 'consume' : 'recharge';
  102. // var params = type ? {
  103. // type
  104. // } : {};
  105. // params.page = page;
  106. let token = this.token;
  107. let params = {
  108. page: this.page
  109. };
  110. this.$http.get({
  111. api: 'api/users/balance/list',
  112. header: {
  113. Authorization: token
  114. },
  115. data: params
  116. }).then(res => {
  117. if (res.statusCode == 200) {
  118. res = res.data;
  119. // this.result(res, status);
  120. var page = res.meta.pagination;
  121. this.list = res.data;
  122. this.page = page.current_page;
  123. this.more = page.current_page < page.total_pages;
  124. this.show = false;
  125. } else {
  126. wx.showModal({
  127. title: '提示',
  128. content: '数据请求失败',
  129. success: res => {}
  130. });
  131. }
  132. wx.hideLoading();
  133. }).catch(rej => {
  134. wx.showToast({
  135. title: "请求失败",
  136. image: '../../../static/error.png'
  137. });
  138. wx.hideLoading();
  139. });
  140. },
  141. // 获取总余额
  142. queryUserSum(token) {
  143. this.$http.get({
  144. api: "api/users/balance/sum",
  145. header: {
  146. Authorization: token
  147. }
  148. }).then(res => {
  149. if (res.statusCode == 200) {
  150. res = res.data;
  151. this.setData({
  152. "num": res.data.sum
  153. });
  154. } else {
  155. wx.showModal({
  156. title: '提示',
  157. content: '数据请求失败',
  158. success: res => {}
  159. });
  160. }
  161. });
  162. },
  163. setData: function (obj) {
  164. let that = this;
  165. let keys = [];
  166. let val, data;
  167. Object.keys(obj).forEach(function (key) {
  168. keys = key.split('.');
  169. val = obj[key];
  170. data = that.$data;
  171. keys.forEach(function (key2, index) {
  172. if (index + 1 == keys.length) {
  173. that.$set(data, key2, val);
  174. } else {
  175. if (!data[key2]) {
  176. that.$set(data, key2, {});
  177. }
  178. }
  179. data = data[key2];
  180. });
  181. });
  182. }
  183. },
  184. onReachBottom(e) {
  185. // var status = this.activeIndex;
  186. // var page = this.tabList[status].page + 1;
  187. // var tabList = `tabList[${status}]`;
  188. if (this.more) {
  189. this.page++;
  190. this.show = true;
  191. this.queryBalanceList();
  192. // this.setData({
  193. // [`${tabList}.show`]: true
  194. // });
  195. // var token = this.token;
  196. // this.queryBalanceList(token, status, page);
  197. } else {
  198. wx.showToast({
  199. image: '../../../static/error.png',
  200. title: '再拉也没有啦'
  201. });
  202. }
  203. }
  204. }
  205. </script>
  206. <style>
  207. page{
  208. overflow-x: hidden;
  209. }
  210. </style>
  211. <style lang="scss" scoped>
  212. .head{
  213. width: 750rpx;
  214. // height: 512rpx;
  215. height: 429rpx;
  216. background: linear-gradient(90deg, #22A2A0 0%, #187B7A 100%);
  217. position: relative;
  218. overflow: hidden;
  219. display: flex;
  220. align-items: flex-end;
  221. box-sizing: border-box;
  222. padding: 60rpx 32rpx;
  223. color: #FFFFFF;
  224. .bg-left{
  225. position: absolute;
  226. width: 196rpx;
  227. height: 196rpx;
  228. border-radius: 50%;
  229. background-color: rgba(255,255,255,0.04);
  230. left: -92rpx;
  231. bottom: 60rpx;
  232. }
  233. .bg-right{
  234. position: absolute;
  235. width: 520rpx;
  236. height: 520rpx;
  237. border-radius: 50%;
  238. background-color: rgba(255,255,255,0.04);
  239. right: -168rpx;
  240. top: -122rpx;
  241. }
  242. .head-content{
  243. width: 100%;
  244. display: flex;
  245. flex-direction: column;
  246. justify-content: center;
  247. align-items: center;
  248. &>view{
  249. width: 100%;
  250. text-align: center;
  251. }
  252. .point{
  253. font-size: 72rpx;
  254. letter-spacing: 2rpx;
  255. font-weight: bold;
  256. word-break: break-all;
  257. line-height: 1;
  258. margin-top: 10rpx;
  259. .label{
  260. font-size: 36rpx;
  261. font-weight: initial;
  262. }
  263. }
  264. }
  265. }
  266. .main{
  267. padding: 30rpx 32rpx;
  268. width: 750rpx;
  269. height: max-content;
  270. box-sizing: border-box;
  271. .item{
  272. width: 686rpx;
  273. height: max-content;
  274. background: #F4F8F8;
  275. border-radius: 10rpx;
  276. margin-bottom: 26rpx;
  277. padding: 30rpx;
  278. box-sizing: border-box;
  279. line-height: 1;
  280. }
  281. }
  282. </style>