studyTimes.vue 39 KB

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