activityDetail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. <template>
  2. <view class="act-deltail-main"
  3. :style="{paddingBottom: `${footerHeight}rpx`}">
  4. <network-error />
  5. <view class="over-view">
  6. <image class="detail-img"
  7. :src="detail.imgs"
  8. mode="aspectFill"></image>
  9. <view class="detail-over">
  10. <text class="detail-title u-line-2 u-font-40 line-56 u-tips-color bold">【{{detail.activity_type | activityTyepFilter}}】{{detail.title}}</text>
  11. <view class="u-flex u-col-bottom u-p-t-24 u-p-b-28 u-border-bottom">
  12. <text class="u-primary-color u-font-28 line-40">返利:</text>
  13. <block v-if="detail.activity_type === 1">
  14. <text class="u-flex-1 u-primary-color u-font-36 line-50 bold">实付全返</text>
  15. </block>
  16. <block v-if="detail.activity_type === 2">
  17. <view class="u-flex-1 u-primary-color bold">
  18. <text class="u-font-28 line-40">¥</text>
  19. <text class="u-font-36 line-50">{{(detail.rebate_amount / 100).toFixed(2)}}</text>
  20. </view>
  21. </block>
  22. <text class="u-primary-color u-font-24 line-34">{{detail.join_count - detail.join_number}}</text>
  23. <text class="u-content-color u-font-24 line-34">剩余名额</text>
  24. </view>
  25. <view class="u-flex u-row-between u-p-t-22">
  26. <text class="u-content-color">{{detail.join_number}}已参与</text>
  27. <button class="share-btn u-primary-color u-font-24 line-34"
  28. v-if="!userId"
  29. @click="jumpToLogin">分享活动</button>
  30. <button class="share-btn u-primary-color u-font-24 line-34"
  31. open-type="share"
  32. v-if="userId">分享活动</button>
  33. </view>
  34. <image v-if="platBanner"
  35. :src="platBanner.img"
  36. class="detail-banner line-34 u-m-t-32"
  37. mode="widthFix"
  38. @click="dealJumpInfo(platBanner)"></image>
  39. </view>
  40. </view>
  41. <view class="shop-info u-m-t-16">
  42. <view class="u-font-36 line-50 u-tips-color bold">店铺信息</view>
  43. <view class="u-flex">
  44. <view class="u-flex-1">
  45. <text class="shop-name u-font-28 u-tips-color line-40 u-line-1">【{{detail.plat_type | platFilter}}】{{detail.shop_name}}</text>
  46. <view class="u-flex"
  47. @click="openMap">
  48. <view class="icon-map-wh icon-map"></view>
  49. <view class="u-content-color u-m-l-8 u-m-r-16">{{(detail.distance / 1000).toFixed(1)}}km</view>
  50. <text class="shop-address u-flex-1 u-content-color u-line-1">{{detail.shop_address}}</text>
  51. </view>
  52. </view>
  53. <view class="divider-right"></view>
  54. <block v-if="detail.plat_type === 8">
  55. <view class="to-btn u-p-l-28"
  56. @click="copyShopName()">
  57. <view class="icon-mt-wh icon-elm"></view>
  58. <view class="u-m-t-2 u-font-22 u-content-color line-32">打开饿了么</view>
  59. </view>
  60. </block>
  61. <block v-if="detail.plat_type === 9">
  62. <view class="to-btn u-p-l-40"
  63. @click="copyShopName()">
  64. <view class="icon-mt-wh icon-mt"></view>
  65. <view class="u-m-t-2 u-font-22 u-content-color line-32">打开美团</view>
  66. </view>
  67. </block>
  68. </view>
  69. </view>
  70. <view class="act-able-time u-m-t-16">
  71. <view class="u-font-36 line-50 u-tips-color bold">活动可用时间</view>
  72. <view class="u-flex u-m-t-16">
  73. <text class="u-flex-1 u-content-color line-40 u-line-2 u-p-r-32">{{businessHours}}营业时间可用(当天参与报名,需当天提交资料才能有效返款)</text>
  74. <view class="divider-right"></view>
  75. <button class="to-btn contact-btn u-p-l-40"
  76. @click="copyWx">
  77. <view class="icon-phone-wh icon-phone"></view>
  78. <view class="u-m-t-2 u-font-22 u-content-color line-32">联系客服</view>
  79. </button>
  80. </view>
  81. </view>
  82. <view class="act-desc u-m-t-16">
  83. <view class="act-tabs u-border-bottom">
  84. <u-tabs :is-scroll="false"
  85. :list="[{name: '活动规则'}, {name: '评价要求'}]"
  86. :current="currentTab"
  87. height="104"
  88. font-size="30"
  89. active-color="#FF6632"
  90. inactive-color="#111111"
  91. :bar-style="{
  92. bottom: '-4rpx',
  93. marginLeft: '-40rpx',
  94. width: '120rpx',
  95. height: '6rpx',
  96. borderRadius: 0,
  97. backgroundColor: 'linear-gradient(270deg, #FFB76B 0%, #FE4028 100%)'
  98. }"
  99. @change="changeTab">
  100. </u-tabs>
  101. </view>
  102. <view class="u-m-b-18 u-p-t-32 u-p-b-32">
  103. <block v-if="currentTab === 0">
  104. <block v-for="(item, index) in detail.content"
  105. :key="index">
  106. <img-text :value="item.content"
  107. :type="item.contentType"></img-text>
  108. </block>
  109. </block>
  110. <block v-else>
  111. <img-text :value="detail.requirement"
  112. type="1"></img-text>
  113. </block>
  114. </view>
  115. </view>
  116. <block v-if="status">
  117. <fixed-bottom @get-height="getFooterHeight">
  118. <view class="bottom-footer u-flex">
  119. <block v-if="(status * 1 === 2)">
  120. <view class="u-flex-1">
  121. <view class="line-34 bold">{{'距截止提交还有:'}}</view>
  122. <view class="u-font-20 u-content-color line-28">{{remainingTime}}</view>
  123. </view>
  124. <block v-if="status * 1 === 2">
  125. <view class="u-flex">
  126. <button class="canel-btn u-font-28 line-40"
  127. @click="cancelJoin"
  128. v-show="!isExpire">取消报名</button>
  129. <button :class="isExpire ? 'sign-up-btn u-font-28 line-40 u-m-l-16' : 'submit-btn u-font-28 line-40 u-m-l-16'"
  130. @click="toSubmiteOrder">提交订单</button>
  131. </view>
  132. </block>
  133. </block>
  134. <block v-if="status * 1 === 1">
  135. <block v-if="isExpire">
  136. <button class="end-btn u-m-l-12"
  137. disabled
  138. v-if="status * 1 === 1">已结束</button>
  139. </block>
  140. <view class="u-flex-1"
  141. v-if="!isExpire">
  142. <view class="line-34 bold">{{isStart ? '距活动结束还有:' : '距活动开始还有:'}}</view>
  143. <view class="u-font-20 u-content-color line-28">{{remainingTime}}</view>
  144. </view>
  145. <block v-if="status * 1 === 1 && !isExpire">
  146. <button :class="isStart ? 'sign-up-btn u-font-30 bold line-42' : 'sign-up-btn u-font-30 bold line-42'"
  147. @click="join">{{isStart ? '免费报名' : '即将开始'}}</button>
  148. </block>
  149. </block>
  150. <block v-if="status * 1 === 3 || status * 1 === 4">
  151. <block v-if="status * 1 === 3">
  152. <view class="u-flex-1">
  153. <view class="line-34 bold">等待审核:</view>
  154. <view class="u-font-20 u-content-color line-28">审核通过后将获得返利金额</view>
  155. </view>
  156. </block>
  157. <block v-if="status * 1 === 4">
  158. <view class="u-flex-1">
  159. <view class="line-34 bold">审核通过:</view>
  160. <view class="u-font-20 u-content-color line-28">返利金额将在第二日到账</view>
  161. </view>
  162. </block>
  163. <button class="sign-up-btn u-font-30 bold line-42"
  164. disabled>已提交</button>
  165. </block>
  166. <block v-if="status * 1 === 5">
  167. <view class="u-flex-1">
  168. <view class="line-34 bold">审核驳回:</view>
  169. <view class="u-font-20 u-content-color line-28">{{detail.reject_reason}}</view>
  170. </view>
  171. </block>
  172. <block v-if="status * 1 === 6">
  173. <button class="end-btn u-m-l-12"
  174. disabled>已结束</button>
  175. </block>
  176. <block v-if="status * 1 === 7">
  177. <button class="end-btn u-m-l-12"
  178. disabled>已抢光</button>
  179. </block>
  180. </view>
  181. </fixed-bottom>
  182. </block>
  183. <view class="fixed-copy"
  184. :style="{marginBottom: `${footerHeight}rpx`}">
  185. <view class="copy-container">
  186. <image src="@/static/common/share.png"
  187. mode="scaleToFill"
  188. v-if="isCommissionEnable"
  189. @click="onClickShare" />
  190. <view class="btn-copy u-font-22"
  191. v-show="detail.search_key"
  192. @click.stop="copyShopName">复制店名</view>
  193. </view>
  194. </view>
  195. <activity-join-dialog @onClose="isDialog = false"
  196. @onOpen="onDialogOpen()"
  197. :title="dlgTitle"
  198. :shopName="detail.shop_name"
  199. :platType="detail.plat_type*1"
  200. :steps="detail.steps"
  201. v-if="isDialog"></activity-join-dialog>
  202. </view>
  203. </template>
  204. <script>
  205. import fixedBottom from '@/components/fixedBottom'
  206. import imgText from '@/components/imgText'
  207. import { getActivityDetail } from '@/api/activityApi'
  208. import { editJoinActivity, cancelJoinActivity } from '@/api/userApi'
  209. import activityJoinDialog from '@/components/activityJoinDialog'
  210. export default {
  211. components: { fixedBottom, imgText, activityJoinDialog },
  212. data () {
  213. return {
  214. isDialog: false,
  215. showErr: false,
  216. errMsg: '',
  217. nowTime: '',
  218. timer: null,
  219. footerHeight: 0,
  220. currentTab: 0,
  221. activityId: '',
  222. recordId: '',
  223. dlgTitle: '复制成功',
  224. dlgType: 1,
  225. detail: {
  226. imgs: '',
  227. activity_type: '',
  228. title: '',
  229. rebate_amount: '',
  230. join_count: 0,
  231. join_number: 0,
  232. plat_type: '',
  233. shop_name: '',
  234. distance: 0,
  235. shop_address: '',
  236. join_status: '',
  237. start_time: '',
  238. end_time: '',
  239. search_key: ''
  240. }
  241. }
  242. },
  243. computed: {
  244. platBanner () {
  245. if (this.detail) {
  246. const list = this.$store.state.home_minipro
  247. const mapList = list.filter((item) => {
  248. return item.plat_type === this.detail.plat_type
  249. })
  250. if (mapList.length > 0) {
  251. return mapList[0]
  252. } else {
  253. return null
  254. }
  255. } else {
  256. return null
  257. }
  258. },
  259. isCommissionEnable () {
  260. return this.$store.state.enable_commission * 1 === 1
  261. },
  262. userId () {
  263. return this.$store.state.userInfo.token
  264. },
  265. isStart () {
  266. if (!this.nowTime) {
  267. return true
  268. }
  269. const now = this.nowTime.format('HH:mm:ss')
  270. console.log(this.detail.start_time)
  271. console.log(now)
  272. if (this.detail.start_time < now) {
  273. console.log(this.detail.start_time < now)
  274. return true
  275. }
  276. return false
  277. },
  278. isExpire () {
  279. if (!this.nowTime) {
  280. return false
  281. }
  282. const now = this.nowTime.format('HH:mm:ss')
  283. if (this.detail.end_time < now) {
  284. return true
  285. }
  286. return false
  287. },
  288. businessHours () {
  289. const date = this.$dayjs(`${this.detail.start_date}`).format('YYYY年MM月DD日')
  290. const start = this.$dayjs(`${this.detail.start_date} ${this.detail.start_time}`).format('HH:mm')
  291. const end = this.$dayjs(`${this.detail.end_date} ${this.detail.end_time}`).format('HH:mm')
  292. return `${date} ${start}-${end}`
  293. },
  294. status () {
  295. if (this.detail.join_status === 1) {
  296. return 2
  297. } else if (this.detail.join_status === 2) {
  298. return 3
  299. } else if (this.detail.join_status === 3) {
  300. return 4
  301. } else if (this.detail.join_status === 4) {
  302. return 5
  303. } else if (this.detail.join_status === 5) {
  304. return 1
  305. } else if (this.detail.join_status === 6) {
  306. return 6
  307. } else if (this.detail.join_count === this.detail.join_number && this.detail.join_count) {
  308. return 7
  309. } else if (this.detail.join_status === 0) {
  310. return 1
  311. } else {
  312. return 0
  313. }
  314. },
  315. remainingTime () {
  316. if (!this.detail.end_time) { return }
  317. if (this.status * 1 === 2) {
  318. const endTime = this.$dayjs(`${this.$dayjs().format('YYYY-MM-DD 23:59:59')}`)
  319. if (isNaN(endTime.diff(this.nowTime, 's'))) { return }
  320. return this.$dayjs(endTime.diff(this.nowTime)).subtract(8, 'h').format('HH小时mm分ss秒')
  321. }
  322. if (this.isStart) {
  323. const endTime = this.$dayjs(`${this.$dayjs().format('YYYY-MM-DD')} ${this.detail.end_time}`)
  324. if (isNaN(endTime.diff(this.nowTime, 's'))) { return }
  325. if (!isNaN(endTime.diff(this.nowTime, 's')) && endTime.diff(this.nowTime, 's') === 0) {
  326. clearTimeout(this.timer)
  327. return 0
  328. }
  329. return this.$dayjs(endTime.diff(this.nowTime)).subtract(8, 'h').format('HH小时mm分ss秒')
  330. } else {
  331. const endTime = this.$dayjs(`${this.$dayjs().format('YYYY-MM-DD')} ${this.detail.start_time}`)
  332. return this.$dayjs(endTime.diff(this.nowTime)).subtract(8, 'h').format('HH小时mm分ss秒')
  333. }
  334. }
  335. },
  336. // watch: {
  337. // userId (e) {
  338. // if (!e) {
  339. // uni.navigateTo({
  340. // url: '/pagesSub/other/login'
  341. // })
  342. // }
  343. // }
  344. // },
  345. onLoad (options) {
  346. this.activityId = options.id
  347. this.recordId = options.record_id
  348. },
  349. onShow () {
  350. // if (!this.userId) {
  351. // uni.navigateTo({
  352. // url: '/pagesSub/other/login'
  353. // })
  354. // return
  355. // }
  356. this.getDetailData()
  357. this.reNowTime()
  358. },
  359. onHide () {
  360. clearTimeout(this.timer)
  361. },
  362. onError () {
  363. clearTimeout(this.timer)
  364. },
  365. onPullDownRefresh () {
  366. clearTimeout(this.timer)
  367. this.getDetailData()
  368. this.reNowTime()
  369. },
  370. onPageNotFound () {
  371. clearTimeout(this.timer)
  372. },
  373. onShareAppMessage (res) {
  374. const title = `${this.detail.activity_type === 1 ? '【免费吃】' : '【返利餐】'}${this.detail.title}`
  375. return {
  376. title: title,
  377. path: this.getShareUrl(),
  378. imageUrl: this.detail.imgs
  379. }
  380. },
  381. onShareTimeline (res) {
  382. const title = `${this.detail.activity_type === 1 ? '【免费吃】' : '【返利餐】'}${this.detail.title}`
  383. return {
  384. title: title,
  385. path: this.getShareUrl(),
  386. imageUrl: this.detail.imgs
  387. }
  388. },
  389. methods: {
  390. jumpToLogin () {
  391. uni.navigateTo({
  392. url: '/pagesSub/other/login'
  393. })
  394. },
  395. onDialogOpen () {
  396. uni.setClipboardData({
  397. data: this.detail.search_key ? this.detail.search_key : this.detail.shop_name
  398. })
  399. this.isDialog = false
  400. this.getDetailData()
  401. this.openOtherApplte()
  402. },
  403. onClickShare () {
  404. if (!this.userId) {
  405. this.jumpToLogin()
  406. return
  407. }
  408. uni.navigateTo({ url: '/pagesSub/commission/invite' })
  409. },
  410. getShareUrl () {
  411. let url = `/pagesSub/activity/activityDetail?id=${this.detail.id}`
  412. if (this.userInfo) {
  413. url += '&invite_id=' + this.userInfo.id
  414. }
  415. return url
  416. },
  417. reNowTime () {
  418. clearTimeout(this.timer)
  419. this.timer = setTimeout(() => {
  420. this.nowTime = this.$dayjs()
  421. this.reNowTime()
  422. }, 1000)
  423. },
  424. // 获取用户经纬度
  425. getLocation () {
  426. return new Promise((resolve, reject) => {
  427. uni.getLocation({
  428. type: 'gcj02',
  429. success: (res) => {
  430. this.$store.commit('changeLocation', { lat: res.latitude, lng: res.longitude })
  431. resolve(res)
  432. },
  433. fail: () => {
  434. resolve(false)
  435. }
  436. })
  437. })
  438. },
  439. // 获取活动详情
  440. async getDetailData () {
  441. const location = await this.getLocation()
  442. if (!location) { return }
  443. const params = {
  444. id: this.activityId,
  445. lng: location.longitude,
  446. lat: location.latitude
  447. }
  448. if (this.recordId) {
  449. params.record_id = this.recordId
  450. }
  451. const { code, data } = await getActivityDetail(params)
  452. if (code === 200) {
  453. this.detail = data
  454. this.nowTime = this.$dayjs()
  455. }
  456. uni.stopPullDownRefresh()
  457. },
  458. // 报名活动/取消报名
  459. async joinActivity (type) {
  460. const params = {
  461. type: type
  462. }
  463. if (type === 1) {
  464. params.id = this.detail.id
  465. if (this.$store.state.lat) {
  466. params.lat = this.$store.state.lat
  467. }
  468. if (this.$store.state.lng) {
  469. params.lng = this.$store.state.lng
  470. }
  471. if (this.$store.state.INVITE_ID) {
  472. params.invite_id = this.$store.state.INVITE_ID
  473. }
  474. } else {
  475. params.record_id = this.detail.user_activity_id
  476. }
  477. const { code, msg } = type === 1 ? await editJoinActivity(params) : await cancelJoinActivity(params)
  478. if (code === 200) {
  479. if (type === 1) {
  480. this.isDialog = true
  481. this.dlgTitle = '报名成功'
  482. this.getDetailData()
  483. // uni.navigateTo({
  484. // url: `/pagesSub/activity/signUpOutcome?endTime=${this.detail.end_time}&platType=${this.detail.plat_type}`
  485. // })
  486. } else {
  487. this.getDetailData()
  488. }
  489. } else {
  490. uni.showToast({
  491. title: msg,
  492. icon: 'none'
  493. })
  494. }
  495. },
  496. getFooterHeight (h) {
  497. this.footerHeight = h * 2
  498. },
  499. changeTab (index) {
  500. this.currentTab = index
  501. },
  502. openMap () {
  503. uni.openLocation({
  504. latitude: this.detail.shop_lat,
  505. longitude: this.detail.shop_lng
  506. })
  507. },
  508. // 我要报名
  509. join () {
  510. if (!this.isStart) {
  511. uni.showToast({
  512. title: '活动还未开始',
  513. icon: 'none'
  514. })
  515. return
  516. }
  517. if (!this.userId) {
  518. this.jumpToLogin()
  519. return
  520. }
  521. uni.requestSubscribeMessage({
  522. tmplIds: this.$store.state.joinTemplateIds,
  523. complete: () => {
  524. this.joinActivity(1)
  525. }
  526. })
  527. },
  528. // 取消报名
  529. cancelJoin () {
  530. uni.showModal({
  531. title: '提示',
  532. content: '确定取消报名',
  533. confirmColor: '#1677FF',
  534. cancelColor: '#1677FF',
  535. success: (res) => {
  536. if (res.confirm) {
  537. this.joinActivity(2)
  538. }
  539. }
  540. })
  541. },
  542. // 提交订单
  543. toSubmiteOrder () {
  544. if (!this.$store.state.userInfo.alipay_account) {
  545. uni.navigateTo({
  546. url: '/pagesSub/my/userDetail?toastType=1'
  547. })
  548. return
  549. }
  550. uni.navigateTo({
  551. url: `/pagesSub/order/submitOrder?activityId=${this.detail.id}&userActivityId=${this.detail.user_activity_id}`
  552. })
  553. },
  554. openOtherApplte () {
  555. uni.navigateToMiniProgram({
  556. appId: this.detail.app_info.appid,
  557. path: this.detail.app_info.path
  558. })
  559. },
  560. copyShopName () {
  561. this.isDialog = true
  562. this.dlgTitle = '复制成功'
  563. },
  564. copyWx () {
  565. uni.setClipboardData({
  566. data: this.detail.kf_wechat,
  567. success: () => {
  568. uni.showToast({
  569. icon: 'none',
  570. title: '已复制客服微信号,请添加客服反馈'
  571. })
  572. }
  573. })
  574. }
  575. },
  576. filters: {
  577. activityTyepFilter (e) {
  578. const typeList = {
  579. 1: '免费吃',
  580. 2: '返利餐'
  581. }
  582. return typeList[e] || ''
  583. },
  584. platFilter (e) {
  585. const platList = {
  586. 8: '饿了么',
  587. 9: '美团'
  588. }
  589. return platList[e] || ''
  590. }
  591. }
  592. }
  593. </script>
  594. <style lang="scss" scoped>
  595. .act-deltail-main {
  596. .fixed-copy {
  597. position: fixed;
  598. bottom: 0;
  599. right: 0;
  600. z-index: 99;
  601. padding-bottom: 16rpx;
  602. .copy-container {
  603. padding-right: 24rpx;
  604. align-items: center;
  605. display: flex;
  606. flex-direction: column;
  607. image {
  608. width: 122rpx;
  609. height: 122rpx;
  610. }
  611. .btn-copy {
  612. width: 72rpx;
  613. height: 72rpx;
  614. text-align: center;
  615. padding: 8rpx;
  616. background: #111111;
  617. box-shadow: 0px 1px 4px 0px rgba(17, 17, 17, 0.6);
  618. opacity: 0.8;
  619. color: #eaebec;
  620. font-weight: 400;
  621. border-radius: 36rpx;
  622. margin-top: 32rpx;
  623. }
  624. }
  625. }
  626. .over-view {
  627. .detail-img {
  628. width: 100%;
  629. height: 424px;
  630. font-size: 0;
  631. }
  632. .detail-over {
  633. padding: 24px 40px 28px;
  634. background-color: #fff;
  635. margin-top: 16rpx;
  636. .detail-banner {
  637. width: 100%;
  638. border-radius: 24rpx;
  639. box-shadow: 0px 4rpx 16px 0px rgba(0, 0, 0, 0.1);
  640. }
  641. }
  642. .detail-title {
  643. max-width: 670px;
  644. }
  645. .share-btn {
  646. margin: 0;
  647. padding-right: 0;
  648. background-color: #fff;
  649. &::after {
  650. border-color: transparent;
  651. }
  652. }
  653. }
  654. .act-able-time,
  655. .shop-info {
  656. padding: 32px 40px 28px;
  657. background-color: #fff;
  658. .shop-name {
  659. display: inline-block;
  660. margin: 16px 0;
  661. max-width: 510px;
  662. }
  663. .shop-address {
  664. display: inline-block;
  665. max-width: 396px;
  666. }
  667. .to-btn {
  668. display: flex;
  669. flex-direction: column;
  670. align-items: center;
  671. }
  672. .contact-btn {
  673. padding-right: 0;
  674. background-color: #fff;
  675. &::after {
  676. border-color: transparent;
  677. }
  678. }
  679. .icon-map-wh {
  680. width: 20px;
  681. height: 24px;
  682. }
  683. .icon-phone-wh,
  684. .icon-elm-wh,
  685. .icon-mt-wh {
  686. width: 56px;
  687. height: 56px;
  688. }
  689. .divider-right {
  690. width: 2px;
  691. height: 54px;
  692. background-color: $u-border-color;
  693. }
  694. }
  695. .act-desc {
  696. padding: 0 40px;
  697. background-color: #fff;
  698. }
  699. .bottom-footer {
  700. padding: 16px 40px 16px 28px;
  701. width: 100%;
  702. background-color: #fff;
  703. .sign-up-btn {
  704. padding: 24px 128px;
  705. width: 374px;
  706. height: 88px;
  707. border-radius: 44px;
  708. color: #fff;
  709. background-color: $u-type-primary;
  710. white-space: nowrap;
  711. }
  712. .sign-up-btn-disable {
  713. padding: 24px 128px;
  714. width: 374px;
  715. height: 88px;
  716. border-radius: 44px;
  717. white-space: nowrap;
  718. }
  719. .canel-btn,
  720. .submit-btn {
  721. padding: 16px 40px;
  722. width: 192px;
  723. height: 72px;
  724. border-radius: 36px;
  725. }
  726. .canel-btn {
  727. position: relative;
  728. color: $u-type-primary;
  729. background-color: #fff;
  730. &::after {
  731. content: '';
  732. display: flex;
  733. align-items: center;
  734. width: 200%;
  735. height: 200%;
  736. border: 2px solid $u-type-primary;
  737. border-radius: 72px;
  738. box-sizing: border-box;
  739. pointer-events: none;
  740. transform-origin: 0 0;
  741. }
  742. }
  743. .submit-btn {
  744. color: #fff;
  745. background-color: $u-type-primary;
  746. }
  747. .end-btn {
  748. width: 670px;
  749. height: 88px;
  750. border-radius: 44px;
  751. }
  752. }
  753. }
  754. button[disabled] {
  755. color: #fff !important;
  756. background-color: #d3d4d5 !important;
  757. }
  758. button[disabled]::after {
  759. border-color: transparent;
  760. }
  761. </style>
  762. <style >
  763. .act-tabs >>> .u-tab-item + .u-tab-item {
  764. margin-left: 42px;
  765. }
  766. </style>