question_detail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. <template>
  2. <view>
  3. <nav-bar title="进入刷题"></nav-bar>
  4. <view class="top">
  5. <navigator
  6. hover-class="none"
  7. :url="
  8. '/pages2/bank/question_statistics?orderGoodsId=' +
  9. orderGoodsId +
  10. '&id=' +
  11. id
  12. "
  13. >
  14. <view class="left">
  15. <view class="title">做题统计</view>
  16. <view class="progress">
  17. <view class="item-left">
  18. <view class="desc"><text>总进度</text></view>
  19. <view class="percent">
  20. {{
  21. goodsCount.totalNum > 0
  22. ? ((goodsCount.doNum / goodsCount.totalNum) * 100).toFixed(
  23. (goodsCount.doNum / goodsCount.totalNum) * 100 == 100
  24. ? 0
  25. : 1
  26. )
  27. : 0
  28. }}
  29. <text class="per">%</text>
  30. </view>
  31. </view>
  32. <view class="item-right">
  33. <view class="up">
  34. <text class="orange">已答</text>
  35. <text>/未答</text>
  36. </view>
  37. <view class="down">
  38. <text class="orange">{{ goodsCount.doNum }}</text>
  39. <text>/{{ goodsCount.totalNum - goodsCount.doNum }}</text>
  40. </view>
  41. </view>
  42. </view>
  43. </view>
  44. </navigator>
  45. <navigator
  46. hover-class="none"
  47. :url="
  48. '/pages2/bank/wrongById?orderGoodsId=' +
  49. orderGoodsId +
  50. '&goodsid=' +
  51. id
  52. "
  53. >
  54. <view class="right">
  55. <view class="title">
  56. 错题集
  57. <u-icon name="arrow-right"></u-icon>
  58. </view>
  59. <view class="number">{{ goodsCount.wrongNum || "0" }}</view>
  60. </view>
  61. </navigator>
  62. <navigator
  63. hover-class="none"
  64. :url="
  65. '/pages2/bank/collectById?orderGoodsId=' +
  66. orderGoodsId +
  67. '&goodsid=' +
  68. id
  69. "
  70. >
  71. <view class="right">
  72. <view class="title">
  73. 收藏集
  74. <u-icon name="arrow-right"></u-icon>
  75. </view>
  76. <view class="number">{{ goodsCount.collectNum || "0" }}</view>
  77. </view>
  78. </navigator>
  79. </view>
  80. <view class="title-list">
  81. <view class="content">
  82. <view class="list" v-for="(item1, index1) in bankList" :key="index1">
  83. <template v-if="item1.type == 1">
  84. <view
  85. class="moduleItem"
  86. @click="clickModule(item1.majorId, index1)"
  87. >
  88. <view class="courseName">{{ item1.name }}</view>
  89. <view>
  90. <image
  91. src="/static/icon/up.png"
  92. class="icon_up"
  93. v-if="!item1.showList"
  94. ></image>
  95. <image
  96. src="/static/icon/down.png"
  97. class="icon_up"
  98. v-if="item1.showList"
  99. ></image>
  100. </view>
  101. </view>
  102. <template v-if="item1.showList">
  103. <view v-for="(item2, index2) in item1.list" :key="index2">
  104. <view
  105. class="section"
  106. @click="
  107. changeItem(
  108. index1,
  109. item2.chapterExamId,
  110. item1.type,
  111. index2,
  112. item1.majorId
  113. )
  114. "
  115. >
  116. <image
  117. src="/static/icon/up1.png"
  118. class="icon_up"
  119. v-if="!item2.showList"
  120. ></image>
  121. <image
  122. src="/static/icon/down1.png"
  123. class="icon_up"
  124. v-if="item2.showList"
  125. ></image>
  126. <!-- <u-icon name="arrow-up" color="#999" size="24" v-if="item2.showList"></u-icon>
  127. <u-icon name="arrow-down" color="#999" size="24" v-if="!item2.showList"></u-icon> -->
  128. <text style="margin-left: 34rpx">{{ item2.name }}</text>
  129. </view>
  130. <view v-if="item2.showList">
  131. <view
  132. class="article active"
  133. style="margin-left: 62rpx"
  134. v-for="(article, index3) in item2.list"
  135. :key="index3"
  136. >
  137. <view class="flex_auto">{{ article.examName }}</view>
  138. <view
  139. class="btn"
  140. @click="
  141. toDo(
  142. article.examId,
  143. goodsData.goodsId,
  144. item1.majorId,
  145. item2.chapterExamId
  146. )
  147. "
  148. v-if="article.recordStatus == -1"
  149. >做题</view
  150. >
  151. <view
  152. class="btn"
  153. @click="
  154. continueDo(
  155. article.recordId,
  156. article.examId,
  157. goodsData.goodsId,
  158. item2.chapterExamId,
  159. item1.majorId
  160. )
  161. "
  162. v-if="article.recordStatus == 0 && article.doType == 1"
  163. >继续</view
  164. >
  165. <view
  166. class="btn"
  167. :class="{
  168. disabled:
  169. article.answerNum > 0 &&
  170. article.doNum >= article.answerNum,
  171. }"
  172. @click="
  173. doRepeat(
  174. article.recordId,
  175. article.examId,
  176. goodsData.goodsId,
  177. item2.chapterExamId,
  178. item1.majorId
  179. )
  180. "
  181. v-if="
  182. article.recordStatus == 1 ||
  183. (article.recordStatus == 0 && article.doType == 2)
  184. "
  185. >重做</view
  186. >
  187. </view>
  188. </view>
  189. <u-line v-if="item1.length > 1"></u-line>
  190. </view>
  191. </template>
  192. </template>
  193. <template v-if="item1.type == 2">
  194. <view
  195. class="section"
  196. @click="changeItem(index1, item1.majorId, item1.type, '', 0)"
  197. >
  198. <image
  199. src="/static/icon/up1.png"
  200. class="icon_up"
  201. v-if="!item1.showList"
  202. ></image>
  203. <image
  204. src="/static/icon/down1.png"
  205. class="icon_up"
  206. v-if="item1.showList"
  207. ></image>
  208. <!-- <u-icon name="arrow-up" color="#999" size="24" v-if="item1.showList"></u-icon>
  209. <u-icon name="arrow-down" color="#999" size="24" v-if="!item1.showList"></u-icon> -->
  210. <text style="margin-left: 34rpx">{{ item1.name }}</text>
  211. </view>
  212. <view v-if="item1.showList">
  213. <view
  214. class="article active"
  215. style="margin-left: 64rpx"
  216. v-for="(article, index2) in item1.list"
  217. :key="index2"
  218. >
  219. <view class="flex_auto">{{ article.examName }}</view>
  220. <view
  221. class="btn"
  222. @click="
  223. toDo(article.examId, goodsData.goodsId, 0, item1.majorId)
  224. "
  225. v-if="article.recordStatus == -1"
  226. >做题</view
  227. >
  228. <view
  229. class="btn"
  230. @click="
  231. continueDo(
  232. article.recordId,
  233. article.examId,
  234. goodsData.goodsId,
  235. 0,
  236. item1.majorId
  237. )
  238. "
  239. v-if="article.recordStatus == 0 && article.doType == 1"
  240. >继续</view
  241. >
  242. <view
  243. class="btn"
  244. :class="{
  245. disabled:
  246. article.answerNum > 0 &&
  247. article.doNum >= article.answerNum,
  248. }"
  249. @click="
  250. doRepeat(
  251. article.recordId,
  252. article.examId,
  253. goodsData.goodsId,
  254. item1.majorId,
  255. 0
  256. )
  257. "
  258. v-if="
  259. article.recordStatus == 1 ||
  260. (article.recordStatus == 0 && article.doType == 2)
  261. "
  262. >重做</view
  263. >
  264. </view>
  265. </view>
  266. </template>
  267. <template v-if="item1.type == 3">
  268. <view class="article active">
  269. <view class="flex_auto">{{ item1.name }}</view>
  270. <view
  271. class="btn"
  272. @click="toDo(item1.majorId, goodsData.goodsId, 0, 0)"
  273. v-if="item1.recordStatus == -1"
  274. >做题</view
  275. >
  276. <view
  277. class="btn"
  278. @click="
  279. continueDo(
  280. item1.recordId,
  281. item1.majorId,
  282. goodsData.goodsId,
  283. 0,
  284. 0
  285. )
  286. "
  287. v-if="item1.recordStatus == 0 && item1.doType == 1"
  288. >继续</view
  289. >
  290. <view
  291. class="btn"
  292. :class="{
  293. disabled:
  294. item1.answerNum > 0 && item1.doNum >= item1.answerNum,
  295. }"
  296. @click="
  297. doRepeat(
  298. item1.recordId,
  299. item1.majorId,
  300. goodsData.goodsId,
  301. 0,
  302. 0
  303. )
  304. "
  305. v-if="
  306. item1.recordStatus == 1 ||
  307. (item1.recordStatus == 0 && item1.doType == 2)
  308. "
  309. >重做</view
  310. >
  311. </view>
  312. </template>
  313. </view>
  314. </view>
  315. </view>
  316. </view>
  317. </template>
  318. <script>
  319. import { mapGetters } from "vuex";
  320. export default {
  321. data() {
  322. return {
  323. goodsData: {},
  324. bankList: [],
  325. id: "",
  326. goodsCount: {
  327. totalNum: 0,
  328. },
  329. orderGoodsId: "",
  330. firstEnter: true,
  331. };
  332. },
  333. onUnload() {},
  334. computed: { ...mapGetters(["userInfo"]) },
  335. onLoad(option) {
  336. this.orderGoodsId = option.orderGoodsId;
  337. this.id = option.id;
  338. this.getDetail();
  339. // this.goodsBankList();
  340. // this.getCollectNum();
  341. // this.getWrongNum()
  342. },
  343. onShow() {
  344. this.goodsBankQuestionNum();
  345. this.goodsBank();
  346. },
  347. methods: {
  348. /**
  349. * 继续做题
  350. */
  351. continueDo(recordId, examId, goodsId, chapterId = 0, moduleId = 0) {
  352. uni.navigateTo({
  353. url:
  354. "/pages2/bank/questionBankContinue?orderGoodsId=" +
  355. this.orderGoodsId +
  356. "&recordId=" +
  357. recordId +
  358. "&id=" +
  359. examId +
  360. "&goodsid=" +
  361. goodsId +
  362. "&chapterId=" +
  363. chapterId +
  364. "&moduleId=" +
  365. moduleId,
  366. });
  367. },
  368. /**
  369. * 重做
  370. * @param {Object} recordId
  371. * @param {Object} examId
  372. * @param {Object} goodsId
  373. * @param {Object} chapterExamId
  374. */
  375. async doRepeat(recordId, examId, goodsId, chapterExamId = 0, moduleId = 0) {
  376. let count = await this.examRecordCount(examId);
  377. let answerNum = await this.getExamDetail(examId);
  378. //超过答题次数
  379. if (answerNum > 0 && count >= answerNum) {
  380. this.$u.toast("该试卷只能答题" + answerNum + "次!");
  381. return;
  382. }
  383. uni.showModal({
  384. title: "提示",
  385. content: "是否清空答案重做?",
  386. cancelText: "查看上次",
  387. cancelColor: "",
  388. confirmText: "重做",
  389. confirmColor: "",
  390. success: (res) => {
  391. if (res.confirm) {
  392. uni.navigateTo({
  393. url:
  394. "/pages2/bank/questionBank?orderGoodsId=" +
  395. this.orderGoodsId +
  396. "&id=" +
  397. examId +
  398. "&goodsid=" +
  399. goodsId +
  400. "&moduleId=" +
  401. moduleId +
  402. "&chapterId=" +
  403. chapterExamId,
  404. });
  405. } else if (res.cancel) {
  406. uni.navigateTo({
  407. url:
  408. "/pages2/bank/questionBankAllExplain?id=" +
  409. examId +
  410. "&goodsid=" +
  411. goodsId +
  412. "&moduleId=" +
  413. moduleId +
  414. "&chapterId=" +
  415. chapterExamId +
  416. "&recordId=" +
  417. recordId +
  418. "&orderGoodsId=" +
  419. this.orderGoodsId,
  420. });
  421. console.log("查看上次答题");
  422. }
  423. },
  424. });
  425. },
  426. /**
  427. * 获取课程目录
  428. */
  429. goodsBank() {
  430. this.$api
  431. .goodsBank({
  432. orderGoodsId: this.orderGoodsId,
  433. goodsId: this.id,
  434. })
  435. .then((res) => {
  436. this.bankList = res.data.data;
  437. if (this.firstEnter) {
  438. this.showAllCharpter();
  439. this.firstEnter = false;
  440. }
  441. });
  442. },
  443. /**
  444. * 展示第一个章下的节内容
  445. */
  446. showAllCharpter() {
  447. for (let i = 0; i < this.bankList.length; i++) {
  448. if (this.bankList[i].type == 1) {
  449. //第一个是模块直接展开,再展开章下面的节
  450. this.$api
  451. .goodsChapterList({
  452. moduleExamId: this.bankList[i].majorId,
  453. })
  454. .then((res) => {
  455. this.$set(this.bankList[i], "showList", true);
  456. this.$set(this.bankList[i], "list", res.data.data);
  457. if (this.bankList[i].list.length) {
  458. this.changeItem(
  459. i,
  460. this.bankList[i].list[0].chapterExamId,
  461. this.bankList[i].type,
  462. 0,
  463. this.bankList[i].majorId
  464. );
  465. }
  466. });
  467. break;
  468. } else if (this.bankList[i].type == 2) {
  469. //第一个章展开下面的节
  470. this.changeItem(
  471. i,
  472. this.bankList[i].majorId,
  473. this.bankList[i].type,
  474. "",
  475. 0
  476. );
  477. break;
  478. }
  479. }
  480. },
  481. getDetail() {
  482. this.$api.commonGoodsDetail(this.id).then((res) => {
  483. console.log(res);
  484. this.goodsData = res.data.data;
  485. });
  486. },
  487. /**
  488. * 去做题
  489. */
  490. async toDo(id, goodsId, moduleId = 0, chapterId = 0) {
  491. console.log(id, goodsId, moduleId, chapterId);
  492. let count = await this.examRecordCount(id);
  493. let answerNum = await this.getExamDetail(id);
  494. //超过答题次数
  495. if (answerNum > 0 && count >= answerNum) {
  496. this.$u.toast("该试卷只能答题" + answerNum + "次!");
  497. return;
  498. }
  499. uni.navigateTo({
  500. url:
  501. "/pages2/bank/questionBank?orderGoodsId=" +
  502. this.orderGoodsId +
  503. "&id=" +
  504. id +
  505. "&goodsid=" +
  506. goodsId +
  507. "&moduleId=" +
  508. moduleId +
  509. "&chapterId=" +
  510. chapterId +
  511. "",
  512. });
  513. },
  514. /**
  515. * 查询试卷历史做题次数
  516. */
  517. examRecordCount(examId) {
  518. return new Promise((resolve) => {
  519. this.$api
  520. .examRecordCount({
  521. examId: examId,
  522. orderGoodsId: this.orderGoodsId,
  523. })
  524. .then((res) => {
  525. resolve(res.data.data);
  526. });
  527. });
  528. },
  529. /**
  530. * @param {Object} exam_id
  531. * 获取试卷可以做的次数
  532. */
  533. getExamDetail(exam_id) {
  534. return new Promise((resolve) => {
  535. this.$api.getExamDetail(exam_id).then((res) => {
  536. resolve(res.data.data.answerNum);
  537. });
  538. });
  539. },
  540. /**
  541. * 获取用户商品统计数据
  542. */
  543. goodsBankQuestionNum() {
  544. this.$api.goodsBankQuestionNum(this.orderGoodsId).then((res) => {
  545. this.goodsCount = res.data.data;
  546. });
  547. },
  548. goodsBankList() {
  549. this.$api
  550. .goodsBankList({
  551. goodsId: this.id,
  552. })
  553. .then((res) => {
  554. console.log(res);
  555. this.bankList = res.data.data;
  556. });
  557. },
  558. getCollectNum() {
  559. this.$api
  560. .goodsCollectExamList({
  561. orderGoodsId: this.orderGoodsId,
  562. })
  563. .then((res) => {
  564. let total = 0;
  565. res.data.rows.forEach((item) => {
  566. total += item.questionNum;
  567. });
  568. this.collectTotal = total;
  569. });
  570. },
  571. getWrongNum() {
  572. this.$api
  573. .wrongRecordList({
  574. orderGoodsId: this.orderGoodsId,
  575. })
  576. .then((res) => {
  577. let total = 0;
  578. res.data.rows.forEach((item) => {
  579. total += item.wrongQuestionNum;
  580. });
  581. this.wrongTotal = total;
  582. });
  583. },
  584. clickModule(id, index) {
  585. if (this.bankList[index].list) {
  586. this.$set(
  587. this.bankList[index],
  588. "showList",
  589. !this.bankList[index].showList
  590. );
  591. return;
  592. }
  593. this.$api
  594. .goodsChapterList({
  595. moduleExamId: id,
  596. orderGoodsId: this.orderGoodsId,
  597. goodsId: this.id,
  598. })
  599. .then((res) => {
  600. this.$set(this.bankList[index], "showList", true);
  601. this.$set(this.bankList[index], "list", res.data.data);
  602. });
  603. },
  604. changeItem(index1, id, type, index2, moduleExamId) {
  605. if (type == 1) {
  606. if (this.bankList[index1].list[index2].list) {
  607. this.$set(
  608. this.bankList[index1].list[index2],
  609. "showList",
  610. !this.bankList[index1].list[index2].showList
  611. );
  612. return;
  613. }
  614. this.$api
  615. .bankExamExamList({
  616. moduleExamId: moduleExamId,
  617. orderGoodsId: this.orderGoodsId,
  618. chapterExamId: id,
  619. goodsId: this.id,
  620. })
  621. .then((res) => {
  622. this.$set(this.bankList[index1].list[index2], "showList", true);
  623. this.$set(
  624. this.bankList[index1].list[index2],
  625. "list",
  626. res.data.data
  627. );
  628. });
  629. } else if (type == 2) {
  630. if (this.bankList[index1].list) {
  631. this.$set(
  632. this.bankList[index1],
  633. "showList",
  634. !this.bankList[index1].showList
  635. );
  636. return;
  637. }
  638. this.$api
  639. .bankExamExamList({
  640. moduleExamId: moduleExamId,
  641. orderGoodsId: this.orderGoodsId,
  642. chapterExamId: id,
  643. goodsId: this.id,
  644. })
  645. .then((res) => {
  646. this.$set(this.bankList[index1], "showList", true);
  647. this.$set(this.bankList[index1], "list", res.data.data);
  648. });
  649. }
  650. },
  651. },
  652. };
  653. </script>
  654. <style>
  655. page {
  656. background-color: #eaeef1;
  657. }
  658. </style>
  659. <style lang="scss" scope>
  660. .top {
  661. padding: 16rpx 16rpx 0;
  662. display: flex;
  663. justify-content: space-between;
  664. .left {
  665. width: 326rpx;
  666. height: 180rpx;
  667. background: #ffffff;
  668. box-shadow: 0px 0px 16rpx 4rpx rgba(145, 156, 178, 0.1);
  669. border-radius: 16rpx;
  670. background: #fff;
  671. padding: 20rpx;
  672. .title {
  673. font-size: 24rpx;
  674. line-height: 24rpx;
  675. color: #333333;
  676. }
  677. .progress {
  678. margin-top: 10rpx;
  679. display: flex;
  680. .item-left {
  681. flex: 1;
  682. border-right: 1rpx solid #eeeeee;
  683. .desc {
  684. text {
  685. line-height: 24rpx;
  686. font-size: 24rpx;
  687. color: #999999;
  688. }
  689. }
  690. .percent {
  691. margin-top: 10rpx;
  692. line-height: 64rpx;
  693. font-size: 64rpx;
  694. font-weight: bold;
  695. color: #007aff;
  696. }
  697. .per {
  698. font-size: 30rpx;
  699. color: #007aff;
  700. }
  701. }
  702. .item-right {
  703. padding-left: 10rpx;
  704. flex: 1;
  705. text {
  706. line-height: 24rpx;
  707. font-size: 24rpx;
  708. color: #999999;
  709. }
  710. .orange {
  711. line-height: 24rpx;
  712. font-size: 24rpx;
  713. font-weight: bold;
  714. color: #ff9500;
  715. }
  716. .down {
  717. margin-top: 40rpx;
  718. }
  719. }
  720. }
  721. }
  722. .right {
  723. width: 180rpx;
  724. height: 180rpx;
  725. background: #ffffff;
  726. box-shadow: 0px 0px 16rpx 4rpx rgba(145, 156, 178, 0.1);
  727. background: #fff;
  728. padding: 20rpx;
  729. border-radius: 16rpx;
  730. .title {
  731. font-size: 24rpx;
  732. line-height: 24rpx;
  733. color: #333333;
  734. }
  735. .number {
  736. font-weight: bold;
  737. text-align: center;
  738. margin-top: 46rpx;
  739. font-size: 64rpx;
  740. line-height: 64rpx;
  741. color: #007aff;
  742. }
  743. }
  744. }
  745. .courseName {
  746. font-size: 30rpx;
  747. color: #666;
  748. white-space: nowrap;
  749. overflow: hidden;
  750. text-overflow: ellipsis;
  751. }
  752. .moduleItem {
  753. height: 80rpx;
  754. color: #333333;
  755. font-size: 32rpx;
  756. line-height: 80rpx;
  757. font-weight: bold;
  758. display: flex;
  759. justify-content: space-between;
  760. }
  761. .icon_up {
  762. width: 32rpx;
  763. height: 32rpx;
  764. }
  765. .title-list {
  766. background: #eaeef1;
  767. padding: 16rpx 16rpx 124rpx;
  768. .content {
  769. .list {
  770. background: #fff;
  771. margin-bottom: 30rpx;
  772. overflow: hidden;
  773. border-radius: 16rpx;
  774. padding: 10rpx 16rpx;
  775. .module {
  776. font-size: 30rpx;
  777. color: #333333;
  778. .icon {
  779. margin-right: 10rpx;
  780. }
  781. }
  782. .section {
  783. font-size: 30rpx;
  784. font-family: PingFang SC;
  785. font-weight: bold;
  786. color: #666;
  787. white-space: nowrap;
  788. overflow: hidden;
  789. text-overflow: ellipsis;
  790. margin: 20rpx 0;
  791. display: flex;
  792. align-items: center;
  793. }
  794. .article {
  795. height: 80rpx;
  796. display: flex;
  797. align-items: center;
  798. font-size: 30rpx;
  799. color: #666666;
  800. border-bottom: 1rpx solid #eeeeee;
  801. display: flex;
  802. .flex_auto {
  803. flex: 1;
  804. }
  805. &:nth-last-of-type(1) {
  806. border: 0;
  807. }
  808. &.active {
  809. color: #007aff;
  810. .btn {
  811. width: 96rpx;
  812. height: 48rpx;
  813. line-height: 48rpx;
  814. text-align: center;
  815. color: #fff;
  816. font-size: 30rpx;
  817. border-radius: 24rpx;
  818. background: #007aff;
  819. margin-left: 36rpx;
  820. border-radius: 24rpx;
  821. &.disabled {
  822. opacity: 0.6;
  823. }
  824. }
  825. }
  826. }
  827. }
  828. }
  829. }
  830. </style>