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

237 lines
10 KiB

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