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

213 lines
6.8 KiB

  1. <template>
  2. <view class="seckill-time-box " :class="mold == 'index' ? 'index' : ''">
  3. <view class="seckill seckill-item" v-if="active" >
  4. <view v-if="endtype == 0">
  5. <view class="no-starts">
  6. 进行中
  7. </view>
  8. <view class="time-text">
  9. {{endmessage}}
  10. </view>
  11. </view>
  12. <view class="time-out" v-if="endtype == 1">
  13. <i class="iconfont icon-shijian"></i>
  14. <view class="text my-class" >距离拼团结束还剩余</view>
  15. <view class="tiem"><span class="num-item"> <p class="zero" v-if="endTime.hour < 10">0</p>{{endTime.hour}}</span> 时 <span class="num-item"><p class="zero" v-if="endTime.minute < 10">0</p>{{endTime.minute}}</span> 分 <span class="num-item"><p class="zero" v-if="endTime.second < 10">0</p>{{endTime.second}}</span> </view>
  16. </view>
  17. </view>
  18. <view class="seckill-item" v-else>
  19. <view v-if="gotype == 0">
  20. <view class="no-starts">
  21. 未开始
  22. </view>
  23. <view class="time-text">
  24. {{message}}
  25. </view>
  26. </view>
  27. <view class="time-out" v-if="gotype == 1">
  28. <i class="iconfont icon-shijian"></i>
  29. <view class="text">距离拼团开始还剩余</view>
  30. <view class="tiem"><span class="num-item"> <p class="zero" v-if="startsTime.hour < 10">0</p>{{startsTime.hour}}</span> 时 <span class="num-item"> <p class="zero"v-if="startsTime.minute < 10">0</p>{{startsTime.minute}}</span> 分 <span class="num-item"> <p class="zero" v-if="startsTime.second < 10">0</p>{{startsTime.second}}</span> </view>
  31. </view>
  32. </view>
  33. </view>
  34. </template>
  35. <script>
  36. export default {
  37. data() {
  38. return {
  39. message: '',
  40. endmessage: '',
  41. active: false,
  42. gotype: 0,
  43. endtype: 0,
  44. endTime: {
  45. interval: '',
  46. day: 0,
  47. hour: 0,
  48. minute: 0,
  49. second: 0,
  50. count: 0
  51. },
  52. startsTime: {
  53. interval: '',
  54. day: 0,
  55. hour: 0,
  56. minute: 0,
  57. second: 0,
  58. count: 0
  59. }
  60. };
  61. },
  62. props: {
  63. end:{
  64. type: String,
  65. value: null
  66. },
  67. starts: {
  68. type: String,
  69. value: null
  70. },
  71. index: {
  72. type: Number,
  73. value: 0
  74. },
  75. findex: {
  76. type: Number,
  77. value: 0
  78. },
  79. server: {
  80. type: String,
  81. value: null
  82. },
  83. mold: {
  84. type: String,
  85. value: 'goods'
  86. }
  87. },
  88. options: {
  89. addGlobalClass: true
  90. },
  91. methods: {
  92. // 活动开始的倒计时
  93. countTime() {
  94. var d = 86400000,
  95. h = 3600000,
  96. n = 60000,
  97. end = this.end,
  98. server = this.server,
  99. arr = String(end).split(/\D/),
  100. newArr = String(server).split(/\D/);
  101. newArr = newArr.map(Number);
  102. arr = arr.map(Number);
  103. var serverTime = new Date(newArr[0], newArr[1] - 1, newArr[2], newArr[3], newArr[4], newArr[5]).getTime();
  104. var endTime = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]).getTime(); // 组件才秒杀列表页使用时,没有重新请求列表,服务器时间应该加上未开始倒计时的时间
  105. if (this.mold == 'list') {
  106. this.serverTime = serverTime + this.startsTime.count;
  107. } // 计算开始时间跟结束时间的差值
  108. var timeDiff = endTime - serverTime; // 在本地计算倒计时
  109. var allTime = this.endTime.count + 1000;
  110. this.endTime.count = allTime;
  111. var interval = timeDiff - this.endTime.count;
  112. if (interval < d) {
  113. this.endtype = 1;
  114. if (interval < 0) {
  115. // 活动结束
  116. this.$emit('end', {
  117. findex: this.findex,
  118. index: this.index
  119. }); // this.$emit('end',this.index)
  120. } else {
  121. var day = Math.floor(interval / d);
  122. Math.floor(interval -= day * d);
  123. var hour = Math.floor(interval / h);
  124. Math.floor(interval -= hour * h);
  125. var minute = Math.floor(interval / n);
  126. var second = Math.floor(interval % n / 1000);
  127. this.endTime.day = day;
  128. this.endTime.hour = hour;
  129. this.endTime.minute = minute;
  130. this.endTime.second = second;
  131. }
  132. } else {
  133. this.endmessage = `${arr[1]}${arr[2]} 日,${arr[3]} : ${arr[4]} 结束`;
  134. }
  135. },
  136. // 活动未开始的倒计时
  137. countStartsTime() {
  138. var d = 86400000,
  139. h = 3600000,
  140. n = 60000,
  141. sta = this.starts,
  142. server = this.server,
  143. arr = String(sta).split(/\D/),
  144. newArr = String(server).split(/\D/);
  145. console.log('jijiwawa');
  146. newArr = newArr.map(Number);
  147. arr = arr.map(Number);
  148. var serverTime = new Date(newArr[0], newArr[1] - 1, newArr[2], newArr[3], newArr[4], newArr[5]).getTime();
  149. var staTime = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]).getTime();
  150. var timeDiff = staTime - serverTime;
  151. var allTime = this.startsTime.count + 1000;
  152. this.startsTime.count = allTime;
  153. var interval = timeDiff - this.startsTime.count; // var interval = staTime - nowTime;
  154. // 时间差小于一天
  155. if (interval < d) {
  156. this.gotype = 1
  157. if (interval < 0) {
  158. // 代表活动已经开始了,需要执行活动开始倒计时
  159. var interval = setInterval(() => {
  160. this.countTime();
  161. }, 1000);
  162. this.active = true;
  163. this.endTime.interval = interval
  164. this.$emit('starts', {
  165. findex: this.findex,
  166. index: this.index
  167. }); // this.$emit('starts',this.index);
  168. // 清除掉倒计时,以免重复分发事件
  169. clearInterval(this.startsTime.interval);
  170. } else {
  171. var day = Math.floor(interval / d);
  172. Math.floor(interval -= day * d);
  173. var hour = Math.floor(interval / h);
  174. Math.floor(interval -= hour * h);
  175. var minute = Math.floor(interval / n);
  176. var second = Math.floor(interval % n / 1000);
  177. this.startsTime.day = day;
  178. this.startsTime.hour = hour;
  179. this.startsTime.minute = minute;
  180. this.startsTime.second = second;
  181. }
  182. } else {
  183. this.message = `${arr[1]}${arr[2]} 日,${arr[3]} : ${arr[4]} 开始`
  184. }
  185. }
  186. },
  187. mounted(){
  188. var interval = setInterval(() => {
  189. this.countStartsTime();
  190. }, 1000);
  191. this.startsTime.interval = interval
  192. }
  193. };
  194. </script>
  195. <style rel="stylesheet/less" lang="less">
  196. @import "group";
  197. </style>