liveRoomKQ.vue 70 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541
  1. <template>
  2. <div
  3. style="
  4. background: #d0d6e4;
  5. width: 100%;
  6. height: 100%;
  7. margin: 0;
  8. position: relative;
  9. "
  10. >
  11. <!-- <div class="pb_content_body" style="height: 100%">
  12. </div>-->
  13. <div class="blackBottom">
  14. <div
  15. style="
  16. display: flex;
  17. flex-direction: row;
  18. flex-wrap: nowrap;
  19. align-items: stretch;
  20. padding-left: 10px;
  21. "
  22. >
  23. <div class="logoLive">
  24. <img src="../../assets/icon/logo.png" alt />
  25. </div>
  26. <div style="color: #fff; line-height: 45px; padding-left: 15px">
  27. introduce a festival (Final)
  28. </div>
  29. </div>
  30. </div>
  31. <div class="isNoOther">
  32. <div
  33. class="imgMiddle"
  34. :class="isBlock > 0 ? 'imghalf' : 'imgMiddle'"
  35. v-show="!full"
  36. >
  37. <!-- <img src="../../assets/icon/kc1.png" alt /> -->
  38. <!-- <iframe
  39. style="width: 100%; height: 100%; border: none"
  40. src="https://view.officeapps.live.com/op/view.aspx?src=https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/0701%E5%AE%9E%E6%97%B6%E8%AF%BE%E5%A0%82%E6%A8%A1%E6%8B%9F%E6%BC%94%E7%A4%BA%E8%AF%BE%E4%BB%B61656644341323.pptx"
  41. ></iframe>-->
  42. <pdf
  43. :pdfUrl="pdfUrl"
  44. style="width: 100%; height: 100%"
  45. :getPage="getPage"
  46. @getWidth="getWidth"
  47. ></pdf>
  48. <div
  49. class="workd_media"
  50. v-if="videoBlock == 9"
  51. :style="{ width: Vwidth }"
  52. >
  53. <video-player
  54. class="video-player vjs-custom-skin"
  55. :playsinline="true"
  56. :options="playerO[0]"
  57. @play="onPlayerPlayZ($event)"
  58. @pause="onPlayerPause"
  59. @ended="onPlayerEnded"
  60. @playing="onPlayerPlaying"
  61. @timeupdate="onPlayerTimeupdate"
  62. style="width: 100%; height: 100%"
  63. ></video-player>
  64. </div>
  65. </div>
  66. <div
  67. style="
  68. background: #d0d6e4;
  69. height: 100%;
  70. min-width: 40%;
  71. max-width: 40%;
  72. overflow: auto;
  73. padding: 0px 0 50px;
  74. "
  75. v-if="isBlock == 1 || isBlock == 6"
  76. >
  77. <div
  78. style="background: #fff; height: 92%; width: 96%; margin: 10px auto"
  79. >
  80. <div
  81. style="color: #bfbfbf; padding: 15px 0 20px 25px; font-size: 20px"
  82. >
  83. 答题查看
  84. </div>
  85. <div class="answerBox" v-if="isBlock == 1 || isBlock == 6">
  86. <div class="memberBox" v-if="isBlock == 1">
  87. <div
  88. :class="{ pAnswer: item.is == 2 }"
  89. v-for="(item, index) in studentArray"
  90. @click="getOAnswer(item.answer, item.name)"
  91. :key="index"
  92. >
  93. {{ item.name }}
  94. </div>
  95. </div>
  96. <div class="memberBox" v-if="isBlock == 6">
  97. <div
  98. v-show="studentArray2.length > 0"
  99. :class="{ pAnswer: item.is == 2 }"
  100. v-for="(item, index) in studentArray2"
  101. :key="index"
  102. @click="whoAnswer(item, index)"
  103. >
  104. {{ item.name }}
  105. </div>
  106. <div v-if="studentArray2.length == 0">暂无学生</div>
  107. </div>
  108. <!-- <div style="color: #948bdc; padding-top: 15px" v-if="isBlock == 1">
  109. 共有四个选项,正在答题......
  110. </div>-->
  111. <div
  112. class="viewSta"
  113. @click="isBlock = 3"
  114. v-if="
  115. isBlock == 1 &&
  116. tools[steps].tools &&
  117. tools[steps].tools.indexOf(9) != -1
  118. "
  119. >
  120. 查看数据统计
  121. </div>
  122. <div
  123. class="viewSta"
  124. @click="isBlock = 14"
  125. v-else-if="
  126. isBlock == 1 &&
  127. tools[steps].tools &&
  128. tools[steps].tools.indexOf(27) != -1
  129. "
  130. >
  131. 查看数据统计
  132. </div>
  133. <span
  134. slot="footer"
  135. class="dialog-footer sztFooter"
  136. v-if="isBlock == 6"
  137. >
  138. <el-button type="primary" @click="selectSWork2(9)"
  139. >查看学生答题情况</el-button
  140. >
  141. <el-button type="primary" @click="isBlock = 0">结束</el-button>
  142. </span>
  143. </div>
  144. </div>
  145. </div>
  146. <div
  147. style="
  148. background: #d0d6e4;
  149. height: 92%;
  150. min-width: 40%;
  151. max-width: 40%;
  152. overflow: auto;
  153. padding: 0px 0 50px;
  154. "
  155. v-if="isBlock == 3"
  156. >
  157. <div
  158. style="
  159. background: #fff;
  160. width: 96%;
  161. margin: 10px auto;
  162. position: relative;
  163. "
  164. >
  165. <div class="close" @click="isBlock = 0">
  166. <img src="../../assets/icon/close.png" alt />
  167. </div>
  168. <div style="color: #bfbfbf; padding: 15px 0 20px 25px">数据统计</div>
  169. <div style="padding-left: 25px">
  170. 目前A选项
  171. <span class>{{ answerJson.A }}票</span>、B选项
  172. <span>{{ answerJson.B }}票</span>、C选项
  173. <span>{{ answerJson.C }}票</span>、D选项
  174. <span>{{ answerJson.D }}票</span>
  175. </div>
  176. <div class="szt">
  177. <AnswerData
  178. :problemJson="answerJson"
  179. :answer="answerA"
  180. :people="peopleA"
  181. ></AnswerData>
  182. </div>
  183. <span slot="footer" class="dialog-footer sztFooter">
  184. <!-- <el-button type="primary" @click="isBlock = 0">关闭</el-button> -->
  185. <el-button type="primary" @click="(isBlock = 1), (full = false)"
  186. >返回</el-button
  187. >
  188. </span>
  189. </div>
  190. </div>
  191. <div
  192. class="answerBox tools_box"
  193. v-if="isBlock == 2"
  194. style="padding: 10px 0 0 25px"
  195. >
  196. <div style="color: #d1d1d1; font-size: 24px">课堂实践</div>
  197. <div
  198. style="
  199. margin: 20px 0 20px 0;
  200. border-bottom: 4px solid #3e86f3;
  201. width: 75px;
  202. text-align: center;
  203. padding-bottom: 3px;
  204. "
  205. >
  206. 选择工具
  207. </div>
  208. <div
  209. style="
  210. display: flex;
  211. flex-direction: row;
  212. flex-wrap: wrap;
  213. width: 100%;
  214. justify-content: flex-start;
  215. align-items: center;
  216. "
  217. >
  218. <div
  219. v-if="tools[steps].tools && tools[steps].tools.indexOf(1) != -1"
  220. @click="(isBlock = 5), (toolCount = 1)"
  221. class="toolCss"
  222. >
  223. <div class="toolImg">
  224. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  225. <div>电子白板</div>
  226. </div>
  227. </div>
  228. <div
  229. v-if="tools[steps].tools && tools[steps].tools.indexOf(3) != -1"
  230. @click="(isBlock = 5), (toolCount = 3)"
  231. class="toolCss"
  232. >
  233. <div class="toolImg">
  234. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  235. <div>思维导图</div>
  236. </div>
  237. </div>
  238. <div
  239. v-if="tools[steps].tools && tools[steps].tools.indexOf(28) != -1"
  240. @click="(isBlock = 5), (toolCount = 28)"
  241. class="toolCss"
  242. >
  243. <div class="toolImg">
  244. <img src="../../assets/icon/thirdToolList/translation.png" alt />
  245. <div>翻译</div>
  246. </div>
  247. </div>
  248. <div
  249. v-if="tools[steps].tools && tools[steps].tools.indexOf(4) != -1"
  250. @click="(isBlock = 5), (toolCount = 4)"
  251. class="toolCss"
  252. >
  253. <div class="toolImg">
  254. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  255. <div>问卷调查</div>
  256. </div>
  257. </div>
  258. <div
  259. v-if="tools[steps].tools && tools[steps].tools.indexOf(6) != -1"
  260. @click="(isBlock = 5), (toolCount = 6)"
  261. class="toolCss"
  262. >
  263. <div class="toolImg">
  264. <img src="../../assets/icon/secondToolList/doc.png" alt />
  265. <div>协同文档</div>
  266. </div>
  267. </div>
  268. <div
  269. v-if="tools[steps].tools && tools[steps].tools.indexOf(7) != -1"
  270. @click="(isBlock = 5), (toolCount = 7)"
  271. class="toolCss"
  272. >
  273. <div class="toolImg">
  274. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt />
  275. <div>思维网格</div>
  276. </div>
  277. </div>
  278. <div
  279. v-if="tools[steps].tools && tools[steps].tools.indexOf(10) != -1"
  280. class="toolCss"
  281. >
  282. <div class="toolImg" @click="timeDialogVisible = true">
  283. <img src="../../assets/icon/thirdToolList/time.png" alt />
  284. <div>倒计时</div>
  285. </div>
  286. </div>
  287. </div>
  288. <div class="nextStepBox">
  289. <div class="nextStepOne" @click="(isBlock = 0), (full = false)">
  290. 关闭
  291. </div>
  292. </div>
  293. </div>
  294. <div
  295. class="answerBox tools_box"
  296. :class="{ fullStyle: full }"
  297. v-if="isBlock == 5"
  298. >
  299. <div style="height: 100%; width: 100%">
  300. <div v-if="toolCount == 1" class="tools_child_box">
  301. <div class="tools_title">
  302. <span>电子白板</span>
  303. <div>
  304. <img
  305. src="../../assets/full.png"
  306. class="full"
  307. @click="fullTools"
  308. />
  309. <img
  310. src="../../assets/close1.png"
  311. class="closeImg"
  312. @click="closeTools"
  313. />
  314. </div>
  315. </div>
  316. <iframe
  317. webkitallowfullscreen
  318. mozallowfullscreen
  319. allowfullscreen
  320. style="width: 100%; height: 100%; border: none"
  321. src="https://iwb.cocorobo.cn/"
  322. ></iframe>
  323. </div>
  324. <div v-if="toolCount == 3" class="tools_child_box">
  325. <div class="tools_title">
  326. <span>思维导图</span>
  327. <div>
  328. <img
  329. src="../../assets/full.png"
  330. class="full"
  331. @click="fullTools"
  332. />
  333. <img
  334. src="../../assets/close1.png"
  335. class="closeImg"
  336. @click="closeTools"
  337. />
  338. </div>
  339. </div>
  340. <iframe
  341. webkitallowfullscreen
  342. mozallowfullscreen
  343. allowfullscreen
  344. style="width: 100%; height: 100%; border: none"
  345. src="//cloud.cocorobo.cn/kityminder-editor/dist/index.html"
  346. ></iframe>
  347. </div>
  348. <div v-if="toolCount == 28" class="tools_child_box">
  349. <div class="tools_title">
  350. <span>翻译</span>
  351. <div>
  352. <img
  353. src="../../assets/full.png"
  354. class="full"
  355. @click="fullTools"
  356. />
  357. <img
  358. src="../../assets/close1.png"
  359. class="closeImg"
  360. @click="closeTools"
  361. />
  362. </div>
  363. </div>
  364. <iframe
  365. webkitallowfullscreen
  366. mozallowfullscreen
  367. allowfullscreen
  368. style="width: 100%; height: 100%; border: none"
  369. src="//dict.youdao.com/"
  370. ></iframe>
  371. </div>
  372. <div v-if="toolCount == 6" class="tools_child_box">
  373. <div class="tools_title">
  374. <span>协同文档</span>
  375. <div>
  376. <img
  377. src="../../assets/full.png"
  378. class="full"
  379. @click="fullTools"
  380. />
  381. <img
  382. src="../../assets/close1.png"
  383. class="closeImg"
  384. @click="closeTools"
  385. />
  386. </div>
  387. </div>
  388. <iframe
  389. webkitallowfullscreen
  390. mozallowfullscreen
  391. allowfullscreen
  392. style="width: 100%; height: 100%; border: none"
  393. src="https://cloud.cocorobo.cn/Office/Word/WordEditArea.htm"
  394. ></iframe>
  395. </div>
  396. <div v-if="toolCount == 7" class="tools_child_box">
  397. <div class="tools_title">
  398. <span>思维网格</span>
  399. <div>
  400. <img
  401. src="../../assets/full.png"
  402. class="full"
  403. @click="fullTools"
  404. />
  405. <img
  406. src="../../assets/close1.png"
  407. class="closeImg"
  408. @click="closeTools"
  409. />
  410. </div>
  411. </div>
  412. <iframe
  413. webkitallowfullscreen
  414. mozallowfullscreen
  415. allowfullscreen
  416. style="width: 100%; height: 100%; border: none"
  417. src="https://pbl.cocorobo.cn/pbl-teacher-table/dist/#/Grid"
  418. ></iframe>
  419. </div>
  420. <!-- <div class="nextStepBox">
  421. <div class="nextStepOne" @click="(isBlock = 2), (full = false)">
  422. 返回
  423. </div>
  424. </div> -->
  425. </div>
  426. </div>
  427. <div
  428. class="answerBox"
  429. style="
  430. width: 38.5%;
  431. max-width: 38.5%;
  432. overflow: auto;
  433. background: rgb(255, 255, 255);
  434. height: 91.5%;
  435. position: relative;
  436. margin: 10px 15px;
  437. "
  438. v-if="isBlock == 4"
  439. >
  440. <div
  441. style="
  442. color: #b7b7b7;
  443. border-left: 5px solid #a5b6e2;
  444. padding-left: 7px;
  445. height: 25px;
  446. line-height: 25px;
  447. "
  448. >
  449. 查看作业
  450. </div>
  451. <div class="workBox">
  452. <div class="works" v-for="(w, wIndex) in worksList" :key="wIndex">
  453. <div class="workImg">
  454. <img
  455. v-if="
  456. tools[steps].tools && tools[steps].tools.indexOf(29) != -1
  457. "
  458. :src="require('../../assets/icon/stuVedio.png')"
  459. @click="lookvideo(w.upload, w.sName, w.rate, w.id)"
  460. alt
  461. />
  462. <img
  463. v-else
  464. :src="w.upload ? w.upload : mr"
  465. @click="previewImg(w.upload ? w.upload : mr)"
  466. alt
  467. />
  468. </div>
  469. <div class="workDetail">
  470. <div class="workLeft">
  471. <div class="workTx">
  472. <img src="../../assets/avatar.png" alt />
  473. </div>
  474. <div class="workName">{{ w.sName }}</div>
  475. </div>
  476. <div class="workRight">{{ w.time }}</div>
  477. <div class="workBtn" @click="rateD(w.sName, w.rate, w.id)">
  478. 评价
  479. </div>
  480. </div>
  481. </div>
  482. </div>
  483. <div class="returnButton" @click="(isBlock = 0), (full = false)">
  484. 关闭
  485. </div>
  486. </div>
  487. <div
  488. class="answerBox"
  489. v-if="isBlock == 7"
  490. style="
  491. padding: 0 0 0 25px;
  492. width: 38.5%;
  493. max-width: 38.5%;
  494. overflow: auto;
  495. background: rgb(255, 255, 255);
  496. height: 91.5%;
  497. position: relative;
  498. margin: 10px 15px;
  499. "
  500. >
  501. <div style="color: #bfbfbf; padding: 15px 0 15px 0; font-size: 20px">
  502. 课堂评价
  503. </div>
  504. <div>
  505. <div class="score_box">
  506. <span>自我评价</span>
  507. <el-rate v-model="rateList.ca"></el-rate>
  508. </div>
  509. <div class="score_box">
  510. <span>他人评价</span>
  511. <el-rate v-model="rateList.sia"></el-rate>
  512. </div>
  513. </div>
  514. <div>
  515. <div style="padding-bottom: 15px; sont-size: 14px">备注</div>
  516. <div class="bz">
  517. <el-input
  518. type="textarea"
  519. placeholder="请输入备注…"
  520. :rows="6"
  521. resize="none"
  522. v-model="rateList.content"
  523. ></el-input>
  524. </div>
  525. </div>
  526. <span
  527. slot="footer"
  528. class="dialog-footer sztFooter"
  529. style="
  530. padding: 0 0 30px 0px;
  531. position: absolute;
  532. right: 20px;
  533. bottom: 0;
  534. "
  535. >
  536. <el-button type="primary" @click="isBlock = 4">返回</el-button>
  537. </span>
  538. </div>
  539. <div
  540. class="answerBox tools_box"
  541. v-if="isBlock == 8"
  542. style="padding: 10px 0 0 25px"
  543. >
  544. <div style="color: #d1d1d1; font-size: 24px">课堂实践</div>
  545. <div
  546. style="
  547. margin: 20px 0 20px 0;
  548. border-bottom: 4px solid #3e86f3;
  549. width: 75px;
  550. text-align: center;
  551. padding-bottom: 3px;
  552. "
  553. >
  554. 选择附件
  555. </div>
  556. <div
  557. style="
  558. display: flex;
  559. flex-direction: row;
  560. flex-wrap: wrap;
  561. width: 100%;
  562. justify-content: flex-start;
  563. align-items: center;
  564. "
  565. >
  566. <div
  567. v-if="tools[steps].file && tools[steps].file.length"
  568. class="fileBox"
  569. >
  570. <div
  571. class="fileListCss"
  572. v-for="(v, vIndex) in videoList"
  573. :key="vIndex"
  574. >
  575. <div class="fileCss" @click="playVideo(v.src, vIndex)">
  576. <img src="../../assets/uploadMp4.png" alt />
  577. </div>
  578. <div>{{ v.name }}</div>
  579. </div>
  580. <div
  581. class="fileListCss"
  582. v-for="(v, vIndex) in videoList2"
  583. :key="vIndex"
  584. >
  585. <div class="fileCss" @click="playVideo2(v.src, vIndex)">
  586. <img src="../../assets/uploadMp4.png" alt />
  587. </div>
  588. <div>{{ v.name }}</div>
  589. </div>
  590. <div
  591. class="fileListCss"
  592. v-for="(f, fIndex) in fileList"
  593. :key="fIndex"
  594. >
  595. <div class="fileCss" @click="openFile(f.src)">
  596. <img src="../../assets/file.png" alt />
  597. </div>
  598. <div>{{ f.name }}</div>
  599. </div>
  600. </div>
  601. </div>
  602. <div class="nextStepBox">
  603. <div class="nextStepOne" @click="(isBlock = 0), (full = false)">
  604. 关闭
  605. </div>
  606. </div>
  607. </div>
  608. <!-- <div class="answerBox tools_box" :class="{ fullStyle: full }" v-if="isBlock == 9">
  609. <div style="height: 70%; width: 100%">
  610. <div class="wheel">
  611. <div class="workd_media" style="height: 100%">
  612. <video-player
  613. class="video-player vjs-custom-skin"
  614. :playsinline="true"
  615. :options="playerO[0]"
  616. @play="onPlayerPlay($event)"
  617. style="width: 90%; height: 100%; margin: 0 0 0 30px"
  618. ></video-player>
  619. </div>
  620. </div>
  621. <div class="nextStepBox" style="margin-top: 5%">
  622. <div class="nextStepOne" @click="isBlock = 8">返回</div>
  623. </div>
  624. </div>
  625. </div>-->
  626. <div
  627. class="answerBox tools_box"
  628. :class="{ fullStyle: full }"
  629. v-if="isBlock == 10"
  630. >
  631. <div style="height: 70%; width: 100%">
  632. <div
  633. class="wheel"
  634. style="height: 520px; width: 100%; margin: 0 0 20px 30px"
  635. >
  636. <iframe
  637. webkitallowfullscreen
  638. mozallowfullscreen
  639. allowfullscreen
  640. style="width: 100%; height: 100%; border: none"
  641. :src="pptImgUrl"
  642. ></iframe>
  643. </div>
  644. <div class="nextStepBox" style="margin-top: 5%">
  645. <div class="nextStepOne" @click="isBlock = 8">返回</div>
  646. </div>
  647. </div>
  648. </div>
  649. <div class="answerBox tools_box" v-if="isBlock == 11">
  650. <div style="height: 100%; width: 100%">
  651. <div class="wheel" style="height: 80%; width: 100%">
  652. <div
  653. class="memberBox"
  654. style="max-height: 100%"
  655. v-if="worksList.length"
  656. >
  657. <div
  658. v-for="(item, index) in worksList"
  659. :key="index"
  660. @click="getEv(item.upload, item.sName)"
  661. >
  662. {{ item.sName }}
  663. </div>
  664. </div>
  665. <div v-else>暂无学生评价</div>
  666. </div>
  667. <div class="nextStepBox" style="margin-top: 5%">
  668. <div class="nextStepOne" @click="(isBlock = 0), (full = false)">
  669. 关闭
  670. </div>
  671. </div>
  672. </div>
  673. </div>
  674. <div class="answerBox tools_box" v-if="isBlock == 12">
  675. <div style="height: 100%; width: 100%">
  676. <div class="wheel" style="height: 80%; width: 100%">
  677. <div style="height: 100%; overflow: auto">
  678. <div style="margin-bottom: 20px">{{ Sname }}</div>
  679. <div
  680. class="score_box"
  681. v-for="(ra, raIndex) in tools[steps].rateArray"
  682. :key="raIndex"
  683. >
  684. <span>{{ ra }}</span>
  685. <el-rate v-model="rate[raIndex]" disabled></el-rate>
  686. </div>
  687. </div>
  688. </div>
  689. <div class="nextStepBox" style="margin-top: 5%">
  690. <div class="nextStepOne" @click="isBlock = 11">返回</div>
  691. </div>
  692. </div>
  693. </div>
  694. <div class="answerBox tools_box" v-if="isBlock == 13">
  695. <div style="height: 100%; width: 100%">
  696. <div class="wheel" style="height: 80%; width: 100%">
  697. <div style="height: 100%; overflow: auto">
  698. <div style="margin-bottom: 20px">{{ Sname }}</div>
  699. <div
  700. v-if="
  701. tools[steps].tools && tools[steps].tools.indexOf(27) != -1
  702. "
  703. >
  704. <div
  705. v-for="(tk, tIndex) in tools[steps].choice"
  706. :key="tIndex"
  707. class="tkCss"
  708. >
  709. <div style="margin-right: 10px; font-size: 18px">
  710. {{ tIndex + 1 }}、
  711. </div>
  712. <el-select
  713. v-model="tkAnswer[tIndex]"
  714. placeholder="请选择答案"
  715. disabled
  716. >
  717. <el-option
  718. v-for="(tkA, tkAIndex) in tools[steps].tkAnswerBox"
  719. :key="tkAIndex"
  720. :label="tkA"
  721. :value="tkA"
  722. ></el-option>
  723. </el-select>
  724. <span
  725. v-if="tiankongAnswer.length"
  726. class="tiankongAnswer"
  727. :class="{
  728. tfalse: tiankongAnswer[tIndex] != tkAnswer[tIndex],
  729. }"
  730. >正确答案:{{ tiankongAnswer[tIndex] }}</span
  731. >
  732. </div>
  733. </div>
  734. <div
  735. v-if="tools[steps].tools && tools[steps].tools.indexOf(9) != -1"
  736. >
  737. <div class="choose_style">
  738. <span
  739. :class="tkAnswer.indexOf(1) != -1 ? 'isChoose' : ''"
  740. v-if="tools[steps].choice && tools[steps].choice > 0"
  741. >A</span
  742. >
  743. <span
  744. :class="tkAnswer.indexOf(2) != -1 ? 'isChoose' : ''"
  745. v-if="tools[steps].choice && tools[steps].choice > 1"
  746. >B</span
  747. >
  748. <span
  749. :class="tkAnswer.indexOf(3) != -1 ? 'isChoose' : ''"
  750. v-if="tools[steps].choice && tools[steps].choice > 2"
  751. >C</span
  752. >
  753. <span
  754. :class="tkAnswer.indexOf(4) != -1 ? 'isChoose' : ''"
  755. v-if="tools[steps].choice && tools[steps].choice > 3"
  756. >D</span
  757. >
  758. </div>
  759. </div>
  760. </div>
  761. </div>
  762. <div class="nextStepBox" style="margin-top: 5%">
  763. <div class="nextStepOne" @click="selectStudentByScoolPPt(1)">
  764. 返回
  765. </div>
  766. </div>
  767. </div>
  768. </div>
  769. <div class="answerBox tools_box" v-if="isBlock == 14">
  770. <div style="height: 100%; width: 100%">
  771. <div class="wheel" style="height: 90%; width: 100%">
  772. <div style="height: 100%; overflow: auto">
  773. <div class="szt">
  774. <AnswerData2
  775. :problemJson="tools[steps].choice"
  776. :answer="answerA"
  777. :people="worksList"
  778. ></AnswerData2>
  779. </div>
  780. <!-- <div
  781. v-for="(item, index) in worksList"
  782. :key="index"
  783. class="fill_box"
  784. >
  785. <span>{{ index + 1 }}、{{ item.sName }}</span>
  786. <span
  787. v-for="(item, index) in JSON.parse(item.upload)"
  788. :key="index"
  789. >{{ index + 1 }}、{{ item }}</span
  790. >
  791. </div> -->
  792. </div>
  793. </div>
  794. <div class="nextStepBox" style="margin-top: 10px">
  795. <div class="nextStepOne" @click="selectStudentByScoolPPt(1)">
  796. 返回
  797. </div>
  798. </div>
  799. </div>
  800. </div>
  801. <div class="answerBox tools_box" v-if="isBlock == 15">
  802. <div style="height: 100%; width: 100%">
  803. <div class="wheel" style="height: 80%; width: 100%">
  804. <div style="height: 100%; overflow: auto">
  805. <audio
  806. style="margin: 0 auto; display: block"
  807. :src="audioUrl"
  808. controls="controls"
  809. ref="audio"
  810. >
  811. Your browser does not support the audio element.
  812. </audio>
  813. </div>
  814. </div>
  815. <div class="nextStepBox" style="margin-top: 5%">
  816. <div class="nextStepOne" @click="isBlock = 8">返回</div>
  817. </div>
  818. </div>
  819. </div>
  820. <div
  821. class="answerBox tools_box"
  822. :class="{ fullStyle: full }"
  823. v-if="isBlock == 16"
  824. >
  825. <div style="height: 70%; width: 100%">
  826. <div class="wheel">
  827. <div style="margin-bottom: 20px">{{ Sname }}</div>
  828. <div>
  829. <video-player
  830. class="video-player vjs-custom-skin"
  831. :playsinline="true"
  832. :options="playerO[0]"
  833. @play="onPlayerPlay($event)"
  834. style="width: 90%; height: 100%; margin: 0 0 0 30px"
  835. ></video-player>
  836. </div>
  837. </div>
  838. <div class="nextStepBox" style="margin-top: 5%">
  839. <div class="nextStepOne" @click="rateD(Sname, rateR, rateid)">
  840. 评价
  841. </div>
  842. <div class="nextStepOne" @click="isBlock = 4">返回</div>
  843. </div>
  844. </div>
  845. </div>
  846. <div class="answerBox tools_box" v-if="isBlock == 17">
  847. <div style="height: 100%; width: 100%">
  848. <div class="wheel" style="height: 80%; width: 100%">
  849. <div
  850. class="memberBox"
  851. style="max-height: 100%"
  852. v-if="worksList.length"
  853. >
  854. <div
  855. v-for="(item, index) in worksList"
  856. :key="index"
  857. @click="getAu(item.upload, item.sName)"
  858. >
  859. {{ item.sName }}
  860. </div>
  861. </div>
  862. <div v-else>暂无学生提交</div>
  863. </div>
  864. <div class="nextStepBox" style="margin-top: 5%">
  865. <div class="nextStepOne" @click="(isBlock = 0), (full = false)">
  866. 关闭
  867. </div>
  868. </div>
  869. </div>
  870. </div>
  871. <div class="answerBox tools_box" v-if="isBlock == 18">
  872. <div style="height: 100%; width: 100%">
  873. <div class="wheel" style="height: 80%; width: 100%">
  874. <div style="height: 100%; overflow: auto">
  875. <div style="margin-bottom: 20px">{{ Sname }}</div>
  876. <audio
  877. style="margin: 0 auto; display: block"
  878. :src="LuAudioUrl"
  879. controls="controls"
  880. ref="audio"
  881. >
  882. Your browser does not support the audio element.
  883. </audio>
  884. </div>
  885. </div>
  886. <div class="nextStepBox" style="margin-top: 5%">
  887. <div class="nextStepOne" @click="isBlock = 17">返回</div>
  888. </div>
  889. </div>
  890. </div>
  891. <div class="answerBox tools_box" v-if="isBlock == 19">
  892. <div style="height: 100%; width: 100%">
  893. <div class="wheel" style="height: 80%; width: 100%">
  894. <div
  895. class="memberBox"
  896. style="max-height: 100%"
  897. v-if="worksList.length"
  898. >
  899. <div
  900. v-for="(item, index) in worksList"
  901. :key="index"
  902. @click="getAu(item.upload, item.sName, 2, item.rate, item.id)"
  903. >
  904. {{ item.sName }}
  905. </div>
  906. </div>
  907. <div v-else>暂无学生提交</div>
  908. </div>
  909. <div class="nextStepBox" style="margin-top: 5%">
  910. <div class="nextStepOne" @click="(isBlock = 6), (full = false)">
  911. 返回
  912. </div>
  913. </div>
  914. </div>
  915. </div>
  916. <div class="answerBox tools_box" v-if="isBlock == 20">
  917. <div style="height: 100%; width: 100%">
  918. <div class="wheel" style="height: 80%; width: 100%">
  919. <div style="height: 100%; overflow: auto">
  920. <div style="margin-bottom: 20px">{{ Sname }}</div>
  921. <audio
  922. style="margin: 0 auto; display: block"
  923. :src="LuAudioUrl"
  924. controls="controls"
  925. ref="audio"
  926. >
  927. Your browser does not support the audio element.
  928. </audio>
  929. <el-button type="primary" @click="rateD(Sname, rateR, rateid)"
  930. >评价</el-button
  931. >
  932. </div>
  933. </div>
  934. <div class="nextStepBox" style="margin-top: 5%">
  935. <div class="nextStepOne" @click="isBlock = 19">返回</div>
  936. </div>
  937. </div>
  938. </div>
  939. </div>
  940. <div class="blackBottomB">
  941. <div style="display: flex">
  942. <div
  943. class="blackButton"
  944. @click="selectStudentByScoolPPt(1)"
  945. v-if="
  946. (tools[steps].tools && tools[steps].tools.indexOf(9) != -1) ||
  947. (tools[steps].tools && tools[steps].tools.indexOf(27) != -1)
  948. "
  949. >
  950. 查看学生答题情况
  951. </div>
  952. <div
  953. class="blackButton"
  954. @click="lookTool"
  955. v-if="
  956. (tools[steps].tools && tools[steps].tools.indexOf(1) != -1) ||
  957. (tools[steps].tools && tools[steps].tools.indexOf(3) != -1) ||
  958. (tools[steps].tools && tools[steps].tools.indexOf(6) != -1) ||
  959. (tools[steps].tools && tools[steps].tools.indexOf(7) != -1) ||
  960. (tools[steps].tools && tools[steps].tools.indexOf(10) != -1) ||
  961. (tools[steps].tools && tools[steps].tools.indexOf(13) != -1)
  962. "
  963. >
  964. 查看工具
  965. </div>
  966. <div
  967. class="blackButton"
  968. @click="selectStudentByScoolPPt(2)"
  969. v-if="tools[steps].tools && tools[steps].tools.indexOf(12) != -1"
  970. >
  971. 选择学生回答
  972. </div>
  973. <div
  974. class="blackButton"
  975. @click="selectSWork2(4)"
  976. v-if="
  977. (tools[steps].tools && tools[steps].tools.indexOf(1) != -1) ||
  978. (tools[steps].tools && tools[steps].tools.indexOf(3) != -1) ||
  979. (tools[steps].tools && tools[steps].tools.indexOf(6) != -1) ||
  980. (tools[steps].tools && tools[steps].tools.indexOf(7) != -1) ||
  981. (tools[steps].tools && tools[steps].tools.indexOf(10) != -1) ||
  982. (tools[steps].tools && tools[steps].tools.indexOf(16) != -1) ||
  983. (tools[steps].tools && tools[steps].tools.indexOf(29) != -1) ||
  984. (tools[steps].tools && tools[steps].tools.indexOf(13) != -1)
  985. "
  986. >
  987. 查看作业
  988. </div>
  989. <div
  990. class="blackButton"
  991. @click="selectSWork2(6)"
  992. v-if="tools[steps].tools && tools[steps].tools.indexOf(14) != -1"
  993. >
  994. 查看评价
  995. </div>
  996. <div
  997. class="blackButton"
  998. @click="selectSWork2(8)"
  999. v-if="tools[steps].tools && tools[steps].tools.indexOf(30) != -1"
  1000. >
  1001. 查看作业
  1002. </div>
  1003. <!-- <div
  1004. class="blackButton"
  1005. @click="selectFile"
  1006. v-if="tools[steps].file && tools[steps].file.length"
  1007. >查看附件</div>-->
  1008. </div>
  1009. </div>
  1010. <el-dialog
  1011. title="选择答题"
  1012. :visible.sync="dialogVisible"
  1013. :append-to-body="true"
  1014. width="500px"
  1015. :before-close="handleClose"
  1016. class="dialog_diy"
  1017. >
  1018. <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
  1019. 是否让“{{ answerStudent.name }}”同学进行单独答题?
  1020. </div>
  1021. <div
  1022. style="
  1023. width: 200px;
  1024. background: #4d8ae0;
  1025. height: 35px;
  1026. margin: 0 auto;
  1027. text-align: center;
  1028. line-height: 35px;
  1029. color: #fff;
  1030. border-radius: 5px;
  1031. cursor: pointer;
  1032. "
  1033. @click="pick"
  1034. >
  1035. 确定
  1036. </div>
  1037. </el-dialog>
  1038. <el-dialog
  1039. :visible.sync="dialogVisible1"
  1040. :append-to-body="true"
  1041. width="500px"
  1042. :before-close="handleClose"
  1043. class="dialog_diy"
  1044. >
  1045. <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
  1046. 正在开发中!
  1047. </div>
  1048. <div
  1049. style="
  1050. width: 200px;
  1051. background: #4d8ae0;
  1052. height: 35px;
  1053. margin: 0 auto;
  1054. text-align: center;
  1055. line-height: 35px;
  1056. color: #fff;
  1057. border-radius: 5px;
  1058. cursor: pointer;
  1059. "
  1060. @click="dialogVisible1 = false"
  1061. >
  1062. 确定
  1063. </div>
  1064. </el-dialog>
  1065. <el-dialog
  1066. :visible.sync="dialogVisible2"
  1067. :append-to-body="true"
  1068. width="500px"
  1069. :before-close="handleClose"
  1070. class="dialog_diy"
  1071. >
  1072. <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
  1073. 课程结束后才有报告!
  1074. </div>
  1075. <div
  1076. style="
  1077. width: 200px;
  1078. background: #4d8ae0;
  1079. height: 35px;
  1080. margin: 0 auto;
  1081. text-align: center;
  1082. line-height: 35px;
  1083. color: #fff;
  1084. border-radius: 5px;
  1085. cursor: pointer;
  1086. "
  1087. @click="dialogVisible2 = false"
  1088. >
  1089. 确定
  1090. </div>
  1091. </el-dialog>
  1092. <el-dialog
  1093. title="倒计时"
  1094. :visible.sync="timeDialogVisible"
  1095. :append-to-body="true"
  1096. width="800px"
  1097. :before-close="handleClose"
  1098. class="dialog_diy"
  1099. >
  1100. <div>
  1101. <Time v-if="timeDialogVisible"></Time>
  1102. </div>
  1103. <div slot="footer">
  1104. <el-button @click="timeDialogVisible = false">关 闭</el-button>
  1105. </div>
  1106. </el-dialog>
  1107. <el-dialog
  1108. title="评价"
  1109. :visible.sync="rateDialogVisible"
  1110. :append-to-body="true"
  1111. width="500px"
  1112. :before-close="handleClose"
  1113. class="dialog_diy"
  1114. >
  1115. <div>
  1116. <div class="rateD_box">
  1117. <span>姓名:</span>
  1118. <span>{{ Sname }}</span>
  1119. </div>
  1120. <div class="rateD_box">
  1121. <span>评价:</span>
  1122. <el-rate v-model="workRate" :allow-half="false"></el-rate>
  1123. </div>
  1124. </div>
  1125. <div slot="footer">
  1126. <el-button type="primary" @click="rateC">确 定</el-button>
  1127. <el-button @click="rateDialogVisible = false">关 闭</el-button>
  1128. </div>
  1129. </el-dialog>
  1130. <ImgDraw :drawShow="drawShow" @closeDraw="closeDraw" :bg="bg"></ImgDraw>
  1131. <img id="img1" ref="img1" hidden="hidden" />
  1132. </div>
  1133. </template>
  1134. <script>
  1135. import "../../common/aws-sdk-2.235.1.min";
  1136. import EditorBar from "../../components/tools/wangEnduit";
  1137. import AnswerData from "./components/answerData";
  1138. import AnswerData2 from "./components/answerData2";
  1139. import pdf from "./components/pdf";
  1140. import ImgDraw from "./components/imgDraw/imgDraw";
  1141. import Time from "../tools/time.vue";
  1142. export default {
  1143. components: { EditorBar, AnswerData, AnswerData2, pdf, ImgDraw, Time },
  1144. data() {
  1145. return {
  1146. pdfUrl: "",
  1147. // "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%281%291661829428281.pdf",
  1148. pptImgUrl: "",
  1149. isLoading: false,
  1150. full: false,
  1151. drawShow: false,
  1152. bg: null,
  1153. formLabelWidth: "100px",
  1154. userid: this.$route.query.userid,
  1155. cid: this.$route.query.cid,
  1156. oid: this.$route.query.oid,
  1157. mr: require("../../assets/icon/kc1.png"),
  1158. timu: [],
  1159. // a: false,
  1160. // b: false,
  1161. // c: false,
  1162. steps: 0,
  1163. isBlock: 0,
  1164. timeDialogVisible: false,
  1165. dialogVisible: false,
  1166. dialogVisible1: false,
  1167. dialogVisible2: false,
  1168. rateDialogVisible: false,
  1169. toolCount: 0,
  1170. answerBox: "",
  1171. answer: [
  1172. { name: "A.1568" },
  1173. { name: "B.720" },
  1174. { name: "C.1728" },
  1175. { name: "D.480" },
  1176. ],
  1177. studentArray: [],
  1178. studentArray2: [],
  1179. askCount: 0,
  1180. answerJson: {
  1181. A: 0,
  1182. B: 0,
  1183. C: 0,
  1184. D: 0,
  1185. },
  1186. answerA: [],
  1187. peopleA: [],
  1188. answerStudent: "",
  1189. // {
  1190. // file: [
  1191. // {
  1192. // name: "音频1.MP3",
  1193. // src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E6%9F%B3%E8%BD%BB%E9%A2%82%20-%20%E6%BA%AF%EF%BC%88%E9%92%A2%E7%90%B4%E7%89%88%EF%BC%891661673251415.mp3",
  1194. // },
  1195. // ],
  1196. // }
  1197. tools: [],
  1198. // {},
  1199. // "",
  1200. // {
  1201. // file: [
  1202. // {
  1203. // name: "视频1.mp4",
  1204. // src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%AA%92%E4%BD%9311661413782505.mp4",
  1205. // },
  1206. // ],
  1207. // },
  1208. // "",
  1209. // { tools: [9], choice: 3, answer: [2, 3] },
  1210. // { tools: [9], choice: 3, answer: [2] },
  1211. // { tools: [9], choice: 3, answer: [3] },
  1212. // { tools: [9], choice: 3, answer: [1] },
  1213. // { tools: [9], choice: 3, answer: [2] },
  1214. // { tools: [12] },
  1215. // {
  1216. // tools: [27],
  1217. // answer: [
  1218. // "Time",
  1219. // "Weather",
  1220. // "Activities before the festival",
  1221. // "Activities during the festival",
  1222. // "Food",
  1223. // "Reason",
  1224. // "Feelings",
  1225. // ],
  1226. // choice: 7,
  1227. // tkAnswerBox: [
  1228. // "Feelings",
  1229. // "Weather",
  1230. // "Activities before the festival",
  1231. // "Origin",
  1232. // "Food",
  1233. // "Time",
  1234. // "Activities during the festival",
  1235. // "Reason",
  1236. // ],
  1237. // },
  1238. // {
  1239. // file: [
  1240. // {
  1241. // name: "视频2.mp4",
  1242. // src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%AA%92%E4%BD%9321661413797366.mp4",
  1243. // },
  1244. // ],
  1245. // },
  1246. // { tools: [9] },
  1247. // { tools: [3] },
  1248. // { tools: [16] },
  1249. // {
  1250. // tools: [14],
  1251. // rateArray: [
  1252. // "聚焦主题",
  1253. // "有开头结尾",
  1254. // "语言正确,流畅",
  1255. // "书写规范,美观",
  1256. // ],
  1257. // },
  1258. // "",
  1259. // "",
  1260. // { tools: [29] },
  1261. // "",
  1262. // "",
  1263. handle: {page: 1, type: 0, userid: '', isPlay: 0},
  1264. //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 Blockly
  1265. howTools: 0,
  1266. worksDetail: [],
  1267. worksList: [],
  1268. toolsList: [],
  1269. isNext: false,
  1270. rateList: [],
  1271. videoList: [],
  1272. videoList2: [], //音频
  1273. fileList: [],
  1274. playerOptions: {
  1275. playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
  1276. autoplay: false, //如果true,浏览器准备好时开始回放。
  1277. muted: false, // 默认情况下将会消除任何音频。
  1278. loop: false, // 导致视频一结束就重新开始。
  1279. preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
  1280. language: "zh-CN",
  1281. aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
  1282. fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
  1283. sources: [
  1284. {
  1285. type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 || "video/ogg"|| "video/webm"
  1286. src: "", //url地址require("../../assets/media/aaa.mp4")
  1287. },
  1288. ],
  1289. // poster: require("../../assets/tu31.png"), //你的封面地址
  1290. // poster: dataRes.imgUrl, //你的封面地址
  1291. notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
  1292. controlBar: {
  1293. timeDivider: true, //当前时间和持续时间的分隔符
  1294. durationDisplay: true, //显示持续时间
  1295. remainingTimeDisplay: false, //是否显示剩余时间功能
  1296. fullscreenToggle: true, //全屏按钮
  1297. },
  1298. },
  1299. playerO: {},
  1300. videoindex: 0,
  1301. rate: [],
  1302. tkAnswerBox: [],
  1303. tkAnswer: [],
  1304. Sname: "",
  1305. audioUrl: "",
  1306. timerAnswer: null,
  1307. videoBlock: 0,
  1308. Vwidth: 0,
  1309. tiankongAnswer: [],
  1310. LuAudioUrl: "",
  1311. workRate: 0,
  1312. rateR: 0,
  1313. rateid: "",
  1314. };
  1315. },
  1316. methods: {
  1317. change(val) {
  1318. console.log(val);
  1319. },
  1320. goTo(path) {
  1321. this.$router.push(path);
  1322. },
  1323. tableRowClassName({ row, rowIndex }) {
  1324. if ((rowIndex + 1) % 2 === 0) {
  1325. return "even_row";
  1326. } else {
  1327. return "";
  1328. }
  1329. },
  1330. jump(cid) {
  1331. window.parent.postMessage({ cid: cid, type: "1" }, "*");
  1332. },
  1333. handleCurrentChange(val) {
  1334. // console.log(`当前页: ${val}`);
  1335. this.page = val;
  1336. },
  1337. init() {},
  1338. handleClose(done) {
  1339. done();
  1340. },
  1341. //uuid生成
  1342. guid() {
  1343. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
  1344. /[xy]/g,
  1345. function (c) {
  1346. var r = (Math.random() * 16) | 0,
  1347. v = c == "x" ? r : (r & 0x3) | 0x8;
  1348. return v.toString(16);
  1349. }
  1350. );
  1351. },
  1352. lookTool() {
  1353. if (
  1354. this.tools[this.steps].tools &&
  1355. this.tools[this.steps].tools.indexOf(1) != -1
  1356. ) {
  1357. this.toolCount = 1;
  1358. } else if (
  1359. this.tools[this.steps].tools &&
  1360. this.tools[this.steps].tools.indexOf(3) != -1
  1361. ) {
  1362. this.toolCount = 3;
  1363. } else if (
  1364. this.tools[this.steps].tools &&
  1365. this.tools[this.steps].tools.indexOf(28) != -1
  1366. ) {
  1367. this.toolCount = 28;
  1368. } else if (
  1369. this.tools[this.steps].tools &&
  1370. this.tools[this.steps].tools.indexOf(4) != -1
  1371. ) {
  1372. this.toolCount = 4;
  1373. } else if (
  1374. this.tools[this.steps].tools &&
  1375. this.tools[this.steps].tools.indexOf(6) != -1
  1376. ) {
  1377. this.toolCount = 6;
  1378. } else if (
  1379. this.tools[this.steps].tools &&
  1380. this.tools[this.steps].tools.indexOf(7) != -1
  1381. ) {
  1382. this.toolCount = 7;
  1383. } else if (
  1384. this.tools[this.steps].tools &&
  1385. this.tools[this.steps].tools.indexOf(10) != -1
  1386. ) {
  1387. this.timeDialogVisible = true;
  1388. }
  1389. this.isBlock = 5;
  1390. },
  1391. time() {
  1392. if (!this.now) {
  1393. this.now = new Date().getTime();
  1394. return true;
  1395. } else {
  1396. let time = new Date().getTime();
  1397. if (time - this.now > 3000) {
  1398. this.now = time;
  1399. return true;
  1400. } else {
  1401. return false;
  1402. }
  1403. }
  1404. },
  1405. randomNum(minNum, maxNum) {
  1406. switch (arguments.length) {
  1407. case 1:
  1408. return parseInt(Math.random() * minNum + 1, 10);
  1409. break;
  1410. case 2:
  1411. return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
  1412. break;
  1413. default:
  1414. return 0;
  1415. break;
  1416. }
  1417. },
  1418. addTool(t) {
  1419. if (t == 1) {
  1420. window.parent.postMessage({ tools: "1" }, "*");
  1421. } else if (t == 3) {
  1422. window.parent.postMessage({ tools: "3" }, "*");
  1423. } else if (t == 7) {
  1424. window.parent.postMessage({ tools: "7" }, "*");
  1425. }
  1426. },
  1427. checkStudentAnswer() {
  1428. // this.isBlock = 6;
  1429. for (var i = 0; i < this.studentArray2.length; i++) {
  1430. this.studentArray2[i].is = 1;
  1431. }
  1432. },
  1433. showMember() {
  1434. let _type = 0;
  1435. if (this.tools[this.steps].tools) {
  1436. if (
  1437. this.tools[this.steps].tools.indexOf(1) != -1 ||
  1438. this.tools[this.steps].tools.indexOf(3) != -1 ||
  1439. this.tools[this.steps].tools.indexOf(6) != -1 ||
  1440. this.tools[this.steps].tools.indexOf(7) != -1 ||
  1441. this.tools[this.steps].tools.indexOf(10) != -1 ||
  1442. this.tools[this.steps].tools.indexOf(16) != -1 ||
  1443. this.tools[this.steps].tools.indexOf(13) != -1
  1444. ) {
  1445. _type = 4;
  1446. } else if (this.tools[this.steps].tools.indexOf(9) != -1) {
  1447. _type = 1;
  1448. } else if (this.tools[this.steps].tools.indexOf(27) != -1) {
  1449. _type = 5;
  1450. } else if (this.tools[this.steps].tools.indexOf(14) != -1) {
  1451. _type = 6;
  1452. } else if (this.tools[this.steps].tools.indexOf(29) != -1) {
  1453. _type = 7;
  1454. } else if (
  1455. this.tools[this.steps].tools.indexOf(30) != -1 ||
  1456. this.tools[this.steps].tools.indexOf(12) != -1
  1457. ) {
  1458. _type = 8;
  1459. }
  1460. }
  1461. let params = {
  1462. uid: "",
  1463. cid: this.cid,
  1464. p: this.steps,
  1465. type: _type,
  1466. };
  1467. this.ajax
  1468. .get(this.$store.state.api + "selectSWork", params)
  1469. .then((res) => {
  1470. let _res = res.data[0];
  1471. let _this = this;
  1472. // this.isBlock = 1;
  1473. for (var i = 0; i < _this.studentArray.length; i++) {
  1474. for (var j = 0; j < _res.length; j++) {
  1475. if (_res[j].userid == _this.studentArray[i].id) {
  1476. _this.studentArray[i].is = 2;
  1477. _this.studentArray[i].answer = _res[j].upload;
  1478. }
  1479. }
  1480. }
  1481. if (
  1482. this.tools[this.steps].tools &&
  1483. this.tools[this.steps].tools.indexOf(9) != -1
  1484. ) {
  1485. this.answerJson = {
  1486. A: 0,
  1487. B: 0,
  1488. C: 0,
  1489. D: 0,
  1490. };
  1491. for (var i = 0; i < _res.length; i++) {
  1492. var a = JSON.parse(_res[i].upload);
  1493. if (a.indexOf(1) != -1) {
  1494. _this.answerJson.A++;
  1495. }
  1496. if (a.indexOf(2) != -1) {
  1497. _this.answerJson.B++;
  1498. }
  1499. if (a.indexOf(3) != -1) {
  1500. _this.answerJson.C++;
  1501. }
  1502. if (a.indexOf(4) != -1) {
  1503. _this.answerJson.D++;
  1504. }
  1505. }
  1506. this.answerA = this.tools[this.steps].answer;
  1507. this.peopleA = _res;
  1508. }
  1509. if (
  1510. this.tools[this.steps].tools &&
  1511. this.tools[this.steps].tools.indexOf(27) != -1
  1512. ) {
  1513. this.worksList = [];
  1514. for (var i = 0; i < _res.length; i++) {
  1515. this.worksList.push({
  1516. upload: _res[i].upload,
  1517. id: _res[i].id,
  1518. sName: _res[i].username,
  1519. rate: _res[i].rate,
  1520. time: _res[i].time,
  1521. });
  1522. }
  1523. this.answerA = this.tools[this.steps].answer;
  1524. }
  1525. })
  1526. .catch((err) => {
  1527. // this.$message.error("查询失败");
  1528. console.error(err);
  1529. });
  1530. },
  1531. getOAnswer(answer, name) {
  1532. if (!answer) {
  1533. return;
  1534. }
  1535. this.tkAnswer = JSON.parse(answer);
  1536. this.Sname = name;
  1537. if (this.tools[this.steps].answer) {
  1538. this.tiankongAnswer = this.tools[this.steps].answer;
  1539. }
  1540. this.isBlock = 13;
  1541. },
  1542. whoAnswer(item, index) {
  1543. for (var i = 0; i < this.studentArray2.length; i++) {
  1544. this.studentArray2[i].is = 1;
  1545. }
  1546. this.studentArray2[index].is = 2;
  1547. this.answerStudent = item;
  1548. this.dialogVisible = true;
  1549. },
  1550. pick() {
  1551. this.handle.type = 2;
  1552. this.handle.userid = this.answerStudent.id;
  1553. let params = [
  1554. {
  1555. h: JSON.stringify(this.handle),
  1556. cid: this.cid,
  1557. },
  1558. ];
  1559. this.ajax
  1560. .post(this.$store.state.api + "updatePptPage", params)
  1561. .then((res) => {
  1562. this.answerStudent = "";
  1563. this.dialogVisible = false;
  1564. let mindinfo = this.setInfo(
  1565. this.cid,
  1566. "us.mindNetwork",
  1567. this.handle,
  1568. "update",
  1569. this.userid
  1570. );
  1571. this.updateSocket(mindinfo)
  1572. })
  1573. .catch((err) => {
  1574. console.error(err);
  1575. });
  1576. },
  1577. getWidth(total) {
  1578. this.Vwidth = total;
  1579. },
  1580. getPage(page) {
  1581. console.log(page);
  1582. this.handle.page = page;
  1583. // let params = [
  1584. // {
  1585. // page: JSON.stringify(this.handle),
  1586. // id: this.cid,
  1587. // },
  1588. // ];
  1589. // this.ajax
  1590. // .post(this.$store.state.api + "updatePptPage", params)
  1591. // .then((res) => {
  1592. this.steps = page - 1;
  1593. this.isBlock = 0;
  1594. if (
  1595. this.tools[this.steps].file &&
  1596. this.tools[this.steps].file.length
  1597. ) {
  1598. this.selectFile();
  1599. } else {
  1600. this.videoBlock = 0;
  1601. }
  1602. this.playerH({ type: 0, isPlay: 0, userid: "" });
  1603. // })
  1604. // .catch((err) => {
  1605. // console.error(err);
  1606. // });
  1607. },
  1608. getData() {
  1609. let params = {
  1610. id: this.cid,
  1611. };
  1612. this.ajax
  1613. .get(this.$store.state.api + "getRealTimeClassById", params)
  1614. .then((r) => {
  1615. let res = r.data[0][0];
  1616. this.pdfUrl = res.url;
  1617. this.tools = JSON.parse(res.content);
  1618. })
  1619. .catch((err) => {
  1620. // this.$message.error("查询失败");
  1621. console.error(err);
  1622. });
  1623. },
  1624. selectStudentByScoolPPt(type) {
  1625. let params = {
  1626. oid: this.oid,
  1627. cid: this.cid,
  1628. };
  1629. this.ajax
  1630. .get(this.$store.state.api + "selectStudentByScoolPPt", params)
  1631. .then((res) => {
  1632. if (res.data[0].length > 0) {
  1633. this.studentArray = [];
  1634. this.studentArray2 = [];
  1635. for (var i = 0; i < res.data[0].length; i++) {
  1636. this.studentArray.push({
  1637. id: res.data[0][i].userid,
  1638. name: res.data[0][i].name,
  1639. is: 1,
  1640. });
  1641. this.studentArray2.push({
  1642. id: res.data[0][i].userid,
  1643. name: res.data[0][i].name,
  1644. is: 1,
  1645. });
  1646. }
  1647. }
  1648. if (this.timerAnswer) {
  1649. clearInterval(this.timerAnswer);
  1650. this.timerAnswer;
  1651. }
  1652. if (type == 1) {
  1653. this.showMember();
  1654. this.timerAnswer = setInterval(() => {
  1655. this.showMember();
  1656. }, 5000);
  1657. this.isBlock = 1;
  1658. } else if (type == 2) {
  1659. this.checkStudentAnswer();
  1660. this.timerAnswer = setInterval(() => {
  1661. this.checkStudentAnswer();
  1662. }, 5000);
  1663. this.isBlock = 6;
  1664. }
  1665. })
  1666. .catch((err) => {
  1667. // this.$message.error("查询失败");
  1668. console.error(err);
  1669. });
  1670. },
  1671. selectSWork2(type) {
  1672. this.full = false;
  1673. let _type = type;
  1674. if (this.timerAnswer) {
  1675. clearInterval(this.timerAnswer);
  1676. this.timerAnswer = null;
  1677. }
  1678. this.selectSWork(_type);
  1679. this.timerAnswer = setInterval(() => {
  1680. this.selectSWork(_type);
  1681. }, 5000);
  1682. if (_type == 4) {
  1683. this.isBlock = 4;
  1684. } else if (_type == 8) {
  1685. this.isBlock = 17;
  1686. } else if (_type == 9) {
  1687. this.isBlock = 19;
  1688. } else {
  1689. this.isBlock = 11;
  1690. }
  1691. },
  1692. selectSWork(type) {
  1693. let _type = 0;
  1694. if (this.tools[this.steps].tools) {
  1695. if (
  1696. this.tools[this.steps].tools.indexOf(1) != -1 ||
  1697. this.tools[this.steps].tools.indexOf(3) != -1 ||
  1698. this.tools[this.steps].tools.indexOf(6) != -1 ||
  1699. this.tools[this.steps].tools.indexOf(7) != -1 ||
  1700. this.tools[this.steps].tools.indexOf(10) != -1 ||
  1701. this.tools[this.steps].tools.indexOf(16) != -1 ||
  1702. this.tools[this.steps].tools.indexOf(13) != -1
  1703. ) {
  1704. _type = 4;
  1705. } else if (this.tools[this.steps].tools.indexOf(9) != -1) {
  1706. _type = 1;
  1707. } else if (this.tools[this.steps].tools.indexOf(27) != -1) {
  1708. _type = 5;
  1709. } else if (this.tools[this.steps].tools.indexOf(14) != -1) {
  1710. _type = 6;
  1711. } else if (this.tools[this.steps].tools.indexOf(29) != -1) {
  1712. _type = 7;
  1713. } else if (
  1714. this.tools[this.steps].tools.indexOf(30) != -1 ||
  1715. this.tools[this.steps].tools.indexOf(12) != -1
  1716. ) {
  1717. _type = 8;
  1718. }
  1719. }
  1720. this.worksList = [];
  1721. let params = {
  1722. uid: "",
  1723. cid: this.cid,
  1724. p: this.steps,
  1725. type: _type,
  1726. };
  1727. this.ajax
  1728. .get(this.$store.state.api + "selectSWork", params)
  1729. .then((res) => {
  1730. this.worksDetail = res.data[0];
  1731. for (var i = 0; i < this.worksDetail.length; i++) {
  1732. this.worksList.push({
  1733. upload: this.worksDetail[i].upload,
  1734. id: this.worksDetail[i].id,
  1735. sName: this.worksDetail[i].username,
  1736. rate: this.worksDetail[i].rate,
  1737. time: this.worksDetail[i].time,
  1738. });
  1739. }
  1740. })
  1741. .catch((err) => {
  1742. // this.$message.error("查询失败");
  1743. console.error(err);
  1744. });
  1745. },
  1746. getEv(rate, name) {
  1747. this.rate = JSON.parse(rate);
  1748. this.Sname = name;
  1749. this.isBlock = 12;
  1750. },
  1751. getAu(rate, name, type, rateC, id) {
  1752. this.LuAudioUrl = rate;
  1753. this.Sname = name;
  1754. if (type == 2) {
  1755. this.rateR = rateC;
  1756. this.rateid = id;
  1757. this.isBlock = 20;
  1758. } else {
  1759. this.isBlock = 18;
  1760. }
  1761. },
  1762. selectFile() {
  1763. this.fileList = [];
  1764. this.videoList = [];
  1765. this.videoList2 = [];
  1766. var a = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  1767. var b = this.tools[this.steps].file;
  1768. for (var i = 0; i < b.length; i++) {
  1769. if (
  1770. a.indexOf(
  1771. b[i].src
  1772. .split(".")
  1773. [b[i].src.split(".").length - 1].toLocaleUpperCase()
  1774. ) != -1
  1775. ) {
  1776. this.fileList.push(b[i]);
  1777. } else if (
  1778. b[i].src
  1779. .split(".")
  1780. [b[i].src.split(".").length - 1].toLocaleUpperCase() == "MP3"
  1781. ) {
  1782. this.videoList2.push(b[i]);
  1783. } else {
  1784. this.videoList.push(b[i]);
  1785. }
  1786. }
  1787. if (this.videoList.length) {
  1788. this.playVideo();
  1789. } else {
  1790. this.isBlock = 8;
  1791. }
  1792. },
  1793. openFile(u) {
  1794. this.pptImgUrl = "https://view.officeapps.live.com/op/view.aspx?src=" + encodeURIComponent(u);
  1795. this.isBlock = 10;
  1796. },
  1797. playVideo() {
  1798. // u, i
  1799. var d = JSON.parse(JSON.stringify(this.playerOptions));
  1800. // d.sources[0].src = u;
  1801. d.sources[0].src = this.videoList[0].src;
  1802. this.playerO[0] = d;
  1803. // this.isBlock = 9;
  1804. this.videoBlock = 9;
  1805. },
  1806. playVideo2(u, i) {
  1807. this.audioUrl = u;
  1808. this.isBlock = 15;
  1809. },
  1810. switchVideo(media) {
  1811. this.playerO = {};
  1812. this.playerOptions.poster = "";
  1813. this.playerOptions.sources[0].src = media;
  1814. this.playerO = this.playerOptions;
  1815. },
  1816. playerH(handle) {
  1817. this.handle.type = handle.type;
  1818. this.handle.isPlay = handle.isPlay;
  1819. let params = [
  1820. {
  1821. h: JSON.stringify(this.handle),
  1822. cid: this.cid,
  1823. },
  1824. ];
  1825. this.ajax
  1826. .post(this.$store.state.api + "updatePptPage", params)
  1827. .then((res) => {
  1828. let mindinfo = this.setInfo(
  1829. this.cid,
  1830. "us.mindNetwork",
  1831. this.handle,
  1832. "update",
  1833. this.userid
  1834. );
  1835. this.updateSocket(mindinfo)
  1836. })
  1837. .catch((err) => {
  1838. console.error(err);
  1839. });
  1840. },
  1841. onPlayerPlay() {},
  1842. onPlayerPlayZ(player) {
  1843. console.log(player);
  1844. this.playerH({ type: 1, isPlay: 1 });
  1845. }, // 暂停回调
  1846. onPlayerPause(player) {
  1847. console.log(player);
  1848. this.playerH({ type: 1, isPlay: 2 });
  1849. },
  1850. // 视频播放结束回调
  1851. onPlayerEnded(player) {
  1852. //console.log(player)
  1853. },
  1854. // 已开始播放回调
  1855. onPlayerPlaying(player) {
  1856. console.log(player);
  1857. },
  1858. // 当前播放位置发生变化时触发。
  1859. onPlayerTimeupdate(player) {
  1860. console.log(player);
  1861. },
  1862. previewImg(url) {
  1863. // this.$hevueImgPreview(url);
  1864. // this.$hevueImgPreview(url);
  1865. this.drawShow = true;
  1866. this.bg = url;
  1867. // this.setAvatarBase64(url, (base64) => {
  1868. // this.$nextTick(() => {
  1869. // this.drawShow = true;
  1870. // this.bg = base64;
  1871. // });
  1872. // });
  1873. },
  1874. lookvideo(u, sname, rate, id) {
  1875. var d = JSON.parse(JSON.stringify(this.playerOptions));
  1876. d.sources[0].src = u;
  1877. this.playerO[0] = d;
  1878. this.isBlock = 16;
  1879. this.Sname = sname;
  1880. this.rateR = rate;
  1881. this.rateid = id;
  1882. },
  1883. closeDraw() {
  1884. this.bg = null;
  1885. this.drawShow = false;
  1886. },
  1887. fullTools() {
  1888. this.full = !this.full;
  1889. },
  1890. closeTools() {
  1891. this.full = false;
  1892. this.isBlock = 0;
  1893. },
  1894. // 将网络图片转换成base64格式
  1895. transBase64FromImage(image) {
  1896. let canvas = document.createElement("canvas");
  1897. canvas.width = image.width;
  1898. canvas.height = image.height;
  1899. let ctx = canvas.getContext("2d");
  1900. ctx.drawImage(image, 0, 0, image.width, image.height);
  1901. // 可选其他值 image/jpeg
  1902. return canvas.toDataURL("image/jpeg");
  1903. },
  1904. // 设置需要展示的图片 base64
  1905. setAvatarBase64(src, callback) {
  1906. let _this = this;
  1907. let image = new Image();
  1908. // let image = this.$refs.img1;
  1909. // 处理缓存
  1910. // image.src = src + "?v=" + Math.random();
  1911. image.src = src;
  1912. // 支持跨域图片
  1913. // image.crossOrigin = "anonymous";
  1914. // crossorigin="anonymous"
  1915. image.onload = function () {
  1916. let base64 = _this.transBase64FromImage(image);
  1917. callback && callback(base64);
  1918. // console.log(base64);
  1919. // return base64
  1920. };
  1921. },
  1922. rateD(name, rate, id) {
  1923. this.workRate = rate;
  1924. this.rateid = id;
  1925. this.Sname = name;
  1926. this.rateDialogVisible = true;
  1927. },
  1928. rateC() {
  1929. let params = [
  1930. {
  1931. r: this.workRate,
  1932. id: this.rateid,
  1933. },
  1934. ];
  1935. this.ajax
  1936. .post(this.$store.state.api + "updateStudentWork", params)
  1937. .then((res) => {
  1938. this.rateR = this.workRate;
  1939. this.workRate = 0;
  1940. this.rateid = "";
  1941. this.$message.success("评价成功");
  1942. this.rateDialogVisible = false;
  1943. this.selectSWork();
  1944. })
  1945. .catch((err) => {
  1946. console.error(err);
  1947. });
  1948. },
  1949. setInfo(id, navid, content, type, userid) {
  1950. var _data = {
  1951. "us.realTimeClass": [
  1952. {
  1953. sendId: userid, //发送人id
  1954. receiveId: id, //文件id
  1955. type: navid, //消息类型
  1956. messageInfo: {
  1957. id: id, //操作ID
  1958. type: type, //类型
  1959. content: content, //内容
  1960. docId: id, //文档id
  1961. pageId: top.US.pageId, //当前页面id
  1962. },
  1963. },
  1964. ],
  1965. };
  1966. return _data;
  1967. },
  1968. updateSocket(mindinfo) {
  1969. let params = [
  1970. {
  1971. type: "send",
  1972. mindinfo: encodeURIComponent(
  1973. encodeURIComponent(JSON.stringify(mindinfo))
  1974. ),
  1975. post: 1,
  1976. },
  1977. ];
  1978. this.ajax
  1979. .post(this.$store.state.socket, params)
  1980. .then((res) => {
  1981. console.log(res);
  1982. })
  1983. .catch((err) => {
  1984. console.error(err);
  1985. });
  1986. },
  1987. },
  1988. created() {
  1989. this.getData();
  1990. },
  1991. };
  1992. </script>
  1993. <style scoped>
  1994. .dialog_diy >>> .el-dialog__header {
  1995. background: #3d67bc !important;
  1996. padding: 15px 20px;
  1997. }
  1998. .dialog_diy >>> .el-dialog__title {
  1999. color: #fff;
  2000. }
  2001. .dialog_diy >>> .el-dialog__headerbtn {
  2002. top: 9px;
  2003. }
  2004. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  2005. color: #fff;
  2006. }
  2007. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  2008. color: #fff;
  2009. }
  2010. .blackBottom {
  2011. background: rgb(0, 0, 0);
  2012. height: 45px;
  2013. width: 100%;
  2014. }
  2015. .imgMiddle {
  2016. width: 100%;
  2017. /* height: calc(100% - 45px); */
  2018. height: calc(100%);
  2019. position: relative;
  2020. /* max-height: 920px; */
  2021. }
  2022. .imgMiddle > img,
  2023. .imghalf > img,
  2024. .szt > img,
  2025. .logoLive > img,
  2026. .close > img {
  2027. width: 100%;
  2028. height: 100%;
  2029. /* max-height: 920px; */
  2030. }
  2031. .blackBottomB {
  2032. /* position: sticky;
  2033. bottom: 0px;
  2034. left: 0px;
  2035. display: flex;
  2036. flex-direction: row;
  2037. flex-wrap: wrap;
  2038. align-content: center;
  2039. justify-content: space-between;
  2040. align-items: center;
  2041. background: rgb(0, 0, 0);
  2042. height: 45px;
  2043. width: 100%; */
  2044. position: sticky;
  2045. bottom: 20px;
  2046. left: 0px;
  2047. display: flex;
  2048. width: fit-content;
  2049. }
  2050. .blackBottomB > div:nth-child(1) {
  2051. margin-left: 10px !important;
  2052. }
  2053. .blackButton {
  2054. color: #fff;
  2055. background: #00579a;
  2056. /* width: 100px; */
  2057. height: 30px;
  2058. line-height: 30px;
  2059. text-align: center;
  2060. margin: 0 5px;
  2061. border-radius: 5px;
  2062. font-size: 15px;
  2063. cursor: pointer;
  2064. padding: 0 10px;
  2065. }
  2066. .isNoOther {
  2067. width: 100%;
  2068. /* height: 100%; */
  2069. height: calc(100% - 45px);
  2070. display: flex;
  2071. }
  2072. .imghalf {
  2073. width: 60% !important;
  2074. /* height: calc(100% - 45px); */
  2075. height: calc(100%);
  2076. /* max-height: 920px; */
  2077. }
  2078. .answerBox {
  2079. padding-left: 25px;
  2080. padding: 25px;
  2081. box-sizing: border-box;
  2082. height: calc(100% - 60px);
  2083. /* max-height: 800px;
  2084. overflow: auto; */
  2085. }
  2086. .answerTimuBox {
  2087. display: flex;
  2088. flex-direction: column;
  2089. flex-wrap: nowrap;
  2090. align-items: flex-start;
  2091. justify-content: flex-start;
  2092. padding-bottom: 15px;
  2093. }
  2094. .memberBox {
  2095. display: flex;
  2096. flex-direction: row;
  2097. flex-wrap: wrap;
  2098. align-items: center;
  2099. max-height: 80%;
  2100. overflow: auto;
  2101. }
  2102. .memberBox > div {
  2103. background: rgb(79 213 163);
  2104. width: 120px;
  2105. color: #fff;
  2106. height: 40px;
  2107. text-align: center;
  2108. line-height: 40px;
  2109. border-radius: 5px;
  2110. margin: 0 15px 15px 0;
  2111. cursor: pointer;
  2112. white-space: nowrap;
  2113. overflow: hidden;
  2114. text-overflow: ellipsis;
  2115. padding: 0 10px;
  2116. box-sizing: border-box;
  2117. }
  2118. .memberBox .pAnswer {
  2119. background: rgb(0 115 72);
  2120. }
  2121. .viewSta {
  2122. background: rgb(97, 97, 97);
  2123. color: #bebebe;
  2124. margin: 20px auto 20px;
  2125. width: 300px;
  2126. height: 40px;
  2127. text-align: center;
  2128. line-height: 40px;
  2129. border-radius: 5px;
  2130. cursor: pointer;
  2131. }
  2132. .szt {
  2133. width: 100%;
  2134. margin: 20px auto;
  2135. }
  2136. .sztFooter {
  2137. padding: 20px 10px 50px 0;
  2138. display: flex;
  2139. flex-direction: row;
  2140. flex-wrap: nowrap;
  2141. justify-content: flex-end;
  2142. align-items: center;
  2143. }
  2144. .toolList {
  2145. display: flex;
  2146. flex-direction: row;
  2147. flex-wrap: wrap;
  2148. justify-content: flex-start;
  2149. align-items: center;
  2150. }
  2151. .tools {
  2152. display: flex;
  2153. flex-direction: column;
  2154. align-items: center;
  2155. margin-right: 20px;
  2156. }
  2157. .tools > div:nth-child(1) {
  2158. width: 60px;
  2159. }
  2160. .tools > div:nth-child(1) > img,
  2161. .workImg > img,
  2162. .workTx > img {
  2163. width: 100%;
  2164. height: 100%;
  2165. /* object-fit: cover; */
  2166. object-fit: contain;
  2167. cursor: pointer;
  2168. margin: 0;
  2169. }
  2170. .nextStepBox {
  2171. display: flex;
  2172. justify-content: center;
  2173. margin-top: 10px;
  2174. }
  2175. .nextStepOne {
  2176. background: #6b92c9;
  2177. color: #fff;
  2178. width: 110px;
  2179. text-align: center;
  2180. height: 35px;
  2181. line-height: 35px;
  2182. font-size: 14px;
  2183. border-radius: 5px;
  2184. cursor: pointer;
  2185. }
  2186. .nextStepOne,
  2187. .nextStepOne {
  2188. margin-left: 10px;
  2189. }
  2190. .logoLive {
  2191. width: 35px;
  2192. }
  2193. .anserBoxCss {
  2194. box-sizing: border-box;
  2195. padding: 20px 0;
  2196. }
  2197. .anserBoxCss >>> .el-radio__label {
  2198. font-size: 18px;
  2199. }
  2200. .anserBoxCss >>> .el-radio__inner {
  2201. border-radius: 0px !important;
  2202. }
  2203. .choose_style {
  2204. display: flex;
  2205. justify-content: center;
  2206. align-items: center;
  2207. width: 100%;
  2208. margin: 10px 0 30px;
  2209. }
  2210. .choose_style span {
  2211. background: #f8f9ff;
  2212. color: #677fff;
  2213. border: 1px solid #95b5ff;
  2214. padding: 15px 20px;
  2215. font-size: 25px;
  2216. border-radius: 18px;
  2217. cursor: pointer;
  2218. }
  2219. .choose_style span + span {
  2220. margin-left: 25px;
  2221. }
  2222. .choose_style .active {
  2223. color: #fff;
  2224. background: #5e78fa;
  2225. }
  2226. .close {
  2227. position: absolute;
  2228. right: 10px;
  2229. top: 10px;
  2230. width: 20px;
  2231. cursor: pointer;
  2232. }
  2233. .workBox {
  2234. margin-top: 20px;
  2235. display: flex;
  2236. flex-direction: row;
  2237. flex-wrap: wrap;
  2238. width: 100%;
  2239. height: 80%;
  2240. overflow: auto;
  2241. }
  2242. .works {
  2243. width: 31%;
  2244. border: 1px solid #ececec;
  2245. /* height: 160px; */
  2246. margin: 0 10px 10px 0;
  2247. /* cursor: pointer; */
  2248. min-width: 180px;
  2249. border-radius: 3px;
  2250. overflow: hidden;
  2251. height: fit-content;
  2252. }
  2253. .workImg {
  2254. width: 100%;
  2255. height: 117px;
  2256. }
  2257. .workDetail {
  2258. display: flex;
  2259. flex-direction: row;
  2260. flex-wrap: nowrap;
  2261. align-items: flex-start;
  2262. justify-content: space-between;
  2263. padding: 8px 0 0;
  2264. flex-direction: column;
  2265. }
  2266. .workLeft {
  2267. display: flex;
  2268. flex-direction: row;
  2269. flex-wrap: nowrap;
  2270. align-items: center;
  2271. width: 100%;
  2272. padding: 0px 5px;
  2273. box-sizing: border-box;
  2274. }
  2275. .workTx {
  2276. width: 25px;
  2277. }
  2278. .workName {
  2279. font-size: 14px;
  2280. padding-left: 13px;
  2281. }
  2282. .workRight {
  2283. font-size: 14px;
  2284. color: #ccc;
  2285. margin: 0 0 3px;
  2286. padding: 0 5px;
  2287. width: 100%;
  2288. box-sizing: border-box;
  2289. }
  2290. .workBtn {
  2291. width: 100%;
  2292. background: rgb(110 145 203);
  2293. color: #fff;
  2294. cursor: pointer;
  2295. text-align: center;
  2296. padding: 5px 0;
  2297. }
  2298. .returnButton {
  2299. position: absolute;
  2300. bottom: 20px;
  2301. width: 230px;
  2302. background: #616161;
  2303. left: 35%;
  2304. color: #ababab;
  2305. text-align: center;
  2306. border-radius: 5px;
  2307. height: 30px;
  2308. font-size: 14px;
  2309. line-height: 30px;
  2310. cursor: pointer;
  2311. }
  2312. .tools_title {
  2313. background: #000;
  2314. position: absolute;
  2315. width: 100%;
  2316. top: 0;
  2317. left: 0;
  2318. display: flex;
  2319. align-items: center;
  2320. height: 40px;
  2321. justify-content: space-between;
  2322. padding: 0 15px;
  2323. box-sizing: border-box;
  2324. }
  2325. .tools_title span {
  2326. color: #fff;
  2327. }
  2328. .tools_title div {
  2329. display: flex;
  2330. align-items: center;
  2331. }
  2332. .full,
  2333. .closeImg {
  2334. height: 22px;
  2335. cursor: pointer;
  2336. }
  2337. .tools_title img,
  2338. img {
  2339. margin-left: 10px;
  2340. }
  2341. .tools_box {
  2342. width: 38.5%;
  2343. max-width: 38.5%;
  2344. overflow: auto;
  2345. background: rgb(255, 255, 255);
  2346. height: 91.5%;
  2347. position: relative;
  2348. margin: 10px 15px;
  2349. }
  2350. .tools_child_box {
  2351. width: 100%;
  2352. height: calc(90% - 40px);
  2353. padding-top: 40px;
  2354. }
  2355. .fullStyle {
  2356. width: 100% !important;
  2357. max-width: 100% !important;
  2358. }
  2359. .toolCss {
  2360. display: flex;
  2361. flex-direction: column;
  2362. flex-wrap: wrap;
  2363. width: 150px;
  2364. align-items: center;
  2365. text-align: center;
  2366. }
  2367. .toolImg {
  2368. width: 70px;
  2369. /* height: 70px; */
  2370. cursor: pointer;
  2371. }
  2372. .toolImg > img {
  2373. width: 100%;
  2374. height: 100%;
  2375. margin: 0 !important;
  2376. }
  2377. .toolImg > div {
  2378. font-size: 14px;
  2379. }
  2380. .score_box {
  2381. font-size: 14px;
  2382. }
  2383. .score_box >>> .el-rate {
  2384. margin: 10px 0 20px 0;
  2385. }
  2386. .score_box >>> .el-rate__icon {
  2387. font-size: 23px;
  2388. }
  2389. .bz >>> .el-textarea__inner {
  2390. width: 40%;
  2391. background: #f9f9f9;
  2392. border: 1px solid #afafaf;
  2393. border-radius: 0px;
  2394. }
  2395. .fileBox {
  2396. display: flex;
  2397. flex-direction: row;
  2398. flex-wrap: wrap;
  2399. align-items: center;
  2400. justify-content: flex-start;
  2401. align-content: center;
  2402. width: 100%;
  2403. }
  2404. .fileListCss {
  2405. display: flex;
  2406. flex-direction: column;
  2407. flex-wrap: nowrap;
  2408. align-items: center;
  2409. margin: 0 15px 15px 0;
  2410. }
  2411. .fileCss {
  2412. width: 70px;
  2413. height: 70px;
  2414. cursor: pointer;
  2415. margin: 0 0 10px 0;
  2416. }
  2417. .fileCss > img {
  2418. width: 100%;
  2419. height: 100%;
  2420. margin: 0;
  2421. }
  2422. .wheel {
  2423. width: 100%;
  2424. height: 100%;
  2425. }
  2426. .video-player >>> .video-js {
  2427. height: 100%;
  2428. }
  2429. .tkCss {
  2430. display: flex;
  2431. flex-direction: row;
  2432. align-items: center;
  2433. flex-wrap: nowrap;
  2434. margin-bottom: 15px;
  2435. }
  2436. .fill_box + .fill_box {
  2437. margin-top: 10px;
  2438. }
  2439. .fill_box span + span {
  2440. margin-left: 10px;
  2441. }
  2442. .choose_style {
  2443. display: flex;
  2444. justify-content: center;
  2445. align-items: center;
  2446. width: 100%;
  2447. margin: 10px 0 30px;
  2448. }
  2449. .choose_style span {
  2450. background: #f8f9ff;
  2451. color: #677fff;
  2452. border: 1px solid #95b5ff;
  2453. padding: 15px 20px;
  2454. font-size: 25px;
  2455. border-radius: 18px;
  2456. cursor: pointer;
  2457. }
  2458. .choose_style span + span {
  2459. margin-left: 25px;
  2460. }
  2461. .isChoose {
  2462. color: #fff !important;
  2463. background: #5e78fa !important;
  2464. }
  2465. .workd_media {
  2466. /* width: 1497.42px; */
  2467. /* width: auto; */
  2468. height: calc(100% - 100px);
  2469. position: absolute;
  2470. top: 0;
  2471. left: 50%;
  2472. transform: translateX(-50%);
  2473. }
  2474. .tiankongAnswer {
  2475. margin-left: 10px;
  2476. color: #1834c0;
  2477. }
  2478. .tfalse {
  2479. color: rgb(189, 30, 30) !important;
  2480. }
  2481. .rateD_box {
  2482. display: flex;
  2483. margin-bottom: 10px;
  2484. margin-left: 30px;
  2485. align-items: center;
  2486. }
  2487. .rateD_box span {
  2488. font-size: 18px;
  2489. }
  2490. .rateD_box span:nth-child(1) {
  2491. margin-right: 10px;
  2492. }
  2493. .rateD_box >>> .el-rate__icon {
  2494. font-size: 25px;
  2495. }
  2496. .rateD_box >>> .el-icon-star-off {
  2497. font-size: 22px;
  2498. }
  2499. </style>