cyy-vue-material 7.0.19 → 7.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +34 -34
  3. package/src/App.vue +149 -149
  4. package/src/api/http.js +16 -16
  5. package/src/api/index.js +21 -21
  6. package/src/api/urlQuery.js +20 -20
  7. package/src/common/js/constant.js +5 -5
  8. package/src/common/js/index.js +1 -1
  9. package/src/components/vop-label.vue +29 -29
  10. package/src/index.dev.js +4 -4
  11. package/src/package/cyy-ArsenalActivity/components/u-cont-down.vue +316 -316
  12. package/src/package/cyy-ArsenalActivity/components/u-line-progress.vue +150 -150
  13. package/src/package/cyy-ArsenalActivity/cyy-ArsenalActivity.vue +820 -820
  14. package/src/package/cyy-ArsenalCarousel/cyy-ArsenalCarousel.vue +137 -137
  15. package/src/package/cyy-ArsenalClass/cyy-ArsenalClass.vue +564 -564
  16. package/src/package/cyy-ArsenalMyNavigation/cyy-ArsenalMyNavigation.vue +128 -125
  17. package/src/package/cyy-ArsenalMyTop/cyy-ArsenalMyTop.vue +211 -211
  18. package/src/package/cyy-ArsenalNavigation/cyy-ArsenalNavigation.vue +236 -236
  19. package/src/package/cyy-ArsenalPicture/cyy-ArsenalPicture.vue +228 -228
  20. package/src/package/cyy-ArsenalPromotion/cyy-ArsenalPromotion.vue +913 -899
  21. package/src/package/cyy-ArsenalRecommend/cyy-ArsenalRecommend.vue +56 -56
  22. package/src/package/cyy-ArsenalTop/cyy-ArsenalTop.vue +328 -328
  23. package/src/package/cyy-collocation/cyy-collocation.vue +639 -639
  24. package/src/package/cyy-goods/cyy-goods.vue +317 -317
  25. package/src/package/cyy-goodsOne/consult.vue +267 -267
  26. package/src/package/cyy-goodsOne/cyy-goodsOne.vue +217 -217
  27. package/src/package/cyy-image/cyy-image.vue +64 -64
  28. package/src/package/cyy-live/cyy-live.vue +196 -196
  29. package/src/package/cyy-new-product/cyy-new-product.vue +834 -834
  30. package/src/package/cyy-notice/cyy-notice.vue +137 -137
  31. package/src/package/cyy-search/cyy-search.vue +57 -57
  32. package/src/package/cyy-slider/cyy-slider.vue +117 -117
  33. package/src/package/cyy-title/cyy-title.vue +38 -38
  34. package/src/package/cyy-video/cyy-video.vue +49 -49
  35. package/src/package/index.js +21 -21
  36. package/src/utils/checkEnv.js +16 -16
  37. package/src/utils/fetchFactory.js +100 -100
  38. package/src/utils/index.js +2 -2
