studyTimes.vue 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309
  1. <template>
  2. <div id="classHoursReview">
  3. <div>
  4. <div class="dis_fs">
  5. <ul class="ul_ls">
  6. <li>学员编码:{{ userData.studentCode }}</li>
  7. <li>学员姓名:{{ userData.realName }}</li>
  8. <li>学员身份证号码:{{ userData.idCard }}</li>
  9. <li>绑定手机号码:{{ userData.telPhone }}</li>
  10. </ul>
  11. <div class="photoSty1">
  12. <img
  13. style="width: 100%; height: 100%"
  14. v-if="!recent_photos"
  15. src="@/assets/404_images/wuyuxaog.png"
  16. alt=""
  17. />
  18. <el-image
  19. v-else
  20. style="width: 100%; height: 100%"
  21. :src="$methodsTools.splitImgHost(recent_photos)"
  22. :preview-src-list="[$methodsTools.splitImgHost(recent_photos)]"
  23. >
  24. </el-image>
  25. <div class="pos_bottom">一寸头像图</div>
  26. </div>
  27. <div class="photoSty2">
  28. <img
  29. style="width: 100%; height: 100%"
  30. v-if="!idcard_face_photo"
  31. src="@/assets/404_images/wuyuxaog.png"
  32. alt=""
  33. />
  34. <el-image
  35. v-else
  36. style="width: 100%; height: 100%"
  37. :src="$methodsTools.splitImgHost(idcard_face_photo)"
  38. :preview-src-list="[$methodsTools.splitImgHost(idcard_face_photo)]"
  39. >
  40. </el-image>
  41. <div class="pos_bottom">身份证正面照片</div>
  42. </div>
  43. <div class="photoSty2" style="margin-right: 0px">
  44. <img
  45. style="width: 100%; height: 100%"
  46. v-if="!idcard_national_photo"
  47. src="@/assets/404_images/wuyuxaog.png"
  48. alt=""
  49. />
  50. <el-image
  51. v-else
  52. style="width: 100%; height: 100%"
  53. :src="$methodsTools.splitImgHost(idcard_national_photo)"
  54. :preview-src-list="[
  55. $methodsTools.splitImgHost(idcard_national_photo),
  56. ]"
  57. >
  58. </el-image>
  59. <div class="pos_bottom">身份证背面照片</div>
  60. </div>
  61. </div>
  62. </div>
  63. <div class="dis_fls">
  64. <div class="s_sd">
  65. <div class="dis_colu">
  66. <div class="jdNumSty" style="margin-bottom: 4px">
  67. 视频学习进度:{{ userData.stuAllNum }}/{{ userData.secAllNum }}
  68. {{
  69. userData.stuAllNum == 0 && userData.secAllNum == 0
  70. ? "0"
  71. : ((userData.stuAllNum / userData.secAllNum) * 100).toFixed(2)
  72. }}% 通过:{{ userData.pass }}节
  73. <span style="color: #f56c6c">作弊:{{ userData.cheat }}节</span>
  74. <span style="color: #409eff"> 待审:{{ userData.pending }}节</span>
  75. </div>
  76. <div class="jdNumSty">
  77. 做题学习进度:{{ userData.recordNum }}/{{ userData.examNum }}
  78. {{
  79. userData.recordNum == 0 && userData.examNum == 0
  80. ? "0"
  81. : ((userData.recordNum / userData.examNum) * 100).toFixed(2)
  82. }}% 通过:{{ userData.examPass }}节
  83. <span style="color: #f56c6c">作弊:{{ userData.examCheat }}节</span>
  84. <span style="color: #409eff">
  85. 待审:{{ userData.examPending }}节</span
  86. >
  87. </div>
  88. </div>
  89. <div class="shbtns">
  90. 学时审批状态:{{
  91. userData.allStatus === 1
  92. ? "未通过"
  93. : userData.allStatus === 0
  94. ? "待审核"
  95. : userData.allStatus === -1
  96. ? "不可审核"
  97. : userData.allStatus === 2
  98. ? "通过审核"
  99. : "未知状态,请联系管理员"
  100. }}
  101. </div>
  102. </div>
  103. <div class="s_sd">
  104. <div
  105. class="btnStys"
  106. @click="getChangeStatus(1)"
  107. v-if="userData.allStatus === 0"
  108. >
  109. 待审核全部通过
  110. </div>
  111. <div
  112. class="btnStys"
  113. @click="getChangeStatus(2)"
  114. v-if="userData.allStatus === 0"
  115. >
  116. 待审核全部作弊
  117. </div>
  118. </div>
  119. </div>
  120. <div style="flex: 1; flex-shrink: 0; overflow: auto">
  121. <el-table
  122. :default-expand-all="defaultExpand"
  123. v-for="asrt in computedList(listLabel)"
  124. border
  125. v-loading="loading"
  126. :key="asrt.value"
  127. :data="
  128. listData[
  129. asrt.value === 0
  130. ? 'tableData1'
  131. : asrt.value === 1
  132. ? 'tableData2'
  133. : asrt.value === 2
  134. ? 'tableData3'
  135. : ''
  136. ]
  137. "
  138. style="width: 100%"
  139. :header-cell-style="
  140. asrt.value === 0
  141. ? {
  142. 'background-color': 'skyblue',
  143. padding: '8px',
  144. color: '#333',
  145. }
  146. : asrt.value === 1
  147. ? {
  148. 'background-color': 'rgb(255,255,204)',
  149. padding: '8px',
  150. color: '#333',
  151. }
  152. : asrt.value === 2
  153. ? {
  154. 'background-color': '#eee',
  155. padding: '8px',
  156. color: '#333',
  157. }
  158. : ''
  159. "
  160. >
  161. <!-- 插槽开始--------------------------------------------------------- -->
  162. <el-table-column
  163. :label="
  164. asrt.value === 0
  165. ? '模块'
  166. : asrt.value === 1
  167. ? '章'
  168. : asrt.value === 2
  169. ? '节/卷'
  170. : ''
  171. "
  172. type="expand"
  173. width="70px"
  174. >
  175. <template slot-scope="scope">
  176. <!-- type为3时使用该插槽START -->
  177. <div
  178. v-if="scope.row.type === 3 || scope.row.type === 4"
  179. class="dis_flexs"
  180. >
  181. <ul
  182. style="flex: 1"
  183. v-if="
  184. scope.row.userStudyRecordPhotoList &&
  185. scope.row.userStudyRecordPhotoList.length
  186. "
  187. >
  188. <li
  189. v-for="(its, inds) in scope.row.userStudyRecordPhotoList"
  190. :key="inds"
  191. class="liImgs"
  192. >
  193. <el-image
  194. style="width: 100%; height: 100%"
  195. :src="$methodsTools.splitImgHost(its.photo)"
  196. :preview-src-list="[$methodsTools.splitImgHost(its.photo)]"
  197. >
  198. </el-image>
  199. <div class="abos">
  200. {{ $methodsTools.onlyForma(its.createTime) }}
  201. </div>
  202. </li>
  203. <div style="clear: both"></div>
  204. </ul>
  205. <p v-else style="text-align: center; width: 100%">暂无拍照数据</p>
  206. <div
  207. class="styFlex"
  208. v-if="
  209. (userData.allStatus === 0 || userData.allStatus === 1) &&
  210. scope.row.periodStatus === 1
  211. "
  212. >
  213. <el-button
  214. :disabled="scope.row.status === 1"
  215. class="btnstyles"
  216. size="mini"
  217. @click="changeStatus(scope.row, 1, scope.$index)"
  218. >通过</el-button
  219. >
  220. <el-button
  221. :disabled="scope.row.status === 0"
  222. class="btnstyles"
  223. size="mini"
  224. @click="
  225. scope.row.status === 2 || scope.row.status === 3
  226. ? changeStatus(scope.row, 2, scope.$index)
  227. : ''
  228. "
  229. >作弊</el-button
  230. >
  231. </div>
  232. <!-- <div
  233. class="styFlex"
  234. v-if="
  235. (scope.row.allStatus === 0 || scope.row.allStatus === 1) &&
  236. scope.row.periodStatus === 1 &&
  237. scope.row.status === 0
  238. "
  239. >
  240. <el-button
  241. class="btnstyles"
  242. size="mini"
  243. @click="changeStatus(scope.row, 1, scope.$index)"
  244. >通过</el-button
  245. >
  246. </div> -->
  247. </div>
  248. <!-- type为3时使用该插槽END -->
  249. <!-- 章表格START -->
  250. <el-table
  251. v-else
  252. border
  253. :data="
  254. scope.row.type === 1
  255. ? scope.row.classPeriods
  256. : scope.row.type === 2
  257. ? scope.row.classPeriodSectionList
  258. : ''
  259. "
  260. style="width: 98%; margin-left: 2%"
  261. :default-expand-all="defaultExpand"
  262. :header-cell-style="
  263. scope.row.type === 1
  264. ? {
  265. 'background-color': 'rgb(255,255,204)',
  266. padding: '8px',
  267. color: '#333',
  268. }
  269. : scope.row.type === 2
  270. ? {
  271. 'background-color': '#eee',
  272. padding: '8px',
  273. color: '#333',
  274. }
  275. : ''
  276. "
  277. >
  278. <!-- 章插槽START -->
  279. <el-table-column
  280. type="expand"
  281. :label="
  282. scope.row.type === 1
  283. ? '章'
  284. : scope.row.type === 2
  285. ? '节/卷'
  286. : ''
  287. "
  288. :width="
  289. scope.row.type === 1
  290. ? '70px'
  291. : scope.row.type === 2
  292. ? '80px'
  293. : ''
  294. "
  295. >
  296. <template slot-scope="scope2">
  297. <!-- 节插槽START -->
  298. <div
  299. v-if="scope2.row.type === 3 || scope2.row.type === 4"
  300. class="dis_flexs"
  301. >
  302. <ul
  303. style="flex: 1"
  304. v-if="
  305. scope2.row.userStudyRecordPhotoList &&
  306. scope2.row.userStudyRecordPhotoList.length
  307. "
  308. >
  309. <li
  310. v-for="(its, inds) in scope2.row
  311. .userStudyRecordPhotoList"
  312. :key="inds"
  313. class="liImgs"
  314. >
  315. <el-image
  316. style="width: 100%; height: 100%"
  317. :src="$methodsTools.splitImgHost(its.photo)"
  318. :preview-src-list="[
  319. $methodsTools.splitImgHost(its.photo),
  320. ]"
  321. >
  322. </el-image>
  323. <div class="abos">
  324. {{ $methodsTools.onlyForma(its.createTime) }}
  325. </div>
  326. </li>
  327. <div style="clear: both"></div>
  328. </ul>
  329. <p v-else style="text-align: center; width: 100%">
  330. 暂无拍照数据
  331. </p>
  332. <div
  333. class="styFlex"
  334. v-if="
  335. (userData.allStatus === 0 ||
  336. userData.allStatus === 1) &&
  337. scope2.row.periodStatus === 1
  338. "
  339. >
  340. <el-button
  341. :disabled="scope2.row.status === 1"
  342. class="btnstyles"
  343. size="mini"
  344. @click="
  345. changeStatusCharpter(
  346. scope2.row,
  347. 1,
  348. scope.$index,
  349. scope2.$index
  350. )
  351. "
  352. >通过</el-button
  353. >
  354. <el-button
  355. :disabled="scope2.row.status === 0"
  356. class="btnstyles"
  357. size="mini"
  358. @click="
  359. scope2.row.status === 2 || scope2.row.status === 3
  360. ? changeStatusCharpter(
  361. scope2.row,
  362. 2,
  363. scope.$index,
  364. scope2.$index
  365. )
  366. : ''
  367. "
  368. >作弊</el-button
  369. >
  370. </div>
  371. <!-- <div
  372. class="styFlex"
  373. v-if="
  374. (scope2.row.allStatus === 0 ||
  375. scope2.row.allStatus === 1) &&
  376. scope2.row.periodStatus === 1 &&
  377. scope2.row.status === 0
  378. "
  379. >
  380. <el-button
  381. class="btnstyles"
  382. size="mini"
  383. @click="
  384. changeStatusCharpter(
  385. scope2.row,
  386. 1,
  387. scope.$index,
  388. scope2.$index
  389. )
  390. "
  391. >通过</el-button
  392. >
  393. </div> -->
  394. </div>
  395. <!-- 节插槽END -->
  396. <!-- 节表格START -->
  397. <el-table
  398. v-else
  399. border
  400. :data="
  401. scope2.row.type === 2
  402. ? scope2.row.classPeriodSectionList
  403. : ''
  404. "
  405. style="width: 98%; margin-left: 2%"
  406. :default-expand-all="defaultExpand"
  407. :header-cell-style="
  408. scope2.row.type === 2
  409. ? {
  410. 'background-color': '#eee',
  411. padding: '8px',
  412. color: '#333',
  413. }
  414. : ''
  415. "
  416. >
  417. <!-- 节插槽START -->
  418. <el-table-column
  419. type="expand"
  420. :label="scope2.row.type === 2 ? '节/卷' : ''"
  421. width="80px"
  422. >
  423. <template slot-scope="scope3">
  424. <div
  425. v-if="scope3.row.type === 3 || scope3.row.type === 4"
  426. class="dis_flexs"
  427. >
  428. <ul
  429. style="flex: 1"
  430. v-if="
  431. scope3.row.userStudyRecordPhotoList &&
  432. scope3.row.userStudyRecordPhotoList.length
  433. "
  434. >
  435. <li
  436. v-for="(its, inds) in scope3.row
  437. .userStudyRecordPhotoList"
  438. :key="inds"
  439. class="liImgs"
  440. >
  441. <el-image
  442. style="width: 100%; height: 100%"
  443. :src="$methodsTools.splitImgHost(its.photo)"
  444. :preview-src-list="[
  445. $methodsTools.splitImgHost(its.photo),
  446. ]"
  447. >
  448. </el-image>
  449. <div class="abos">
  450. {{ $methodsTools.onlyForma(its.createTime) }}
  451. </div>
  452. </li>
  453. <div style="clear: both"></div>
  454. </ul>
  455. <p v-else style="text-align: center; width: 100%">
  456. 暂无拍照数据
  457. </p>
  458. <div
  459. class="styFlex"
  460. v-if="
  461. (userData.allStatus === 0 ||
  462. userData.allStatus === 1) &&
  463. scope3.row.periodStatus === 1
  464. "
  465. >
  466. <el-button
  467. :disabled="scope3.row.status === 1"
  468. class="btnstyles"
  469. size="mini"
  470. @click="
  471. changeStatusModule(
  472. scope3.row,
  473. 1,
  474. scope.$index,
  475. scope2.$index,
  476. scope3.$index
  477. )
  478. "
  479. >通过</el-button
  480. >
  481. <el-button
  482. :disabled="scope3.row.status === 0"
  483. class="btnstyles"
  484. size="mini"
  485. @click="
  486. scope3.row.status === 2 ||
  487. scope3.row.status === 3
  488. ? changeStatusModule(
  489. scope3.row,
  490. 2,
  491. scope.$index,
  492. scope2.$index,
  493. scope3.$index
  494. )
  495. : ''
  496. "
  497. >作弊</el-button
  498. >
  499. </div>
  500. <!-- <div
  501. class="styFlex"
  502. v-if="
  503. (scope3.row.allStatus === 0 ||
  504. scope3.row.allStatus === 1) &&
  505. scope3.row.periodStatus === 1 &&
  506. scope3.row.status === 0
  507. "
  508. >
  509. <el-button
  510. class="btnstyles"
  511. size="mini"
  512. @click="
  513. changeStatusModule(
  514. scope3.row,
  515. 1,
  516. scope.$index,
  517. scope2.$index,
  518. scope3.$index
  519. )
  520. "
  521. >通过</el-button
  522. >
  523. </div> -->
  524. </div>
  525. </template>
  526. </el-table-column>
  527. <!-- 节插槽END -->
  528. <el-table-column
  529. v-for="(item, index) in scope2.row.type === 2
  530. ? tableSet3
  531. : ''"
  532. :width="item.width"
  533. :key="index"
  534. :label="item.label"
  535. align="center"
  536. >
  537. <template slot-scope="scope3">
  538. <span v-if="item.scope === 'select'">
  539. <span v-for="(k, ds) in item.options" :key="ds">
  540. {{
  541. k.value == scope3.row[item.prop] ? k.label : ""
  542. }}
  543. </span>
  544. </span>
  545. <div v-else-if="item.scope === 'activeNum'">
  546. <el-select
  547. v-model="scope3.row[item.prop]"
  548. placeholder="请选择"
  549. @change="
  550. getNewListMores(
  551. scope.$index,
  552. scope2.$index,
  553. scope3.$index,
  554. $event,
  555. scope3.row
  556. )
  557. "
  558. >
  559. <el-option
  560. v-for="(items, indexs) in scope3.row['numList']"
  561. :key="indexs"
  562. :label="'第' + items + '次审核记录'"
  563. :value="items"
  564. >
  565. </el-option>
  566. </el-select>
  567. </div>
  568. <span v-else-if="item.scope === 'typeOptions'">
  569. <span v-for="(is, ds) in item.options" :key="ds">
  570. <span v-if="is.value === scope3.row[item.prop]">{{
  571. is.label
  572. }}</span>
  573. </span>
  574. </span>
  575. <span v-else-if="item.scope === 'aTime'">
  576. {{ $methodsTools.onlyForma(scope3.row[item.prop]) }}
  577. </span>
  578. <span v-else-if="item.scope === 'durTime'">
  579. {{
  580. $methodsTools.secondToDate(
  581. scope3.row[item.prop],
  582. false
  583. )
  584. }}
  585. </span>
  586. <div v-else-if="item.scope === 'aTimeSE'">
  587. <span
  588. v-if="
  589. scope3.row['type'] === 3 &&
  590. scope3.row['durationTime'] &&
  591. scope3.row['studyStartTime'] &&
  592. scope3.row['studyEndTime']
  593. "
  594. :style="comput(scope3.row)"
  595. >
  596. {{ $methodsTools.onlyForma(scope3.row[item.prop]) }}
  597. </span>
  598. <span v-else>
  599. {{ $methodsTools.onlyForma(scope3.row[item.prop]) }}
  600. </span>
  601. </div>
  602. <span v-else> {{ scope3.row[item.prop] }} </span>
  603. </template>
  604. </el-table-column>
  605. </el-table>
  606. <!-- 节表格END -->
  607. </template>
  608. </el-table-column>
  609. <!-- 章插槽END -->
  610. <el-table-column
  611. v-for="(item, index) in scope.row.type === 1
  612. ? tableSet2
  613. : scope.row.type === 2
  614. ? tableSet3
  615. : ''"
  616. :width="item.width"
  617. :key="index"
  618. :label="item.label"
  619. align="center"
  620. >
  621. <template slot-scope="scope2">
  622. <span v-if="item.scope === 'select'">
  623. <span v-for="(k, ds) in item.options" :key="ds">
  624. {{ k.value == scope2.row[item.prop] ? k.label : "" }}
  625. </span>
  626. </span>
  627. <div v-else-if="item.scope === 'activeNum'">
  628. <el-select
  629. v-model="scope2.row[item.prop]"
  630. placeholder="请选择"
  631. @change="
  632. getNewListchapt(
  633. scope.$index,
  634. scope2.$index,
  635. $event,
  636. scope2.row
  637. )
  638. "
  639. >
  640. <el-option
  641. v-for="(items, indexs) in scope2.row['numList']"
  642. :key="indexs"
  643. :label="'第' + items + '次审核记录'"
  644. :value="items"
  645. >
  646. </el-option>
  647. </el-select>
  648. </div>
  649. <span v-else-if="item.scope === 'typeOptions'">
  650. <span v-for="(is, ds) in item.options" :key="ds">
  651. <span v-if="is.value === scope2.row[item.prop]">{{
  652. is.label
  653. }}</span>
  654. </span>
  655. </span>
  656. <span v-else-if="item.scope === 'aTime'">
  657. {{ $methodsTools.onlyForma(scope2.row[item.prop]) }}
  658. </span>
  659. <span v-else-if="item.scope === 'durTime'">
  660. {{
  661. $methodsTools.secondToDate(scope2.row[item.prop], false)
  662. }}
  663. </span>
  664. <div v-else-if="item.scope === 'aTimeSE'">
  665. <span
  666. v-if="
  667. scope2.row['type'] === 3 &&
  668. scope2.row['durationTime'] &&
  669. scope2.row['studyStartTime'] &&
  670. scope2.row['studyEndTime']
  671. "
  672. :style="comput(scope2.row)"
  673. >
  674. {{ $methodsTools.onlyForma(scope2.row[item.prop]) }}
  675. </span>
  676. <span v-else>
  677. {{ $methodsTools.onlyForma(scope2.row[item.prop]) }}
  678. </span>
  679. </div>
  680. <span v-else> {{ scope2.row[item.prop] }} </span>
  681. </template>
  682. </el-table-column>
  683. </el-table>
  684. <!-- 章表格END -->
  685. </template>
  686. </el-table-column>
  687. <!-- 插槽结束--------------------------------------------------------- -->
  688. <el-table-column
  689. v-for="(item, index) in asrt.value === 0
  690. ? tableSet1
  691. : asrt.value === 1
  692. ? tableSet2
  693. : asrt.value === 2
  694. ? tableSet3
  695. : ''"
  696. :width="item.width"
  697. :key="index"
  698. :label="item.label"
  699. align="center"
  700. >
  701. <template slot-scope="scope">
  702. <span v-if="item.scope === 'select'">
  703. <span v-for="(k, ds) in item.options" :key="ds">
  704. {{ k.value == scope.row[item.prop] ? k.label : "" }}
  705. </span>
  706. </span>
  707. <div v-else-if="item.scope === 'activeNum'">
  708. <el-select
  709. v-model="scope.row[item.prop]"
  710. placeholder="请选择"
  711. @change="getNewList(scope.$index, $event, scope.row)"
  712. >
  713. <el-option
  714. v-for="(items, indexs) in scope.row['numList']"
  715. :key="indexs"
  716. :label="'第' + items + '次审核记录'"
  717. :value="items"
  718. >
  719. </el-option>
  720. </el-select>
  721. </div>
  722. <span v-else-if="item.scope === 'typeOptions'">
  723. <span v-for="(is, ds) in item.options" :key="ds">
  724. <span v-if="is.value === scope.row[item.prop]">{{
  725. is.label
  726. }}</span>
  727. </span>
  728. </span>
  729. <span v-else-if="item.scope === 'aTime'">
  730. {{ $methodsTools.onlyForma(scope.row[item.prop]) }}
  731. </span>
  732. <span v-else-if="item.scope === 'durTime'">
  733. {{ $methodsTools.secondToDate(scope.row[item.prop], false) }}
  734. </span>
  735. <div v-else-if="item.scope === 'aTimeSE'">
  736. <span
  737. v-if="
  738. scope.row['type'] === 3 &&
  739. scope.row['durationTime'] &&
  740. scope.row['studyStartTime'] &&
  741. scope.row['studyEndTime']
  742. "
  743. :style="comput(scope.row)"
  744. >
  745. {{ $methodsTools.onlyForma(scope.row[item.prop]) }}
  746. </span>
  747. <span v-else>
  748. {{ $methodsTools.onlyForma(scope.row[item.prop]) }}
  749. </span>
  750. </div>
  751. <span v-else>
  752. {{ scope.row[item.prop] }}{{ item.ch ? item.ch : "" }}
  753. </span>
  754. </template>
  755. </el-table-column>
  756. </el-table>
  757. </div>
  758. </div>
  759. </template>
  760. <script>
  761. export default {
  762. data() {
  763. return {
  764. defaultExpand: true,
  765. size: "medium",
  766. active: "",
  767. loading: false,
  768. studentCode: "",
  769. realName: "",
  770. idCard: "",
  771. telPhone: "",
  772. recent_photos: "",
  773. idcard_face_photo: "",
  774. idcard_national_photo: "",
  775. listLabel: [
  776. {
  777. label: "模块卷",
  778. value: 0,
  779. },
  780. {
  781. label: "章卷",
  782. value: 1,
  783. },
  784. {
  785. label: "节",
  786. value: 2,
  787. },
  788. ],
  789. arr: ["tableData1", "tableData2", "tableData3"],
  790. listData: {
  791. tableData1: [],
  792. tableData2: [],
  793. tableData3: [],
  794. },
  795. userData: {},
  796. tableData: [],
  797. tableSet1: [
  798. {
  799. label: "姓名",
  800. prop: "realName",
  801. },
  802. {
  803. label: "模块标题",
  804. prop: "typeName",
  805. },
  806. {
  807. label: "学时",
  808. prop: "classHours",
  809. },
  810. ],
  811. tableSet2: [
  812. {
  813. label: "姓名",
  814. prop: "realName",
  815. },
  816. {
  817. label: "章标题",
  818. prop: "typeName",
  819. },
  820. {
  821. label: "学时",
  822. prop: "classHours",
  823. },
  824. {
  825. label: "开始学习时间",
  826. prop: "studyStartTime",
  827. scope: "aTime",
  828. },
  829. {
  830. label: "结束学习时间",
  831. prop: "studyEndTime",
  832. scope: "aTime",
  833. },
  834. {
  835. label: "测试成绩",
  836. prop: "performance",
  837. },
  838. ],
  839. tableSet3: [
  840. {
  841. label: "选择",
  842. prop: "numIndex",
  843. scope: "activeNum",
  844. width: "180px",
  845. },
  846. {
  847. label: "姓名",
  848. prop: "realName",
  849. },
  850. {
  851. label: "标题",
  852. prop: "typeName",
  853. },
  854. {
  855. label: "类型",
  856. prop: "type",
  857. scope: "typeOptions",
  858. options: [
  859. {
  860. label: "节",
  861. value: 3,
  862. },
  863. {
  864. label: "试卷",
  865. value: 4,
  866. },
  867. ],
  868. },
  869. {
  870. label: "节时长",
  871. prop: "durationTime",
  872. width: "180px",
  873. scope: "durTime",
  874. },
  875. {
  876. label: "开始时间",
  877. prop: "studyStartTime",
  878. scope: "aTimeSE",
  879. },
  880. {
  881. label: "结束时间",
  882. prop: "studyEndTime",
  883. scope: "aTimeSE",
  884. },
  885. {
  886. label: "审核状态",
  887. prop: "status",
  888. scope: "select",
  889. options: [
  890. {
  891. label: "待审核",
  892. value: 2,
  893. },
  894. {
  895. label: "通过",
  896. value: 1,
  897. },
  898. {
  899. label: "作弊",
  900. value: 0,
  901. },
  902. ],
  903. },
  904. {
  905. label: "审核人",
  906. prop: "auditUserName",
  907. },
  908. {
  909. label: "审核时间",
  910. prop: "auditTime",
  911. scope: "aTime",
  912. },
  913. ],
  914. tableDataChild: {},
  915. tableSetChild: [],
  916. };
  917. },
  918. computed: {
  919. computedList: function () {
  920. return function (value) {
  921. var arr = value.filter((item) => {
  922. if (item.value === 0) {
  923. if (this.listData.tableData1.length) {
  924. return item;
  925. }
  926. }
  927. if (item.value === 1) {
  928. if (this.listData.tableData2.length) {
  929. return item;
  930. }
  931. }
  932. if (item.value === 2) {
  933. if (this.listData.tableData3.length) {
  934. return item;
  935. }
  936. }
  937. });
  938. return arr;
  939. };
  940. },
  941. },
  942. mounted() {
  943. this.getUserInfo();
  944. this.search();
  945. },
  946. methods: {
  947. comput(item) {
  948. var ast = item.studyEndTime - item.studyStartTime;
  949. if (ast < item.durationTime) {
  950. return "color:red;";
  951. } else {
  952. return "";
  953. }
  954. },
  955. /**
  956. * 通过 作弊 periodId
  957. */
  958. changeStatus(item, int, index) {
  959. var data = {
  960. id: item.periodStatusId,
  961. };
  962. if (int === 1) {
  963. data.status = 1;
  964. }
  965. if (int === 2) {
  966. data.status = 0;
  967. }
  968. this.$api.editGradeUsereditPeriode(data).then((res) => {
  969. this.$message.success("修改成功");
  970. this.getNewList(index, item.numIndex, item);
  971. });
  972. },
  973. changeStatusCharpter(item, int, index1, index2) {
  974. var data = {
  975. id: item.periodStatusId,
  976. };
  977. if (int === 1) {
  978. data.status = 1;
  979. }
  980. if (int === 2) {
  981. data.status = 0;
  982. }
  983. this.$api.editGradeUsereditPeriode(data).then((res) => {
  984. this.$message.success("修改成功");
  985. this.getNewListchapt(index1, index2, item.numIndex, item);
  986. });
  987. },
  988. changeStatusModule(item, int, index1, index2, index3) {
  989. var data = {
  990. id: item.periodStatusId,
  991. };
  992. if (int === 1) {
  993. data.status = 1;
  994. }
  995. if (int === 2) {
  996. data.status = 0;
  997. }
  998. this.$api.editGradeUsereditPeriode(data).then((res) => {
  999. this.$message.success("修改成功");
  1000. this.getNewListMores(index1, index2, index3, item.numIndex, item);
  1001. });
  1002. },
  1003. //批量审批
  1004. getChangeStatus(int) {
  1005. var data = {
  1006. gradeId: Number(this.$route.query.id),
  1007. userId: Number(this.$route.query.userId),
  1008. goodsId: Number(this.$route.query.goodsId),
  1009. };
  1010. if (int === 1) {
  1011. data.status = 1;
  1012. }
  1013. if (int === 2) {
  1014. data.status = 0;
  1015. }
  1016. this.$api.editGradeUsereditPeriodeAll(data).then((res) => {
  1017. if (int === 1) {
  1018. this.$message.success("状态全部通过修改成功");
  1019. }
  1020. if (int === 2) {
  1021. this.$message.success("状态全部作弊修改成功");
  1022. }
  1023. this.getUserInfo();
  1024. this.search();
  1025. });
  1026. },
  1027. //节
  1028. getNewList(index, int, item) {
  1029. let data = {
  1030. courseId: item.courseId,
  1031. moduleId: item.moduleId,
  1032. chapterId: item.chapterId,
  1033. numIndex: int,
  1034. userId: this.$route.query.userId,
  1035. goodsId: this.$route.query.goodsId,
  1036. gradeId: this.$route.query.id,
  1037. };
  1038. if (item.type === 3) {
  1039. data.sectionId = item.id;
  1040. }
  1041. if (item.type === 4) {
  1042. data.examId = item.id;
  1043. }
  1044. this.$api.inquireGradegradelistPeriodAuditStatus(data).then((res) => {
  1045. this.$set(this.listData.tableData3, index, res.data);
  1046. this.getUserInfo();
  1047. });
  1048. },
  1049. //章 节
  1050. getNewListchapt(a, b, int, item) {
  1051. let data = {
  1052. courseId: item.courseId,
  1053. moduleId: item.moduleId,
  1054. chapterId: item.chapterId,
  1055. numIndex: int,
  1056. userId: this.$route.query.userId,
  1057. goodsId: this.$route.query.goodsId,
  1058. gradeId: this.$route.query.id,
  1059. };
  1060. if (item.type === 3) {
  1061. data.sectionId = item.id;
  1062. }
  1063. if (item.type === 4) {
  1064. data.examId = item.id;
  1065. }
  1066. this.$api.inquireGradegradelistPeriodAuditStatus(data).then((res) => {
  1067. this.$set(
  1068. this.listData.tableData2[a].classPeriodSectionList,
  1069. b,
  1070. res.data
  1071. );
  1072. this.getUserInfo();
  1073. });
  1074. },
  1075. //模块 章 节
  1076. getNewListMores(a, b, c, int, item) {
  1077. let data = {
  1078. courseId: item.courseId,
  1079. moduleId: item.moduleId,
  1080. chapterId: item.chapterId,
  1081. numIndex: int,
  1082. userId: this.$route.query.userId,
  1083. goodsId: this.$route.query.goodsId,
  1084. gradeId: this.$route.query.id,
  1085. };
  1086. if (item.type === 3) {
  1087. data.sectionId = item.id;
  1088. }
  1089. if (item.type === 4) {
  1090. data.examId = item.id;
  1091. }
  1092. this.$api.inquireGradegradelistPeriodAuditStatus(data).then((res) => {
  1093. this.$set(
  1094. this.listData.tableData1[a].classPeriods[b].classPeriodSectionList,
  1095. c,
  1096. res.data
  1097. );
  1098. this.getUserInfo();
  1099. });
  1100. },
  1101. //获取用户信息
  1102. getUserInfo() {
  1103. this.$api
  1104. .inquireGradegradelistUserlistPeriod({
  1105. gradeId: this.$route.query.id,
  1106. userId: this.$route.query.userId,
  1107. goodsId: this.$route.query.goodsId,
  1108. })
  1109. .then((res) => {
  1110. if (res.rows[0].keyValue) {
  1111. var data = JSON.parse(res.rows[0].keyValue);
  1112. this.recent_photos = data.recent_photos.value;
  1113. this.idcard_face_photo = data.idcard_face_photo.value;
  1114. this.idcard_national_photo = data.idcard_national_photo.value;
  1115. this.realName = data.name.value;
  1116. this.idCard = data.idcard.value;
  1117. this.telPhone = data.telphone.value;
  1118. }
  1119. this.userData = res.rows[0];
  1120. });
  1121. },
  1122. search() {
  1123. let data = {
  1124. gradeId: this.$route.query.id,
  1125. userId: this.$route.query.userId,
  1126. goodsId: this.$route.query.goodsId,
  1127. };
  1128. this.loading = true;
  1129. this.$api
  1130. .inquireGradegradelistPeriodAudit(data)
  1131. .then((res) => {
  1132. let tab1 = [];
  1133. let tab2 = [];
  1134. let tab3 = [];
  1135. for (let i = 0; i < res.rows.length; i++) {
  1136. if (res.rows[i].type === 1) {
  1137. tab1.push(res.rows[i]);
  1138. }
  1139. if (res.rows[i].type === 2) {
  1140. tab2.push(res.rows[i]);
  1141. }
  1142. if (res.rows[i].type === 3) {
  1143. tab3.push(res.rows[i]);
  1144. }
  1145. }
  1146. this.listData.tableData1 = tab1;
  1147. this.listData.tableData2 = tab2;
  1148. this.listData.tableData3 = tab3;
  1149. })
  1150. .finally(() => {
  1151. this.loading = false;
  1152. });
  1153. },
  1154. },
  1155. };
  1156. </script>
  1157. <style lang="less" scoped>
  1158. #classHoursReview {
  1159. display: flex;
  1160. flex-direction: column;
  1161. height: calc(100vh - 126px);
  1162. }
  1163. .styFlex {
  1164. width: 80px;
  1165. text-align: center;
  1166. }
  1167. .btnstyles {
  1168. margin-left: 0px;
  1169. margin-bottom: 10px;
  1170. }
  1171. .dis_flexs {
  1172. display: flex;
  1173. align-items: center;
  1174. }
  1175. .dis_fs {
  1176. display: flex;
  1177. align-items: center;
  1178. height: 211px;
  1179. background-color: #eee;
  1180. padding: 0px 30px;
  1181. overflow: auto;
  1182. .ul_ls {
  1183. margin-right: 30px;
  1184. align-self: flex-start;
  1185. li {
  1186. font-size: 14px;
  1187. white-space: nowrap;
  1188. margin-bottom: 14px;
  1189. }
  1190. }
  1191. &::-webkit-scrollbar {
  1192. width: 14px;
  1193. height: 14px;
  1194. }
  1195. &::-webkit-scrollbar-track,
  1196. &::-webkit-scrollbar-thumb {
  1197. border-radius: 999px;
  1198. border: 5px solid transparent;
  1199. }
  1200. &::-webkit-scrollbar-track {
  1201. box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.2) inset;
  1202. }
  1203. &::-webkit-scrollbar-thumb {
  1204. min-height: 20px;
  1205. background-clip: content-box;
  1206. box-shadow: 0 0 0 5px rgba(0, 0, 0, 0.2) inset;
  1207. }
  1208. &::-webkit-scrollbar-corner {
  1209. background: transparent;
  1210. }
  1211. }
  1212. .photoSty1 {
  1213. flex-shrink: 0;
  1214. width: 150px;
  1215. height: 160px;
  1216. background-color: #fff;
  1217. margin-right: 60px;
  1218. position: relative;
  1219. }
  1220. .photoSty2 {
  1221. position: relative;
  1222. flex-shrink: 0;
  1223. width: 230px;
  1224. height: 160px;
  1225. margin-right: 60px;
  1226. background-color: #fff;
  1227. }
  1228. .pos_bottom {
  1229. position: absolute;
  1230. height: 20px;
  1231. bottom: 0px;
  1232. left: 0px;
  1233. right: 0px;
  1234. background-color: rgba(0, 0, 0, 0.8);
  1235. text-align: center;
  1236. line-height: 20px;
  1237. font-size: 14px;
  1238. color: #fff;
  1239. }
  1240. .dis_fls {
  1241. height: 65px;
  1242. margin: 16px 0px;
  1243. display: flex;
  1244. align-items: center;
  1245. justify-content: space-between;
  1246. flex-wrap: wrap;
  1247. .s_sd {
  1248. display: flex;
  1249. align-items: center;
  1250. flex-shrink: 0;
  1251. margin-bottom: 10px;
  1252. .dis_colu {
  1253. height: 55px;
  1254. margin-right: 14px;
  1255. display: flex;
  1256. flex-direction: column;
  1257. justify-content: space-around;
  1258. font-size: 14px;
  1259. }
  1260. }
  1261. }
  1262. .jdNumSty {
  1263. border: 1px solid #000;
  1264. border-radius: 6px;
  1265. padding: 6px;
  1266. }
  1267. .shbtns {
  1268. padding: 0px 10px;
  1269. height: 55px;
  1270. line-height: 55px;
  1271. background-color: #eee;
  1272. border-radius: 6px;
  1273. }
  1274. .btnStys {
  1275. border: 1px solid #666;
  1276. padding: 0px 8px;
  1277. border-radius: 4px;
  1278. font-size: 15px;
  1279. margin-right: 8px;
  1280. cursor: pointer;
  1281. }
  1282. .liImgs {
  1283. float: left;
  1284. width: 250px;
  1285. height: 250px;
  1286. margin-right: 20px;
  1287. margin-bottom: 20px;
  1288. position: relative;
  1289. .abos {
  1290. position: absolute;
  1291. bottom: 0px;
  1292. width: 100%;
  1293. height: 44px;
  1294. line-height: 44px;
  1295. font-size: 16px;
  1296. color: #000;
  1297. text-align: center;
  1298. background-color: rgba(90, 90, 90, 0.7);
  1299. }
  1300. }
  1301. </style>