test.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886
  1. <template>
  2. <view class="container">
  3. <view class="topBox">
  4. <view class="topMain" v-if="testList.length>0">
  5. <view class="testTitle">
  6. <view>{{serialIndex+1}}、</view>
  7. <view class="titleStyle">{{typeDice[testList[serialIndex].type]}}</view>
  8. <view class="questionTypes">{{testList[serialIndex].title}}</view>
  9. </view>
  10. <view class="topic">
  11. {{testList[serialIndex].questionStem}}
  12. </view>
  13. <view class="answer">
  14. <!--填空 -->
  15. <view v-if="testList[serialIndex].type=='gap'">
  16. <view v-for="(item,index) in testList[serialIndex].option" :key="index" class="gapStyle">
  17. <uni-easyinput v-model="testList[serialIndex].option[index].answer" placeholder="请输入您的答案"
  18. @input='changeInput' />
  19. </view>
  20. </view>
  21. <!--论述 -->
  22. <view v-else-if="testList[serialIndex].type=='discuss'">
  23. <uni-easyinput type="textarea" maxlength='-1' autoHeight v-model="testList[serialIndex].answer"
  24. placeholder="请输入您的答案" @input='changeInput' />
  25. </view>
  26. <!--单选判断 -->
  27. <view v-else-if="testList[serialIndex].type=='single'||testList[serialIndex].type=='judge'">
  28. <view class="singleClass" v-for="(item,index) in testList[serialIndex].option" :key="index" @click="changeSingleIndex(item.id)">
  29. <view class="mark"
  30. :class="{active: testList[serialIndex].answer==item.id}">
  31. <!-- :class="{active: testList[serialIndex].answer!=''||testList[serialIndex].answer=='0'?index == testList[serialIndex].answer:false}"> -->
  32. {{option[index]}}
  33. </view>
  34. <view style="width: 90%;margin-top: 10rpx;">
  35. {{item.content}}
  36. </view>
  37. </view>
  38. </view>
  39. <!--多选 -->
  40. <view v-else-if="testList[serialIndex].type=='multiple'">
  41. <view class="singleClass" v-for="(item,index) in testList[serialIndex].option" :key="index" @click="changeMultipleIndex(item.id)">
  42. <view class="mark" :class="{active: testList[serialIndex].answer.indexOf(item.id) != -1}"
  43. >
  44. {{option[index]}}
  45. </view>
  46. <view style="width: 90%;margin-top: 10rpx;">
  47. {{item.content}}
  48. </view>
  49. </view>
  50. </view>
  51. </view>
  52. <view class="contenBox">
  53. <view style="display: flex; align-items: center;">
  54. <button type="primary" class="buttonStyle" @click="upQuestion" v-if="serialIndex>0">上一题</button>
  55. <button type="primary" class="buttonStyle" @click="nextQuestion">下一题</button>
  56. </view>
  57. </view>
  58. </view>
  59. </view>
  60. <view class="footer">
  61. <view class="footer_left footer_flex">
  62. <view @click="paper" class="cursorStyle">
  63. <uni-icons type="upload" size="20" color="#606266" class="iconMargin"></uni-icons> 交卷
  64. </view>
  65. </view>
  66. <view class="footer_center footer_flex">
  67. <uni-countdown ref="countDown" :show-day="false" :hour="0" :minute="second" :second="mini"
  68. class="iconMargin" @timeup="handPaper">
  69. </uni-countdown>
  70. </view>
  71. <view class="footer_right footer_flex">
  72. <view @click="popupNumber">
  73. <uni-icons type="wallet" size="20" color="#606266" class="iconMargin"></uni-icons>
  74. {{serialIndex+1}}/{{testList.length}}
  75. </view>
  76. </view>
  77. </view>
  78. <uni-popup ref="popupNumber" type="left">
  79. <view class="popupMain">
  80. <uni-icons type="closeempty" size="20" class="iPosition" @click="popupClose"></uni-icons>
  81. <view class="fontTitile">
  82. 答题目录
  83. </view>
  84. <view class="hr"></view>
  85. <view class="serial">
  86. <view class="mark" v-for="(item,index) in testList" :key="index" @click="changeIndex(index)"
  87. :class="{active: index == serialIndex}">
  88. {{index+1}}
  89. </view>
  90. </view>
  91. </view>
  92. </uni-popup>
  93. <view class="phb" @click="goHome">
  94. <uni-icons type="home" size="20" color="#FFFFFF"></uni-icons>
  95. 返回
  96. </view>
  97. <view class="outLogin" @click="outLogin" v-if="isUser">
  98. <uni-icons type="arrow-left" size="20" color="#FFFFFF"></uni-icons>
  99. 退出
  100. </view>
  101. </view>
  102. </template>
  103. <script>
  104. import {
  105. startExam,
  106. answerSheet,
  107. unbindMiniOpenid,
  108. } from "../../utils/url.js";
  109. export default {
  110. data() {
  111. return {
  112. isUser: false,
  113. second: 10,
  114. mini: 0,
  115. // 题型字典
  116. typeDice: {
  117. single: '单选题',
  118. multiple: '多选题',
  119. judge: '判断题',
  120. gap: '填空题',
  121. discuss: '论述题',
  122. },
  123. // 选项前标签
  124. option: {
  125. 0: 'A',
  126. 1: 'B',
  127. 2: 'C',
  128. 3: 'D',
  129. 4: 'E',
  130. 5: 'F',
  131. 6: 'G',
  132. 7: 'H',
  133. 8: 'I',
  134. 9: 'J',
  135. 10: 'K',
  136. 11: 'L',
  137. 12: 'M',
  138. 13: 'N',
  139. 14: 'O',
  140. 15: 'P',
  141. 16: 'Q',
  142. 17: 'R',
  143. 18: 'S',
  144. 19: 'T',
  145. 20: 'U',
  146. 21: 'V',
  147. 22: 'W',
  148. 23: 'X',
  149. 24: 'Y',
  150. 25: 'Z'
  151. },
  152. //当前题的索引
  153. serialIndex: 0,
  154. //单选single 多选multiple 判断judge 填空gap 论述discuss
  155. testList: [
  156. // {
  157. // type: 'gap',
  158. // title: '驾校题',
  159. // questionStem: '驾驶人连续驾驶机动车超过__小时,停车休息时间不得少于__分钟',
  160. // answer: '',
  161. // option: [{
  162. // tiankong: '',
  163. // },
  164. // {
  165. // tiankong: '',
  166. // }
  167. // ]
  168. // },
  169. // {
  170. // type: 'single',
  171. // title: '初一数学',
  172. // questionStem: '一个多边形的每个内角都是144度,这个多边形是()',
  173. // answer: '',
  174. // option: [{
  175. // content: '八边形'
  176. // },
  177. // {
  178. // content: '十边形'
  179. // },
  180. // {
  181. // content: '十二边形'
  182. // },
  183. // {
  184. // content: '十四边形'
  185. // },
  186. // ]
  187. // },
  188. // {
  189. // type: 'multiple',
  190. // title: '初一政治',
  191. // questionStem: '学生学习的三个基本资料本领域包括()',
  192. // answer: [],
  193. // option: [{
  194. // content: '认知'
  195. // },
  196. // {
  197. // content: '情感'
  198. // },
  199. // {
  200. // content: '意识'
  201. // },
  202. // {
  203. // content: '动作技能'
  204. // },
  205. // ]
  206. // },
  207. // {
  208. // type: 'judge',
  209. // title: '驾校题',
  210. // questionStem: '驾驶人连续驾驶机动车超过4小时,停车休息时间不得少于20分钟',
  211. // answer: '',
  212. // option: [{
  213. // content: '正确'
  214. // },
  215. // {
  216. // content: '错误'
  217. // },
  218. // ]
  219. // },
  220. // {
  221. // type: 'discuss',
  222. // title: '论述题',
  223. // questionStem: '谈一谈对学校的看法',
  224. // answer: '',
  225. // option: [{
  226. // tiankong: ''
  227. // }, ]
  228. // },
  229. ],
  230. }
  231. },
  232. onLoad: function(option) { //option为object类型,会序列化上个页面传递的参数
  233. let data = uni.getStorageSync("examData");
  234. let res = uni.getStorageSync("user");
  235. this.second = parseInt(data.paperPeriod);
  236. this.examId = data.id;
  237. let paperData = uni.getStorageSync("paper");
  238. this.studentTestPaperId = paperData.id;
  239. this.changePaperData(paperData.paper.testQuestionsList);
  240. //存在未答试卷
  241. if (option.paper) {
  242. let parmar = uni.getStorageSync("testData");
  243. this.compareTest(parmar);
  244. let seIndex = uni.getStorageSync("serialIndex");
  245. if (seIndex) {
  246. this.serialIndex = seIndex;
  247. }
  248. }
  249. uni.setStorageSync("oldExamId", data.id);
  250. uni.setStorageSync("oldExamType", data.examType);
  251. uni.setStorageSync("oldLoginName", res.loginName);
  252. uni.setStorageSync("examFlg", 1);
  253. // console.log(data.id,'data');
  254. // console.log(res.loginName,'res');
  255. // examFlg
  256. // uni.setStorageSync("examId",);
  257. // if (option.paper) {
  258. // let paperData = uni.getStorageSync("paper");
  259. // this.studentTestPaperId = paperData.id;
  260. // console.log(paperData, 'paperData');
  261. // this.changePaperData(paperData.paper.testQuestionsList);
  262. // } else {
  263. // // console.log(option.paperPeriod, 'option.paperPeriod');
  264. // // this.second = 1;
  265. // this.$refs.countDown.update();
  266. // this.getExam(res.examId, res.loginName, res.loginPassword)
  267. // }
  268. },
  269. onShow() {
  270. uni.setStorageSync("isStop", true);
  271. this.time = this.getTime();
  272. if (uni.getStorageSync("user")) {
  273. this.isUser = true;
  274. } else {
  275. this.isUser = false;
  276. }
  277. },
  278. methods: {
  279. goHome() {
  280. uni.navigateTo({
  281. url: '/pages/index/index'
  282. });
  283. },
  284. async unbindMiniOpenid() {
  285. let res = {
  286. examId: uni.getStorageSync("examData").id,
  287. openId: uni.getStorageSync("openId")
  288. }
  289. let data = await unbindMiniOpenid(res)
  290. uni.setStorageSync("token", "");
  291. uni.setStorageSync("user", "");
  292. uni.showToast({
  293. title: '退出成功',
  294. icon: 'none',
  295. duration: 1500
  296. })
  297. uni.navigateTo({
  298. url: '/pages/index/index'
  299. });
  300. },
  301. outLogin() {
  302. let that=this;
  303. uni.showModal({
  304. title: '提示',
  305. content: '确定退出当前用户吗?',
  306. success: function(res) {
  307. if (res.confirm) {
  308. // #ifdef H5
  309. uni.setStorageSync("token", "");
  310. uni.setStorageSync("user", "");
  311. uni.showToast({
  312. title: '退出成功',
  313. icon: 'none',
  314. duration: 5000
  315. })
  316. uni.navigateTo({
  317. url: '/pages/index/index'
  318. });
  319. // #endif
  320. // #ifdef MP-WEIXIN
  321. that.unbindMiniOpenid();
  322. // #endif
  323. } else if (res.cancel) {
  324. console.log('用户点击取消');
  325. }
  326. }
  327. });
  328. },
  329. compareTest(parmar) {
  330. if (!parmar) {
  331. return false
  332. }
  333. let is = true;
  334. if (parmar.length === this.testList.length) {
  335. this.testList.map((item, index) => {
  336. if (item.id != parmar[index].id) {
  337. is = false;
  338. }
  339. })
  340. if (is) {
  341. this.testList = parmar;
  342. }
  343. }
  344. },
  345. getTime() {
  346. let date = new Date(),
  347. year = date.getFullYear(),
  348. month = date.getMonth() + 1,
  349. day = date.getDate(),
  350. hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(),
  351. minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(),
  352. second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
  353. month >= 1 && month <= 9 ? (month = "0" + month) : "";
  354. day >= 0 && day <= 9 ? (day = "0" + day) : "";
  355. let timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
  356. return timer;
  357. },
  358. async getExam(examId, loginName, loginPassword) {
  359. uni.showLoading({
  360. title: '加载中'
  361. });
  362. let data = await startExam(examId, loginName, loginPassword);
  363. uni.hideLoading();
  364. this.studentTestPaperId = data.data.id;
  365. this.changePaperData(data.data.paper.testQuestionsList);
  366. },
  367. // qaq 问答题
  368. // singleChoice 单选题
  369. // judgment 判断题
  370. // cloze 填空题
  371. // multipleChoice 多选题
  372. changePaperData(data) {
  373. this.testList = [];
  374. for (var key in data) {
  375. if (data[key]) {
  376. switch (key) {
  377. case 'qaq':
  378. data[key].map(item => {
  379. this.testList.push({
  380. type: 'discuss',
  381. id: item.id,
  382. title: item.courseName,
  383. questionStem: item.stem,
  384. answer: '',
  385. })
  386. });
  387. break;
  388. case 'singleChoice':
  389. data[key].map(item => {
  390. this.testList.push({
  391. type: 'single',
  392. id: item.id,
  393. title: item.courseName,
  394. questionStem: item.stem,
  395. answer: '',
  396. option: item.testAnswerList.map(it => {
  397. return {
  398. id: it.id,
  399. content: it.answer
  400. }
  401. })
  402. })
  403. });
  404. break;
  405. case 'judgment':
  406. data[key].map(item => {
  407. this.testList.push({
  408. type: 'judge',
  409. id: item.id,
  410. title: item.courseName,
  411. questionStem: item.stem,
  412. answer: '',
  413. option: item.testAnswerList.map(it => {
  414. return {
  415. id: it.id,
  416. content: it.answer
  417. }
  418. })
  419. })
  420. });
  421. break;
  422. case 'cloze':
  423. data[key].map(item => {
  424. this.testList.push({
  425. type: 'gap',
  426. id: item.id,
  427. title: item.courseName,
  428. questionStem: item.stem,
  429. answer: '',
  430. option: item.testAnswerList.map(it => {
  431. return {
  432. answer: ''
  433. }
  434. })
  435. })
  436. });
  437. break;
  438. case 'multipleChoice':
  439. data[key].map(item => {
  440. this.testList.push({
  441. type: 'multiple',
  442. id: item.id,
  443. title: item.courseName,
  444. questionStem: item.stem,
  445. answer: [],
  446. option: item.testAnswerList.map(it => {
  447. return {
  448. id: it.id,
  449. content: it.answer
  450. }
  451. })
  452. })
  453. });
  454. break;
  455. default:
  456. break;
  457. }
  458. }
  459. }
  460. },
  461. paper() {
  462. let that = this;
  463. uni.showModal({
  464. title: '提醒',
  465. content: '确实交卷吗?',
  466. success: function(res) {
  467. if (res.confirm) {
  468. that.goPerformance();
  469. // alert('用户点击确认');
  470. } else if (res.cancel) {
  471. // alert('用户点击取消');
  472. }
  473. }
  474. })
  475. },
  476. popupNumber() {
  477. this.$refs.popupNumber.open()
  478. },
  479. popupClose() {
  480. this.$refs.popupNumber.close()
  481. },
  482. async goPerformance(isGo) {
  483. let answers = [];
  484. // let indexList=[];
  485. let accomplish = false;
  486. this.testList.map((item, index) => {
  487. // single: '单选题', answer里存索引
  488. // multiple: '多选题',answer里存数组
  489. // judge: '判断题',answer里存索引
  490. // gap: '填空题',答案存在option里面
  491. // discuss: '论述题',answer里存答案
  492. switch (item.type) {
  493. case 'single':
  494. if (item.answer) {} else {
  495. accomplish = true;
  496. }
  497. if (item.answer == "" || item.answer == null || item
  498. .answer == undefined) {
  499. accomplish = true;
  500. } else {
  501. answers.push({
  502. id: item.id,
  503. answer: item.answer
  504. })
  505. }
  506. break;
  507. case 'multiple':
  508. if (item.answer && item.answer.length > 0) {
  509. answers.push({
  510. id: item.id,
  511. answer: item.answer.join(',')
  512. })
  513. } else {
  514. accomplish = true;
  515. }
  516. break;
  517. case 'judge':
  518. if (item.answer) {} else {
  519. accomplish = true;
  520. }
  521. if (item.answer == "" || item.answer == null || item
  522. .answer == undefined) {
  523. accomplish = true;
  524. } else {
  525. answers.push({
  526. id: item.id,
  527. answer: item.answer
  528. })
  529. }
  530. break;
  531. case 'gap':
  532. answers.push({
  533. id: item.id,
  534. answer: item.option.map(item => {
  535. if (item.answer == "" || item.answer == null || item
  536. .answer == undefined) {
  537. accomplish = true;
  538. } else {
  539. return item.answer
  540. }
  541. }).join(',')
  542. })
  543. break;
  544. case 'discuss':
  545. if (item.answer) {
  546. answers.push({
  547. id: item.id,
  548. answer: item.answer
  549. })
  550. } else {
  551. accomplish = true;
  552. }
  553. break;
  554. default:
  555. break;
  556. }
  557. })
  558. uni.showLoading({
  559. title: '加载中'
  560. });
  561. await answerSheet({
  562. answers: JSON.stringify(answers),
  563. studentTestPaperId: this.studentTestPaperId,
  564. answerBegin: this.time
  565. });
  566. uni.hideLoading();
  567. uni.setStorageSync("isStop", false);
  568. uni.setStorageSync("paper", null);
  569. uni.setStorageSync("examFlg", 0);
  570. uni.setStorageSync("testData", null);
  571. uni.setStorageSync("serialIndex", 0);
  572. if(isGo)
  573. {
  574. let that=this;
  575. uni.showModal({
  576. title: '提醒',
  577. content: '答题时间到,请交卷!',
  578. showCancel: false,
  579. success: function(res) {
  580. if (res.confirm) {
  581. uni.redirectTo({
  582. url: '/pages/performance/performance?id=' + that.studentTestPaperId
  583. });
  584. } else if (res.cancel) {
  585. // alert('用户点击取消');
  586. }
  587. }
  588. })
  589. }else
  590. {
  591. uni.redirectTo({
  592. url: '/pages/performance/performance?id=' + this.studentTestPaperId
  593. });
  594. }
  595. },
  596. answerSheet(data) {
  597. uni.showLoading({
  598. title: '加载中'
  599. });
  600. uni.request({
  601. url: 'http://10.16.4.5:8080/education/app/answerSheet/add',
  602. method: 'POST',
  603. header: {
  604. 'Authorization': "app-829f4a08-d148-4d0f-a4ad-e22695f44426",
  605. // 'Authorization': uni.getStorageSync('token'),
  606. // 'content-type': 'application/x-www-form-urlencoded',
  607. 'content-type': 'application/json'
  608. },
  609. data: data,
  610. success: (response) => {
  611. },
  612. fail: (err) => {
  613. return uni.showToast({
  614. title: '请求接口失败' + err
  615. })
  616. reject(err)
  617. },
  618. complete: () => {
  619. uni.hideLoading();
  620. }
  621. })
  622. },
  623. handPaper() {
  624. let that = this;
  625. if (uni.getStorageSync('isStop')) {
  626. that.goPerformance(true);
  627. }
  628. },
  629. //单选判断选中
  630. changeSingleClass(index) {
  631. if (index == this.testList[this.serialIndex].answer) {
  632. return 'active'
  633. }
  634. return ''
  635. },
  636. //单选判断点击事件
  637. changeSingleIndex(id) {
  638. this.testList[this.serialIndex].answer = id;
  639. this.saveTest();
  640. },
  641. changeClass(index) {
  642. if (index == this.serialIndex) {
  643. return 'active'
  644. }
  645. return ''
  646. },
  647. changeIndex(index) {
  648. this.serialIndex = index;
  649. },
  650. changeMultipleClass(item, andList) {
  651. if (this.testList[this.serialIndex].answer.indexOf(item) != -1) {
  652. return 'active'
  653. }
  654. return ''
  655. },
  656. changeMultipleIndex(item) {
  657. if (this.testList[this.serialIndex].answer.indexOf(item) != -1) {
  658. this.testList[this.serialIndex].answer.splice(this.testList[this.serialIndex].answer.indexOf(item), 1)
  659. } else {
  660. this.testList[this.serialIndex].answer.push(item)
  661. }
  662. this.saveTest();
  663. },
  664. nextQuestion() {
  665. let that = this;
  666. if ((this.serialIndex + 1) == this.testList.length) {
  667. uni.showModal({
  668. title: '提醒',
  669. content: '已经是最后一题了,是否交卷?',
  670. success: function(res) {
  671. if (res.confirm) {
  672. that.goPerformance();
  673. // alert('用户点击确认');
  674. } else if (res.cancel) {
  675. // alert('用户点击取消');
  676. }
  677. }
  678. })
  679. } else {
  680. this.serialIndex++;
  681. }
  682. },
  683. upQuestion() {
  684. this.serialIndex--;
  685. },
  686. //简答、填空发生改变 进行本地缓存
  687. changeInput(e) {
  688. this.saveTest();
  689. },
  690. saveTest() {
  691. uni.setStorageSync("testData", this.testList);
  692. uni.setStorageSync("serialIndex", this.serialIndex);
  693. }
  694. }
  695. }
  696. </script>
  697. <style scoped>
  698. .container {
  699. position: absolute;
  700. height: 100%;
  701. width: 100%;
  702. background-color: #FFFFFF !important;
  703. color: #606266;
  704. }
  705. .topBox {
  706. height: 92%;
  707. background-color: #f7f8fa !important;
  708. position: relative;
  709. }
  710. .contenBox {
  711. position: absolute;
  712. bottom: 50rpx;
  713. width: 80%;
  714. }
  715. .footer {
  716. height: 8%;
  717. display: flex;
  718. }
  719. .footer_left {
  720. width: 30%;
  721. }
  722. .footer_center {
  723. width: 60%;
  724. }
  725. .footer_right {
  726. width: 30%;
  727. }
  728. .footer_flex {
  729. display: flex;
  730. justify-content: center;
  731. align-items: center;
  732. }
  733. .iconMargin {
  734. margin-right: 10rpx;
  735. }
  736. .topMain {
  737. width: 80%;
  738. height: 100%;
  739. margin: auto;
  740. display: flex;
  741. flex-direction: column;
  742. }
  743. .testTitle {
  744. display: flex;
  745. }
  746. .titleStyle {
  747. background-color: rgb(245, 166, 35) !important;
  748. padding: 4rpx 24rpx;
  749. border-radius: 5rpx;
  750. color: #FFFFFF;
  751. margin-right: 30rpx;
  752. width: 100rpx;
  753. height: 45rpx;
  754. }
  755. .questionTypes {
  756. padding: 4rpx 0;
  757. }
  758. .topic {
  759. margin: 40rpx 0;
  760. }
  761. .answer {
  762. height: 68%;
  763. overflow-y: auto;
  764. }
  765. .buttonStyle {
  766. /* width: 40%; */
  767. /* margin-top: 60rpx; */
  768. padding: 0 80rpx;
  769. font-size: 30rpx;
  770. background-color: rgb(245, 166, 35) !important;
  771. border-radius: 50rpx;
  772. }
  773. .cursorStyle {
  774. cursor: pointer;
  775. }
  776. .popupMain {
  777. width: 76vw;
  778. height: 100vh;
  779. background-color: #FFFFFF;
  780. position: relative;
  781. }
  782. .iPosition {
  783. position: absolute;
  784. right: 20rpx;
  785. top: 20rpx
  786. }
  787. .serial {
  788. display: flex;
  789. flex-wrap: wrap;
  790. }
  791. .mark {
  792. width: 50rpx;
  793. height: 50rpx;
  794. text-align: center;
  795. line-height: 50rpx;
  796. border-radius: 50%;
  797. margin: 10rpx;
  798. background-color: #e7ebf3;
  799. color: #000000;
  800. }
  801. .fontTitile {
  802. text-align: center;
  803. padding-top: 60rpx;
  804. }
  805. .hr {
  806. background-color: #dcdfe6;
  807. width: 100%;
  808. height: 2rpx;
  809. margin: 20rpx 0;
  810. }
  811. .active {
  812. background-color: rgb(245, 166, 35);
  813. color: #FFFFFF;
  814. }
  815. .singleClass {
  816. display: flex;
  817. }
  818. .gapStyle {
  819. margin-bottom: 20rpx;
  820. }
  821. .outLogin {
  822. position: fixed;
  823. right: 0;
  824. bottom: 8%;
  825. display: flex;
  826. background-color: rgb(245, 166, 35);
  827. padding: 10rpx 10rpx 10rpx 30rpx;
  828. border-radius: 30rpx 0 0 30rpx;
  829. font-size: 25rpx;
  830. color: #fff;
  831. }
  832. .phb {
  833. position: fixed;
  834. right: 0;
  835. bottom: 14%;
  836. display: flex;
  837. background-color: rgb(245, 166, 35);
  838. padding: 10rpx 10rpx 10rpx 30rpx;
  839. border-radius: 30rpx 0 0 30rpx;
  840. font-size: 25rpx;
  841. color: #fff;
  842. }
  843. </style>