activity.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062
  1. <template>
  2. <app-layout>
  3. <view style="height:100%;padding-bottom:0;background:linear-gradient(to bottom, #ee3763, #fdac42);position: absolute;width: 100%">
  4. <view class="page">
  5. <view class='dialog-bg' v-if="dialog">
  6. <view class='in-bargain'>
  7. <image v-if="kanjia" class='bargain-gif-bg' src='./../image/light.png'></image>
  8. <image v-if="kanjia" class='bargain-gif' :src='bargainImg.app_image.activity_header'></image>
  9. <image class='dialog-header' v-if="!kanjia" :src='bargainImg.app_image.header'></image>
  10. <image class='dialog-header-gif-sec' :animation="animationData" v-if="!kanjia" :src='bargainImg.app_image.top1'></image>
  11. <view @click="dialog=false" v-if="!kanjia">
  12. <image class='dialog-close' src='./../image/close.png'></image>
  13. </view>
  14. <view class='dialog' v-if="!kanjia">
  15. <view class="self-dialog">
  16. <view v-if="bargain.user_id == info.user_id">你一出手就帮自己砍掉了
  17. <text class='price'>{{info.price}}元</text>
  18. </view>
  19. <view v-if="bargain.user_id != info.user_id">你一出手就帮{{bargain.nickname}}</view>
  20. <view v-if="bargain.user_id != info.user_id">砍了
  21. <text class='price'>{{info.price}}元</text>
  22. </view>
  23. </view>
  24. <view v-if="bargain.user_id == info.user_id">快邀请好友帮你一起砍价吧!</view>
  25. <view class="button-margin">
  26. <button open-type="share" v-if="bargain.user_id == info.user_id">
  27. <image style="margin-top: 0" :src='bargainImg.app_image.find'></image>
  28. </button>
  29. </view>
  30. <view v-if="bargain.user_id != info.user_id" @click="toJoin">
  31. <image :src='bargainImg.app_image.join_small'></image>
  32. </view>
  33. </view>
  34. </view>
  35. </view>
  36. <view v-if="tip" class='dialog-bg'>
  37. <view class="dialog-item">
  38. <view class='dialog-tip-title'>提示</view>
  39. <view>{{tip}}</view>
  40. <view @click="tip=''" class='close-button'>确认</view>
  41. </view>
  42. </view>
  43. <view @click="toIndex">
  44. <view class='rules left-rules'>返回首页</view>
  45. </view>
  46. <view @click="toRules">
  47. <view class='rules right-rules'>活动规则</view>
  48. </view>
  49. <image class='top-banner' :src='bargainImg.app_image.top'></image>
  50. <view class='info'>
  51. <image class='avatar' :src='detail.initiator_avatar'></image>
  52. <view class='username'>{{detail.initiator_nickname}}</view>
  53. <view>我发现一件好货,来一起砍价优惠购!</view>
  54. <view class='goods'>
  55. <image :src='detail.cover_pic'></image>
  56. <view class='t-omit-two goods-name'>{{detail.goods_name}}</view>
  57. <view class='t-omit goods-attr'>
  58. <text v-for="attr in detail.select_attr_group" :key="attr.id">
  59. {{attr.attr_group_name}}:{{attr.attr_name}}
  60. </text>
  61. </view>
  62. <view class='end_time' v-if="detail.reset_time > 0">
  63. <text class="date-text" v-if="dd > 0">{{dd}}</text>
  64. <text v-if="dd > 0">天</text>
  65. <text class="date-text">{{hh}}</text>
  66. <text>:</text>
  67. <text class="date-text">{{mm}}</text>
  68. <text>:</text>
  69. <text class="date-text">{{ss}}</text>
  70. <text>后结束</text>
  71. </view>
  72. <view class='end_time' v-else>已结束</view>
  73. <view class='price'>当前价 ¥{{detail.now_price ?detail.now_price : 0}}</view>
  74. </view>
  75. </view>
  76. <view class='progress'>
  77. <view class='border' v-if="detail.bargain_price_per < 5" :style="{'left':`${detail.bargain_price_per}%`}"></view>
  78. <text class='begin' v-if="detail.bargain_price_per < 5">已砍{{detail.bargain_price ? detail.bargain_price : 0}}</text>
  79. <text class='progress-info progressing' v-else-if="detail.bargain_price_per < 100" :style="{'left':`${detail.bargain_price_per ? detail.bargain_price_per : 0}%`}">已砍{{detail.bargain_price ? detail.bargain_price : 0}}</text>
  80. <text class='progress-info over' v-else>已完成</text>
  81. <view class='progress-bg'>
  82. <image src='./../image/progress.png'></image>
  83. <view class='line' :class="[`${detail.bargain_price < 4 ? 'small-line':''}`]" :style="{'width':`${detail.bargain_price_per ? detail.bargain_price_per : 0}%`}"></view>
  84. </view>
  85. <text class='before-price'>原价¥{{detail.price ? detail.price : 0}}</text>
  86. <text class='after-price'>底价¥{{detail.min_price ? detail.min_price : 0}}</text>
  87. </view>
  88. <!-- 不是自己的砍价 -->
  89. <view class='join main-center' v-if="status == 2">
  90. <view @click="toJoin">
  91. <image class="join-img" :animation="sizeAnimation" :src='bargainImg.app_image.join_big'></image>
  92. </view>
  93. </view>
  94. <!-- 砍价未完成 -->
  95. <view class='button-view main-between' v-if="detail.now_price != detail.min_price && status != 2">
  96. <view @click="toBuy">
  97. <image :src='bargainImg.app_image.buy_small'></image>
  98. </view>
  99. <button open-type="share">
  100. <image :src='bargainImg.app_image.go_on'></image>
  101. </button>
  102. </view>
  103. <!-- 砍价完成 -->
  104. <view class='join main-center' v-if="detail.now_price == detail.min_price && status != 2">
  105. <view @click="toBuy">
  106. <image class="join-img" :animation="sizeAnimation" :src='bargainImg.app_image.buy_now'></image>
  107. </view>
  108. </view>
  109. <view class='log'>
  110. <view class='main-center'>
  111. <text class='log-line'></text>
  112. <text class='log-title'>砍价记录</text>
  113. <text class='log-line'></text>
  114. </view>
  115. <view class='log-item' v-for="item in list" :key="item.id">
  116. <view class='log-user'>
  117. <image :src='item.avatar'></image>
  118. <text class="nickname">{{item.nickname}}</text>
  119. </view>
  120. <view class='log-info'>
  121. <image src='./../image/down.png'></image>
  122. <text>砍掉{{item.price}}元</text>
  123. </view>
  124. </view>
  125. <view @click="lookMore" v-if="toMore">
  126. <view class='look-more' v-if="more">
  127. <image src='./../image/to-down.png'></image>
  128. <text>查看更多</text>
  129. </view>
  130. <view catchtap='closeList' class='up' v-else>
  131. <image src='./../image/to-up.png'></image>
  132. <text>收起</text>
  133. </view>
  134. </view>
  135. </view>
  136. </view>
  137. </view>
  138. </app-layout>
  139. </template>
  140. <script>
  141. import { mapState } from "vuex";
  142. export default {
  143. name: "activity",
  144. data() {
  145. return {
  146. detail: {
  147. bargain_price_per: 0
  148. },
  149. list: [],
  150. distance: 0,
  151. more: false,
  152. sizeAnimation: {},
  153. status: 1,
  154. animationData: '',
  155. kanjia: false,
  156. dialog: false,
  157. info: {},
  158. bargain: {},
  159. toMore: false,
  160. page: 1,
  161. dd: 0,
  162. hh:23,
  163. mm:59,
  164. ss:59,
  165. changeTimer: null,
  166. timer: null,
  167. tip: '',
  168. title: '',
  169. order_id: '',
  170. // rules: ''
  171. }
  172. },
  173. computed: {
  174. ...mapState({
  175. userInfo: state => state.user.info,
  176. bargainImg: state => state.mallConfig.plugin.bargain,
  177. mall: state => state.mallConfig.mall
  178. }),
  179. },
  180. /**
  181. * todo用户点击右上角分享
  182. */
  183. onShareAppMessage(object) {
  184. let that = this;
  185. return this.$shareAppMessage({
  186. title: that.title,
  187. path: "/plugins/bargain/activity/activity",
  188. imageUrl: that.detail.app_share_pic ? that.detail.app_share_pic : '',
  189. params: {
  190. user_id: that.userInfo.options.user_id,
  191. bargain_order_id: that.order_id,
  192. }
  193. });
  194. },
  195. onUnload() {
  196. clearInterval(this.timer);
  197. clearInterval(this.changeTimer);
  198. },
  199. /**
  200. * 生命周期函数--监听页面加载
  201. */
  202. onLoad: function (options) {
  203. var that = this;
  204. that.$store.dispatch('user/info');
  205. that.$showLoading({
  206. type: 'global',
  207. text: '加载中...'
  208. });
  209. that.getSetting();
  210. let getInfo = setInterval(function () {
  211. if(that.userInfo) {
  212. clearInterval(getInfo);
  213. if (options.order_id) {
  214. that.join(options.order_id);
  215. that.order_id = options.order_id;
  216. } else if (options.id) {
  217. that.getDetail(options.id,1)
  218. that.order_id = options.id;
  219. } else if (options.bargain_order_id) {
  220. that.order_id = options.bargain_order_id;
  221. if (options.user_id == that.userInfo.options.user_id) {
  222. that.getDetail(options.bargain_order_id, 1)
  223. } else {
  224. that.status = 2;
  225. that.join(options.bargain_order_id)
  226. }
  227. }
  228. that.changeTimer = setInterval(() => {
  229. that.changeSize();
  230. }, 300)
  231. }
  232. }, 300)
  233. },
  234. methods: {
  235. toRules() {
  236. // uni.navigateTo({
  237. // url: '/plugins/bargain/rule/rule?rules=' + this.rules
  238. // })
  239. uni.navigateTo({
  240. url: `/pages/rules/index?url=${encodeURIComponent(this.$api.bargain.setting)}&key=rule`,
  241. });
  242. },
  243. getSetting() {
  244. let that = this;
  245. that.$request({
  246. url: that.$api.bargain.setting,
  247. }).then(response=>{
  248. if(response.code === 0) {
  249. that.title = response.data.title.toString();
  250. // that.rules = response.data.rule;
  251. if(response.data.title.indexOf("\n") > -1) {
  252. let title = response.data.title.split("\n");
  253. let index = Math.floor(Math.random() * title.length);
  254. that.title = title[index]
  255. }
  256. }else {
  257. uni.showToast({
  258. title: response.msg,
  259. icon: 'none',
  260. duration: 1000
  261. });
  262. }
  263. }).catch(response => {
  264. that.$hideLoading();
  265. });
  266. },
  267. join(bargain_order_id) {
  268. let that = this;
  269. that.$request({
  270. url: that.$api.bargain.user_join_bargain,
  271. data: {
  272. bargain_order_id: bargain_order_id
  273. },
  274. }).then(response=>{
  275. if(response.code == 0) {
  276. let queueId = response.data.queueId;
  277. let token = response.data.token;
  278. that.result(queueId, token, bargain_order_id)
  279. }else {
  280. uni.showToast({
  281. title: response.msg,
  282. icon: 'none',
  283. duration: 1000
  284. });
  285. if (response.msg == "用户已参与本次砍价") {
  286. that.getDetail(bargain_order_id, 1)
  287. }
  288. }
  289. }).catch(response => {
  290. that.$hideLoading();
  291. });
  292. },
  293. result(queueId, token, bargain_order_id) {
  294. let that = this;
  295. that.$request({
  296. url: that.$api.bargain.user_join_bargain_result,
  297. data: {
  298. queueId: queueId,
  299. token: token
  300. },
  301. }).then(response=>{
  302. if(response.code == 0) {
  303. if (response.data.retry == 1) {
  304. setTimeout(() => {
  305. that.result(queueId, token, bargain_order_id)
  306. }, 1000)
  307. } else {
  308. that.$hideLoading();
  309. that.info = response.data.info;
  310. that.bargain = response.data.bargain;
  311. that.bargainAnimation();
  312. that.getDetail(bargain_order_id, 1)
  313. }
  314. }else {
  315. if (response.msg == "已砍至最低价") {
  316. that.tip = response.msg;
  317. that.getDetail(bargain_order_id, 1)
  318. }else {
  319. uni.showToast({
  320. title: response.msg,
  321. icon: 'none',
  322. duration: 1000
  323. });
  324. }
  325. }
  326. }).catch(response => {
  327. that.$hideLoading();
  328. });
  329. },
  330. getDetail(bargain_order_id,page) {
  331. let that = this;
  332. that.$request({
  333. url: that.$api.bargain.activity,
  334. data: {
  335. bargain_order_id: bargain_order_id,
  336. page: page
  337. },
  338. }).then(response=>{
  339. setTimeout(function(){
  340. that.$hideLoading();
  341. },500)
  342. if(response.code == 0) {
  343. if (response.data.list.length > 0) {
  344. that.detail = response.data;
  345. if (response.data.total_people > 3) {
  346. that.toMore = true;
  347. if (response.data.list.length == 3) {
  348. that.more = true;
  349. }else {
  350. that.more = false;
  351. }
  352. }
  353. that.list = that.list.concat(response.data.list);
  354. if(page == 1) {
  355. let reset_time = that.detail.reset_time;
  356. that.timer = setInterval(() => {
  357. reset_time--;
  358. that.getTime(reset_time);
  359. if(that.reset_time == 0) {
  360. clearInterval(that.timer)
  361. }
  362. }, 1000)
  363. }
  364. } else {
  365. that.tip = '暂无更多用户'
  366. that.toMore = false
  367. }
  368. }else {
  369. uni.showModal({
  370. title: '提示',
  371. content: response.data.msg,
  372. showCancel: false,
  373. success: function (res) {
  374. if (res.confirm) {
  375. uni.redirectTo({
  376. url: '/pages/index/index'
  377. });
  378. }
  379. }
  380. });
  381. }
  382. }).catch(response => {
  383. that.$hideLoading();
  384. });
  385. },
  386. getTime(time) {
  387. if(time > 86399) {
  388. this.dd = Math.floor(time / 86400)
  389. time = time - (86400*this.dd)
  390. }else {
  391. this.dd = 0
  392. }
  393. if(time > 3599) {
  394. this.hh = Math.floor(time / 3600)
  395. if(this.hh < 10) {
  396. this.hh = '0' + this.hh
  397. }
  398. time = time - (3600*this.hh)
  399. }else {
  400. this.hh = '00'
  401. }
  402. if(time > 59) {
  403. this.mm = Math.floor(time / 60)
  404. if(this.mm < 10) {
  405. this.mm = '0' + this.mm
  406. }
  407. time = time - (60*this.mm)
  408. }else {
  409. this.mm = '00';
  410. }
  411. if(time < 60) {
  412. this.ss = time;
  413. if(this.ss < 10) {
  414. this.ss = '0' + this.ss
  415. }
  416. }
  417. },
  418. // 砍价动画
  419. bargainAnimation() {
  420. let that = this;
  421. that.kanjia = true;
  422. that.dialog = true;
  423. setTimeout(function() {
  424. that.kanjia = false;
  425. that.success();
  426. },1200)
  427. that.$forceUpdate();
  428. },
  429. // 查看更多
  430. lookMore() {
  431. this.page++;
  432. this.getDetail(this.order_id,this.page)
  433. },
  434. // 收起
  435. closeList() {
  436. this.list = this.list.slice(0,3);
  437. this.page = 1;
  438. this.more = true;
  439. },
  440. // 砍价成功
  441. success() {
  442. let that = this;
  443. this.dialog = true;
  444. var animation = uni.createAnimation({
  445. duration: 500,
  446. timingFunction: 'linear'
  447. })
  448. this.animation = animation;
  449. animation.scale(1).step().rotate(2).step().rotate(-2).step().rotate(0).step();
  450. this.animationData = animation.export();
  451. },
  452. // 按钮动画
  453. changeSize() {
  454. var size = uni.createAnimation({
  455. duration: 1000,
  456. timingFunction: 'linear'
  457. })
  458. this.size = size;
  459. size.scale(0.8).step().scale(1).step();
  460. this.sizeAnimation = size.export();
  461. },
  462. toIndex() {
  463. uni.reLaunch({
  464. url:'/pages/index/index'
  465. })
  466. },
  467. toBuy() {
  468. if (this.$user.isLogin() && this.$store.state.user.info) {
  469. let member_level =this.$store.state.user.info.identity.member_level;
  470. if(member_level<this.goods.member_level){
  471. uni.showModal({
  472. title:"提示",
  473. content:"需达到"+this.goods.member_name+"会员才可购买",
  474. showCancel:true,
  475. confirmText: '升级',
  476. success:(res)=>{
  477. if (res.confirm) {
  478. uni.navigateTo({
  479. url: '/pages/member/upgrade/upgrade?level=' + member_level + '&other=' + this.goods.member_level
  480. })
  481. } else if (res.cancel) {
  482. console.log('用户点击取消');
  483. }
  484. }
  485. })
  486. return;
  487. }
  488. }
  489. const bargain = this.detail;
  490. const mchList = [{
  491. "mch_id": 0,
  492. "bargain_order_id": bargain.bargain_order_id,
  493. "goods_list": [{
  494. "id": bargain.goods_id,
  495. "attr": [],
  496. "num": 1,
  497. "cart_id": 0,
  498. "goods_attr_id": bargain.goods_attr_id
  499. }]
  500. }];
  501. uni.navigateTo({
  502. url: '/pages/order-submit/order-submit?mch_list=' +
  503. JSON.stringify(mchList) +
  504. '&preview_url=' + encodeURIComponent(this.$api.bargain.order_preview) +
  505. '&submit_url=' + encodeURIComponent(this.$api.bargain.order_submit)
  506. });
  507. },
  508. toJoin() {
  509. // if (this.$user.isLogin() && this.$store.state.user.info) {
  510. // let member_level =this.$store.state.user.info.identity.member_level;
  511. // if(member_level<this.goods.member_level){
  512. // uni.showToast({
  513. // title: '您的会员等级未达到'+this.goods.member_name+',继续加油哟。。。',
  514. // icon: 'none'
  515. // });
  516. // return;
  517. // }
  518. // }
  519. if (this.detail.goods_id) {
  520. uni.navigateTo({
  521. url: '/plugins/bargain/goods/goods?goods_id=' + this.detail.goods_id,
  522. })
  523. } else {
  524. uni.showModal({
  525. title: '提示',
  526. content: '活动已结束',
  527. showCancel: false,
  528. success: function(res) {
  529. if (res.confirm) {
  530. uni.redirectTo({
  531. url: '/pages/index/index'
  532. });
  533. }
  534. }
  535. });
  536. }
  537. },
  538. }
  539. }
  540. </script>
  541. <style scoped lang="scss">
  542. .goods-attr {
  543. margin-top: #{6rpx};
  544. margin-bottom: #{16rpx};
  545. color: #999999;
  546. font-size: #{26rpx};
  547. width: 60%;
  548. text {
  549. margin-right: #{18rpx};
  550. }
  551. }
  552. .page {
  553. background:linear-gradient(to bottom, #ee3763, #fdac42);
  554. padding-bottom: #{100rpx};
  555. min-height:100%;
  556. }
  557. .self-dialog {
  558. margin-bottom: #{14rpx};
  559. }
  560. .top-banner {
  561. width: 100%;
  562. height: #{100rpx};
  563. }
  564. .rules {
  565. position: absolute;
  566. top: #{32rpx};
  567. height: #{40rpx};
  568. line-height: #{40rpx};
  569. width: #{136rpx};
  570. text-align: center;
  571. background-color: rgba(0, 0, 0, 0.2);
  572. border-radius: #{20rpx};
  573. font-size: 12px;
  574. color: #fff;
  575. }
  576. .left-rules {
  577. left: #{20rpx};
  578. }
  579. .right-rules {
  580. right: #{20rpx};
  581. }
  582. .info {
  583. background-color: #fff;
  584. margin: 0 #{20rpx};
  585. position: relative;
  586. border-radius: #{16rpx};
  587. text-align: center;
  588. font-size: 16px;
  589. color: #353535;
  590. padding-top: #{65rpx};
  591. padding-bottom: #{10rpx};
  592. }
  593. .info .avatar {
  594. position: absolute;
  595. top: #{-70rpx};
  596. left: 0;
  597. right: 0;
  598. width: #{118rpx};
  599. height: #{118rpx};
  600. border-radius: 50%;
  601. margin: 0 auto;
  602. border: #{1rpx} solid #fff;
  603. }
  604. .info .username {
  605. font-size: 14px;
  606. color: #999;
  607. margin-bottom: #{20rpx};
  608. }
  609. .goods {
  610. margin: #{20rpx} #{24rpx} 0;
  611. padding: #{24rpx} 0;
  612. height: #{264rpx};
  613. border-top: #{1rpx} solid #e2e2e2;
  614. text-align: left;
  615. font-size: 14px;
  616. color: #353535;
  617. }
  618. .goods image {
  619. height: #{216rpx};
  620. width: #{216rpx};
  621. float: left;
  622. display: block;
  623. margin-right: #{20rpx};
  624. }
  625. .goods .end_time {
  626. font-size: 14px;
  627. color: #666;
  628. margin-top: #{10rpx};
  629. }
  630. .end_time text {
  631. margin: 0 #{10rpx};
  632. }
  633. .end_time text:last-of-type {
  634. margin: 0 0 0 #{10rpx};
  635. }
  636. .goods .end_time .date-text {
  637. display: inline-block;
  638. color: #fff;
  639. height: #{46rpx};
  640. line-height: #{46rpx};
  641. text-align: center;
  642. width: #{46rpx};
  643. margin: 0;
  644. background-color: #666;
  645. border-radius: #{4rpx};
  646. }
  647. .goods .price {
  648. font-size: 16px;
  649. color: #ff5c5c;
  650. margin-top: #{10rpx};
  651. }
  652. .progress {
  653. padding-top: #{56rpx};
  654. height: #{180rpx};
  655. width: #{680rpx};
  656. margin: #{32rpx} auto 0;
  657. position: relative;
  658. }
  659. .progress-info,.begin {
  660. font-size: 12px;
  661. color: #ff5c5c;
  662. padding: 0 #{20rpx};
  663. display: inline-block;
  664. border-radius: #{20rpx};
  665. height: #{40rpx};
  666. line-height: #{40rpx};
  667. background-color: #fff;
  668. position: absolute;
  669. z-index: 5;
  670. top: 0;
  671. left:5%;
  672. margin-left: #{-68rpx};
  673. white-space:nowrap;
  674. }
  675. .progress-info.progressing {
  676. margin-left: #{-68rpx};
  677. min-width: #{82rpx};
  678. white-space: nowrap;
  679. }
  680. .progress-info::after {
  681. content: '';
  682. position: absolute;
  683. top: #{40rpx};
  684. left: 50%;
  685. margin-left: #{-8rpx};
  686. border: #{8rpx} solid transparent;
  687. border-top-color: #fff;
  688. }
  689. .progress .border {
  690. position: absolute;
  691. top: #{40rpx};
  692. margin-left: #{-8rpx};
  693. border: #{8rpx} solid transparent;
  694. border-top-color: #fff;
  695. }
  696. .progress-info.over::after {
  697. left: 75%;
  698. }
  699. .progress-info.over {
  700. left:97%;
  701. margin-left: #{-68rpx};
  702. white-space:nowrap;
  703. }
  704. .progress .progress-bg {
  705. width: #{680rpx};
  706. height: #{28rpx};
  707. position: relative;
  708. }
  709. .progress .progress-bg image {
  710. width: #{680rpx};
  711. height: #{28rpx};
  712. position: absolute;
  713. }
  714. .progress .line {
  715. position: absolute;
  716. top: #{2rpx};
  717. left: #{2rpx};
  718. height: #{24rpx};
  719. background-color: #ff9f9f;
  720. border-radius: #{12rpx};
  721. z-index: 5;
  722. max-width: #{676rpx};
  723. }
  724. .progress .line.small-line {
  725. border-top-right-radius: 0;
  726. border-bottom-right-radius: 0;
  727. }
  728. .before-price, .after-price {
  729. font-size: 12px;
  730. color: #fff;
  731. position: absolute;
  732. bottom: #{40rpx};
  733. }
  734. .before-price {
  735. left: 0;
  736. }
  737. .after-price {
  738. right: 0;
  739. }
  740. .button-view {
  741. height: #{122rpx};
  742. padding-bottom: #{40rpx};
  743. margin: 0 #{20rpx};
  744. }
  745. .button-view button {
  746. height: #{82rpx};
  747. width: #{328rpx};
  748. padding: 0;
  749. margin: 0;
  750. border-radius: #{41rpx};
  751. }
  752. .button-view image {
  753. height: #{82rpx};
  754. width: #{328rpx};
  755. }
  756. .log {
  757. background-color: rgba(255, 255, 255, .3);
  758. margin: 0 #{20rpx};
  759. padding: #{40rpx};
  760. border-radius: #{16rpx};
  761. position: relative;
  762. }
  763. .log-line {
  764. position: absolute;
  765. top: #{60rpx};
  766. left: 50%;
  767. height: #{1rpx};
  768. width: #{160rpx};
  769. background-color: #fff;
  770. }
  771. .log .log-line:first-of-type {
  772. margin-left: #{-254rpx};
  773. }
  774. .log .log-line:last-of-type {
  775. margin-left: #{94rpx};
  776. }
  777. .log-title {
  778. color: #fff;
  779. font-size: 14px;
  780. margin: 0 #{34rpx};
  781. }
  782. .log-item {
  783. margin-top: #{40rpx};
  784. height: #{80rpx};
  785. line-height: #{80rpx};
  786. color: #fff;
  787. }
  788. .log-item .log-user {
  789. float: left;
  790. width: 50%;
  791. }
  792. .log-item .log-user image {
  793. height: #{80rpx};
  794. width: #{80rpx};
  795. border-radius: 50%;
  796. margin-right: #{24rpx};
  797. float: left;
  798. }
  799. .log-item .log-info {
  800. float: right;
  801. width: 50%;
  802. text-align: right;
  803. }
  804. .log-item .log-info text {
  805. float: right;
  806. }
  807. .log-item .log-info image {
  808. margin-top: #{15rpx};
  809. height: #{50rpx};
  810. width: #{72rpx};
  811. margin-right: #{16rpx};
  812. }
  813. .look-more,.up {
  814. margin-top: #{48rpx};
  815. width: 100%;
  816. font-size: 12px;
  817. color: #fff;
  818. text-align: center;
  819. }
  820. .look-more image,.up image {
  821. height: #{18rpx};
  822. width: #{18rpx};
  823. margin-right: #{16rpx};
  824. }
  825. .join {
  826. height: #{152rpx};
  827. }
  828. .dialog-bg {
  829. height: 100%;
  830. width: 100%;
  831. position: fixed;
  832. left: 0;
  833. top: 0;
  834. z-index: 10;
  835. background-color: rgba(0, 0, 0, 0.3);
  836. }
  837. .dialog-header {
  838. position: absolute;
  839. left: 0;
  840. right: 0;
  841. top: 0;
  842. margin: 0 auto;
  843. height: #{200rpx};
  844. width: #{638rpx};
  845. z-index: 15;
  846. }
  847. .dialog-header-gif {
  848. position: absolute;
  849. left: 0;
  850. right: 0;
  851. top: #{34rpx};
  852. margin: 0 auto;
  853. height: #{69rpx};
  854. width: #{132rpx};
  855. z-index: 20;
  856. }
  857. .dialog-header-gif-sec {
  858. position: absolute;
  859. left: 0;
  860. right: 0;
  861. top: #{-70rpx};
  862. margin: 0 auto;
  863. height: #{276rpx};
  864. width: #{525rpx};
  865. z-index: 20;
  866. transform: scale(0.25);
  867. }
  868. .dialog {
  869. padding: #{60rpx} 0 #{48rpx};
  870. background-color: #fff;
  871. position: fixed;
  872. top: #{504rpx};
  873. left: 0;
  874. right: 0;
  875. margin: 0 auto;
  876. width: #{638rpx};
  877. text-align: center;
  878. border-bottom-left-radius: #{16rpx};
  879. border-bottom-right-radius: #{16rpx};
  880. }
  881. .dialog image {
  882. margin-top: #{45rpx};
  883. height: #{88rpx};
  884. width: #{480rpx};
  885. }
  886. .button-margin {
  887. margin-top: #{45rpx};
  888. }
  889. .button-margin button {
  890. border: 0;
  891. }
  892. .dialog button {
  893. background-color: #fff;
  894. }
  895. .dialog .price {
  896. color: #ff5c5c;
  897. font-size: 16px;
  898. font-weight: blod;
  899. }
  900. .dialog-close {
  901. height: #{50rpx};
  902. width: #{50rpx};
  903. position: fixed;
  904. top: #{320rpx};
  905. right: #{62rpx};
  906. z-index: 20;
  907. }
  908. .in-bargain {
  909. position: fixed;
  910. top: #{300rpx};
  911. left: 0;
  912. right: 0;
  913. margin: 0 auto;
  914. width: #{638rpx};
  915. height: #{535rpx};
  916. border-radius: #{16rpx};
  917. background-color: #fff;
  918. }
  919. .bargain-gif {
  920. display: block;
  921. position: absolute;
  922. top: #{147.5rpx};
  923. left: 0;
  924. right: 0;
  925. height: #{240rpx};
  926. width: #{310rpx};
  927. margin: 0 auto;
  928. }
  929. .bargain-gif-bg {
  930. display: block;
  931. position: absolute;
  932. top: 0;
  933. left: 0;
  934. right: 0;
  935. height: #{500rpx};
  936. width: #{500rpx};
  937. margin: 0 auto;
  938. }
  939. page {
  940. height: 100%;
  941. }
  942. .nickname {
  943. white-space: nowrap;
  944. overflow: hidden;
  945. text-overflow: ellipsis;
  946. display: inline-block;
  947. width: 65%;
  948. }
  949. .dialog-item {
  950. position: fixed;
  951. top: #{400rpx};
  952. left: 0;
  953. right: 0;
  954. height: #{300rpx};
  955. width: #{640rpx};
  956. margin: 0 auto;
  957. z-index: 21;
  958. background-color: #fff;
  959. border-radius: #{20rpx};
  960. text-align: center;
  961. font-size: #{30rpx};
  962. }
  963. .close-button {
  964. height: #{88rpx};
  965. width: #{640rpx};
  966. border-top: #{1rpx} solid #e2e2e2;
  967. line-height: #{88rpx};
  968. color: #ff4544;
  969. position: absolute;
  970. bottom: 0;
  971. left: 0;
  972. }
  973. .dialog-tip-title {
  974. margin: #{40rpx} auto #{35rpx};
  975. }
  976. .join-img {
  977. width: #{680rpx};
  978. height: #{110rpx};
  979. }
  980. .goods-name {
  981. margin-top: #{6rpx};
  982. }
  983. </style>