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.

346 lines
21 KiB

3 months ago
  1. <template>
  2. <view :data-theme="theme">
  3. <view class='integral-details'>
  4. <view class='header'>
  5. <view class='currentScore'>当前积分</view>
  6. <view class="scoreNum">{{integral.integral||0}}</view>
  7. <view class='line'></view>
  8. <view class='nav acea-row'>
  9. <view class='item'>
  10. <view class='num'>{{integral.sumIntegral||0}}</view>
  11. <view>累计积分</view>
  12. </view>
  13. <view class='item'>
  14. <view class='num'>{{integral.deductionIntegral||0}}</view>
  15. <view>累计消费</view>
  16. </view>
  17. <view class='item'>
  18. <view class='num'>{{integral.frozenIntegral||0}}</view>
  19. <view>冻结积分</view>
  20. </view>
  21. </view>
  22. </view>
  23. <view class='wrapper'>
  24. <view class='nav acea-row'>
  25. <view class='item acea-row row-center-wrapper' :class='current==index?"on":""' v-for="(item,index) in navList" :key='index'
  26. @click='nav(index)'><text class='iconfont' :class="item.icon"></text>{{item.name}}</view>
  27. </view>
  28. <view class='list' :hidden='current!=0'>
  29. <view class='tip acea-row row-middle'><text class='iconfont icon-shuoming'></text>提示积分数值的高低会直接影响您的会员等级</view>
  30. <view class='item acea-row row-between-wrapper' v-for="(item,index) in integralList" :key="index">
  31. <view>
  32. <view class='state'>{{item.title}}</view>
  33. <view>{{item.updateTime}}</view>
  34. </view>
  35. <view class='num font_color' v-if="item.type===1">+{{item.integral}}</view>
  36. <view class='num' v-else>-{{item.integral}}</view>
  37. </view>
  38. <view class='loadingicon acea-row row-center-wrapper' v-if="integralList.length>0">
  39. <text class='loading iconfont icon-jiazai' :hidden='loading==false'></text>{{loadTitle}}
  40. </view>
  41. <view v-if="integralList.length == 0">
  42. <emptyPage title="暂无积分记录哦~"></emptyPage>
  43. </view>
  44. </view>
  45. <view class='list2' :hidden='current!=1'>
  46. <navigator class='item acea-row row-between-wrapper' open-type='switchTab' hover-class='none' url='/pages/index/index'>
  47. <view class='pictrue'>
  48. <image :src="urlDomain+'crmebimage/perset/staticImg/score.png'"></image>
  49. </view>
  50. <view class='name'>购买商品可获得积分奖励</view>
  51. <view class='earn'>赚积分</view>
  52. </navigator>
  53. <navigator class='item acea-row row-between-wrapper' hover-class='none' url='/pages/users/user_sgin/index'>
  54. <view class='pictrue'>
  55. <image :src="urlDomain+'crmebimage/perset/staticImg/score.png'"></image>
  56. </view>
  57. <view class='name'>每日签到可获得积分奖励</view>
  58. <view class='earn'>赚积分</view>
  59. </navigator>
  60. </view>
  61. </view>
  62. </view>
  63. </view>
  64. </template>
  65. <script>
  66. import { postIntegralUser, getIntegralList } from '@/api/user.js';
  67. import {
  68. toLogin
  69. } from '@/libs/login.js';
  70. import {
  71. mapGetters
  72. } from "vuex";
  73. import emptyPage from '@/components/emptyPage.vue'
  74. let app = getApp();
  75. export default {
  76. components: {
  77. emptyPage
  78. },
  79. data() {
  80. return {
  81. urlDomain: this.$Cache.get("imgHost"),
  82. navList: [{
  83. 'name': '分值明细',
  84. 'icon': 'icon-mingxi'
  85. },
  86. {
  87. 'name': '分值提升',
  88. 'icon': 'icon-tishengfenzhi'
  89. }
  90. ],
  91. current: 0,
  92. page: 1,
  93. limit: 10,
  94. integralList: [],
  95. integral:{},
  96. loadend: false,
  97. loading: false,
  98. loadTitle: '加载更多',
  99. theme:app.globalData.theme,
  100. };
  101. },
  102. computed: mapGetters(['isLogin']),
  103. watch:{
  104. isLogin:{
  105. handler:function(newV,oldV){
  106. if(newV){
  107. this.getUserInfo();
  108. this.getIntegralList();
  109. }
  110. },
  111. deep:true
  112. }
  113. },
  114. onLoad() {
  115. if (this.isLogin) {
  116. this.getUserInfo();
  117. this.getIntegralList();
  118. } else {
  119. toLogin();
  120. }
  121. },
  122. /**
  123. * 页面上拉触底事件的处理函数
  124. */
  125. onReachBottom: function () {
  126. this.getIntegralList();
  127. },
  128. methods: {
  129. getUserInfo: function() {
  130. let that = this;
  131. postIntegralUser().then(function(res) {
  132. that.$set(that,'integral',res.data);
  133. });
  134. },
  135. /**
  136. * 获取积分明细
  137. */
  138. getIntegralList: function() {
  139. let that = this;
  140. if (that.loading) return;
  141. if (that.loadend) return;
  142. that.loading = true;
  143. that.loadTitle = '';
  144. getIntegralList({
  145. page: that.page,
  146. limit: that.limit
  147. }).then(function(res) {
  148. let list = res.data.list,
  149. loadend = list.length < that.limit;
  150. that.integralList = that.$util.SplitArray(list, that.integralList);
  151. that.$set(that,'integralList',that.integralList);
  152. that.page = that.page + 1;
  153. that.loading = false;
  154. that.loadend = loadend;
  155. that.loadTitle = loadend ? '我也是有底线的~' : "加载更多";
  156. }, function(res) {
  157. this.loading = false;
  158. that.loadTitle = '加载更多';
  159. });
  160. },
  161. nav: function(current) {
  162. this.current = current;
  163. }
  164. }
  165. }
  166. </script>
  167. <style scoped lang="scss">
  168. .integral-details .header {
  169. background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu4AAADdCAYAAADkbPfgAAAgAElEQVR4Xu2deZPbOJJHib6POfea//b7f7CN2JiZnat72m677cbGqyGqaVlVRUokkQAeIhiSyySOlxD5UyqRSJNFAhKQgAQk8AyBnHOapuny4Ar+tnwtteT5Da+X73NKqfxN7hKQgAQksIFAueluuMRTJSABCUigJwI550+mabp28Izg73uXIuh/noU9r++nafo5pcSrRQISkIAErhBQuDstJCABCQxEIOf86TRNHAjy8j7as+BRyM+C/n1Kib9ZJCABCQxNINrNemhjOHgJSEACexKYQ1w+mwU6r4j1Vu/7eOnfzQdCXs/8npPFuiQggSYItHoDbwKunZSABCRwNoGcMwK9HHjUey1FyP+EmDduvlczOy4JSGBJQOHufJCABCTQMIGFVx2x/nnDHvV7rVC88T8ZVnMvSq+XgASiElC4R7WM/ZKABCTwDIGcMyKdA8HuvfxDVoTR4IlXxPspkoAEuiLgzb4rczoYCUigZwLzwtIvBvesbzUxIv5tSunt1gs9XwISkEA0Agr3aBaxPxKQgAQWBOZQGMQ6xxGpGUfhTUw8XnhEvAtbR7G645RAZwQU7p0Z1OFIQAJ9EJhzqxfB7r16X7Mi3N+klBDyFglIQALNEPBh0Iyp7KgEJDACgTkc5ss5HGaEIdccI7nhEfCG0dS0gm1LQAKrCSjcV6PyRAlIQALHEZjTOCLYWWxqOZcAYTQI+DfnNmtrEpCABLYRULhv4+XZEpCABHYlMAv2r+ZNknat28o2E1DAb0bmBRKQwJkEFO5n0rYtCUhAAjOBOSQGwa6HPd6sQMD/aAhNPMPYIwmMTkDhPvoMcPwSkMCpBOYsMV8bw34q9lsbIwYeAe8i1lsJep0EJLArAYX7rjitTAISkMDTBHLOeNjJFOO9t62Jwq6sr92RtS2j2VsJ9EjAh0ePVnVMEpBAKAI5Z8Q6ot17bijLbO4Mi1dZxEoojUUCEpDA6QR8iJyO3AYlIIFRCMy52AmLMY69H6MbPtOPLR2JBJojoHBvzmR2WAISaIFAzpnUjhzeZ1sw2PY+EvdO+Ize9+3svEICEriRgA+UG8F5mQQkIIFrBObFp9/oZR9ifiDaEe8uXh3C3A5SAvUJKNzr28AeSEACnRCYc7ITGvNJJ0NyGOsIvE0pvV53qmdJQAISuJ2Awv12dl4pAQlI4JHAnDGG0BjLmATeT9P0yswzYxrfUUvgLAIK97NI244EJNAlAUNjujTrrYMydOZWcl4nAQmsIqBwX4XJkyQgAQl8TGAOjSGe3XupE2RJwNAZ54MEJHAIAR82h2C1UglIoHcCc2524tktErhGgE2bCJ0x64zzQwIS2I2Awn03lFYkAQmMQiDnjGBnUyWLBJ4jQM53xDvx7xYJSEACdxNQuN+N0AokIIFRCAwcz86zgoNsORzl/aXpi3eZ13IgXnnP64iFsSPe8cBbJCABCdxFQOF+Fz4vloAERiEw74L6beepHj+dpunasdezAvFeDrzQvOcVUdt7SAn53t+O8nlxnBKQwDEE9roZH9M7a5WABCQQgECni1C5/38+H58F2DAKEc9GRoh4XnsML3mTUvoxwJS2CxKQQKMEFO6NGs5uS0AC5xDIOSNuiWnv4X5JXH4R63jWIxc88Ah4DjzVvYTa/JRSehUZvH2TgATiEujhQRSXrj2TgASaJjCLdtI9tlwQ62wMhWBv+Z6PBx4B/6YDb/y7lNIPLU8q+y4BCdQh0PJNvA4xW5WABIYg0Hi6R0Q6Yh3R3uN9HhGPgOdo1RPPGH4wXeQQtxMHKYHdCPR4Q98NjhVJQAJjEmhUtJPtBbH+VecLaC8nJaE0xI23uPBT8T7mLcZRS+BmAgr3m9F5oQQk0COBBkU7C0sR671619dOMzzvCHiOljLUvE8p/XPtID1PAhIYm4DCfWz7O3oJSGBBoDHRjlBHsBMWY/mFAKId8f66IQGveHcGS0ACqwgo3Fdh8iQJSKB3Ag0tREWws2A2elaY2lMGAU8MPAK+hTh4s83UnjG2L4EGCCjcGzCSXZSABI4l0EiedkJi2ACKV8t6Ai154BXv6+3qmRIYkoDCfUizO2gJSKAQmHdE/VXg7Ct41vGw42m33E4Arzv50/HCRy5u0hTZOvZNApUJKNwrG8DmJSCBegRyztwDEe1kZIlYEOzEsXuv3s867MxKDnVeo5bXKaUWs+RE5Wm/JNANAR8G3ZjSgUhAAlsJ5JwR7RFjxfGuExYT9QvFVtQRz8fzjoCPmoGGHO+Rv1xEtKl9kkD3BBTu3ZvYAUpAAtcI5JzxZkfLyMI9GcFOPnbL8QQInyEVI7ngoxW+UPwzpdTCwtpo7OyPBLoloHDv1rQOTAISeIpAzpnwk2jimEWnv9bLXmXekj4S73u08nNK6ftonbI/EpBAPQIK93rsbVkCEqhAYM4gg1c7Uvl6XoAaqU+j9YWwFERyNA+3mWZGm4mOVwLPEFC4Oz0kIIFhCATMIFMWx5oxJsYsfAhPmaYp2sJQF6vGmB/2QgLVCSjcq5vADkhAAmcRCLYYldCYqItjzzJJ1Haihc7whYLFqu+jArNfEpDAOQQU7udwthUJSKAygWBx7cTXE67jPbjyvHim+WihM8a7x50r9kwCpxHwoXEaahuSgARqEQgW1042G2LaLfEJEO9O3HuUtIxvU0qv42OzhxKQwFEEFO5HkbVeCUggBIF5kyWytUS43xEaEy2bTQg7Be5EtLj3VymliOkrA5vQrkmgHwIRHmT90HQkEpBAOAJB8rVzr+XLQ7S88eHsFbhDLFpl06bahS8S36eUom4cVZuP7UugawIK967N6+AkMDaBnDNCmdCUmoX77G+D7tBak0uLbZPrnYWrtcu7lFLEvPO1udi+BLonoHDv3sQOUAJjEggSIsM99jfTNJFBxtIHgSji3RSRfcwnRyGBTQQU7ptwebIEJNAKgQAhMor2VibL9n5GCJt5iL1PKUXbMGo7Ta+QgARWE1C4r0blibMHkzmzPABT/l0glXm11/wqsZzXXvnb8piM/XSuBsgio2jvfxpGEO+GzPQ/zxyhBD4gsJewEmswAvMOkdj3k8WxFNj8fSm6y//x98v35dxgo3y2O3ihiqC/9p6/lYPzHv+tB6slM1/va86ZhaC15q2ivf0ptHYE303TVDvDi1lm1lrL8yTQAQGFe3AjzgJ8Kb6LsH7pb8FHFr57RewvBT7v2bmQ4/G9Hv5Ytgyw0RJfGr6IRcXeHESAL/2I95p53t2Y6SDjWq0EIhJQuJ9slQsh/umFRxwxvvyb9jnZPjc2V8T9R6K+CH3F/Y1kN142f77IlV7rs8NuqF9t7Lant02Azz/inc9/rfImpRQh202t8duuBIYhUOvh1hXgOfZ7Kbifel+85V2N38GsIsDDHa8cD/fy+vDe0JxV/FadVHlBKoId4W4ZjwCf5X/M4Xk1Rm9u9xrUbVMCFQgo3F+AfiHKEeSkdSuecf7NIccKk7ejJnnoIuY/OFJKNX9+bw5vzpnPIt72GoXQGEJkLOMSINYdz3ut8jal9LpW47YrAQmcQ2BowXlFlF8K8uI5P8catiKBDwksBT2iACH/kx7669Mk54xo5zN7dqFNNlga+n56NvSg7RGuUnNjJHZUNT1k0MlhtySwB4GuHzRzvGvxipdXPOZ6yveYPdZRiwA/yyPky0G4Tc342locHtutnP7xd5W+MFTnbgeuEqiZaYYv9q+0iwQk0C+B5oX7/MC+FOclpKX58fU79RzZzgRKDH0Jt+EBXjtN3c5DfLq6it52vPxfnjbQmA0t08yWFKwxe3pOr/gsEu9ey/PNpkxDf5E/x8y2IoE6BMIL20U4S/GULz3mNX4Wr2MpW5XAdgKIqKVnHjHf3QM95/z5NE3fbMdz9xWjxLVzn4Uxx+X996lnSEmnWhZjlwXZZT7eDT94BTXj3d2UKfjksHsSuIdAGOG+8JwvBXpZCHrPGL1WAhL4hQCCainmWdBWdqRtklMlbzvrYQiR
  170. background-repeat: no-repeat;
  171. background-size: 100% 100%;
  172. width: 100%;
  173. height: 460rpx;
  174. font-size: 72rpx;
  175. color: #fff;
  176. padding: 31rpx 0 45rpx 0;
  177. box-sizing: border-box;
  178. text-align: center;
  179. font-family: 'Guildford Pro';
  180. @include main_bg_color(theme);
  181. }
  182. .integral-details .header .currentScore {
  183. font-size: 26rpx;
  184. color: rgba(255, 255, 255, 0.8);
  185. text-align: center;
  186. margin-bottom: 11rpx;
  187. }
  188. .integral-details .header .scoreNum{
  189. font-family: "Guildford Pro";
  190. }
  191. .integral-details .header .line {
  192. width: 60rpx;
  193. height: 3rpx;
  194. background-color: #fff;
  195. margin: 20rpx auto 0 auto;
  196. }
  197. .integral-details .header .nav {
  198. font-size: 22rpx;
  199. color: rgba(255, 255, 255, 0.8);
  200. flex: 1;
  201. margin-top: 35rpx;
  202. }
  203. .integral-details .header .nav .item {
  204. width: 33.33%;
  205. text-align: center;
  206. }
  207. .integral-details .header .nav .item .num {
  208. color: #fff;
  209. font-size: 40rpx;
  210. margin-bottom: 5rpx;
  211. font-family: 'Guildford Pro';
  212. }
  213. .integral-details .wrapper .nav {
  214. flex: 1;
  215. width: 690rpx;
  216. border-radius: 20rpx 20rpx 0 0;
  217. margin: -96rpx auto 0 auto;
  218. background-color: #f7f7f7;
  219. height: 96rpx;
  220. font-size: 30rpx;
  221. color: #bbb;
  222. }
  223. .integral-details .wrapper .nav .item {
  224. text-align: center;
  225. width: 50%;
  226. }
  227. .integral-details .wrapper .nav .item.on {
  228. background-color: #fff;
  229. @include main-color(theme);
  230. font-weight: bold;
  231. border-radius: 20rpx 0 0 0;
  232. }
  233. .integral-details .wrapper .nav .item:nth-of-type(2).on {
  234. border-radius: 0 20rpx 0 0;
  235. }
  236. .integral-details .wrapper .nav .item .iconfont {
  237. font-size: 38rpx;
  238. margin-right: 10rpx;
  239. }
  240. .integral-details .wrapper .list {
  241. background-color: #fff;
  242. padding: 24rpx 30rpx;
  243. }
  244. .integral-details .wrapper .list .tip {
  245. font-size: 25rpx;
  246. width: 690rpx;
  247. height: 60rpx;
  248. border-radius: 50rpx;
  249. background-color: #fff5e2;
  250. border: 1rpx solid #ffeac1;
  251. color: #c8a86b;
  252. padding: 0 20rpx;
  253. box-sizing: border-box;
  254. margin-bottom: 24rpx;
  255. }
  256. .integral-details .wrapper .list .tip .iconfont {
  257. font-size: 35rpx;
  258. margin-right: 15rpx;
  259. }
  260. .integral-details .wrapper .list .item {
  261. height: 124rpx;
  262. border-bottom: 1rpx solid #eee;
  263. font-size: 24rpx;
  264. color: #999;
  265. }
  266. .integral-details .wrapper .list .item .state {
  267. font-size: 28rpx;
  268. color: #282828;
  269. margin-bottom: 8rpx;
  270. }
  271. .integral-details .wrapper .list .item .num {
  272. font-size: 36rpx;
  273. font-family: 'Guildford Pro';
  274. }
  275. .integral-details .wrapper .list2 {
  276. background-color: #fff;
  277. padding: 24rpx 0;
  278. }
  279. .integral-details .wrapper .list2 .item {
  280. background-image: linear-gradient(to right, #fff7e7 0%, #fffdf9 100%);
  281. width: 690rpx;
  282. height: 180rpx;
  283. position: relative;
  284. border-radius: 10rpx;
  285. margin: 0 auto 20rpx auto;
  286. padding: 0 25rpx 0 180rpx;
  287. box-sizing: border-box;
  288. }
  289. .integral-details .wrapper .list2 .item .pictrue {
  290. width: 90rpx;
  291. height: 150rpx;
  292. position: absolute;
  293. bottom: 0;
  294. left: 45rpx;
  295. }
  296. .integral-details .wrapper .list2 .item .pictrue image {
  297. width: 100%;
  298. height: 100%;
  299. }
  300. .integral-details .wrapper .list2 .item .name {
  301. width: 285rpx;
  302. font-size: 30rpx;
  303. font-weight: bold;
  304. color: #c8a86b;
  305. }
  306. .integral-details .wrapper .list2 .item .earn {
  307. font-size: 26rpx;
  308. color: #c8a86b;
  309. border: 2rpx solid #c8a86b;
  310. text-align: center;
  311. line-height: 52rpx;
  312. height: 52rpx;
  313. width: 160rpx;
  314. border-radius: 50rpx;
  315. }
  316. .font_color{
  317. @include price_color(theme);
  318. }
  319. </style>