seckill.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. <template>
  2. <!-- 秒杀列表 -->
  3. <common-wrapper v-show="!isSortType" :config="configData">
  4. <view class="seckill" v-if="spikeList.length > 0">
  5. <view>
  6. <!-- 秒杀头部 -->
  7. <view
  8. class="w-full h-96 px-24 flex-between-center bg-cover"
  9. :style="[headerStyle]"
  10. >
  11. <view class="flex-y-center">
  12. <text
  13. class="fs-32 lh-44rpx fw-500"
  14. :style="[titleStyle]"
  15. v-if="titleConfig"
  16. >{{ titleTxtConfig }}</text
  17. >
  18. <image :src="titleImg" class="w-140 h-32" v-else></image>
  19. <text
  20. class="fs-26 text--w111-999 lh-36rpx pl-20"
  21. :style="[tipsColor]"
  22. >{{ $t(`距离结束`) }}</text
  23. >
  24. <countDown
  25. :is-day="false"
  26. tip-text=" "
  27. day-text=" "
  28. hour-text=":"
  29. minute-text=":"
  30. second-text=" "
  31. :datatime="datatime"
  32. :bgColor="numberBgColor"
  33. :colors="numberColor"
  34. :dotColor="dotColor"
  35. ></countDown>
  36. </view>
  37. <view
  38. class="flex-y-center fs-24 text--w111-999"
  39. :style="[headerBntColor]"
  40. @tap="goPage('/pages/activity/goods_seckill/index')"
  41. >
  42. <text>{{ rightBntTxt }}</text>
  43. <text
  44. class="iconfont icon-ic_rightarrow fs-24"
  45. :style="[headerBntColor]"
  46. ></text>
  47. </view>
  48. </view>
  49. <!-- 单列 -->
  50. <view
  51. class="pt-32 pr-20 pb-32 pl-20 bg--w111-fff"
  52. :style="[boxContentStyle]"
  53. v-if="goodStyleConfig == 0"
  54. >
  55. <view
  56. class="w-full flex justify-between item"
  57. v-for="(item, index) in spikeList"
  58. :key="index"
  59. @tap="goDetails(item)"
  60. >
  61. <easy-loadimage
  62. :image-src="item.image"
  63. :border-src="item.activity_image"
  64. width="240rpx"
  65. height="240rpx"
  66. :borderRadius="imgStyle"
  67. ></easy-loadimage>
  68. <view class="flex-1 flex-col justify-between pl-20 h-240">
  69. <view>
  70. <view
  71. class="w-full fs-28 h-80 lh-40rpx line2"
  72. :style="[productStyle]"
  73. v-if="checkboxInfo.includes(0)"
  74. >{{ item.title }}</view
  75. >
  76. <view
  77. class="w-full flex-y-center mt-20"
  78. v-if="checkboxInfo.includes(1)"
  79. >
  80. <view class="progress relative">
  81. <view
  82. class="active"
  83. :style="{
  84. width: item.percent + '%',
  85. background: progressBgColor,
  86. }"
  87. >
  88. <!-- <image src="@/static/images/lightning.png" class="lightning"></image> -->
  89. </view>
  90. <image
  91. src="@/static/images/lightning.png"
  92. class="lightning"
  93. :style="{
  94. left: item.percent + '%',
  95. transform:
  96. item.percent == 100
  97. ? 'translateX(-100%)'
  98. : 'translateX(0)',
  99. }"
  100. ></image>
  101. </view>
  102. <text
  103. class="fs-22 lh-30rpx pl-12"
  104. :style="{ color: priceColor }"
  105. >已抢{{ item.percent + "%" }}</text
  106. >
  107. </view>
  108. </view>
  109. <view class="flex justify-between items-end">
  110. <view class="flex-col">
  111. <baseMoney
  112. :money="item.price"
  113. symbolSize="24"
  114. integerSize="36"
  115. decimalSize="36"
  116. weight
  117. :color="priceColor"
  118. preFix="秒杀价"
  119. preFixSize="24"
  120. :textColor="priceColor"
  121. v-if="checkboxInfo.includes(2)"
  122. ></baseMoney>
  123. <text
  124. class="text-line fs-28 text--w111-999 pt-10 mb-10 Regular"
  125. v-if="checkboxInfo.includes(3)"
  126. :style="[otPriceColor]"
  127. >{{ $t(`¥`)
  128. }}{{
  129. item.product_price.toString().split(".")[1]
  130. ? item.product_price
  131. : item.product_price + ".00"
  132. }}</text
  133. >
  134. </view>
  135. <view
  136. class="w-144 h-56 rd-30rpx flex-center fs-24 text--w111-fff"
  137. v-if="!showBtn"
  138. :style="[btnBgColor]"
  139. >{{ $t(`去抢购`) }}</view
  140. >
  141. </view>
  142. </view>
  143. </view>
  144. </view>
  145. <!-- 两列 -->
  146. <view
  147. class="grid-column-2 grid-gap-22rpx pt-32 pr-20 pb-32 pl-20"
  148. :style="[boxContentStyle]"
  149. v-if="goodStyleConfig == 1"
  150. >
  151. <view
  152. v-for="(item, index) in spikeList"
  153. :key="index"
  154. @tap="goDetails(item)"
  155. >
  156. <easy-loadimage
  157. :image-src="item.image"
  158. :border-src="item.activity_image"
  159. width="100%"
  160. height="324rpx"
  161. :borderRadius="imgStyle"
  162. ></easy-loadimage>
  163. <view
  164. class="w-full line2 mt-16 fs-28 lh-40rpx"
  165. :style="[productStyle]"
  166. v-if="checkboxInfo.includes(0)"
  167. >{{ item.title }}</view
  168. >
  169. <view class="flex justify-between items-end mt-10">
  170. <view class="flex-col">
  171. <baseMoney
  172. :money="item.price"
  173. symbolSize="24"
  174. integerSize="36"
  175. decimalSize="36"
  176. weight
  177. :color="priceColor"
  178. v-if="checkboxInfo.includes(2)"
  179. ></baseMoney>
  180. <text
  181. class="text-line fs-28 text--w111-999 pt-14 Regular"
  182. v-if="checkboxInfo.includes(3)"
  183. :style="[otPriceColor]"
  184. >{{ $t(`¥`)
  185. }}{{
  186. item.product_price.toString().split(".")[1]
  187. ? item.product_price
  188. : item.product_price + ".00"
  189. }}</text
  190. >
  191. </view>
  192. <view
  193. class="w-144 h-56 rd-30rpx flex-center fs-24 text--w111-fff bg--w111-E93323"
  194. v-if="!showBtn"
  195. :style="[btnBgColor]"
  196. >{{ $t(`去抢购`) }}</view
  197. >
  198. </view>
  199. </view>
  200. </view>
  201. <!-- 三列 -->
  202. <view
  203. class="grid-column-3 grid-gap-18rpx pt-32 pr-20 pb-32 pl-20"
  204. :style="[boxContentStyle]"
  205. v-if="goodStyleConfig == 2"
  206. >
  207. <view
  208. v-for="(item, index) in spikeList"
  209. :key="index"
  210. @tap="goDetails(item)"
  211. >
  212. <easy-loadimage
  213. :image-src="item.image"
  214. :border-src="item.activity_image"
  215. width="100%"
  216. height="212rpx"
  217. :borderRadius="imgStyle"
  218. ></easy-loadimage>
  219. <view
  220. class="w-full line1 mt-16 fs-26"
  221. :style="[productStyle]"
  222. v-if="checkboxInfo.includes(0)"
  223. >{{ item.title }}</view
  224. >
  225. <view
  226. class="price-box flex-center relative"
  227. :style="[tagBag]"
  228. v-if="checkboxInfo.includes(2)"
  229. >
  230. <baseMoney
  231. :money="item.price"
  232. symbolSize="24"
  233. integerSize="30"
  234. decimalSize="30"
  235. weight
  236. :color="bargainPriceColor"
  237. ></baseMoney>
  238. <image
  239. src="@/static/images/shandian.png"
  240. class="shandian"
  241. ></image>
  242. </view>
  243. <view
  244. class="text-line fs-24 text--w111-999 Regular lh-32rpx mt-10"
  245. :style="[otPriceColor]"
  246. v-if="checkboxInfo.includes(3)"
  247. >{{ $t(`¥`)
  248. }}{{
  249. item.product_price.toString().split(".")[1]
  250. ? item.product_price
  251. : item.product_price + ".00"
  252. }}</view
  253. >
  254. </view>
  255. </view>
  256. <!-- 滑动 -->
  257. <scroll-view
  258. scroll-x="true"
  259. show-scrollbar="false"
  260. class="white-nowrap vertical-middle w-full p-32"
  261. :style="[boxContentStyle]"
  262. v-if="goodStyleConfig == 3"
  263. >
  264. <view
  265. class="inline-block"
  266. :class="{ 'ml-20': index }"
  267. v-for="(item, index) in spikeList"
  268. :key="index"
  269. @tap="goDetails(item)"
  270. >
  271. <easy-loadimage
  272. :image-src="item.image"
  273. :border-src="item.activity_image"
  274. width="224rpx"
  275. height="224rpx"
  276. :borderRadius="imgStyle"
  277. ></easy-loadimage>
  278. <view
  279. class="w-222 line1 mt-16 fs-26 lh-26rpx"
  280. :style="[productStyle]"
  281. v-if="checkboxInfo.includes(0)"
  282. >{{ item.title }}</view
  283. >
  284. <view class="flex justify-between items-end mt-16">
  285. <view>
  286. <baseMoney
  287. :money="item.price"
  288. symbolSize="24"
  289. integerSize="36"
  290. decimalSize="36"
  291. weight
  292. :color="priceColor"
  293. v-if="checkboxInfo.includes(2)"
  294. ></baseMoney>
  295. <view
  296. class="text-line fs-24 text--w111-999 Regular lh-32rpx"
  297. :style="[otPriceColor]"
  298. v-if="checkboxInfo.includes(3)"
  299. >{{ $t(`¥`)
  300. }}{{
  301. item.product_price.toString().split(".")[1]
  302. ? item.product_price
  303. : item.product_price + ".00"
  304. }}</view
  305. >
  306. </view>
  307. <view
  308. class="qiang flex-center fs-24 text--w111-fff"
  309. v-if="!showBtn"
  310. :style="[btnBgColor]"
  311. >{{ $t(`抢`) }}</view
  312. >
  313. </view>
  314. </view>
  315. </scroll-view>
  316. </view>
  317. </view>
  318. </common-wrapper>
  319. </template>
  320. <script>
  321. import commonWrapper from "./commonWrapper.vue";
  322. import countDown from "@/components/countDown";
  323. import { getSeckillIndexTime, getSeckillList } from "@/api/activity.js";
  324. export default {
  325. options: {
  326. styleIsolation: "shared",
  327. },
  328. name: "seckill",
  329. components: {
  330. countDown,
  331. commonWrapper,
  332. },
  333. props: {
  334. dataConfig: {
  335. type: Object,
  336. default: () => {},
  337. },
  338. isSortType: {
  339. type: String | Number,
  340. default: 0,
  341. },
  342. },
  343. data() {
  344. return {
  345. datatime: "",
  346. spikeList: [],
  347. seckillTimeIndex: 0,
  348. seckillTime: [],
  349. };
  350. },
  351. computed: {
  352. configData() {
  353. return {
  354. ...this.dataConfig,
  355. paddingConfig: this.dataConfig.paddingConfig || {
  356. isAll: false,
  357. valList: [
  358. {
  359. val: this.dataConfig.topConfig
  360. ? this.dataConfig.topConfig.val
  361. : 0,
  362. },
  363. {
  364. val: this.dataConfig.prConfig ? this.dataConfig.prConfig.val : 0,
  365. },
  366. {
  367. val: this.dataConfig.bottomConfig
  368. ? this.dataConfig.bottomConfig.val
  369. : 0,
  370. },
  371. {
  372. val: this.dataConfig.prConfig ? this.dataConfig.prConfig.val : 0,
  373. },
  374. ],
  375. },
  376. marginConfig: this.dataConfig.marginConfig || {
  377. isAll: false,
  378. valList: [
  379. {
  380. val: this.dataConfig.mbConfig ? this.dataConfig.mbConfig.val : 0,
  381. },
  382. {
  383. val: 0,
  384. },
  385. {
  386. val: 0,
  387. },
  388. {
  389. val: 0,
  390. },
  391. ],
  392. },
  393. };
  394. },
  395. titleStyle() {
  396. let titleText = this.dataConfig.titleText;
  397. return {
  398. fontStyle: !titleText.tabVal
  399. ? "normal"
  400. : titleText.tabList[titleText.tabVal].style,
  401. fontWeight: !titleText.tabVal ? "bold" : "normal",
  402. color: this.dataConfig.titleColor.color[0].item,
  403. fontSize: this.dataConfig.titleNumber.val * 2 + "rpx",
  404. };
  405. },
  406. // boxStyle() {
  407. // return {
  408. // padding: `${this.dataConfig.topConfig.val * 2}rpx ${
  409. // this.dataConfig.prConfig.val * 2
  410. // }rpx ${this.dataConfig.bottomConfig.val * 2}rpx`,
  411. // marginTop: `${this.dataConfig.mbConfig.val * 2}rpx`,
  412. // background: this.dataConfig.bottomBgColor.color[0].item,
  413. // };
  414. // },
  415. tagBag() {
  416. return {
  417. color: this.dataConfig.toneConfig.tabVal
  418. ? this.dataConfig.goodsBntTxtColor.color[0].item
  419. : "#fff",
  420. background: this.dataConfig.toneConfig.tabVal
  421. ? `linear-gradient(270deg,${this.dataConfig.goodsBntColor.color[1].item} 0%,${this.dataConfig.goodsBntColor.color[0].item} 100%)`
  422. : "var(--view-theme)",
  423. };
  424. },
  425. bargainPriceColor() {
  426. return this.dataConfig.toneConfig.tabVal
  427. ? this.dataConfig.seckillPriceColor2.color[0].item
  428. : "#fff";
  429. },
  430. boxContentStyle() {
  431. let br = `${this.dataConfig.fillet.val * 2}rpx`;
  432. let borderRadius = `0 0 ${br} ${br}`;
  433. if (this.dataConfig.fillet.type) {
  434. borderRadius = `0 0 ${this.dataConfig.fillet.valList[3].val * 2}rpx ${
  435. this.dataConfig.fillet.valList[2].val * 2
  436. }rpx`;
  437. }
  438. return {
  439. borderRadius,
  440. background: `linear-gradient(90deg, ${this.dataConfig.moduleColor.color[0].item} 0%, ${this.dataConfig.moduleColor.color[1].item} 100%)`,
  441. };
  442. },
  443. /*商品模板*/
  444. goodStyleConfig() {
  445. return this.dataConfig.goodStyleConfig.tabVal;
  446. },
  447. styleConfig() {
  448. return this.dataConfig.styleConfig.tabVal;
  449. },
  450. headerStyle() {
  451. let br = `${this.dataConfig.fillet.val * 2}rpx`,
  452. borderRadius = "",
  453. imgBgUrl = this.dataConfig.imgBgConfig.url;
  454. if (this.dataConfig.fillet.type) {
  455. borderRadius = `${this.dataConfig.fillet.valList[0].val * 2}rpx ${
  456. this.dataConfig.fillet.valList[1].val * 2
  457. }rpx 0 0`;
  458. } else {
  459. borderRadius = `${br} ${br} 0 0`;
  460. }
  461. return {
  462. backgroundImage: this.styleConfig
  463. ? "url(" + imgBgUrl + ")"
  464. : `linear-gradient(90deg,${this.dataConfig.headerBgColor.color[0].item} 0%,${this.dataConfig.headerBgColor.color[1].item} 100%)`,
  465. borderRadius,
  466. };
  467. },
  468. /*标题是文本还是图片*/
  469. titleConfig() {
  470. return this.dataConfig.titleConfig.tabVal;
  471. },
  472. /*标题文本*/
  473. titleTxtConfig() {
  474. return this.dataConfig.titleTxtConfig.value;
  475. },
  476. /*标题图片*/
  477. titleImg() {
  478. return this.styleConfig ? this.titleUrl : this.titleColorUrl;
  479. },
  480. titleColorUrl() {
  481. return this.dataConfig.imgColorConfig.url;
  482. },
  483. titleUrl() {
  484. return this.dataConfig.imgConfig.url;
  485. },
  486. /*标题提示文字*/
  487. tipsColor() {
  488. return {
  489. color: this.styleConfig
  490. ? this.dataConfig.tipsColor.color[0].item
  491. : this.dataConfig.tipsColor2.color[0].item,
  492. };
  493. },
  494. /*头部按钮文本*/
  495. rightBntTxt() {
  496. return this.dataConfig.rightBntConfig.value;
  497. },
  498. /*头部按钮样式*/
  499. headerBntColor() {
  500. return {
  501. color: this.styleConfig
  502. ? this.dataConfig.headerBntColor.color[0].item
  503. : this.dataConfig.headerBntColor2.color[0].item,
  504. fontSize: `${this.dataConfig.bntNumber.val * 2}rpx`,
  505. };
  506. },
  507. /*商品图片圆角样式*/
  508. imgStyle() {
  509. let borderRadius = `${this.dataConfig.filletImg.val * 2}rpx`;
  510. if (this.dataConfig.filletImg.type) {
  511. borderRadius = `${this.dataConfig.filletImg.valList[0].val * 2}rpx ${
  512. this.dataConfig.filletImg.valList[1].val * 2
  513. }rpx ${this.dataConfig.filletImg.valList[3].val * 2}rpx ${
  514. this.dataConfig.filletImg.valList[2].val * 2
  515. }rpx`;
  516. }
  517. return borderRadius;
  518. },
  519. /*商品名称样式*/
  520. productStyle() {
  521. return {
  522. color: this.dataConfig.goodsNameColor.color[0].item,
  523. fontWeight: this.dataConfig.goodsName.tabVal ? "normal" : "bold",
  524. };
  525. },
  526. /* 展示信息 */
  527. checkboxInfo() {
  528. return this.dataConfig.checkboxInfo.type;
  529. },
  530. /* 价格颜色 */
  531. priceColor() {
  532. return this.dataConfig.toneConfig.tabVal
  533. ? this.dataConfig.progressTxtColor.color[0].item
  534. : "var(--view-theme)";
  535. },
  536. /* 划线价颜色 */
  537. otPriceColor() {
  538. return {
  539. color: this.dataConfig.goodsPriceColor.color[0].item,
  540. };
  541. },
  542. showBtn() {
  543. return this.dataConfig.seckillConfig.tabVal;
  544. },
  545. /* 按钮颜色 */
  546. btnBgColor() {
  547. return {
  548. background: this.dataConfig.toneConfig.tabVal
  549. ? `linear-gradient(90deg,${this.dataConfig.goodsBntColor.color[1].item} 0%,${this.dataConfig.goodsBntColor.color[0].item} 100%)`
  550. : "linear-gradient(90deg, var(--view-gradient) 0%, var(--view-theme) 100%)",
  551. color: this.dataConfig.goodsBntTxtColor.color[0].item,
  552. };
  553. },
  554. progressBgColor() {
  555. return this.dataConfig.toneConfig.tabVal
  556. ? `linear-gradient(90deg,${this.dataConfig.progressColor.color[0].item} 0%,${this.dataConfig.progressColor.color[1].item} 100%)`
  557. : "linear-gradient(45deg, var(--view-gradient) 0%, var(--view-theme) 100%)";
  558. },
  559. /*倒计时背景色*/
  560. numberBgColor() {
  561. return this.styleConfig
  562. ? `linear-gradient(90deg, ${this.dataConfig.numberBgColor.color[0].item} 0%, ${this.dataConfig.numberBgColor.color[1].item} 100%)`
  563. : `linear-gradient(90deg, ${this.dataConfig.numberBgColor2.color[0].item} 0%, ${this.dataConfig.numberBgColor2.color[1].item} 100%)`;
  564. },
  565. numberColor() {
  566. return this.styleConfig
  567. ? this.dataConfig.numberColor.color[0].item
  568. : this.dataConfig.numberColor2.color[0].item;
  569. },
  570. dotColor() {
  571. return this.styleConfig
  572. ? this.dataConfig.numberBgColor.color[0].item
  573. : this.dataConfig.numberBgColor2.color[0].item;
  574. },
  575. /*商品数量*/
  576. numberConfig() {
  577. return this.dataConfig.numberConfig.val;
  578. },
  579. },
  580. mounted() {
  581. this.getSeckillIndexTime();
  582. },
  583. methods: {
  584. goPage(url) {
  585. uni.navigateTo({
  586. url,
  587. });
  588. },
  589. goDetails(item) {
  590. uni.navigateTo({
  591. url:
  592. "/pages/activity/goods_seckill_details/index?id=" +
  593. item.id +
  594. "&type=1&time_id=" +
  595. this.timeList[this.active].id,
  596. });
  597. },
  598. getSeckillIndexTime() {
  599. let limit = this.$config.LIMIT;
  600. let params = {
  601. page: 1,
  602. limit: this.numberConfig >= limit ? limit : this.numberConfig,
  603. type: "index",
  604. };
  605. getSeckillIndexTime().then((res) => {
  606. this.timeList = res.data.seckillTime;
  607. this.active = res.data.seckillTimeIndex;
  608. if (res.data.seckillTimeIndex === -1) {
  609. return;
  610. }
  611. this.datatime = res.data.seckillTime[res.data.seckillTimeIndex].stop;
  612. let id = res.data.seckillTime[res.data.seckillTimeIndex].id;
  613. getSeckillList(id, params).then(({ data }) => {
  614. this.spikeList = data;
  615. });
  616. });
  617. },
  618. },
  619. };
  620. </script>
  621. <style lang="scss" scoped>
  622. .Regular {
  623. font-family: "Regular";
  624. }
  625. ::v-deep .styleAll {
  626. padding: 0 8rpx;
  627. border-radius: 4rpx;
  628. font-size: 24rpx;
  629. line-height: 40rpx;
  630. }
  631. .bg-cover {
  632. background-repeat: no-repeat;
  633. background-size: 100% 100%;
  634. }
  635. .item ~ .item {
  636. margin-top: 32rpx;
  637. }
  638. .progress {
  639. width: 240rpx;
  640. height: 24rpx;
  641. border-radius: 12rpx;
  642. background-color: rgba(253, 240, 237, 1);
  643. overflow: hidden;
  644. .active {
  645. height: 24rpx;
  646. border-radius: 12rpx;
  647. background: linear-gradient(45deg, #ff7931 0%, #e93323 100%);
  648. }
  649. .lightning {
  650. position: absolute;
  651. top: -2rpx;
  652. width: 28rpx;
  653. height: 28rpx;
  654. }
  655. }
  656. .price-box {
  657. width: 150rpx;
  658. height: 44rpx;
  659. background: linear-gradient(
  660. 45deg,
  661. var(--view-gradient) 0%,
  662. var(--view-theme) 100%
  663. );
  664. border-radius: 0px 8rpx 8rpx 0px;
  665. margin: 20rpx 0 0 10rpx;
  666. .shandian {
  667. position: absolute;
  668. width: 24rpx;
  669. height: 44rpx;
  670. top: 0;
  671. left: -10rpx;
  672. }
  673. }
  674. .qiang {
  675. width: 66rpx;
  676. height: 40rpx;
  677. background: linear-gradient(45deg, #ff7931 0%, #e93323 100%);
  678. border-radius: 0px 22rpx 22rpx 0px;
  679. position: relative;
  680. &:before {
  681. content: "";
  682. position: absolute;
  683. top: 0;
  684. left: -10rpx;
  685. width: 24rpx;
  686. height: 40rpx;
  687. background-image: url("@/static/images/shandian.png");
  688. background-size: cover;
  689. }
  690. }
  691. scroll-view {
  692. box-sizing: border-box;
  693. }
  694. </style>