serviceDetail.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. <template>
  2. <view class="service-detail-page">
  3. <view class="order-main-top">
  4. <view class="order-main-left">
  5. <view class="order-detail-status">
  6. {{ orderBook.status == 3 || orderBook.status == 4 ? '订单已完成' : orderBook.status == 6 ? '订单已取消' : '订单服务中' }}
  7. </view>
  8. <view class="order-detail-des" v-if="orderBook.status == 2 && bookCount >= 1">您剩余{{ bookCount }}次保洁次卡可预约</view>
  9. </view>
  10. <view class="order-main-right">
  11. <view class="service-times">
  12. <text class="current-times">{{ orderBook.servicedTimes }}</text>
  13. /{{ orderBook.serviceTimes }}
  14. </view>
  15. </view>
  16. </view>
  17. <!-- 订单详情信息 -->
  18. <view class="service-info">
  19. <view class="info-title">{{ orderBook.goodsName }} 鲸致生活</view>
  20. <view class="info-content">
  21. <image mode="aspectFill" class="product-img" :src="goods.picUrl"></image>
  22. <view class="info-detail">
  23. <view>规格:1</view>
  24. <view>服务次数:{{ orderBook.serviceTimes }}</view>
  25. <view>未预约次数:{{ noAppoint }}</view>
  26. <view>单价:¥ {{ product.price }} 元</view>
  27. </view>
  28. </view>
  29. </view>
  30. <!-- 次卡列表 -->
  31. <!-- <van-tabs active="{{ activeTab }}" color="#09afff" bind:change="onTabChange">
  32. <van-tab title="未使用" name="1"></van-tab>
  33. <van-tab title="已使用" name="2"></van-tab>
  34. </van-tabs> -->
  35. <view class="appoint-tabs-wrapper">
  36. <view :class="'appoint-tab-item ' + (activeTab == 1 ? 'active' : '')" data-tab="1" @tap="onTabChange">未使用</view>
  37. <view :class="'appoint-tab-item ' + (activeTab == 2 ? 'active' : '')" data-tab="2" @tap="onTabChange">已使用</view>
  38. </view>
  39. <view class="service-list">
  40. <view class="service-item" v-for="(item, index) in serList" :key="index">
  41. <view class="service-item-top">
  42. <view class="item-left">
  43. <image mode="aspectFit" class="ci-img" src="/static/images/icon-ci.png"></image>
  44. <text>服务次卡</text>
  45. </view>
  46. <!-- <view class="service-item-status">{{activeTab=='2'?'服务已完成':(item.status===0?"未预约":(item.status===7?"匹配中":'待履约'))}}</view> -->
  47. <view class="service-item-status">{{ activeTab == '2' ? '服务已完成' : item.status == 0 ? '未预约' : '待履约' }}</view>
  48. </view>
  49. <view class="service-item-bottom">
  50. <view class="service-time">
  51. <text>预约时间:</text>
  52. <text>{{ item.bookTime }}</text>
  53. </view>
  54. <!-- <view class="service-time">
  55. <text>服务者:</text>
  56. <text>{{item.servantName}}</text>
  57. </view> -->
  58. <!-- 0-未预约,1-已预约,2-服务中,3-服务已提供,4-服务已完成,5-取消 未付款,6-退款 orderChannel==25 -->
  59. <view
  60. class="go-appoint"
  61. v-if="item.status === 0 && activeTab == '1' && aftersaleStatus != 1 && aftersaleStatus != 2"
  62. @tap="showAppoint"
  63. :data-id="item.id"
  64. :data-status="item.status"
  65. >
  66. 预约
  67. </view>
  68. <view
  69. class="go-appoint"
  70. v-if="(item.status == 1 || item.status == 7) && activeTab == '1'"
  71. @tap="showAppoint"
  72. :data-id="item.id"
  73. :data-status="item.status"
  74. :data-time="item.bookTime"
  75. >
  76. 修改预约
  77. </view>
  78. <view class="go-appoint" v-if="item.checkAcceptState == 1" @tap="goReVisit" :data-id="item.id">去验收</view>
  79. </view>
  80. </view>
  81. </view>
  82. <view class="no-list" v-if="serList.length == 0">没有更多了</view>
  83. <!-- custom-style="height: 80%" -->
  84. <view class="appoint-overlay-wrapper" v-if="choosePopup" @tap="onClose"></view>
  85. <!-- <van-popup show="{{ choosePopup }}" round position="bottom" bind:click-overlay="onClose"> -->
  86. <view class="popup-wrapper popup-wrapper-special" v-if="choosePopup">
  87. <!-- 标题 -->
  88. <view class="popup-title popup-title-special">选择服务者上门时段</view>
  89. <block>
  90. <view class="popup-content popup-content-special">
  91. <view class="time-select-left">
  92. <view
  93. class="time-select-left-item"
  94. @tap="dateCheck"
  95. :data-index="index"
  96. :data-week="item.week"
  97. :data-date="item.date"
  98. :data-isbook="item.isBook"
  99. v-for="(item, index) in dateList"
  100. :key="index"
  101. >
  102. <view>
  103. <!-- <view hidden="{{index>1}}" class="date-tag">{{index==0?'明天':'后天'}}</view>
  104. <text wx:if="{{index<=1||(index<=7&&(item.week=='周六'||item.week=='周日'))}}" class="full-time">约满</text> -->
  105. <text v-if="item.name" class="date-tag">{{ item.name }}</text>
  106. <text v-if="item.mark" class="full-time">{{ item.mark }}</text>
  107. </view>
  108. <view :class="dateIndex == index ? 'current-date' : ''">{{ item.date + ' ' + item.week }}</view>
  109. </view>
  110. </view>
  111. <view class="time-select-right">
  112. <view class="time-select-right-item" @tap="timeCheck" :data-stock="item.stock" :data-index="index" v-for="(item, index) in timeList" :key="index">
  113. <view :class="item.stock <= 0 ? 'zero-stock' : ''">
  114. <text :class="timeIndex === index ? 'current-date' : ''">{{ item.time }}</text>
  115. <!-- <text class="stock-text">(库存:{{item.stock}})</text> -->
  116. </view>
  117. <view v-if="timeIndex == index" class="date-tag">已选</view>
  118. </view>
  119. </view>
  120. </view>
  121. </block>
  122. <!-- 确认按钮 -->
  123. <view class="popup-btn-wrapper">
  124. <view @tap="confirmTime" class="confirm-btn">确定</view>
  125. </view>
  126. </view>
  127. <!-- </van-popup> -->
  128. </view>
  129. </template>
  130. <script>
  131. var util = require('../../../utils/util.js');
  132. var api = require('../../../config/api.js');
  133. var check = require('../../../utils/check.js');
  134. var app = getApp();
  135. export default {
  136. data() {
  137. return {
  138. noAppoint: '',
  139. aftersaleStatus: '',
  140. orderId: '',
  141. serviceId: '',
  142. bookCount: 0,
  143. orderStatusText: '订单服务中',
  144. activeTab: 1,
  145. orderBook: {
  146. status: '',
  147. servicedTimes: '',
  148. goodsName: '',
  149. serviceTimes: ''
  150. },
  151. orderChannel: 0,
  152. jzOrderBookDetails: [],
  153. unusedSerList: [],
  154. usedSerList: [],
  155. serList: [],
  156. choosePopup: false,
  157. // timeList: check.getTimeList(1),
  158. timeList: [],
  159. dateList: util.getDateList(new Date(new Date().getTime() + 3600000 * 24 * 0), 1, 30),
  160. timeIndex: '',
  161. //选中的时间段
  162. dateIndex: 0,
  163. //选中的日期
  164. product: {
  165. price: ''
  166. },
  167. goods: {
  168. picUrl: ''
  169. }
  170. };
  171. }
  172. /**
  173. * 生命周期函数--监听页面加载
  174. */,
  175. onLoad: function (options) {
  176. this.setData({
  177. orderId: options.orderId
  178. });
  179. // this.getServiceDetail();
  180. },
  181. onShow: function (options) {
  182. if (this.orderId) {
  183. this.getServiceDetail();
  184. }
  185. },
  186. /**
  187. * 生命周期函数--监听页面初次渲染完成
  188. */
  189. onReady: function () {},
  190. /**
  191. * 生命周期函数--监听页面显示
  192. */
  193. onHide: function () {},
  194. /**
  195. * 生命周期函数--监听页面卸载
  196. */
  197. onUnload: function () {},
  198. /**
  199. * 页面相关事件处理函数--监听用户下拉动作
  200. */
  201. onPullDownRefresh: function () {},
  202. /**
  203. * 页面上拉触底事件的处理函数
  204. */
  205. onReachBottom: function () {},
  206. /**
  207. * 用户点击右上角分享
  208. */
  209. onShareAppMessage: function () {},
  210. methods: {
  211. /**
  212. * 生命周期函数--监听页面隐藏
  213. */
  214. getServiceDetail: function () {
  215. // wx.showLoading({
  216. // title: '加载中',
  217. // });
  218. // setTimeout(function() {
  219. // wx.hideLoading();
  220. // }, 2000);
  221. util.request(api.ServiceDetail, {
  222. order_id: this.orderId
  223. // order_id: '1342922'
  224. }).then((res) => {
  225. // wx.hideLoading();
  226. if (res.errno === 0) {
  227. let jzOrderBookDetails = res.data.jzOrderBookDetails;
  228. let unusedSerList = jzOrderBookDetails.filter((item) => {
  229. return item.status === 0 || item.status == 1 || item.status == 7;
  230. });
  231. let usedSerList = jzOrderBookDetails.filter((item) => {
  232. return item.status == 3 || item.status == 4;
  233. });
  234. // let timeList = check.getTimeList(res.data.goods.serviceDuration);
  235. this.setData({
  236. aftersaleStatus: res.data.order ? res.data.order.aftersaleStatus : '',
  237. noAppoint: res.data.noAppoint,
  238. goods: res.data.goods,
  239. orderBook: res.data.orderBook,
  240. jzOrderBookDetails: jzOrderBookDetails,
  241. // activeTab: 1,
  242. unusedSerList: unusedSerList,
  243. usedSerList: usedSerList,
  244. serList: this.activeTab == 1 ? unusedSerList : usedSerList,
  245. // timeList: timeList,
  246. orderChannel: res.data.orderChannel,
  247. product: res.data.product
  248. });
  249. }
  250. });
  251. },
  252. onTabChange(e) {
  253. let tab = e.currentTarget.dataset.tab;
  254. this.setData({
  255. activeTab: tab
  256. });
  257. if (this.activeTab == 1) {
  258. this.setData({
  259. serList: this.unusedSerList
  260. });
  261. } else {
  262. this.setData({
  263. serList: this.usedSerList
  264. });
  265. }
  266. },
  267. showAppoint(e) {
  268. let status = e.currentTarget.dataset.status;
  269. if (status == 1) {
  270. let time = e.currentTarget.dataset.time;
  271. let str = time.substr(0, 16).replace(/-/g, '/');
  272. let isNear = new Date(str).getTime() - new Date().getTime() - 7200 * 1000;
  273. console.log(isNear);
  274. if (isNear < 0) {
  275. uni.showToast({
  276. title: '服务时间小于2小时,不能修改预约',
  277. icon: 'none',
  278. duration: 2000
  279. });
  280. return false;
  281. }
  282. }
  283. this.setData({
  284. choosePopup: true,
  285. serviceId: e.currentTarget.dataset.id
  286. });
  287. this.getDayStock();
  288. },
  289. getDayStock() {
  290. if (this.dateIndex < 0) {
  291. return false;
  292. }
  293. let params = {
  294. day: this.dateList[this.dateIndex].date,
  295. goodsId: this.orderBook.goodsId,
  296. lng: this.orderBook.lng,
  297. lat: this.orderBook.lat,
  298. productId: this.orderBook.productId
  299. };
  300. uni.showLoading({
  301. title: '加载中'
  302. });
  303. util.request(api.EveryDayStock, params, 'GET')
  304. .then((res) => {
  305. uni.hideLoading();
  306. if (res.errno == 0) {
  307. this.setData({
  308. timeList: res.data,
  309. timeIndex: 0
  310. });
  311. // let validList = this.data.timeList.filter(item => {
  312. // return item.stock > 0;
  313. // });
  314. // if (validList.length > 0) {
  315. // this.setData({
  316. // timeIndex: validList[0].id - 1
  317. // });
  318. // } else {
  319. // this.setData({
  320. // timeIndex: ''
  321. // });
  322. // }
  323. } else {
  324. uni.showToast({
  325. title: res.errmsg,
  326. icon: 'none',
  327. duration: 2000
  328. });
  329. this.setData({
  330. timeList: [],
  331. timeIndex: ''
  332. });
  333. }
  334. })
  335. .catch(function (err) {
  336. console.log(err);
  337. uni.hideLoading();
  338. uni.showToast({
  339. title: err.errMsg,
  340. icon: 'none'
  341. });
  342. this.setData({
  343. timeList: [],
  344. timeIndex: ''
  345. });
  346. });
  347. },
  348. onClose() {
  349. this.setData({
  350. choosePopup: false
  351. });
  352. },
  353. dateCheck(e) {
  354. let index = e.currentTarget.dataset.index;
  355. let date = e.currentTarget.dataset.date;
  356. let week = e.currentTarget.dataset.week;
  357. let isbook = e.currentTarget.dataset.isbook;
  358. // if (index >= 7 || (index >= 2 && index < 7 && (week != '周六' && week != '周日'))) {
  359. // this.setData({
  360. // dateIndex: index
  361. // });
  362. // }
  363. if (isbook) {
  364. this.setData({
  365. dateIndex: index
  366. });
  367. this.getDayStock();
  368. }
  369. },
  370. timeCheck(e) {
  371. let index = e.currentTarget.dataset.index;
  372. // if (e.currentTarget.dataset.stock == 0) {
  373. // wx.showToast({
  374. // title: '所选时间无库存,请选择其他时间',
  375. // icon: 'none',
  376. // duration: 2000
  377. // });
  378. // return;
  379. // }
  380. this.setData({
  381. timeIndex: index
  382. });
  383. },
  384. confirmTime() {
  385. if (this.timeIndex === '') {
  386. uni.showToast({
  387. title: '请选择服务时间',
  388. icon: 'none',
  389. duration: 2000
  390. });
  391. return false;
  392. }
  393. let date = this.dateList[this.dateIndex].date;
  394. let week = this.dateList[this.dateIndex].week;
  395. let time = this.timeList[this.timeIndex].time;
  396. console.log(date, week, time);
  397. let params = {
  398. detail_id: this.serviceId,
  399. date: date,
  400. startTime: time.split('-')[0],
  401. endTime: time.split('-')[1]
  402. };
  403. util.request(api.ServiceOrderBook, params, 'GET').then((res) => {
  404. console.log(res);
  405. if (res.errno == 0) {
  406. uni.showToast({
  407. title: '预约成功',
  408. icon: 'none',
  409. duration: 2000
  410. });
  411. this.setData({
  412. // oneTimeAppoint:date+' '+week+' '+time,
  413. choosePopup: false
  414. });
  415. this.getServiceDetail();
  416. } else {
  417. util.showErrorToast(res.errmsg);
  418. }
  419. });
  420. },
  421. goReVisit(e) {
  422. let id = e.currentTarget.dataset.id;
  423. uni.navigateTo({
  424. url: '/pages/extra/newRevisit/newRevisit?id=' + id,
  425. success: (res) => {},
  426. fail: (res) => {}
  427. });
  428. }
  429. }
  430. };
  431. </script>
  432. <style>
  433. page {
  434. background: #f6f5f5;
  435. }
  436. /* 服务详情顶部 */
  437. .order-main-top {
  438. height: 160rpx;
  439. background: url('https://mall.zhaijieshi.cc/file/jzmall/weixin/service-detail-bg.png') no-repeat center;
  440. background-size: 100% 100%;
  441. display: flex;
  442. align-items: center;
  443. justify-content: space-between;
  444. margin: 0 0 20rpx;
  445. padding: 0 24rpx;
  446. }
  447. .order-main-top view,
  448. .order-main-top text {
  449. color: #fff;
  450. font-size: 28rpx;
  451. }
  452. .order-main-top .order-detail-status {
  453. font-size: 36rpx;
  454. font-weight: bold;
  455. margin-bottom: 10rpx;
  456. }
  457. .order-main-right {
  458. text-align: right;
  459. }
  460. .order-main-right .view-service {
  461. width: 148rpx;
  462. height: 44rpx;
  463. line-height: 44rpx;
  464. border-radius: 44rpx;
  465. border: 1rpx solid #fff;
  466. text-align: center;
  467. margin: 10rpx 0 0;
  468. }
  469. .order-main-right .current-times {
  470. font-size: 40rpx;
  471. font-weight: bold;
  472. }
  473. .service-info {
  474. margin: 20rpx 24rpx;
  475. border-radius: 40rpx;
  476. background: #fff;
  477. height: 322rpx;
  478. padding: 32rpx 40rpx;
  479. display: flex;
  480. flex-direction: column;
  481. justify-content: space-between;
  482. }
  483. .info-content {
  484. height: 180rpx;
  485. display: flex;
  486. align-items: center;
  487. }
  488. .service-info view.info-title {
  489. font-size: 32rpx;
  490. color: #000;
  491. }
  492. .product-img {
  493. width: 180rpx;
  494. height: 180rpx;
  495. margin-right: 20rpx;
  496. }
  497. .info-detail view {
  498. color: #999;
  499. font-size: 28rpx;
  500. line-height: 46rpx;
  501. }
  502. .van-tabs view {
  503. color: #666;
  504. }
  505. .van-tab--active view {
  506. color: #09afff;
  507. }
  508. .service-list {
  509. border-top: 1rpx solid #ddd;
  510. padding: 20rpx 24rpx;
  511. }
  512. .service-item {
  513. /* height: 180rpx; */
  514. border-radius: 20rpx;
  515. margin: 0 0 20rpx;
  516. padding: 42rpx 24rpx 34rpx;
  517. background: #fff;
  518. display: flex;
  519. flex-direction: column;
  520. justify-content: space-between;
  521. }
  522. .service-time {
  523. display: flex;
  524. justify-content: space-between;
  525. }
  526. .service-time text {
  527. color: #999;
  528. font-size: 28rpx;
  529. }
  530. .item-left .service-item-status {
  531. font-size: 28rpx;
  532. }
  533. .service-item-top {
  534. display: flex;
  535. align-items: center;
  536. justify-content: space-between;
  537. height: 42rpx;
  538. margin-bottom: 10rpx;
  539. }
  540. .item-left {
  541. display: flex;
  542. align-items: center;
  543. }
  544. .service-item-top .item-left text {
  545. color: #333;
  546. font-weight: bold;
  547. font-size: 28rpx;
  548. }
  549. .ci-img {
  550. width: 32rpx;
  551. height: 32rpx;
  552. margin-right: 16rpx;
  553. }
  554. .service-item view.go-appoint {
  555. margin-top: 10rpx;
  556. float: right;
  557. width: 136rpx;
  558. height: 44rpx;
  559. line-height: 44rpx;
  560. text-align: center;
  561. border-radius: 44rpx;
  562. border: 1rpx solid #09afff;
  563. font-size: 28rpx;
  564. margin-left: 20rpx;
  565. }
  566. .full-time {
  567. color: #09afff;
  568. }
  569. .service-detail-page .no-list {
  570. margin: 56rpx 0 0;
  571. text-align: center;
  572. color: #999;
  573. font-size: 28rpx;
  574. }
  575. /* 选择时间 */
  576. view.popup-wrapper view {
  577. color: #888;
  578. font-size: 30rpx;
  579. }
  580. .popup-content {
  581. flex: 1;
  582. }
  583. .popup-title {
  584. height: 96rpx;
  585. line-height: 96rpx;
  586. text-align: center;
  587. border-bottom: 1rpx solid #ddd;
  588. }
  589. .popup-content {
  590. display: flex;
  591. }
  592. .time-select-left {
  593. flex: 2;
  594. border-right: 1rpx solid #ddd;
  595. padding: 0 20rpx;
  596. }
  597. .time-select-right {
  598. flex: 3;
  599. padding: 0 8rpx;
  600. height: 468px;
  601. overflow-y: auto;
  602. }
  603. .time-select-left-item {
  604. height: 108rpx;
  605. display: flex;
  606. flex-direction: column;
  607. justify-content: center;
  608. }
  609. .popup-content .current-date {
  610. color: #09afff;
  611. font-weight: bold;
  612. }
  613. view.popup-wrapper .time-select-right-item {
  614. height: 104rpx;
  615. border-bottom: 1rpx solid #ddd;
  616. display: flex;
  617. align-items: center;
  618. justify-content: space-between;
  619. padding: 0 24rpx;
  620. }
  621. .time-select-right-item view {
  622. color: #6d7278;
  623. font-weight: bold;
  624. }
  625. view.popup-btn-wrapper {
  626. margin: 20rpx 0 0;
  627. padding: 0 24rpx 20rpx;
  628. }
  629. view.popup-btn-wrapper button > view {
  630. color: #fff;
  631. }
  632. view.popup-wrapper .date-tag {
  633. color: #09afff;
  634. height: 44rpx;
  635. line-height: 42rpx;
  636. width: 90rpx;
  637. border: 2rpx solid #09afff;
  638. border-radius: 44rpx;
  639. text-align: center;
  640. font-weight: normal;
  641. font-size: 24rpx;
  642. display: inline-block;
  643. }
  644. view.popup-wrapper .full-time {
  645. color: #09afff;
  646. font-size: 24rpx;
  647. margin: 0 0 0 20rpx;
  648. height: 44rpx;
  649. line-height: 44rpx;
  650. float: right;
  651. padding-right: 40rpx;
  652. }
  653. .first-appoint-date-item {
  654. height: 108rpx;
  655. display: flex;
  656. align-items: center;
  657. padding: 0 0 0 240rpx;
  658. }
  659. .first-time-selected {
  660. margin: 0 0 0 60rpx;
  661. }
  662. .select-week-times {
  663. border-top: 1rpx solid #ddd;
  664. }
  665. .week-select-left {
  666. flex: 1.2;
  667. }
  668. .week-select-left > view.time-select-left-item {
  669. padding: 0 0 0 60rpx;
  670. display: flex;
  671. align-items: flex-start;
  672. justify-content: flex-start;
  673. flex-direction: row;
  674. padding: 10rpx 0 0 60rpx;
  675. }
  676. .week-select-left > view.time-select-left-item .week-str {
  677. padding: 12rpx 0 0 0;
  678. }
  679. view.popup-wrapper view.select-num-tag {
  680. width: 32rpx;
  681. height: 32rpx;
  682. line-height: 32rpx;
  683. background: #09afff;
  684. border-radius: 34rpx;
  685. font-size: 20rpx;
  686. color: #fff;
  687. text-align: center;
  688. margin: 0 0 0 6rpx;
  689. }
  690. .popup-content-special {
  691. position: relative;
  692. }
  693. .popup-title-special {
  694. position: absolute;
  695. left: 0;
  696. top: 0;
  697. right: 0;
  698. background: #fff;
  699. }
  700. .popup-content-special {
  701. height: 900rpx;
  702. margin-top: 96rpx;
  703. }
  704. .popup-content-special .time-select-left {
  705. height: 900rpx;
  706. overflow-y: scroll;
  707. }
  708. .stock-text {
  709. font-size: 20rpx;
  710. font-weight: normal;
  711. color: #888;
  712. }
  713. .zero-stock {
  714. color: #ccc;
  715. }
  716. .appoint-overlay-wrapper {
  717. position: fixed;
  718. top: 0;
  719. left: 0;
  720. width: 100%;
  721. height: 100%;
  722. background-color: rgba(0, 0, 0, 0.7);
  723. z-index: 999;
  724. }
  725. /* 选择时间 */
  726. view.popup-wrapper {
  727. /* padding: 0 0 20rpx; */
  728. color: #333;
  729. display: flex;
  730. flex-direction: column;
  731. justify-content: space-between;
  732. /* height: 80%; */
  733. position: fixed;
  734. left: 0;
  735. right: 0;
  736. bottom: 0;
  737. background: #fff;
  738. padding-bottom: constant(safe-area-inset-bottom);
  739. padding-bottom: env(safe-area-inset-bottom);
  740. z-index: 9999;
  741. }
  742. view.popup-wrapper view.confirm-btn {
  743. background: #09afff;
  744. height: 88rpx;
  745. line-height: 88rpx;
  746. border-radius: 88rpx;
  747. text-align: center;
  748. color: #fff;
  749. }
  750. .go-pay-wrapper {
  751. padding-bottom: constant(safe-area-inset-bottom);
  752. padding-bottom: env(safe-area-inset-bottom);
  753. }
  754. .go-pay-wrapper view {
  755. background: #09afff;
  756. height: 88rpx;
  757. line-height: 88rpx;
  758. border-radius: 88rpx;
  759. text-align: center;
  760. color: #fff;
  761. }
  762. .appoint-tabs-wrapper {
  763. height: 88rpx;
  764. display: flex;
  765. align-items: center;
  766. line-height: 88rpx;
  767. justify-content: space-around;
  768. }
  769. .appoint-tab-item {
  770. /* width:80rpx; */
  771. }
  772. .appoint-tab-item.active {
  773. color: #09afff;
  774. border-bottom: 4rpx solid #09afff;
  775. }
  776. </style>