index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924
  1. <template>
  2. <view>
  3. <nav-bar title="模考预约" class="nav"></nav-bar>
  4. <view class="tabs">
  5. <view
  6. class="tab"
  7. :class="{ active: index == 1 }"
  8. data-index="1"
  9. @click="tab(1)"
  10. >
  11. <view>{{ businessName }}</view>
  12. <u-icon
  13. class="icon"
  14. :class="index == 1 ? 'animals' : ''"
  15. name="arrow-down"
  16. ></u-icon>
  17. </view>
  18. <view class="tab" :class="{ active: index == 2 }" data-index="2">
  19. <view class="dateRange">
  20. <picker
  21. mode="date"
  22. :value="param.startTime"
  23. :end="endDate"
  24. @change="bindDateFromChange"
  25. >
  26. <view class="uni-input">{{ param.startTime || "开始时间" }}</view>
  27. </picker>
  28. -
  29. <picker
  30. mode="date"
  31. :value="param.endTime"
  32. :end="endDate"
  33. @change="bindDateToChange"
  34. >
  35. <view class="uni-input">{{ param.endTime || "结束时间" }}</view>
  36. </picker></view
  37. >
  38. <u-icon class="icon" name="calendar"></u-icon>
  39. </view>
  40. </view>
  41. <view class="scroll">
  42. <scroll-view scroll-x="true" class="scroll-x">
  43. <view class="content">
  44. <view
  45. v-for="(item, index) in sList"
  46. :key="index"
  47. class="scroll-tag"
  48. :class="{ active: param.majorId == item.id }"
  49. @click="tagSelect(item)"
  50. >{{ item.categoryName }}</view
  51. >
  52. </view>
  53. </scroll-view>
  54. </view>
  55. <view class="record">
  56. <view class="item" v-for="(item, index) in mockList" :key="index">
  57. <view class="item__header">{{ item.subjectName }}</view>
  58. <view class="item__body">
  59. <view class="title">
  60. <image
  61. class="img"
  62. mode="widthFix"
  63. src="/pages5/static/time.png"
  64. ></image>
  65. <text>考试时间</text>
  66. </view>
  67. <view class="desc"
  68. >{{ $method.timestampToTime(item.examTime) }}
  69. <view> {{ item.startTime }} - {{ item.endTime }} </view>
  70. </view>
  71. <view
  72. class="btn"
  73. @click="appoint(item)"
  74. :class="{ disabled: !canApply(item) || !item.isSubscribe }"
  75. >{{ item.isSubscribe ? "预约考试" : "已预约" }}</view
  76. >
  77. </view>
  78. </view>
  79. </view>
  80. <view class="notice" @click="noticeModal = true">
  81. <u-icon class="icon" color="#fff" name="info-circle"></u-icon>
  82. <view class="text">模考说明</view>
  83. </view>
  84. <view class="modal" :style="{ top: modalTop + 'px' }" v-if="index == 1">
  85. <view class="content">
  86. <scroll-view scroll-y="true" style="height: 100%">
  87. <view class="list">
  88. <view
  89. class="item"
  90. :class="
  91. param.businessId == listItem.businessId ? 'activesty' : ''
  92. "
  93. v-for="(listItem, listIndex) in businesslist"
  94. :key="listIndex"
  95. @click="testClick(listItem)"
  96. >
  97. {{ listItem.educationName }}:{{ listItem.businessName }}-{{
  98. listItem.projectName
  99. }}
  100. </view>
  101. </view>
  102. </scroll-view>
  103. </view>
  104. <view class="modal_wrap" @click="index = 0"></view>
  105. </view>
  106. <u-popup
  107. class="notice__modal"
  108. v-model="noticeModal"
  109. mode="center"
  110. border-radius="24"
  111. :mask-close-able="false"
  112. >
  113. <view class="notice__content">
  114. <view class="body">
  115. <scroll-view scroll-y="true" style="height: 700rpx">
  116. <view class="content">
  117. <view class="bold text">模拟考试说明</view>
  118. <view
  119. >在您注册过程中,您需要完成我们的注册流程并通过点击“同意并继续”的形式在线签署以下协议及政策,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。
  120. </view>
  121. </view>
  122. </scroll-view>
  123. </view>
  124. <view class="footer">
  125. <view class="btn close" @click="noticeModal = false">我知道了</view>
  126. </view>
  127. </view>
  128. </u-popup>
  129. <view
  130. class="appoint__modal"
  131. v-if="appointModal"
  132. mode="center"
  133. border-radius="24"
  134. :mask-close-able="false"
  135. >
  136. <view class="appoint__content">
  137. <view class="body">
  138. <image
  139. class="img"
  140. src="/pages5/static/img-header.png"
  141. mode="widthFix"
  142. ></image>
  143. <view class="content">
  144. <view class="bold center">模拟考试说明</view>
  145. <view> 您预约的模拟考试,安排如下: </view>
  146. <view>
  147. <text class="bold text">模考场次: </text>
  148. <text class="text">{{ showItem.applyName }}</text>
  149. </view>
  150. <view>
  151. <text class="bold text">项目: </text>
  152. <text class="text"
  153. >{{ showItem.businessName }} {{ showItem.projectName }}</text
  154. >
  155. </view>
  156. <view>
  157. <text class="bold text">专业:</text>
  158. <text class="text">{{ showItem.categoryName }}</text>
  159. </view>
  160. <view>
  161. <text class="bold text">科目:</text>
  162. <text class="text">{{ showItem.subjectName }}</text>
  163. </view>
  164. <view>
  165. <text class="bold text">考试时间:</text>
  166. <text class="text">
  167. {{ $method.timestampToTime(showItem.examTime) }}
  168. {{ showItem.startTime }} - {{ showItem.endTime }}
  169. </text>
  170. </view>
  171. <view>请准时参加考试哦~</view>
  172. </view>
  173. </view>
  174. <view class="footer">
  175. <view
  176. class="btn close"
  177. @click="
  178. appointModal = false;
  179. openAppoint = true;
  180. "
  181. >我知道了</view
  182. >
  183. </view>
  184. </view>
  185. </view>
  186. <u-popup
  187. class="open__modal"
  188. v-model="openAppoint"
  189. mode="center"
  190. border-radius="24"
  191. :mask-close-able="false"
  192. >
  193. <view class="open__content">
  194. <view class="body">
  195. <view class="content">
  196. <view class="bold center">开考提醒</view>
  197. <view class="center"> 开考前10分钟提醒入场,不错过实战机会 </view>
  198. </view>
  199. </view>
  200. <view class="footer">
  201. <view class="btn close" @click="closeNotice()">我知道了</view>
  202. </view>
  203. </view>
  204. </u-popup>
  205. </view>
  206. </template>
  207. <script>
  208. import { mapGetters, mapActions } from "vuex";
  209. export default {
  210. computed: {
  211. ...mapGetters(["userInfo", "sysTime"]),
  212. },
  213. data() {
  214. return {
  215. tagActive: "",
  216. openAppoint: false,
  217. appointModal: false,
  218. noticeModal: false,
  219. index: 0,
  220. list: [],
  221. list1: [],
  222. mockList: [],
  223. businesslist: [],
  224. param: {
  225. endTime: "",
  226. startTime: "",
  227. pageNum: 1,
  228. pageSize: 10,
  229. businessId: "",
  230. majorId: "",
  231. },
  232. isRepeat: false,
  233. total: 0,
  234. activeIndex: "",
  235. typeIndex: 0,
  236. itemIndex: "",
  237. modalTop: 0,
  238. endDate: "",
  239. businessName: "",
  240. subscribeId: 0,
  241. nowTime: "",
  242. sList: [],
  243. showItem: {},
  244. };
  245. },
  246. async onLoad(option) {
  247. this.endDate = this.$method
  248. .timestampToTime(new Date().getTime() / 1000)
  249. .replace(/-/g, "/");
  250. this.nowTime = +this.$method.timest();
  251. await this.setSystemTime();
  252. await this.mockApplyListApplyBusiness();
  253. this.mockApplyListApply();
  254. uni.getSystemInfo({
  255. success: (e) => {
  256. let info = uni.createSelectorQuery().select(".nav");
  257. info
  258. .boundingClientRect((navData) => {
  259. //data - 各种参数
  260. let info = uni.createSelectorQuery().select(".tabs");
  261. info
  262. .boundingClientRect((tabData) => {
  263. //data - 各种参数
  264. this.modalTop = navData.height + tabData.height;
  265. })
  266. .exec();
  267. })
  268. .exec();
  269. },
  270. });
  271. },
  272. onPullDownRefresh() {
  273. let that = this;
  274. this.param.pageNum = 1;
  275. this.mockApplyListApply();
  276. setTimeout(function () {
  277. uni.stopPullDownRefresh();
  278. }, 500);
  279. },
  280. onReachBottom() {
  281. if (this.mockList.length < this.total) {
  282. this.param.pageNum++;
  283. this.mockApplyListApply();
  284. }
  285. },
  286. onShow() {},
  287. methods: {
  288. ...mapActions(["setSystemTime"]),
  289. closeNotice() {
  290. this.mockSubscribeEdit();
  291. this.openAppoint = false;
  292. this.param.pageNum = 1;
  293. this.mockList = [];
  294. this.mockApplyListApply();
  295. },
  296. canApply(item) {
  297. console.log(item);
  298. let startTime = item.applyStartTime;
  299. let endTime = item.applyEndTime;
  300. let examTime = item.examTime;
  301. if (
  302. this.sysTime >= startTime &&
  303. this.sysTime <= endTime &&
  304. this.sysTime < examTime
  305. ) {
  306. return true;
  307. } else {
  308. return false;
  309. }
  310. },
  311. tagSelect(item) {
  312. this.param.majorId = item.id;
  313. this.mockList = [];
  314. this.mockApplyListApply();
  315. },
  316. testClick(item) {
  317. if (!item) {
  318. this.param.businessId = "";
  319. this.businessId = "";
  320. this.index = 0;
  321. this.mockList = [];
  322. this.mockApplyListApply();
  323. return;
  324. }
  325. console.log(item, "item");
  326. this.param.businessId = item.businessId;
  327. this.businessName =
  328. item.educationName + ":" + item.businessName + "-" + item.projectName;
  329. this.index = 0;
  330. this.mockList = [];
  331. this.courseMajorList({
  332. businessId: item.businessId,
  333. projectId: item.projectId,
  334. status: 1,
  335. });
  336. this.mockApplyListApply();
  337. console.log(this.b);
  338. },
  339. mockApplyListApplyBusiness() {
  340. return new Promise((resolve) => {
  341. this.$api.mockApplyListApplyBusiness().then(async (res) => {
  342. this.businesslist = res.data.rows;
  343. this.param.businessId = res.data.rows[0].businessId;
  344. this.businessName =
  345. res.data.rows[0].businessName + res.data.rows[0].projectName;
  346. await this.courseMajorList({
  347. businessId: res.data.rows[0].businessId,
  348. projectId: res.data.rows[0].projectId,
  349. status: 1,
  350. });
  351. resolve();
  352. });
  353. });
  354. },
  355. mockApplyListApply() {
  356. let param = JSON.parse(JSON.stringify(this.param));
  357. if (param.endTime) {
  358. param.endTime = this.$method.TimeTotimestamp(param.endTime);
  359. }
  360. if (param.startTime) {
  361. param.startTime = this.$method.TimeTotimestamp(param.startTime);
  362. }
  363. this.$api.mockApplyListApply(param).then((res) => {
  364. this.mockList.push(...res.data.rows);
  365. this.total = res.data.total;
  366. });
  367. },
  368. refreshByIndex() {},
  369. courseMajorList(data) {
  370. return new Promise((resolve) => {
  371. let self = this;
  372. this.$api.courseMajorList(data).then((res) => {
  373. if (res.data.code == 200) {
  374. self.sList = res.data.rows;
  375. let allItem = { id: "", categoryName: "全部" };
  376. self.sList.unshift(allItem);
  377. this.param.majorId = "";
  378. resolve();
  379. }
  380. });
  381. });
  382. },
  383. appoint(item) {
  384. let canApply = this.canApply(item);
  385. console.log(canApply);
  386. // if (!canApply) {
  387. // uni.showToast({
  388. // icon: "none",
  389. // title: "不在预约时间范围",
  390. // });
  391. // return;
  392. // }
  393. // if (!item.isSubscribe) {
  394. // uni.showToast({
  395. // icon: "none",
  396. // title: "您已预约",
  397. // });
  398. // return;
  399. // }
  400. this.$api
  401. .mockSubscribe({
  402. applySiteExamTime: item.examTime,
  403. applySiteEndTime: item.endTime,
  404. applySiteStartTime: item.startTime,
  405. applyId: item.applyId,
  406. mockMajorSubjectId: item.mockMajorSubjectId,
  407. eachExamId: item.eachExamId,
  408. goodsId: item.goodsId,
  409. orderGoodsId: item.orderGoodsId,
  410. // applySiteExamTime:1653899220,
  411. // applySiteEndTime:"17:27:54",
  412. // applySiteStartTime:'16:27:54',
  413. // applyId:26,
  414. // mockMajorSubjectId:49
  415. })
  416. .then((res) => {
  417. console.log(res);
  418. if (res.data.code == 200) {
  419. this.showItem = item;
  420. this.appointModal = true;
  421. this.subscribeId = res.data.data;
  422. } else {
  423. uni.showToast({
  424. icon: "none",
  425. title: res.data.msg,
  426. });
  427. }
  428. })
  429. .catch((err) => {
  430. uni.showToast({
  431. icon: "none",
  432. title: err.data.msg,
  433. });
  434. });
  435. },
  436. tab(index) {
  437. console.log(index, this.index);
  438. if (this.index == index) {
  439. this.index = 0;
  440. return;
  441. }
  442. this.index = index;
  443. console.log(this.index);
  444. },
  445. bindDateFromChange(e) {
  446. this.param.startTime = e.detail.value;
  447. this.param.pageNum = 1;
  448. this.mockList = [];
  449. this.mockApplyListApply();
  450. },
  451. mockSubscribeEdit() {
  452. this.$api
  453. .mockSubscribeEdit({
  454. mockRemind: 1,
  455. subscribeId: this.subscribeId,
  456. })
  457. .then((res) => {
  458. uni.showToast({
  459. icon: "none",
  460. title: "开启成功",
  461. });
  462. });
  463. },
  464. bindDateToChange(e) {
  465. this.param.endTime = e.detail.value;
  466. this.param.pageNum = 1;
  467. this.mockList = [];
  468. this.mockApplyListApply();
  469. },
  470. },
  471. };
  472. </script>
  473. <style>
  474. page {
  475. background: #eaeef1;
  476. }
  477. </style>
  478. <style lang="scss" scope>
  479. .animals {
  480. transition: all 0.3s;
  481. transform: rotate(180deg);
  482. }
  483. .tabs {
  484. position: fixed;
  485. left: 0;
  486. width: 100%;
  487. display: flex;
  488. height: 80rpx;
  489. z-index: 10;
  490. .tab {
  491. padding: 0 18rpx;
  492. flex: 1;
  493. display: flex;
  494. justify-content: space-between;
  495. height: 80rpx;
  496. line-height: 80rpx;
  497. background: #ffffff;
  498. font-size: 24rpx;
  499. color: #999999;
  500. &:nth-of-type(1) {
  501. border-right: 1px solid #eeeeee;
  502. }
  503. .uni-input {
  504. text-align: center;
  505. width: 150rpx;
  506. }
  507. .dateRange {
  508. display: flex;
  509. justify-content: space-between;
  510. }
  511. &.active {
  512. color: #333333;
  513. .icon {
  514. transform: rotate(180deg);
  515. }
  516. }
  517. }
  518. }
  519. .scroll {
  520. width: 100%;
  521. margin-top: 80rpx;
  522. .scroll-x {
  523. .content {
  524. padding: 16rpx;
  525. white-space: nowrap;
  526. .scroll-tag {
  527. display: inline-block;
  528. padding: 11rpx 17rpx;
  529. background: #fff;
  530. color: #666666;
  531. margin-right: 16rpx;
  532. border-radius: 16rpx;
  533. &.active {
  534. background: #007aff;
  535. color: #fff;
  536. }
  537. }
  538. }
  539. }
  540. }
  541. .record {
  542. padding: 16rpx 16rpx;
  543. display: flex;
  544. flex-wrap: wrap;
  545. .item {
  546. margin-bottom: 16rpx;
  547. width: 351rpx;
  548. background: #ffffff;
  549. border-radius: 16rpx;
  550. position: relative;
  551. &:nth-of-type(2n) {
  552. margin-left: 16rpx;
  553. }
  554. &__header {
  555. padding: 24rpx 16rpx;
  556. background: #f2f6ff;
  557. font-size: 30rpx;
  558. color: #007aff;
  559. &::before {
  560. content: "";
  561. display: inline-block;
  562. width: 4rpx;
  563. height: 32rpx;
  564. background: #007aff;
  565. margin-right: 10rpx;
  566. vertical-align: middle;
  567. }
  568. }
  569. &__body {
  570. padding: 16rpx;
  571. .title {
  572. font-size: 24rpx;
  573. color: #666666;
  574. line-height: 48rpx;
  575. .img {
  576. vertical-align: middle;
  577. width: 32rpx;
  578. }
  579. }
  580. .desc {
  581. margin-top: 10rpx;
  582. font-size: 28rpx;
  583. font-weight: bold;
  584. color: #666666;
  585. line-height: 36rpx;
  586. }
  587. .btn {
  588. margin-top: 30rpx;
  589. background: #ffffff;
  590. border-radius: 16rpx;
  591. height: 64rpx;
  592. line-height: 62rpx;
  593. text-align: center;
  594. font-size: 28rpx;
  595. border: 1px solid #007aff;
  596. color: #007aff;
  597. &.disabled {
  598. border: 1px solid #d9d9d9;
  599. color: #d9d9d9;
  600. }
  601. }
  602. }
  603. }
  604. }
  605. .notice {
  606. position: fixed;
  607. right: 0;
  608. top: 50%;
  609. width: 48rpx;
  610. height: 200rpx;
  611. background: #52c41a;
  612. box-shadow: 0px 3rpx 16rpx 0rpx rgba(44, 121, 7, 0.5);
  613. border-radius: 24rpx;
  614. display: flex;
  615. flex-direction: column;
  616. align-items: center;
  617. justify-content: center;
  618. padding: 10rpx 0;
  619. .text {
  620. flex: 1;
  621. color: #fff;
  622. text-align: center;
  623. }
  624. }
  625. .modal {
  626. bottom: 0;
  627. z-index: 199999999;
  628. position: fixed;
  629. left: 0;
  630. width: 100%;
  631. .content {
  632. height: 80%;
  633. overflow: hidden;
  634. position: relative;
  635. z-index: 10;
  636. background: #fff;
  637. padding: 8rpx 12rpx 20rpx;
  638. display: flex;
  639. flex-wrap: wrap;
  640. .top {
  641. margin: 0 auto;
  642. width: 726rpx;
  643. height: 80rpx;
  644. background: #f5f5f5;
  645. color: #666666;
  646. border-radius: 16rpx;
  647. text-align: center;
  648. line-height: 80rpx;
  649. font-size: 32rpx;
  650. }
  651. .list {
  652. width: 100%;
  653. margin-top: 16rpx;
  654. display: flex;
  655. flex-wrap: wrap;
  656. justify-content: space-between;
  657. .item {
  658. padding: 25rpx 20rpx;
  659. width: 49%;
  660. background: #f5f5f5;
  661. border-radius: 16rpx;
  662. font-size: 32rpx;
  663. color: #666666;
  664. margin: 8rpx 0;
  665. }
  666. }
  667. }
  668. .modal_wrap {
  669. position: absolute;
  670. left: 0;
  671. width: 100%;
  672. top: 0;
  673. height: 100%;
  674. background: rgba(0, 0, 0, 0.3);
  675. }
  676. }
  677. .notice__modal {
  678. .notice__content {
  679. width: 640rpx;
  680. height: 818rpx;
  681. background: #ffffff;
  682. display: flex;
  683. flex-direction: column;
  684. .body {
  685. flex: 1;
  686. .content {
  687. padding: 30rpx 40rpx 28rpx;
  688. line-height: 40rpx;
  689. font-size: 28rpx;
  690. color: #666;
  691. .bold {
  692. color: #333;
  693. font-size: 32rpx;
  694. font-weight: bold;
  695. }
  696. .center {
  697. text-align: center;
  698. }
  699. }
  700. }
  701. .footer {
  702. height: 140rpx;
  703. border-top: 1px solid #eeeeee;
  704. display: flex;
  705. align-items: center;
  706. justify-content: center;
  707. .btn {
  708. margin: 0 12rpx;
  709. width: 200rpx;
  710. height: 80rpx;
  711. color: #007aff;
  712. font-size: 30rpx;
  713. text-align: center;
  714. line-height: 80rpx;
  715. background: #f5f5f5;
  716. border-radius: 40rpx 40rpx 40rpx 40rpx;
  717. &.close {
  718. color: #fff;
  719. width: 560rpx;
  720. height: 80rpx;
  721. background: #007aff;
  722. border-radius: 40rpx 40rpx 40rpx 40rpx;
  723. }
  724. }
  725. }
  726. }
  727. }
  728. .open__modal {
  729. .open__content {
  730. width: 640rpx;
  731. background: #ffffff;
  732. .body {
  733. .content {
  734. padding: 30rpx 40rpx 28rpx;
  735. line-height: 40rpx;
  736. font-size: 28rpx;
  737. color: #666;
  738. .bold {
  739. color: #333;
  740. font-size: 32rpx;
  741. font-weight: bold;
  742. }
  743. .center {
  744. text-align: center;
  745. }
  746. }
  747. }
  748. .footer {
  749. height: 140rpx;
  750. border-top: 1px solid #eeeeee;
  751. display: flex;
  752. align-items: center;
  753. justify-content: center;
  754. .btn {
  755. margin: 0 12rpx;
  756. width: 200rpx;
  757. height: 80rpx;
  758. color: #007aff;
  759. font-size: 30rpx;
  760. text-align: center;
  761. line-height: 80rpx;
  762. background: #f5f5f5;
  763. border-radius: 40rpx 40rpx 40rpx 40rpx;
  764. &.close {
  765. color: #fff;
  766. width: 560rpx;
  767. height: 80rpx;
  768. background: #007aff;
  769. border-radius: 40rpx 40rpx 40rpx 40rpx;
  770. }
  771. }
  772. }
  773. }
  774. }
  775. .appoint__modal {
  776. position: fixed;
  777. left: 0;
  778. top: 0;
  779. z-index: 9999;
  780. width: 100%;
  781. height: 100%;
  782. background: rgba(0, 0, 0, 0.3);
  783. .img {
  784. width: 280rpx;
  785. position: absolute;
  786. left: 50%;
  787. margin-left: -140rpx;
  788. top: -70rpx;
  789. }
  790. .appoint__content {
  791. border-radius: 20rpx;
  792. position: absolute;
  793. left: 50%;
  794. top: 50%;
  795. transform: translate3D(-50%, -50%, 0);
  796. width: 640rpx;
  797. height: 867rpx;
  798. background: #ffffff;
  799. .body {
  800. position: relative;
  801. .content {
  802. padding: 160rpx 40rpx 28rpx;
  803. line-height: 60rpx;
  804. font-size: 28rpx;
  805. color: #666;
  806. .bold {
  807. color: #333;
  808. font-size: 32rpx;
  809. font-weight: bold;
  810. }
  811. .center {
  812. text-align: center;
  813. }
  814. .text {
  815. color: #666;
  816. font-size: 28rpx;
  817. }
  818. }
  819. }
  820. .footer {
  821. height: 140rpx;
  822. border-top: 1px solid #eeeeee;
  823. display: flex;
  824. align-items: center;
  825. justify-content: center;
  826. .btn {
  827. margin: 0 12rpx;
  828. width: 200rpx;
  829. height: 80rpx;
  830. color: #007aff;
  831. font-size: 30rpx;
  832. text-align: center;
  833. line-height: 80rpx;
  834. background: #f5f5f5;
  835. border-radius: 40rpx 40rpx 40rpx 40rpx;
  836. &.close {
  837. color: #fff;
  838. width: 560rpx;
  839. height: 80rpx;
  840. background: #007aff;
  841. border-radius: 40rpx 40rpx 40rpx 40rpx;
  842. }
  843. }
  844. }
  845. }
  846. }
  847. .activesty {
  848. background: #007aff !important;
  849. color: #fff !important;
  850. }
  851. </style>