activity.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
  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.showToast({
  472. title: '您的会员等级未达到'+this.goods.member_name+',继续加油哟。。。',
  473. icon: 'none'
  474. });
  475. return;
  476. }
  477. }
  478. const bargain = this.detail;
  479. const mchList = [{
  480. "mch_id": 0,
  481. "bargain_order_id": bargain.bargain_order_id,
  482. "goods_list": [{
  483. "id": bargain.goods_id,
  484. "attr": [],
  485. "num": 1,
  486. "cart_id": 0,
  487. "goods_attr_id": bargain.goods_attr_id
  488. }]
  489. }];
  490. uni.navigateTo({
  491. url: '/pages/order-submit/order-submit?mch_list=' +
  492. JSON.stringify(mchList) +
  493. '&preview_url=' + encodeURIComponent(this.$api.bargain.order_preview) +
  494. '&submit_url=' + encodeURIComponent(this.$api.bargain.order_submit)
  495. });
  496. },
  497. toJoin() {
  498. if (this.$user.isLogin() && this.$store.state.user.info) {
  499. let member_level =this.$store.state.user.info.identity.member_level;
  500. if(member_level<this.goods.member_level){
  501. uni.showToast({
  502. title: '您的会员等级未达到'+this.goods.member_name+',继续加油哟。。。',
  503. icon: 'none'
  504. });
  505. return;
  506. }
  507. }
  508. if (this.detail.goods_id) {
  509. uni.navigateTo({
  510. url: '/plugins/bargain/goods/goods?goods_id=' + this.detail.goods_id,
  511. })
  512. } else {
  513. uni.showModal({
  514. title: '提示',
  515. content: '活动已结束',
  516. showCancel: false,
  517. success: function(res) {
  518. if (res.confirm) {
  519. uni.redirectTo({
  520. url: '/pages/index/index'
  521. });
  522. }
  523. }
  524. });
  525. }
  526. },
  527. }
  528. }
  529. </script>
  530. <style scoped lang="scss">
  531. .goods-attr {
  532. margin-top: #{6rpx};
  533. margin-bottom: #{16rpx};
  534. color: #999999;
  535. font-size: #{26rpx};
  536. width: 60%;
  537. text {
  538. margin-right: #{18rpx};
  539. }
  540. }
  541. .page {
  542. background:linear-gradient(to bottom, #ee3763, #fdac42);
  543. padding-bottom: #{100rpx};
  544. min-height:100%;
  545. }
  546. .self-dialog {
  547. margin-bottom: #{14rpx};
  548. }
  549. .top-banner {
  550. width: 100%;
  551. height: #{100rpx};
  552. }
  553. .rules {
  554. position: absolute;
  555. top: #{32rpx};
  556. height: #{40rpx};
  557. line-height: #{40rpx};
  558. width: #{136rpx};
  559. text-align: center;
  560. background-color: rgba(0, 0, 0, 0.2);
  561. border-radius: #{20rpx};
  562. font-size: 12px;
  563. color: #fff;
  564. }
  565. .left-rules {
  566. left: #{20rpx};
  567. }
  568. .right-rules {
  569. right: #{20rpx};
  570. }
  571. .info {
  572. background-color: #fff;
  573. margin: 0 #{20rpx};
  574. position: relative;
  575. border-radius: #{16rpx};
  576. text-align: center;
  577. font-size: 16px;
  578. color: #353535;
  579. padding-top: #{65rpx};
  580. padding-bottom: #{10rpx};
  581. }
  582. .info .avatar {
  583. position: absolute;
  584. top: #{-70rpx};
  585. left: 0;
  586. right: 0;
  587. width: #{118rpx};
  588. height: #{118rpx};
  589. border-radius: 50%;
  590. margin: 0 auto;
  591. border: #{1rpx} solid #fff;
  592. }
  593. .info .username {
  594. font-size: 14px;
  595. color: #999;
  596. margin-bottom: #{20rpx};
  597. }
  598. .goods {
  599. margin: #{20rpx} #{24rpx} 0;
  600. padding: #{24rpx} 0;
  601. height: #{264rpx};
  602. border-top: #{1rpx} solid #e2e2e2;
  603. text-align: left;
  604. font-size: 14px;
  605. color: #353535;
  606. }
  607. .goods image {
  608. height: #{216rpx};
  609. width: #{216rpx};
  610. float: left;
  611. display: block;
  612. margin-right: #{20rpx};
  613. }
  614. .goods .end_time {
  615. font-size: 14px;
  616. color: #666;
  617. margin-top: #{10rpx};
  618. }
  619. .end_time text {
  620. margin: 0 #{10rpx};
  621. }
  622. .end_time text:last-of-type {
  623. margin: 0 0 0 #{10rpx};
  624. }
  625. .goods .end_time .date-text {
  626. display: inline-block;
  627. color: #fff;
  628. height: #{46rpx};
  629. line-height: #{46rpx};
  630. text-align: center;
  631. width: #{46rpx};
  632. margin: 0;
  633. background-color: #666;
  634. border-radius: #{4rpx};
  635. }
  636. .goods .price {
  637. font-size: 16px;
  638. color: #ff5c5c;
  639. margin-top: #{10rpx};
  640. }
  641. .progress {
  642. padding-top: #{56rpx};
  643. height: #{180rpx};
  644. width: #{680rpx};
  645. margin: #{32rpx} auto 0;
  646. position: relative;
  647. }
  648. .progress-info,.begin {
  649. font-size: 12px;
  650. color: #ff5c5c;
  651. padding: 0 #{20rpx};
  652. display: inline-block;
  653. border-radius: #{20rpx};
  654. height: #{40rpx};
  655. line-height: #{40rpx};
  656. background-color: #fff;
  657. position: absolute;
  658. z-index: 5;
  659. top: 0;
  660. left:5%;
  661. margin-left: #{-68rpx};
  662. white-space:nowrap;
  663. }
  664. .progress-info.progressing {
  665. margin-left: #{-68rpx};
  666. min-width: #{82rpx};
  667. white-space: nowrap;
  668. }
  669. .progress-info::after {
  670. content: '';
  671. position: absolute;
  672. top: #{40rpx};
  673. left: 50%;
  674. margin-left: #{-8rpx};
  675. border: #{8rpx} solid transparent;
  676. border-top-color: #fff;
  677. }
  678. .progress .border {
  679. position: absolute;
  680. top: #{40rpx};
  681. margin-left: #{-8rpx};
  682. border: #{8rpx} solid transparent;
  683. border-top-color: #fff;
  684. }
  685. .progress-info.over::after {
  686. left: 75%;
  687. }
  688. .progress-info.over {
  689. left:97%;
  690. margin-left: #{-68rpx};
  691. white-space:nowrap;
  692. }
  693. .progress .progress-bg {
  694. width: #{680rpx};
  695. height: #{28rpx};
  696. position: relative;
  697. }
  698. .progress .progress-bg image {
  699. width: #{680rpx};
  700. height: #{28rpx};
  701. position: absolute;
  702. }
  703. .progress .line {
  704. position: absolute;
  705. top: #{2rpx};
  706. left: #{2rpx};
  707. height: #{24rpx};
  708. background-color: #ff9f9f;
  709. border-radius: #{12rpx};
  710. z-index: 5;
  711. max-width: #{676rpx};
  712. }
  713. .progress .line.small-line {
  714. border-top-right-radius: 0;
  715. border-bottom-right-radius: 0;
  716. }
  717. .before-price, .after-price {
  718. font-size: 12px;
  719. color: #fff;
  720. position: absolute;
  721. bottom: #{40rpx};
  722. }
  723. .before-price {
  724. left: 0;
  725. }
  726. .after-price {
  727. right: 0;
  728. }
  729. .button-view {
  730. height: #{122rpx};
  731. padding-bottom: #{40rpx};
  732. margin: 0 #{20rpx};
  733. }
  734. .button-view button {
  735. height: #{82rpx};
  736. width: #{328rpx};
  737. padding: 0;
  738. margin: 0;
  739. border-radius: #{41rpx};
  740. }
  741. .button-view image {
  742. height: #{82rpx};
  743. width: #{328rpx};
  744. }
  745. .log {
  746. background-color: rgba(255, 255, 255, .3);
  747. margin: 0 #{20rpx};
  748. padding: #{40rpx};
  749. border-radius: #{16rpx};
  750. position: relative;
  751. }
  752. .log-line {
  753. position: absolute;
  754. top: #{60rpx};
  755. left: 50%;
  756. height: #{1rpx};
  757. width: #{160rpx};
  758. background-color: #fff;
  759. }
  760. .log .log-line:first-of-type {
  761. margin-left: #{-254rpx};
  762. }
  763. .log .log-line:last-of-type {
  764. margin-left: #{94rpx};
  765. }
  766. .log-title {
  767. color: #fff;
  768. font-size: 14px;
  769. margin: 0 #{34rpx};
  770. }
  771. .log-item {
  772. margin-top: #{40rpx};
  773. height: #{80rpx};
  774. line-height: #{80rpx};
  775. color: #fff;
  776. }
  777. .log-item .log-user {
  778. float: left;
  779. width: 50%;
  780. }
  781. .log-item .log-user image {
  782. height: #{80rpx};
  783. width: #{80rpx};
  784. border-radius: 50%;
  785. margin-right: #{24rpx};
  786. float: left;
  787. }
  788. .log-item .log-info {
  789. float: right;
  790. width: 50%;
  791. text-align: right;
  792. }
  793. .log-item .log-info text {
  794. float: right;
  795. }
  796. .log-item .log-info image {
  797. margin-top: #{15rpx};
  798. height: #{50rpx};
  799. width: #{72rpx};
  800. margin-right: #{16rpx};
  801. }
  802. .look-more,.up {
  803. margin-top: #{48rpx};
  804. width: 100%;
  805. font-size: 12px;
  806. color: #fff;
  807. text-align: center;
  808. }
  809. .look-more image,.up image {
  810. height: #{18rpx};
  811. width: #{18rpx};
  812. margin-right: #{16rpx};
  813. }
  814. .join {
  815. height: #{152rpx};
  816. }
  817. .dialog-bg {
  818. height: 100%;
  819. width: 100%;
  820. position: fixed;
  821. left: 0;
  822. top: 0;
  823. z-index: 10;
  824. background-color: rgba(0, 0, 0, 0.3);
  825. }
  826. .dialog-header {
  827. position: absolute;
  828. left: 0;
  829. right: 0;
  830. top: 0;
  831. margin: 0 auto;
  832. height: #{200rpx};
  833. width: #{638rpx};
  834. z-index: 15;
  835. }
  836. .dialog-header-gif {
  837. position: absolute;
  838. left: 0;
  839. right: 0;
  840. top: #{34rpx};
  841. margin: 0 auto;
  842. height: #{69rpx};
  843. width: #{132rpx};
  844. z-index: 20;
  845. }
  846. .dialog-header-gif-sec {
  847. position: absolute;
  848. left: 0;
  849. right: 0;
  850. top: #{-70rpx};
  851. margin: 0 auto;
  852. height: #{276rpx};
  853. width: #{525rpx};
  854. z-index: 20;
  855. transform: scale(0.25);
  856. }
  857. .dialog {
  858. padding: #{60rpx} 0 #{48rpx};
  859. background-color: #fff;
  860. position: fixed;
  861. top: #{504rpx};
  862. left: 0;
  863. right: 0;
  864. margin: 0 auto;
  865. width: #{638rpx};
  866. text-align: center;
  867. border-bottom-left-radius: #{16rpx};
  868. border-bottom-right-radius: #{16rpx};
  869. }
  870. .dialog image {
  871. margin-top: #{45rpx};
  872. height: #{88rpx};
  873. width: #{480rpx};
  874. }
  875. .button-margin {
  876. margin-top: #{45rpx};
  877. }
  878. .button-margin button {
  879. border: 0;
  880. }
  881. .dialog button {
  882. background-color: #fff;
  883. }
  884. .dialog .price {
  885. color: #ff5c5c;
  886. font-size: 16px;
  887. font-weight: blod;
  888. }
  889. .dialog-close {
  890. height: #{50rpx};
  891. width: #{50rpx};
  892. position: fixed;
  893. top: #{320rpx};
  894. right: #{62rpx};
  895. z-index: 20;
  896. }
  897. .in-bargain {
  898. position: fixed;
  899. top: #{300rpx};
  900. left: 0;
  901. right: 0;
  902. margin: 0 auto;
  903. width: #{638rpx};
  904. height: #{535rpx};
  905. border-radius: #{16rpx};
  906. background-color: #fff;
  907. }
  908. .bargain-gif {
  909. display: block;
  910. position: absolute;
  911. top: #{147.5rpx};
  912. left: 0;
  913. right: 0;
  914. height: #{240rpx};
  915. width: #{310rpx};
  916. margin: 0 auto;
  917. }
  918. .bargain-gif-bg {
  919. display: block;
  920. position: absolute;
  921. top: 0;
  922. left: 0;
  923. right: 0;
  924. height: #{500rpx};
  925. width: #{500rpx};
  926. margin: 0 auto;
  927. }
  928. page {
  929. height: 100%;
  930. }
  931. .nickname {
  932. white-space: nowrap;
  933. overflow: hidden;
  934. text-overflow: ellipsis;
  935. display: inline-block;
  936. width: 65%;
  937. }
  938. .dialog-item {
  939. position: fixed;
  940. top: #{400rpx};
  941. left: 0;
  942. right: 0;
  943. height: #{300rpx};
  944. width: #{640rpx};
  945. margin: 0 auto;
  946. z-index: 21;
  947. background-color: #fff;
  948. border-radius: #{20rpx};
  949. text-align: center;
  950. font-size: #{30rpx};
  951. }
  952. .close-button {
  953. height: #{88rpx};
  954. width: #{640rpx};
  955. border-top: #{1rpx} solid #e2e2e2;
  956. line-height: #{88rpx};
  957. color: #ff4544;
  958. position: absolute;
  959. bottom: 0;
  960. left: 0;
  961. }
  962. .dialog-tip-title {
  963. margin: #{40rpx} auto #{35rpx};
  964. }
  965. .join-img {
  966. width: #{680rpx};
  967. height: #{110rpx};
  968. }
  969. .goods-name {
  970. margin-top: #{6rpx};
  971. }
  972. </style>