@@ -1,820 +1,820 @@
1
- <template>
2
- <div>
3
- <div v-if="activityCss(secGoodList) === 0 && !lowCode">
4
- <!-- 小程序没活动不显示任何内容 -->
5
- </div>
6
- <div
7
- v-else
8
- class="secKill"
9
- :style="{
10
- backgroundColor: props.backgroundColor,
11
- marginTop: `${props.marginTop}px`,
12
- marginBottom: `${props.marginBottom}px`,
13
- }"
14
- >
15
- <!-- secKill--tit -->
16
- <div class="secKill--tit">
17
- <div class="title">
18
- <img v-if="props.activityType === 0" src="../../static/gift@2x.png" alt="" style="width: 16px; height: 16px" />
19
- <img v-if="props.activityType === 1" src="../../static/clock@2x.png" alt="" style="width: 16px; height: 16px" />
20
- <div style="font-size: 14px; font-family: Helvetica; color: #1c2130; line-height: 17px; margin-left: 5px; margin-right: 5px">
21
- {{ props.title }}
22
- </div>
23
- <template v-if="lowCode">
24
- <uContDown v-if="props.countDown === 0" :timestamp="minTime" color="#fff" separator-color="#EB2B27" font-size="20" bg-color="#EB2B27"></uContDown>
25
- </template>
26
- <template v-else>
27
- <u-count-down
28
- v-if="props.countDown === 0"
29
- :timestamp="minTime"
30
- color="#fff"
31
- separator-color="#EB2B27"
32
- font-size="20"
33
- bg-color="#EB2B27"
34
- ></u-count-down>
35
- </template>
36
- <!-- <div class="changeOnce" @click="changeOneChange">换一换</div> -->
37
- </div>
38
- <div class="more">
39
- <div class="" @click="goSecList">{{ props.subTitle }}</div>
40
- <div class="img">
41
- <img :lazy-load="true" src="../../static/arrow.png" mode="" style="width: 100%; height: 100%" @click="goSecList"/>
42
- </div>
43
- </div>
44
- </div>
45
- <img v-if="props.activityImg" @click="goSecList" :lazy-load="true" :src="props.activityImg" style="width: 100%;margin-bottom: 10px;" mode="" />
46
- <!-- secKill--center -->
47
- <!-- 一个 -->
48
- <div v-if="activityCss(secGoodList) === 1">
49
- <div v-for="(item, index) in secGoodList" :key="index">
50
- <div class="secKill-One" v-for="(good, indexG) in item.rsSkuReDomainList" :key="indexG" @click="gosecGoodsDetail(good, item)">
51
- <div class="soneLeft">
52
- <img :lazy-load="true" :src="good.dataPic ? (good.dataPic.indexOf('http') === -1 ? domainNameUrl + good.dataPic : good.dataPic) : ''" mode="" />
53
- </div>
54
- <div class="soneRight">
55
- <div class="soneRightA">{{ good.goodsName }}</div>
56
- <div class="soneRightB" v-if="props.activityType === 0">
57
- <uLineProgress active-color="#EB2B27" inactive-color="#FCE7E8" :percent="diffFn(good)" height="10" :show-percent="false"></uLineProgress>
58
- <div v-if="lowCode" style="font-size: 11px; color: #595959; margin-left: 4px; line-height: 5px">剩{{ good.goodsSupplynum || 0 }}件</div>
59
- <div v-else style="font-size: 11px; color: #595959; margin-left: 4px; line-height: 22px">剩{{ good.goodsSupplynum || 0 }}件</div>
60
- </div>
61
- <div class="soneRightC">
62
- <div class="priceC">
63
- <span style="color: #ff9745">{{'¥' + good.pricesetNprice}}</span>
64
- <span style="color: #8c8c8c;text-decoration: line-through;margin-left: 3px;font-size: 11px" v-if='props.linePriceFlag === 1'>
65
- {{good.pricesetMakeprice }}
66
- </span>
67
- </div>
68
- <div class="dataStateButton">
69
- <span
70
- :style="{
71
- backgroundColor: btnDataStateColor(btnDataState(item, good)),
72
- }"
73
- >
74
- {{ btnDataState(item, good) }}
75
- </span>
76
- </div>
77
- </div>
78
- </div>
79
- </div>
80
- </div>
81
- </div>
82
- <!-- 两个 -->
83
- <div class="secKill-all" v-if="activityCss(secGoodList) === 2" :class="{ fel: true }">
84
- <div class="secKill--center" v-for="(item, index) in secGoodList" :key="index">
85
- <div
86
- :class="{ goodsDetail3: activityCss(secGoodList) === 3, goodsDetail2: activityCss(secGoodList) === 2 }"
87
- v-for="(good, indexG) in item.rsSkuReDomainList"
88
- :key="indexG"
89
- @click="gosecGoodsDetail(good, item)"
90
- >
91
- <img
92
- :class="{ bigimg3: activityCss(secGoodList) === 3, bigimg2: activityCss(secGoodList) === 2 }"
93
- :lazy-load="true"
94
- :src="good.dataPic ? (good.dataPic.indexOf('http') === -1 ? domainNameUrl + good.dataPic : good.dataPic) : ''"
95
- mode=""
96
- />
97
- <div class="secKill-goodsName text-common">
98
- {{ good.goodsName }}
99
- </div>
100
- <div class="price">
101
- <div style="display: flex">
102
- <div class="now-price-common">
103
- <span style="color: #f53a50">
104
- {{'¥' + good.pricesetNprice }}
105
- </span>
106
- <span style="color: #8c8c8c;text-decoration: line-through;margin-left: 3px;font-size: 11px" v-if='props.linePriceFlag === 1'>
107
- {{good.pricesetMakeprice }}
108
- </span>
109
- </div>
110
- </div>
111
- </div>
112
- <div class="dataStateButton">
113
- <span
114
- :style="{
115
- backgroundColor: btnDataStateColor(btnDataState(item, good)),
116
- }"
117
- >
118
- {{ btnDataState(item, good) }}</span
119
- >
120
- </div>
121
- </div>
122
- </div>
123
- </div>
124
- <!-- 三个 -->
125
- <div class="secKill-all" v-if="activityCss(secGoodList) === 3" :class="{ overflowX: true }">
126
- <div class="secKill--center" v-for="(item, index) in secGoodList" :key="index">
127
- <div
128
- :class="{ goodsDetail3: activityCss(secGoodList) === 3, goodsDetail2: activityCss(secGoodList) === 2 }"
129
- v-for="(good, indexG) in item.rsSkuReDomainList"
130
- :key="indexG"
131
- @click="gosecGoodsDetail(good, item)"
132
- >
133
- <img
134
- :class="{ bigimg3: activityCss(secGoodList) === 3, bigimg2: activityCss(secGoodList) === 2 }"
135
- :lazy-load="true"
136
- :src="good.dataPic ? (good.dataPic.indexOf('http') === -1 ? domainNameUrl + good.dataPic : good.dataPic) : ''"
137
- mode=""
138
- />
139
- <div class="secKill-goodsName text-common">
140
- {{ good.goodsName }}
141
- </div>
142
- <div class="price">
143
- <div style="display: flex">
144
- <div class="now-price-common">
145
- <span style="color: #f53a50">
146
- {{'¥' + good.pricesetNprice }}
147
- </span>
148
- <span style="color: #8c8c8c;text-decoration: line-through;margin-left: 3px;font-size: 11px" v-if='props.linePriceFlag === 1' >
149
- {{good.pricesetMakeprice }}
150
- </span>
151
- </div>
152
- </div>
153
- </div>
154
- <div class="dataStateButton">
155
- <span
156
- :style="{
157
- backgroundColor: btnDataStateColor(btnDataState(item, good)),
158
- }"
159
- >{{ btnDataState(item, good) }}</span
160
- >
161
- </div>
162
- </div>
163
- </div>
164
- </div>
165
- </div>
166
- </div>
167
- </template>
168
-
169
- <script>
170
- import { isLc, getUrl } from "../../utils/index.js";
171
- import { fetchPost } from "../../api/http.js";
172
- import { queryPromotionPageForC, queryCouponBatchPage, queryPromotionPageGroupBuying, getCouponBatchByCode, getPromotions } from "../../api/index.js";
173
- import uContDown from "./components/u-cont-down.vue";
174
- import uLineProgress from "./components/u-line-progress.vue";
175
- import { query } from "../../api/urlQuery.js";
176
- export default {
177
- name: "cyy-ArsenalActivity",
178
- props: {
179
- props: {
180
- activityType: Number, //活动类型
181
- countDown: Number, //倒计时
182
- linePriceFlag: Number, // 是否显示划线价
183
- crossedPrice: Number, //划线价格
184
- title: String, //标题
185
- subTitle: String, //副标题
186
- backgroundColor: String, //背景颜色
187
- marginTop: Number, //上边距
188
- marginBottom: Number, //下边距
189
- activityList: Array, //选择中的活动
190
- activityImg: String, //选择图片
191
- },
192
- },
193
- components: {
194
- uContDown,
195
- uLineProgress,
196
- },
197
- data() {
198
- return {
199
- lowCode: isLc,
200
- secGoodList: [],
201
- domainNameUrl: "",
202
- changeNum: 0 ,
203
- };
204
- },
205
- mounted() {
206
- this.domainNameUrl = getUrl(this);
207
- let that = this;
208
- this.getSecGoodList(that);
209
- // this.getIsLc();
210
- },
211
- computed: {
212
- btnDataStateColor() {
213
- return (item) => {
214
- if (item === "已终止" || item === "已抢空") {
215
- return "#D7D7D7";
216
- }
217
- if (item === "即将开始") {
218
- return "#F59A23";
219
- }
220
- return "#ed4444";
221
- };
222
- },
223
- btnDataState() {
224
- return (item, good) => {
225
- if ([-1, 2, 6].includes(item.dataState)) {
226
- return "已终止";
227
- } else if ([1].includes(item.dataState)) {
228
- if (good.goodsSupplynum === 0) {
229
- return "已抢空";
230
- }
231
- return "立即购买";
232
- } else if ([4].includes(item.dataState)) {
233
- return "即将开始";
234
- }
235
- };
236
- },
237
- getPrice() {
238
- return (item) => {
239
- if (item.pricesetType == "2" || item.pricesetType == "4") {
240
- return "¥" + item.pricesetNprice;
241
- } else if (item.pricesetType == "3") {
242
- return item.pricesetRefrice + "里程";
243
- } else {
244
- return item.pricesetNprice;
245
- }
246
- };
247
- },
248
- activityCss() {
249
- return (val) => {
250
- if (!val.length) {
251
- return 0;
252
- }
253
- if (val.length === 1) {
254
- return 1;
255
- }
256
- if (val.length === 2) {
257
- return 2;
258
- }
259
- if (val.length >= 3) {
260
- return 3;
261
- }
262
- return 0;
263
- };
264
- },
265
- diffFn() {
266
- return (val) => {
267
- if (val) {
268
- return ((val.goodsAhnum - val.goodsSupplynum) / val.goodsAhnum) * 100;
269
- }
270
- return "";
271
- };
272
- },
273
- // 获取最小时间
274
- minTime() {
275
- let arr = [];
276
- let flagArr = this.secGoodList.map(item=>{return item.dataState})
277
- if (flagArr.includes(1)) {
278
- this.secGoodList.forEach((res) => {
279
- if (res.dataState === 1) {
280
- arr.push(res.gmtModified);
281
- }
282
- });
283
- } else {
284
- this.secGoodList.forEach((res) => {
285
- if (res.dataState === 4) {
286
- arr.push(res.gmtCreate)
287
- } else {
288
- arr.push(res.gmtModified);
289
- }
290
- });
291
- }
292
- for (let j = 0; j < arr.length - 1; j++) {
293
- for (let i = 0; i < arr.length - 1; i++) {
294
- if (arr[i] > arr[i + 1]) {
295
- let temp = arr[i];
296
- arr[i] = arr[i + 1];
297
- arr[i + 1] = temp;
298
- }
299
- }
300
- }
301
- return arr[0];
302
- },
303
- setPromotionDates() {
304
- return (value, item) => {
305
- let time = (new Date(item.promotionBegintime) - Date.parse(new Date())) / 1000;
306
- let endtime = (new Date(item.promotionEndtime) - Date.parse(new Date())) / 1000;
307
- if (time > 0) {
308
- value.gmtCreate = time;
309
- } else {
310
- value.gmtCreate = 0;
311
- }
312
- if (endtime > 0) {
313
- value.gmtModified = endtime;
314
- } else {
315
- value.gmtModified = 0;
316
- }
317
- return { gmtCreate: value.gmtCreate, gmtModified: value.gmtModified };
318
- };
319
- },
320
- },
321
- methods: {
322
- // changeOneChange() {
323
- // this.getSecGoodList(this, "change");
324
- // },
325
- // 秒杀团购c端
326
- async getSecGoodList(that, change = null) {
327
-
328
- const handleResponse = (res, isSecKill = false) => {
329
- if (res && (isSecKill ? res.rows : res.list) && (isSecKill ? res.rows.length : res.list.length)) {
330
- const data = isSecKill ? res.rows : res.list;
331
- data.slice(0, 3).forEach((item) => {
332
- let time = (item.promotionBegintime - Date.parse(new Date())) / 1000;
333
- let endtime = (item.promotionEndtime - Date.parse(new Date())) / 1000;
334
- if (time > 0) {
335
- item.gmtCreate = time;
336
- } else {
337
- item.gmtCreate = 0;
338
- }
339
- if (endtime > 0) {
340
- item.gmtModified = endtime;
341
- } else {
342
- item.gmtModified = 0;
343
- }
344
- });
345
- this.secGoodList = data;
346
- } else {
347
- this.secGoodList = [];
348
- }
349
- };
350
-
351
- // 秒杀
352
- if (this.props.activityType === 0) {
353
- let couponBatchCode = "";
354
- console.log(this.props?.activityList,'选择活动=====秒杀')
355
- if (this.props?.activityList == 'all') {
356
- couponBatchCode = null
357
- } else {
358
- if (this.props?.activityList?.length) {
359
- couponBatchCode = this.props?.activityList.join(',')
360
- }
361
- }
362
-
363
- // if (change === "change" && this.props?.activityList.length > 0) {
364
- // // 定义一个函数来获取一个不等于上一次索引的随机索引
365
- // const getRandomIndex = (array, excludeIndex) => {
366
- // let randomIndex;
367
- // do {
368
- // randomIndex = Math.floor(Math.random() * array.length);
369
- // } while (randomIndex === excludeIndex);
370
- // return randomIndex;
371
- // };
372
-
373
- // // 调用函数,传入上一次的索引值
374
- // this.changeNum = getRandomIndex(this.props?.activityList, this.changeNum);
375
- // couponBatchCode = this.props?.activityList[this.changeNum];
376
- // } else {
377
- // // 如果不满足条件或者活动列表为空,则默认选择第一项
378
- // couponBatchCode = this.props?.activityList[0];
379
- // }
380
- if (isLc) {
381
- let url = "";
382
- if (couponBatchCode) {
383
- url = `${queryPromotionPageForC}?pbCode=0007&dataStateStr=1,4&rows=200&page=1&couponBatchCode=${couponBatchCode}&channelCode=${query.channelCode}&membercode=${query.membercode}`;
384
- } else {
385
- // 默认查
386
- this.secGoodList = [];
387
- // return
388
- url = `${queryPromotionPageForC}?pbCode=0007&dataStateStr=1,4&rows=200&page=1&orderStr=PROMOTION_ENDTIME asc&membercode=${query.membercode}&channelCode=${query.channelCode}`;
389
- }
390
- const { list } = await fetchPost(url);
391
- handleResponse({ list });
392
- } else {
393
- let params = {
394
- pbCode: "0007",
395
- page: 1,
396
- rows: 200,
397
- dataStateStr: "1,4",
398
- couponBatchCode,
399
- };
400
- if (!couponBatchCode) {
401
- this.secGoodList = [];
402
- // return;
403
- params.dataStateStr = "1,4";
404
- params.orderStr = "PROMOTION_ENDTIME asc";
405
- }
406
- console.log(params,'params秒杀')
407
- that.http.post(queryPromotionPageForC, params).then((res) => {
408
- handleResponse(res);
409
- });
410
- }
411
- }
412
-
413
- // 团购
414
- if (this.props.activityType === 1) {
415
- let promotionCode = ""
416
- console.log(this.props?.activityList,'选择活动------团购')
417
- if (this.props?.activityList == 'all') {
418
- promotionCode = null
419
- } else {
420
- if (this.props?.activityList?.length) {
421
- promotionCode = this.props?.activityList.join(',')
422
- }
423
- }
424
- // if (change === "change" && this.props?.activityList.length > 0) {
425
- // // 定义一个函数来获取一个不等于上一次索引的随机索引
426
- // const getRandomIndex = (array, excludeIndex) => {
427
- // let randomIndex;
428
- // do {
429
- // randomIndex = Math.floor(Math.random() * array.length);
430
- // } while (randomIndex === excludeIndex);
431
- // return randomIndex;
432
- // };
433
-
434
- // // 调用函数,传入上一次的索引值
435
- // this.changeNum = getRandomIndex(this.props?.activityList, this.changeNum);
436
- // promotionCode = this.props?.activityList[this.changeNum];
437
- // } else {
438
- // // 如果不满足条件或者活动列表为空,则默认选择第一项
439
- // promotionCode = this.props?.activityList[0];
440
- // }
441
- if (isLc) {
442
- let url = "";
443
- if (promotionCode) {
444
- url = `${queryPromotionPageForC}?pbCode=0008&dataStateStr=1,4&rows=200&page=1&promotionCode=${promotionCode}&channelCode=${query.channelCode}&membercode=${query.membercode}`;
445
- } else {
446
- this.secGoodList = [];
447
- // return
448
- url = `${queryPromotionPageForC}?pbCode=0008&dataStateStr=1,4&rows=200&page=1&orderStr=PROMOTION_ENDTIME asc&membercode=${query.membercode}&channelCode=${query.channelCode}`;
449
- }
450
- const { rows } = await fetchPost(url);
451
- handleResponse({ rows }, true);
452
- } else {
453
- let params = {
454
- pbCode: "0008",
455
- dataStateStr: "1,4",
456
- page: 1,
457
- rows: 200,
458
- promotionCode,
459
- };
460
- if (!promotionCode) {
461
- this.secGoodList = [];
462
- // return
463
- params.dataStateStr = "1,4";
464
- params.orderStr = "PROMOTION_ENDTIME asc";
465
- }
466
- console.log(params,'params团购')
467
- that.http.post(queryPromotionPageForC, params).then(async (res) => {
468
- if (res && res.rows) {
469
- if (this.page === 1 && res.rows.length === 0) {
470
- this.seckillGoodsList = [];
471
- } else {
472
- const data = res.rows.map((item) => {
473
- let time = (item.promotionBegintime - Date.parse(new Date())) / 1000;
474
- let endtime = (item.promotionEndtime - Date.parse(new Date())) / 1000;
475
- if (time > 0) {
476
- item.gmtCreate = time;
477
- } else {
478
- item.gmtCreate = 0;
479
- }
480
- if (endtime > 0) {
481
- item.gmtModified = endtime;
482
- } else {
483
- item.gmtModified = 0;
484
- }
485
- if (item.promotionState == 0) {
486
- this.$set(item, "PeopleNum", item.couponOnceNump);
487
- }
488
- return item;
489
- });
490
- const tempList = data.filter((item) => item.promotionState == 0);
491
- this.secGoodList = tempList;
492
- }
493
- }
494
- });
495
- }
496
- }
497
- },
498
- goSecList() {
499
- this.$emit("goSecList", this.props);
500
- },
501
- gosecGoodsDetail(good, item) {
502
- let goodsType;
503
- if (this.props.activityType === 0) {
504
- goodsType = 26;
505
- }
506
- if (this.props.activityType === 1) {
507
- goodsType = 24;
508
- }
509
- this.$emit("gosecGoodsDetail", good.skuNo, item.gmtModified, item.promotionCode, item.promotionFrequency, item.inventory, goodsType);
510
- },
511
- },
512
- };
513
- </script>
514
-
515
- <style lang="less" scoped>
516
- .secKill {
517
- margin: 0 auto;
518
- box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.1);
519
- border-radius: 7px;
520
- padding: 13.5px 10px 0;
521
-
522
- .soon {
523
- width: 64px;
524
- height: 24px;
525
- background: linear-gradient(90deg, #ff9d0d 0%, #eb2b27 100%);
526
- border-radius: 12px;
527
- font-size: 12px;
528
- font-family: PingFangSC-Medium, PingFang SC;
529
- font-weight: 500;
530
- color: #ffffff;
531
- text-align: center;
532
- line-height: 24px;
533
- }
534
-
535
- .secKill--tit {
536
- width: 100%;
537
- display: flex;
538
- justify-content: space-between;
539
- align-items: center;
540
- padding-bottom: 10px;
541
-
542
- .title {
543
- display: flex;
544
- align-items: center;
545
- .changeOnce {
546
- color: #439fff;
547
- font-size: 10px;
548
- margin-left: 6px;
549
- }
550
- }
551
-
552
- .more {
553
- font-size: 12px;
554
- font-family: PingFangSC-Regular, PingFang SC;
555
- font-weight: 400;
556
- color: #595959;
557
- display: flex;
558
-
559
- .img {
560
- margin-left: 3px;
561
- width: 5.5px;
562
- height: 9px;
563
- }
564
- }
565
- }
566
-
567
- .secKill-all {
568
- display: flex;
569
- .secKill--center {
570
- margin-right: 8px;
571
- margin-bottom: 8px;
572
- background: #ffffff;
573
- border-radius: 8px;
574
- padding: 8px 8px;
575
- position: relative;
576
-
577
- .secKill-goodsName {
578
- height: 34px;
579
- font-size: 12px;
580
- font-family: PingFangSC-Regular, PingFang SC;
581
- font-weight: 400;
582
- color: #000000;
583
- line-height: 17px;
584
- overflow: hidden;
585
- text-overflow: ellipsis;
586
- display: -webkit-box;
587
- -webkit-line-clamp: 2;
588
- line-clamp: 2;
589
- -webkit-box-orient: vertical;
590
- }
591
- .dataStateButton {
592
- display: flex;
593
- justify-content: center;
594
- margin-top: 5px;
595
- span {
596
- font-size: 10px;
597
- color: #ffffff;
598
- border-radius: 17px;
599
- padding: 5px 12px;
600
- }
601
- }
602
- }
603
- }
604
- .secKill--bottom {
605
- display: flex;
606
- .left {
607
- width: 164px;
608
- height: 255px;
609
- border-right: 2px solid #f6f6f6;
610
- padding: 0 7.5px;
611
-
612
- .bigimgs {
613
- width: 100px;
614
- height: 100px;
615
- margin: 0 auto;
616
- }
617
-
618
- .goodsName {
619
- width: 153px;
620
- font-size: 13px;
621
- font-family: PingFangSC-Semibold, PingFang SC;
622
- font-weight: 600;
623
- color: #262626;
624
- display: -webkit-box;
625
- -webkit-box-orient: vertical;
626
- -webkit-line-clamp: 2;
627
- overflow: hidden;
628
- margin-bottom: 8px;
629
- height: 37.5px;
630
- margin-top: 7.5px;
631
- }
632
-
633
- .price {
634
- display: flex;
635
- justify-content: space-between;
636
- align-items: center;
637
- }
638
- }
639
-
640
- .left:nth-child(2) {
641
- border: none;
642
- }
643
-
644
- .right {
645
- width: 164px;
646
- height: 255px;
647
- padding-left: 7.5px;
648
-
649
- .bigimg {
650
- width: 153px;
651
- height: 118px;
652
- background-color: rgba(0, 0, 0, 0.3);
653
- }
654
-
655
- .goodsName {
656
- width: 153px;
657
- font-size: 13px;
658
- font-family: PingFangSC-Semibold, PingFang SC;
659
- font-weight: 600;
660
- color: #262626;
661
- display: -webkit-box;
662
- -webkit-box-orient: vertical;
663
- -webkit-line-clamp: 2;
664
- overflow: hidden;
665
- margin-bottom: 10px;
666
- }
667
-
668
- .price {
669
- display: flex;
670
- justify-content: space-between;
671
- align-items: center;
672
- }
673
- }
674
- }
675
- }
676
- .goodsDetail3 {
677
- width: 92px;
678
- @media (min-width: 390px) and (max-width: 414px) {
679
- width: 102px;
680
- }
681
- @media (min-width: 415px) and (max-width: 630px) {
682
- width: 112px;
683
- }
684
- }
685
- .bigimg3 {
686
- width: 90px;
687
- height: 90px;
688
- @media (min-width: 390px) and (max-width: 414px) {
689
- width: 100px;
690
- }
691
- @media (min-width: 415px) and (max-width: 630px) {
692
- width: 110px;
693
- }
694
- }
695
- .goodsDetail2 {
696
- width: 132px;
697
- @media (max-width: 320px) {
698
- width: 112px;
699
- }
700
- @media (min-width: 321px) and (max-width: 360px) {
701
- width: 122px;
702
- }
703
- @media (min-width: 361px) and (max-width: 389px) {
704
- width: 132px;
705
- }
706
- @media (min-width: 390px) and (max-width: 410px) {
707
- width: 142px;
708
- }
709
- @media (min-width: 411px) and (max-width: 430px) {
710
- width: 152px;
711
- }
712
- @media (min-width: 431px) and (max-width: 630px) {
713
- width: 162px;
714
- }
715
- }
716
- .bigimg2 {
717
- width: 130px;
718
- height: 130px;
719
- @media (max-width: 320px) {
720
- width: 110px;
721
- height: 110px;
722
- }
723
- @media (min-width: 321px) and (max-width: 360px) {
724
- width: 120px;
725
- height: 120px;
726
- }
727
- @media (min-width: 361px) and (max-width: 389px) {
728
- width: 130px;
729
- height: 130px;
730
- }
731
- @media (min-width: 390px) and (max-width: 410px) {
732
- width: 140px;
733
- height: 140px;
734
- }
735
- @media (min-width: 411px) and (max-width: 430px) {
736
- width: 150px;
737
- height: 150px;
738
- }
739
- @media (min-width: 431px) and (max-width: 630px) {
740
- width: 160px;
741
- height: 160px;
742
- }
743
- }
744
- .overflowX {
745
- overflow: hidden;
746
- overflow-x: scroll;
747
- }
748
- .fel {
749
- display: flex;
750
- justify-content: space-between;
751
- }
752
- .secKill-One {
753
- display: flex;
754
- padding: 8px;
755
- .soneLeft {
756
- width: 110px;
757
- height: 110px;
758
- margin-right: 8px;
759
- img {
760
- width: 110px;
761
- height: 110px;
762
- border-radius: 6px;
763
- }
764
- }
765
- .soneRight {
766
- width: 100%;
767
- display: flex;
768
- flex-direction: column;
769
- justify-content: space-between;
770
- .soneRightA {
771
- font-family: PingFangSC, PingFang SC;
772
- font-weight: 400;
773
- font-size: 14px;
774
- color: #394259;
775
- line-height: 21px;
776
- text-align: left;
777
- font-style: normal;
778
- overflow: hidden;
779
- text-overflow: ellipsis;
780
- display: -webkit-box;
781
- -webkit-box-orient: vertical;
782
- -webkit-line-clamp: 2;
783
- }
784
- .soneRightB {
785
- display: flex;
786
- justify-content: space-between;
787
- .uline {
788
- width: 152px;
789
- height: 10px;
790
- background: #ed4444;
791
- border-radius: 3px;
792
- opacity: 0.1;
793
- }
794
- }
795
- .soneRightC {
796
- display: flex;
797
- justify-content: space-between;
798
- .priceC {
799
- font-family: DINAlternate, DINAlternate;
800
- font-weight: bold;
801
- font-size: 18px;
802
- line-height: 29px;
803
- text-align: left;
804
- font-style: normal;
805
- }
806
- .dataStateButton {
807
- display: flex;
808
- justify-content: center;
809
- margin-top: 5px;
810
- span {
811
- font-size: 10px;
812
- color: #ffffff;
813
- border-radius: 17px;
814
- padding: 5px 12px;
815
- }
816
- }
817
- }
818
- }
819
- }
820
- </style>
1
+ <template>
2
+ <div>
3
+ <div v-if="activityCss(secGoodList) === 0 && !lowCode">
4
+ <!-- 小程序没活动不显示任何内容 -->
5
+ </div>
6
+ <div
7
+ v-else
8
+ class="secKill"
9
+ :style="{
10
+ backgroundColor: props.backgroundColor,
11
+ marginTop: `${props.marginTop}px`,
12
+ marginBottom: `${props.marginBottom}px`,
13
+ }"
14
+ >
15
+ <!-- secKill--tit -->
16
+ <div class="secKill--tit">
17
+ <div class="title">
18
+ <img v-if="props.activityType === 0" src="../../static/gift@2x.png" alt="" style="width: 16px; height: 16px" />
19
+ <img v-if="props.activityType === 1" src="../../static/clock@2x.png" alt="" style="width: 16px; height: 16px" />
20
+ <div style="font-size: 14px; font-family: Helvetica; color: #1c2130; line-height: 17px; margin-left: 5px; margin-right: 5px">
21
+ {{ props.title }}
22
+ </div>
23
+ <template v-if="lowCode">
24
+ <uContDown v-if="props.countDown === 0" :timestamp="minTime" color="#fff" separator-color="#EB2B27" font-size="20" bg-color="#EB2B27"></uContDown>
25
+ </template>
26
+ <template v-else>
27
+ <u-count-down
28
+ v-if="props.countDown === 0"
29
+ :timestamp="minTime"
30
+ color="#fff"
31
+ separator-color="#EB2B27"
32
+ font-size="20"
33
+ bg-color="#EB2B27"
34
+ ></u-count-down>
35
+ </template>
36
+ <!-- <div class="changeOnce" @click="changeOneChange">换一换</div> -->
37
+ </div>
38
+ <div class="more">
39
+ <div class="" @click="goSecList">{{ props.subTitle }}</div>
40
+ <div class="img">
41
+ <img :lazy-load="true" src="../../static/arrow.png" mode="" style="width: 100%; height: 100%" @click="goSecList"/>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ <img v-if="props.activityImg" @click="goSecList" :lazy-load="true" :src="props.activityImg" style="width: 100%;margin-bottom: 10px;" mode="" />
46
+ <!-- secKill--center -->
47
+ <!-- 一个 -->
48
+ <div v-if="activityCss(secGoodList) === 1">
49
+ <div v-for="(item, index) in secGoodList" :key="index">
50
+ <div class="secKill-One" v-for="(good, indexG) in item.rsSkuReDomainList" :key="indexG" @click="gosecGoodsDetail(good, item)">
51
+ <div class="soneLeft">
52
+ <img :lazy-load="true" :src="good.dataPic ? (good.dataPic.indexOf('http') === -1 ? domainNameUrl + good.dataPic : good.dataPic) : ''" mode="" />
53
+ </div>
54
+ <div class="soneRight">
55
+ <div class="soneRightA">{{ good.goodsName }}</div>
56
+ <div class="soneRightB" v-if="props.activityType === 0">
57
+ <uLineProgress active-color="#EB2B27" inactive-color="#FCE7E8" :percent="diffFn(good)" height="10" :show-percent="false"></uLineProgress>
58
+ <div v-if="lowCode" style="font-size: 11px; color: #595959; margin-left: 4px; line-height: 5px">剩{{ good.goodsSupplynum || 0 }}件</div>
59
+ <div v-else style="font-size: 11px; color: #595959; margin-left: 4px; line-height: 22px">剩{{ good.goodsSupplynum || 0 }}件</div>
60
+ </div>
61
+ <div class="soneRightC">
62
+ <div class="priceC">
63
+ <span style="color: #ff9745">{{'¥' + good.pricesetNprice}}</span>
64
+ <span style="color: #8c8c8c;text-decoration: line-through;margin-left: 3px;font-size: 11px" v-if='props.linePriceFlag === 1'>
65
+ {{good.pricesetMakeprice }}
66
+ </span>
67
+ </div>
68
+ <div class="dataStateButton">
69
+ <span
70
+ :style="{
71
+ backgroundColor: btnDataStateColor(btnDataState(item, good)),
72
+ }"
73
+ >
74
+ {{ btnDataState(item, good) }}
75
+ </span>
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ <!-- 两个 -->
83
+ <div class="secKill-all" v-if="activityCss(secGoodList) === 2" :class="{ fel: true }">
84
+ <div class="secKill--center" v-for="(item, index) in secGoodList" :key="index">
85
+ <div
86
+ :class="{ goodsDetail3: activityCss(secGoodList) === 3, goodsDetail2: activityCss(secGoodList) === 2 }"
87
+ v-for="(good, indexG) in item.rsSkuReDomainList"
88
+ :key="indexG"
89
+ @click="gosecGoodsDetail(good, item)"
90
+ >
91
+ <img
92
+ :class="{ bigimg3: activityCss(secGoodList) === 3, bigimg2: activityCss(secGoodList) === 2 }"
93
+ :lazy-load="true"
94
+ :src="good.dataPic ? (good.dataPic.indexOf('http') === -1 ? domainNameUrl + good.dataPic : good.dataPic) : ''"
95
+ mode=""
96
+ />
97
+ <div class="secKill-goodsName text-common">
98
+ {{ good.goodsName }}
99
+ </div>
100
+ <div class="price">
101
+ <div style="display: flex">
102
+ <div class="now-price-common">
103
+ <span style="color: #f53a50">
104
+ {{'¥' + good.pricesetNprice }}
105
+ </span>
106
+ <span style="color: #8c8c8c;text-decoration: line-through;margin-left: 3px;font-size: 11px" v-if='props.linePriceFlag === 1'>
107
+ {{good.pricesetMakeprice }}
108
+ </span>
109
+ </div>
110
+ </div>
111
+ </div>
112
+ <div class="dataStateButton">
113
+ <span
114
+ :style="{
115
+ backgroundColor: btnDataStateColor(btnDataState(item, good)),
116
+ }"
117
+ >
118
+ {{ btnDataState(item, good) }}</span
119
+ >
120
+ </div>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ <!-- 三个 -->
125
+ <div class="secKill-all" v-if="activityCss(secGoodList) === 3" :class="{ overflowX: true }">
126
+ <div class="secKill--center" v-for="(item, index) in secGoodList" :key="index">
127
+ <div
128
+ :class="{ goodsDetail3: activityCss(secGoodList) === 3, goodsDetail2: activityCss(secGoodList) === 2 }"
129
+ v-for="(good, indexG) in item.rsSkuReDomainList"
130
+ :key="indexG"
131
+ @click="gosecGoodsDetail(good, item)"
132
+ >
133
+ <img
134
+ :class="{ bigimg3: activityCss(secGoodList) === 3, bigimg2: activityCss(secGoodList) === 2 }"
135
+ :lazy-load="true"
136
+ :src="good.dataPic ? (good.dataPic.indexOf('http') === -1 ? domainNameUrl + good.dataPic : good.dataPic) : ''"
137
+ mode=""
138
+ />
139
+ <div class="secKill-goodsName text-common">
140
+ {{ good.goodsName }}
141
+ </div>
142
+ <div class="price">
143
+ <div style="display: flex">
144
+ <div class="now-price-common">
145
+ <span style="color: #f53a50">
146
+ {{'¥' + good.pricesetNprice }}
147
+ </span>
148
+ <span style="color: #8c8c8c;text-decoration: line-through;margin-left: 3px;font-size: 11px" v-if='props.linePriceFlag === 1' >
149
+ {{good.pricesetMakeprice }}
150
+ </span>
151
+ </div>
152
+ </div>
153
+ </div>
154
+ <div class="dataStateButton">
155
+ <span
156
+ :style="{
157
+ backgroundColor: btnDataStateColor(btnDataState(item, good)),
158
+ }"
159
+ >{{ btnDataState(item, good) }}</span
160
+ >
161
+ </div>
162
+ </div>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ </div>
167
+ </template>
168
+
169
+ <script>
170
+ import { isLc, getUrl } from "../../utils/index.js";
171
+ import { fetchPost } from "../../api/http.js";
172
+ import { queryPromotionPageForC, queryCouponBatchPage, queryPromotionPageGroupBuying, getCouponBatchByCode, getPromotions } from "../../api/index.js";
173
+ import uContDown from "./components/u-cont-down.vue";
174
+ import uLineProgress from "./components/u-line-progress.vue";
175
+ import { query } from "../../api/urlQuery.js";
176
+ export default {
177
+ name: "cyy-ArsenalActivity",
178
+ props: {
179
+ props: {
180
+ activityType: Number, //活动类型
181
+ countDown: Number, //倒计时
182
+ linePriceFlag: Number, // 是否显示划线价
183
+ crossedPrice: Number, //划线价格
184
+ title: String, //标题
185
+ subTitle: String, //副标题
186
+ backgroundColor: String, //背景颜色
187
+ marginTop: Number, //上边距
188
+ marginBottom: Number, //下边距
189
+ activityList: Array, //选择中的活动
190
+ activityImg: String, //选择图片
191
+ },
192
+ },
193
+ components: {
194
+ uContDown,
195
+ uLineProgress,
196
+ },
197
+ data() {
198
+ return {
199
+ lowCode: isLc,
200
+ secGoodList: [],
201
+ domainNameUrl: "",
202
+ changeNum: 0 ,
203
+ };
204
+ },
205
+ mounted() {
206
+ this.domainNameUrl = getUrl(this);
207
+ let that = this;
208
+ this.getSecGoodList(that);
209
+ // this.getIsLc();
210
+ },
211
+ computed: {
212
+ btnDataStateColor() {
213
+ return (item) => {
214
+ if (item === "已终止" || item === "已抢空") {
215
+ return "#D7D7D7";
216
+ }
217
+ if (item === "即将开始") {
218
+ return "#F59A23";
219
+ }
220
+ return "#ed4444";
221
+ };
222
+ },
223
+ btnDataState() {
224
+ return (item, good) => {
225
+ if ([-1, 2, 6].includes(item.dataState)) {
226
+ return "已终止";
227
+ } else if ([1].includes(item.dataState)) {
228
+ if (good.goodsSupplynum === 0) {
229
+ return "已抢空";
230
+ }
231
+ return "立即购买";
232
+ } else if ([4].includes(item.dataState)) {
233
+ return "即将开始";
234
+ }
235
+ };
236
+ },
237
+ getPrice() {
238
+ return (item) => {
239
+ if (item.pricesetType == "2" || item.pricesetType == "4") {
240
+ return "¥" + item.pricesetNprice;
241
+ } else if (item.pricesetType == "3") {
242
+ return item.pricesetRefrice + "里程";
243
+ } else {
244
+ return item.pricesetNprice;
245
+ }
246
+ };
247
+ },
248
+ activityCss() {
249
+ return (val) => {
250
+ if (!val.length) {
251
+ return 0;
252
+ }
253
+ if (val.length === 1) {
254
+ return 1;
255
+ }
256
+ if (val.length === 2) {
257
+ return 2;
258
+ }
259
+ if (val.length >= 3) {
260
+ return 3;
261
+ }
262
+ return 0;
263
+ };
264
+ },
265
+ diffFn() {
266
+ return (val) => {
267
+ if (val) {
268
+ return ((val.goodsAhnum - val.goodsSupplynum) / val.goodsAhnum) * 100;
269
+ }
270
+ return "";
271
+ };
272
+ },
273
+ // 获取最小时间
274
+ minTime() {
275
+ let arr = [];
276
+ let flagArr = this.secGoodList.map(item=>{return item.dataState})
277
+ if (flagArr.includes(1)) {
278
+ this.secGoodList.forEach((res) => {
279
+ if (res.dataState === 1) {
280
+ arr.push(res.gmtModified);
281
+ }
282
+ });
283
+ } else {
284
+ this.secGoodList.forEach((res) => {
285
+ if (res.dataState === 4) {
286
+ arr.push(res.gmtCreate)
287
+ } else {
288
+ arr.push(res.gmtModified);
289
+ }
290
+ });
291
+ }
292
+ for (let j = 0; j < arr.length - 1; j++) {
293
+ for (let i = 0; i < arr.length - 1; i++) {
294
+ if (arr[i] > arr[i + 1]) {
295
+ let temp = arr[i];
296
+ arr[i] = arr[i + 1];
297
+ arr[i + 1] = temp;
298
+ }
299
+ }
300
+ }
301
+ return arr[0];
302
+ },
303
+ setPromotionDates() {
304
+ return (value, item) => {
305
+ let time = (new Date(item.promotionBegintime) - Date.parse(new Date())) / 1000;
306
+ let endtime = (new Date(item.promotionEndtime) - Date.parse(new Date())) / 1000;
307
+ if (time > 0) {
308
+ value.gmtCreate = time;
309
+ } else {
310
+ value.gmtCreate = 0;
311
+ }
312
+ if (endtime > 0) {
313
+ value.gmtModified = endtime;
314
+ } else {
315
+ value.gmtModified = 0;
316
+ }
317
+ return { gmtCreate: value.gmtCreate, gmtModified: value.gmtModified };
318
+ };
319
+ },
320
+ },
321
+ methods: {
322
+ // changeOneChange() {
323
+ // this.getSecGoodList(this, "change");
324
+ // },
325
+ // 秒杀团购c端
326
+ async getSecGoodList(that, change = null) {
327
+
328
+ const handleResponse = (res, isSecKill = false) => {
329
+ if (res && (isSecKill ? res.rows : res.list) && (isSecKill ? res.rows.length : res.list.length)) {
330
+ const data = isSecKill ? res.rows : res.list;
331
+ data.slice(0, 3).forEach((item) => {
332
+ let time = (item.promotionBegintime - Date.parse(new Date())) / 1000;
333
+ let endtime = (item.promotionEndtime - Date.parse(new Date())) / 1000;
334
+ if (time > 0) {
335
+ item.gmtCreate = time;
336
+ } else {
337
+ item.gmtCreate = 0;
338
+ }
339
+ if (endtime > 0) {
340
+ item.gmtModified = endtime;
341
+ } else {
342
+ item.gmtModified = 0;
343
+ }
344
+ });
345
+ this.secGoodList = data;
346
+ } else {
347
+ this.secGoodList = [];
348
+ }
349
+ };
350
+
351
+ // 秒杀
352
+ if (this.props.activityType === 0) {
353
+ let couponBatchCode = "";
354
+ console.log(this.props?.activityList,'选择活动=====秒杀')
355
+ if (this.props?.activityList == 'all') {
356
+ couponBatchCode = null
357
+ } else {
358
+ if (this.props?.activityList?.length) {
359
+ couponBatchCode = this.props?.activityList.join(',')
360
+ }
361
+ }
362
+
363
+ // if (change === "change" && this.props?.activityList.length > 0) {
364
+ // // 定义一个函数来获取一个不等于上一次索引的随机索引
365
+ // const getRandomIndex = (array, excludeIndex) => {
366
+ // let randomIndex;
367
+ // do {
368
+ // randomIndex = Math.floor(Math.random() * array.length);
369
+ // } while (randomIndex === excludeIndex);
370
+ // return randomIndex;
371
+ // };
372
+
373
+ // // 调用函数,传入上一次的索引值
374
+ // this.changeNum = getRandomIndex(this.props?.activityList, this.changeNum);
375
+ // couponBatchCode = this.props?.activityList[this.changeNum];
376
+ // } else {
377
+ // // 如果不满足条件或者活动列表为空,则默认选择第一项
378
+ // couponBatchCode = this.props?.activityList[0];
379
+ // }
380
+ if (isLc) {
381
+ let url = "";
382
+ if (couponBatchCode) {
383
+ url = `${queryPromotionPageForC}?pbCode=0007&dataStateStr=1,4&rows=200&page=1&couponBatchCode=${couponBatchCode}&channelCode=${query.channelCode}&membercode=${query.membercode}`;
384
+ } else {
385
+ // 默认查
386
+ this.secGoodList = [];
387
+ // return
388
+ url = `${queryPromotionPageForC}?pbCode=0007&dataStateStr=1,4&rows=200&page=1&orderStr=PROMOTION_ENDTIME asc&membercode=${query.membercode}&channelCode=${query.channelCode}`;
389
+ }
390
+ const { list } = await fetchPost(url);
391
+ handleResponse({ list });
392
+ } else {
393
+ let params = {
394
+ pbCode: "0007",
395
+ page: 1,
396
+ rows: 200,
397
+ dataStateStr: "1,4",
398
+ couponBatchCode,
399
+ };
400
+ if (!couponBatchCode) {
401
+ this.secGoodList = [];
402
+ // return;
403
+ params.dataStateStr = "1,4";
404
+ params.orderStr = "PROMOTION_ENDTIME asc";
405
+ }
406
+ console.log(params,'params秒杀')
407
+ that.http.post(queryPromotionPageForC, params).then((res) => {
408
+ handleResponse(res);
409
+ });
410
+ }
411
+ }
412
+
413
+ // 团购
414
+ if (this.props.activityType === 1) {
415
+ let promotionCode = ""
416
+ console.log(this.props?.activityList,'选择活动------团购')
417
+ if (this.props?.activityList == 'all') {
418
+ promotionCode = null
419
+ } else {
420
+ if (this.props?.activityList?.length) {
421
+ promotionCode = this.props?.activityList.join(',')
422
+ }
423
+ }
424
+ // if (change === "change" && this.props?.activityList.length > 0) {
425
+ // // 定义一个函数来获取一个不等于上一次索引的随机索引
426
+ // const getRandomIndex = (array, excludeIndex) => {
427
+ // let randomIndex;
428
+ // do {
429
+ // randomIndex = Math.floor(Math.random() * array.length);
430
+ // } while (randomIndex === excludeIndex);
431
+ // return randomIndex;
432
+ // };
433
+
434
+ // // 调用函数,传入上一次的索引值
435
+ // this.changeNum = getRandomIndex(this.props?.activityList, this.changeNum);
436
+ // promotionCode = this.props?.activityList[this.changeNum];
437
+ // } else {
438
+ // // 如果不满足条件或者活动列表为空,则默认选择第一项
439
+ // promotionCode = this.props?.activityList[0];
440
+ // }
441
+ if (isLc) {
442
+ let url = "";
443
+ if (promotionCode) {
444
+ url = `${queryPromotionPageForC}?pbCode=0008&dataStateStr=1,4&rows=200&page=1&couponBatchCode=${promotionCode}&channelCode=${query.channelCode}&membercode=${query.membercode}`;
445
+ } else {
446
+ this.secGoodList = [];
447
+ // return
448
+ url = `${queryPromotionPageForC}?pbCode=0008&dataStateStr=1,4&rows=200&page=1&orderStr=PROMOTION_ENDTIME asc&membercode=${query.membercode}&channelCode=${query.channelCode}`;
449
+ }
450
+ const { rows } = await fetchPost(url);
451
+ handleResponse({ rows }, true);
452
+ } else {
453
+ let params = {
454
+ pbCode: "0008",
455
+ dataStateStr: "1,4",
456
+ page: 1,
457
+ rows: 200,
458
+ promotionCode,
459
+ };
460
+ if (!promotionCode) {
461
+ this.secGoodList = [];
462
+ // return
463
+ params.dataStateStr = "1,4";
464
+ params.orderStr = "PROMOTION_ENDTIME asc";
465
+ }
466
+ console.log(params,'params团购')
467
+ that.http.post(queryPromotionPageForC, params).then(async (res) => {
468
+ if (res && res.rows) {
469
+ if (this.page === 1 && res.rows.length === 0) {
470
+ this.seckillGoodsList = [];
471
+ } else {
472
+ const data = res.rows.map((item) => {
473
+ let time = (item.promotionBegintime - Date.parse(new Date())) / 1000;
474
+ let endtime = (item.promotionEndtime - Date.parse(new Date())) / 1000;
475
+ if (time > 0) {
476
+ item.gmtCreate = time;
477
+ } else {
478
+ item.gmtCreate = 0;
479
+ }
480
+ if (endtime > 0) {
481
+ item.gmtModified = endtime;
482
+ } else {
483
+ item.gmtModified = 0;
484
+ }
485
+ if (item.promotionState == 0) {
486
+ this.$set(item, "PeopleNum", item.couponOnceNump);
487
+ }
488
+ return item;
489
+ });
490
+ const tempList = data.filter((item) => item.promotionState == 0);
491
+ this.secGoodList = tempList;
492
+ }
493
+ }
494
+ });
495
+ }
496
+ }
497
+ },
498
+ goSecList() {
499
+ this.$emit("goSecList", this.props);
500
+ },
501
+ gosecGoodsDetail(good, item) {
502
+ let goodsType;
503
+ if (this.props.activityType === 0) {
504
+ goodsType = 26;
505
+ }
506
+ if (this.props.activityType === 1) {
507
+ goodsType = 24;
508
+ }
509
+ this.$emit("gosecGoodsDetail", good.skuNo, item.gmtModified, item.promotionCode, item.promotionFrequency, item.inventory, goodsType);
510
+ },
511
+ },
512
+ };
513
+ </script>
514
+
515
+ <style lang="less" scoped>
516
+ .secKill {
517
+ margin: 0 auto;
518
+ box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.1);
519
+ border-radius: 7px;
520
+ padding: 13.5px 10px 0;
521
+
522
+ .soon {
523
+ width: 64px;
524
+ height: 24px;
525
+ background: linear-gradient(90deg, #ff9d0d 0%, #eb2b27 100%);
526
+ border-radius: 12px;
527
+ font-size: 12px;
528
+ font-family: PingFangSC-Medium, PingFang SC;
529
+ font-weight: 500;
530
+ color: #ffffff;
531
+ text-align: center;
532
+ line-height: 24px;
533
+ }
534
+
535
+ .secKill--tit {
536
+ width: 100%;
537
+ display: flex;
538
+ justify-content: space-between;
539
+ align-items: center;
540
+ padding-bottom: 10px;
541
+
542
+ .title {
543
+ display: flex;
544
+ align-items: center;
545
+ .changeOnce {
546
+ color: #439fff;
547
+ font-size: 10px;
548
+ margin-left: 6px;
549
+ }
550
+ }
551
+
552
+ .more {
553
+ font-size: 12px;
554
+ font-family: PingFangSC-Regular, PingFang SC;
555
+ font-weight: 400;
556
+ color: #595959;
557
+ display: flex;
558
+
559
+ .img {
560
+ margin-left: 3px;
561
+ width: 5.5px;
562
+ height: 9px;
563
+ }
564
+ }
565
+ }
566
+
567
+ .secKill-all {
568
+ display: flex;
569
+ .secKill--center {
570
+ margin-right: 8px;
571
+ margin-bottom: 8px;
572
+ background: #ffffff;
573
+ border-radius: 8px;
574
+ padding: 8px 8px;
575
+ position: relative;
576
+
577
+ .secKill-goodsName {
578
+ height: 34px;
579
+ font-size: 12px;
580
+ font-family: PingFangSC-Regular, PingFang SC;
581
+ font-weight: 400;
582
+ color: #000000;
583
+ line-height: 17px;
584
+ overflow: hidden;
585
+ text-overflow: ellipsis;
586
+ display: -webkit-box;
587
+ -webkit-line-clamp: 2;
588
+ line-clamp: 2;
589
+ -webkit-box-orient: vertical;
590
+ }
591
+ .dataStateButton {
592
+ display: flex;
593
+ justify-content: center;
594
+ margin-top: 5px;
595
+ span {
596
+ font-size: 10px;
597
+ color: #ffffff;
598
+ border-radius: 17px;
599
+ padding: 5px 12px;
600
+ }
601
+ }
602
+ }
603
+ }
604
+ .secKill--bottom {
605
+ display: flex;
606
+ .left {
607
+ width: 164px;
608
+ height: 255px;
609
+ border-right: 2px solid #f6f6f6;
610
+ padding: 0 7.5px;
611
+
612
+ .bigimgs {
613
+ width: 100px;
614
+ height: 100px;
615
+ margin: 0 auto;
616
+ }
617
+
618
+ .goodsName {
619
+ width: 153px;
620
+ font-size: 13px;
621
+ font-family: PingFangSC-Semibold, PingFang SC;
622
+ font-weight: 600;
623
+ color: #262626;
624
+ display: -webkit-box;
625
+ -webkit-box-orient: vertical;
626
+ -webkit-line-clamp: 2;
627
+ overflow: hidden;
628
+ margin-bottom: 8px;
629
+ height: 37.5px;
630
+ margin-top: 7.5px;
631
+ }
632
+
633
+ .price {
634
+ display: flex;
635
+ justify-content: space-between;
636
+ align-items: center;
637
+ }
638
+ }
639
+
640
+ .left:nth-child(2) {
641
+ border: none;
642
+ }
643
+
644
+ .right {
645
+ width: 164px;
646
+ height: 255px;
647
+ padding-left: 7.5px;
648
+
649
+ .bigimg {
650
+ width: 153px;
651
+ height: 118px;
652
+ background-color: rgba(0, 0, 0, 0.3);
653
+ }
654
+
655
+ .goodsName {
656
+ width: 153px;
657
+ font-size: 13px;
658
+ font-family: PingFangSC-Semibold, PingFang SC;
659
+ font-weight: 600;
660
+ color: #262626;
661
+ display: -webkit-box;
662
+ -webkit-box-orient: vertical;
663
+ -webkit-line-clamp: 2;
664
+ overflow: hidden;
665
+ margin-bottom: 10px;
666
+ }
667
+
668
+ .price {
669
+ display: flex;
670
+ justify-content: space-between;
671
+ align-items: center;
672
+ }
673
+ }
674
+ }
675
+ }
676
+ .goodsDetail3 {
677
+ width: 92px;
678
+ @media (min-width: 390px) and (max-width: 414px) {
679
+ width: 102px;
680
+ }
681
+ @media (min-width: 415px) and (max-width: 630px) {
682
+ width: 112px;
683
+ }
684
+ }
685
+ .bigimg3 {
686
+ width: 90px;
687
+ height: 90px;
688
+ @media (min-width: 390px) and (max-width: 414px) {
689
+ width: 100px;
690
+ }
691
+ @media (min-width: 415px) and (max-width: 630px) {
692
+ width: 110px;
693
+ }
694
+ }
695
+ .goodsDetail2 {
696
+ width: 132px;
697
+ @media (max-width: 320px) {
698
+ width: 112px;
699
+ }
700
+ @media (min-width: 321px) and (max-width: 360px) {
701
+ width: 122px;
702
+ }
703
+ @media (min-width: 361px) and (max-width: 389px) {
704
+ width: 132px;
705
+ }
706
+ @media (min-width: 390px) and (max-width: 410px) {
707
+ width: 142px;
708
+ }
709
+ @media (min-width: 411px) and (max-width: 430px) {
710
+ width: 152px;
711
+ }
712
+ @media (min-width: 431px) and (max-width: 630px) {
713
+ width: 162px;
714
+ }
715
+ }
716
+ .bigimg2 {
717
+ width: 130px;
718
+ height: 130px;
719
+ @media (max-width: 320px) {
720
+ width: 110px;
721
+ height: 110px;
722
+ }
723
+ @media (min-width: 321px) and (max-width: 360px) {
724
+ width: 120px;
725
+ height: 120px;
726
+ }
727
+ @media (min-width: 361px) and (max-width: 389px) {
728
+ width: 130px;
729
+ height: 130px;
730
+ }
731
+ @media (min-width: 390px) and (max-width: 410px) {
732
+ width: 140px;
733
+ height: 140px;
734
+ }
735
+ @media (min-width: 411px) and (max-width: 430px) {
736
+ width: 150px;
737
+ height: 150px;
738
+ }
739
+ @media (min-width: 431px) and (max-width: 630px) {
740
+ width: 160px;
741
+ height: 160px;
742
+ }
743
+ }
744
+ .overflowX {
745
+ overflow: hidden;
746
+ overflow-x: scroll;
747
+ }
748
+ .fel {
749
+ display: flex;
750
+ justify-content: space-between;
751
+ }
752
+ .secKill-One {
753
+ display: flex;
754
+ padding: 8px;
755
+ .soneLeft {
756
+ width: 110px;
757
+ height: 110px;
758
+ margin-right: 8px;
759
+ img {
760
+ width: 110px;
761
+ height: 110px;
762
+ border-radius: 6px;
763
+ }
764
+ }
765
+ .soneRight {
766
+ width: 100%;
767
+ display: flex;
768
+ flex-direction: column;
769
+ justify-content: space-between;
770
+ .soneRightA {
771
+ font-family: PingFangSC, PingFang SC;
772
+ font-weight: 400;
773
+ font-size: 14px;
774
+ color: #394259;
775
+ line-height: 21px;
776
+ text-align: left;
777
+ font-style: normal;
778
+ overflow: hidden;
779
+ text-overflow: ellipsis;
780
+ display: -webkit-box;
781
+ -webkit-box-orient: vertical;
782
+ -webkit-line-clamp: 2;
783
+ }
784
+ .soneRightB {
785
+ display: flex;
786
+ justify-content: space-between;
787
+ .uline {
788
+ width: 152px;
789
+ height: 10px;
790
+ background: #ed4444;
791
+ border-radius: 3px;
792
+ opacity: 0.1;
793
+ }
794
+ }
795
+ .soneRightC {
796
+ display: flex;
797
+ justify-content: space-between;
798
+ .priceC {
799
+ font-family: DINAlternate, DINAlternate;
800
+ font-weight: bold;
801
+ font-size: 18px;
802
+ line-height: 29px;
803
+ text-align: left;
804
+ font-style: normal;
805
+ }
806
+ .dataStateButton {
807
+ display: flex;
808
+ justify-content: center;
809
+ margin-top: 5px;
810
+ span {
811
+ font-size: 10px;
812
+ color: #ffffff;
813
+ border-radius: 17px;
814
+ padding: 5px 12px;
815
+ }
816
+ }
817
+ }
818
+ }
819
+ }
820
+ </style>