index.vue 24 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019
  1. <template>
  2. <!-- 禁止滚动穿透 -->
  3. <page-meta :page-style="'overflow:'+(show?'hidden':'visible')"></page-meta>
  4. <view class="main">
  5. <view class="one">
  6. <swiper class="swiper" circular :indicator-dots="true" indicator-color="#F5F5F5"
  7. indicator-active-color="#ffffff" :autoplay="true" :interval="3000" :duration="1000">
  8. <swiper-item class="list" v-for="(item,index) in config.file" :key="index">
  9. <image class="image" :src="item.url" mode="">
  10. </image>
  11. </swiper-item>
  12. </swiper>
  13. </view>
  14. <view class="bottom">
  15. <view class="two">
  16. <view class="two_1">{{config.name||'暂无'}}</view>
  17. <view class="two_2">
  18. <view class="left">
  19. <view class="left_1">
  20. <text :class="[config.status=='0'?'text_1':'text_2']">{{config.zhStatus||'暂无'}}</text>
  21. <text class="time">{{config.open_time||'暂无'}}</text>
  22. </view>
  23. <view class="left_2">
  24. <text>有优待政策</text>
  25. <text>景区电话</text>
  26. <text>有免费停车</text>
  27. <text>院内交通</text>
  28. </view>
  29. </view>
  30. <view class="right" @tap="toBrief">简介<text class="iconfont icon-dayuhao"></text></view>
  31. </view>
  32. <view class="two_3">
  33. <view class="left">{{config.address||'暂无'}}</view>
  34. <view class="right" @tap="toMap">
  35. <text class="iconfont icon-ditu"></text>
  36. <text>地图</text>
  37. </view>
  38. </view>
  39. <view class="two_4" v-if="couponList.length>0" @tap="toCoupon">
  40. <view class="left">优惠卷</view>
  41. <view class="center">
  42. <view class="center_1" v-for="(item,index) in couponList" :key="index">
  43. <text
  44. v-if="item.discount_type=='min'&&item.discount_config.limit=='0'">立减{{item.discount_config.min}}</text>
  45. <text
  46. v-if="item.discount_type=='min'&&item.discount_config.limit!='0'">满{{item.discount_config.limit}}减{{item.discount_config.min}}</text>
  47. </view>
  48. </view>
  49. <view class="right">领卷<text class="iconfont icon-dayuhao"></text></view>
  50. </view>
  51. </view>
  52. <view class="thr">
  53. <view class="thr_1">门票</view>
  54. <view class="thr_2">
  55. <text class="text" @tap="toChoose('0')">今日出游</text>
  56. <text class="text" @tap="toChoose('1')">明日出游</text>
  57. <text class="text" @tap="toOpen">指定日期<text class="iconfont icon-dayuhao"></text></text>
  58. </view>
  59. <view class="thr_3">
  60. <scroll-view class="scroll-view_H" scroll-x="true">
  61. <text v-for="(item, index) in totalList" :key="index" @tap="toType(item)"
  62. :class="[is_type==item._id||is_person==item._id?'text_1':'text']">{{item.label}}</text>
  63. </scroll-view>
  64. <view @tap="toSelect">
  65. 筛选
  66. <uni-icons v-if="is_select" type="top"></uni-icons>
  67. <uni-icons v-else type="bottom"></uni-icons>
  68. </view>
  69. </view>
  70. <view class="thr_4">
  71. <scroll-view scroll-y="true" class="scroll-view" @scrolltolower="toPage" @scroll="toScroll">
  72. <view class="list-scroll-view">
  73. <view class="list" v-for="(item, index) in list" :key="index" @tap="toInfo(item)">
  74. <view class="left">
  75. <view class="name textOne">{{item.name||'暂无'}}</view>
  76. <view class="type textOne">#{{item.zhType||'暂无'}}</view>
  77. <view class="other textOne">
  78. 已售 {{item.buy_num||0}} | 购买须知
  79. <text class="iconfont icon-dayuhao"></text>
  80. </view>
  81. </view>
  82. <view class="right">
  83. <view class="money">
  84. <text>¥{{item.original_price||'暂无'}}</text>
  85. <text>¥{{item.money||'暂无'}}起</text>
  86. </view>
  87. <view class="button">
  88. <button @tap.stop="toBuy(item)">预订</button>
  89. </view>
  90. </view>
  91. </view>
  92. </view>
  93. <view class="is_bottom" v-if="is_bottom">
  94. <text>{{config.bottom_title||'到底了!'}}</text>
  95. </view>
  96. </scroll-view>
  97. </view>
  98. </view>
  99. </view>
  100. <!-- 日历选择 -->
  101. <uni-calendar ref="calendar" :clear-date="true" :insert="false" :lunar="true" :range="false"
  102. @confirm="toConfirm" />
  103. <!-- 筛选门票类型 -->
  104. <uni-popup ref="popup" type="top" background-color="#fff" @maskClick="toClose" @change="change">
  105. <view class="popup">
  106. <view class="one">
  107. <view class="name">出游人群</view>
  108. <view class="cotent">
  109. <view class="list" v-for="(item, index) in personList" :key="index" @tap="toScreen(item,'0')">
  110. <text :class="[is_person==item._id?'text_1':'text']">{{item.label}}</text>
  111. </view>
  112. </view>
  113. </view>
  114. <view class="one">
  115. <view class="name">服务特色</view>
  116. <view class="cotent">
  117. <view class="list" v-for="(item, index) in typeList" :key="index" @tap="toScreen(item,'1')">
  118. <text :class="[is_type==item._id?'text_1':'text']">{{item.label}}</text>
  119. </view>
  120. </view>
  121. </view>
  122. <view class="button">
  123. <button class="button_1" type="default" @tap.stop="toReset">重置</button>
  124. <button class="button_2" type="default" @tap.stop="toSubmit">确定</button>
  125. </view>
  126. </view>
  127. </uni-popup>
  128. <!-- 领取优惠卷 -->
  129. <uni-popup ref="coupon" background-color="#fff" type="bottom" :is-mask-click="false" @change="change">
  130. <view class="coupon">
  131. <view class="close">
  132. <text>抵用券</text>
  133. <text @click="toCouponClose" class="iconfont icon-shanchu"></text>
  134. </view>
  135. <view class="info_1">
  136. <scroll-view scroll-y="true" class="scroll-view">
  137. <view class="list-scroll-view">
  138. <view class="list" v-for="(item, index) in discountList" :key="index">
  139. <view class="list_1">
  140. <view class="left">
  141. <view class="left_1">
  142. ¥<text>{{item.discount_config.min}}</text>
  143. </view>
  144. <view class="left_2">
  145. <text v-if="item.discount_config.limit=='0'">无门槛</text>
  146. <text
  147. v-else>满{{item.discount_config.limit}}减{{item.discount_config.min}}</text>
  148. </view>
  149. </view>
  150. <view class="center">
  151. <view class="name textOver">{{item.name}}</view>
  152. <view class="content">有效日期:({{item.expire_type_label}}) {{item.expire_time}}
  153. </view>
  154. </view>
  155. <view class="right">
  156. <button v-if="item.is_receive==false" class="button" type="primary"
  157. @tap="toReceive(item)">立即领取</button>
  158. <button v-else class="button_1" type="primary" @tap="toUser(item)">去使用</button>
  159. </view>
  160. </view>
  161. <view class="list_2">
  162. <uni-collapse>
  163. <uni-collapse-item title="使用规则补充说明" :open="false">
  164. <view class="content">{{item.brief}}</view>
  165. </uni-collapse-item>
  166. </uni-collapse>
  167. </view>
  168. </view>
  169. </view>
  170. </scroll-view>
  171. </view>
  172. </view>
  173. </uni-popup>
  174. </view>
  175. </template>
  176. <script>
  177. import moment from 'moment';
  178. export default {
  179. data() {
  180. return {
  181. type: '',
  182. searchInfo: {},
  183. config: {},
  184. user: {},
  185. list: [],
  186. total: 0,
  187. skip: 0,
  188. limit: 10,
  189. page: 0,
  190. // 数据是否触底
  191. is_bottom: false,
  192. scrollTop: 0,
  193. // 优惠卷
  194. couponList: [],
  195. // 优惠券全部
  196. discountList: [],
  197. // 字典表
  198. statusList: [],
  199. personList: [],
  200. typeList: [],
  201. totalList: [],
  202. // 是否筛选
  203. is_select: false,
  204. is_person: '',
  205. is_type: '',
  206. // 禁止滚动穿透
  207. show: false
  208. }
  209. },
  210. onLoad: async function(e) {
  211. const that = this;
  212. that.$set(that, `type`, e && e.type || '');
  213. uni.setNavigationBarTitle({
  214. title: e && e.title || '分类'
  215. });
  216. },
  217. onShow: async function(e) {
  218. const that = this;
  219. await that.searchToken();
  220. await that.searchOther();
  221. await that.searchConfig();
  222. await that.clearPage();
  223. await that.search();
  224. },
  225. methods: {
  226. // 禁止滚动穿透
  227. change(e) {
  228. const that = this;
  229. that.show = e.show
  230. },
  231. searchToken() {
  232. const that = this;
  233. try {
  234. const res = uni.getStorageSync('token');
  235. if (res) that.$set(that, `user`, res);
  236. } catch (e) {
  237. uni.showToast({
  238. title: err.errmsg,
  239. icon: 'error',
  240. duration: 2000
  241. });
  242. }
  243. },
  244. searchConfig() {
  245. const that = this;
  246. try {
  247. const res = uni.getStorageSync('config');
  248. if (res) {
  249. const status = that.statusList.find(i => i.value == res.status)
  250. if (status) res.zhStatus = status.label
  251. that.$set(that, `config`, res);
  252. }
  253. } catch (e) {
  254. uni.showToast({
  255. title: err.errmsg,
  256. icon: 'error',
  257. duration: 2000
  258. });
  259. }
  260. },
  261. // 查询
  262. async search() {
  263. const that = this;
  264. let info = {
  265. skip: that.skip,
  266. limit: that.limit,
  267. is_use: '0',
  268. status: '1'
  269. }
  270. const res = await that.$api(`/ticket/queryDate`, 'GET', {
  271. ...info,
  272. ...that.searchInfo
  273. })
  274. if (res.errcode == '0') {
  275. let list = [...that.list, ...res.data];
  276. for (let val of list) {
  277. const type = that.typeList.find(i => i.value == val.type)
  278. if (type) val.zhType = type.label
  279. }
  280. that.$set(that, `list`, list)
  281. that.$set(that, `total`, res.total)
  282. } else {
  283. uni.showToast({
  284. title: res.errmsg,
  285. });
  286. }
  287. },
  288. // 输入框
  289. toInput(e) {
  290. const that = this;
  291. if (that.searchInfo.name) that.$set(that.searchInfo, `name`, e.detail.value)
  292. else that.$set(that, `searchInfo`, {})
  293. that.clearPage();
  294. that.search();
  295. },
  296. // 简介
  297. toBrief() {
  298. uni.navigateTo({
  299. url: `/pagesHome/info/index`
  300. })
  301. },
  302. // 地图
  303. toMap() {
  304. uni.reLaunch({
  305. url: `/pages/map/index`
  306. })
  307. },
  308. // 领卷
  309. async toCoupon() {
  310. const that = this;
  311. // 优惠券
  312. const res = await that.$api(`/coupon/specialQuery`, 'GET', {
  313. is_use: '0',
  314. user: that.user._id,
  315. type: '1'
  316. })
  317. if (res.errcode == '0') that.$set(that, `discountList`, res.data);
  318. that.$refs.coupon.open()
  319. },
  320. // 领取优惠券
  321. async toReceive(item) {
  322. const that = this;
  323. if (that.user._id) {
  324. const form = {
  325. user: that.user._id,
  326. type: item.type,
  327. coupon: item._id,
  328. is_use: '0'
  329. }
  330. if (item.expire_type == 'fixed') form.time = item.expire_time
  331. else {
  332. form.time = `${moment().format('YYYY-MM-DD HH:mm:ss')} 至 ${moment()
  333. .add(item.days, 'days')
  334. .format('YYYY-MM-DD HH:mm:ss')}`;
  335. }
  336. const res = await that.$api(`/userCoupon`, 'POST', form);
  337. if (res.errcode == '0') {
  338. uni.showToast({
  339. title: '领取成功',
  340. icon: 'none'
  341. })
  342. that.toCoupon()
  343. } else {
  344. uni.showToast({
  345. title: res.errmsg,
  346. icon: 'none'
  347. })
  348. }
  349. } else {
  350. uni.navigateTo({
  351. url: `/pagesIndex/login/index`
  352. })
  353. }
  354. },
  355. // 去使用
  356. toUser(item) {
  357. uni.navigateTo({
  358. url: `/pagesMy/coupon/index`
  359. })
  360. },
  361. // 关闭弹框
  362. toCouponClose() {
  363. const that = this;
  364. that.$refs.coupon.close();
  365. },
  366. // 打开日历
  367. toOpen() {
  368. const that = this;
  369. that.$refs.calendar.open()
  370. },
  371. // 选择的日期
  372. toConfirm(e) {
  373. const that = this;
  374. that.$set(that.searchInfo, `date`, e.fulldate)
  375. that.clearPage();
  376. that.search();
  377. },
  378. // 选择当天还是明天
  379. toChoose(type) {
  380. const that = this;
  381. if (type == '0') that.$set(that.searchInfo, `date`, moment().format('YYYY-MM-DD'))
  382. else that.$set(that.searchInfo, `date`, moment(new Date()).add(1, 'days').format("YYYY-MM-DD"))
  383. that.clearPage();
  384. that.search();
  385. },
  386. // 选择类型
  387. toType(item) {
  388. const that = this;
  389. if (item.type == 'ticket_person') {
  390. if (item._id == that.is_person) {
  391. that.$set(that, `is_person`, '')
  392. delete that.searchInfo.person
  393. } else {
  394. that.$set(that, `is_person`, item._id)
  395. that.$set(that.searchInfo, `person`, item.value)
  396. }
  397. } else {
  398. if (item._id == that.is_type) {
  399. that.$set(that, `is_type`, '')
  400. delete that.searchInfo.type
  401. } else {
  402. that.$set(that, `is_type`, item._id)
  403. that.$set(that.searchInfo, `type`, item.value)
  404. }
  405. }
  406. that.clearPage();
  407. that.search();
  408. },
  409. // 筛选打开弹窗
  410. toSelect() {
  411. const that = this;
  412. that.$set(that, `is_select`, true)
  413. that.$refs.popup.open()
  414. },
  415. // 关闭弹窗
  416. toClose() {
  417. const that = this;
  418. that.$set(that, `is_select`, false)
  419. that.$refs.popup.close()
  420. },
  421. // 筛选
  422. toScreen(item, type) {
  423. const that = this;
  424. if (type == '0') that.$set(that, `is_person`, item._id)
  425. else that.$set(that, `is_type`, item._id)
  426. },
  427. // 重置
  428. toReset() {
  429. const that = this;
  430. that.$set(that, `is_person`, '')
  431. that.$set(that, `is_type`, '')
  432. delete that.searchInfo.person
  433. delete that.searchInfo.type
  434. },
  435. // 确定
  436. toSubmit() {
  437. const that = this;
  438. const person = that.personList.find(i => i._id == that.is_person)
  439. if (person) that.$set(that.searchInfo, `person`, person.value)
  440. const type = that.typeList.find(i => i._id == that.is_type)
  441. if (type) that.$set(that.searchInfo, `type`, type.value)
  442. that.clearPage();
  443. that.search();
  444. that.toClose();
  445. },
  446. // 详情
  447. toInfo(e) {
  448. uni.navigateTo({
  449. url: `/pagesHome/ticket/info?id=${e.id||e._id}`
  450. })
  451. },
  452. // 预订
  453. toBuy(item) {
  454. const that = this;
  455. if (that.user && that.user._id) {
  456. uni.navigateTo({
  457. url: `/pagesIndex/order/order?id=${item.id||item._id}`
  458. })
  459. } else {
  460. uni.navigateTo({
  461. url: `/pagesIndex/login/index`
  462. })
  463. }
  464. },
  465. // 查询其他信息
  466. async searchOther() {
  467. const that = this;
  468. let res;
  469. // 查询状态
  470. res = await that.$api(`/dictData`, 'GET', {
  471. type: 'config_status',
  472. is_use: '0',
  473. })
  474. if (res.errcode == '0') that.$set(that, `statusList`, res.data);
  475. // 出游人群
  476. res = await that.$api(`/dictData`, 'GET', {
  477. type: 'ticket_person',
  478. is_use: '0',
  479. })
  480. if (res.errcode == '0') that.$set(that, `personList`, res.data);
  481. // 服务特色
  482. res = await that.$api(`/dictData`, 'GET', {
  483. type: 'ticket_type',
  484. is_use: '0',
  485. })
  486. if (res.errcode == '0') that.$set(that, `typeList`, res.data);
  487. that.$set(that, `totalList`, [...that.personList, ...that.typeList]);
  488. // 优惠券
  489. res = await that.$api(`/coupon/specialQuery`, 'GET', {
  490. is_use: '0',
  491. discount_type: 'min',
  492. user: that.user._id,
  493. type: '1'
  494. })
  495. if (res.errcode == '0') that.$set(that, `couponList`, res.data.slice(0, 3));
  496. },
  497. // 分页
  498. toPage(e) {
  499. const that = this;
  500. let list = that.list;
  501. let limit = that.limit;
  502. if (that.total > list.length) {
  503. uni.showLoading({
  504. title: '加载中',
  505. mask: true
  506. })
  507. let page = that.page + 1;
  508. that.$set(that, `page`, page)
  509. let skip = page * limit;
  510. that.$set(that, `skip`, skip)
  511. that.searchComment();
  512. uni.hideLoading();
  513. } else that.$set(that, `is_bottom`, true)
  514. },
  515. // 触底
  516. toScroll(e) {
  517. const that = this;
  518. let up = that.scrollTop;
  519. that.$set(that, `scrollTop`, e.detail.scrollTop);
  520. let num = Math.sign(up - e.detail.scrollTop);
  521. if (num == 1) that.$set(that, `is_bottom`, false);
  522. },
  523. // 清空列表
  524. clearPage() {
  525. const that = this;
  526. that.$set(that, `list`, [])
  527. that.$set(that, `skip`, 0)
  528. that.$set(that, `limit`, 10)
  529. that.$set(that, `page`, 0)
  530. },
  531. }
  532. }
  533. </script>
  534. <style lang="scss" scoped>
  535. .main {
  536. display: flex;
  537. flex-direction: column;
  538. width: 100vw;
  539. height: 100vh;
  540. .one {
  541. padding: 0 0 2vw 0;
  542. .swiper {
  543. height: 60vw;
  544. .list {
  545. .image {
  546. width: 100%;
  547. height: 100%;
  548. }
  549. }
  550. }
  551. }
  552. .bottom {
  553. position: absolute;
  554. top: 55vw;
  555. left: 0;
  556. right: 0;
  557. background-color: var(--f9Color);
  558. border-radius: 20px;
  559. padding: 2vw;
  560. .two {
  561. .two_1 {
  562. padding: 2vw;
  563. font-size: var(--font18Size);
  564. font-weight: bold;
  565. }
  566. .two_2 {
  567. display: flex;
  568. justify-content: space-between;
  569. align-items: center;
  570. padding: 1vw 2vw;
  571. .left {
  572. .left_1 {
  573. font-size: var(--font12Size);
  574. .time {
  575. font-weight: 500;
  576. margin: 0 1vw;
  577. }
  578. .text_1 {
  579. padding: 1px;
  580. color: var(--mainColor);
  581. background-color: mediumseagreen;
  582. }
  583. .text_2 {
  584. padding: 1px;
  585. color: var(--mainColor);
  586. background-color: red;
  587. }
  588. }
  589. .left_2 {
  590. font-size: var(--font12Size);
  591. margin: 2vw 0;
  592. text {
  593. margin: 0 2px 0 0;
  594. padding: 2px 3px;
  595. border: 1px solid var(--f3CColor);
  596. color: var(--f3CColor);
  597. border-radius: 5px;
  598. }
  599. }
  600. }
  601. .right {
  602. display: flex;
  603. align-items: center;
  604. font-size: var(--font14Size);
  605. color: var(--f85Color);
  606. }
  607. }
  608. .two_3 {
  609. display: flex;
  610. justify-content: space-between;
  611. align-items: center;
  612. font-size: var(--font13Size);
  613. padding: 0 2vw;
  614. .right {
  615. display: flex;
  616. flex-direction: column;
  617. align-items: center;
  618. font-size: var(--font12Size);
  619. padding: 0 2vw 0 0;
  620. .iconfont {
  621. font-size: 20px;
  622. }
  623. }
  624. }
  625. .two_4 {
  626. display: flex;
  627. justify-content: space-between;
  628. align-items: center;
  629. padding: 3vw 2vw;
  630. font-size: var(--font14Size);
  631. background-color: var(--mainColor);
  632. border-radius: 10px;
  633. margin: 2vw 0;
  634. .center {
  635. display: flex;
  636. align-items: center;
  637. width: 65vw;
  638. .center_1 {
  639. text {
  640. margin: 0 1vw 0 0;
  641. padding: 2px;
  642. font-size: var(--font12Size);
  643. color: var(--mainColor);
  644. border-radius: 5px;
  645. background: linear-gradient(to right, #FFA500, #FF0000);
  646. }
  647. }
  648. }
  649. .right {
  650. display: flex;
  651. align-items: center;
  652. font-size: var(--font14Size);
  653. color: var(--fF0Color);
  654. }
  655. }
  656. }
  657. .thr {
  658. .thr_1 {
  659. padding: 2vw 1vw;
  660. font-size: var(--font16Size);
  661. font-weight: bold;
  662. }
  663. .thr_2 {
  664. padding: 1vw 0;
  665. .text {
  666. margin: 0 5px 0 0;
  667. padding: 1vw;
  668. border-radius: 5px;
  669. font-size: var(--font12Size);
  670. color: var(--f69Color);
  671. background-color: var(--mainColor);
  672. .iconfont {
  673. font-size: 14px;
  674. }
  675. }
  676. }
  677. .thr_3 {
  678. display: flex;
  679. justify-content: space-between;
  680. padding: 1vw 0;
  681. font-size: var(--font15Size);
  682. margin: 1vw 0 0 0;
  683. .scroll-view_H {
  684. white-space: nowrap;
  685. width: 80vw;
  686. height: 5vh;
  687. .text {
  688. margin: 0 5px 0 0;
  689. padding: 1vw 2vw;
  690. border-radius: 5px;
  691. font-size: var(--font12Size);
  692. color: var(--f69Color);
  693. background-color: var(--mainColor);
  694. .iconfont {
  695. font-size: 14px;
  696. }
  697. }
  698. .text_1 {
  699. margin: 0 5px 0 0;
  700. padding: 1vw 2vw;
  701. border-radius: 5px;
  702. font-size: var(--font12Size);
  703. color: var(--mainColor);
  704. background-color: var(--f3CColor);
  705. .iconfont {
  706. font-size: 14px;
  707. }
  708. }
  709. }
  710. }
  711. .thr_4 {
  712. position: relative;
  713. height: 82vh;
  714. .list {
  715. display: flex;
  716. justify-content: space-between;
  717. background-color: var(--mainColor);
  718. border: 1px solid var(--f5Color);
  719. padding: 2vw;
  720. margin: 2vw 2vw 0 2vw;
  721. border-radius: 10px;
  722. .left {
  723. padding: 2vw 0;
  724. width: 55vw;
  725. .name {
  726. padding: 2vw 0;
  727. font-size: var(--font16Size);
  728. font-weight: bold;
  729. }
  730. .type {
  731. padding: 0 0 1vw 0;
  732. color: var(--f3CColor);
  733. font-size: var(--font12Size);
  734. }
  735. .other {
  736. color: var(--f69Color);
  737. font-size: var(--font12Size);
  738. .iconfont {
  739. font-size: 14px;
  740. }
  741. }
  742. }
  743. .right {
  744. width: 28vw;
  745. display: flex;
  746. flex-direction: column;
  747. justify-content: space-between;
  748. padding: 2vw 0;
  749. .money {
  750. text-align: right;
  751. color: var(--fF0Color);
  752. font-size: var(--font16Size);
  753. font-weight: bold;
  754. text:first-child {
  755. text-decoration: line-through;
  756. color: var(--f69Color);
  757. font-size: var(--font12Size);
  758. font-weight: 400;
  759. }
  760. }
  761. .button {
  762. button {
  763. font-size: var(--font14Size);
  764. border-radius: 40px;
  765. color: var(--mainColor);
  766. background: linear-gradient(to right, #00BFFF, #007AFF);
  767. }
  768. }
  769. }
  770. }
  771. }
  772. }
  773. }
  774. }
  775. .popup {
  776. padding: 2vw;
  777. .one {
  778. padding: 2vw;
  779. .name {
  780. padding: 2vw 0;
  781. font-size: var(--font16Size);
  782. font-weight: bold;
  783. }
  784. .cotent {
  785. display: flex;
  786. flex-wrap: wrap;
  787. margin: 5vw 0;
  788. .list {
  789. margin: 0 0 5vw 0;
  790. .text {
  791. margin: 0 5px 0 0;
  792. padding: 2vw 7vw;
  793. border-radius: 5px;
  794. font-size: var(--font14Size);
  795. color: var(--f69Color);
  796. background-color: var(--f9Color);
  797. }
  798. .text_1 {
  799. margin: 0 5px 0 0;
  800. padding: 2vw 7vw;
  801. border-radius: 5px;
  802. font-size: var(--font14Size);
  803. color: var(--mainColor);
  804. background-color: var(--f3CColor);
  805. }
  806. }
  807. }
  808. }
  809. .button {
  810. display: flex;
  811. padding: 2vw;
  812. button {
  813. width: 30vw;
  814. font-size: var(--font16Size);
  815. border-radius: 40px;
  816. }
  817. button:last-child {
  818. color: var(--mainColor);
  819. background: linear-gradient(to right, #00BFFF, #007AFF);
  820. }
  821. }
  822. }
  823. .uni-popup {
  824. z-index: 9999 !important;
  825. }
  826. .coupon {
  827. display: flex;
  828. flex-direction: column;
  829. width: 100vw;
  830. height: 60vh;
  831. background-color: var(--f9Color);
  832. .close {
  833. display: flex;
  834. justify-content: space-between;
  835. padding: 2vw;
  836. text:first-child {
  837. font-size: var(--font16Size);
  838. font-weight: bold;
  839. }
  840. }
  841. .info_1 {
  842. position: relative;
  843. display: flex;
  844. flex-direction: column;
  845. height: 54vh;
  846. padding: 2vw;
  847. .list {
  848. background-color: var(--mainColor);
  849. border: 1px solid var(--f5Color);
  850. padding: 2vw;
  851. margin: 2vw 2vw 0 2vw;
  852. border-radius: 5px;
  853. .list_1 {
  854. display: flex;
  855. justify-content: space-between;
  856. align-items: center;
  857. .left {
  858. width: 20vw;
  859. display: flex;
  860. flex-direction: column;
  861. justify-content: center;
  862. align-items: center;
  863. padding: 3vw;
  864. color: var(--fF0Color);
  865. font-size: var(--font14Size);
  866. .left_1 {
  867. text {
  868. font-weight: bold;
  869. font-size: 25px;
  870. }
  871. }
  872. .left_2 {
  873. font-size: var(--font12Size);
  874. }
  875. }
  876. .center {
  877. width: 40vw;
  878. .name {
  879. font-size: var(--font14Size);
  880. font-weight: bold;
  881. margin: 0 0 1vw 0;
  882. }
  883. .content {
  884. color: var(--f85Color);
  885. font-size: var(--font12Size);
  886. }
  887. }
  888. .right {
  889. .button {
  890. font-size: 12px;
  891. border-radius: 20px;
  892. background: linear-gradient(to right, #0000CD, #007aff);
  893. }
  894. .button_1 {
  895. font-size: 12px;
  896. border-radius: 20px;
  897. border: 1px solid var(--fF0Color);
  898. color: var(--fF0Color);
  899. background: var(--mainColor);
  900. }
  901. }
  902. }
  903. .list_2 {
  904. font-size: var(--font12Size);
  905. /deep/.uni-collapse-item__title-box {
  906. padding: 0 !important;
  907. font-size: 12px !important;
  908. }
  909. /deep/.uni-collapse-item__title-text {
  910. font-size: 12px !important;
  911. }
  912. .content {
  913. padding: 2vw;
  914. }
  915. }
  916. }
  917. }
  918. }
  919. .scroll-view {
  920. position: absolute;
  921. top: 0;
  922. left: 0;
  923. right: 0;
  924. bottom: 0;
  925. .list-scroll-view {
  926. display: flex;
  927. flex-direction: column;
  928. }
  929. }
  930. .is_bottom {
  931. width: 100%;
  932. text-align: center;
  933. text {
  934. padding: 2vw 0;
  935. display: inline-block;
  936. color: var(--f85Color);
  937. font-size: var(--font14Size);
  938. }
  939. }
  940. </style>