liveProjectDetail.vue 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783
  1. <template>
  2. <div
  3. style="
  4. background: rgb(230, 234, 240);
  5. width: 100%;
  6. margin: 0;
  7. position: relate;
  8. height: 100%;
  9. "
  10. >
  11. <div class="blackBottom">
  12. <div
  13. style="
  14. display: flex;
  15. flex-direction: row;
  16. flex-wrap: nowrap;
  17. align-items: stretch;
  18. padding-left: 10px;
  19. "
  20. >
  21. <div class="logoLive">
  22. <img src="../assets/icon/logo.png" alt />
  23. </div>
  24. <div style="color: #fff; line-height: 45px; padding-left: 15px">
  25. introduce a festival (Final)
  26. </div>
  27. </div>
  28. </div>
  29. <div class="isNoOther">
  30. <div
  31. class="imgMiddle"
  32. :class="isBlock > 0 ? 'imghalf' : 'imgMiddle'"
  33. v-show="!full"
  34. >
  35. <pdf
  36. :pdfUrl="pdfUrl"
  37. style="width: 100%; height: 100%"
  38. :ppage="ppage"
  39. @getPageTotal="getPageTotal"
  40. ></pdf>
  41. </div>
  42. <div
  43. style="
  44. background: #d0d6e4;
  45. width: 40%;
  46. height: 100%;
  47. max-width: 40%;
  48. overflow: auto;
  49. "
  50. :class="{ fullStyle: full }"
  51. v-if="isBlock > 0"
  52. >
  53. <div
  54. style="
  55. background: #fff;
  56. width: 96%;
  57. margin: 10px auto;
  58. height: 96%;
  59. position: relative;
  60. "
  61. >
  62. <div
  63. style="color: #bfbfbf; padding: 15px 0 15px 25px; font-size: 20px"
  64. v-if="isBlock == 3"
  65. >
  66. 课堂评价
  67. </div>
  68. <div
  69. style="
  70. margin-left: 25px;
  71. border-bottom: 3px solid #2c83ee;
  72. width: 70px;
  73. padding-bottom: 3px;
  74. text-align: center;
  75. padding-top: 15px;
  76. "
  77. v-if="isBlock == 1"
  78. >
  79. 开始答题
  80. </div>
  81. <div class="answerBox" v-if="isBlock == 1">
  82. <div class="answerBox">
  83. <div
  84. style="
  85. display: flex;
  86. flex-direction: column;
  87. flex-wrap: wrap;
  88. align-items: center;
  89. justify-content: center;
  90. "
  91. v-for="item in 1"
  92. :key="item"
  93. >
  94. <div class="choose_style">
  95. <span
  96. @click="isChooseActive(1)"
  97. :class="typeC.indexOf(1) != -1 ? 'isChoose' : ''"
  98. >A</span
  99. >
  100. <span
  101. @click="isChooseActive(2)"
  102. :class="typeC.indexOf(2) != -1 ? 'isChoose' : ''"
  103. >B</span
  104. >
  105. <span
  106. @click="isChooseActive(3)"
  107. :class="typeC.indexOf(3) != -1 ? 'isChoose' : ''"
  108. >C</span
  109. >
  110. <span
  111. @click="isChooseActive(4)"
  112. :class="typeC.indexOf(4) != -1 ? 'isChoose' : ''"
  113. >D</span
  114. >
  115. </div>
  116. <el-button style="margin: 0 auto" @click="showMember(item)"
  117. >提交</el-button
  118. >
  119. </div>
  120. </div>
  121. </div>
  122. <div
  123. class="answerBox tools_box"
  124. v-if="isBlock == 4"
  125. style="padding: 10px 0 0 25px; width: 100%; max-width: 100%"
  126. >
  127. <div style="color: #d1d1d1; font-size: 24px">课堂实践</div>
  128. <div
  129. style="
  130. margin: 20px 0 20px 0;
  131. border-bottom: 4px solid #3e86f3;
  132. width: 75px;
  133. text-align: center;
  134. padding-bottom: 3px;
  135. "
  136. >
  137. 选择工具
  138. </div>
  139. <div
  140. style="
  141. display: flex;
  142. flex-direction: row;
  143. flex-wrap: wrap;
  144. width: 100%;
  145. justify-content: flex-start;
  146. align-items: center;
  147. "
  148. >
  149. <div
  150. v-if="
  151. tools[ppage - 1].tools &&
  152. tools[ppage - 1].tools.indexOf(1) != -1
  153. "
  154. @click="checkTools(1)"
  155. class="toolCss"
  156. >
  157. <div class="toolImg">
  158. <img src="../assets/icon/secondToolList/whiteBoard.png" alt />
  159. <div>电子白板</div>
  160. </div>
  161. </div>
  162. <div
  163. v-if="
  164. tools[ppage - 1].tools &&
  165. tools[ppage - 1].tools.indexOf(3) != -1
  166. "
  167. @click="checkTools(3)"
  168. class="toolCss"
  169. >
  170. <div class="toolImg">
  171. <img
  172. src="../assets/icon/secondToolList/mindMapping.png"
  173. alt
  174. />
  175. <div>思维导图</div>
  176. </div>
  177. </div>
  178. <div
  179. v-if="
  180. tools[ppage - 1].tools &&
  181. tools[ppage - 1].tools.indexOf(4) != -1
  182. "
  183. @click="checkTools(4)"
  184. class="toolCss"
  185. >
  186. <div class="toolImg">
  187. <img src="../assets/icon/thirdToolList/ask.png" alt />
  188. <div>问卷调查</div>
  189. </div>
  190. </div>
  191. <div
  192. v-if="
  193. tools[ppage - 1].tools &&
  194. tools[ppage - 1].tools.indexOf(6) != -1
  195. "
  196. @click="checkTools(6)"
  197. class="toolCss"
  198. >
  199. <div class="toolImg">
  200. <img src="../assets/icon/secondToolList/doc.png" alt />
  201. <div>协同文档</div>
  202. </div>
  203. </div>
  204. <div
  205. v-if="
  206. tools[ppage - 1].tools &&
  207. tools[ppage - 1].tools.indexOf(7) != -1
  208. "
  209. @click="checkTools(7)"
  210. class="toolCss"
  211. >
  212. <div class="toolImg">
  213. <img
  214. src="../assets/icon/secondToolList/mindNetwork.png"
  215. alt
  216. />
  217. <div>思维网格</div>
  218. </div>
  219. </div>
  220. </div>
  221. </div>
  222. <div
  223. class="answerBox"
  224. style="height: 100%"
  225. v-if="isBlock == 2"
  226. ref="qrcodePicture"
  227. >
  228. <div style="height: 100%; width: 100%">
  229. <div v-if="toolCount == 1" class="tools_child_box">
  230. <div class="tools_title">
  231. <span>电子白板</span>
  232. <div>
  233. <img
  234. src="../assets/full.png"
  235. class="full"
  236. @click="fullTools"
  237. />
  238. </div>
  239. </div>
  240. <iframe
  241. style="width: 100%; height: 100%; border: none"
  242. src="https://iwb.cocorobo.cn/"
  243. ref="whiteBoard"
  244. ></iframe>
  245. </div>
  246. <div v-if="toolCount == 3" class="tools_child_box">
  247. <div class="tools_title">
  248. <span>思维导图</span>
  249. <div>
  250. <img
  251. src="../assets/full.png"
  252. class="full"
  253. @click="fullTools"
  254. />
  255. </div>
  256. </div>
  257. <iframe
  258. style="width: 100%; height: 100%; border: none"
  259. src="//cloud.cocorobo.cn/mind/"
  260. ref="mind"
  261. ></iframe>
  262. </div>
  263. <div v-if="toolCount == 6" class="tools_child_box">
  264. <div class="tools_title">
  265. <span>协同文档</span>
  266. <div>
  267. <img
  268. src="../assets/full.png"
  269. class="full"
  270. @click="fullTools"
  271. />
  272. </div>
  273. </div>
  274. <iframe
  275. style="width: 100%; height: 100%; border: none"
  276. src="https://cloud.cocorobo.cn/Office/Word/WordEditArea.htm"
  277. ></iframe>
  278. </div>
  279. <div v-if="toolCount == 7" class="tools_child_box">
  280. <div class="tools_title">
  281. <span>思维网格</span>
  282. <div>
  283. <img
  284. src="../assets/full.png"
  285. class="full"
  286. @click="fullTools"
  287. />
  288. </div>
  289. </div>
  290. <iframe
  291. style="width: 100%; height: 100%; border: none"
  292. src="https://pbl.cocorobo.cn/pbl-teacher-table/dist/#/Grid"
  293. ref="grid"
  294. ></iframe>
  295. </div>
  296. <div
  297. id="shishi_loading"
  298. style="
  299. width: 100%;
  300. height: 100%;
  301. background: #0000008f;
  302. position: absolute;
  303. top: 0;
  304. left: 0;
  305. z-index: 99999999999999;
  306. display: none;
  307. justify-content: center;
  308. align-items: center;
  309. "
  310. >
  311. <div
  312. style="
  313. color: #fff;
  314. padding: 15px;
  315. background: #00000070;
  316. border-radius: 5px;
  317. font-size: 18px;
  318. display: flex;
  319. align-items: center;
  320. "
  321. >
  322. <img
  323. src="https://pbl.cocorobo.cn/pbl-student-table/dist/js/loading.gif"
  324. alt
  325. style="width: 26px; margin-right: 10px"
  326. />
  327. <span>上传中...</span>
  328. </div>
  329. </div>
  330. <div class="nextStepBox">
  331. <div class="nextStepOne" @click="isBlock = 4">返回</div>
  332. </div>
  333. <div
  334. class="nextStepOne"
  335. style="float: right"
  336. @click="getImg"
  337. v-if="toolCount == 1 || toolCount == 3 || toolCount == 7"
  338. >
  339. 截图
  340. </div>
  341. <div
  342. class="nextStepOne"
  343. style="float: right"
  344. @click="addImg($event)"
  345. v-if="toolCount == 1 || toolCount == 3 || toolCount == 7"
  346. >
  347. 上传文件
  348. <input
  349. type="file"
  350. accept="image/png, image/gif, image/jpeg"
  351. style="display: none"
  352. @change="beforeUpload1($event, 1)"
  353. />
  354. </div>
  355. </div>
  356. </div>
  357. <div
  358. class="answerBox"
  359. v-if="
  360. isBlock == 3 &&
  361. tools[ppage - 1].tools &&
  362. tools[ppage - 1].tools.indexOf(14) != -1
  363. "
  364. style="padding: 0 0 0 25px"
  365. >
  366. <div>
  367. <div class="score_box">
  368. <span>聚焦主题</span>
  369. <el-rate v-model="rateList.ca"></el-rate>
  370. </div>
  371. <div class="score_box">
  372. <span>有开头结尾</span>
  373. <el-rate v-model="rateList.sia"></el-rate>
  374. </div>
  375. <div class="score_box">
  376. <span>语言正确,流畅</span>
  377. <el-rate v-model="rateList.zia"></el-rate>
  378. </div>
  379. <div class="score_box">
  380. <span>书写规范,美观</span>
  381. <el-rate v-model="rateList.qia"></el-rate>
  382. </div>
  383. </div>
  384. <!-- <div>
  385. <div style="padding-bottom: 15px; sont-size: 14px">备注</div>
  386. <div class="bz">
  387. <el-input
  388. type="textarea"
  389. placeholder="请输入备注…"
  390. :rows="6"
  391. resize="none"
  392. v-model="rateList.content"
  393. ></el-input>
  394. </div>
  395. </div> -->
  396. <span
  397. slot="footer"
  398. class="dialog-footer sztFooter"
  399. style="
  400. padding: 0 0 30px 0px;
  401. position: absolute;
  402. right: 20px;
  403. bottom: 0;
  404. "
  405. >
  406. <el-button @click="isBlock = 0">取消</el-button>
  407. <el-button type="primary" @click="addWork(6)">确定</el-button>
  408. </span>
  409. </div>
  410. <div
  411. class="answerBox"
  412. v-if="isBlock == 5"
  413. style="padding: 10px 0 0 25px"
  414. >
  415. <div style="color: #d1d1d1; font-size: 24px">课堂实践</div>
  416. <div
  417. style="
  418. margin: 20px 0 20px 0;
  419. border-bottom: 4px solid #3e86f3;
  420. width: 75px;
  421. text-align: center;
  422. padding-bottom: 3px;
  423. "
  424. >
  425. 选择附件
  426. </div>
  427. <div
  428. style="
  429. display: flex;
  430. flex-direction: row;
  431. flex-wrap: wrap;
  432. width: 100%;
  433. justify-content: flex-start;
  434. align-items: center;
  435. "
  436. >
  437. <div
  438. v-if="tools[ppage - 1].file && tools[ppage - 1].file.length"
  439. class="fileBox"
  440. >
  441. <div
  442. class="fileListCss"
  443. v-for="(v, vIndex) in videoList"
  444. :key="vIndex"
  445. >
  446. <div class="fileCss" @click="playVideo(v.src, vIndex)">
  447. <img src="../assets/uploadMp4.png" alt="" />
  448. </div>
  449. <div>{{ v.name }}</div>
  450. </div>
  451. <div
  452. class="fileListCss"
  453. v-for="(f, fIndex) in fileList"
  454. :key="fIndex"
  455. >
  456. <div class="fileCss" @click="openFile(f.src)">
  457. <img src="../assets/file.png" alt="" />
  458. </div>
  459. <div>{{ f.name }}</div>
  460. </div>
  461. </div>
  462. </div>
  463. <div class="nextStepBox">
  464. <div class="nextStepOne" @click="isBlock = 0">关闭</div>
  465. </div>
  466. </div>
  467. <div
  468. class="answerBox"
  469. :class="{ fullStyle: full }"
  470. v-if="isBlock == 6"
  471. >
  472. <div style="height: 70%; width: 100%">
  473. <div class="wheel">
  474. <div class="workd_media" style="height: 100%">
  475. <video-player
  476. class="video-player vjs-custom-skin"
  477. :playsinline="true"
  478. :options="playerO[videoindex]"
  479. @play="onPlayerPlay($event)"
  480. style="width: 90%; height: 100%; margin: 0 0 0 30px"
  481. ></video-player>
  482. </div>
  483. </div>
  484. <div class="nextStepBox" style="margin-top: 5%">
  485. <div class="nextStepOne" @click="isBlock = 0">关闭</div>
  486. </div>
  487. </div>
  488. </div>
  489. <div
  490. class="answerBox"
  491. style="height: 100%"
  492. :class="{ fullStyle: full }"
  493. v-if="isBlock == 7"
  494. >
  495. <div style="height: 70%; width: 100%">
  496. <div class="wheel" style="height: 520px; width: 100%">
  497. <iframe
  498. style="width: 100%; height: 100%; border: none"
  499. :src="pptImgUrl"
  500. ></iframe>
  501. </div>
  502. <div class="nextStepBox" style="margin-top: 5%">
  503. <div class="nextStepOne" @click="isBlock = 5">返回</div>
  504. </div>
  505. </div>
  506. </div>
  507. </div>
  508. </div>
  509. </div>
  510. <div class="blackBottomB"></div>
  511. <div v-if="proVisible" class="mask">
  512. <div class="progressBox">
  513. <div class="lbox">
  514. <img src="../assets/loading.gif" />上传中,请稍后
  515. </div>
  516. <el-progress
  517. :text-inside="true"
  518. :stroke-width="20"
  519. :percentage="progress"
  520. style="width: 80%"
  521. ></el-progress>
  522. </div>
  523. </div>
  524. <el-dialog
  525. :visible.sync="dialogVisible"
  526. :append-to-body="true"
  527. width="500px"
  528. :before-close="handleClose"
  529. class="dialog_diy"
  530. >
  531. <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
  532. 提交成功
  533. </div>
  534. <div
  535. style="
  536. width: 200px;
  537. background: #4d8ae0;
  538. height: 35px;
  539. margin: 0 auto;
  540. text-align: center;
  541. line-height: 35px;
  542. color: #fff;
  543. border-radius: 5px;
  544. cursor: pointer;
  545. "
  546. @click="dialogVisible = false"
  547. >
  548. 确定
  549. </div>
  550. </el-dialog>
  551. <div v-html="iframeInnerHtml" ref="iframeIh" class="iframeBox"></div>
  552. </div>
  553. </template>
  554. <script>
  555. import pdf from "./components/pdf";
  556. import html2canvas from "html2canvas";
  557. export default {
  558. components: {
  559. pdf,
  560. },
  561. data() {
  562. return {
  563. iframeInnerHtml: "",
  564. pdfUrl:
  565. "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E4%B8%8A%E8%AF%BE%E8%AF%BE%E4%BB%B6---%E4%BA%94%E4%B8%8Bintroduce%20a%20festival%20%28Final%20%29_202208251543361661413469082.pdf",
  566. pptImgUrl: "",
  567. ppage: 2,
  568. full: false,
  569. pageTotal: 0,
  570. howTools: 0,
  571. toolsList: [],
  572. timer: null,
  573. isLoading: false,
  574. formLabelWidth: "100px",
  575. userid: this.$route.query.userid,
  576. cid: this.$route.query.courseId,
  577. oid: this.$route.query.oid,
  578. mr: require("../assets/kc1.png"),
  579. timu: [],
  580. dialogVisible: false,
  581. answerBox: "",
  582. isNoHomeWork: false,
  583. answer: [
  584. { name: "A.1568" },
  585. { name: "B.720" },
  586. { name: "C.1728" },
  587. { name: "D.480" },
  588. ],
  589. steps: 0,
  590. isBlock: 0,
  591. isNext: false,
  592. isAnswer: false,
  593. upload: [
  594. {
  595. upImg: [],
  596. upVedio: [],
  597. upIntro: "",
  598. },
  599. ],
  600. noneBtnImg: false,
  601. proVisible: false,
  602. progress: 0,
  603. typeC: [],
  604. toolCount: 0,
  605. tools: [
  606. "",
  607. "",
  608. {
  609. file: [
  610. {
  611. name: "视频1.mp4",
  612. src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%AA%92%E4%BD%9311661413782505.mp4",
  613. },
  614. ],
  615. },
  616. { tools: [9] }, //问答题
  617. { tools: [9] },
  618. { tools: [9] }, //协同文档
  619. { tools: [9] }, //思维导图
  620. { tools: [9] },
  621. { tools: [9] },
  622. { tools: [12] },
  623. { tools: [9] },
  624. {
  625. file: [
  626. {
  627. name: "视频2.mp4",
  628. src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%AA%92%E4%BD%9321661413797366.mp4",
  629. },
  630. ],
  631. },
  632. { tools: [9] },
  633. "",
  634. { tools: [3] },
  635. "",
  636. { tools: [14] },
  637. "",
  638. "",
  639. "",
  640. "",
  641. "",
  642. //1、电子白板 2、便签 3、思维导图 4、问卷调查 5、量规评分 6、协同文档 7、思维网格 8、素材库 9、选择题 10、倒计时 11、问答题 12、选人回答 13、分小组 14、老师对提交作业进行评价 15、问答 16、作业提交 17、学习资料 18、训练平台 19、目标管理 20、课程设计 21、编程平台 22、AI体验 23、python 24、AI平台
  643. ],
  644. rateList: {
  645. ca: 0,
  646. sia: 0,
  647. zia: 0,
  648. qia: 0,
  649. content: "",
  650. },
  651. imgUrl: "",
  652. imgFile: "",
  653. imgFileUp: [],
  654. videoList: [],
  655. fileList: [],
  656. playerOptions: {
  657. playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
  658. autoplay: false, //如果true,浏览器准备好时开始回放。
  659. muted: false, // 默认情况下将会消除任何音频。
  660. loop: false, // 导致视频一结束就重新开始。
  661. preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
  662. language: "zh-CN",
  663. aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
  664. fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
  665. sources: [
  666. {
  667. type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 || "video/ogg"|| "video/webm"
  668. src: "", //url地址require("../../assets/media/aaa.mp4")
  669. },
  670. ],
  671. // poster: require("../../assets/tu31.png"), //你的封面地址
  672. // poster: dataRes.imgUrl, //你的封面地址
  673. notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
  674. controlBar: {
  675. timeDivider: true, //当前时间和持续时间的分隔符
  676. durationDisplay: true, //显示持续时间
  677. remainingTimeDisplay: false, //是否显示剩余时间功能
  678. fullscreenToggle: true, //全屏按钮
  679. },
  680. },
  681. playerO: {},
  682. videoindex: 0,
  683. };
  684. },
  685. methods: {
  686. change(val) {
  687. console.log(val);
  688. },
  689. goTo(path) {
  690. this.$router.push(path);
  691. },
  692. tableRowClassName({ row, rowIndex }) {
  693. if ((rowIndex + 1) % 2 === 0) {
  694. return "even_row";
  695. } else {
  696. return "";
  697. }
  698. },
  699. jump(cid) {
  700. window.parent.postMessage({ cid: cid, type: "1" }, "*");
  701. },
  702. handleCurrentChange(val) {
  703. // console.log(`当前页: ${val}`);
  704. this.page = val;
  705. },
  706. init() {},
  707. handleClose(done) {
  708. done();
  709. },
  710. handleRemove(file, fileList) {
  711. console.log(file, fileList);
  712. },
  713. onExceed() {
  714. this.$message.error("课程海报仅支持上传一张,请删除后再进行上传");
  715. },
  716. //uuid生成
  717. guid() {
  718. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
  719. /[xy]/g,
  720. function (c) {
  721. var r = (Math.random() * 16) | 0,
  722. v = c == "x" ? r : (r & 0x3) | 0x8;
  723. return v.toString(16);
  724. }
  725. );
  726. },
  727. time() {
  728. if (!this.now) {
  729. this.now = new Date().getTime();
  730. return true;
  731. } else {
  732. let time = new Date().getTime();
  733. if (time - this.now > 3000) {
  734. this.now = time;
  735. return true;
  736. } else {
  737. return false;
  738. }
  739. }
  740. },
  741. // answerWork() {
  742. // this.steps++;
  743. // },
  744. addTool(t) {
  745. if (t == 1) {
  746. window.parent.postMessage({ tools: "1" }, "*");
  747. } else if (t == 3) {
  748. window.parent.postMessage({ tools: "3" }, "*");
  749. } else if (t == 7) {
  750. window.parent.postMessage({ tools: "7" }, "*");
  751. }
  752. },
  753. answerQue() {
  754. this.dialogVisible = true;
  755. },
  756. isChooseActive(t) {
  757. if (this.isAnswer == true) {
  758. return;
  759. } else {
  760. if (this.typeC.length == 0) {
  761. this.typeC.push(t);
  762. } else {
  763. if (this.typeC.indexOf(t) != -1) {
  764. this.typeC.splice(this.typeC.indexOf(t), 1);
  765. } else {
  766. this.typeC.push(t);
  767. }
  768. }
  769. }
  770. },
  771. showMember(i) {
  772. if (this.typeC.length > 0) {
  773. // this.steps = 2;
  774. this.isAnswer = true;
  775. this.addWork(1);
  776. this.dialogVisible = true;
  777. } else {
  778. this.$message.error("至少选择一个答案!");
  779. }
  780. },
  781. clean(type) {
  782. if (type == 1) {
  783. this.upload[0].upImg.splice(0, 1);
  784. } else if (type == 2) {
  785. this.upload[0].upVedio.splice(0, 1);
  786. }
  787. },
  788. addImg(e) {
  789. var el = e.currentTarget;
  790. el.getElementsByTagName("input")[0].click();
  791. },
  792. imgChange(file, fileList, type) {
  793. if (type == 1) {
  794. var _tmp = this.upload[0].upImg;
  795. } else if (type == 2) {
  796. var _tmp = this.upload[0].upVedio;
  797. } else if (type == 100) {
  798. var _tmp = this.imgFileUp;
  799. }
  800. this.noneBtnImg = _tmp.length >= 1;
  801. },
  802. beforeUpload1(event, type) {
  803. var file = event.target.files[0];
  804. var credentials = {
  805. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  806. secretAccessKey: "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",
  807. }; //秘钥形式的登录上传
  808. window.AWS.config.update(credentials);
  809. window.AWS.config.region = "cn-northwest-1"; //设置区域
  810. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  811. var _this = this;
  812. _this.progress = 0;
  813. _this.proVisible = true;
  814. if (file) {
  815. var params = {
  816. Key:
  817. file.name.split(".")[0] +
  818. new Date().getTime() +
  819. "." +
  820. file.name.split(".")[file.name.split(".").length - 1],
  821. ContentType: file.type,
  822. Body: file,
  823. "Access-Control-Allow-Credentials": "*",
  824. ACL: "public-read",
  825. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  826. var options = {
  827. partSize: 2048 * 1024 * 1024,
  828. queueSize: 2,
  829. leavePartsOnError: true,
  830. };
  831. bucket
  832. .upload(params, options)
  833. .on("httpUploadProgress", function (evt) {
  834. //这里可以写进度条
  835. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  836. _this.progress = parseInt((evt.loaded * 80) / evt.total);
  837. })
  838. .send(function (err, data) {
  839. _this.progress = 100;
  840. setTimeout(() => {
  841. _this.proVisible = false;
  842. }, 1000);
  843. if (err) {
  844. var a = _this.$refs.upload1.uploadFiles;
  845. a.splice(a.length - 1, a.length);
  846. _this.$message.error("上传失败");
  847. } else {
  848. if (type == 1) {
  849. _this.upload[0].upImg.push({
  850. name: file.name,
  851. url: data.Location,
  852. uid: file.uid,
  853. });
  854. _this.imgChange(null, null, type);
  855. _this.addSWork(4);
  856. } else if (type == 2) {
  857. _this.upload[0].upVedio.push({
  858. name: file.name,
  859. url: data.Location,
  860. uid: file.uid,
  861. });
  862. _this.imgChange(null, null, type);
  863. }
  864. console.log(data.Location);
  865. }
  866. });
  867. }
  868. },
  869. beforeUpload2(event) {
  870. var file = event;
  871. var credentials = {
  872. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  873. secretAccessKey: "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",
  874. }; //秘钥形式的登录上传
  875. window.AWS.config.update(credentials);
  876. window.AWS.config.region = "cn-northwest-1"; //设置区域
  877. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  878. var _this = this;
  879. _this.progress = 0;
  880. _this.proVisible = true;
  881. if (file) {
  882. var params = {
  883. Key: file.name.split(".")[0] + new Date().getTime() + "." + "png",
  884. ContentType: file.type,
  885. Body: file,
  886. "Access-Control-Allow-Credentials": "*",
  887. ACL: "public-read",
  888. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  889. var options = {
  890. partSize: 2048 * 1024 * 1024,
  891. queueSize: 2,
  892. leavePartsOnError: true,
  893. };
  894. bucket
  895. .upload(params, options)
  896. .on("httpUploadProgress", function (evt) {
  897. //这里可以写进度条
  898. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  899. _this.progress = parseInt((evt.loaded * 80) / evt.total);
  900. })
  901. .send(function (err, data) {
  902. _this.progress = 100;
  903. setTimeout(() => {
  904. _this.proVisible = false;
  905. }, 1000);
  906. if (err) {
  907. var a = _this.$refs.upload1.uploadFiles;
  908. a.splice(a.length - 1, a.length);
  909. _this.$message.error("上传失败");
  910. } else {
  911. _this.imgFileUp.push({
  912. name: file.name,
  913. url: data.Location,
  914. uid: file.uid,
  915. });
  916. _this.imgChange(null, null, type);
  917. console.log(data.Location);
  918. }
  919. });
  920. }
  921. },
  922. addWork(type) {
  923. if (type == 4) {
  924. if (this.upload[0].upImg.length == 0) {
  925. this.$message.error("请上传图片");
  926. return;
  927. }
  928. }
  929. // else if (this.upload[0].upVedio.length == 0) {
  930. // this.$message.error("请上传视频");
  931. // return;
  932. // }
  933. // else if (this.upload[0].upIntro == "") {
  934. // this.$message.error("请填写简要描述");
  935. // return;
  936. // }
  937. if (this.isNoHomeWork == true) {
  938. this.$confirm(
  939. "您已经提交了该作业了,如果您再提交将覆盖上次提交的作业!",
  940. "提示",
  941. {
  942. confirmButtonText: "确定",
  943. cancelButtonText: "取消",
  944. type: "warning",
  945. }
  946. )
  947. .then(() => {
  948. this.addSWork(type);
  949. })
  950. .catch(() => {});
  951. } else {
  952. this.addSWork(type);
  953. }
  954. },
  955. addSWork(type) {
  956. var a;
  957. if (type == 4) {
  958. a = JSON.stringify(this.upload);
  959. } else if (type == 6) {
  960. a = JSON.stringify(this.rateList);
  961. }
  962. let params = {
  963. uid: this.userid,
  964. cid: this.cid,
  965. p: this.ppage - 1,
  966. t: type,
  967. upload: a,
  968. // upload: JSON.stringify(this.imgFileUp),
  969. };
  970. this.ajax
  971. .get(this.$store.state.api + "insertSWork", params)
  972. .then((res) => {
  973. // this.isNoHomeWork = true;
  974. // this.dialogVisible = true;
  975. // this.upload = res.data[0][0].upload;
  976. this.$message({
  977. message: "提交成功",
  978. type: "success",
  979. });
  980. this.selectSWork(6);
  981. })
  982. .catch((err) => {
  983. this.$message.error("提交成功");
  984. console.error(err);
  985. });
  986. },
  987. selectSWork(type) {
  988. let params = {
  989. uid: this.userid,
  990. cid: this.cid,
  991. p: this.ppage - 1,
  992. t: type,
  993. };
  994. this.ajax
  995. .get(this.$store.state.api + "selectSWork", params)
  996. .then((res) => {
  997. if (res.data[0].length > 0) {
  998. this.isNoHomeWork = true;
  999. }
  1000. })
  1001. .catch((err) => {
  1002. this.$message.error("暂无作业");
  1003. console.error(err);
  1004. });
  1005. },
  1006. getImg() {
  1007. var iframeHtml;
  1008. let iframeBody;
  1009. if (this.toolCount == 1) {
  1010. iframeHtml = this.$refs.whiteBoard;
  1011. } else if (this.toolCount == 3) {
  1012. iframeHtml = this.$refs.mind;
  1013. } else if (this.toolCount == 7) {
  1014. iframeHtml = this.$refs.grid;
  1015. }
  1016. iframeBody = iframeHtml.contentWindow.document.body;
  1017. this.iframeInnerHtml = iframeBody.innerHTML;
  1018. var iframeIh = this.$refs.iframeIh;
  1019. iframeIh.innerHTML = this.iframeInnerHtml;
  1020. this.$forceUpdate();
  1021. console.log(iframeIh);
  1022. // var iframeHtml = this.$refs.whiteBoard;
  1023. document.getElementById("shishi_loading").style.display = "flex";
  1024. var _ajs = iframeHtml.contentWindow.document.createElement("script");
  1025. _ajs.type = "text/javascript";
  1026. _ajs.innerHTML =
  1027. 'var _js = document.createElement("script");\n' +
  1028. '_js.type="text/javascript";\n' +
  1029. '_js.src="https://html2canvas.hertzen.com/dist/html2canvas.min.js";\n' +
  1030. "_js.onload = function(){\n" +
  1031. ' var a = document.getElementsByTagName("img")\n' +
  1032. ' for(var i = 0;i<a.length;i++){a[i].crossOrigin="anonymous"}\n' +
  1033. " html2canvas(document.body).then(canvas => {\n" +
  1034. ' var base64Url = canvas.toDataURL("image/png");\n' +
  1035. 'var base64 = "<img src=" + base64Url + " />"\n' +
  1036. 'var file = dataURLtoFile_shishi(base64Url, "截图")\n' +
  1037. "beforeUpload_shishi(file," +
  1038. "'" +
  1039. this.userid +
  1040. "'" +
  1041. ", " +
  1042. "'" +
  1043. this.cid +
  1044. "'" +
  1045. (this.ppage - 1) +
  1046. 4;
  1047. ")\n" + " });\n" + "}\n" + "document.head.appendChild(_js);\n";
  1048. iframeHtml.contentWindow.document.head.appendChild(_ajs);
  1049. // iframeHtml.contentWindow.jietu_shishi(this.userid, this.cid);
  1050. // 第一个参数是需要生成截图的元素,第二个是自己需要配置的参数,宽高等
  1051. // html2canvas(iframeBody, {
  1052. // allowTaint: true,
  1053. // backgroundColor: null, //画出来的图片有白色的边框,不要可设置背景为透明色(null)
  1054. // useCORS: true, //支持图片跨域
  1055. // scale: 1, //设置放大的倍数
  1056. // }).then((canvas) => {
  1057. // // 把生成的base64位图片上传到服务器,生成在线图片地址
  1058. // let url = canvas.toDataURL("image/png"); // toDataURL: 图片格式转成 base64
  1059. // this.imgUrl = url; //将图片下载到本地
  1060. // let a = document.createElement("a"); // 生成一个a元素
  1061. // let event = new MouseEvent("click"); // 创建一个单击事件
  1062. // a.download = "作业"; // 设置图片名称没有设置则为默认
  1063. // a.href = this.imgUrl; // 将生成的URL设置为a.href属性
  1064. // a.dispatchEvent(event); // 触发a的单击事件
  1065. // let file = this.dataURLtoFile(url, "作业");
  1066. // this.imgFile = file;
  1067. // this.beforeUpload2(this.imgFile);
  1068. // this.addSWork();
  1069. // console.log(this.imgFile);
  1070. // });
  1071. },
  1072. dataURLtoFile(dataurl, filename) {
  1073. let arr = dataurl.split(","),
  1074. mime = arr[0].match(/:(.*?);/)[1],
  1075. bstr = atob(arr[1]),
  1076. n = bstr.length,
  1077. u8arr = new Uint8Array(n);
  1078. while (n--) {
  1079. u8arr[n] = bstr.charCodeAt(n);
  1080. }
  1081. return new File([u8arr], filename, { type: mime });
  1082. },
  1083. search() {},
  1084. selectFile() {
  1085. this.fileList = [];
  1086. this.videoList = [];
  1087. var a = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  1088. var b = this.tools[this.ppage - 1].file;
  1089. for (var i = 0; i < b.length; i++) {
  1090. if (
  1091. a.indexOf(
  1092. b[i].src
  1093. .split(".")
  1094. [b[i].src.split(".").length - 1].toLocaleUpperCase()
  1095. ) != -1
  1096. ) {
  1097. this.fileList.push(b[i]);
  1098. } else {
  1099. this.videoList.push(b[i]);
  1100. }
  1101. }
  1102. this.playVideo();
  1103. },
  1104. openFile(u) {
  1105. this.pptImgUrl = "https://view.officeapps.live.com/op/view.aspx?src=" + u;
  1106. this.isBlock = 7;
  1107. },
  1108. playVideo() {
  1109. var d = JSON.parse(JSON.stringify(this.playerOptions));
  1110. for (var i = 0; i < this.videoList.length; i++) {
  1111. d.sources[0].src = this.videoList[i].src;
  1112. this.playerO[0] = d;
  1113. this.videoindex = i;
  1114. }
  1115. this.isBlock = 6;
  1116. },
  1117. switchVideo(media) {
  1118. this.playerO = {};
  1119. this.playerOptions.poster = "";
  1120. this.playerOptions.sources[0].src = media;
  1121. this.playerO = this.playerOptions;
  1122. },
  1123. onPlayerPlay() {},
  1124. howPage(page) {
  1125. if (!this.pageTotal) {
  1126. return;
  1127. }
  1128. if (page == this.pageTotal) {
  1129. this.isBlock = 3;
  1130. } else {
  1131. this.isBlock = 0;
  1132. if (
  1133. this.tools[page - 1].tools &&
  1134. this.tools[page - 1].tools.indexOf(9) != -1
  1135. ) {
  1136. this.isBlock = 1;
  1137. }
  1138. // if (this.ppage > 3) {
  1139. // this.isBlock = 2;
  1140. // }
  1141. this.full = false;
  1142. this.howTools = 0;
  1143. this.toolCount = 0;
  1144. if (
  1145. this.tools[page - 1].tools &&
  1146. (this.tools[page - 1].tools[0] == 14 ||
  1147. this.tools[page - 1].tools[0] == 12)
  1148. ) {
  1149. this.isBlock = 0;
  1150. }
  1151. if (
  1152. this.tools[page - 1].tools &&
  1153. (this.tools[page - 1].tools.indexOf(1) != -1 ||
  1154. this.tools[page - 1].tools.indexOf(3) != -1 ||
  1155. this.tools[page - 1].tools.indexOf(7) != -1)
  1156. ) {
  1157. this.isBlock = 4;
  1158. }
  1159. if (
  1160. this.tools[page - 1].tools &&
  1161. this.tools[page - 1].tools.length > 1
  1162. ) {
  1163. this.isBlock = 4;
  1164. }
  1165. if (this.tools[page - 1].tools && !this.tools[page - 1].tools.length) {
  1166. this.isBlock = 0;
  1167. }
  1168. if (
  1169. this.tools[this.ppage - 1].tools &&
  1170. this.tools[this.ppage - 1].tools.indexOf(14) != -1
  1171. ) {
  1172. this.isBlock = 3;
  1173. } else if (
  1174. this.tools[this.ppage - 1].tools &&
  1175. (this.tools[this.ppage - 1].tools.indexOf(3) != -1 ||
  1176. this.tools[this.ppage - 1].tools.indexOf(3) != -1 ||
  1177. this.tools[this.ppage - 1].tools.indexOf(6) != -1 ||
  1178. this.tools[this.ppage - 1].tools.indexOf(7) != -1 ||
  1179. this.tools[this.ppage - 1].tools.indexOf(10) != -1 ||
  1180. this.tools[this.ppage - 1].tools.indexOf(13) != -1)
  1181. ) {
  1182. this.isBlock = 4;
  1183. } else if (
  1184. this.tools[this.ppage - 1].file &&
  1185. this.tools[this.ppage - 1].file.length
  1186. ) {
  1187. this.selectFile();
  1188. }
  1189. }
  1190. },
  1191. setPage() {
  1192. this.ajax
  1193. .get(this.$store.state.api + "selectPptPage", "")
  1194. .then((res) => {
  1195. if (res.data[0].length > 0) {
  1196. if (this.ppage == res.data[0][0].page) {
  1197. return;
  1198. } else {
  1199. this.ppage = res.data[0][0].page;
  1200. // this.ppage = 3;
  1201. this.typeC = [];
  1202. this.isAnswer = false;
  1203. this.howPage(this.ppage);
  1204. }
  1205. }
  1206. })
  1207. .catch((err) => {
  1208. // this.$message.error("查询失败");
  1209. console.error(err);
  1210. });
  1211. },
  1212. getPageTotal(total) {
  1213. this.pageTotal = total;
  1214. },
  1215. fullTools() {
  1216. this.full = !this.full;
  1217. },
  1218. checkTools(tcount) {
  1219. this.isBlock = 2;
  1220. this.toolCount = tcount;
  1221. let _this = this;
  1222. _this.$nextTick(() => {
  1223. setTimeout(() => {
  1224. const script1 = document.createElement("script");
  1225. script1.type = "text/javascript";
  1226. script1.src =
  1227. "https://pbl.cocorobo.cn/pbl-student-table/dist/jquery-3.6.0.min.js";
  1228. const script2 = document.createElement("script");
  1229. script2.type = "text/javascript";
  1230. script2.src =
  1231. "https://pbl.cocorobo.cn/pbl-student-table/dist/aws-sdk-2.235.1.min.js";
  1232. const script3 = document.createElement("script");
  1233. script3.type = "text/javascript";
  1234. script3.src =
  1235. "https://html2canvas.hertzen.com/dist/html2canvas.min.js";
  1236. const script4 = document.createElement("script");
  1237. script4.type = "text/javascript";
  1238. script4.src =
  1239. "https://pbl.cocorobo.cn/pbl-student-table/dist/jietu.js";
  1240. if (_this.toolCount == 1) {
  1241. _this.$refs.whiteBoard.onload = () => {
  1242. _this.$refs.whiteBoard.contentWindow.document.body.appendChild(
  1243. script1
  1244. );
  1245. _this.$refs.whiteBoard.contentWindow.document.body.appendChild(
  1246. script2
  1247. );
  1248. // _this.$refs.whiteBoard.contentWindow.document.body.appendChild(script3);
  1249. _this.$refs.whiteBoard.contentWindow.document.body.appendChild(
  1250. script4
  1251. );
  1252. };
  1253. } else if (_this.toolCount == 3) {
  1254. _this.$refs.mind.onload = () => {
  1255. _this.$refs.mind.contentWindow.document.body.appendChild(script1);
  1256. _this.$refs.mind.contentWindow.document.body.appendChild(script2);
  1257. // _this.$refs.mind.contentWindow.document.body.appendChild(script3);
  1258. _this.$refs.mind.contentWindow.document.body.appendChild(script4);
  1259. };
  1260. } else if (_this.toolCount == 7) {
  1261. _this.$refs.grid.onload = () => {
  1262. _this.$refs.grid.contentWindow.document.body.appendChild(script1);
  1263. _this.$refs.grid.contentWindow.document.body.appendChild(script2);
  1264. // _this.$refs.grid.contentWindow.document.body.appendChild(script3);
  1265. _this.$refs.grid.contentWindow.document.body.appendChild(script4);
  1266. };
  1267. }
  1268. }, 0);
  1269. });
  1270. },
  1271. },
  1272. beforeDestroy() {
  1273. clearInterval(this.timer);
  1274. this.timer = null;
  1275. // window.removeEventListener("message");
  1276. },
  1277. created() {
  1278. // this.selectSWork();
  1279. let _this = this;
  1280. this.timer = setInterval(() => {
  1281. _this.setPage();
  1282. }, 1000);
  1283. // window.addEventListener("message", function (e) {
  1284. // // 监听 message 事件
  1285. // if (e.data.type && e.data.type == "shishi_canvas") {
  1286. // console.log(e.data.data);
  1287. // }
  1288. // });
  1289. },
  1290. };
  1291. </script>
  1292. <style scoped>
  1293. .dialog_diy >>> .el-dialog__header {
  1294. background: #3d67bc !important;
  1295. padding: 15px 20px;
  1296. }
  1297. .dialog_diy >>> .el-dialog__title {
  1298. color: #fff;
  1299. }
  1300. .dialog_diy >>> .el-dialog__headerbtn {
  1301. top: 9px;
  1302. }
  1303. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  1304. color: #fff;
  1305. }
  1306. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  1307. color: #fff;
  1308. }
  1309. .blackBottom {
  1310. background: rgb(0, 0, 0);
  1311. height: 45px;
  1312. width: 100%;
  1313. display: flex;
  1314. flex-direction: row;
  1315. flex-wrap: nowrap;
  1316. align-items: center;
  1317. justify-content: space-between;
  1318. }
  1319. .imgMiddle {
  1320. width: 100%;
  1321. }
  1322. .imgMiddle > img,
  1323. .imghalf > img,
  1324. .szt > img,
  1325. .uploadImg > img,
  1326. .uploadVedio > img,
  1327. .uploadImgPic > img,
  1328. .logoLive > img,
  1329. .close > img,
  1330. .deleteWord > img {
  1331. width: 100%;
  1332. height: 100%;
  1333. }
  1334. .deleteWord {
  1335. width: 22px !important;
  1336. height: 22px;
  1337. position: absolute;
  1338. right: -5px;
  1339. top: -5px;
  1340. cursor: pointer;
  1341. }
  1342. .blackBottomB {
  1343. position: sticky;
  1344. bottom: 0px;
  1345. left: 0px;
  1346. display: flex;
  1347. flex-direction: row;
  1348. flex-wrap: wrap;
  1349. align-content: center;
  1350. justify-content: space-between;
  1351. align-items: center;
  1352. background: rgb(0, 0, 0);
  1353. height: 45px;
  1354. width: 100%;
  1355. }
  1356. .blackBottomB > div:nth-child(1) {
  1357. margin-left: 10px !important;
  1358. }
  1359. .blackButton {
  1360. color: #fff;
  1361. background: #066ebe;
  1362. width: 100px;
  1363. height: 30px;
  1364. line-height: 30px;
  1365. text-align: center;
  1366. margin: 0 25px;
  1367. border-radius: 5px;
  1368. font-size: 15px;
  1369. cursor: pointer;
  1370. }
  1371. .isNoOther {
  1372. width: 100%;
  1373. display: flex;
  1374. height: calc(100% - 90px);
  1375. }
  1376. .imghalf {
  1377. width: 60% !important;
  1378. }
  1379. .answerBox {
  1380. padding: 25px;
  1381. overflow: auto;
  1382. height: 70%;
  1383. box-sizing: border-box;
  1384. }
  1385. .answerTimuBox {
  1386. display: flex;
  1387. flex-direction: row;
  1388. flex-wrap: nowrap;
  1389. align-items: center;
  1390. justify-content: space-between;
  1391. padding-bottom: 15px;
  1392. }
  1393. .memberBox {
  1394. display: flex;
  1395. flex-direction: row;
  1396. flex-wrap: wrap;
  1397. align-items: center;
  1398. }
  1399. .memberBox > div {
  1400. background: rgb(240, 185, 204);
  1401. width: 120px;
  1402. color: #fff;
  1403. height: 40px;
  1404. text-align: center;
  1405. line-height: 40px;
  1406. border-radius: 5px;
  1407. margin: 0 15px 15px 0;
  1408. cursor: pointer;
  1409. }
  1410. .viewSta {
  1411. background: rgb(97, 97, 97);
  1412. color: #bebebe;
  1413. margin: 20% auto 20px;
  1414. width: 300px;
  1415. height: 40px;
  1416. text-align: center;
  1417. line-height: 40px;
  1418. border-radius: 5px;
  1419. cursor: pointer;
  1420. }
  1421. .szt {
  1422. width: 450px;
  1423. margin: 20px auto;
  1424. }
  1425. .sztFooter {
  1426. padding: 20px 10px 50px 0;
  1427. display: flex;
  1428. flex-direction: row;
  1429. flex-wrap: nowrap;
  1430. justify-content: flex-end;
  1431. align-items: center;
  1432. }
  1433. .timuButton {
  1434. background: #649ef2;
  1435. width: 75px;
  1436. height: 27px;
  1437. line-height: 27px;
  1438. text-align: center;
  1439. border-radius: 5px;
  1440. color: #fff;
  1441. margin-right: 20px;
  1442. display: inline-block;
  1443. }
  1444. .anserBoxCss {
  1445. margin: 30px 0 20px 0;
  1446. }
  1447. .anserBoxCss >>> .el-radio__label {
  1448. font-size: 18px;
  1449. }
  1450. .anserBoxCss >>> .el-radio__inner {
  1451. border-radius: 0px !important;
  1452. }
  1453. .nextStepBox {
  1454. display: flex;
  1455. justify-content: center;
  1456. margin-top: 10px;
  1457. }
  1458. .nextStepOne {
  1459. background: #6b92c9;
  1460. color: #fff;
  1461. width: 110px;
  1462. text-align: center;
  1463. height: 35px;
  1464. line-height: 35px;
  1465. font-size: 14px;
  1466. border-radius: 5px;
  1467. cursor: pointer;
  1468. }
  1469. .nextStepOne,
  1470. .nextStepOne {
  1471. margin-left: 10px;
  1472. }
  1473. .toolList {
  1474. display: flex;
  1475. flex-direction: row;
  1476. flex-wrap: wrap;
  1477. justify-content: flex-start;
  1478. align-items: center;
  1479. }
  1480. .tools {
  1481. display: flex;
  1482. flex-direction: column;
  1483. align-items: center;
  1484. margin-right: 20px;
  1485. }
  1486. .tools > div:nth-child(1) {
  1487. width: 60px;
  1488. }
  1489. .tools > div:nth-child(1) > img {
  1490. width: 100%;
  1491. height: 100%;
  1492. }
  1493. .uploadImg {
  1494. width: 100px;
  1495. margin: 10px 0 0 15px;
  1496. cursor: pointer;
  1497. }
  1498. .upImg {
  1499. display: flex;
  1500. flex-direction: column;
  1501. flex-wrap: nowrap;
  1502. align-items: center;
  1503. justify-content: center;
  1504. color: rgb(182, 182, 182);
  1505. font-size: 20px;
  1506. }
  1507. .binfo_input {
  1508. font: inherit;
  1509. color: currentColor;
  1510. width: 100%;
  1511. margin: 0;
  1512. padding: 15px 14px;
  1513. display: block;
  1514. min-width: 0;
  1515. outline: none;
  1516. box-sizing: content-box;
  1517. background: none;
  1518. -webkit-tap-highlight-color: transparent;
  1519. border: 1px solid rgba(0, 0, 0, 0.23);
  1520. border-radius: 4px;
  1521. box-sizing: border-box;
  1522. resize: none;
  1523. }
  1524. .binfo_input:focus-visible {
  1525. border: 1px solid rgba(61, 103, 188);
  1526. }
  1527. .hengCss {
  1528. display: flex;
  1529. flex-direction: row;
  1530. flex-wrap: wrap;
  1531. align-items: center;
  1532. padding: 5px 0 0 20px;
  1533. }
  1534. .uploadImgPic {
  1535. width: 100px;
  1536. height: 100px;
  1537. position: relative;
  1538. margin: 0 20px 0 0;
  1539. }
  1540. .uploadImgPic > div {
  1541. width: 100px;
  1542. white-space: nowrap;
  1543. overflow: hidden;
  1544. text-overflow: ellipsis;
  1545. }
  1546. .mask {
  1547. background-color: rgba(0, 0, 0, 0);
  1548. position: fixed;
  1549. top: 0;
  1550. left: 0;
  1551. width: 100%;
  1552. height: 100%;
  1553. z-index: 20000;
  1554. display: flex;
  1555. align-items: center;
  1556. justify-content: center;
  1557. }
  1558. .progressBox {
  1559. width: 500px;
  1560. height: 180px;
  1561. background: #fff;
  1562. border-radius: 10px;
  1563. box-shadow: 0 0 6px 1px #bfbfbf;
  1564. display: flex;
  1565. align-items: center;
  1566. justify-content: center;
  1567. flex-direction: column;
  1568. }
  1569. .progressBox .lbox {
  1570. height: 100px;
  1571. font-size: 19px;
  1572. display: flex;
  1573. align-items: center;
  1574. }
  1575. .progressBox .lbox img {
  1576. width: 40px;
  1577. margin-right: 20px;
  1578. }
  1579. .progressBox >>> .el-progress-bar__outer {
  1580. background-color: #d1dfff !important;
  1581. }
  1582. .progressBox .lbox {
  1583. height: 100px;
  1584. font-size: 19px;
  1585. display: flex;
  1586. align-items: center;
  1587. }
  1588. .progressBox .lbox img {
  1589. width: 40px;
  1590. margin-right: 20px;
  1591. }
  1592. .logoLive {
  1593. width: 35px;
  1594. }
  1595. .choose_style {
  1596. display: flex;
  1597. justify-content: center;
  1598. align-items: center;
  1599. width: 100%;
  1600. margin: 10px 0 30px;
  1601. }
  1602. .choose_style span {
  1603. background: #f8f9ff;
  1604. color: #677fff;
  1605. border: 1px solid #95b5ff;
  1606. padding: 15px 20px;
  1607. font-size: 25px;
  1608. border-radius: 18px;
  1609. cursor: pointer;
  1610. }
  1611. .choose_style span + span {
  1612. margin-left: 25px;
  1613. }
  1614. .isChoose {
  1615. color: #fff !important;
  1616. background: #5e78fa !important;
  1617. }
  1618. .close {
  1619. position: absolute;
  1620. right: 10px;
  1621. top: 10px;
  1622. width: 20px;
  1623. cursor: pointer;
  1624. }
  1625. .score_box {
  1626. font-size: 14px;
  1627. }
  1628. .score_box >>> .el-rate {
  1629. margin: 10px 0 20px 0;
  1630. }
  1631. .score_box >>> .el-rate__icon {
  1632. font-size: 23px;
  1633. }
  1634. .bz >>> .el-textarea__inner {
  1635. width: 80%;
  1636. background: #f9f9f9;
  1637. border: 1px solid #afafaf;
  1638. border-radius: 0px;
  1639. }
  1640. .tools_title {
  1641. background: #000;
  1642. position: absolute;
  1643. width: 100%;
  1644. top: 0;
  1645. left: 0;
  1646. display: flex;
  1647. align-items: center;
  1648. height: 40px;
  1649. justify-content: space-between;
  1650. padding: 0 15px;
  1651. box-sizing: border-box;
  1652. }
  1653. .tools_title span {
  1654. color: #fff;
  1655. }
  1656. .tools_title div {
  1657. display: flex;
  1658. align-items: center;
  1659. }
  1660. .full,
  1661. .closeImg {
  1662. height: 22px;
  1663. cursor: pointer;
  1664. }
  1665. .tools_title img,
  1666. img {
  1667. margin-left: 10px;
  1668. }
  1669. .tools_box {
  1670. width: 38.5%;
  1671. max-width: 38.5%;
  1672. overflow: auto;
  1673. background: rgb(255, 255, 255);
  1674. height: 91.5%;
  1675. position: relative;
  1676. margin: 10px 15px;
  1677. }
  1678. .tools_child_box {
  1679. width: 100%;
  1680. height: calc(90% - 40px);
  1681. padding-top: 40px;
  1682. }
  1683. .fullStyle {
  1684. width: 100% !important;
  1685. max-width: 100% !important;
  1686. }
  1687. .toolCss {
  1688. display: flex;
  1689. flex-direction: column;
  1690. flex-wrap: wrap;
  1691. width: calc(100% / 6);
  1692. align-items: center;
  1693. text-align: center;
  1694. }
  1695. .toolImg {
  1696. width: 70px;
  1697. height: 70px;
  1698. cursor: pointer;
  1699. }
  1700. .toolImg > img {
  1701. width: 100%;
  1702. height: 100%;
  1703. margin: 0 !important;
  1704. }
  1705. .toolImg > div {
  1706. font-size: 14px;
  1707. }
  1708. .iframeBox {
  1709. overflow: auto;
  1710. position: absolute;
  1711. top: 0;
  1712. z-index: -2;
  1713. width: 100%;
  1714. height: 100%;
  1715. }
  1716. .fileBox {
  1717. display: flex;
  1718. flex-direction: row;
  1719. flex-wrap: wrap;
  1720. align-items: center;
  1721. justify-content: flex-start;
  1722. align-content: center;
  1723. width: 100%;
  1724. }
  1725. .fileListCss {
  1726. display: flex;
  1727. flex-direction: column;
  1728. flex-wrap: nowrap;
  1729. align-items: center;
  1730. margin: 0 15px 15px 0;
  1731. }
  1732. .fileCss {
  1733. width: 70px;
  1734. height: 70px;
  1735. cursor: pointer;
  1736. margin: 0 0 10px 0;
  1737. }
  1738. .fileCss > img {
  1739. width: 100%;
  1740. height: 100%;
  1741. margin: 0;
  1742. }
  1743. .wheel {
  1744. width: 100%;
  1745. height: 100%;
  1746. }
  1747. .video-player >>> .video-js {
  1748. height: 100%;
  1749. }
  1750. </style>