index.vue 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088
  1. <template>
  2. <div class="my-course">
  3. <div class="my-course__header">
  4. <el-tabs v-model="activeName">
  5. <el-tab-pane label="全部课程" name="1"></el-tab-pane>
  6. <el-tab-pane label="考前培训" name="2"></el-tab-pane>
  7. <el-tab-pane label="继续教育" name="3"></el-tab-pane>
  8. </el-tabs>
  9. </div>
  10. <div class="my-course__body">
  11. <div class="list">
  12. <div
  13. class="course-item"
  14. v-for="(item, index) in courseList"
  15. :key="index"
  16. >
  17. <div class="course-item__header">
  18. <div class="state">
  19. <template
  20. v-if="
  21. sysTime >= item.serviceStartTime &&
  22. sysTime <= item.serviceEndTime
  23. "
  24. >
  25. 学习状态:
  26. <div class="note" v-if="item.stuAllNum == 0">未学习</div>
  27. <div
  28. class="note note--yellow"
  29. v-else-if="
  30. item.stuAllNum > 0 && item.stuAllNum < item.secAllNum
  31. "
  32. >
  33. 学习中
  34. </div>
  35. <div
  36. class="note note--green"
  37. v-else-if="item.stuAllNum >= item.secAllNum"
  38. >
  39. 已学完
  40. </div>
  41. </template>
  42. <template v-else>
  43. <span class="red"> 已过学习服务期,不可以学习了哦!</span>
  44. </template>
  45. <template v-if="item.profileTpStatus == 1">
  46. 资料审核状态:
  47. <div class="note" v-if="item.profileStatus == null">
  48. 未提交资料
  49. </div>
  50. <div
  51. class="note note--green"
  52. v-else-if="item.profileStatus == 1"
  53. >
  54. 已通过
  55. </div>
  56. <div
  57. class="note note--yellow"
  58. v-else-if="item.profileStatus == 2"
  59. >
  60. 审核中
  61. </div>
  62. <div
  63. class="note note--yellow"
  64. v-else-if="item.profileStatus == 3"
  65. >
  66. 待完善
  67. </div>
  68. </template>
  69. <!-- 学时审核状态可以审核 -->
  70. <template v-if="item.periodStatus != -1">
  71. <template v-if="item.periodStatus == 0"
  72. >机构审核:
  73. <div class="note">学时审核不通过</div>
  74. </template>
  75. <template v-else-if="item.periodStatus == 2"
  76. >机构审核:
  77. <div class="note note--yellow">学时待审核</div></template
  78. >
  79. <template v-else-if="item.periodStatus == 1">
  80. <template v-if="item.periodPlush > 0"
  81. ><div class="note note--green">
  82. 学时已上报注册中心
  83. </div></template
  84. >
  85. <template v-else
  86. >机构审核:
  87. <div class="note note--green">学时审核通过</div></template
  88. >
  89. </template>
  90. <template
  91. v-if="item.subscribeId != null && item.periodStatus == 1"
  92. >
  93. <template v-if="item.subExamStatus === null">
  94. 待预约考试
  95. </template>
  96. <template
  97. v-else-if="
  98. item.subExamStatus === 0 &&
  99. sysTime < item.subApplySiteStartTime
  100. "
  101. >
  102. 待考试,考试时间:{{
  103. $tools.timestampToTime(
  104. item.subApplySiteStartTime,
  105. true,
  106. true
  107. )
  108. }}
  109. -
  110. {{
  111. $tools.timestampToTime(
  112. item.subaApplySiteEndTime,
  113. true,
  114. true
  115. )
  116. }}
  117. </template>
  118. <template v-else-if="item.subExamStatus === 0"
  119. >待出考试结果</template
  120. >
  121. <template v-else-if="item.subExamStatus === 1">
  122. <span v-if="item.subResult === null">待出考试结果</span>
  123. <span v-if="item.subResult === 0"
  124. >考试结果:不通过,需补考</span
  125. >
  126. <span v-else-if="item.subResult === 1"
  127. >考试结果:通过,考试成绩为{{ item.subPerformance }}</span
  128. >
  129. </template>
  130. <template v-else-if="item.subExamStatus === 2">
  131. 缺考,无成绩,需补考
  132. </template>
  133. <template v-else-if="item.subExamStatus === 3">
  134. 作弊,无成绩,需补考
  135. </template>
  136. <template v-else-if="item.subExamStatus === 4">
  137. 替考,无成绩,需补考
  138. </template>
  139. </template>
  140. </template>
  141. </div>
  142. <div
  143. class="time"
  144. v-if="item.serviceStartTime && item.serviceEndTime"
  145. >
  146. 学习有效期:{{
  147. $moment(item.serviceStartTime * 1000).format("YYYY年MM月DD日")
  148. }}
  149. {{ $moment(item.serviceEndTime * 1000).format("YYYY年MM月DD日") }}
  150. </div>
  151. </div>
  152. <div class="course-item__body clearfix">
  153. <div class="img">
  154. <img :src="$tools.splitImgHost(item.coverUrl, true)" alt="" />
  155. </div>
  156. <div class="text">
  157. <div class="title">
  158. {{ item.goodsName }}
  159. <div class="note">
  160. {{ item.courseNum }}课程 {{ item.secAllNum + item.examNum }}节
  161. {{ item.classHours }}学时
  162. </div>
  163. </div>
  164. <div class="progress">
  165. 学习进度
  166. <el-progress
  167. class="progress-line"
  168. :stroke-width="16"
  169. :format="progressText(item)"
  170. :percentage="
  171. ((item.stuAllNum + item.recordNum) /
  172. (item.secAllNum + item.examNum) || 0) * 100
  173. "
  174. ></el-progress>
  175. </div>
  176. </div>
  177. <div class="btns-wrap">
  178. <div class="btns">
  179. <el-button
  180. type="primary"
  181. class="btn"
  182. @click="goCourseDetail(item)"
  183. :disabled="
  184. (item.interfacePushId > 0 && item.officialStatus != 1) ||
  185. sysTime <= item.serviceStartTime ||
  186. sysTime >= item.serviceEndTime ||
  187. (item.classStartTime && sysTime <= item.classStartTime) ||
  188. (item.classEndTime && sysTime >= item.classEndTime) ||
  189. item.learningStatus == 2 ||
  190. item.classStatus == 0 ||
  191. (item.learningStatus == 3 &&
  192. sysTime < item.learningTimeStart)
  193. "
  194. >进入学习</el-button
  195. >
  196. <el-button
  197. type="primary"
  198. class="btn"
  199. @click="appointment(item)"
  200. v-if="
  201. item.applyStatus === 1 &&
  202. !(
  203. (item.interfacePushId > 0 && item.officialStatus != 1) ||
  204. sysTime <= item.serviceStartTime ||
  205. sysTime >= item.serviceEndTime ||
  206. (item.classStartTime && sysTime <= item.classStartTime) ||
  207. (item.classEndTime && sysTime >= item.classEndTime) ||
  208. item.learningStatus == 2 ||
  209. item.classStatus == 0 ||
  210. (item.learningStatus == 3 &&
  211. sysTime < item.learningTimeStart)
  212. )
  213. "
  214. >预约考试</el-button
  215. >
  216. <div
  217. class="btn btn--warm"
  218. v-if="
  219. item.gradeStatus == 1 &&
  220. item.status == 1 &&
  221. item.serviceEndTime > sysTime &&
  222. item.serviceStartTime < sysTime &&
  223. item.classEndTime &&
  224. item.classEndTime < sysTime &&
  225. (item.periodStatus == 0 || item.periodStatus == -1) &&
  226. item.studyCount > 0
  227. "
  228. >
  229. 选班重学
  230. </div>
  231. </div>
  232. </div>
  233. </div>
  234. <div
  235. class="course-item__footer"
  236. v-if="
  237. !(
  238. sysTime < item.serviceStartTime || sysTime > item.serviceEndTime
  239. )
  240. "
  241. >
  242. <template
  243. v-if="
  244. !(
  245. sysTime < item.serviceStartTime ||
  246. sysTime > item.serviceEndTime
  247. )
  248. "
  249. >
  250. <template v-if="item.classEndTime && item.classEndTime < sysTime">
  251. <span class="text"
  252. >班级有效期:{{
  253. $tools.timestampToTime(item.classStartTime, true, true)
  254. }}
  255. -
  256. {{
  257. $tools.timestampToTime(item.classEndTime, true, true)
  258. }}</span
  259. >
  260. <span class="text text--red"
  261. >班级状态:已过期,有疑问请联系020-87085982</span
  262. >
  263. </template>
  264. <template
  265. v-else-if="item.classStartTime && item.classStartTime > sysTime"
  266. >
  267. <span class="text"
  268. >班级有效期:{{
  269. $tools.timestampToTime(item.classStartTime, true, true)
  270. }}
  271. -
  272. {{
  273. $tools.timestampToTime(item.classEndTime, true, true)
  274. }}</span
  275. >
  276. <span class="text"
  277. >班级状态:未到学习时间,有疑问请联系 020-87085982</span
  278. >
  279. </template>
  280. </template>
  281. </div>
  282. </div>
  283. </div>
  284. <div class="pagination">
  285. <el-pagination
  286. @current-change="currentChange"
  287. background
  288. layout="prev, pager, next"
  289. :total="total"
  290. :pager-count="5"
  291. >
  292. </el-pagination>
  293. </div>
  294. </div>
  295. <el-dialog
  296. title="选班重学"
  297. class="select-modal"
  298. :visible.sync="selectClassModal"
  299. width="800px"
  300. >
  301. <div>
  302. <el-radio
  303. v-for="(item, index) in gradeList"
  304. :key="index"
  305. class="radio"
  306. v-model="gradeValue"
  307. >
  308. <div>
  309. {{ item.className }}
  310. <span v-if="item.classEndTime">
  311. 有效期至:{{
  312. $tools.timestampToTime(item.classEndTime, true, true)
  313. }}</span
  314. >
  315. <span v-if="item.classEndTime"
  316. >本班还剩{{
  317. $tools.GetRTime(item.classEndTime)
  318. }}天将结束学习</span
  319. >
  320. </div>
  321. <div></div
  322. ></el-radio>
  323. </div>
  324. <span slot="footer" class="dialog-footer">
  325. <el-button type="primary" @click="selectClassOk">确 定</el-button>
  326. </span>
  327. </el-dialog>
  328. <el-dialog
  329. width="800px"
  330. class="rebuild"
  331. :visible.sync="showRebuildDetailModal"
  332. :close-on-click-modal="false"
  333. :close-on-press-escape="false"
  334. :show-close="false"
  335. >
  336. <div class="rebuild__content">
  337. <div class="rebuild__close" @click="showRebuildDetailModal = false">
  338. X
  339. </div>
  340. <div class="rebuild__header">审核详情</div>
  341. <div class="rebuild__body">
  342. <div class="content">
  343. <div class="content__header">
  344. <div class="title">重要提示:</div>
  345. <div class="desc">
  346. 如对审核结果有异议,请勿点击确认重学。致电020-87085982咨询
  347. </div>
  348. </div>
  349. <div class="content__body">
  350. <div class="list">
  351. <div
  352. class="list__item"
  353. v-for="(item, index) in rebuildItems"
  354. :key="index"
  355. >
  356. <div class="title">
  357. <span class="note" v-if="item.type == 0"> 测试 </span>
  358. <span class="note note--yellow" v-if="item.type == 1"
  359. >录播</span
  360. >
  361. <span class="note note--yellow" v-if="item.type == 2"
  362. >直播</span
  363. >
  364. <span class="note note--yellow" v-if="item.type == 3"
  365. >回放</span
  366. >
  367. {{ index + 1 }}、{{ item.name }}
  368. </div>
  369. <div class="desc">
  370. <div class="imgs">
  371. <div
  372. class="img"
  373. v-for="(items, indexs) in item.userStudyRecordPhoto"
  374. :key="indexs"
  375. >
  376. <img :src="$tools.splitImgHost(items.photo)" />
  377. <div class="note">
  378. {{ $tools.timestampToTime(items.createTime, false) }}
  379. </div>
  380. </div>
  381. </div>
  382. </div>
  383. <div class="desc">
  384. 原因:
  385. <span class="note">拍照异常/时间异常</span>
  386. </div>
  387. </div>
  388. </div>
  389. </div>
  390. </div>
  391. </div>
  392. <div class="rebuild__footer">
  393. <el-button class="confirm" @click="rebuildSubmit" type="primary"
  394. >确认重学</el-button
  395. >
  396. </div>
  397. </div>
  398. </el-dialog>
  399. </div>
  400. </template>
  401. <script>
  402. export default {
  403. name: "MyCourse",
  404. data() {
  405. return {
  406. showRebuildDetailModal: false,
  407. gradeList: [],
  408. gradeValue: -1,
  409. sysTime: 0,
  410. activeName: "1",
  411. param: {
  412. pageNum: 1,
  413. pageSize: 10,
  414. },
  415. rebuildItems: [],
  416. rebuildItem: {},
  417. selectClassModal: false,
  418. total: 0,
  419. courseList: [],
  420. selectItem: {},
  421. };
  422. },
  423. mounted() {
  424. this.sysTime = this.$tools.timest();
  425. this.courseGoodsList();
  426. },
  427. methods: {
  428. currentChange(e) {
  429. this.param.pageNum = e;
  430. this.courseGoodsList();
  431. },
  432. async goCourseDetail(item) {
  433. if (item.interfaceAccountId > 0) {
  434. //学习账号已开通
  435. if (item.learnStatus == 1) {
  436. //跳转第三方h5
  437. window.open("http://admin.zhujianpeixun.com/", "_blank");
  438. return;
  439. } else {
  440. this.$message({
  441. type: "warning",
  442. message:
  443. "您的学习账号未开通,请稍后再尝试,有疑问,请联系020-87085982!",
  444. });
  445. return;
  446. }
  447. }
  448. //内部系统
  449. if (item.interfacePushId > 0 && item.officialStatus != 1) {
  450. this.$message({
  451. type: "warning",
  452. message: "机构正在为您报名中,请耐心等待,有疑问请联系020-87085982!",
  453. });
  454. return;
  455. }
  456. if (
  457. this.sysTime <= item.serviceStartTime ||
  458. this.sysTime >= item.serviceEndTime
  459. ) {
  460. this.$message({
  461. type: "warning",
  462. message: "不在学习服务期,不能进入学习",
  463. });
  464. return;
  465. }
  466. if (
  467. (item.classStartTime && this.sysTime <= item.classStartTime) ||
  468. (item.classEndTime && this.sysTime >= item.classEndTime)
  469. ) {
  470. this.$message({
  471. type: "warning",
  472. message: "不在班级有效期,不能进入学习",
  473. });
  474. return;
  475. }
  476. if (item.learningStatus == 2) {
  477. this.$message({
  478. type: "warning",
  479. message: "开放学习时间待定,不能进入学习",
  480. });
  481. return;
  482. }
  483. if (item.classStatus == 0) {
  484. this.$message({
  485. type: "warning",
  486. message: "尚未开班,不能进入学习",
  487. });
  488. return;
  489. }
  490. if (item.learningStatus == 3 && this.sysTime < item.learningTimeStart) {
  491. this.$message({
  492. type: "warning",
  493. message: "不在开放学习时间,不能进入学习",
  494. });
  495. return;
  496. }
  497. if (
  498. item.gradeStatus == 1 &&
  499. item.status == 1 &&
  500. item.serviceEndTime > this.sysTime &&
  501. item.classEndTime &&
  502. item.classEndTime < this.sysTime &&
  503. (item.periodStatus == 0 || item.periodStatus == -1) &&
  504. item.studyCount > 0
  505. ) {
  506. this.selectClass(item);
  507. return;
  508. }
  509. let rebuildStatus = await this.courseGoodsRebuildStatus(
  510. item.goodsId,
  511. item.gradeId
  512. );
  513. if (rebuildStatus == 0) {
  514. this.rebuildItem = item;
  515. this.$request
  516. .getcourseperiodcheat({
  517. goodsId: item.goodsId,
  518. gradeId: item.gradeId,
  519. })
  520. .then((res) => {
  521. this.rebuildItems = res.rows;
  522. });
  523. this.showRebuildDetailModal = true;
  524. return;
  525. }
  526. if (item.educationName == "继续教育") {
  527. this.$request
  528. .lockLockStatus({
  529. action: "jxjy",
  530. })
  531. .then((res) => {
  532. //有其他端在操作,不能学习
  533. uni.showToast({
  534. icon: "none",
  535. title: res.msg,
  536. mask: true,
  537. duration: 3000,
  538. });
  539. })
  540. .catch((err) => {
  541. //可以学习
  542. this.$router.push({
  543. path: `/my-course-detail/${item.goodsId}`,
  544. query: {
  545. gradeId: item.gradeId,
  546. orderGoodsId: item.orderGoodsId,
  547. },
  548. });
  549. });
  550. } else {
  551. this.$router.push({
  552. path: `/my-course-detail/${item.goodsId}`,
  553. query: {
  554. gradeId: item.gradeId,
  555. orderGoodsId: item.orderGoodsId,
  556. },
  557. });
  558. }
  559. },
  560. rebuildSubmit() {
  561. this.$confirm(
  562. "如对审核结果有异议,请勿点击确认重学。致电020-87085982咨询",
  563. "注意",
  564. {
  565. confirmButtonText: "确认重学",
  566. cancelButtonText: "取消",
  567. closeOnClickModal: false,
  568. closeOnPressEscape: false,
  569. distinguishCancelAndClose: false,
  570. showClose: false,
  571. }
  572. )
  573. .then((_) => {
  574. this.$request
  575. .courseperiodrebuild({
  576. goodsId: this.rebuildItem.goodsId,
  577. gradeId: this.rebuildItem.gradeId,
  578. })
  579. .then((res) => {
  580. this.showRebuildDetailModal = false;
  581. this.$router.push({
  582. path: `/my-course-detail/${this.rebuildItem.goodsId}`,
  583. query: {
  584. gradeId: this.rebuildItem.gradeId,
  585. orderGoodsId: this.rebuildItem.orderGoodsId,
  586. },
  587. });
  588. });
  589. })
  590. .catch((_) => {});
  591. },
  592. selectClass(item) {
  593. this.selectClassModal = true;
  594. this.selectItem = item;
  595. this.gradeValue = -1;
  596. this.goodsGradeList(item.goodsId);
  597. },
  598. goodsGradeList(id) {
  599. let self = this;
  600. this.$request
  601. .goodsGradeList({
  602. goodsId: id,
  603. })
  604. .then((res) => {
  605. self.gradeList = res.rows;
  606. if (self.gradeList.length == 0) {
  607. let item = {
  608. className: "系统分班",
  609. gradeId: 0,
  610. };
  611. self.gradeList.push(item);
  612. } else {
  613. let isGradeFull = self.gradeList.every(
  614. (item) =>
  615. item.studentNum > 0 && item.studentNum == item.studentUpper
  616. );
  617. //所有班级都满了
  618. if (isGradeFull) {
  619. let item = {
  620. className: "系统分班",
  621. gradeId: 0,
  622. };
  623. self.gradeList.unshift(item);
  624. }
  625. }
  626. });
  627. },
  628. selectClassOk() {
  629. if (this.gradeValue == -1) {
  630. this.$message({
  631. type: "success",
  632. message: "请选择班级",
  633. });
  634. return;
  635. }
  636. this.$request
  637. .changeGrade({
  638. goodsId: this.selectItem.goodsId,
  639. gradeId: this.gradeValue,
  640. oldGradeId: this.selectItem.gradeId,
  641. orderGoodsId: this.selectItem.orderGoodsId,
  642. userId: this.selectItem.userId,
  643. })
  644. .then((res) => {
  645. this.courseGoodsList();
  646. this.selectClassModal = false;
  647. this.$message({
  648. type: "success",
  649. message: "选班成功",
  650. });
  651. })
  652. .catch((err) => {
  653. this.$message({
  654. type: "success",
  655. message: res.msg,
  656. });
  657. });
  658. },
  659. /**
  660. * @param {Object} goodsId 商品id
  661. * 查询商品重修状态
  662. */
  663. courseGoodsRebuildStatus(goodsId, gradeId) {
  664. return new Promise((resolve) => {
  665. this.$request
  666. .courseGoodsRebuildStatus({
  667. goodsId: goodsId,
  668. gradeId: gradeId,
  669. })
  670. .then((res) => {
  671. resolve(res.data);
  672. });
  673. });
  674. },
  675. courseGoodsList() {
  676. this.$request.courseGoodsList(this.param).then((res) => {
  677. this.courseList = res.rows;
  678. this.total = res.total;
  679. });
  680. },
  681. progressText(item) {
  682. return () => {
  683. return (
  684. item.stuAllNum +
  685. item.recordNum +
  686. "/" +
  687. (item.secAllNum + item.examNum)
  688. );
  689. };
  690. },
  691. appointment(item) {
  692. var data = {
  693. goodsId: item.goodsId,
  694. gradeId: item.gradeId,
  695. };
  696. this.$request
  697. .getApplysubscribe(data)
  698. .then((res) => {
  699. this.$router.push({
  700. path: "/person-center/my-classhour/appointment",
  701. query: {
  702. goodsId: item.goodsId,
  703. gradeId: item.gradeId,
  704. orderGoodsId: item.orderGoodsId,
  705. },
  706. });
  707. })
  708. .catch((err) => {
  709. this.$message({
  710. type: "success",
  711. message: err.msg,
  712. });
  713. });
  714. },
  715. },
  716. };
  717. </script>
  718. <!-- Add "scoped" attribute to limit CSS to this component only -->
  719. <style scoped lang="scss">
  720. .my-course {
  721. &__header {
  722. /deep/ .el-tabs__header {
  723. margin-bottom: 0;
  724. }
  725. }
  726. &__body {
  727. .list {
  728. .course-item {
  729. margin-top: 24px;
  730. background: #fafbfc;
  731. border-radius: 8px;
  732. overflow: hidden;
  733. &__header {
  734. height: 40px;
  735. border-bottom: 1px solid #eee;
  736. padding: 0 18px;
  737. .state {
  738. margin-top: 8px;
  739. float: left;
  740. font-size: 14px;
  741. font-family: Microsoft YaHei;
  742. font-weight: 400;
  743. color: #666666;
  744. .red {
  745. color: #ff3b30;
  746. }
  747. .note {
  748. vertical-align: middle;
  749. display: inline-block;
  750. padding: 0 10px;
  751. height: 24px;
  752. background: #ffeceb;
  753. border: 1px solid #ff3b30;
  754. border-radius: 12px;
  755. font-size: 14px;
  756. font-family: Microsoft YaHei;
  757. font-weight: 400;
  758. color: #ff3b30;
  759. text-align: center;
  760. line-height: 24px;
  761. margin-right: 10px;
  762. &--yellow {
  763. border-color: #ffb001;
  764. color: #ffb001;
  765. background: #fff8e8;
  766. }
  767. &--green {
  768. border-color: #56dc68;
  769. color: #56dc68;
  770. background: #e6feea;
  771. }
  772. }
  773. }
  774. .time {
  775. float: right;
  776. line-height: 40px;
  777. text-align: right;
  778. font-size: 12px;
  779. font-family: Microsoft YaHei;
  780. font-weight: 400;
  781. color: #666666;
  782. }
  783. }
  784. &__body {
  785. .img {
  786. float: left;
  787. width: 160px;
  788. height: 90px;
  789. background: #3f8dfd;
  790. img {
  791. max-width: 100%;
  792. max-height: 100%;
  793. }
  794. }
  795. .text {
  796. float: left;
  797. margin-left: 12px;
  798. .title {
  799. margin-top: 10px;
  800. font-size: 16px;
  801. font-family: Microsoft YaHei;
  802. font-weight: bold;
  803. color: #333333;
  804. .note {
  805. display: inline-block;
  806. vertical-align: middle;
  807. border: 1px solid #333333;
  808. border-radius: 4px;
  809. font-size: 12px;
  810. font-family: Microsoft YaHei;
  811. font-weight: 400;
  812. color: #333333;
  813. padding: 2px 5px;
  814. margin-left: 12px;
  815. }
  816. }
  817. .progress {
  818. margin-top: 30px;
  819. font-size: 14px;
  820. font-family: Microsoft YaHei;
  821. font-weight: 400;
  822. color: #333333;
  823. &-line {
  824. width: 220px;
  825. display: inline-block;
  826. }
  827. /deep/ .el-progress-bar {
  828. padding-right: 70px;
  829. margin-right: -70px;
  830. }
  831. }
  832. }
  833. .btns-wrap {
  834. display: table;
  835. float: right;
  836. height: 90px;
  837. width: 130px;
  838. .btns {
  839. display: table-cell;
  840. vertical-align: middle;
  841. text-align: center;
  842. .btn {
  843. cursor: pointer;
  844. margin: 2px 0;
  845. width: 122px;
  846. height: 32px;
  847. padding: 0;
  848. border-radius: 16px;
  849. display: inline-block;
  850. text-align: center;
  851. line-height: 32px;
  852. color: #fff;
  853. &--warm {
  854. background: #ff3b30;
  855. }
  856. }
  857. }
  858. }
  859. }
  860. &__footer {
  861. padding: 20px 40px;
  862. font-size: 14px;
  863. color: #333;
  864. .text {
  865. margin-right: 20px;
  866. &--red {
  867. color: #ff3b30;
  868. }
  869. }
  870. }
  871. }
  872. }
  873. .pagination {
  874. padding: 30px 0;
  875. text-align: center;
  876. }
  877. }
  878. .select-modal {
  879. .radio {
  880. cursor: pointer;
  881. margin-right: 24px;
  882. padding: 0 24px;
  883. display: flex;
  884. align-items: center;
  885. margin-top: 2px;
  886. min-height: 40px;
  887. padding-top: 10px;
  888. padding-bottom: 10px;
  889. background: #f5f9ff;
  890. border-radius: 8px;
  891. box-sizing: border-box;
  892. &.right {
  893. background: #37c65b;
  894. }
  895. &.wrong {
  896. background: #ff3a30;
  897. }
  898. }
  899. }
  900. .rebuild {
  901. /deep/ .el-dialog__header {
  902. display: none;
  903. }
  904. /deep/ .el-dialog__body {
  905. padding: 0;
  906. overflow: unset;
  907. }
  908. &__close {
  909. cursor: pointer;
  910. position: absolute;
  911. right: 0;
  912. top: -28px;
  913. width: 24px;
  914. height: 24px;
  915. line-height: 24px;
  916. text-align: center;
  917. color: #eee;
  918. border: 1px solid #eee;
  919. border-radius: 50%;
  920. }
  921. &__header {
  922. height: 40px;
  923. border-bottom: 1px solid #eee;
  924. line-height: 40px;
  925. font-size: 16px;
  926. font-family: Microsoft YaHei;
  927. font-weight: bold;
  928. color: #333333;
  929. padding-left: 24px;
  930. }
  931. &__body {
  932. height: 400px;
  933. padding: 0 24px;
  934. .content {
  935. height: 100%;
  936. overflow-y: auto;
  937. &__header {
  938. padding: 16px 0;
  939. border-bottom: 1px solid #eee;
  940. .title {
  941. font-size: 16px;
  942. font-family: Microsoft YaHei;
  943. font-weight: bold;
  944. color: #ff3b30;
  945. line-height: 24px;
  946. }
  947. .desc {
  948. margin-top: 10px;
  949. font-size: 16px;
  950. font-family: Microsoft YaHei;
  951. font-weight: 400;
  952. color: #ff3b30;
  953. line-height: 24px;
  954. }
  955. }
  956. &__body {
  957. .list {
  958. &__item {
  959. padding: 16px 0;
  960. border-bottom: 1px solid #eee;
  961. .title {
  962. font-size: 14px;
  963. font-family: Microsoft YaHei;
  964. font-weight: 400;
  965. color: #333333;
  966. .note {
  967. width: 32px;
  968. height: 20px;
  969. border: 1px solid #3f8dfd;
  970. border-radius: 4px;
  971. color: #3f8dfd;
  972. font-size: 12px;
  973. &--yellow {
  974. border: 1px solid #ff9500;
  975. color: #ff9500;
  976. }
  977. }
  978. }
  979. .desc {
  980. margin-top: 10px;
  981. font-size: 14px;
  982. font-family: Microsoft YaHei;
  983. font-weight: 400;
  984. color: #333333;
  985. .note {
  986. color: #ff3b30;
  987. line-height: 20px;
  988. }
  989. .img {
  990. width: 100px;
  991. height: 100px;
  992. display: inline-block;
  993. text-align: center;
  994. img {
  995. max-width: 100%;
  996. max-height: 100%;
  997. }
  998. }
  999. }
  1000. }
  1001. }
  1002. }
  1003. }
  1004. }
  1005. &__footer {
  1006. height: 90px;
  1007. border-top: 1px solid #eee;
  1008. text-align: center;
  1009. .confirm {
  1010. width: 200px;
  1011. height: 40px;
  1012. padding: 0;
  1013. border-radius: 20px;
  1014. text-align: center;
  1015. line-height: 40px;
  1016. color: #fff;
  1017. margin: 24px auto;
  1018. }
  1019. }
  1020. }
  1021. }
  1022. </style>