works.vue 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629
  1. <template>
  2. <div class="pb_content" style="background:#fff;">
  3. <div class="pb_content_body">
  4. <div class="body_student">
  5. <div class="student_head">
  6. <div class="box_course">
  7. <div class="wheel">
  8. <img
  9. :src="
  10. studentMessage.headportrait != null
  11. ? studentMessage.headportrait
  12. : tx
  13. "
  14. alt=""
  15. />
  16. </div>
  17. <div class="right_box">
  18. <div class="right_box_title">{{ studentMessage.name }}</div>
  19. <div class="people">
  20. <div>
  21. <span>班级:</span><span>{{ studentMessage.cname }}</span>
  22. </div>
  23. <div style="margin-left: 50px">
  24. <span>所属学校:</span><span>{{ studentMessage.sname }}</span>
  25. </div>
  26. </div>
  27. <div>
  28. <span>手机号码:</span
  29. ><span>{{ studentMessage.phonenumber }}</span>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. <div class="student_body" v-if="!dialogVisible">
  35. <div class="student_table">
  36. <el-table
  37. ref="table"
  38. :data="tableData1"
  39. border
  40. :height="tableHeight"
  41. :fit="true"
  42. style="width: 100%"
  43. :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
  44. :row-class-name="tableRowClassName"
  45. >
  46. <el-table-column
  47. prop="title"
  48. label="项目"
  49. min-width="30"
  50. align="center"
  51. ></el-table-column>
  52. <el-table-column
  53. prop="uname"
  54. label="创建人"
  55. min-width="30"
  56. align="center"
  57. ></el-table-column>
  58. <el-table-column
  59. prop="time"
  60. label="时间"
  61. min-width="20"
  62. align="center"
  63. ></el-table-column>
  64. <el-table-column label="操作" min-width="30">
  65. <template slot-scope="scope">
  66. <el-button
  67. type="primary"
  68. size="small"
  69. @click="getCourseDetail(scope.row.courseid)"
  70. >查看作业</el-button
  71. >
  72. </template>
  73. </el-table-column>
  74. </el-table>
  75. </div>
  76. <div class="student_page" style="padding: 10px 0;">
  77. <el-pagination
  78. background
  79. layout="prev, pager, next"
  80. :page-size="10"
  81. :total="total"
  82. v-if="page"
  83. @current-change="handleCurrentChange"
  84. ></el-pagination>
  85. </div>
  86. </div>
  87. </div>
  88. <el-dialog title="查看作业" :visible.sync="dialogVisible3" :append-to-body="true" :before-close="handleClose"
  89. width="100%" class="dialog_diy2 max_diy" :class="{ fullStyle: full }">
  90. <div slot="title" class="header-title">
  91. <div style="color: #fff">查看作业</div>
  92. <div style="position: absolute; top: 14px; right: 50px">
  93. <img src="../assets/full.png" style="height: 14px; cursor: pointer" alt="" @click="fullTools" />
  94. </div>
  95. </div>
  96. <div class="zyBoxC">
  97. <div class="courseTitle" v-if="allWorks.course">
  98. <div class="txName">
  99. <div class="tx"><img :src="tx" alt="" /></div>
  100. <div>{{ allWorks.sName }}</div>
  101. </div>
  102. <div>{{ allWorks.course }}</div>
  103. </div>
  104. <div class="cBox">
  105. <div class="pb_left">
  106. <el-tooltip class="cTitle" effect="light" :content="allWorks.course" placement="top">
  107. <div>{{ allWorks.course }}</div>
  108. </el-tooltip>
  109. <div class="ml">目录</div>
  110. <div class="cru_selectBox">
  111. <div v-for="(dy, dyIndex) in dyList2" :key="dyIndex">
  112. <div class="blue_box_one" @click="isOpen(dyIndex)">
  113. <div>第{{ dy.id + 1 }}阶段</div>
  114. <div>{{ dy.name }}</div>
  115. </div>
  116. <div class="twoChild" :class="{
  117. navActive: dy.isOpen,
  118. }">
  119. <div class="navChild" v-for="(nav, navIndex) in dy.taskList" :key="navIndex">
  120. <div class="navTask" @click="openTask(dy.id, nav.id)" :class="{
  121. openTaskActive:
  122. nav.id == taskCount &&
  123. dy.id + '-' + nav.id == navId &&
  124. dy.id == stageIndex,
  125. }">
  126. <div class="vedioNav" :class="{
  127. isClick:
  128. nav.id == taskCount &&
  129. dy.id + '-' + nav.id == navId &&
  130. dy.id == stageIndex,
  131. }" style="margin: 0">
  132. 任务{{ navIndex + 1 }}
  133. </div>
  134. <el-tooltip class="navTaskname item" effect="light" :content="nav.name" placement="top">
  135. <div>{{ nav.name }}</div>
  136. </el-tooltip>
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. </div>
  142. </div>
  143. <div class="shuBox" v-if="worksDetail.length" :class="{ fullBox: full }">
  144. <div class="allBox" v-for="(sin, sIndex) in sInfo" :key="sIndex">
  145. <div class="zyBox" v-if="sin.course" :class="{ fullZyBox: full }">
  146. <div class="top">
  147. <div class="jdName">
  148. <div>
  149. {{
  150. "第" +
  151. (sin.stage + 1) +
  152. "阶段 " +
  153. dyList[sin.stage].name
  154. }}
  155. </div>
  156. <div class="taskName" style="width: 100%; justify-content: space-between">
  157. <div class="taskName" :id="sin.stage + '-' + sin.task" :scrollindex="sIndex">
  158. <div class="task">任务{{ sin.task + 1 }}</div>
  159. <div>
  160. {{ dyList[sin.stage].taskList[sin.task].name }}
  161. </div>
  162. </div>
  163. <div v-if="worksDetail[sIndex].wpptInfo.length > 0">
  164. <el-button type="primary" size="small" @click="openFile(worksDetail[sIndex].wpptInfo[0])">
  165. 查看文档</el-button>
  166. </div>
  167. </div>
  168. </div>
  169. </div>
  170. <div class="contentBox">
  171. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  172. v-if="worksDetail[sIndex].img.length > 0">
  173. <div class="bigImg" v-if="
  174. worksDetail[sIndex].img &&
  175. worksDetail[sIndex].img.length
  176. ">
  177. <img @click="
  178. previewImg(
  179. worksDetail[sIndex].img[
  180. worksDetail[sIndex].imgIndex
  181. ].src
  182. )
  183. " :src="
  184. worksDetail[sIndex].img[
  185. worksDetail[sIndex].imgIndex
  186. ].src
  187. " alt />
  188. </div>
  189. <div class="thumbnail" v-if="
  190. worksDetail[sIndex].img &&
  191. worksDetail[sIndex].img.length
  192. ">
  193. <div v-for="(item, index) in worksDetail[sIndex].img" :key="index" :class="
  194. worksDetail[sIndex].imgIndex == index
  195. ? 'isClick'
  196. : ''
  197. ">
  198. <img :src="item.src" alt @click="worksDetail[sIndex].imgIndex = index" />
  199. </div>
  200. </div>
  201. <div class="work_nopicture" v-else>暂无上传截图</div>
  202. </div>
  203. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  204. v-else-if="worksDetail[sIndex].answerInfo.length > 0">
  205. <div class="answerbox">
  206. <div style="min-width: 80px">问答标题</div>
  207. <div>
  208. {{ worksDetail[sIndex].answerInfo[0].answerTitle }}
  209. </div>
  210. </div>
  211. <div class="answerbox1">
  212. <div>学生回答</div>
  213. <div>
  214. {{ worksDetail[sIndex].answerInfo[0].answer }}
  215. </div>
  216. </div>
  217. </div>
  218. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  219. v-else-if="worksDetail[sIndex].askInfo.length > 0">
  220. <div>
  221. <div class="a_add_title" style="
  222. display: flex;
  223. flex-direction: row;
  224. align-items: center;
  225. justify-content: center;
  226. flex-wrap: wrap;
  227. ">
  228. <div style="margin-right: 20px; font-size: 20px">
  229. 标题:
  230. </div>
  231. <div style="font-size: 20px">
  232. {{ worksDetail[sIndex].askInfo[0].askTitle }}
  233. </div>
  234. </div>
  235. <div class="a_addBox">
  236. <div style="font-size: 16px; color: #c7c7c7">
  237. 内容
  238. </div>
  239. <div class="a_add_box" v-for="(item1, index1) in worksDetail[sIndex]
  240. .askInfo[0].askCount" :key="index1">
  241. <div class="a_add_head">
  242. <div style="display: flex">
  243. {{ index1 + 1 + "、" }}
  244. <div>
  245. 题目:{{
  246. worksDetail[sIndex].askInfo[0].askJson[
  247. index1
  248. ].askstitle
  249. }}
  250. </div>
  251. </div>
  252. </div>
  253. <div class="a_add_body">
  254. <div class="a_add_input">
  255. <el-radio-group v-model="
  256. worksDetail[sIndex].askInfo[0].radio[
  257. index1
  258. ]
  259. ">
  260. <el-radio v-for="(item2, checkIndex) in worksDetail[
  261. sIndex
  262. ].askInfo[0].askJson[index1].checkList" :key="checkIndex" :label="checkIndex"
  263. disabled class="redioStyle"><span v-html="item2"></span></el-radio>
  264. </el-radio-group>
  265. </div>
  266. </div>
  267. </div>
  268. </div>
  269. </div>
  270. </div>
  271. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  272. v-else-if="worksDetail[sIndex].wpptInfo.length > 0">
  273. <div style="height: 238px" @click="openFile(worksDetail[sIndex].wpptInfo[0])">
  274. <div @click="openFile(worksDetail[sIndex].wpptInfo[0])" style="
  275. width: 300px;
  276. height: 300px;
  277. position: absolute;
  278. z-index: 999;
  279. "></div>
  280. <pdf v-if="showPDF" :pdfUrl="worksDetail[sIndex].wpptInfo[0]"
  281. style="width: 100%; height: 520px; overflow: auto"></pdf>
  282. <iframe v-else :src="worksDetail[sIndex].wpptInfo[0]" frameborder="0" width="100%"
  283. height="100%"></iframe>
  284. </div>
  285. </div>
  286. <div class="right_top" v-show="worksDetail[sIndex].eList.length">
  287. <div class="ech">
  288. <img src="../assets/icon/pj/ech.png" alt="" />
  289. </div>
  290. <div class="data_body">
  291. <div style="width: 100%">
  292. <div class="echart charts_canvas" style="
  293. width: 100%;
  294. height: 100%;
  295. margin: 0 0 0 1rem;
  296. "></div>
  297. </div>
  298. </div>
  299. </div>
  300. </div>
  301. </div>
  302. <div class="right_score" :class="{ rightScoreFullBox: full }">
  303. <div class="sd_score" style="
  304. box-sizing: border-box;
  305. width: 100%;
  306. box-shadow: none;
  307. position: relative;
  308. ">
  309. <div class="worksTime">
  310. 作业提交时间:<span style="width: auto">{{ worksDetail[sIndex].time }}
  311. </span>
  312. </div>
  313. <div class="ech" style="margin-left: 23px">
  314. <img src="../assets/icon/pj/score.png" alt="" />
  315. </div>
  316. <div style="height: 80%;overflow: auto;">
  317. <div class="score_box" v-for="(item, index) in worksDetail[sIndex].eList" :key="index">
  318. <el-tooltip class="item" effect="dark" :content="item.value" placement="top-start">
  319. <span>{{ item.value }}</span>
  320. </el-tooltip>
  321. <el-rate class="rate_size" style="min-width: 120px"
  322. v-model="worksDetail[sIndex].rateList[item.value]" disabled></el-rate>
  323. </div>
  324. </div>
  325. </div>
  326. </div>
  327. </div>
  328. </div>
  329. </div>
  330. </div>
  331. </el-dialog>
  332. <el-dialog title="查看选择题" :visible.sync="dialogVisible4" :append-to-body="true" width="800px"
  333. :before-close="handleClose" class="dialog_diy">
  334. <div>
  335. <div class="a_add_title" style="
  336. display: flex;
  337. flex-direction: row;
  338. align-items: center;
  339. justify-content: center;
  340. ">
  341. <div style="font-size: 20px">{{ askJson.askTitle }}</div>
  342. </div>
  343. <div class="a_addBox">
  344. <div style="font-size: 16px; color: #c7c7c7">内容</div>
  345. <div class="a_add_box" v-for="(item, index) in askJson.askJson" :key="index">
  346. <div class="a_add_head">
  347. <div style="display: flex">
  348. {{ index + 1 + "、" }}
  349. <div>题目:{{ item.askstitle }}</div>
  350. </div>
  351. </div>
  352. <div class="a_add_body">
  353. <div class="a_add_input">
  354. <el-radio-group v-model="askJson.radio[index]">
  355. <el-radio v-for="(item3, checkIndex1) in item.checkList" :key="checkIndex1" :label="checkIndex1"
  356. class="redioStyle" disabled>{{ item3 }}</el-radio>
  357. </el-radio-group>
  358. </div>
  359. </div>
  360. </div>
  361. </div>
  362. </div>
  363. <span slot="footer" class="dialog-footer">
  364. <el-button type="primary" @click="dialogVisible4 = false">关 闭</el-button>
  365. </span>
  366. </el-dialog>
  367. <el-dialog :visible.sync="pictureDialog" size="tiny">
  368. <img width="100%" :src="dialogImageUrl" alt />
  369. </el-dialog>
  370. <el-dialog title="文件预览" :visible.sync="dialogVisible6" width="100%" :before-close="handleClose" class="full_diy"
  371. :append-to-body="true">
  372. <div slot="title" class="header-title">
  373. <div style="color: #fff">文件预览</div>
  374. </div>
  375. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"></pdf>
  376. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600"></iframe>
  377. </el-dialog>
  378. <!-- <div style="position: relative">
  379. <div style="width: 98.5%;margin: 0 auto;">
  380. <WorksDetail2
  381. :cid="cid"
  382. :uid="userid"
  383. v-if="dialogVisible"
  384. ></WorksDetail2>
  385. </div>
  386. <div class="cancelbox" v-if="dialogVisible">
  387. <el-button @click="cancel" type="primary" size="small"
  388. >返回</el-button
  389. >
  390. </div>
  391. </div> -->
  392. </div>
  393. </div>
  394. </template>
  395. <script>
  396. import WorksDetail2 from "./components/worksDetail2";
  397. export default {
  398. components: {
  399. WorksDetail2,
  400. },
  401. data() {
  402. return {
  403. myCourse: [],
  404. studentMessage: [],
  405. tx: require("../assets/avatar.png"),
  406. mpj: require("../assets/project.png"),
  407. userid: this.$route.query.userid,
  408. oid: this.oid,
  409. tableData1: [],
  410. tableHeight: "500px",
  411. page: 1,
  412. total: 0,
  413. dialogVisible: false,
  414. dataJson: {},
  415. cid: "",
  416. dialogImageUrl: "",
  417. pictureDialog: false,
  418. dialogVisible3: false,
  419. dialogVisible4: false,
  420. full: true,
  421. allWorks: [],
  422. stageIndex: "",
  423. taskCount: "",
  424. navId: "",
  425. pptImgUrl: "",
  426. grade: [],
  427. mr: require("../assets/icon/wheel.png"),
  428. tx: require("../assets/avatar.png"),
  429. projectchoose: "",
  430. scopeId: "",
  431. thumbnail: [],
  432. rateList: {
  433. ca: 0,
  434. sia: 0,
  435. eta: 0,
  436. pia: 0,
  437. lra: 0,
  438. content: "",
  439. },
  440. rateParams: [],
  441. page: 1,
  442. total: 0,
  443. worksDetail: [],
  444. suserId: "",
  445. sInfo: {},
  446. chapInfo: [],
  447. showPDF: false,
  448. dialogVisible6: false,
  449. vedio: [],
  450. file: [],
  451. tType: 0,
  452. chartObj: [],
  453. pptImgUrl: "",
  454. ooption: [],
  455. option: {
  456. tooltip: {
  457. trigger: "item",
  458. },
  459. series: [
  460. {
  461. name: "量规评分",
  462. type: "pie",
  463. radius: "70%",
  464. center: ["50%", "50%"],
  465. data: [
  466. { value: 0, name: "意识能力" },
  467. { value: 0, name: "科学探究能力" },
  468. { value: 0, name: "实践创新能力" },
  469. { value: 0, name: "学习反思能力" },
  470. { value: 0, name: "工程思维能力" },
  471. ],
  472. itemStyle: {
  473. emphasis: {
  474. shadowBlur: 10,
  475. shadowOffsetX: 0,
  476. shadowColor: "rgba(0, 0, 0, 0.5)",
  477. },
  478. normal: {
  479. label: {
  480. show: true,
  481. formatter: "{d}%",
  482. inside: true,
  483. position: "inner",
  484. },
  485. labelLine: { show: false },
  486. },
  487. },
  488. },
  489. ],
  490. },
  491. // 雷达图的数据
  492. radarOption: {
  493. splitNumber: 5,
  494. tooltip: {
  495. triggerOn: "mousemove",
  496. //雷达图的tooltip不会超出div,也可以设置position属性,position定位的tooltip 不会随着鼠标移动而位置变化,不友好
  497. confine: true,
  498. enterable: true, //鼠标是否可以移动到tooltip区域内
  499. backgroundColor: "rgba(255,255,255,0.7)",
  500. textStyle: {
  501. // 文字样式
  502. align: "left",
  503. },
  504. left: "right",
  505. top: "bottom",
  506. },
  507. radar: {
  508. radius: ["0%", "70%"],
  509. shape: "circle",
  510. center: ["50%", "50%"],
  511. axisName: {
  512. textStyle: {
  513. // 文字样式
  514. color: "#58a5e6",
  515. },
  516. formatter: function (value, indicator) {
  517. // value = value.replace(/\S{2}/g, function (match) {
  518. // return match + "\n";
  519. // });
  520. return value;
  521. },
  522. },
  523. indicator: [
  524. // 雷达图的指示器,用来指定雷达图中的多个变量(维度)
  525. ],
  526. },
  527. // 雷达图背景的颜色,在这儿随便设置了一个颜色,完全不透明度为0,就实现了透明背景
  528. splitArea: {
  529. show: true,
  530. areaStyle: {
  531. color: "rgba(255,0,0,0)", // 图表背景的颜色
  532. },
  533. },
  534. splitLine: {
  535. show: true,
  536. lineStyle: {
  537. width: 1,
  538. color: "rgba(131,141,158,.1)", // 设置网格的颜色
  539. },
  540. },
  541. series: [
  542. {
  543. name: "能力图", // tooltip中的标题
  544. type: "radar", // 表示是雷达图
  545. symbol: "circle", // 拐点的样式,还可以取值'rect','angle'等
  546. symbolSize: 8, // 拐点的大小
  547. areaStyle: {
  548. normal: {
  549. width: 1,
  550. opacity: 0.2,
  551. },
  552. },
  553. data: [
  554. {
  555. // 设置各个指标原始值
  556. value: [],
  557. // 设置区域边框和区域的颜色
  558. itemStyle: {
  559. normal: {
  560. color: "#58a5e6",
  561. lineStyle: {
  562. color: "#58a5e6",
  563. },
  564. },
  565. },
  566. },
  567. ],
  568. },
  569. ],
  570. },
  571. askJson: {},
  572. dyList: [],
  573. dyList2: [],
  574. };
  575. },
  576. methods: {
  577. goTo(path) {
  578. this.$router.push(path);
  579. },
  580. tableRowClassName({ row, rowIndex }) {
  581. if ((rowIndex + 1) % 2 === 0) {
  582. return "even_row";
  583. } else {
  584. return "";
  585. }
  586. },
  587. handleCurrentChange(val) {
  588. this.page = val;
  589. this.getProject();
  590. },
  591. selectSDetail() {
  592. let params = {
  593. uid: this.userid,
  594. };
  595. this.ajax
  596. .get(this.$store.state.api + "selectSDetail", params)
  597. .then((res) => {
  598. this.studentMessage = res.data[0][0];
  599. })
  600. .catch((err) => {
  601. this.isLoading = false;
  602. console.error(err);
  603. });
  604. },
  605. getProject() {
  606. let params = {
  607. uid: this.userid,
  608. page: this.page,
  609. };
  610. this.ajax
  611. .get(this.$store.state.api + "getMyProject", params)
  612. .then((res) => {
  613. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  614. this.tableData1 = res.data[0];
  615. })
  616. .catch((err) => {
  617. console.error(err);
  618. });
  619. },
  620. getWorkData(res) {
  621. this.cid = res.courseid;
  622. this.dialogVisible = true;
  623. },
  624. cancel() {
  625. this.dataJson = "";
  626. this.dialogVisible = false;
  627. },
  628. previewImg(url) {
  629. this.$hevueImgPreview(url);
  630. },
  631. handleClose(done) {
  632. done();
  633. },
  634. lookWork(id, uid, stage, task) {
  635. // this.scopeId = id;
  636. let params = {
  637. uid: uid,
  638. cid: id,
  639. stage: stage,
  640. task: task,
  641. };
  642. this.ajax
  643. .get(this.$store.state.api + "selectWorksDetail3", params)
  644. .then((res) => {
  645. this.sInfo = res.data[0];
  646. var chapters = [],
  647. eList = [],
  648. _ooption = [],
  649. _rate = [],
  650. _rateList = [];
  651. var worksDetail = res.data[1];
  652. // this.scopeId = res.data[2][0].id;
  653. // var scopeId = res.data[2][0].id;
  654. var askInfo = res.data[3];
  655. var answerInfo = res.data[4];
  656. var pptInfo = res.data[5];
  657. var workJson = [];
  658. for (var k = 0; k < res.data[0].length; k++) {
  659. this.allWorks = res.data[0][k];
  660. this.chapInfo.push(JSON.parse(res.data[0][k].chapters));
  661. chapters.push(JSON.parse(res.data[0][k].chapters));
  662. if (!chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
  663. res.data[0][k].task
  664. ]) {
  665. continue
  666. }
  667. workJson.push({
  668. img: [],
  669. imgIndex: 0,
  670. eList: [],
  671. rateList: {},
  672. askInfo: [],
  673. answerInfo: [],
  674. wpptInfo: [],
  675. scopeId: res.data[0][k].id,
  676. stagetask: "",
  677. time: "",
  678. });
  679. eList =
  680. chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
  681. res.data[0][k].task
  682. ].eList;
  683. workJson[k].time = res.data[0][k].time;
  684. workJson[k].stagetask =
  685. res.data[0][k].stage + "-" + res.data[0][k].task;
  686. if (eList && eList.length) {
  687. _ooption = [];
  688. workJson[k].eList = eList;
  689. for (var i = 0; i < eList.length; i++) {
  690. _ooption.push({ value: 0, name: eList[i].value });
  691. workJson[k].rateList[eList[i].value] = 0;
  692. }
  693. workJson[k].rateList.content = "";
  694. this.ooption[k] = _ooption;
  695. }
  696. if (res.data[0][k].rate && eList && eList.length) {
  697. _rate[k] = JSON.parse(res.data[0][k].rate);
  698. _rateList[k] = Object.keys(JSON.parse(res.data[0][k].rate));
  699. for (var i = 0; i < _rateList[k].length; i++) {
  700. var _c = Object.keys(workJson[k].rateList);
  701. if (_c.indexOf(_rateList[k][i]) != -1) {
  702. workJson[k].rateList[_rateList[k][i]] =
  703. _rate[k][_rateList[k][i]];
  704. }
  705. }
  706. for (var i = 0; i < this.ooption[k].length; i++) {
  707. if (_rateList[k].indexOf(this.ooption[k][i].name) != -1) {
  708. this.ooption[k][i].value = _rate[k][this.ooption[k][i].name];
  709. }
  710. }
  711. } else {
  712. _rate[k] = [];
  713. _rateList[k] = [];
  714. }
  715. for (var i = 0; i < worksDetail.length; i++) {
  716. if (
  717. res.data[0][k].stage == worksDetail[i].stage &&
  718. res.data[0][k].task == worksDetail[i].task
  719. ) {
  720. workJson[k].img.push({ src: worksDetail[i].content, id: i });
  721. }
  722. }
  723. for (var i = 0; i < askInfo.length; i++) {
  724. if (
  725. res.data[0][k].stage == askInfo[i].stage &&
  726. res.data[0][k].task == askInfo[i].task
  727. ) {
  728. const element = askInfo[i];
  729. let a = JSON.parse(element.content)[0];
  730. let b = a.anwer.split(",");
  731. let c = [];
  732. for (var j = 0; j < b.length; j++) {
  733. c.push(parseInt(b[j]));
  734. }
  735. a.askJson.radio = c;
  736. a.askJson.time = element.time;
  737. workJson[k].askInfo.push(a.askJson);
  738. }
  739. }
  740. for (var i = 0; i < pptInfo.length; i++) {
  741. if (
  742. res.data[0][k].stage == pptInfo[i].stage &&
  743. res.data[0][k].task == pptInfo[i].task
  744. ) {
  745. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  746. if (
  747. a.indexOf(
  748. pptInfo[i].content
  749. .split(".")
  750. [
  751. pptInfo[i].content.split(".").length - 1
  752. ].toLocaleUpperCase()
  753. ) != -1
  754. ) {
  755. var a =
  756. "https://view.officeapps.live.com/op/view.aspx?src=" +
  757. pptInfo[i].content;
  758. workJson[k].wpptInfo.push(a);
  759. this.showPDF = false;
  760. } else if (
  761. pptInfo[i].content
  762. .split(".")
  763. [
  764. pptInfo[i].content.split(".").length - 1
  765. ].toLocaleUpperCase() == "PDF"
  766. ) {
  767. workJson[k].wpptInfo.push(pptInfo[i].content);
  768. this.showPDF = true;
  769. }
  770. }
  771. }
  772. for (var i = 0; i < answerInfo.length; i++) {
  773. if (
  774. res.data[0][k].stage == answerInfo[i].stage &&
  775. res.data[0][k].task == answerInfo[i].task
  776. ) {
  777. const element = answerInfo[i];
  778. workJson[k].answerInfo.push(JSON.parse(element.content)[0]);
  779. }
  780. }
  781. }
  782. this.worksDetail = workJson;
  783. this.courseDetail = res.data[0][0];
  784. this.$forceUpdate;
  785. this.dialogVisible3 = true;
  786. setTimeout(() => {
  787. for (var p = 0; p < res.data[0].length; p++) {
  788. if (!this.ooption[p]) {
  789. this.chartObj[p] = null;
  790. continue
  791. }
  792. var _ooption = JSON.parse(JSON.stringify(this.ooption[p]));
  793. var _option = JSON.parse(JSON.stringify(this.radarOption));
  794. _option.radar.indicator = [];
  795. _option.series[0].data[0].value = [];
  796. for (var i = 0; i < _ooption.length; i++) {
  797. _option.radar.indicator.push({
  798. name: _ooption[i].name,
  799. max: 5,
  800. });
  801. _option.series[0].data[0].value.push(_ooption[i].value);
  802. }
  803. console.log(_option);
  804. this.setChart(_option, p);
  805. }
  806. }, 0);
  807. let _dyList = JSON.parse(JSON.stringify(this.dyList));
  808. let _dyList2 = [];
  809. let _dyList3 = [];
  810. for (var c = 0; c < _dyList.length; c++) {
  811. _dyList[c].taskList = [];
  812. _dyList2.push(_dyList[c]);
  813. }
  814. _dyList = JSON.parse(JSON.stringify(this.dyList));
  815. for (var c = 0; c < workJson.length; c++) {
  816. let _stage = workJson[c].stagetask.split("-")[0];
  817. let _task = workJson[c].stagetask.split("-")[1];
  818. _dyList2[_stage].taskList.push(_dyList[_stage].taskList[_task]);
  819. _dyList2[_stage].taskList;
  820. }
  821. for (var c = 0; c < _dyList2.length; c++) {
  822. if (_dyList2[c].taskList.length) {
  823. _dyList2[c].isOpen = c === 0 ? true : false;
  824. _dyList3.push(_dyList2[c]);
  825. }
  826. }
  827. this.dyList2 = _dyList3;
  828. this.stageIndex = this.dyList2[0].id;
  829. this.taskCount = this.dyList2[0].taskList[0].id;
  830. this.navId =
  831. this.dyList2[0].id + "-" + this.dyList2[0].taskList[0].id;
  832. })
  833. .catch((err) => {
  834. console.error(err);
  835. });
  836. },
  837. checkAsk(askJson) {
  838. this.askJson = askJson;
  839. this.dialogVisible4 = true;
  840. },
  841. setChart(option, k) {
  842. let _this = this;
  843. // 雷达图显示的标签
  844. let newPromise = new Promise((resolve) => {
  845. resolve();
  846. });
  847. //然后异步执行echarts的初始化函数
  848. newPromise.then(() => {
  849. console.log(_this.option);
  850. const chartObj = _this.$echarts.init(
  851. //劳动课程
  852. // _this.$el.querySelector("#charts_canvas")
  853. document.getElementsByClassName("charts_canvas")[k]
  854. );
  855. // 初始化雷达图
  856. _this.chartObj[k] = chartObj;
  857. _this.chartObj[k].setOption(option);
  858. });
  859. },
  860. giveScore() {
  861. this.rateList = this.chapInfo[this.publicIndex].rate;
  862. this.dialogVisible2 = true;
  863. },
  864. openFile(f) {
  865. this.pptImgUrl = f;
  866. this.dialogVisible6 = true;
  867. },
  868. //获取班级列表
  869. getClass() {
  870. this.isLoading = true;
  871. let params = {
  872. oid: this.oid,
  873. };
  874. this.ajax
  875. .get(this.$store.state.api + "selectClassBySchool", params)
  876. .then((res) => {
  877. this.isLoading = false;
  878. this.grade = res.data[0];
  879. })
  880. .catch((err) => {
  881. this.isLoading = false;
  882. console.error(err);
  883. });
  884. },
  885. //获取分组分类
  886. getGroup() {
  887. let params = {};
  888. this.ajax
  889. .get(this.$store.state.api + "getGroup", params)
  890. .then((res) => {
  891. this.subjectJuri = res.data[0];
  892. this.projectJuri = res.data[0];
  893. })
  894. .catch((err) => {
  895. console.error(err);
  896. });
  897. },
  898. searchWork1() {
  899. this.page = 1;
  900. this.chooseTask = "";
  901. this.getWorks();
  902. },
  903. searchWork2() {
  904. this.page = 1;
  905. this.getWorks();
  906. },
  907. fullTools() {
  908. this.full = !this.full;
  909. },
  910. //获取作业
  911. getWorks() {
  912. this.isLoading = true;
  913. var mr = this.mr;
  914. let params = {
  915. cid: this.id,
  916. uname: this.userid,
  917. stage: this.chooseDy,
  918. task: this.chooseTask,
  919. page: this.page,
  920. };
  921. this.ajax
  922. .get(this.$store.state.api + "getCourseWorks2", params)
  923. .then((res) => {
  924. this.isLoading = false;
  925. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  926. this.tableData = res.data[0];
  927. })
  928. .catch((err) => {
  929. this.isLoading = false;
  930. console.error(err);
  931. });
  932. },
  933. getCourseDetail(cid) {
  934. let params = {
  935. cid: cid,
  936. };
  937. this.ajax
  938. .get(this.$store.state.api + "getCourseWorksReport", params)
  939. .then((res) => {
  940. this.course = res.data[0][0];
  941. var dyJSON = JSON.parse(res.data[0][0].chapters);
  942. let dyList = [];
  943. for (var i = 0; i < dyJSON.length; i++) {
  944. dyList.push({ name: dyJSON[i].dyName, id: i, taskList: [] });
  945. var a = dyJSON[i].chapterInfo[0].taskJson;
  946. for (var j = 0; j < a.length; j++) {
  947. dyList[i].taskList.push({ name: a[j].task, id: j });
  948. }
  949. }
  950. this.dyList = dyList;
  951. this.userAarray = res.data[1];
  952. this.lookWork(cid,this.userid,0,0);
  953. })
  954. .catch((err) => {
  955. console.error(err);
  956. });
  957. },
  958. handlePictureCardPreview(url) {
  959. this.dialogImageUrl = url;
  960. this.pictureDialog = true;
  961. },
  962. updatePj() {
  963. for (var i = 0; i < this.worksDetail.length; i++) {
  964. if (!this.worksDetail[i].eList.length) {
  965. continue
  966. }
  967. this.updateWorks(
  968. this.worksDetail[i].scopeId,
  969. this.worksDetail[i].rateList,
  970. i
  971. );
  972. }
  973. },
  974. getStar(i) {
  975. const k = i;
  976. var _ooption = JSON.parse(JSON.stringify(this.ooption[k]));
  977. var _rate = this.worksDetail[i].rateList;
  978. var _rateList = Object.keys(this.worksDetail[i].rateList);
  979. for (var i = 0; i < _ooption.length; i++) {
  980. if (_rateList.indexOf(_ooption[i].name) != -1) {
  981. _ooption[i].value = _rate[_ooption[i].name];
  982. }
  983. }
  984. // var _option = JSON.parse(JSON.stringify(this.radarOption));
  985. var _option = this.radarOption;
  986. _option.radar.indicator = [];
  987. _option.series[0].data[0].value = [];
  988. for (var i = 0; i < _ooption.length; i++) {
  989. _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
  990. _option.series[0].data[0].value.push(_ooption[i].value);
  991. }
  992. if (this.chartObj && this.chartObj[k]) {
  993. // _option.series[0].data = _ooption;
  994. this.chartObj[k].setOption(_option);
  995. } else {
  996. this.setChart(_ooption);
  997. }
  998. },
  999. updateWorks(scopeId, rateList, i) {
  1000. let params = {
  1001. rate: rateList,
  1002. tuid: this.userid,
  1003. id: scopeId,
  1004. };
  1005. const k = i;
  1006. this.ajax
  1007. .get(this.$store.state.api + "updateWorks", params)
  1008. .then((res) => {
  1009. var _ooption = JSON.parse(JSON.stringify(this.ooption[k]));
  1010. // var _option = JSON.parse(JSON.stringify(this.option));
  1011. var _rate = rateList;
  1012. var _rateList = Object.keys(rateList);
  1013. for (var i = 0; i < _ooption.length; i++) {
  1014. if (_rateList.indexOf(_ooption[i].name) != -1) {
  1015. _ooption[i].value = _rate[_ooption[i].name];
  1016. }
  1017. }
  1018. // var _option = JSON.parse(JSON.stringify(this.radarOption));
  1019. var _option = this.radarOption;
  1020. _option.radar.indicator = [];
  1021. _option.series[0].data[0].value = [];
  1022. for (var i = 0; i < _ooption.length; i++) {
  1023. _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
  1024. _option.series[0].data[0].value.push(_ooption[i].value);
  1025. }
  1026. console.log(_option);
  1027. if (this.chartObj) {
  1028. // _option.series[0].data = _ooption;
  1029. this.chartObj[k].setOption(_option);
  1030. } else {
  1031. this.setChart(_ooption);
  1032. }
  1033. // this.uploadBoolean = false;
  1034. // this.dialogVisible2 = false;
  1035. let _k = 0
  1036. for (var i = 0; i < this.worksDetail.length; i++) {
  1037. if (this.worksDetail[i].eList.length) {
  1038. _k = i
  1039. }
  1040. }
  1041. if (k == _k) {
  1042. this.$message({
  1043. message: "评价成功",
  1044. type: "success",
  1045. });
  1046. }
  1047. })
  1048. .catch((err) => {
  1049. this.$message.error("评价失败");
  1050. console.error(err);
  1051. });
  1052. },
  1053. switchVideo(media, index) {
  1054. this.playerO = {};
  1055. this.playerOptions.poster = "";
  1056. this.playerOptions.sources[0].src = media;
  1057. this.playerO = this.playerOptions;
  1058. },
  1059. onPlayerPlay() { },
  1060. // this.$store.commit("update", ["userInfo", userInfo]);
  1061. lookWork2(id, uid, stage, task) {
  1062. // this.scopeId = id;
  1063. let params = {
  1064. uid: uid,
  1065. cid: this.id,
  1066. stage: stage,
  1067. task: task,
  1068. };
  1069. this.ajax
  1070. .get(this.$store.state.api + "selectWorksDetail2", params)
  1071. .then((res) => {
  1072. this.sInfo = res.data[0][0];
  1073. this.chapInfo = JSON.parse(res.data[0][0].chapters);
  1074. var chapters = JSON.parse(res.data[0][0].chapters);
  1075. var worksDetail = res.data[1];
  1076. // var askArray = res.data[2];
  1077. this.scopeId = res.data[2].length ? res.data[2][0].id : this.sInfo.id;
  1078. var askInfo = res.data[3];
  1079. var answerInfo = res.data[4];
  1080. var linkInfo = res.data[5];
  1081. var workJson = {
  1082. img: [],
  1083. imgIndex: 0,
  1084. eList: [],
  1085. rateList: {},
  1086. wpptInfo: [],
  1087. askInfo: [],
  1088. answerInfo: [],
  1089. };
  1090. var eList =
  1091. chapters[this.sInfo.stage].chapterInfo[0].taskJson[this.sInfo.task]
  1092. .eList;
  1093. var _ooption = [];
  1094. if (eList) {
  1095. workJson.eList = eList;
  1096. for (var i = 0; i < eList.length; i++) {
  1097. _ooption.push({ value: 0, name: eList[i].value });
  1098. workJson.rateList[eList[i].value] = 0;
  1099. }
  1100. workJson.rateList.content = "";
  1101. this.ooption = _ooption;
  1102. } else {
  1103. workJson.eList = [
  1104. { value: "意识能力", detail: "", score: 5 },
  1105. { value: "科学探究能力", detail: "", score: 5 },
  1106. { value: "实践创新能力", detail: "", score: 5 },
  1107. { value: "学习反思能力", detail: "", score: 5 },
  1108. { value: "工程思维能力", detail: "", score: 5 },
  1109. ];
  1110. for (var i = 0; i < workJson.eList.length; i++) {
  1111. _ooption.push({ value: 0, name: workJson.eList[i].value });
  1112. workJson.rateList[workJson.eList[i].value] = 0;
  1113. }
  1114. workJson.rateList.content = "";
  1115. this.ooption = [
  1116. { value: 0, name: "意识能力" },
  1117. { value: 0, name: "科学探究能力" },
  1118. { value: 0, name: "实践创新能力" },
  1119. { value: 0, name: "学习反思能力" },
  1120. { value: 0, name: "工程思维能力" },
  1121. ];
  1122. }
  1123. if (this.sInfo.rate) {
  1124. var _rate = JSON.parse(this.sInfo.rate);
  1125. var _rateList = Object.keys(JSON.parse(this.sInfo.rate));
  1126. for (var i = 0; i < _rateList.length; i++) {
  1127. var _c = Object.keys(workJson.rateList);
  1128. if (_c.indexOf(_rateList[i]) != -1) {
  1129. workJson.rateList[_rateList[i]] = _rate[_rateList[i]];
  1130. }
  1131. }
  1132. for (var i = 0; i < this.ooption.length; i++) {
  1133. if (_rateList.indexOf(this.ooption[i].name) != -1) {
  1134. this.ooption[i].value = _rate[this.ooption[i].name];
  1135. }
  1136. }
  1137. }
  1138. for (var i = 0; i < worksDetail.length; i++) {
  1139. workJson.img.push({ src: worksDetail[i].content, id: i });
  1140. }
  1141. for (var i = 0; i < askInfo.length; i++) {
  1142. const element = askInfo[i];
  1143. let a = JSON.parse(element.content)[0];
  1144. let b = a.anwer.split(",");
  1145. let c = [];
  1146. for (var j = 0; j < b.length; j++) {
  1147. c.push(parseInt(b[j]));
  1148. }
  1149. a.askJson.radio = c;
  1150. a.askJson.time = element.time;
  1151. workJson.askInfo.push(a.askJson);
  1152. }
  1153. for (var i = 0; i < answerInfo.length; i++) {
  1154. const element = answerInfo[i];
  1155. workJson.answerInfo.push(JSON.parse(element.content)[0]);
  1156. }
  1157. this.worksDetail = workJson;
  1158. this.courseDetail = res.data[0][0];
  1159. this.$forceUpdate;
  1160. var _course = `<h1>${this.sInfo.course}</h1>`;
  1161. var _title =
  1162. "<h2>" +
  1163. "第" +
  1164. (this.sInfo.stage + 1) +
  1165. "阶段 " +
  1166. this.dyList[this.sInfo.stage].name +
  1167. "</h2>";
  1168. var _subtitle =
  1169. "<h3>" +
  1170. "任务" +
  1171. (this.sInfo.task + 1) +
  1172. " " +
  1173. this.dyList[this.sInfo.stage].taskList[this.sInfo.task].name +
  1174. "-" +
  1175. this.sInfo.sName +
  1176. "</h3>";
  1177. var _img = "";
  1178. if (workJson.img.length > 0) {
  1179. for (var i = 0; i < workJson.img.length; i++) {
  1180. // _img += `<div style="margin-top:10px"><div>图片${
  1181. // i + 1
  1182. // }:<a href='${workJson.img[i].src}'>${
  1183. // workJson.img[i].src
  1184. // }</a></div>`;
  1185. _img += `<div style="margin-top:10px"><div>图片${i + 1
  1186. }</div><img style="max-width:500px" src="${workJson.img[i].src
  1187. }"/></div>`;
  1188. }
  1189. }
  1190. var _ask = "";
  1191. if (workJson.askInfo.length > 0) {
  1192. var _ask = "<h3>选择题</h3>";
  1193. for (var i = 0; i < workJson.askInfo.length; i++) {
  1194. var _div = document.createElement("div");
  1195. _div.innerHTML = `<h4>标题:${workJson.askInfo[i].askTitle}</h4>`;
  1196. for (var j = 0; j < workJson.askInfo[i].askJson.length; j++) {
  1197. var _div2 = document.createElement("div");
  1198. _div2.innerHTML = `<h5>第${j + 1}题:${workJson.askInfo[i].askJson[j].askstitle
  1199. } 选择:${workJson.askInfo[i].radio[j] + 1}</h5> `;
  1200. var _div3 = document.createElement("div");
  1201. for (
  1202. var z = 0;
  1203. z < workJson.askInfo[i].askJson[j].checkList.length;
  1204. z++
  1205. ) {
  1206. _div3.innerHTML += `<span style="margin-right:5px">${z + 1}.${workJson.askInfo[i].askJson[j].checkList[z]
  1207. }</span>`;
  1208. }
  1209. _div2.innerHTML += `<div>${_div3.innerHTML}</div>`;
  1210. _div.innerHTML += `<div>${_div2.innerHTML}</div>`;
  1211. }
  1212. _ask += `<div>${_div.innerHTML}</div>`;
  1213. }
  1214. }
  1215. var _answer = "";
  1216. if (workJson.answerInfo.length > 0) {
  1217. var _answer = "<h3>问答</h3>";
  1218. for (var i = 0; i < workJson.answerInfo.length; i++) {
  1219. var _div = document.createElement("div");
  1220. _div.innerHTML = `<h4>问答:${workJson.answerInfo[i].answerTitle}</h4>`;
  1221. _div.innerHTML += `<div>${workJson.answerInfo[i].answer}</div>`;
  1222. _answer += `<div>${_div.innerHTML}</div>`;
  1223. }
  1224. }
  1225. var _link = "";
  1226. if (linkInfo.length > 0) {
  1227. for (var i = 0; i < linkInfo.length; i++) {
  1228. _link += `<div style="margin-top:10px"><a href='${linkInfo[i].content}'>${linkInfo[i].content}</a></div>`;
  1229. }
  1230. }
  1231. var _html =
  1232. _course + _title + _subtitle + _img + _ask + _answer + _link;
  1233. this.generate(_html);
  1234. })
  1235. .catch((err) => {
  1236. console.error(err);
  1237. });
  1238. },
  1239. isOpen(s) {
  1240. // this.stageIndex = s;
  1241. this.dyList2[s].isOpen = !this.dyList2[s].isOpen;
  1242. },
  1243. openTask(s, i) {
  1244. var a = s + "-" + i;
  1245. var b = document.getElementById(a);
  1246. var d = b.getAttribute("scrollindex");
  1247. var c = document.getElementsByClassName("shuBox")[0];
  1248. c.scrollTop = parseInt(d) * 375;
  1249. this.stageIndex = s;
  1250. this.taskCount = i;
  1251. this.navId = a;
  1252. },
  1253. async generate(a) {
  1254. // 将html文件中需要用到的数据挂载到store上
  1255. this.$store.commit("update", ["report", a]);
  1256. console.log(this.$store.state.report);
  1257. const content = `<!DOCTYPE html>
  1258. <html lang="en">
  1259. <head>
  1260. <meta charset="UTF-8">
  1261. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  1262. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  1263. <title>报告</title>
  1264. </head>
  1265. <body>
  1266. ${this.$store.state.report}
  1267. </body>
  1268. </html>`;
  1269. // debugger
  1270. // 生成报告
  1271. const link = document.createElement("a");
  1272. let dname = this.sInfo.course + "-" + this.sInfo.sName + ".html";
  1273. // link.download = "报告.html"; // 文件名
  1274. link.download = dname; // 文件名
  1275. link.style.display = "none";
  1276. // 创建文件流
  1277. // 创建bolb实例时,内容一定要放在[]中
  1278. const blob = new Blob([content], {
  1279. type: "text/plain;charset='utf-8'",
  1280. });
  1281. link.href = window.URL.createObjectURL(blob);
  1282. document.body.appendChild(link);
  1283. link.click();
  1284. document.body.removeChild(link);
  1285. },
  1286. },
  1287. mounted() {
  1288. this.$nextTick(function () {
  1289. this.tableHeight =
  1290. window.innerHeight - this.$refs.table.$el.offsetTop - 200;
  1291. if (this.tableHeight <= 530) {
  1292. this.tableHeight = 530;
  1293. }
  1294. // 监听窗口大小变化
  1295. let self = this;
  1296. window.onresize = function () {
  1297. self.tableHeight =
  1298. window.innerHeight - self.$refs.table.$el.offsetTop - 200;
  1299. if (self.tableHeight <= 530) {
  1300. self.tableHeight = 530;
  1301. }
  1302. };
  1303. });
  1304. },
  1305. created() {
  1306. this.page = 1;
  1307. this.selectSDetail();
  1308. this.getProject();
  1309. document.scrollingElement.scrollTop = 0;
  1310. },
  1311. };
  1312. </script>
  1313. <style scoped>
  1314. .body_student {
  1315. margin: 0px auto;
  1316. width: 98%;
  1317. height: 100%;
  1318. }
  1319. .student_head {
  1320. width: 100%;
  1321. margin: 0 auto;
  1322. height: 30%;
  1323. background-image: linear-gradient(90deg, #30c499, #75ceba);
  1324. color: #fff;
  1325. }
  1326. .wheel > img,
  1327. .project > img {
  1328. width: 100%;
  1329. height: 100%;
  1330. }
  1331. .box_course {
  1332. display: flex;
  1333. padding: 35px 0 25px 60px;
  1334. align-items: center;
  1335. }
  1336. .wheel {
  1337. width: 210px;
  1338. }
  1339. .right_box {
  1340. display: flex;
  1341. flex-direction: column;
  1342. margin-left: 30px;
  1343. /* justify-content: space-around; */
  1344. }
  1345. .right_box_title {
  1346. font-size: 23px;
  1347. }
  1348. .people {
  1349. display: flex;
  1350. margin: 30px 0 20px 0px;
  1351. }
  1352. .student_body {
  1353. width: 100%;
  1354. margin: 0 auto;
  1355. background: #fff;
  1356. margin-top: 20px;
  1357. padding: 0 0 20px;
  1358. }
  1359. .project {
  1360. width: 100%;
  1361. height: 100%;
  1362. }
  1363. .project_box {
  1364. display: flex;
  1365. width: 100%;
  1366. flex-direction: row;
  1367. flex-wrap: wrap;
  1368. }
  1369. .three_box_inthis {
  1370. display: flex;
  1371. width: 30.33%;
  1372. flex-direction: column;
  1373. align-items: flex-start;
  1374. border: 1px solid #ccc;
  1375. margin: 15px 0 0 15px;
  1376. }
  1377. .projct_nav {
  1378. margin-left: 5px;
  1379. display: flex;
  1380. flex-direction: column;
  1381. flex-wrap: nowrap;
  1382. justify-content: space-around;
  1383. }
  1384. .projct_nav > div {
  1385. margin-bottom: 5px;
  1386. }
  1387. .look_score {
  1388. border-radius: 0px 0px 5px 5px;
  1389. text-align: center;
  1390. background: #41cda6;
  1391. width: 100%;
  1392. height: 35px;
  1393. font-size: 14px;
  1394. color: #fff;
  1395. line-height: 35px;
  1396. cursor: pointer;
  1397. margin-top: 10px;
  1398. }
  1399. .cancelbox {
  1400. position: absolute;
  1401. z-index: 2;
  1402. left: 50%;
  1403. width: 95%;
  1404. transform: translateX(-50%);
  1405. display: flex;
  1406. justify-content: flex-end;
  1407. box-sizing: border-box;
  1408. }
  1409. .student_table >>> .el-table,
  1410. .student_table >>> .el-table__body-wrapper {
  1411. height: auto !important;
  1412. }
  1413. .pb_head>span:nth-child(2) {
  1414. font-size: 16px;
  1415. margin-left: 80px;
  1416. color: #ab582f;
  1417. }
  1418. .pb_head {
  1419. margin: 0 !important;
  1420. width: 100% !important;
  1421. }
  1422. .student_page {
  1423. margin-top: 10px;
  1424. }
  1425. .student_head {
  1426. margin-top: 10px;
  1427. padding-bottom: 15px;
  1428. }
  1429. .student_search {
  1430. display: flex;
  1431. }
  1432. .student_search>div:nth-child(1) {
  1433. line-height: 35px;
  1434. font-size: 14px;
  1435. }
  1436. .student_search>>>.el-input__inner {
  1437. width: 190px;
  1438. height: 35px;
  1439. margin-left: 10px;
  1440. }
  1441. .student_table>>>.el-table--border td {
  1442. border-right: 0px !important;
  1443. }
  1444. .add_work>>>.el-dialog__header {
  1445. padding: 20px 20px 10px;
  1446. text-align: center;
  1447. background: #32455b;
  1448. }
  1449. .add_work>>>.el-dialog__title {
  1450. font-size: 14px !important;
  1451. color: #fff !important;
  1452. }
  1453. .add_work>>>.el-dialog__headerbtn {
  1454. font-size: 20px !important;
  1455. top: 5px !important;
  1456. right: 8px !important;
  1457. }
  1458. .add_work>>>.el-form-item__label {
  1459. margin-left: 65px;
  1460. }
  1461. .add_work>>>.el-form-item {
  1462. display: flex;
  1463. }
  1464. .add_work>>>.el-form-item__content {
  1465. margin: 0 !important;
  1466. }
  1467. .add_work>>>.el-dialog__footer {
  1468. text-align: center !important;
  1469. }
  1470. .add_work>>>.el-dialog {
  1471. min-width: 650px !important;
  1472. width: 1080px;
  1473. }
  1474. .add_work>>>.el-dialog__body {
  1475. background: #fff;
  1476. height: 660px;
  1477. overflow: auto;
  1478. }
  1479. .header-title {
  1480. display: flex;
  1481. }
  1482. .logoImg {
  1483. width: 30px;
  1484. }
  1485. .logoImg>img {
  1486. width: 100%;
  1487. height: 100%;
  1488. }
  1489. .title_add_student {
  1490. margin: 0 auto;
  1491. color: #fff;
  1492. }
  1493. .first {
  1494. margin-top: 25px;
  1495. border-bottom: 1px solid #c5c5c5;
  1496. }
  1497. .one_top {
  1498. display: flex;
  1499. justify-content: space-between;
  1500. }
  1501. .one_top>div:nth-child(1) {
  1502. color: #2490bf;
  1503. font-size: 16px;
  1504. }
  1505. .one_top>button {
  1506. width: 100px;
  1507. background: #24a0a4;
  1508. height: 30px;
  1509. color: #e0e0e0;
  1510. font-size: 13px;
  1511. padding: 0 !important;
  1512. }
  1513. .work_Img {
  1514. width: 150px;
  1515. margin: 10px 0;
  1516. }
  1517. .assess_Img {
  1518. width: 400px;
  1519. margin: 0 auto;
  1520. padding: 15px 0;
  1521. }
  1522. .work_Img>img,
  1523. .assess_Img>img {
  1524. width: 100%;
  1525. height: 100%;
  1526. }
  1527. .work_input {
  1528. border: 1px solid;
  1529. width: 135px;
  1530. height: 20px;
  1531. line-height: 20px;
  1532. font-size: 13px;
  1533. padding: 5px;
  1534. }
  1535. .poetry {
  1536. margin: 10px 0 15px 0;
  1537. }
  1538. .assess {
  1539. background: #169bd5 !important;
  1540. }
  1541. .assess_top {
  1542. border-bottom: 2px solid #eee;
  1543. padding-bottom: 10px;
  1544. }
  1545. .assess_top>div:nth-child(1) {
  1546. color: #2490bf;
  1547. font-size: 16px;
  1548. }
  1549. .student_Answer {
  1550. display: flex;
  1551. margin: 5px 10px;
  1552. /* padding-bottom: 25px; */
  1553. }
  1554. .workName {
  1555. font-size: 18px;
  1556. font-weight: bold;
  1557. margin: 5px 10px;
  1558. }
  1559. .toux {
  1560. width: 35px;
  1561. /* margin: auto 0; */
  1562. height: 35px;
  1563. }
  1564. .toux>img {
  1565. width: 100%;
  1566. height: 100%;
  1567. }
  1568. .nav {
  1569. display: flex;
  1570. flex-wrap: wrap;
  1571. margin-top: 10px;
  1572. flex-direction: column;
  1573. }
  1574. .studentName {
  1575. margin-left: 10px;
  1576. font-size: 13px;
  1577. }
  1578. .studentAnswer {
  1579. font-size: 12px;
  1580. margin: 5px 0 0 10px;
  1581. height: 42px;
  1582. overflow: auto;
  1583. }
  1584. .comment {
  1585. /* margin: 20px 0 0 10px;
  1586. overflow: auto;
  1587. height: 75%;
  1588. max-height: 330px; */
  1589. overflow: auto;
  1590. /* height: 290px; */
  1591. height: 525px;
  1592. background: #fff;
  1593. border-radius: 5px;
  1594. padding: 10px;
  1595. box-sizing: border-box;
  1596. }
  1597. .comment_body {
  1598. height: calc(100% - 25px);
  1599. overflow: auto;
  1600. }
  1601. .comment>.comment_title {
  1602. font-size: 18px;
  1603. }
  1604. .comment>.comment_title>span {
  1605. font-size: 14px;
  1606. }
  1607. .other_Answer {
  1608. display: flex;
  1609. margin: 5px 10px;
  1610. padding: 15px 0;
  1611. justify-content: center;
  1612. }
  1613. .nav {
  1614. margin-left: 5px;
  1615. width: 80%;
  1616. }
  1617. .nameAndTime {
  1618. display: flex;
  1619. }
  1620. .otherName {
  1621. font-weight: bold;
  1622. margin-left: 10px;
  1623. font-size: 13px;
  1624. }
  1625. .time {
  1626. margin-left: 25px;
  1627. font-size: 12px;
  1628. margin-top: 3px;
  1629. }
  1630. .otherAnswer {
  1631. width: 80%;
  1632. word-wrap: break-word;
  1633. word-break: break-all;
  1634. overflow: hidden;
  1635. font-size: 12px;
  1636. margin: 5px 0 0 10px;
  1637. }
  1638. .doingAssess {
  1639. margin: 0 auto;
  1640. width: 300px;
  1641. background: #169bd5;
  1642. height: 35px;
  1643. line-height: 35px;
  1644. border-radius: 3px;
  1645. font-size: 13px;
  1646. text-align: center;
  1647. color: #fff;
  1648. margin-top: 30px;
  1649. cursor: pointer;
  1650. }
  1651. .score_top {
  1652. display: flex;
  1653. margin-bottom: 10px;
  1654. }
  1655. .userTou {
  1656. width: 50px;
  1657. }
  1658. .userTou>img {
  1659. width: 100%;
  1660. height: 100%;
  1661. }
  1662. .score_user_name {
  1663. line-height: 53px;
  1664. margin-left: 15px;
  1665. }
  1666. .course_top {
  1667. display: flex;
  1668. align-items: center;
  1669. }
  1670. .course_top>div:nth-child(1) {
  1671. line-height: 25px;
  1672. }
  1673. .course_top>div:nth-child(2) {
  1674. border: 1px solid #ccc;
  1675. width: 250px;
  1676. text-align: center;
  1677. height: 25px;
  1678. line-height: 25px;
  1679. margin-left: 30px;
  1680. }
  1681. .sd_score {
  1682. font-size: 15px;
  1683. background: #fff;
  1684. height: 100%;
  1685. padding-top: 40px;
  1686. border-radius: 5px;
  1687. width: 90%;
  1688. box-shadow: 2px 2px 5px #909090;
  1689. overflow: auto;
  1690. }
  1691. .sd_score .score_box {
  1692. display: flex;
  1693. align-items: center;
  1694. justify-content: center;
  1695. margin-bottom: 15px;
  1696. /* margin-left: 30px; */
  1697. }
  1698. .sd_score .score_box:last-child {
  1699. margin-bottom: 0;
  1700. }
  1701. .rate_size>>>.el-rate__icon {
  1702. font-size: 25px;
  1703. }
  1704. .rate_size>>>.el-icon-star-off {
  1705. font-size: 22px;
  1706. }
  1707. .sd_score span {
  1708. width: 130px;
  1709. text-align: justify;
  1710. text-align-last: justify;
  1711. display: block;
  1712. margin-right: 20px;
  1713. white-space: nowrap;
  1714. overflow: hidden;
  1715. text-overflow: ellipsis;
  1716. font-size: 16px;
  1717. }
  1718. .moreSay {
  1719. margin: 0px 0 5px 20px;
  1720. }
  1721. .more_say_input {
  1722. margin-left: 20px;
  1723. width: 80%;
  1724. }
  1725. .more_say_input>>>.el-input__inner {
  1726. height: 75px;
  1727. font-size: 13px;
  1728. padding: 0 0 0 10px;
  1729. }
  1730. .assess_right {
  1731. width: 200px;
  1732. background: #82b0ee;
  1733. color: #fff;
  1734. text-align: center;
  1735. height: 30px;
  1736. line-height: 30px;
  1737. border-radius: 5px;
  1738. margin: 0 auto;
  1739. margin-top: 20px;
  1740. font-size: 13px;
  1741. cursor: pointer;
  1742. }
  1743. .student_page {
  1744. margin-top: 10px;
  1745. }
  1746. .display {
  1747. display: none;
  1748. }
  1749. .firstTop {
  1750. background: #fff;
  1751. display: flex;
  1752. margin-bottom: 15px;
  1753. flex-direction: column;
  1754. align-items: flex-start;
  1755. height: 90px;
  1756. padding: 10px 25px;
  1757. border-radius: 5px;
  1758. width: 90%;
  1759. box-shadow: 2px 2px 5px #909090;
  1760. }
  1761. .talkScore>>>.el-dialog__body {
  1762. background: #efefef;
  1763. margin: 0 !important;
  1764. }
  1765. .lastTop {
  1766. background: #fff;
  1767. border-radius: 5px;
  1768. width: 98%;
  1769. height: 120px;
  1770. box-shadow: 2px 2px 5px #909090;
  1771. }
  1772. .left,
  1773. .right {
  1774. /* background: #fff; */
  1775. border-radius: 5px;
  1776. /* padding: 10px; */
  1777. box-sizing: border-box;
  1778. }
  1779. .left {
  1780. margin-right: 10px;
  1781. width: 30%;
  1782. min-height: 425px;
  1783. }
  1784. /* .left .left_top {
  1785. background: #fff;
  1786. padding: 10px;
  1787. border-radius: 5px;
  1788. margin-bottom: 15px;
  1789. } */
  1790. .left .left_bottom {
  1791. background: #fff;
  1792. padding: 10px;
  1793. border-radius: 5px;
  1794. height: 160px;
  1795. }
  1796. .right {
  1797. width: 20%;
  1798. background: none;
  1799. padding: 0;
  1800. }
  1801. .courseTitle {
  1802. font-size: 16px;
  1803. color: #7c7c7c;
  1804. width: 100%;
  1805. margin-bottom: 10px;
  1806. display: flex;
  1807. justify-content: space-between;
  1808. align-items: center;
  1809. }
  1810. .course_t {
  1811. font-size: 19px;
  1812. display: flex;
  1813. align-items: flex-end;
  1814. }
  1815. .course_t span:nth-child(2) {
  1816. font-size: 16px;
  1817. margin-left: 10px;
  1818. }
  1819. .courseTitle span:nth-child(2) {
  1820. /* font-size: 14px;
  1821. cursor: pointer; */
  1822. }
  1823. .bigImg {
  1824. margin-top: 10px;
  1825. /* height: 300px; */
  1826. height: 150px;
  1827. }
  1828. .bigImg>img,
  1829. .thumbnail>div>img {
  1830. width: 100%;
  1831. height: 100%;
  1832. object-fit: contain;
  1833. }
  1834. .thumbnail {
  1835. display: flex;
  1836. flex-direction: row;
  1837. justify-content: flex-start;
  1838. margin: 5px 0 8px;
  1839. overflow-x: auto;
  1840. overflow-y: hidden;
  1841. }
  1842. .isClick {
  1843. border: 3px solid #5f89d4;
  1844. border-radius: 5px;
  1845. }
  1846. .thumbnail>div {
  1847. width: 80px;
  1848. height: 80px;
  1849. margin-right: 5px;
  1850. cursor: pointer;
  1851. flex-shrink: 0;
  1852. box-sizing: border-box;
  1853. }
  1854. .zyBoxC {
  1855. background: #ededed;
  1856. display: flex;
  1857. align-items: flex-start;
  1858. justify-content: center;
  1859. padding: 20px 0px;
  1860. flex-direction: column;
  1861. height: calc(100% - 50px);
  1862. }
  1863. .zyBox {
  1864. display: flex;
  1865. min-width: 600px;
  1866. width: 600px;
  1867. position: relative;
  1868. background: #fff;
  1869. flex-direction: column;
  1870. flex-wrap: nowrap;
  1871. align-items: flex-start;
  1872. overflow: hidden;
  1873. }
  1874. .zyBoxC+.zyBoxC {
  1875. margin-top: 10px;
  1876. }
  1877. .rbButtom {
  1878. position: absolute;
  1879. bottom: 0;
  1880. right: 0;
  1881. background: #06a7ff;
  1882. width: 100px;
  1883. height: 30px;
  1884. border-radius: 5px;
  1885. text-align: center;
  1886. color: #fff;
  1887. line-height: 30px;
  1888. font-size: 14px;
  1889. cursor: pointer;
  1890. right: 10px;
  1891. }
  1892. .bigImg>>>.vjs-tech,
  1893. .bigImg>>>.video-js {
  1894. height: 300px !important;
  1895. }
  1896. .el-table>>>.even_row {
  1897. background-color: #f1f1f1;
  1898. }
  1899. .data_body {
  1900. height: 200px;
  1901. display: flex;
  1902. position: relative;
  1903. border-radius: 5px;
  1904. box-sizing: border-box;
  1905. width: 100%;
  1906. background: #fff;
  1907. }
  1908. .data_body .title {
  1909. position: absolute;
  1910. top: 10px;
  1911. left: 10px;
  1912. }
  1913. .dialog_diy>>>.el-dialog__header {
  1914. padding: 9px 20px 10px;
  1915. background: #32455b !important;
  1916. }
  1917. .dialog_diy>>>.el-dialog__title {
  1918. color: #fff;
  1919. font-size: 15px;
  1920. }
  1921. .dialog_diy>>>.el-dialog__headerbtn {
  1922. top: 14px;
  1923. }
  1924. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
  1925. color: #fff;
  1926. }
  1927. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
  1928. color: #fff;
  1929. }
  1930. .dialog_diy>>>.el-dialog__body,
  1931. .dialog_diy>>>.el-dialog__footer {
  1932. background: #fafafa;
  1933. }
  1934. .max_diy>>>.el-dialog {
  1935. /* max-width: 1200px; */
  1936. max-width: 1300px;
  1937. /* height:800px */
  1938. }
  1939. .max_diy>>>.el-dialog__body {
  1940. height: 800px;
  1941. }
  1942. .dialog_diy2>>>.el-dialog__header {
  1943. padding: 9px 20px 10px;
  1944. background: #32455b !important;
  1945. }
  1946. .dialog_diy2>>>.el-dialog__title {
  1947. color: #fff;
  1948. font-size: 15px;
  1949. }
  1950. .dialog_diy2>>>.el-dialog__headerbtn {
  1951. top: 12px;
  1952. }
  1953. .dialog_diy2>>>.el-dialog__headerbtn .el-dialog__close {
  1954. color: #fff;
  1955. }
  1956. .dialog_diy2>>>.el-dialog__headerbtn .el-dialog__close:hover {
  1957. color: #fff;
  1958. }
  1959. .dialog_diy2>>>.el-dialog__body,
  1960. .dialog_diy2>>>.el-dialog__footer {
  1961. background: #ededed;
  1962. padding: 15px 20px;
  1963. }
  1964. .a_addBox2 {
  1965. margin: 10px 0;
  1966. background: #fff;
  1967. padding: 15px;
  1968. }
  1969. .a_addBox {
  1970. margin: 10px 0;
  1971. background: #fff;
  1972. padding: 15px;
  1973. /* max-height: 400px; */
  1974. max-height: 160px;
  1975. overflow: auto;
  1976. }
  1977. .a_add_box {
  1978. border-bottom: 2px solid #eee;
  1979. padding-bottom: 10px;
  1980. }
  1981. .a_add_head {
  1982. display: flex;
  1983. align-items: center;
  1984. justify-content: space-between;
  1985. margin: 10px 0;
  1986. font-size: 18px;
  1987. }
  1988. .a_add_head .a_add_head_input {
  1989. width: 300px;
  1990. }
  1991. .a_add_head .a_add_head_div {
  1992. display: flex;
  1993. align-items: center;
  1994. justify-content: space-between;
  1995. }
  1996. .a_add_body {
  1997. display: flex;
  1998. align-items: center;
  1999. }
  2000. .a_add_input {
  2001. display: flex;
  2002. align-items: center;
  2003. flex-wrap: wrap;
  2004. /* flex-direction: column; */
  2005. /* width: 100%; */
  2006. }
  2007. .a_add_input>>>el-radio-group {
  2008. margin: 10px 0;
  2009. }
  2010. .a_add_input>>>.el-radio-group {
  2011. display: flex;
  2012. flex-direction: row;
  2013. flex-wrap: wrap;
  2014. }
  2015. .redioStyle>>>.el-radio__label {
  2016. font-size: 18px;
  2017. }
  2018. .task_title {
  2019. font-size: 18px;
  2020. font-weight: 700;
  2021. }
  2022. .ask_Answer {
  2023. /* margin-top: 10px; */
  2024. }
  2025. .ask_Answer_title {
  2026. font-size: 18px;
  2027. }
  2028. .ask_Answer_content {
  2029. display: flex;
  2030. justify-content: center;
  2031. margin: 10px 0;
  2032. }
  2033. .answer_body {
  2034. padding: 10px 0;
  2035. border-bottom: 1px solid #f5f5f5;
  2036. }
  2037. .answer_title {
  2038. font-size: 15px;
  2039. font-weight: 700;
  2040. }
  2041. .answer_content {
  2042. margin-top: 5px;
  2043. }
  2044. .ask_body {
  2045. display: flex;
  2046. font-size: 16px;
  2047. margin-top: 10px;
  2048. flex-direction: column;
  2049. height: 130px;
  2050. overflow: auto;
  2051. /* padding: 0 10px; */
  2052. box-sizing: border-box;
  2053. }
  2054. .ask_body div {
  2055. /* cursor: pointer; */
  2056. display: flex;
  2057. align-items: center;
  2058. justify-content: space-between;
  2059. }
  2060. .ask_body div .btn {
  2061. cursor: pointer;
  2062. color: #fff;
  2063. background-color: #409eff;
  2064. text-align: center;
  2065. font-size: 12px;
  2066. padding: 6px 12px;
  2067. box-sizing: border-box;
  2068. border-radius: 5px;
  2069. width: 60px;
  2070. }
  2071. .ask_body div span:nth-child(1) {
  2072. max-width: 250px;
  2073. white-space: nowrap;
  2074. overflow: hidden;
  2075. text-overflow: ellipsis;
  2076. }
  2077. .ask_body div+div {
  2078. margin-top: 10px;
  2079. }
  2080. .work_nopicture {
  2081. display: flex;
  2082. justify-content: center;
  2083. align-items: center;
  2084. /* height: 350px; */
  2085. height: 352px;
  2086. }
  2087. .student_table>>>.el-table,
  2088. .student_table>>>.el-table__body-wrapper {
  2089. height: auto !important;
  2090. }
  2091. .tx {
  2092. width: 35px;
  2093. }
  2094. .ech {
  2095. width: 100px;
  2096. }
  2097. .tx>img,
  2098. .ech>img {
  2099. width: 100%;
  2100. height: 100%;
  2101. }
  2102. .txName {
  2103. display: flex;
  2104. flex-direction: row;
  2105. align-items: center;
  2106. margin-left: 10px;
  2107. }
  2108. .txName>div:nth-child(2) {
  2109. margin-left: 10px;
  2110. }
  2111. .top {
  2112. display: flex;
  2113. justify-content: space-between;
  2114. padding: 15px 0 15px 20px;
  2115. flex-direction: row;
  2116. flex-wrap: nowrap;
  2117. width: 95%;
  2118. }
  2119. .jdName>div:nth-child(1) {
  2120. font-size: 20px;
  2121. font-weight: bold;
  2122. }
  2123. .taskName {
  2124. font-size: 14px;
  2125. margin-top: 10px;
  2126. display: flex;
  2127. flex-direction: row;
  2128. align-items: center;
  2129. }
  2130. .task {
  2131. background: #49a0f0;
  2132. color: #fff;
  2133. width: 50px;
  2134. height: 22px;
  2135. border-radius: 5px;
  2136. text-align: center;
  2137. line-height: 22px;
  2138. margin-right: 10px;
  2139. }
  2140. .contentBox {
  2141. width: 100%;
  2142. display: flex;
  2143. flex-direction: row;
  2144. flex-wrap: nowrap;
  2145. align-items: flex-start;
  2146. height: 253px;
  2147. }
  2148. .left_top {
  2149. width: 45%;
  2150. padding-left: 20px;
  2151. }
  2152. .right_top {
  2153. width: 53%;
  2154. }
  2155. .cBox {
  2156. display: flex;
  2157. flex-direction: row;
  2158. flex-wrap: nowrap;
  2159. align-items: flex-start;
  2160. width: 100%;
  2161. height: calc(100% - 60px);
  2162. overflow: auto;
  2163. }
  2164. .right_score {
  2165. min-width: 370px;
  2166. height: 351px;
  2167. margin-left: 10px;
  2168. }
  2169. .pb_left {
  2170. width: 20%;
  2171. margin-right: 10px;
  2172. background: rgb(255, 255, 255);
  2173. /* padding-right: 10px; */
  2174. /* height: 500px; */
  2175. height: 100%;
  2176. }
  2177. .cTitle {
  2178. background: #205cc6;
  2179. width: 85%;
  2180. margin: 10px auto;
  2181. height: 50px;
  2182. color: #fff;
  2183. line-height: 50px;
  2184. text-align: center;
  2185. font-size: 20px;
  2186. font-weight: bold;
  2187. border-radius: 5px;
  2188. cursor: pointer;
  2189. white-space: nowrap;
  2190. overflow: hidden;
  2191. text-overflow: ellipsis;
  2192. padding: 0 10px;
  2193. }
  2194. .ml {
  2195. margin-left: 20px;
  2196. color: #5b7dba;
  2197. border-left: 3px solid #5b7dba;
  2198. padding-left: 5px;
  2199. font-weight: bold;
  2200. }
  2201. .cru_selectBox {
  2202. width: 100%;
  2203. margin: 0 auto;
  2204. overflow: auto;
  2205. height: calc(100% - 90px);
  2206. overflow-x: hidden;
  2207. }
  2208. .cru_selectBox::-webkit-scrollbar {
  2209. /*滚动条整体样式*/
  2210. width: 6px;
  2211. /*高宽分别对应横竖滚动条的尺寸*/
  2212. height: 6px;
  2213. }
  2214. /*定义滚动条轨道 内阴影+圆角*/
  2215. .cru_selectBox::-webkit-scrollbar-track {
  2216. border-radius: 10px;
  2217. background-color: #b8bdc9;
  2218. }
  2219. /*定义滑块 内阴影+圆角*/
  2220. .cru_selectBox::-webkit-scrollbar-thumb {
  2221. border-radius: 10px;
  2222. -webkit-box-shadow: inset 0 0 6px rgb(96, 125, 184);
  2223. background-color: #2c5ab3;
  2224. }
  2225. .blue_box_one {
  2226. text-align: center;
  2227. color: #fff;
  2228. background-image: linear-gradient(90deg, #477cd7, #65b9fc);
  2229. border-radius: 7px;
  2230. margin: 10px auto;
  2231. cursor: pointer;
  2232. width: 95%;
  2233. height: 45px;
  2234. display: flex;
  2235. flex-direction: row;
  2236. justify-content: flex-start;
  2237. align-items: center;
  2238. }
  2239. .blue_box_one>div:nth-child(1) {
  2240. line-height: 30px;
  2241. margin: 0 5px 0 10px;
  2242. width: 30%;
  2243. min-width: 70px;
  2244. border-radius: 4px;
  2245. }
  2246. .blue_box_one>div:nth-child(2) {
  2247. white-space: nowrap;
  2248. text-overflow: ellipsis;
  2249. overflow: hidden;
  2250. word-break: break-all;
  2251. width: 70%;
  2252. text-align: left;
  2253. margin-right: 10px;
  2254. max-width: calc(100% - 85px);
  2255. }
  2256. .blue_box_one>div:nth-child(2):hover {
  2257. overflow: hidden;
  2258. text-overflow: ellipsis;
  2259. white-space: nowrap;
  2260. cursor: pointer;
  2261. }
  2262. .twoChild {
  2263. width: 95%;
  2264. margin: 10px auto;
  2265. border-radius: 5px;
  2266. background: #f2f2f2;
  2267. display: flex;
  2268. flex-direction: column;
  2269. flex-wrap: nowrap;
  2270. justify-content: flex-start;
  2271. align-items: flex-start;
  2272. transition: all 0.5s;
  2273. overflow: hidden;
  2274. height: 0;
  2275. background: #e7f3ff;
  2276. }
  2277. .twoChild>div:nth-child(1) {
  2278. margin-top: 5px;
  2279. }
  2280. .navChild {
  2281. width: 100%;
  2282. cursor: pointer;
  2283. margin-bottom: 10px;
  2284. }
  2285. .navActive {
  2286. height: auto;
  2287. }
  2288. .navTask {
  2289. display: flex;
  2290. flex-direction: row;
  2291. flex-wrap: nowrap;
  2292. align-items: center;
  2293. align-content: flex-start;
  2294. height: 40px;
  2295. justify-content: flex-start;
  2296. padding: 0 10px;
  2297. width: 100%;
  2298. box-sizing: border-box;
  2299. }
  2300. .vedioNav {
  2301. margin: 10px 0 0 15px;
  2302. border-bottom: 1px solid #d7d7d7;
  2303. padding-bottom: 5px;
  2304. background: #96d1ff;
  2305. width: 55px;
  2306. min-width: 55px;
  2307. border-radius: 5px;
  2308. color: #fff;
  2309. text-align: center;
  2310. height: 20px;
  2311. line-height: 26px;
  2312. font-size: 14px;
  2313. }
  2314. .navTaskname {
  2315. white-space: nowrap;
  2316. text-overflow: ellipsis;
  2317. overflow: hidden;
  2318. word-break: break-all;
  2319. padding-left: 5px;
  2320. }
  2321. .allBox {
  2322. display: flex;
  2323. flex-direction: row;
  2324. flex-wrap: nowrap;
  2325. align-items: flex-start;
  2326. width: 100%;
  2327. height: 351px;
  2328. margin-bottom: 20px;
  2329. }
  2330. .shuBox {
  2331. display: flex;
  2332. flex-direction: column;
  2333. flex-wrap: nowrap;
  2334. align-items: center;
  2335. width: 100%;
  2336. flex-wrap: nowrap;
  2337. overflow: auto;
  2338. /* height: 500px; */
  2339. height: 100%;
  2340. }
  2341. .answerbox {
  2342. display: flex;
  2343. flex-direction: row;
  2344. /* align-items: center; */
  2345. margin-bottom: 20px;
  2346. font-size: 18px;
  2347. font-weight: bold;
  2348. }
  2349. .answerbox>div:nth-child(2) {
  2350. margin-left: 15px;
  2351. }
  2352. .answerbox1 {
  2353. display: flex;
  2354. flex-direction: column;
  2355. align-items: flex-start;
  2356. flex-wrap: nowrap;
  2357. font-size: 16px;
  2358. }
  2359. .answerbox1>div:nth-child(2) {
  2360. margin-top: 10px;
  2361. width: 265px;
  2362. max-height: 147px;
  2363. overflow: auto;
  2364. }
  2365. .jdName {
  2366. width: 100%;
  2367. }
  2368. .full_diy>>>.el-dialog {
  2369. margin: 0 !important;
  2370. height: 100%;
  2371. }
  2372. .full_diy>>>.el-dialog__body {
  2373. height: calc(100% - 100px);
  2374. }
  2375. .openTaskActive {
  2376. color: #4386e6;
  2377. }
  2378. .isClick {
  2379. background: #4d9def;
  2380. }
  2381. .buttonCss {
  2382. width: 100%;
  2383. display: flex;
  2384. flex-direction: row;
  2385. flex-wrap: nowrap;
  2386. justify-content: flex-end;
  2387. margin: 10px 0;
  2388. }
  2389. .fullStyle>>>.el-dialog__body {
  2390. height: calc(100% - 40px) !important;
  2391. overflow: auto;
  2392. }
  2393. .fullStyle>>>.el-dialog,
  2394. .fullStyle {
  2395. width: 100% !important;
  2396. max-width: 100% !important;
  2397. height: 100% !important;
  2398. margin: 0 !important;
  2399. overflow: hidden;
  2400. }
  2401. .worksTime {
  2402. position: absolute;
  2403. top: 10px;
  2404. right: 0;
  2405. display: flex;
  2406. flex-direction: row;
  2407. flex-wrap: nowrap;
  2408. align-items: baseline;
  2409. }
  2410. .fullBox {
  2411. /* overflow: unset !important;
  2412. height: auto !important; */
  2413. }
  2414. .fullZyBox {
  2415. width: 60% !important;
  2416. }
  2417. .rightScoreFullBox {
  2418. width: 40%;
  2419. }
  2420. </style>