金诚优选前端代码
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.

392 lines
12 KiB

  1. <template>
  2. <view id="collar">
  3. <view class="collar-banner">
  4. <view class="banner-l">
  5. <view class="co-item-top">
  6. <view class="avatar">
  7. <image :src="avatar"></image>
  8. </view>
  9. <view class="my-point">我的积分<view>{{info.point}}</view></view>
  10. </view>
  11. <view class="co-item-bottom">
  12. <progress v-if="info.sign" backgroundColor="rgba(0,0,0,.2)" activeColor="#F5A623" :percent="(info.sign.days-1)*(16.6+0.4)">
  13. <!--这里的percent值要加0.4%-->
  14. </progress>
  15. <view class="info" :class="info.sign.days > 1 ? 'already' : ''" style="left:-0.4%;">1</view>
  16. <view class="info" :class="info.sign.days > 2 ? 'already' : ''" style="left:16.6%">2</view>
  17. <view class="info" :class="info.sign.days > 3 ? 'already' : ''" style="left:33.2%">3</view>
  18. <view class="info" :class="info.sign.days > 4 ? 'already' : ''" style="left:49.8%">4</view>
  19. <view class="info" :class="info.sign.days > 5 ? 'already' : ''" style="left:66.4%">5</view>
  20. <view class="info" :class="info.sign.days > 6 ? 'already' : ''" style="left:83%">6</view>
  21. <view class="info" :class="info.sign.days > 7 ? 'already' : ''" style="left:99.6%">7</view>
  22. <view class="current-dot" :style="'left: ' + (info.sign.days - 1) * 16.6 + '%'" v-if="info.sign.days">
  23. <image src="https://ibrand-miniprogram.oss-cn-hangzhou.aliyuncs.com/%E5%B0%8F%E7%A8%8B%E5%BA%8F/cur.png"></image>
  24. </view>
  25. </view>
  26. </view>
  27. <view class="banner-r">
  28. <view class="content-text" v-if="!info.is_sign" @tap="getSign">
  29. 签到领积分
  30. </view>
  31. <view class="sign-day" v-if="info.is_sign">
  32. 已连续签到
  33. <view>{{info.sign.days}}<text></text></view>
  34. </view>
  35. </view>
  36. </view>
  37. <view class="collar-prize" v-if="sortReward.length">
  38. <view class="prize-item" :class="index == 4 ? 'times-text' : ''" v-for="(item, index) in sortReward" :key="index" >
  39. <image class="money" src="https://ibrand-miniprogram.oss-cn-hangzhou.aliyuncs.com/%E5%B0%8F%E7%A8%8B%E5%BA%8F/money.png" v-if="item.type == 'coupon'"></image>
  40. <image class="point" src="https://ibrand-miniprogram.oss-cn-hangzhou.aliyuncs.com/%E5%B0%8F%E7%A8%8B%E5%BA%8F/point.png" v-if="item.type == 'point'"></image>
  41. <image class="emoji" src="https://ibrand-miniprogram.oss-cn-hangzhou.aliyuncs.com/%E5%B0%8F%E7%A8%8B%E5%BA%8F/emoji.png" v-if="item.type == 'luck'"></image>
  42. <view>{{item.label}}</view>
  43. <view>{{item.text}}</view>
  44. <view class="checked" v-if="item.status">
  45. <image src="https://ibrand-miniprogram.oss-cn-hangzhou.aliyuncs.com/%E5%B0%8F%E7%A8%8B%E5%BA%8F/checked.png"></image>
  46. </view>
  47. <view class="get" v-if="index != 4 && !info.sign.get_reward" @tap="changes" :data-index="index" :data-id="item.id">
  48. <view class="get-small">点我领取</view>
  49. </view>
  50. </view>
  51. </view>
  52. <view class="collar-strategy">
  53. <image :src="item.image" mode="widthFix" v-for="(item, index) in info.banner" :key="index" v-if="info.banner.length != 0" @tap="jumpImg" :data-scr="item.link" ></image>
  54. </view>
  55. <view class="call-goods" v-if="info.sign.recommend_goods && info.sign.recommend_goods.length">
  56. <view class="title mx-1px-bottom">
  57. 相关推荐
  58. </view>
  59. <view class="content">
  60. <view class="like_list">
  61. <view class="like_box" :data-type="item.redeem_point" :data-id="item.id" v-for="(item, index) in info.sign.recommend_goods" :key="index" @tap="jumpdetail">
  62. <view>
  63. <view class="like_image">
  64. <image mode="widthFix" class="responsive" :src="item.img" alt></image>
  65. </view>
  66. <view class="like_name">
  67. {{item.name}}
  68. </view>
  69. <view class="like_money">
  70. {{item.sell_price}}
  71. </view>
  72. </view>
  73. </view>
  74. </view>
  75. </view>
  76. </view>
  77. </view>
  78. </template>
  79. <script>
  80. import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
  81. export default {
  82. data() {
  83. return {
  84. is_show: true,
  85. info: {
  86. sign: ''
  87. },
  88. sortReward: [],
  89. reward_id: '',
  90. reward: [],
  91. avatar: ''
  92. };
  93. },
  94. onLoad() {
  95. var toekn = this.$cookieStorage.get('user_token');
  96. if (toekn) {
  97. this.getInfomation();
  98. this.getAvatar();
  99. } else {
  100. wx.navigateTo({
  101. url: '/pages/user/register/register?url=' + getUrl()
  102. });
  103. }
  104. },
  105. components: {},
  106. props: {},
  107. methods: {
  108. jumpImg(e) {
  109. var src = e.currentTarget.dataset.src;
  110. wx.navigateTo({
  111. url: src
  112. });
  113. },
  114. //点击领取
  115. changes(e) {
  116. if (this.info.is_sign) {
  117. var reward_id = e.currentTarget.dataset.id;
  118. var index = e.currentTarget.dataset.index;
  119. this.getReward(reward_id, index);
  120. } else {
  121. wx.showModal({
  122. content: '请先签到',
  123. showCancel: false
  124. });
  125. } // debugger
  126. },
  127. //获取用户信息
  128. getInfomation() {
  129. var token = this.$cookieStorage.get('user_token');
  130. wx.showLoading({
  131. title: '加载中',
  132. mask: true
  133. });
  134. this.$http.get({
  135. api: 'api/sign/getSignReward',
  136. header: {
  137. Authorization: token
  138. }
  139. }).then(res => {
  140. if (res.statusCode == 200) {
  141. res = res.data;
  142. if (res.status) {
  143. if (!res.data.sign.get_reward) {
  144. res.data.sign.sortReward.forEach(item => {
  145. item.status = false;
  146. });
  147. }
  148. this.setData({
  149. info: res.data,
  150. reward: res.data.sign.sortReward
  151. });
  152. var newSortReward = this.info.sign.sortReward; //拿到后台给我的数组
  153. newSortReward.splice(4, 0, {
  154. //往数组里面添加文本
  155. label: '每日签到',
  156. text: '即可点击一次',
  157. type: 'text'
  158. });
  159. this.setData({
  160. sortReward: newSortReward
  161. });
  162. } else {
  163. wx.showModal({
  164. content: res.message || "请求失败",
  165. showCancel: false
  166. });
  167. }
  168. } else {
  169. wx.showModal({
  170. content: res.message || "请求失败",
  171. showCancel: false
  172. });
  173. }
  174. wx.hideLoading();
  175. }).catch(res => {
  176. wx.hideLoading();
  177. wx.showModal({
  178. content: "请求失败",
  179. showCancel: false
  180. });
  181. });
  182. },
  183. //签到动作
  184. getAction() {
  185. wx.showLoading({
  186. title: '正在签到',
  187. mask: true
  188. });
  189. var token = this.$cookieStorage.get('user_token');
  190. this.$http.post({
  191. api: 'api/sign/doSign',
  192. data: {
  193. sign_id: this.info.sign.id
  194. },
  195. header: {
  196. Authorization: token
  197. }
  198. }).then(res => {
  199. if (res.statusCode == 200) {
  200. res = res.data;
  201. if (res.status) {
  202. wx.showModal({
  203. content: res.data.message || "签到成功",
  204. showCancel: false,
  205. success: res => {
  206. if (res.confirm || !res.cancel && !res.confirm) {
  207. this.getInfomation(); //签到成功重新请求数据
  208. }
  209. }
  210. });
  211. } else {
  212. wx.showModal({
  213. content: res.message || '签到失败',
  214. showCancel: false
  215. });
  216. }
  217. } else {
  218. wx.showModal({
  219. content: '签到失败',
  220. showCancel: false
  221. });
  222. }
  223. wx.hideLoading();
  224. }).catch(res => {
  225. wx.hideLoading();
  226. wx.showModal({
  227. content: '请求失败',
  228. showCancel: false
  229. });
  230. });
  231. },
  232. //点击签到领积分
  233. getSign() {
  234. this.getAction();
  235. },
  236. //领取签到奖品
  237. getReward(reward_id, index) {
  238. var token = this.$cookieStorage.get('user_token');
  239. wx.showLoading({
  240. title: '加载中',
  241. mask: true
  242. });
  243. this.$http.post({
  244. api: 'api/sign/doDraw',
  245. data: {
  246. // sign_id: this.info.sign.id
  247. reward_id: reward_id,
  248. sign_reward: this.reward
  249. },
  250. header: {
  251. Authorization: token
  252. }
  253. }).then(res => {
  254. if (res.statusCode == 200) {
  255. res = res.data;
  256. if (res.status) {
  257. // this.setData({
  258. // 'info.sign.get_reward': true,
  259. // [`sortReward[${index}].status`]: true
  260. // });
  261. this.info={sign:{get_reward:true}};
  262. this.sortReward[index]={status:true};
  263. var item = this.sortReward[index];
  264. if (item.type == 'point') {
  265. this.setData({
  266. 'info.point': Number(this.info.point) + item.type_value
  267. });
  268. }
  269. } else {
  270. wx.showModal({
  271. content: res.message || '请求失败',
  272. showCancel: false
  273. });
  274. }
  275. } else {
  276. wx.showModal({
  277. content: res.message || '请求失败',
  278. showCancel: false
  279. });
  280. }
  281. wx.hideLoading();
  282. }).catch(res => {
  283. wx.hideLoading();
  284. wx.showModal({
  285. content: "请求失败",
  286. showCancel: false
  287. });
  288. });
  289. },
  290. jumpdetail(e) {
  291. var id = e.currentTarget.dataset.id;
  292. var type = e.currentTarget.dataset.type;
  293. if (type == 0) {
  294. wx.navigateTo({
  295. url: `/pages/store/detail/detail?id=${id}`
  296. });
  297. } else {
  298. wx.navigateTo({
  299. url: `/pages/pointStore/detail/detail?id=${id}`
  300. });
  301. }
  302. },
  303. //获取头像
  304. getAvatar() {
  305. wx.showLoading({
  306. title: '正在获取头像',
  307. mask: true
  308. });
  309. var token = this.$cookieStorage.get('user_token');
  310. this.$http.get({
  311. api: 'api/me',
  312. header: {
  313. Authorization: token
  314. }
  315. }).then(res => {
  316. if (res.statusCode == 200) {
  317. res = res.data;
  318. if (res.status) {
  319. this.setData({
  320. avatar: res.data.avatar
  321. });
  322. } else {
  323. wx.showModal({
  324. content: res.message || '获取头像失败',
  325. showCancel: false
  326. });
  327. }
  328. }
  329. wx.hideLoading();
  330. }).catch(res => {
  331. wx.hideLoading();
  332. wx.showModal({
  333. content: '请求失败',
  334. showCancel: false
  335. });
  336. });
  337. },
  338. setData: function (obj) {
  339. let that = this;
  340. let keys = [];
  341. let val, data;
  342. Object.keys(obj).forEach(function (key) {
  343. keys = key.split('.');
  344. val = obj[key];
  345. data = that.$data;
  346. keys.forEach(function (key2, index) {
  347. if (index + 1 == keys.length) {
  348. that.$set(data, key2, val);
  349. } else {
  350. if (!data[key2]) {
  351. that.$set(data, key2, {});
  352. }
  353. }
  354. data = data[key2];
  355. });
  356. });
  357. }
  358. },
  359. computed: {},
  360. watch: {}
  361. };
  362. </script>
  363. <style rel="stylesheet/less" lang="less">
  364. @import "collar";
  365. </style>