courseData.vue 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806
  1. <template>
  2. <div id="courseData">
  3. <el-dialog title="切换科目" :visible.sync="dialogVisible" width="1100px">
  4. <div class="headerStyle" v-if="Object.keys(activeItem).length">
  5. <p class="title">当前科目</p>
  6. <div
  7. class="course-items"
  8. >
  9. <div class="course-items__header">
  10. <div
  11. class="time"
  12. v-if="activeItem.serviceStartTime && activeItem.serviceEndTime"
  13. >
  14. 学习服务期:{{
  15. $tools.timestampToTime(activeItem.serviceStartTime, false)
  16. }}
  17. {{ $tools.timestampToTime(activeItem.serviceEndTime, false) }}
  18. </div>
  19. <div class="state">
  20. <template
  21. v-if="
  22. activeItem.serviceStartTime &&
  23. (sysTime < activeItem.serviceStartTime ||
  24. sysTime > activeItem.serviceEndTime)
  25. "
  26. >
  27. <div class="red">不在学习服务期,不可以学习了哦</div>
  28. </template>
  29. <template v-else>
  30. <template
  31. v-if="
  32. !(activeItem.classEndTime && activeItem.classEndTime < sysTime) &&
  33. !(activeItem.classStartTime && activeItem.classStartTime > sysTime)
  34. "
  35. >
  36. <template
  37. v-if="activeItem.periodStatus == -1 || activeItem.periodStatus == 2"
  38. >
  39. <template
  40. v-if="
  41. activeItem.classStatus == 1 || activeItem.classStatus === null
  42. "
  43. >
  44. <template
  45. v-if="
  46. sysTime >= activeItem.serviceStartTime &&
  47. sysTime <= activeItem.serviceEndTime
  48. "
  49. >
  50. 学习状态:
  51. <div
  52. class="note"
  53. v-if="activeItem.stuAllNum + activeItem.recordNum == 0"
  54. >
  55. 未学习
  56. </div>
  57. <div
  58. class="note note--yellow"
  59. v-else-if="
  60. activeItem.stuAllNum + activeItem.recordNum > 0 &&
  61. activeItem.stuAllNum + activeItem.recordNum <
  62. activeItem.secAllNum + activeItem.examNum
  63. "
  64. >
  65. 学习中
  66. </div>
  67. <div
  68. class="note note--green"
  69. v-else-if="
  70. activeItem.stuAllNum + activeItem.recordNum >=
  71. activeItem.secAllNum + activeItem.examNum
  72. "
  73. >
  74. 已学完
  75. </div>
  76. </template>
  77. <template v-else>
  78. <span class="red" v-if="activeItem.serviceStartTime">
  79. 已过学习服务期,不可以学习了哦!</span
  80. >
  81. </template>
  82. </template>
  83. <!-- <template v-if="activeItem.profileTpStatus == 1">
  84. 资料审核状态:
  85. <div class="note" v-if="activeItem.profileStatus == null">
  86. 未提交资料
  87. </div>
  88. <div
  89. class="note note--green"
  90. v-else-if="activeItem.profileStatus == 1"
  91. >
  92. 已通过
  93. </div>
  94. <div
  95. class="note note--yellow"
  96. v-else-if="activeItem.profileStatus == 2"
  97. >
  98. 审核中
  99. </div>
  100. <div
  101. class="note note--yellow"
  102. v-else-if="activeItem.profileStatus == 3"
  103. >
  104. 待完善
  105. </div>
  106. </template> -->
  107. </template>
  108. <!-- 学时审核状态可以审核 -->
  109. <template v-if="activeItem.periodStatus != -1">
  110. <template v-if="activeItem.periodStatus == 0"
  111. >机构审核:
  112. <div class="note">学时审核不通过</div>
  113. </template>
  114. <!-- <template v-else-if="activeItem.periodStatus == 2"
  115. >机构审核:
  116. <div class="note note--yellow">学时待审核</div></template
  117. > -->
  118. <template v-else-if="activeItem.periodStatus == 1">
  119. <template v-if="activeItem.periodPlush > 0"
  120. ><div class="note note--green">
  121. 学时已上报注册中心
  122. </div></template
  123. >
  124. <template v-else
  125. >机构审核:
  126. <div class="note note--green">
  127. 学时审核通过
  128. </div></template
  129. >
  130. </template>
  131. <template
  132. v-if="
  133. activeItem.subscribeId != null && activeItem.periodStatus == 1
  134. "
  135. >
  136. <template v-if="activeItem.subExamStatus === null">
  137. 待预约考试
  138. </template>
  139. <template
  140. v-else-if="
  141. activeItem.subExamStatus === 0 &&
  142. sysTime <
  143. $tools.TimeTotimestamp(
  144. $tools.timestampToTime(
  145. activeItem.subApplySiteExamTime,
  146. true
  147. ) +
  148. ' ' +
  149. activeItem.subApplySiteStartTime
  150. )
  151. "
  152. >
  153. 待考试,考试时间:{{
  154. $tools.timestampToTime(
  155. activeItem.subApplySiteExamTime,
  156. true
  157. ) +
  158. " " +
  159. activeItem.subApplySiteStartTime
  160. }}
  161. -
  162. {{
  163. $tools.timestampToTime(
  164. activeItem.subApplySiteExamTime,
  165. true
  166. ) +
  167. " " +
  168. activeItem.subApplySiteEndTime
  169. }}
  170. </template>
  171. <template v-else-if="activeItem.subExamStatus === 0"
  172. >待出考试结果</template
  173. >
  174. <template v-else-if="activeItem.subExamStatus === 1">
  175. <span v-if="activeItem.subResult === null"
  176. >待出考试结果</span
  177. >
  178. <span v-if="activeItem.subResult === 0"
  179. >考试结果:不通过,需补考</span
  180. >
  181. <span v-else-if="activeItem.subResult === 1"
  182. >考试结果:通过,考试成绩为{{
  183. activeItem.subPerformance
  184. }}</span
  185. >
  186. </template>
  187. <template v-else-if="activeItem.subExamStatus === 2">
  188. 缺考,无成绩,需补考
  189. </template>
  190. <template v-else-if="activeItem.subExamStatus === 3">
  191. 作弊,无成绩,需补考
  192. </template>
  193. <template v-else-if="activeItem.subExamStatus === 4">
  194. 替考,无成绩,需补考
  195. </template>
  196. </template>
  197. </template>
  198. </template>
  199. </template>
  200. </div>
  201. </div>
  202. <div class="course-items__body clearfix">
  203. <div class="img">
  204. <img :src="$tools.splitImgHost(activeItem.coverUrl, true)" alt="" />
  205. </div>
  206. <div class="text">
  207. <div class="title">
  208. {{ activeItem.goodsName }}
  209. <div class="note">
  210. {{ activeItem.courseNum }}课程
  211. {{ activeItem.secAllNum + activeItem.examNum }}节
  212. {{ activeItem.classHours }}学时
  213. </div>
  214. </div>
  215. <div class="progress">
  216. 学习进度
  217. <el-progress
  218. class="progress-line"
  219. :stroke-width="16"
  220. :format="progressText(activeItem)"
  221. :percentage="
  222. ((activeItem.stuAllNum + activeItem.recordNum) /
  223. (activeItem.secAllNum + activeItem.examNum) || 0) * 100
  224. "
  225. ></el-progress>
  226. </div>
  227. </div>
  228. <div class="btns-wrap">
  229. <div class="btns">
  230. <el-button
  231. type="primary"
  232. class="btn btn--normal"
  233. :class="{
  234. disabled:
  235. (activeItem.serviceStartTime &&
  236. (sysTime <= activeItem.serviceStartTime ||
  237. sysTime >= activeItem.serviceEndTime)) ||
  238. (activeItem.classStartTime &&
  239. sysTime <= activeItem.classStartTime) ||
  240. (activeItem.classEndTime && sysTime >= activeItem.classEndTime) ||
  241. activeItem.learningStatus == 2 ||
  242. activeItem.classStatus == 0 ||
  243. (activeItem.learningStatus == 3 &&
  244. sysTime < activeItem.learningTimeStart),
  245. }"
  246. @click="goCourseDetail(activeItem)"
  247. >进入学习</el-button
  248. >
  249. <el-button
  250. type="primary"
  251. class="btn"
  252. @click="appointment(activeItem)"
  253. v-if="
  254. activeItem.applyStatus === 1 &&
  255. !(
  256. sysTime <= activeItem.serviceStartTime ||
  257. sysTime >= activeItem.serviceEndTime ||
  258. (activeItem.classStartTime &&
  259. sysTime <= activeItem.classStartTime) ||
  260. (activeItem.classEndTime && sysTime >= activeItem.classEndTime) ||
  261. activeItem.learningStatus == 2 ||
  262. activeItem.classStatus == 0 ||
  263. (activeItem.learningStatus == 3 &&
  264. sysTime < activeItem.learningTimeStart) || !activeItem.examApplyGoodsList.length
  265. )
  266. "
  267. >预约考试</el-button
  268. >
  269. <el-button
  270. type="danger"
  271. class="btn btn--warm"
  272. @click="selectClass(activeItem)"
  273. v-if="
  274. activeItem.gradeStatus == 1 &&
  275. activeItem.status == 1 &&
  276. activeItem.serviceEndTime > sysTime &&
  277. activeItem.serviceStartTime < sysTime &&
  278. activeItem.classEndTime &&
  279. activeItem.classEndTime < sysTime &&
  280. (activeItem.periodStatus == 0 || activeItem.periodStatus == -1) &&
  281. activeItem.studyCount > 0
  282. "
  283. >
  284. 选班重学
  285. </el-button>
  286. <el-button
  287. type="primary"
  288. class="btn"
  289. v-if="
  290. activeItem.beforeStatus === 1 &&
  291. !(
  292. sysTime <= activeItem.serviceStartTime ||
  293. sysTime >= activeItem.serviceEndTime ||
  294. (activeItem.classStartTime &&
  295. sysTime <= activeItem.classStartTime) ||
  296. (activeItem.classEndTime && sysTime >= activeItem.classEndTime) ||
  297. activeItem.learningStatus == 2 ||
  298. activeItem.classStatus == 0 ||
  299. (activeItem.learningStatus == 3 &&
  300. sysTime < activeItem.learningTimeStart)
  301. )
  302. "
  303. @click="appBeforeAddress(activeItem)"
  304. >进入刷题</el-button
  305. >
  306. </div>
  307. </div>
  308. </div>
  309. <template
  310. v-if="
  311. !(
  312. sysTime < activeItem.serviceStartTime ||
  313. sysTime > activeItem.serviceEndTime
  314. )
  315. "
  316. >
  317. <div
  318. class="course-items__footer"
  319. v-if="activeItem.classEndTime && activeItem.classEndTime < sysTime"
  320. >
  321. <span class="text"
  322. >班级有效期:{{
  323. $tools.timestampToTime(activeItem.classStartTime, true, true)
  324. }}
  325. -
  326. {{
  327. $tools.timestampToTime(activeItem.classEndTime, true, true)
  328. }}</span
  329. >
  330. <span class="text text--red"
  331. >班级状态:已过期,有疑问请联系020-87085982</span
  332. >
  333. </div>
  334. <div
  335. class="course-items__footer"
  336. v-else-if="
  337. activeItem.classStartTime && activeItem.classStartTime > sysTime
  338. "
  339. >
  340. <span class="text"
  341. >班级有效期:{{
  342. $tools.timestampToTime(activeItem.classStartTime, true, true)
  343. }}
  344. -
  345. {{
  346. $tools.timestampToTime(activeItem.classEndTime, true, true)
  347. }}</span
  348. >
  349. <span class="text"
  350. >班级状态:未到学习时间,有疑问请联系 020-87085982</span
  351. >
  352. </div>
  353. <template v-else>
  354. <div
  355. class="course-items__footer"
  356. v-if="
  357. activeItem.gradeId != 0 &&
  358. activeItem.gradeStatus == 1 &&
  359. activeItem.classStatus != null
  360. "
  361. >
  362. <span class="text"
  363. >班级状态:
  364. {{
  365. activeItem.classStatus == 1
  366. ? "已开班"
  367. : activeItem.classStatus == 0
  368. ? "未开班"
  369. : ""
  370. }}
  371. </span>
  372. <span class="text"
  373. >班级有效期:{{
  374. $tools.timestampToTime(activeItem.classStartTime, true, true)
  375. }}-{{
  376. $tools.timestampToTime(activeItem.classEndTime, true, true)
  377. }}</span
  378. >
  379. </div>
  380. <div class="course-items__footer" v-if="activeItem.classStatus == 0">
  381. <span class="text">教务处正在为您开通班级,请耐心等待</span>
  382. </div>
  383. </template>
  384. </template>
  385. </div>
  386. </div>
  387. <div class="my-course">
  388. <div class="my-course__header">
  389. <el-tabs :value="activeName" @tab-click="tabChange">
  390. <el-tab-pane
  391. v-for="(tab, tabIndex) in tabList"
  392. :key="tabIndex"
  393. :label="tab.educationName"
  394. :name="tab.id"
  395. ></el-tab-pane>
  396. </el-tabs>
  397. </div>
  398. <div class="my-course__body">
  399. <div class="list">
  400. <div
  401. class="course-item"
  402. v-for="(item, index) in courseList"
  403. :key="index"
  404. >
  405. <div class="course-item__header">
  406. <div
  407. class="time"
  408. v-if="item.serviceStartTime && item.serviceEndTime"
  409. >
  410. 学习服务期:{{
  411. $tools.timestampToTime(item.serviceStartTime, false)
  412. }}
  413. {{ $tools.timestampToTime(item.serviceEndTime, false) }}
  414. </div>
  415. <div class="state">
  416. <template
  417. v-if="
  418. item.serviceStartTime &&
  419. (sysTime < item.serviceStartTime ||
  420. sysTime > item.serviceEndTime)
  421. "
  422. >
  423. <div class="red">不在学习服务期,不可以学习了哦</div>
  424. </template>
  425. <template v-else>
  426. <template
  427. v-if="
  428. !(item.classEndTime && item.classEndTime < sysTime) &&
  429. !(item.classStartTime && item.classStartTime > sysTime)
  430. "
  431. >
  432. <template
  433. v-if="item.periodStatus == -1 || item.periodStatus == 2"
  434. >
  435. <template
  436. v-if="
  437. item.classStatus == 1 || item.classStatus === null
  438. "
  439. >
  440. <template
  441. v-if="
  442. sysTime >= item.serviceStartTime &&
  443. sysTime <= item.serviceEndTime
  444. "
  445. >
  446. 学习状态:
  447. <div
  448. class="note"
  449. v-if="item.stuAllNum + item.recordNum == 0"
  450. >
  451. 未学习
  452. </div>
  453. <div
  454. class="note note--yellow"
  455. v-else-if="
  456. item.stuAllNum + item.recordNum > 0 &&
  457. item.stuAllNum + item.recordNum <
  458. item.secAllNum + item.examNum
  459. "
  460. >
  461. 学习中
  462. </div>
  463. <div
  464. class="note note--green"
  465. v-else-if="
  466. item.stuAllNum + item.recordNum >=
  467. item.secAllNum + item.examNum
  468. "
  469. >
  470. 已学完
  471. </div>
  472. </template>
  473. <template v-else>
  474. <span class="red" v-if="item.serviceStartTime">
  475. 已过学习服务期,不可以学习了哦!</span
  476. >
  477. </template>
  478. </template>
  479. <!-- <template v-if="item.profileTpStatus == 1">
  480. 资料审核状态:
  481. <div class="note" v-if="item.profileStatus == null">
  482. 未提交资料
  483. </div>
  484. <div
  485. class="note note--green"
  486. v-else-if="item.profileStatus == 1"
  487. >
  488. 已通过
  489. </div>
  490. <div
  491. class="note note--yellow"
  492. v-else-if="item.profileStatus == 2"
  493. >
  494. 审核中
  495. </div>
  496. <div
  497. class="note note--yellow"
  498. v-else-if="item.profileStatus == 3"
  499. >
  500. 待完善
  501. </div>
  502. </template> -->
  503. </template>
  504. <!-- 学时审核状态可以审核 -->
  505. <template v-if="item.periodStatus != -1">
  506. <template v-if="item.periodStatus == 0"
  507. >机构审核:
  508. <div class="note">学时审核不通过</div>
  509. </template>
  510. <!-- <template v-else-if="item.periodStatus == 2"
  511. >机构审核:
  512. <div class="note note--yellow">学时待审核</div></template
  513. > -->
  514. <template v-else-if="item.periodStatus == 1">
  515. <template v-if="item.periodPlush > 0"
  516. ><div class="note note--green">
  517. 学时已上报注册中心
  518. </div></template
  519. >
  520. <template v-else
  521. >机构审核:
  522. <div class="note note--green">
  523. 学时审核通过
  524. </div></template
  525. >
  526. </template>
  527. <template
  528. v-if="
  529. item.subscribeId != null && item.periodStatus == 1
  530. "
  531. >
  532. <template v-if="item.subExamStatus === null">
  533. 待预约考试
  534. </template>
  535. <template
  536. v-else-if="
  537. item.subExamStatus === 0 &&
  538. sysTime <
  539. $tools.TimeTotimestamp(
  540. $tools.timestampToTime(
  541. item.subApplySiteExamTime,
  542. true
  543. ) +
  544. ' ' +
  545. item.subApplySiteStartTime
  546. )
  547. "
  548. >
  549. 待考试,考试时间:{{
  550. $tools.timestampToTime(
  551. item.subApplySiteExamTime,
  552. true
  553. ) +
  554. " " +
  555. item.subApplySiteStartTime
  556. }}
  557. -
  558. {{
  559. $tools.timestampToTime(
  560. item.subApplySiteExamTime,
  561. true
  562. ) +
  563. " " +
  564. item.subApplySiteEndTime
  565. }}
  566. </template>
  567. <template v-else-if="item.subExamStatus === 0"
  568. >待出考试结果</template
  569. >
  570. <template v-else-if="item.subExamStatus === 1">
  571. <span v-if="item.subResult === null"
  572. >待出考试结果</span
  573. >
  574. <span v-if="item.subResult === 0"
  575. >考试结果:不通过,需补考</span
  576. >
  577. <span v-else-if="item.subResult === 1"
  578. >考试结果:通过,考试成绩为{{
  579. item.subPerformance
  580. }}</span
  581. >
  582. </template>
  583. <template v-else-if="item.subExamStatus === 2">
  584. 缺考,无成绩,需补考
  585. </template>
  586. <template v-else-if="item.subExamStatus === 3">
  587. 作弊,无成绩,需补考
  588. </template>
  589. <template v-else-if="item.subExamStatus === 4">
  590. 替考,无成绩,需补考
  591. </template>
  592. </template>
  593. </template>
  594. </template>
  595. </template>
  596. </div>
  597. </div>
  598. <div class="course-item__body clearfix">
  599. <div class="img">
  600. <img :src="$tools.splitImgHost(item.coverUrl, true)" alt="" />
  601. </div>
  602. <div class="text">
  603. <div class="title">
  604. {{ item.goodsName }}
  605. <div class="note">
  606. {{ item.courseNum }}课程
  607. {{ item.secAllNum + item.examNum }}节
  608. {{ item.classHours }}学时
  609. </div>
  610. </div>
  611. <div class="progress">
  612. 学习进度
  613. <el-progress
  614. class="progress-line"
  615. :stroke-width="16"
  616. :format="progressText(item)"
  617. :percentage="
  618. ((item.stuAllNum + item.recordNum) /
  619. (item.secAllNum + item.examNum) || 0) * 100
  620. "
  621. ></el-progress>
  622. </div>
  623. </div>
  624. <div class="btns-wrap">
  625. <div class="btns">
  626. <el-button
  627. type="primary"
  628. class="btn btn--normal"
  629. :class="{
  630. disabled:
  631. (item.serviceStartTime &&
  632. (sysTime <= item.serviceStartTime ||
  633. sysTime >= item.serviceEndTime)) ||
  634. (item.classStartTime &&
  635. sysTime <= item.classStartTime) ||
  636. (item.classEndTime && sysTime >= item.classEndTime) ||
  637. item.learningStatus == 2 ||
  638. item.classStatus == 0 ||
  639. (item.learningStatus == 3 &&
  640. sysTime < item.learningTimeStart),
  641. }"
  642. @click="goCourseDetail(item)"
  643. >进入学习</el-button
  644. >
  645. <el-button
  646. type="primary"
  647. class="btn"
  648. @click="appointment(item)"
  649. v-if="
  650. item.applyStatus === 1 &&
  651. !(
  652. sysTime <= item.serviceStartTime ||
  653. sysTime >= item.serviceEndTime ||
  654. (item.classStartTime &&
  655. sysTime <= item.classStartTime) ||
  656. (item.classEndTime && sysTime >= item.classEndTime) ||
  657. item.learningStatus == 2 ||
  658. item.classStatus == 0 ||
  659. (item.learningStatus == 3 &&
  660. sysTime < item.learningTimeStart) || !item.examApplyGoodsList.length
  661. )
  662. "
  663. >预约考试</el-button
  664. >
  665. <el-button
  666. type="danger"
  667. class="btn btn--warm"
  668. @click="selectClass(item)"
  669. v-if="
  670. item.gradeStatus == 1 &&
  671. item.status == 1 &&
  672. item.serviceEndTime > sysTime &&
  673. item.serviceStartTime < sysTime &&
  674. item.classEndTime &&
  675. item.classEndTime < sysTime &&
  676. (item.periodStatus == 0 || item.periodStatus == -1) &&
  677. item.studyCount > 0
  678. "
  679. >
  680. 选班重学
  681. </el-button>
  682. <el-button
  683. type="primary"
  684. class="btn"
  685. v-if="
  686. item.beforeStatus === 1 &&
  687. !(
  688. sysTime <= item.serviceStartTime ||
  689. sysTime >= item.serviceEndTime ||
  690. (item.classStartTime &&
  691. sysTime <= item.classStartTime) ||
  692. (item.classEndTime && sysTime >= item.classEndTime) ||
  693. item.learningStatus == 2 ||
  694. item.classStatus == 0 ||
  695. (item.learningStatus == 3 &&
  696. sysTime < item.learningTimeStart)
  697. )
  698. "
  699. @click="appBeforeAddress(item)"
  700. >进入刷题</el-button
  701. >
  702. </div>
  703. </div>
  704. </div>
  705. <template
  706. v-if="
  707. !(
  708. sysTime < item.serviceStartTime ||
  709. sysTime > item.serviceEndTime
  710. )
  711. "
  712. >
  713. <div
  714. class="course-item__footer"
  715. v-if="item.classEndTime && item.classEndTime < sysTime"
  716. >
  717. <span class="text"
  718. >班级有效期:{{
  719. $tools.timestampToTime(item.classStartTime, true, true)
  720. }}
  721. -
  722. {{
  723. $tools.timestampToTime(item.classEndTime, true, true)
  724. }}</span
  725. >
  726. <span class="text text--red"
  727. >班级状态:已过期,有疑问请联系020-87085982</span
  728. >
  729. </div>
  730. <div
  731. class="course-item__footer"
  732. v-else-if="
  733. item.classStartTime && item.classStartTime > sysTime
  734. "
  735. >
  736. <span class="text"
  737. >班级有效期:{{
  738. $tools.timestampToTime(item.classStartTime, true, true)
  739. }}
  740. -
  741. {{
  742. $tools.timestampToTime(item.classEndTime, true, true)
  743. }}</span
  744. >
  745. <span class="text"
  746. >班级状态:未到学习时间,有疑问请联系 020-87085982</span
  747. >
  748. </div>
  749. <template v-else>
  750. <div
  751. class="course-item__footer"
  752. v-if="
  753. item.gradeId != 0 &&
  754. item.gradeStatus == 1 &&
  755. item.classStatus != null
  756. "
  757. >
  758. <span class="text"
  759. >班级状态:
  760. {{
  761. item.classStatus == 1
  762. ? "已开班"
  763. : item.classStatus == 0
  764. ? "未开班"
  765. : ""
  766. }}
  767. </span>
  768. <span class="text"
  769. >班级有效期:{{
  770. $tools.timestampToTime(item.classStartTime, true, true)
  771. }}-{{
  772. $tools.timestampToTime(item.classEndTime, true, true)
  773. }}</span
  774. >
  775. </div>
  776. <div class="course-item__footer" v-if="item.classStatus == 0">
  777. <span class="text">教务处正在为您开通班级,请耐心等待</span>
  778. </div>
  779. </template>
  780. </template>
  781. </div>
  782. </div>
  783. <div class="pagination" v-if="total > 0">
  784. <el-pagination
  785. @current-change="currentChange"
  786. background
  787. layout="prev, pager, next"
  788. :total="total"
  789. :pager-count="5"
  790. :page-size="param.pageSize"
  791. >
  792. </el-pagination>
  793. </div>
  794. </div>
  795. <!-- <SelectClassModal
  796. ref="selectClassModal"
  797. @selectClassOk="selectClassOk"
  798. ></SelectClassModal> -->
  799. <!-- <RebuildModal
  800. ref="rebuildModal"
  801. @rebuildSubmit="rebuildSubmit($event)"
  802. ></RebuildModal>
  803. <ExercisesModal ref="exercisesModal"></ExercisesModal> -->
  804. </div>
  805. </el-dialog>
  806. <!-- 预约考试弹窗 -->
  807. <appoint-test :appointModal.sync="appointModal" :appointItem='appointItem'></appoint-test>
  808. <!-- 选班重学弹窗 -->
  809. <SelectClassModal ref="selectClassModal" @selectClassOk="selectClassOk"></SelectClassModal>
  810. <RebuildModal ref="rebuildModal" @rebuildSubmit="rebuildSubmit($event)"></RebuildModal>
  811. <ExercisesModal ref="exercisesModal"></ExercisesModal>
  812. <!-- <el-dialog
  813. title="预约考试"
  814. :visible.sync="appointModal"
  815. width="600px"
  816. class="appoint-modal"
  817. :close-on-click-modal="false"
  818. :close-on-press-escape="false"
  819. >
  820. <div class="appoint-modal__content">
  821. <el-radio
  822. v-for="(
  823. appointChild, appointIndex
  824. ) in appointItem.examApplyGoodsList"
  825. v-model="applyId"
  826. :key="appointIndex"
  827. :label="appointChild.applyId"
  828. >{{ appointChild.applyName }}</el-radio
  829. >
  830. </div>
  831. <span slot="footer" class="dialog-footer">
  832. <el-button @click="appointModal = false">取 消</el-button>
  833. <el-button type="primary" @click="confirmAppoint"
  834. >立即预约</el-button
  835. >
  836. </span>
  837. </el-dialog> -->
  838. <el-dialog
  839. title="实名验证确认"
  840. :visible.sync="showConfirm"
  841. width="600px"
  842. class="showconfirm"
  843. :close-on-click-modal="false"
  844. :close-on-press-escape="false"
  845. :show-close="false"
  846. >
  847. <div class="showconfirm__content">
  848. <div class="text">
  849. 为避免个人信息不正确导致您的学习时长无效,请认真核对以下信息是否正确,如信息有误请取消当前操作,立刻联系020-38946666
  850. </div>
  851. <el-descriptions :column="1">
  852. <el-descriptions-item label="姓名">{{
  853. userInfo && userInfo.realname
  854. }}</el-descriptions-item>
  855. <el-descriptions-item label="手机号">{{
  856. userInfo && userInfo.telphone
  857. }}</el-descriptions-item>
  858. <el-descriptions-item label="身份证号">{{
  859. userInfo && userInfo.idCard
  860. }}</el-descriptions-item>
  861. </el-descriptions>
  862. <div class="">
  863. <el-checkbox v-model="confirmChecked"
  864. >确认个人信息无误</el-checkbox
  865. >
  866. </div>
  867. </div>
  868. <span slot="footer" class="dialog-footer">
  869. <el-button @click="showConfirm = false">取 消</el-button>
  870. <el-button
  871. type="primary"
  872. @click="confirmUser()"
  873. :disabled="confirmCount > 0"
  874. :loading="confirmLoading"
  875. >{{
  876. confirmCount > 0 ? "确 定(" + confirmCount + ")" : "确 定"
  877. }}</el-button
  878. >
  879. </span>
  880. </el-dialog>
  881. </div>
  882. </template>
  883. <script>
  884. import { mapGetters, mapActions } from "vuex";
  885. import SelectClassModal from "@/components/selectClassModal";
  886. import RebuildModal from "@/components/rebuildModal";
  887. import ExercisesModal from "@/components/exercisesModal";
  888. import AppointTest from './components/AppointTest.vue'
  889. import * as baseUrls from "@/axios.js";
  890. export default {
  891. name: "MyCourse",
  892. components: {
  893. SelectClassModal,
  894. RebuildModal,
  895. ExercisesModal,
  896. AppointTest,
  897. },
  898. data() {
  899. return {
  900. dialogVisible: false,
  901. appointItem: {},
  902. applyId: "",
  903. appointModal: false,
  904. activeItem: {},
  905. confirmChecked: false,
  906. confirmTimer: null,
  907. confirmLoading: false,
  908. confirmCount: 10,
  909. showConfirm: false,
  910. tabList: [],
  911. sysTime: 0,
  912. activeName: "-1",
  913. param: {
  914. pageNum: 1,
  915. pageSize: 10,
  916. },
  917. total: 0,
  918. courseList: [],
  919. loading: null,
  920. showExercisesModal: false,
  921. };
  922. },
  923. computed: {
  924. ...mapGetters(["userInfo"]),
  925. },
  926. async mounted() {
  927. this.getUserInfo();
  928. this.sysTime = this.$tools.timest();
  929. // await this.orderUserEduList();
  930. this.courseGoodsList();
  931. },
  932. methods: {
  933. ...mapActions(["getUserInfo"]),
  934. openBoxs(data) {
  935. console.log(data);
  936. this.activeItem = data
  937. this.dialogVisible = true;
  938. },
  939. activeFunc() {},
  940. tabChange(e) {
  941. if (this.activeName == e.name) {
  942. return;
  943. }
  944. this.activeName = e.name;
  945. this.courseGoodsList();
  946. },
  947. confirmUser() {
  948. if (!this.confirmChecked) {
  949. this.$message.warning("请勾选确认个人信息无误");
  950. return;
  951. }
  952. this.confirmLoading = true;
  953. let infoJson = {
  954. realname: this.userInfo.realname,
  955. idCard: this.userInfo.idCard,
  956. telphone: this.userInfo.telphone,
  957. };
  958. this.$request
  959. .userConfirminfo({
  960. infoJson: JSON.stringify(infoJson),
  961. orderGoodsId: this.activeItem.orderGoodsId,
  962. })
  963. .then((res) => {
  964. if (res.data.pushInfo) {
  965. this.$message.success("提交成功");
  966. } else {
  967. this.$confirm(
  968. "开通信息推送不成功,无法进入学习,请联系020-87085982!",
  969. "提示",
  970. {
  971. confirmButtonText: "确定",
  972. closeOnClickModal: false,
  973. closeOnPressEscape: false,
  974. distinguishCancelAndClose: false,
  975. showClose: false,
  976. showCancelButton: false,
  977. }
  978. )
  979. .then((_) => {})
  980. .catch((_) => {});
  981. }
  982. this.showConfirm = false;
  983. this.confirmLoading = false;
  984. });
  985. },
  986. orderUserEduList() {
  987. return new Promise((resolve) => {
  988. this.$request
  989. .orderUserEduList({
  990. goodsType: 1,
  991. })
  992. .then((res) => {
  993. res.rows.forEach((row) => {
  994. row.id = row.id + "";
  995. });
  996. this.tabList.push(
  997. {
  998. educationName: "全部课程",
  999. id: "-1",
  1000. },
  1001. ...res.rows
  1002. );
  1003. resolve();
  1004. });
  1005. });
  1006. },
  1007. currentChange(e) {
  1008. this.param.pageNum = e;
  1009. this.courseGoodsList();
  1010. },
  1011. async goCourseDetail(item) {
  1012. this.$emit("backData", item);
  1013. this.dialogVisible = false;
  1014. return;
  1015. this.activeItem = item;
  1016. if (item.interfaceAccountId > 0) {
  1017. //学习账号已开通
  1018. if (item.learnStatus == 1) {
  1019. //跳转第三方h5
  1020. this.$router.push({
  1021. path: `/my-course-detail/${item.goodsId}`,
  1022. query: {
  1023. gradeId: item.gradeId,
  1024. orderGoodsId: item.orderGoodsId,
  1025. isOther: 1,
  1026. },
  1027. });
  1028. return;
  1029. } else {
  1030. this.$message({
  1031. type: "warning",
  1032. message:
  1033. "您的学习账号未开通,请稍后再尝试,有疑问,请联系020-87085982!",
  1034. });
  1035. return;
  1036. }
  1037. }
  1038. if (
  1039. (item.serviceStartTime && this.sysTime <= item.serviceStartTime) ||
  1040. (item.serviceEndTime && this.sysTime >= item.serviceEndTime)
  1041. ) {
  1042. this.$message({
  1043. type: "warning",
  1044. message: "不在学习服务期,不能进入学习",
  1045. });
  1046. return;
  1047. }
  1048. if (
  1049. (item.classStartTime && this.sysTime <= item.classStartTime) ||
  1050. (item.classEndTime && this.sysTime >= item.classEndTime)
  1051. ) {
  1052. this.$message({
  1053. type: "warning",
  1054. message: "不在班级有效期,不能进入学习",
  1055. });
  1056. return;
  1057. }
  1058. if (item.learningStatus == 2) {
  1059. this.$message({
  1060. type: "warning",
  1061. message: "开放学习时间待定,不能进入学习",
  1062. });
  1063. return;
  1064. }
  1065. if (item.classStatus == 0) {
  1066. this.$message({
  1067. type: "warning",
  1068. message: "尚未开班,不能进入学习",
  1069. });
  1070. return;
  1071. }
  1072. if (item.learningStatus == 3 && this.sysTime < item.learningTimeStart) {
  1073. this.$message({
  1074. type: "warning",
  1075. message: "不在开放学习时间,不能进入学习",
  1076. });
  1077. return;
  1078. }
  1079. var confirmDetail = true;
  1080. if (item.educationName == "继续教育") {
  1081. if (
  1082. item.officialName &&
  1083. item.businessName == "二级" &&
  1084. item.projectName == "建造师"
  1085. ) {
  1086. confirmDetail = await this.userConfirmInfoDetail();
  1087. }
  1088. }
  1089. // //内部系统
  1090. // if (item.interfacePushId > 0 && item.officialStatus != 1) {
  1091. // this.$message({
  1092. // type: "warning",
  1093. // message: "机构正在为您报名中,请耐心等待,有疑问请联系020-87085982!",
  1094. // });
  1095. // return;
  1096. // }
  1097. if (!confirmDetail) {
  1098. return;
  1099. }
  1100. let rebuildStatus = await this.courseGoodsRebuildStatus(
  1101. item.goodsId,
  1102. item.gradeId
  1103. );
  1104. if (rebuildStatus == 0) {
  1105. this.$refs.rebuildModal.showModal(item);
  1106. return;
  1107. }
  1108. // if (item.educationName == "继续教育") {
  1109. this.$request
  1110. .lockLockStatus({
  1111. action: "jxjy",
  1112. uuid: sessionStorage.getItem("uuid"),
  1113. })
  1114. .then((res) => {
  1115. //有其他端在操作,不能学习
  1116. this.$message({
  1117. type: "warning",
  1118. message: res.msg,
  1119. });
  1120. })
  1121. .catch((err) => {
  1122. //可以学习
  1123. this.$request
  1124. .courseCourseList({
  1125. pageNum: 1,
  1126. pageSize: 1,
  1127. goodsId: item.goodsId,
  1128. gradeId: item.gradeId,
  1129. })
  1130. .then((res) => {
  1131. if (res.rows.length) {
  1132. // if (
  1133. // item.officialName &&
  1134. // item.businessName == "二级" &&
  1135. // item.projectName == "建造师"
  1136. // ) {
  1137. // this.userConfirmInfoDetail().then((res) => {
  1138. // this.$router.push({
  1139. // path: `/my-course-detail/${item.goodsId}`,
  1140. // query: {
  1141. // gradeId: item.gradeId,
  1142. // orderGoodsId: item.orderGoodsId,
  1143. // courseId: res.rows[0].courseId || "",
  1144. // },
  1145. // });
  1146. // });
  1147. // } else {
  1148. this.$emit("backData", item);
  1149. this.dialogVisible = false;
  1150. return;
  1151. this.$router.push({
  1152. path: `/my-course-detail/${item.goodsId}`,
  1153. query: {
  1154. gradeId: item.gradeId,
  1155. orderGoodsId: item.orderGoodsId,
  1156. courseId: res.rows[0].courseId || "",
  1157. },
  1158. });
  1159. // }
  1160. } else {
  1161. this.$message({
  1162. type: "warning",
  1163. message: "课程内暂无可以学习的科目",
  1164. });
  1165. }
  1166. });
  1167. });
  1168. // } else {
  1169. // this.$request
  1170. // .courseCourseList({
  1171. // pageNum: 1,
  1172. // pageSize: 1,
  1173. // goodsId: item.goodsId,
  1174. // gradeId: item.gradeId,
  1175. // })
  1176. // .then((res) => {
  1177. // if (res.rows.length) {
  1178. // this.$router.push({
  1179. // path: `/my-course-detail/${item.goodsId}`,
  1180. // query: {
  1181. // gradeId: item.gradeId,
  1182. // orderGoodsId: item.orderGoodsId,
  1183. // courseId: res.rows[0].courseId || "",
  1184. // },
  1185. // });
  1186. // } else {
  1187. // this.$message({
  1188. // type: "warning",
  1189. // message: "课程内暂无可以学习的科目",
  1190. // });
  1191. // }
  1192. // });
  1193. // }
  1194. },
  1195. userConfirmInfoDetail() {
  1196. return new Promise((resolve) => {
  1197. this.$request
  1198. .userConfirmInfoDetail({
  1199. orderGoodsId: this.activeItem.orderGoodsId,
  1200. })
  1201. .then((res) => {
  1202. if (!res.data) {
  1203. clearInterval(this.confirmTimer);
  1204. this.confirmCount = 10;
  1205. this.showConfirm = true;
  1206. this.confirmTimer = setInterval(() => {
  1207. if (this.confirmCount > 0) {
  1208. this.confirmCount--;
  1209. } else {
  1210. clearInterval(this.confirmTimer);
  1211. }
  1212. }, 1000);
  1213. } else {
  1214. if (res.data.pushInfo) {
  1215. resolve(true);
  1216. } else {
  1217. this.$confirm(
  1218. "开通信息推送不成功,无法进入学习,请联系020-87085982!",
  1219. "提示",
  1220. {
  1221. confirmButtonText: "确定",
  1222. closeOnClickModal: false,
  1223. closeOnPressEscape: false,
  1224. distinguishCancelAndClose: false,
  1225. showClose: false,
  1226. showCancelButton: false,
  1227. }
  1228. )
  1229. .then((_) => {})
  1230. .catch((_) => {});
  1231. resolve(false);
  1232. }
  1233. }
  1234. });
  1235. });
  1236. },
  1237. appBeforeAddress(item) {
  1238. this.$refs.exercisesModal.showModal(item);
  1239. },
  1240. rebuildSubmit(item) {
  1241. this.$router.push({
  1242. path: `/my-course-detail/${item.goodsId}`,
  1243. query: {
  1244. gradeId: item.gradeId,
  1245. orderGoodsId: item.orderGoodsId,
  1246. rebuild: 1,
  1247. },
  1248. });
  1249. },
  1250. selectClass(item) {
  1251. this.$refs.selectClassModal.showModal(item);
  1252. },
  1253. selectClassOk() {
  1254. this.courseGoodsList();
  1255. },
  1256. /**
  1257. * @param {Object} goodsId 商品id
  1258. * 查询商品重修状态
  1259. */
  1260. courseGoodsRebuildStatus(goodsId, gradeId) {
  1261. return new Promise((resolve) => {
  1262. this.$request
  1263. .courseGoodsRebuildStatus({
  1264. goodsId: goodsId,
  1265. gradeId: gradeId,
  1266. })
  1267. .then((res) => {
  1268. resolve(res.data);
  1269. });
  1270. });
  1271. },
  1272. courseGoodsList() {
  1273. let param = JSON.parse(JSON.stringify(this.param));
  1274. if (this.activeName == "-1") {
  1275. param.educationTypeId = "";
  1276. } else {
  1277. param.educationTypeId = this.activeName;
  1278. }
  1279. this.$request.courseGoodsList(param).then((res) => {
  1280. this.courseList = res.rows;
  1281. this.total = res.total;
  1282. });
  1283. },
  1284. progressText(item) {
  1285. return () => {
  1286. return (
  1287. item.stuAllNum +
  1288. item.recordNum +
  1289. "/" +
  1290. (item.secAllNum + item.examNum)
  1291. );
  1292. };
  1293. },
  1294. appointment(item) {
  1295. this.applyId = "";
  1296. this.appointItem = item;
  1297. this.appointModal = true;
  1298. },
  1299. confirmAppoint() {
  1300. if (!this.applyId) {
  1301. this.$message.warning("请选择要预约的考试");
  1302. return;
  1303. }
  1304. var data = {
  1305. goodsId: this.appointItem.goodsId,
  1306. gradeId: this.appointItem.gradeId,
  1307. applyId: this.applyId,
  1308. orderGoodsId: this.appointItem.orderGoodsId,
  1309. };
  1310. this.$request
  1311. .getApplysubscribe(data)
  1312. .then((res) => {
  1313. this.$router.push({
  1314. path: "/person-center/my-classhour/appointment",
  1315. query: {
  1316. goodsId: this.appointItem.goodsId,
  1317. gradeId: this.appointItem.gradeId,
  1318. orderGoodsId: this.appointItem.orderGoodsId,
  1319. applyId: this.applyId,
  1320. },
  1321. });
  1322. })
  1323. .catch((err) => {
  1324. this.$message({
  1325. type: "warning",
  1326. message: err.msg,
  1327. });
  1328. });
  1329. },
  1330. },
  1331. };
  1332. </script>
  1333. <!-- Add "scoped" attribute to limit CSS to this component only -->
  1334. <style scoped lang="scss">
  1335. /deep/ .el-dialog {
  1336. margin-top: 6vh !important;
  1337. }
  1338. .my-course {
  1339. max-height: 50vh;
  1340. overflow: auto;
  1341. &__header {
  1342. /deep/ .el-tabs__header {
  1343. margin-bottom: 0;
  1344. }
  1345. }
  1346. &__body {
  1347. .list {
  1348. .course-item {
  1349. margin-top: 24px;
  1350. background: #fafbfc;
  1351. border-radius: 8px;
  1352. overflow: hidden;
  1353. &__header {
  1354. height: 40px;
  1355. border-bottom: 1px solid #eee;
  1356. padding: 0 18px;
  1357. .state {
  1358. margin-top: 8px;
  1359. float: left;
  1360. font-size: 14px;
  1361. font-family: Microsoft YaHei;
  1362. font-weight: 400;
  1363. color: #666666;
  1364. .red {
  1365. color: #ff3b30;
  1366. }
  1367. .note {
  1368. vertical-align: middle;
  1369. display: inline-block;
  1370. padding: 0 10px;
  1371. height: 24px;
  1372. background: #ffeceb;
  1373. border: 1px solid #ff3b30;
  1374. border-radius: 12px;
  1375. font-size: 14px;
  1376. font-family: Microsoft YaHei;
  1377. font-weight: 400;
  1378. color: #ff3b30;
  1379. text-align: center;
  1380. line-height: 24px;
  1381. margin-right: 10px;
  1382. &--yellow {
  1383. border-color: #ffb001;
  1384. color: #ffb001;
  1385. background: #fff8e8;
  1386. }
  1387. &--green {
  1388. border-color: #56dc68;
  1389. color: #56dc68;
  1390. background: #e6feea;
  1391. }
  1392. }
  1393. }
  1394. .time {
  1395. float: right;
  1396. line-height: 40px;
  1397. text-align: right;
  1398. font-size: 12px;
  1399. font-family: Microsoft YaHei;
  1400. font-weight: 400;
  1401. color: #666666;
  1402. &--red {
  1403. color: #ff3b30;
  1404. }
  1405. }
  1406. }
  1407. &__body {
  1408. .img {
  1409. float: left;
  1410. width: 160px;
  1411. height: 90px;
  1412. img {
  1413. max-width: 100%;
  1414. max-height: 100%;
  1415. }
  1416. }
  1417. .text {
  1418. float: left;
  1419. margin-left: 12px;
  1420. .title {
  1421. margin-top: 10px;
  1422. font-size: 16px;
  1423. font-family: Microsoft YaHei;
  1424. font-weight: bold;
  1425. color: #333333;
  1426. .note {
  1427. display: inline-block;
  1428. vertical-align: middle;
  1429. border: 1px solid #333333;
  1430. border-radius: 4px;
  1431. font-size: 12px;
  1432. font-family: Microsoft YaHei;
  1433. font-weight: 400;
  1434. color: #333333;
  1435. padding: 2px 5px;
  1436. margin-left: 12px;
  1437. }
  1438. }
  1439. .progress {
  1440. margin-top: 30px;
  1441. font-size: 14px;
  1442. font-family: Microsoft YaHei;
  1443. font-weight: 400;
  1444. color: #333333;
  1445. &-line {
  1446. width: 220px;
  1447. display: inline-block;
  1448. }
  1449. /deep/ .el-progress-bar {
  1450. padding-right: 70px;
  1451. margin-right: -70px;
  1452. }
  1453. }
  1454. }
  1455. .btns-wrap {
  1456. display: table;
  1457. float: right;
  1458. height: 90px;
  1459. width: 130px;
  1460. .btns {
  1461. display: table-cell;
  1462. vertical-align: middle;
  1463. text-align: center;
  1464. .btn {
  1465. cursor: pointer;
  1466. margin: 2px 0;
  1467. width: 122px;
  1468. height: 32px;
  1469. padding: 0;
  1470. border-radius: 16px;
  1471. display: inline-block;
  1472. text-align: center;
  1473. line-height: 32px;
  1474. color: #fff;
  1475. &--normal {
  1476. &.disabled {
  1477. background: rgb(101, 164, 253);
  1478. border-color: rgb(101, 164, 253);
  1479. }
  1480. }
  1481. &--warm {
  1482. background: #ff3b30;
  1483. &:hover {
  1484. background: #f56c6c;
  1485. }
  1486. }
  1487. }
  1488. }
  1489. }
  1490. }
  1491. &__footer {
  1492. padding: 20px 18px;
  1493. font-size: 14px;
  1494. color: #333;
  1495. .text {
  1496. margin-right: 20px;
  1497. &--red {
  1498. color: #ff3b30;
  1499. }
  1500. }
  1501. }
  1502. }
  1503. }
  1504. .pagination {
  1505. padding: 30px 0;
  1506. text-align: center;
  1507. }
  1508. }
  1509. .exercises-modal {
  1510. &__content {
  1511. > div {
  1512. font-size: 16px;
  1513. line-height: 30px;
  1514. text-align: center;
  1515. img {
  1516. display: inline;
  1517. }
  1518. }
  1519. }
  1520. }
  1521. .appoint-modal {
  1522. &__content {
  1523. .el-radio {
  1524. display: block;
  1525. margin: 10px 30px 10px 0;
  1526. }
  1527. }
  1528. }
  1529. }
  1530. .headerStyle{
  1531. .title{
  1532. padding: 6px 12px;
  1533. color: #3f8dfd;
  1534. background-color: #F8F8F9;
  1535. }
  1536. }
  1537. .course-items {
  1538. margin-top: 10px;
  1539. background: #fafbfc;
  1540. border-radius: 8px;
  1541. overflow: hidden;
  1542. padding-bottom: 24px;
  1543. margin-bottom: 24px;
  1544. border-bottom: 2px solid #eee;
  1545. &__header {
  1546. height: 40px;
  1547. border-bottom: 1px solid #eee;
  1548. padding: 0 18px;
  1549. .state {
  1550. margin-top: 8px;
  1551. float: left;
  1552. font-size: 14px;
  1553. font-family: Microsoft YaHei;
  1554. font-weight: 400;
  1555. color: #666666;
  1556. .red {
  1557. color: #ff3b30;
  1558. }
  1559. .note {
  1560. vertical-align: middle;
  1561. display: inline-block;
  1562. padding: 0 10px;
  1563. height: 24px;
  1564. background: #ffeceb;
  1565. border: 1px solid #ff3b30;
  1566. border-radius: 12px;
  1567. font-size: 14px;
  1568. font-family: Microsoft YaHei;
  1569. font-weight: 400;
  1570. color: #ff3b30;
  1571. text-align: center;
  1572. line-height: 24px;
  1573. margin-right: 10px;
  1574. &--yellow {
  1575. border-color: #ffb001;
  1576. color: #ffb001;
  1577. background: #fff8e8;
  1578. }
  1579. &--green {
  1580. border-color: #56dc68;
  1581. color: #56dc68;
  1582. background: #e6feea;
  1583. }
  1584. }
  1585. }
  1586. .time {
  1587. float: right;
  1588. line-height: 40px;
  1589. text-align: right;
  1590. font-size: 12px;
  1591. font-family: Microsoft YaHei;
  1592. font-weight: 400;
  1593. color: #666666;
  1594. &--red {
  1595. color: #ff3b30;
  1596. }
  1597. }
  1598. }
  1599. &__body {
  1600. .img {
  1601. float: left;
  1602. width: 160px;
  1603. height: 90px;
  1604. img {
  1605. max-width: 100%;
  1606. max-height: 100%;
  1607. }
  1608. }
  1609. .text {
  1610. float: left;
  1611. margin-left: 12px;
  1612. .title {
  1613. margin-top: 10px;
  1614. font-size: 16px;
  1615. font-family: Microsoft YaHei;
  1616. font-weight: bold;
  1617. color: #333333;
  1618. .note {
  1619. display: inline-block;
  1620. vertical-align: middle;
  1621. border: 1px solid #333333;
  1622. border-radius: 4px;
  1623. font-size: 12px;
  1624. font-family: Microsoft YaHei;
  1625. font-weight: 400;
  1626. color: #333333;
  1627. padding: 2px 5px;
  1628. margin-left: 12px;
  1629. }
  1630. }
  1631. .progress {
  1632. margin-top: 30px;
  1633. font-size: 14px;
  1634. font-family: Microsoft YaHei;
  1635. font-weight: 400;
  1636. color: #333333;
  1637. &-line {
  1638. width: 220px;
  1639. display: inline-block;
  1640. }
  1641. /deep/ .el-progress-bar {
  1642. padding-right: 70px;
  1643. margin-right: -70px;
  1644. }
  1645. }
  1646. }
  1647. .btns-wrap {
  1648. display: table;
  1649. float: right;
  1650. height: 90px;
  1651. width: 130px;
  1652. .btns {
  1653. display: table-cell;
  1654. vertical-align: middle;
  1655. text-align: center;
  1656. .btn {
  1657. cursor: pointer;
  1658. margin: 2px 0;
  1659. width: 122px;
  1660. height: 32px;
  1661. padding: 0;
  1662. border-radius: 16px;
  1663. display: inline-block;
  1664. text-align: center;
  1665. line-height: 32px;
  1666. color: #fff;
  1667. &--normal {
  1668. &.disabled {
  1669. background: rgb(101, 164, 253);
  1670. border-color: rgb(101, 164, 253);
  1671. }
  1672. }
  1673. &--warm {
  1674. background: #ff3b30;
  1675. &:hover {
  1676. background: #f56c6c;
  1677. }
  1678. }
  1679. }
  1680. }
  1681. }
  1682. }
  1683. &__footer {
  1684. padding: 20px 18px;
  1685. font-size: 14px;
  1686. color: #333;
  1687. .text {
  1688. margin-right: 20px;
  1689. &--red {
  1690. color: #ff3b30;
  1691. }
  1692. }
  1693. }
  1694. }
  1695. </style>