works.vue 116 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116
  1. <template>
  2. <div class="pb_content" style="background:#fff;">
  3. <div class="pb_content_body">
  4. <div class="body_student">
  5. <div class="student_head">
  6. <div class="box_course">
  7. <div class="wheel">
  8. <img
  9. :src="
  10. studentMessage.headportrait != null
  11. ? studentMessage.headportrait
  12. : tx
  13. "
  14. alt=""
  15. />
  16. </div>
  17. <div class="right_box">
  18. <div class="right_box_title">{{ studentMessage.name }}</div>
  19. <div class="people">
  20. <div>
  21. <span>班级:</span><span>{{ studentMessage.cname }}</span>
  22. </div>
  23. <div style="margin-left: 50px">
  24. <span>所属学校:</span><span>{{ studentMessage.sname }}</span>
  25. </div>
  26. </div>
  27. <div>
  28. <span>手机号码:</span
  29. ><span>{{ studentMessage.phonenumber }}</span>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. <div class="student_body" v-if="!dialogVisible">
  35. <div class="student_table">
  36. <el-table
  37. ref="table"
  38. :data="tableData1"
  39. border
  40. :height="tableHeight"
  41. :fit="true"
  42. style="width: 100%"
  43. :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
  44. :row-class-name="tableRowClassName"
  45. >
  46. <el-table-column
  47. prop="title"
  48. label="项目"
  49. min-width="30"
  50. align="center"
  51. ></el-table-column>
  52. <el-table-column
  53. prop="uname"
  54. label="创建人"
  55. min-width="30"
  56. align="center"
  57. ></el-table-column>
  58. <el-table-column
  59. prop="time"
  60. label="时间"
  61. min-width="20"
  62. align="center"
  63. ></el-table-column>
  64. <el-table-column label="操作" min-width="30">
  65. <template slot-scope="scope">
  66. <el-button
  67. type="primary"
  68. size="small"
  69. @click="exportPdfSet(scope.row)"
  70. >查看作业</el-button
  71. >
  72. </template>
  73. </el-table-column>
  74. </el-table>
  75. </div>
  76. <div class="student_page" style="padding: 10px 0;">
  77. <el-pagination
  78. background
  79. layout="prev, pager, next"
  80. :page-size="10"
  81. :total="total"
  82. v-if="page"
  83. @current-change="handleCurrentChange"
  84. ></el-pagination>
  85. </div>
  86. </div>
  87. </div>
  88. <el-dialog
  89. :visible.sync="dialogVisible3"
  90. :append-to-body="true"
  91. v-loading="loading"
  92. :before-close="handleClose"
  93. width="100%"
  94. class="dialog_diy2 max_diy"
  95. :class="{ fullStyle: full }">
  96. <div slot="title" class="header-title">
  97. <div style="color: #fff">查看作业</div>
  98. <div style="position: absolute; top: 14px; right: 50px">
  99. <img src="../assets/full.png" style="height: 14px; cursor: pointer" alt="" @click="fullTools" />
  100. </div>
  101. </div>
  102. <div class="titBri">
  103. <div class="claInfo">
  104. <img
  105. src="https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/static/img/portal.b3cf7fa.png"
  106. alt=""
  107. />
  108. <span>{{ studentMessage.name }}</span>
  109. <span>{{ courseName }}</span>
  110. </div>
  111. <div>
  112. </div>
  113. </div>
  114. <div class="pageCon">
  115. <div class="rightBar">
  116. <el-col style="width: 100%" :span="12">
  117. <el-menu
  118. default-active="2"
  119. :default-openeds="['0']"
  120. active-text-color="#409EFF"
  121. class="el-menu-vertical-demo"
  122. >
  123. <el-submenu
  124. :index="i.id"
  125. v-for="i in dyList"
  126. :key="i.id"
  127. :collapse="false"
  128. @open="handleOpen"
  129. @close="handleCloseSub"
  130. >
  131. <template slot="title">
  132. <div class="eliP">
  133. {{ "第" + (i.id * 1 + 1) + "阶段" }}:{{ i.name }}
  134. </div>
  135. </template>
  136. <el-menu-item-group>
  137. <el-menu-item
  138. v-for="(k, kin) in i.taskList"
  139. :key="k.id"
  140. :index="i.id+'-'+k.id"
  141. @click="positT(k.id)"
  142. style="display: flex; align-items: center"
  143. >
  144. <div class="TitBti">
  145. 任务{{ kin + 1 }}
  146. </div>
  147. <div class="eliP">
  148. {{ k.name }}
  149. </div>
  150. </el-menu-item>
  151. </el-menu-item-group>
  152. </el-submenu>
  153. </el-menu>
  154. </el-col>
  155. </div>
  156. <div class="workCon">
  157. <div style="width: 100%;">
  158. <div
  159. v-for="i in workList"
  160. :key="i.id"
  161. v-if="isStage(i.taskList)"
  162. class="stageCon"
  163. >
  164. <div v-if="CState != 5" class="stageTit">阶段{{ i.id + 1 }}:{{ i.name }}</div>
  165. <div
  166. v-for="(k, kIndex) in i.taskList"
  167. :key="k.task + 'a'"
  168. style="margin-bottom: 15px"
  169. v-if="isTask(k.toolEList)"
  170. >
  171. <div
  172. style="
  173. width: 100%;
  174. display: flex;
  175. justify-content: space-between;
  176. margin-bottom: 10px;
  177. "
  178. :id="k.stage + '-' + k.task"
  179. >
  180. <div class="taskTitInd">
  181. <span class="TitBti">任务{{ k.task + 1 }}</span>
  182. <span>{{ k.taskTit }}</span>
  183. </div>
  184. <div></div>
  185. </div>
  186. <div v-if="k.taskDetail" class="taskBri">
  187. <div v-html="k.taskDetail"></div>
  188. </div>
  189. <div
  190. v-for="(l, lind) in k.toolEList"
  191. :key="lind + 'l'"
  192. class="toolEListCon"
  193. >
  194. <div
  195. style="position: relative;"
  196. v-if="l.content && l.content.length"
  197. >
  198. <div class="JSCo" v-if="l.score">
  199. <div>评分:{{ JSON.parse(l.score).wScore }}</div>
  200. <div class="JSCoTxt">
  201. <el-tooltip
  202. class="item"
  203. effect="dark"
  204. :content="JSON.parse(l.score).detail"
  205. placement="top"
  206. >
  207. <div>
  208. {{ JSON.parse(l.score).detail }}
  209. </div>
  210. </el-tooltip>
  211. </div>
  212. </div>
  213. <div v-if="l.tool[0] == 15">
  214. <div class="toolBlk">
  215. <img
  216. class="toolImg"
  217. src="../assets/icon/thirdToolList/answer.png"
  218. alt=""
  219. />
  220. <div class="toolTit">
  221. <div>工具{{ lind + 1 }}:问答工具</div>
  222. <div>提问:{{ l.content[0][0].answerTitle }}</div>
  223. </div>
  224. </div>
  225. <div class="answerTxt">
  226. 回答:{{ l.content[0][0].answer }}
  227. </div>
  228. </div>
  229. <div v-if="l.tool[0] == 52">
  230. <div class="toolBlk">
  231. <img
  232. class="toolImg"
  233. src="../assets/icon/fourthToolList/text.png"
  234. alt=""
  235. />
  236. <div class="toolTit">
  237. <div>工具{{ lind + 1 }}:文档工具</div>
  238. <div>
  239. 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
  240. </div>
  241. </div>
  242. </div>
  243. <div class="answerTxt" v-html="l.content[0].text"></div>
  244. </div>
  245. <div v-if="l.tool[0] == 16 || l.tool[0] == 50">
  246. <div class="toolBlk">
  247. <img
  248. class="toolImg"
  249. v-if="l.tool[0] == 16"
  250. src="../assets/icon/thirdToolList/work.png"
  251. alt=""
  252. />
  253. <img
  254. class="toolImg"
  255. v-if="l.tool[0] == 50"
  256. src="../assets/icon/thirdToolList/plwork.png"
  257. alt=""
  258. />
  259. <div class="toolTit">
  260. <div>
  261. 工具{{ lind + 1 }}:{{
  262. l.tool[0] == 16 ? "作业提交" : "批量上传"
  263. }}
  264. </div>
  265. <div>
  266. 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
  267. </div>
  268. </div>
  269. </div>
  270. <div v-for="(i, codex) in l.content" :key="codex + 'co'">
  271. <div class="answerTxt" v-html="i"></div>
  272. </div>
  273. </div>
  274. <div
  275. v-if="l.tool[0] == 7 || l.tool[0] == 1 || l.tool[0] == 3"
  276. >
  277. <div class="toolBlk">
  278. <img
  279. class="toolImg"
  280. v-if="l.tool[0] == 1"
  281. src="../assets/icon/secondToolList/whiteBoard.png"
  282. alt=""
  283. />
  284. <img
  285. class="toolImg"
  286. v-if="l.tool[0] == 3"
  287. src="../assets/icon/secondToolList/mindMapping.png"
  288. alt=""
  289. />
  290. <img
  291. class="toolImg"
  292. v-if="l.tool[0] == 7"
  293. src="../assets/icon/secondToolList/mindNetwork.png"
  294. alt=""
  295. />
  296. <div class="toolTit">
  297. <div>
  298. 工具{{ lind + 1 }}:{{
  299. l.tool[0] == 1
  300. ? "电子白板"
  301. : l.tool[0] == 7
  302. ? "思维网格"
  303. : "思维导图"
  304. }}
  305. </div>
  306. <div>
  307. 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
  308. </div>
  309. </div>
  310. </div>
  311. <img
  312. @click.stop="previewImg(l.content[0])"
  313. style="max-width: 200px"
  314. :src="l.content[0]"
  315. alt=""
  316. />
  317. <div>{{ l.content[0] }}</div>
  318. </div>
  319. <div v-if="l.tool[0] == 48">
  320. <div class="toolBlk">
  321. <img
  322. class="toolImg"
  323. src="../assets/icon/fourthToolList/table.png"
  324. alt=""
  325. />
  326. <div class="toolTit">
  327. <div>工具{{ lind + 1 }}:表格</div>
  328. <div>
  329. 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
  330. </div>
  331. </div>
  332. </div>
  333. <el-form>
  334. <div class="cont" v-html="l.content[0].text"></div>
  335. </el-form>
  336. </div>
  337. <div v-if="l.tool[0] == 4">
  338. <div class="toolBlk">
  339. <img
  340. class="toolImg"
  341. src="../assets/icon/thirdToolList/ask.png"
  342. alt=""
  343. />
  344. <div class="toolTit">
  345. <div>工具{{ lind + 1 }}:问卷调查</div>
  346. <div>标题:{{ l.content[0][0].askJson.askTitle }}</div>
  347. </div>
  348. </div>
  349. <div
  350. style="margin-bottom: 5px"
  351. v-for="(i, index) in l.content[0][0].askJson.askJson"
  352. :key="index"
  353. >
  354. <div>题目:{{ i.askstitle }}</div>
  355. <el-radio-group
  356. v-if="!i.type"
  357. v-model="l.content[0][0].anwer[index]"
  358. >
  359. <el-radio
  360. v-for="(item2, checkIndex) in i.checkList"
  361. :key="checkIndex + 'b'"
  362. :label="checkIndex"
  363. disabled
  364. >
  365. {{ item2 }}
  366. </el-radio>
  367. </el-radio-group>
  368. <el-checkbox-group
  369. v-model="l.content[0][0].anwer[index]"
  370. v-else
  371. >
  372. <div class="radioBox">
  373. <el-checkbox
  374. v-for="(item2, checkIndex) in i.checkList"
  375. :key="checkIndex + 'c'"
  376. :label="checkIndex"
  377. disabled
  378. >
  379. {{ item2 }}
  380. </el-checkbox>
  381. </div>
  382. </el-checkbox-group>
  383. </div>
  384. </div>
  385. <div v-if="l.tool[0] == 45">
  386. <div class="toolBlk">
  387. <img
  388. class="toolImg"
  389. src="../assets/icon/thirdToolList/choose.png"
  390. alt=""
  391. />
  392. <div class="toolTit">
  393. <div>工具{{ lind + 1 }}:选择题</div>
  394. <div>
  395. 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
  396. </div>
  397. </div>
  398. </div>
  399. <div
  400. v-for="(i, index) in l.content[0].testJson"
  401. :key="index + 'm'"
  402. >
  403. <div>题目:{{ i.teststitle }}
  404. <span
  405. style="color: #868ce4"
  406. >答案:</span
  407. >
  408. <span
  409. v-if="
  410. JSON.stringify(l.content[0].radio[index]) ==
  411. JSON.stringify(i.answer)
  412. "
  413. style="color: #868ce4"
  414. >回答正确</span
  415. >
  416. <span v-else style="color: red">回答错误</span>
  417. </div>
  418. <div
  419. v-if="i.type == 1"
  420. style="display: flex; flex-direction: column"
  421. >
  422. <el-radio-group v-model="l.content[0].radio[index]">
  423. <div class="radioBox">
  424. <el-radio
  425. v-for="(item2, checkIndex) in i.checkList"
  426. :key="checkIndex + 'b'"
  427. :label="checkIndex"
  428. disabled
  429. :class="[
  430. i.answer == checkIndex
  431. ? 'redioStyle5'
  432. : 'redioStyle2'
  433. ]"
  434. >
  435. <div
  436. v-if="
  437. item2 && item2.imgType && item2.imgType == 1
  438. "
  439. >
  440. <div
  441. class="inImg"
  442. @click.stop="previewImg(item2.src)"
  443. >
  444. <img
  445. style="display: block"
  446. :src="item2.src"
  447. alt=""
  448. />
  449. </div>
  450. </div>
  451. <span v-else v-html="item2"></span>
  452. </el-radio>
  453. </div>
  454. </el-radio-group>
  455. </div>
  456. <div class="radioBox">
  457. <el-checkbox-group
  458. v-model="l.content[0].radio[index]"
  459. v-if="i.type == '2'"
  460. >
  461. <div class="radioBox">
  462. <el-checkbox
  463. v-for="(item2, checkIndex) in i.checkList"
  464. :key="checkIndex + 'c'"
  465. :label="checkIndex"
  466. disabled
  467. :class="[
  468. i.answer.includes(checkIndex)
  469. ? 'redioStyle3'
  470. : 'redioStyle4'
  471. ]"
  472. >
  473. <div style="display: flex">
  474. <div
  475. v-if="
  476. item2 && item2.imgType && item2.imgType == 1
  477. "
  478. >
  479. <div
  480. class="inImg"
  481. @click.stop="previewImg(item2.src)"
  482. >
  483. <img
  484. style="display: block"
  485. :src="item2.src"
  486. alt=""
  487. />
  488. </div>
  489. </div>
  490. <span v-else v-html="item2"></span>
  491. </div>
  492. </el-checkbox>
  493. </div>
  494. </el-checkbox-group>
  495. </div>
  496. </div>
  497. </div>
  498. <!-- 选择匹配 -->
  499. <div v-if="l.tool[0] == 41">
  500. <div class="toolBlk">
  501. <img
  502. class="toolImg"
  503. src="../assets/icon/thirdToolList/select.png"
  504. alt=""
  505. />
  506. <div class="toolTit">
  507. <div>工具{{ lind + 1 }}:选择匹配</div>
  508. <div>
  509. 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
  510. </div>
  511. </div>
  512. </div>
  513. <img
  514. @click.stop="previewImg(l.selectJson.url)"
  515. style="max-width: 200px"
  516. :src="l.selectJson.url"
  517. alt=""
  518. />
  519. <div>
  520. <span style="margin-right: 10px">选项:</span
  521. ><span
  522. style="margin-right: 10px"
  523. v-for="(item, itInd) in l.selectJson.select"
  524. :key="itInd"
  525. >{{ item }}</span
  526. >
  527. </div>
  528. <div style="margin: 10px 0;">
  529. <span style="margin-right: 10px">回答:</span>
  530. <div
  531. style="margin-right: 10px"
  532. v-for="(item, itInd) in l.content[0]"
  533. :key="itInd"
  534. >选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}
  535. <span
  536. v-if="
  537. l.selectJson.answer[itInd] ==
  538. l.content[0][itInd]
  539. "
  540. style="color: #868ce4"
  541. >回答正确</span
  542. >
  543. <span v-else style="color: red">回答错误</span>
  544. </div
  545. >
  546. </div>
  547. <div>
  548. <span style="margin-right: 10px">答案:</span>
  549. <span
  550. style="margin-right: 10px"
  551. v-for="(item, itInd) in l.selectJson.answer"
  552. :key="itInd"
  553. >选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}</span
  554. >
  555. </div>
  556. </div>
  557. <!-- 排序 -->
  558. <div v-if="l.tool[0] == 47">
  559. <div class="toolBlk">
  560. <img
  561. class="toolImg"
  562. src="../assets/icon/fourthToolList/conSentences.png"
  563. alt=""
  564. />
  565. <div class="toolTit">
  566. <div>工具{{ lind + 1 }}:排序</div>
  567. <div>
  568. 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
  569. </div>
  570. </div>
  571. </div>
  572. <div
  573. v-for="(i, index) in l.content[0]"
  574. :key="index"
  575. style="margin-bottom: 10px"
  576. >
  577. <div
  578. style="
  579. height: 20px;
  580. display: flex;
  581. align-items: center;
  582. flex-wrap: wrap;
  583. "
  584. >
  585. 题目:
  586. <div
  587. class="sortTool"
  588. v-for="(i, index) in i.addSentence"
  589. :key="index"
  590. >
  591. {{ i }}
  592. </div>
  593. <span
  594. v-if="
  595. JSON.stringify(i.chooseSenList) ==
  596. JSON.stringify(i.addSentence)
  597. "
  598. style="color: #868ce4"
  599. >回答正确</span
  600. >
  601. <span v-else style="color: red">回答错误</span>
  602. </div>
  603. <div
  604. style="
  605. margin: 10px 0;
  606. display: flex;
  607. align-items: center;
  608. flex-wrap: wrap;
  609. "
  610. >
  611. 回答:
  612. <div
  613. class="sortTool"
  614. v-for="(i, index) in i.chooseSenList"
  615. :key="index"
  616. >
  617. {{ i }}
  618. </div>
  619. </div>
  620. <div>
  621. 正确答案:
  622. <span style="margin: 0 5px">{{
  623. i.addSentence.join(",")
  624. }}</span>
  625. </div>
  626. </div>
  627. </div>
  628. </div>
  629. <!-- ai作业得分 -->
  630. <div
  631. class="taskSco"
  632. v-if="l.content && l.content.length && l.eList && CState == 5"
  633. >
  634. <div class="taskScoTit">
  635. <div>
  636. 作业得分:<span style="color: rgba(242, 161, 75, 1)">{{
  637. totalScore(l.rate)
  638. }}</span>
  639. </div>
  640. <div>作业提交时间:{{ workTime(k.toolEList) }}</div>
  641. </div>
  642. <!-- 作业评分 -->
  643. <div class="taskScoCon">
  644. <!-- 分数详情与素养 -->
  645. <div
  646. v-if="l.eList"
  647. class="taskScoConEList"
  648. >
  649. <div style="width: 49%; margin: 0 20px 10px 0">
  650. <div class="taskScoConTit">分数详情</div>
  651. <div style="display: flex;flex-wrap: wrap;">
  652. <div
  653. v-for="(wItem, ind) in l.eList"
  654. :key="ind + 's'"
  655. class="score_box"
  656. >
  657. <div class="RootImgBlock">
  658. <div>{{ wItem.detail }}</div>
  659. </div>
  660. <el-rate
  661. class="rate_size"
  662. disabled-void-color="#ccc"
  663. disabled
  664. style="width: 120px;display: flex;flex-shrink: 0;"
  665. v-model="l.rate[wItem.detail]"
  666. ></el-rate>
  667. </div>
  668. </div>
  669. </div>
  670. <div
  671. v-if="l.eList"
  672. style="width: 49%;display: flex;flex-direction: column;"
  673. >
  674. <div class="taskScoConTit">素养</div>
  675. <div class="WorkConSY">
  676. <div v-for="(wItem, ind) in l.eList" :key="ind + 's'">
  677. <div class="RootImgBlockSy">
  678. <span> {{ wItem.target }}</span>
  679. </div>
  680. </div>
  681. </div>
  682. </div>
  683. </div>
  684. <!-- 评语 -->
  685. <div
  686. style="
  687. width: 40%;
  688. display: flex;
  689. flex-direction: column;
  690. margin-left: 10px;
  691. "
  692. v-if="l.rate.content || l.rate.comment"
  693. >
  694. <div class="taskScoConTit">评语</div>
  695. <div class="WorkCon">
  696. {{ l.rate.content || l.rate.comment }}
  697. </div>
  698. </div>
  699. </div>
  700. </div>
  701. <!-- 阶段 -->
  702. <div
  703. class="taskSco"
  704. v-if="l.eList && CState != 5 && lind == k.toolEList.length - 1"
  705. >
  706. <div class="taskScoTit">
  707. <div>
  708. 作业得分:<span style="color: rgba(242, 161, 75, 1)">{{
  709. totalScore(k.toolEList[0].rate)
  710. }}</span>
  711. </div>
  712. <div>作业提交时间:{{ workTime(k.toolEList) }}</div>
  713. </div>
  714. <!-- 作业评分 -->
  715. <div class="taskScoCon">
  716. <!-- 分数详情与素养 -->
  717. <div
  718. v-if="l.eList"
  719. class="taskScoConEList"
  720. >
  721. <div style="width: 49%; margin: 0 20px 10px 0">
  722. <div class="taskScoConTit">分数详情</div>
  723. <div style="display: flex;flex-wrap: wrap;">
  724. <div
  725. v-for="(wItem, ind) in l.eList"
  726. :key="ind + 's'"
  727. class="score_box"
  728. >
  729. <div class="RootImgBlock">
  730. <div>{{ wItem.value }}</div>
  731. </div>
  732. <el-rate
  733. class="rate_size"
  734. disabled-void-color="#ccc"
  735. disabled
  736. style="width: 120px;display: flex;flex-shrink: 0;"
  737. v-model="k.toolEList[0].rate[wItem.value]"
  738. ></el-rate>
  739. </div>
  740. </div>
  741. </div>
  742. <div
  743. v-if="isSU(l.eList)"
  744. style="width: 49%;display: flex;flex-direction: column;"
  745. >
  746. <div class="taskScoConTit">素养</div>
  747. <div class="WorkConSY">
  748. <div v-for="(wItem, ind) in l.eList" :key="ind + 's'">
  749. <div class="RootImgBlockSy">
  750. <span v-if="wItem.target && wItem.target.length"> {{ wItem.target[wItem.target.length - 1] }}</span>
  751. <span v-else> {{ wItem.target }}</span>
  752. </div>
  753. </div>
  754. </div>
  755. </div>
  756. </div>
  757. <!-- 评语 -->
  758. <div
  759. style="
  760. width: 40%;
  761. display: flex;
  762. flex-direction: column;
  763. margin-left: 10px;
  764. "
  765. v-if="l.rate.content || l.rate.comment"
  766. >
  767. <div class="taskScoConTit">评语</div>
  768. <div class="WorkCon">
  769. {{ l.rate.content || l.rate.comment }}
  770. </div>
  771. </div>
  772. </div>
  773. </div>
  774. </div>
  775. </div>
  776. </div>
  777. </div>
  778. </div>
  779. </div>
  780. <!-- <div class="zyBoxC">
  781. <div class="courseTitle" v-if="allWorks.course">
  782. <div class="txName">
  783. <div class="tx"><img :src="tx" alt="" /></div>
  784. <div>{{ allWorks.sName }}</div>
  785. </div>
  786. <div>{{ allWorks.course }}</div>
  787. </div>
  788. <div class="cBox">
  789. <div class="pb_left">
  790. <el-tooltip class="cTitle" effect="light" :content="allWorks.course" placement="top">
  791. <div>{{ allWorks.course }}</div>
  792. </el-tooltip>
  793. <div class="ml">目录</div>
  794. <div class="cru_selectBox">
  795. <div v-for="(dy, dyIndex) in dyList2" :key="dyIndex">
  796. <div class="blue_box_one" @click="isOpen(dyIndex)">
  797. <div>第{{ dy.id + 1 }}阶段</div>
  798. <div>{{ dy.name }}</div>
  799. </div>
  800. <div class="twoChild" :class="{
  801. navActive: dy.isOpen,
  802. }">
  803. <div class="navChild" v-for="(nav, navIndex) in dy.taskList" :key="navIndex">
  804. <div class="navTask" @click="openTask(dy.id, nav.id)" :class="{
  805. openTaskActive:
  806. nav.id == taskCount &&
  807. dy.id + '-' + nav.id == navId &&
  808. dy.id == stageIndex,
  809. }">
  810. <div class="vedioNav" :class="{
  811. isClick:
  812. nav.id == taskCount &&
  813. dy.id + '-' + nav.id == navId &&
  814. dy.id == stageIndex,
  815. }" style="margin: 0">
  816. 任务{{ navIndex + 1 }}
  817. </div>
  818. <el-tooltip class="navTaskname item" effect="light" :content="nav.name" placement="top">
  819. <div>{{ nav.name }}</div>
  820. </el-tooltip>
  821. </div>
  822. </div>
  823. </div>
  824. </div>
  825. </div>
  826. </div>
  827. <div class="shuBox" v-if="worksDetail.length" :class="{ fullBox: full }">
  828. <div class="allBox" v-for="(sin, sIndex) in sInfo" :key="sIndex">
  829. <div class="zyBox" v-if="sin.course" :class="{ fullZyBox: full }">
  830. <div class="top">
  831. <div class="jdName">
  832. <div>
  833. {{
  834. "第" +
  835. (sin.stage + 1) +
  836. "阶段 " +
  837. dyList[sin.stage].name
  838. }}
  839. </div>
  840. <div class="taskName" style="width: 100%; justify-content: space-between">
  841. <div class="taskName" :id="sin.stage + '-' + sin.task" :scrollindex="sIndex">
  842. <div class="task">任务{{ sin.task + 1 }}</div>
  843. <div>
  844. {{ dyList[sin.stage].taskList[sin.task].name }}
  845. </div>
  846. </div>
  847. <div v-if="worksDetail[sIndex].wpptInfo.length > 0">
  848. <el-button type="primary" size="small" @click="openFile(worksDetail[sIndex].wpptInfo[0])">
  849. 查看文档</el-button>
  850. </div>
  851. </div>
  852. </div>
  853. </div>
  854. <div class="contentBox">
  855. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  856. v-if="worksDetail[sIndex].img.length > 0">
  857. <div class="bigImg" v-if="
  858. worksDetail[sIndex].img &&
  859. worksDetail[sIndex].img.length
  860. ">
  861. <img @click="
  862. previewImg(
  863. worksDetail[sIndex].img[
  864. worksDetail[sIndex].imgIndex
  865. ].src
  866. )
  867. " :src="
  868. worksDetail[sIndex].img[
  869. worksDetail[sIndex].imgIndex
  870. ].src
  871. " alt />
  872. </div>
  873. <div class="thumbnail" v-if="
  874. worksDetail[sIndex].img &&
  875. worksDetail[sIndex].img.length
  876. ">
  877. <div v-for="(item, index) in worksDetail[sIndex].img" :key="index" :class="
  878. worksDetail[sIndex].imgIndex == index
  879. ? 'isClick'
  880. : ''
  881. ">
  882. <img :src="item.src" alt @click="worksDetail[sIndex].imgIndex = index" />
  883. </div>
  884. </div>
  885. <div class="work_nopicture" v-else>暂无上传截图</div>
  886. </div>
  887. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  888. v-else-if="worksDetail[sIndex].answerInfo.length > 0">
  889. <div class="answerbox">
  890. <div style="min-width: 80px">问答标题</div>
  891. <div>
  892. {{ worksDetail[sIndex].answerInfo[0].answerTitle }}
  893. </div>
  894. </div>
  895. <div class="answerbox1">
  896. <div>学生回答</div>
  897. <div>
  898. {{ worksDetail[sIndex].answerInfo[0].answer }}
  899. </div>
  900. </div>
  901. </div>
  902. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  903. v-else-if="worksDetail[sIndex].askInfo.length > 0">
  904. <div>
  905. <div class="a_add_title" style="
  906. display: flex;
  907. flex-direction: row;
  908. align-items: center;
  909. justify-content: center;
  910. flex-wrap: wrap;
  911. ">
  912. <div style="margin-right: 20px; font-size: 20px">
  913. 标题:
  914. </div>
  915. <div style="font-size: 20px">
  916. {{ worksDetail[sIndex].askInfo[0].askTitle }}
  917. </div>
  918. </div>
  919. <div class="a_addBox">
  920. <div style="font-size: 16px; color: #c7c7c7">
  921. 内容
  922. </div>
  923. <div class="a_add_box" v-for="(item1, index1) in worksDetail[sIndex]
  924. .askInfo[0].askCount" :key="index1">
  925. <div class="a_add_head">
  926. <div style="display: flex">
  927. {{ index1 + 1 + "、" }}
  928. <div>
  929. 题目:{{
  930. worksDetail[sIndex].askInfo[0].askJson[
  931. index1
  932. ].askstitle
  933. }}
  934. </div>
  935. </div>
  936. </div>
  937. <div class="a_add_body">
  938. <div class="a_add_input">
  939. <el-radio-group v-model="
  940. worksDetail[sIndex].askInfo[0].radio[
  941. index1
  942. ]
  943. ">
  944. <el-radio v-for="(item2, checkIndex) in worksDetail[
  945. sIndex
  946. ].askInfo[0].askJson[index1].checkList" :key="checkIndex" :label="checkIndex"
  947. disabled class="redioStyle"><span v-html="item2"></span></el-radio>
  948. </el-radio-group>
  949. </div>
  950. </div>
  951. </div>
  952. </div>
  953. </div>
  954. </div>
  955. <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
  956. v-else-if="worksDetail[sIndex].wpptInfo.length > 0">
  957. <div style="height: 238px" @click="openFile(worksDetail[sIndex].wpptInfo[0])">
  958. <div @click="openFile(worksDetail[sIndex].wpptInfo[0])" style="
  959. width: 300px;
  960. height: 300px;
  961. position: absolute;
  962. z-index: 999;
  963. "></div>
  964. <pdf v-if="showPDF" :pdfUrl="worksDetail[sIndex].wpptInfo[0]"
  965. style="width: 100%; height: 520px; overflow: auto"></pdf>
  966. <iframe v-else :src="worksDetail[sIndex].wpptInfo[0]" frameborder="0" width="100%"
  967. height="100%"></iframe>
  968. </div>
  969. </div>
  970. <div class="right_top" v-show="worksDetail[sIndex].eList.length">
  971. <div class="ech">
  972. <img src="../assets/icon/pj/ech.png" alt="" />
  973. </div>
  974. <div class="data_body">
  975. <div style="width: 100%">
  976. <div class="echart charts_canvas" style="
  977. width: 100%;
  978. height: 100%;
  979. margin: 0 0 0 1rem;
  980. "></div>
  981. </div>
  982. </div>
  983. </div>
  984. </div>
  985. </div>
  986. <div class="right_score" :class="{ rightScoreFullBox: full }">
  987. <div class="sd_score" style="
  988. box-sizing: border-box;
  989. width: 100%;
  990. box-shadow: none;
  991. position: relative;
  992. ">
  993. <div class="worksTime">
  994. 作业提交时间:<span style="width: auto">{{ worksDetail[sIndex].time }}
  995. </span>
  996. </div>
  997. <div class="ech" style="margin-left: 23px">
  998. <img src="../assets/icon/pj/score.png" alt="" />
  999. </div>
  1000. <div style="height: 80%;overflow: auto;">
  1001. <div class="score_box" v-for="(item, index) in worksDetail[sIndex].eList" :key="index">
  1002. <el-tooltip class="item" effect="dark" :content="item.value" placement="top-start">
  1003. <span>{{ item.value }}</span>
  1004. </el-tooltip>
  1005. <el-rate class="rate_size" style="min-width: 120px"
  1006. v-model="worksDetail[sIndex].rateList[item.value]" disabled></el-rate>
  1007. </div>
  1008. </div>
  1009. </div>
  1010. </div>
  1011. </div>
  1012. </div>
  1013. </div>
  1014. </div> -->
  1015. </el-dialog>
  1016. <el-dialog title="查看选择题" :visible.sync="dialogVisible4" :append-to-body="true" width="800px"
  1017. :before-close="handleClose" class="dialog_diy">
  1018. <div>
  1019. <div class="a_add_title" style="
  1020. display: flex;
  1021. flex-direction: row;
  1022. align-items: center;
  1023. justify-content: center;
  1024. ">
  1025. <div style="font-size: 20px">{{ askJson.askTitle }}</div>
  1026. </div>
  1027. <div class="a_addBox">
  1028. <div style="font-size: 16px; color: #c7c7c7">内容</div>
  1029. <div class="a_add_box" v-for="(item, index) in askJson.askJson" :key="index">
  1030. <div class="a_add_head">
  1031. <div style="display: flex">
  1032. {{ index + 1 + "、" }}
  1033. <div>题目:{{ item.askstitle }}</div>
  1034. </div>
  1035. </div>
  1036. <div class="a_add_body">
  1037. <div class="a_add_input">
  1038. <el-radio-group v-model="askJson.radio[index]">
  1039. <el-radio v-for="(item3, checkIndex1) in item.checkList" :key="checkIndex1" :label="checkIndex1"
  1040. class="redioStyle" disabled>{{ item3 }}</el-radio>
  1041. </el-radio-group>
  1042. </div>
  1043. </div>
  1044. </div>
  1045. </div>
  1046. </div>
  1047. <span slot="footer" class="dialog-footer">
  1048. <el-button type="primary" @click="dialogVisible4 = false">关 闭</el-button>
  1049. </span>
  1050. </el-dialog>
  1051. <el-dialog :visible.sync="pictureDialog" size="tiny">
  1052. <img width="100%" :src="dialogImageUrl" alt />
  1053. </el-dialog>
  1054. <el-dialog title="文件预览" :visible.sync="dialogVisible6" width="100%" :before-close="handleClose" class="full_diy"
  1055. :append-to-body="true">
  1056. <div slot="title" class="header-title">
  1057. <div style="color: #fff">文件预览</div>
  1058. </div>
  1059. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"></pdf>
  1060. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600"></iframe>
  1061. </el-dialog>
  1062. <!-- <div style="position: relative">
  1063. <div style="width: 98.5%;margin: 0 auto;">
  1064. <WorksDetail2
  1065. :cid="cid"
  1066. :uid="userid"
  1067. v-if="dialogVisible"
  1068. ></WorksDetail2>
  1069. </div>
  1070. <div class="cancelbox" v-if="dialogVisible">
  1071. <el-button @click="cancel" type="primary" size="small"
  1072. >返回</el-button
  1073. >
  1074. </div>
  1075. </div> -->
  1076. </div>
  1077. </div>
  1078. </template>
  1079. <script>
  1080. import WorksDetail2 from "./components/worksDetail2";
  1081. export default {
  1082. components: {
  1083. WorksDetail2,
  1084. },
  1085. data() {
  1086. return {
  1087. myCourse: [],
  1088. studentMessage: [],
  1089. tx: require("../assets/avatar.png"),
  1090. mpj: require("../assets/project.png"),
  1091. userid: this.$route.query.userid,
  1092. oid: this.oid,
  1093. tableData1: [],
  1094. tableHeight: "500px",
  1095. page: 1,
  1096. total: 0,
  1097. dialogVisible: false,
  1098. dataJson: {},
  1099. cid: "",
  1100. dialogImageUrl: "",
  1101. pictureDialog: false,
  1102. dialogVisible3: false,
  1103. dialogVisible4: false,
  1104. full: true,
  1105. allWorks: [],
  1106. stageIndex: "",
  1107. taskCount: "",
  1108. navId: "",
  1109. pptImgUrl: "",
  1110. grade: [],
  1111. mr: require("../assets/icon/wheel.png"),
  1112. tx: require("../assets/avatar.png"),
  1113. projectchoose: "",
  1114. scopeId: "",
  1115. thumbnail: [],
  1116. rateList: {
  1117. ca: 0,
  1118. sia: 0,
  1119. eta: 0,
  1120. pia: 0,
  1121. lra: 0,
  1122. content: "",
  1123. },
  1124. rateParams: [],
  1125. page: 1,
  1126. total: 0,
  1127. worksDetail: [],
  1128. suserId: "",
  1129. sInfo: {},
  1130. chapInfo: [],
  1131. showPDF: false,
  1132. dialogVisible6: false,
  1133. vedio: [],
  1134. file: [],
  1135. tType: 0,
  1136. chartObj: [],
  1137. pptImgUrl: "",
  1138. ooption: [],
  1139. option: {
  1140. tooltip: {
  1141. trigger: "item",
  1142. },
  1143. series: [
  1144. {
  1145. name: "量规评分",
  1146. type: "pie",
  1147. radius: "70%",
  1148. center: ["50%", "50%"],
  1149. data: [
  1150. { value: 0, name: "意识能力" },
  1151. { value: 0, name: "科学探究能力" },
  1152. { value: 0, name: "实践创新能力" },
  1153. { value: 0, name: "学习反思能力" },
  1154. { value: 0, name: "工程思维能力" },
  1155. ],
  1156. itemStyle: {
  1157. emphasis: {
  1158. shadowBlur: 10,
  1159. shadowOffsetX: 0,
  1160. shadowColor: "rgba(0, 0, 0, 0.5)",
  1161. },
  1162. normal: {
  1163. label: {
  1164. show: true,
  1165. formatter: "{d}%",
  1166. inside: true,
  1167. position: "inner",
  1168. },
  1169. labelLine: { show: false },
  1170. },
  1171. },
  1172. },
  1173. ],
  1174. },
  1175. // 雷达图的数据
  1176. radarOption: {
  1177. splitNumber: 5,
  1178. tooltip: {
  1179. triggerOn: "mousemove",
  1180. //雷达图的tooltip不会超出div,也可以设置position属性,position定位的tooltip 不会随着鼠标移动而位置变化,不友好
  1181. confine: true,
  1182. enterable: true, //鼠标是否可以移动到tooltip区域内
  1183. backgroundColor: "rgba(255,255,255,0.7)",
  1184. textStyle: {
  1185. // 文字样式
  1186. align: "left",
  1187. },
  1188. left: "right",
  1189. top: "bottom",
  1190. },
  1191. radar: {
  1192. radius: ["0%", "70%"],
  1193. shape: "circle",
  1194. center: ["50%", "50%"],
  1195. axisName: {
  1196. textStyle: {
  1197. // 文字样式
  1198. color: "#58a5e6",
  1199. },
  1200. formatter: function (value, indicator) {
  1201. // value = value.replace(/\S{2}/g, function (match) {
  1202. // return match + "\n";
  1203. // });
  1204. return value;
  1205. },
  1206. },
  1207. indicator: [
  1208. // 雷达图的指示器,用来指定雷达图中的多个变量(维度)
  1209. ],
  1210. },
  1211. // 雷达图背景的颜色,在这儿随便设置了一个颜色,完全不透明度为0,就实现了透明背景
  1212. splitArea: {
  1213. show: true,
  1214. areaStyle: {
  1215. color: "rgba(255,0,0,0)", // 图表背景的颜色
  1216. },
  1217. },
  1218. splitLine: {
  1219. show: true,
  1220. lineStyle: {
  1221. width: 1,
  1222. color: "rgba(131,141,158,.1)", // 设置网格的颜色
  1223. },
  1224. },
  1225. series: [
  1226. {
  1227. name: "能力图", // tooltip中的标题
  1228. type: "radar", // 表示是雷达图
  1229. symbol: "circle", // 拐点的样式,还可以取值'rect','angle'等
  1230. symbolSize: 8, // 拐点的大小
  1231. areaStyle: {
  1232. normal: {
  1233. width: 1,
  1234. opacity: 0.2,
  1235. },
  1236. },
  1237. data: [
  1238. {
  1239. // 设置各个指标原始值
  1240. value: [],
  1241. // 设置区域边框和区域的颜色
  1242. itemStyle: {
  1243. normal: {
  1244. color: "#58a5e6",
  1245. lineStyle: {
  1246. color: "#58a5e6",
  1247. },
  1248. },
  1249. },
  1250. },
  1251. ],
  1252. },
  1253. ],
  1254. },
  1255. askJson: {},
  1256. dyList: [],
  1257. dyList2: [],
  1258. courseName: "",
  1259. workList: [],
  1260. CState: 0,
  1261. loading:false
  1262. };
  1263. },
  1264. computed: {
  1265. isStage() {
  1266. return function(val) {
  1267. let isShow = false;
  1268. val.forEach(e => {
  1269. e.toolEList.forEach(i => {
  1270. if (i.content.length) {
  1271. isShow = true;
  1272. }
  1273. });
  1274. });
  1275. return isShow;
  1276. };
  1277. },
  1278. isTask() {
  1279. return function(val) {
  1280. let isShow = false;
  1281. val.forEach(e => {
  1282. if (e.content.length) {
  1283. isShow = true;
  1284. }
  1285. });
  1286. return isShow;
  1287. };
  1288. },
  1289. isSU(){
  1290. return function(val) {
  1291. let isShow = false;
  1292. // console.log('isSU',val);
  1293. val.forEach(e => {
  1294. if (e.target) {
  1295. isShow = true;
  1296. }
  1297. });
  1298. return isShow;
  1299. };
  1300. },
  1301. totalScore() {
  1302. return function(val) {
  1303. let valT = JSON.parse(JSON.stringify(val));
  1304. if (!valT) return "0.0";
  1305. delete valT.content;
  1306. delete valT.comment;
  1307. let data = Object.values(valT);
  1308. let new1 = data.reduce(function(pre, next, index) {
  1309. return pre + next * 1;
  1310. });
  1311. if (new1 == 0) return "0.0";
  1312. return (new1 / data.length).toFixed(1);
  1313. };
  1314. },
  1315. workTime(){
  1316. return function(val) {
  1317. if (!val.length) return ''
  1318. let TimeList = []
  1319. val.forEach(e=>{
  1320. if (e.time) {
  1321. const timestamp = new Date(e.time).getTime();
  1322. TimeList.push(timestamp)
  1323. }
  1324. })
  1325. console.log('TimeList',TimeList);
  1326. TimeList.sort(function(a,b){
  1327. return a-b;//从小到大排序
  1328. })
  1329. return this.convertToTimestamp(TimeList[0]);
  1330. };
  1331. }
  1332. },
  1333. methods: {
  1334. // 时间戳转时间
  1335. convertToTimestamp(val) {
  1336. const date = new Date(val);
  1337. // 使用Date对象的方法获取年、月、日、时、分、秒
  1338. const year = date.getFullYear();
  1339. const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1
  1340. const day = String(date.getDate()).padStart(2, '0');
  1341. const hours = String(date.getHours()).padStart(2, '0');
  1342. const minutes = String(date.getMinutes()).padStart(2, '0');
  1343. const seconds = String(date.getSeconds()).padStart(2, '0');
  1344. // 格式化后的日期时间字符串
  1345. const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  1346. return formattedDateTime
  1347. },
  1348. handleOpen(key, keyPath) {
  1349. console.log(key, keyPath);
  1350. },
  1351. handleCloseSub(key, keyPath) {
  1352. console.log(key, keyPath);
  1353. },
  1354. goTo(path) {
  1355. this.$router.push(path);
  1356. },
  1357. // 点击任务滑动跳转
  1358. positT(val) {
  1359. let a = document.getElementById(val);
  1360. if (a) {
  1361. a.scrollIntoView({
  1362. behavior: "smooth" // 平滑滚动效果
  1363. });
  1364. } else {
  1365. this.$message.error("该任务暂时没提交作业");
  1366. }
  1367. },
  1368. tableRowClassName({ row, rowIndex }) {
  1369. if ((rowIndex + 1) % 2 === 0) {
  1370. return "even_row";
  1371. } else {
  1372. return "";
  1373. }
  1374. },
  1375. handleCurrentChange(val) {
  1376. this.page = val;
  1377. this.getProject();
  1378. },
  1379. selectSDetail() {
  1380. let params = {
  1381. uid: this.userid,
  1382. };
  1383. this.ajax
  1384. .get(this.$store.state.api + "selectSDetail", params)
  1385. .then((res) => {
  1386. this.studentMessage = res.data[0][0];
  1387. })
  1388. .catch((err) => {
  1389. this.isLoading = false;
  1390. console.error(err);
  1391. });
  1392. },
  1393. getProject() {
  1394. let params = {
  1395. uid: this.userid,
  1396. page: this.page,
  1397. };
  1398. this.ajax
  1399. .get(this.$store.state.api + "getMyProject", params)
  1400. .then((res) => {
  1401. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  1402. this.tableData1 = res.data[0];
  1403. })
  1404. .catch((err) => {
  1405. console.error(err);
  1406. });
  1407. },
  1408. getWorkData(res) {
  1409. this.cid = res.courseid;
  1410. this.dialogVisible = true;
  1411. },
  1412. cancel() {
  1413. this.dataJson = "";
  1414. this.dialogVisible = false;
  1415. },
  1416. previewImg(url) {
  1417. this.$hevueImgPreview(url);
  1418. },
  1419. handleClose(done) {
  1420. done();
  1421. },
  1422. lookWork(id, uid, stage, task) {
  1423. // this.scopeId = id;
  1424. let params = {
  1425. uid: uid,
  1426. cid: id,
  1427. stage: stage,
  1428. task: task,
  1429. };
  1430. this.ajax
  1431. .get(this.$store.state.api + "selectWorksDetail3", params)
  1432. .then((res) => {
  1433. this.sInfo = res.data[0];
  1434. var chapters = [],
  1435. eList = [],
  1436. _ooption = [],
  1437. _rate = [],
  1438. _rateList = [];
  1439. var worksDetail = res.data[1];
  1440. // this.scopeId = res.data[2][0].id;
  1441. // var scopeId = res.data[2][0].id;
  1442. var askInfo = res.data[3];
  1443. var answerInfo = res.data[4];
  1444. var pptInfo = res.data[5];
  1445. var workJson = [];
  1446. for (var k = 0; k < res.data[0].length; k++) {
  1447. this.allWorks = res.data[0][k];
  1448. this.chapInfo.push(JSON.parse(res.data[0][k].chapters));
  1449. chapters.push(JSON.parse(res.data[0][k].chapters));
  1450. if (!chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
  1451. res.data[0][k].task
  1452. ]) {
  1453. continue
  1454. }
  1455. workJson.push({
  1456. img: [],
  1457. imgIndex: 0,
  1458. eList: [],
  1459. rateList: {},
  1460. askInfo: [],
  1461. answerInfo: [],
  1462. wpptInfo: [],
  1463. scopeId: res.data[0][k].id,
  1464. stagetask: "",
  1465. time: "",
  1466. });
  1467. eList =
  1468. chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
  1469. res.data[0][k].task
  1470. ].eList;
  1471. workJson[k].time = res.data[0][k].time;
  1472. workJson[k].stagetask =
  1473. res.data[0][k].stage + "-" + res.data[0][k].task;
  1474. if (eList && eList.length) {
  1475. _ooption = [];
  1476. workJson[k].eList = eList;
  1477. for (var i = 0; i < eList.length; i++) {
  1478. _ooption.push({ value: 0, name: eList[i].value });
  1479. workJson[k].rateList[eList[i].value] = 0;
  1480. }
  1481. workJson[k].rateList.content = "";
  1482. this.ooption[k] = _ooption;
  1483. }
  1484. if (res.data[0][k].rate && eList && eList.length) {
  1485. _rate[k] = JSON.parse(res.data[0][k].rate);
  1486. _rateList[k] = Object.keys(JSON.parse(res.data[0][k].rate));
  1487. for (var i = 0; i < _rateList[k].length; i++) {
  1488. var _c = Object.keys(workJson[k].rateList);
  1489. if (_c.indexOf(_rateList[k][i]) != -1) {
  1490. workJson[k].rateList[_rateList[k][i]] =
  1491. _rate[k][_rateList[k][i]];
  1492. }
  1493. }
  1494. for (var i = 0; i < this.ooption[k].length; i++) {
  1495. if (_rateList[k].indexOf(this.ooption[k][i].name) != -1) {
  1496. this.ooption[k][i].value = _rate[k][this.ooption[k][i].name];
  1497. }
  1498. }
  1499. } else {
  1500. _rate[k] = [];
  1501. _rateList[k] = [];
  1502. }
  1503. for (var i = 0; i < worksDetail.length; i++) {
  1504. if (
  1505. res.data[0][k].stage == worksDetail[i].stage &&
  1506. res.data[0][k].task == worksDetail[i].task
  1507. ) {
  1508. workJson[k].img.push({ src: worksDetail[i].content, id: i });
  1509. }
  1510. }
  1511. for (var i = 0; i < askInfo.length; i++) {
  1512. if (
  1513. res.data[0][k].stage == askInfo[i].stage &&
  1514. res.data[0][k].task == askInfo[i].task
  1515. ) {
  1516. const element = askInfo[i];
  1517. let a = JSON.parse(element.content)[0];
  1518. let b = a.anwer.split(",");
  1519. let c = [];
  1520. for (var j = 0; j < b.length; j++) {
  1521. c.push(parseInt(b[j]));
  1522. }
  1523. a.askJson.radio = c;
  1524. a.askJson.time = element.time;
  1525. workJson[k].askInfo.push(a.askJson);
  1526. }
  1527. }
  1528. for (var i = 0; i < pptInfo.length; i++) {
  1529. if (
  1530. res.data[0][k].stage == pptInfo[i].stage &&
  1531. res.data[0][k].task == pptInfo[i].task
  1532. ) {
  1533. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  1534. if (
  1535. a.indexOf(
  1536. pptInfo[i].content
  1537. .split(".")
  1538. [
  1539. pptInfo[i].content.split(".").length - 1
  1540. ].toLocaleUpperCase()
  1541. ) != -1
  1542. ) {
  1543. var a =
  1544. "https://view.officeapps.live.com/op/view.aspx?src=" +
  1545. encodeURIComponent(pptInfo[i].content);
  1546. workJson[k].wpptInfo.push(a);
  1547. this.showPDF = false;
  1548. } else if (
  1549. pptInfo[i].content
  1550. .split(".")
  1551. [
  1552. pptInfo[i].content.split(".").length - 1
  1553. ].toLocaleUpperCase() == "PDF"
  1554. ) {
  1555. workJson[k].wpptInfo.push(pptInfo[i].content);
  1556. this.showPDF = true;
  1557. }
  1558. }
  1559. }
  1560. for (var i = 0; i < answerInfo.length; i++) {
  1561. if (
  1562. res.data[0][k].stage == answerInfo[i].stage &&
  1563. res.data[0][k].task == answerInfo[i].task
  1564. ) {
  1565. const element = answerInfo[i];
  1566. workJson[k].answerInfo.push(JSON.parse(element.content)[0]);
  1567. }
  1568. }
  1569. }
  1570. this.worksDetail = workJson;
  1571. this.courseDetail = res.data[0][0];
  1572. this.$forceUpdate;
  1573. this.dialogVisible3 = true;
  1574. setTimeout(() => {
  1575. for (var p = 0; p < res.data[0].length; p++) {
  1576. if (!this.ooption[p]) {
  1577. this.chartObj[p] = null;
  1578. continue
  1579. }
  1580. var _ooption = JSON.parse(JSON.stringify(this.ooption[p]));
  1581. var _option = JSON.parse(JSON.stringify(this.radarOption));
  1582. _option.radar.indicator = [];
  1583. _option.series[0].data[0].value = [];
  1584. for (var i = 0; i < _ooption.length; i++) {
  1585. _option.radar.indicator.push({
  1586. name: _ooption[i].name,
  1587. max: 5,
  1588. });
  1589. _option.series[0].data[0].value.push(_ooption[i].value);
  1590. }
  1591. console.log(_option);
  1592. this.setChart(_option, p);
  1593. }
  1594. }, 0);
  1595. let _dyList = JSON.parse(JSON.stringify(this.dyList));
  1596. let _dyList2 = [];
  1597. let _dyList3 = [];
  1598. for (var c = 0; c < _dyList.length; c++) {
  1599. _dyList[c].taskList = [];
  1600. _dyList2.push(_dyList[c]);
  1601. }
  1602. _dyList = JSON.parse(JSON.stringify(this.dyList));
  1603. for (var c = 0; c < workJson.length; c++) {
  1604. let _stage = workJson[c].stagetask.split("-")[0];
  1605. let _task = workJson[c].stagetask.split("-")[1];
  1606. _dyList2[_stage].taskList.push(_dyList[_stage].taskList[_task]);
  1607. _dyList2[_stage].taskList;
  1608. }
  1609. for (var c = 0; c < _dyList2.length; c++) {
  1610. if (_dyList2[c].taskList.length) {
  1611. _dyList2[c].isOpen = c === 0 ? true : false;
  1612. _dyList3.push(_dyList2[c]);
  1613. }
  1614. }
  1615. this.dyList2 = _dyList3;
  1616. this.stageIndex = this.dyList2[0].id;
  1617. this.taskCount = this.dyList2[0].taskList[0].id;
  1618. this.navId =
  1619. this.dyList2[0].id + "-" + this.dyList2[0].taskList[0].id;
  1620. })
  1621. .catch((err) => {
  1622. console.error(err);
  1623. });
  1624. },
  1625. checkAsk(askJson) {
  1626. this.askJson = askJson;
  1627. this.dialogVisible4 = true;
  1628. },
  1629. setChart(option, k) {
  1630. let _this = this;
  1631. // 雷达图显示的标签
  1632. let newPromise = new Promise((resolve) => {
  1633. resolve();
  1634. });
  1635. //然后异步执行echarts的初始化函数
  1636. newPromise.then(() => {
  1637. console.log(_this.option);
  1638. const chartObj = _this.$echarts.init(
  1639. //劳动课程
  1640. // _this.$el.querySelector("#charts_canvas")
  1641. document.getElementsByClassName("charts_canvas")[k]
  1642. );
  1643. // 初始化雷达图
  1644. _this.chartObj[k] = chartObj;
  1645. _this.chartObj[k].setOption(option);
  1646. });
  1647. },
  1648. giveScore() {
  1649. this.rateList = this.chapInfo[this.publicIndex].rate;
  1650. this.dialogVisible2 = true;
  1651. },
  1652. openFile(f) {
  1653. this.pptImgUrl = f;
  1654. this.dialogVisible6 = true;
  1655. },
  1656. //获取班级列表
  1657. getClass() {
  1658. this.isLoading = true;
  1659. let params = {
  1660. oid: this.oid,
  1661. };
  1662. this.ajax
  1663. .get(this.$store.state.api + "selectClassBySchool", params)
  1664. .then((res) => {
  1665. this.isLoading = false;
  1666. this.grade = res.data[0];
  1667. })
  1668. .catch((err) => {
  1669. this.isLoading = false;
  1670. console.error(err);
  1671. });
  1672. },
  1673. //获取分组分类
  1674. getGroup() {
  1675. let params = {};
  1676. this.ajax
  1677. .get(this.$store.state.api + "getGroup", params)
  1678. .then((res) => {
  1679. this.subjectJuri = res.data[0];
  1680. this.projectJuri = res.data[0];
  1681. })
  1682. .catch((err) => {
  1683. console.error(err);
  1684. });
  1685. },
  1686. searchWork1() {
  1687. this.page = 1;
  1688. this.chooseTask = "";
  1689. this.getWorks();
  1690. },
  1691. searchWork2() {
  1692. this.page = 1;
  1693. this.getWorks();
  1694. },
  1695. fullTools() {
  1696. this.full = !this.full;
  1697. },
  1698. //获取作业
  1699. getWorks() {
  1700. this.isLoading = true;
  1701. var mr = this.mr;
  1702. let params = {
  1703. cid: this.id,
  1704. uname: this.userid,
  1705. stage: this.chooseDy,
  1706. task: this.chooseTask,
  1707. page: this.page,
  1708. };
  1709. this.ajax
  1710. .get(this.$store.state.api + "getCourseWorks2", params)
  1711. .then((res) => {
  1712. this.isLoading = false;
  1713. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  1714. this.tableData = res.data[0];
  1715. })
  1716. .catch((err) => {
  1717. this.isLoading = false;
  1718. console.error(err);
  1719. });
  1720. },
  1721. // 获取作业信息
  1722. async exportPdfSet(val) {
  1723. // return console.log(val);
  1724. this.loading = true;
  1725. this.dialogVisible3=true
  1726. this.CState = val.state
  1727. // this.tableData.forEach((e, i) => {
  1728. // if (e.userid == this.uid) {
  1729. // this.userName = e.sName;
  1730. // this.userImg = e.img ? e.img : "";
  1731. // this.positP = i;
  1732. // }
  1733. // });
  1734. let params = {
  1735. uid: this.userid,
  1736. cid: val.courseid
  1737. };
  1738. return new Promise((resolve, reject) => {
  1739. this.ajax
  1740. .get(this.$store.state.api + "selectAllWorksDetail", params)
  1741. .then(res => {
  1742. var worksDetail = res.data[1];
  1743. var askInfo = res.data[3]; //问卷
  1744. var answerInfo = res.data[4]; //问答题
  1745. var pptInfo = res.data[5];
  1746. var chooseInfo = res.data[6]; //选择题
  1747. var pjInfo = res.data[7]; //个人评价作业
  1748. var xztkInfo = res.data[8]; //选择匹配作业
  1749. var lccjInfo = res.data[9]; //排序作业
  1750. var bgInfo = res.data[10]; //表格作业
  1751. var cocopiInfo = res.data[11]; //cocopi或源码编辑作业
  1752. var wordInfo = res.data[12]; //文档作业
  1753. this.workEvaList = res.data[13];
  1754. // console.log('res.data[0][0]',res.data[0][0]);
  1755. this.resData = JSON.parse(JSON.stringify(res.data[0][0]))
  1756. this.courseName = res.data[0][0].course;
  1757. this.CState = res.data[0][0].state;
  1758. var dyJSON = JSON.parse(res.data[0][0].chapters);
  1759. // console.log('dyJSON',JSON.parse(JSON.stringify(dyJSON)));
  1760. let dyList = [];
  1761. for (var i = 0; i < dyJSON.length; i++) {
  1762. dyList.push({
  1763. name: dyJSON[i].dyName,
  1764. id: `${i}`,
  1765. taskList: []
  1766. });
  1767. var a = dyJSON[i].chapterInfo[0].taskJson;
  1768. for (var j = 0; j < a.length; j++) {
  1769. dyList[i].taskList.push({ name: a[j].task, id: i + "-" + j });
  1770. }
  1771. }
  1772. this.dyList = dyList;
  1773. // console.log("this.dyList", this.dyList);
  1774. // console.log("this.workEvaList", this.workEvaList);
  1775. let framework = [];
  1776. if (res.data[0].length) {
  1777. let elistData = JSON.parse(res.data[0][0].chapters);
  1778. // console.log("elistData", JSON.parse(JSON.stringify(elistData)));
  1779. elistData.forEach((e, i) => {
  1780. framework[i] = {
  1781. id: i,
  1782. name: e.dyName ? e.dyName : "",
  1783. taskList: []
  1784. };
  1785. e.chapterInfo[0].taskJson.forEach((k, kin) => {
  1786. if (k.eList && k.eList.length) {
  1787. k.toolChoose.forEach(y => {
  1788. y.eList = k.eList;
  1789. });
  1790. }
  1791. framework[i].taskList.push({
  1792. stage: i,
  1793. task: kin,
  1794. taskTit: k.task ? k.task : "",
  1795. taskDetail: k.taskDetail,
  1796. toolEList: k.toolChoose
  1797. });
  1798. });
  1799. });
  1800. }
  1801. res.data[3].forEach(e => {
  1802. e.content = JSON.parse(e.content);
  1803. });
  1804. res.data[4].forEach(e => {
  1805. e.content = JSON.parse(e.content);
  1806. // console.log('66666',e.content[0].answer);
  1807. });
  1808. res.data[6].forEach((k, i) => {
  1809. const element1 = JSON.parse(k.content)[0];
  1810. // console.log("JSON.parse(element1.content)[0]", element1);
  1811. let t = JSON.parse(k.content)[0].testJson;
  1812. // console.log("t", JSON.parse(JSON.stringify(t)));
  1813. // console.log("k", k);
  1814. // 处理学生选择答案
  1815. let e = [];
  1816. t.testJson.forEach((i, y) => {
  1817. e.push(element1.anwer[y]);
  1818. });
  1819. t.radio = e;
  1820. // 处理选项
  1821. k.content = t;
  1822. });
  1823. res.data[8].forEach((k, i) => {
  1824. k.content = k.content.split(",");
  1825. });
  1826. res.data[9].forEach(e => {
  1827. e.content = JSON.parse(e.content);
  1828. });
  1829. res.data[12].forEach(e => {
  1830. e.content = JSON.parse(e.content);
  1831. });
  1832. res.data[10].forEach(e => {
  1833. e.content = JSON.parse(e.content);
  1834. });
  1835. let AreaAllWork = [
  1836. ...res.data[1],
  1837. ...res.data[3],
  1838. ...res.data[4],
  1839. ...res.data[5],
  1840. ...res.data[6],
  1841. ...res.data[7],
  1842. ...res.data[8],
  1843. ...res.data[9],
  1844. ...res.data[10],
  1845. ...res.data[11],
  1846. ...res.data[12]
  1847. ];
  1848. AreaAllWork.sort(function(a, b) {
  1849. return a.stage - b.stage; //从小到大排序
  1850. });
  1851. // console.log("AreaAllWork", JSON.parse(JSON.stringify(AreaAllWork)));
  1852. framework.forEach(e => {
  1853. e.taskList.forEach((k, kin) => {
  1854. k.toolEList.forEach((l, lIndex) => {
  1855. l.content = [];
  1856. l.rate = "";
  1857. l.time = "";
  1858. l.score = "";
  1859. // 将作业答案添加进数组里
  1860. AreaAllWork.forEach((i, index) => {
  1861. i.tool = i.tool ? i.tool : 0;
  1862. if (
  1863. k.stage == i.stage &&
  1864. k.task == i.task &&
  1865. lIndex == i.tool
  1866. ) {
  1867. l.content.push(i.content);
  1868. l.time = i.tTime;
  1869. l.score = i.score;
  1870. }
  1871. });
  1872. // 将老师分数循环数组里
  1873. this.workEvaList.forEach(p => {
  1874. p.tool = p.tool ? p.tool : 0;
  1875. if (
  1876. k.stage == p.stage &&
  1877. k.task == p.task &&
  1878. lIndex == p.tool
  1879. ) {
  1880. // console.log("JSON.parse(p.rate)", JSON.parse(p.rate));
  1881. let rateCopy = JSON.parse(p.rate);
  1882. for (const key in rateCopy) {
  1883. if (key != "content") {
  1884. rateCopy[key] = rateCopy[key] * 1;
  1885. }
  1886. }
  1887. l.rate = rateCopy;
  1888. }
  1889. });
  1890. // 将没有提交作业,但是有评分标准的数据填上数据,防止报错
  1891. if (!l.rate && l.eList && l.eList.length && this.CState == 5) {
  1892. l.rate = { content: "" };
  1893. l.eList.forEach(elp => {
  1894. l.rate[elp.detail] = 0;
  1895. });
  1896. }else if ((!l.rate && l.eList && l.eList.length && this.CState != 5)) {
  1897. l.rate = { content: "" };
  1898. l.eList.forEach(elp => {
  1899. l.rate[elp.value] = 0;
  1900. });
  1901. }
  1902. });
  1903. });
  1904. });
  1905. console.log("framework", JSON.parse(JSON.stringify(framework)));
  1906. this.workList = framework;
  1907. this.loading = false;
  1908. })
  1909. .catch(err => {
  1910. console.error(err);
  1911. });
  1912. });
  1913. },
  1914. getCourseDetail(cid) {
  1915. let params = {
  1916. cid: cid,
  1917. };
  1918. this.ajax
  1919. .get(this.$store.state.api + "getCourseWorksReport", params)
  1920. .then((res) => {
  1921. this.course = res.data[0][0];
  1922. var dyJSON = JSON.parse(res.data[0][0].chapters);
  1923. let dyList = [];
  1924. for (var i = 0; i < dyJSON.length; i++) {
  1925. dyList.push({ name: dyJSON[i].dyName, id: i, taskList: [] });
  1926. var a = dyJSON[i].chapterInfo[0].taskJson;
  1927. for (var j = 0; j < a.length; j++) {
  1928. dyList[i].taskList.push({ name: a[j].task, id: j });
  1929. }
  1930. }
  1931. this.dyList = dyList;
  1932. this.userAarray = res.data[1];
  1933. this.lookWork(cid,this.userid,0,0);
  1934. })
  1935. .catch((err) => {
  1936. console.error(err);
  1937. });
  1938. },
  1939. handlePictureCardPreview(url) {
  1940. this.dialogImageUrl = url;
  1941. this.pictureDialog = true;
  1942. },
  1943. updatePj() {
  1944. for (var i = 0; i < this.worksDetail.length; i++) {
  1945. if (!this.worksDetail[i].eList.length) {
  1946. continue
  1947. }
  1948. this.updateWorks(
  1949. this.worksDetail[i].scopeId,
  1950. this.worksDetail[i].rateList,
  1951. i
  1952. );
  1953. }
  1954. },
  1955. getStar(i) {
  1956. const k = i;
  1957. var _ooption = JSON.parse(JSON.stringify(this.ooption[k]));
  1958. var _rate = this.worksDetail[i].rateList;
  1959. var _rateList = Object.keys(this.worksDetail[i].rateList);
  1960. for (var i = 0; i < _ooption.length; i++) {
  1961. if (_rateList.indexOf(_ooption[i].name) != -1) {
  1962. _ooption[i].value = _rate[_ooption[i].name];
  1963. }
  1964. }
  1965. // var _option = JSON.parse(JSON.stringify(this.radarOption));
  1966. var _option = this.radarOption;
  1967. _option.radar.indicator = [];
  1968. _option.series[0].data[0].value = [];
  1969. for (var i = 0; i < _ooption.length; i++) {
  1970. _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
  1971. _option.series[0].data[0].value.push(_ooption[i].value);
  1972. }
  1973. if (this.chartObj && this.chartObj[k]) {
  1974. // _option.series[0].data = _ooption;
  1975. this.chartObj[k].setOption(_option);
  1976. } else {
  1977. this.setChart(_ooption);
  1978. }
  1979. },
  1980. updateWorks(scopeId, rateList, i) {
  1981. let params = {
  1982. rate: rateList,
  1983. tuid: this.userid,
  1984. id: scopeId,
  1985. };
  1986. const k = i;
  1987. this.ajax
  1988. .get(this.$store.state.api + "updateWorks", params)
  1989. .then((res) => {
  1990. var _ooption = JSON.parse(JSON.stringify(this.ooption[k]));
  1991. // var _option = JSON.parse(JSON.stringify(this.option));
  1992. var _rate = rateList;
  1993. var _rateList = Object.keys(rateList);
  1994. for (var i = 0; i < _ooption.length; i++) {
  1995. if (_rateList.indexOf(_ooption[i].name) != -1) {
  1996. _ooption[i].value = _rate[_ooption[i].name];
  1997. }
  1998. }
  1999. // var _option = JSON.parse(JSON.stringify(this.radarOption));
  2000. var _option = this.radarOption;
  2001. _option.radar.indicator = [];
  2002. _option.series[0].data[0].value = [];
  2003. for (var i = 0; i < _ooption.length; i++) {
  2004. _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
  2005. _option.series[0].data[0].value.push(_ooption[i].value);
  2006. }
  2007. console.log(_option);
  2008. if (this.chartObj) {
  2009. // _option.series[0].data = _ooption;
  2010. this.chartObj[k].setOption(_option);
  2011. } else {
  2012. this.setChart(_ooption);
  2013. }
  2014. // this.uploadBoolean = false;
  2015. // this.dialogVisible2 = false;
  2016. let _k = 0
  2017. for (var i = 0; i < this.worksDetail.length; i++) {
  2018. if (this.worksDetail[i].eList.length) {
  2019. _k = i
  2020. }
  2021. }
  2022. if (k == _k) {
  2023. this.$message({
  2024. message: "评价成功",
  2025. type: "success",
  2026. });
  2027. }
  2028. })
  2029. .catch((err) => {
  2030. this.$message.error("评价失败");
  2031. console.error(err);
  2032. });
  2033. },
  2034. switchVideo(media, index) {
  2035. this.playerO = {};
  2036. this.playerOptions.poster = "";
  2037. this.playerOptions.sources[0].src = media;
  2038. this.playerO = this.playerOptions;
  2039. },
  2040. onPlayerPlay() { },
  2041. // this.$store.commit("update", ["userInfo", userInfo]);
  2042. lookWork2(id, uid, stage, task) {
  2043. // this.scopeId = id;
  2044. let params = {
  2045. uid: uid,
  2046. cid: this.id,
  2047. stage: stage,
  2048. task: task,
  2049. };
  2050. this.ajax
  2051. .get(this.$store.state.api + "selectWorksDetail2", params)
  2052. .then((res) => {
  2053. this.sInfo = res.data[0][0];
  2054. this.chapInfo = JSON.parse(res.data[0][0].chapters);
  2055. var chapters = JSON.parse(res.data[0][0].chapters);
  2056. var worksDetail = res.data[1];
  2057. // var askArray = res.data[2];
  2058. this.scopeId = res.data[2].length ? res.data[2][0].id : this.sInfo.id;
  2059. var askInfo = res.data[3];
  2060. var answerInfo = res.data[4];
  2061. var linkInfo = res.data[5];
  2062. var workJson = {
  2063. img: [],
  2064. imgIndex: 0,
  2065. eList: [],
  2066. rateList: {},
  2067. wpptInfo: [],
  2068. askInfo: [],
  2069. answerInfo: [],
  2070. };
  2071. var eList =
  2072. chapters[this.sInfo.stage].chapterInfo[0].taskJson[this.sInfo.task]
  2073. .eList;
  2074. var _ooption = [];
  2075. if (eList) {
  2076. workJson.eList = eList;
  2077. for (var i = 0; i < eList.length; i++) {
  2078. _ooption.push({ value: 0, name: eList[i].value });
  2079. workJson.rateList[eList[i].value] = 0;
  2080. }
  2081. workJson.rateList.content = "";
  2082. this.ooption = _ooption;
  2083. } else {
  2084. workJson.eList = [
  2085. { value: "意识能力", detail: "", score: 5 },
  2086. { value: "科学探究能力", detail: "", score: 5 },
  2087. { value: "实践创新能力", detail: "", score: 5 },
  2088. { value: "学习反思能力", detail: "", score: 5 },
  2089. { value: "工程思维能力", detail: "", score: 5 },
  2090. ];
  2091. for (var i = 0; i < workJson.eList.length; i++) {
  2092. _ooption.push({ value: 0, name: workJson.eList[i].value });
  2093. workJson.rateList[workJson.eList[i].value] = 0;
  2094. }
  2095. workJson.rateList.content = "";
  2096. this.ooption = [
  2097. { value: 0, name: "意识能力" },
  2098. { value: 0, name: "科学探究能力" },
  2099. { value: 0, name: "实践创新能力" },
  2100. { value: 0, name: "学习反思能力" },
  2101. { value: 0, name: "工程思维能力" },
  2102. ];
  2103. }
  2104. if (this.sInfo.rate) {
  2105. var _rate = JSON.parse(this.sInfo.rate);
  2106. var _rateList = Object.keys(JSON.parse(this.sInfo.rate));
  2107. for (var i = 0; i < _rateList.length; i++) {
  2108. var _c = Object.keys(workJson.rateList);
  2109. if (_c.indexOf(_rateList[i]) != -1) {
  2110. workJson.rateList[_rateList[i]] = _rate[_rateList[i]];
  2111. }
  2112. }
  2113. for (var i = 0; i < this.ooption.length; i++) {
  2114. if (_rateList.indexOf(this.ooption[i].name) != -1) {
  2115. this.ooption[i].value = _rate[this.ooption[i].name];
  2116. }
  2117. }
  2118. }
  2119. for (var i = 0; i < worksDetail.length; i++) {
  2120. workJson.img.push({ src: worksDetail[i].content, id: i });
  2121. }
  2122. for (var i = 0; i < askInfo.length; i++) {
  2123. const element = askInfo[i];
  2124. let a = JSON.parse(element.content)[0];
  2125. let b = a.anwer.split(",");
  2126. let c = [];
  2127. for (var j = 0; j < b.length; j++) {
  2128. c.push(parseInt(b[j]));
  2129. }
  2130. a.askJson.radio = c;
  2131. a.askJson.time = element.time;
  2132. workJson.askInfo.push(a.askJson);
  2133. }
  2134. for (var i = 0; i < answerInfo.length; i++) {
  2135. const element = answerInfo[i];
  2136. workJson.answerInfo.push(JSON.parse(element.content)[0]);
  2137. }
  2138. this.worksDetail = workJson;
  2139. this.courseDetail = res.data[0][0];
  2140. this.$forceUpdate;
  2141. var _course = `<h1>${this.sInfo.course}</h1>`;
  2142. var _title =
  2143. "<h2>" +
  2144. "第" +
  2145. (this.sInfo.stage + 1) +
  2146. "阶段 " +
  2147. this.dyList[this.sInfo.stage].name +
  2148. "</h2>";
  2149. var _subtitle =
  2150. "<h3>" +
  2151. "任务" +
  2152. (this.sInfo.task + 1) +
  2153. " " +
  2154. this.dyList[this.sInfo.stage].taskList[this.sInfo.task].name +
  2155. "-" +
  2156. this.sInfo.sName +
  2157. "</h3>";
  2158. var _img = "";
  2159. if (workJson.img.length > 0) {
  2160. for (var i = 0; i < workJson.img.length; i++) {
  2161. // _img += `<div style="margin-top:10px"><div>图片${
  2162. // i + 1
  2163. // }:<a href='${workJson.img[i].src}'>${
  2164. // workJson.img[i].src
  2165. // }</a></div>`;
  2166. _img += `<div style="margin-top:10px"><div>图片${i + 1
  2167. }</div><img style="max-width:500px" src="${workJson.img[i].src
  2168. }"/></div>`;
  2169. }
  2170. }
  2171. var _ask = "";
  2172. if (workJson.askInfo.length > 0) {
  2173. var _ask = "<h3>选择题</h3>";
  2174. for (var i = 0; i < workJson.askInfo.length; i++) {
  2175. var _div = document.createElement("div");
  2176. _div.innerHTML = `<h4>标题:${workJson.askInfo[i].askTitle}</h4>`;
  2177. for (var j = 0; j < workJson.askInfo[i].askJson.length; j++) {
  2178. var _div2 = document.createElement("div");
  2179. _div2.innerHTML = `<h5>第${j + 1}题:${workJson.askInfo[i].askJson[j].askstitle
  2180. } 选择:${workJson.askInfo[i].radio[j] + 1}</h5> `;
  2181. var _div3 = document.createElement("div");
  2182. for (
  2183. var z = 0;
  2184. z < workJson.askInfo[i].askJson[j].checkList.length;
  2185. z++
  2186. ) {
  2187. _div3.innerHTML += `<span style="margin-right:5px">${z + 1}.${workJson.askInfo[i].askJson[j].checkList[z]
  2188. }</span>`;
  2189. }
  2190. _div2.innerHTML += `<div>${_div3.innerHTML}</div>`;
  2191. _div.innerHTML += `<div>${_div2.innerHTML}</div>`;
  2192. }
  2193. _ask += `<div>${_div.innerHTML}</div>`;
  2194. }
  2195. }
  2196. var _answer = "";
  2197. if (workJson.answerInfo.length > 0) {
  2198. var _answer = "<h3>问答</h3>";
  2199. for (var i = 0; i < workJson.answerInfo.length; i++) {
  2200. var _div = document.createElement("div");
  2201. _div.innerHTML = `<h4>问答:${workJson.answerInfo[i].answerTitle}</h4>`;
  2202. _div.innerHTML += `<div>${workJson.answerInfo[i].answer}</div>`;
  2203. _answer += `<div>${_div.innerHTML}</div>`;
  2204. }
  2205. }
  2206. var _link = "";
  2207. if (linkInfo.length > 0) {
  2208. for (var i = 0; i < linkInfo.length; i++) {
  2209. _link += `<div style="margin-top:10px"><a href='${linkInfo[i].content}'>${linkInfo[i].content}</a></div>`;
  2210. }
  2211. }
  2212. var _html =
  2213. _course + _title + _subtitle + _img + _ask + _answer + _link;
  2214. this.generate(_html);
  2215. })
  2216. .catch((err) => {
  2217. console.error(err);
  2218. });
  2219. },
  2220. isOpen(s) {
  2221. // this.stageIndex = s;
  2222. this.dyList2[s].isOpen = !this.dyList2[s].isOpen;
  2223. },
  2224. openTask(s, i) {
  2225. var a = s + "-" + i;
  2226. var b = document.getElementById(a);
  2227. var d = b.getAttribute("scrollindex");
  2228. var c = document.getElementsByClassName("shuBox")[0];
  2229. c.scrollTop = parseInt(d) * 375;
  2230. this.stageIndex = s;
  2231. this.taskCount = i;
  2232. this.navId = a;
  2233. },
  2234. async generate(a) {
  2235. // 将html文件中需要用到的数据挂载到store上
  2236. this.$store.commit("update", ["report", a]);
  2237. console.log(this.$store.state.report);
  2238. const content = `<!DOCTYPE html>
  2239. <html lang="en">
  2240. <head>
  2241. <meta charset="UTF-8">
  2242. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  2243. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  2244. <title>报告</title>
  2245. </head>
  2246. <body>
  2247. ${this.$store.state.report}
  2248. </body>
  2249. </html>`;
  2250. // debugger
  2251. // 生成报告
  2252. const link = document.createElement("a");
  2253. let dname = this.sInfo.course + "-" + this.sInfo.sName + ".html";
  2254. // link.download = "报告.html"; // 文件名
  2255. link.download = dname; // 文件名
  2256. link.style.display = "none";
  2257. // 创建文件流
  2258. // 创建bolb实例时,内容一定要放在[]中
  2259. const blob = new Blob([content], {
  2260. type: "text/plain;charset='utf-8'",
  2261. });
  2262. link.href = window.URL.createObjectURL(blob);
  2263. document.body.appendChild(link);
  2264. link.click();
  2265. document.body.removeChild(link);
  2266. },
  2267. },
  2268. mounted() {
  2269. this.$nextTick(function () {
  2270. this.tableHeight =
  2271. window.innerHeight - this.$refs.table.$el.offsetTop - 200;
  2272. if (this.tableHeight <= 530) {
  2273. this.tableHeight = 530;
  2274. }
  2275. // 监听窗口大小变化
  2276. let self = this;
  2277. window.onresize = function () {
  2278. self.tableHeight =
  2279. window.innerHeight - self.$refs.table.$el.offsetTop - 200;
  2280. if (self.tableHeight <= 530) {
  2281. self.tableHeight = 530;
  2282. }
  2283. };
  2284. });
  2285. },
  2286. created() {
  2287. this.page = 1;
  2288. this.selectSDetail();
  2289. this.getProject();
  2290. document.scrollingElement.scrollTop = 0;
  2291. },
  2292. };
  2293. </script>
  2294. <style scoped>
  2295. .eliP {
  2296. overflow: hidden;
  2297. white-space: nowrap;
  2298. text-overflow: ellipsis;
  2299. width: 80%;
  2300. }
  2301. .body_student {
  2302. margin: 0px auto;
  2303. width: 98%;
  2304. height: 100%;
  2305. }
  2306. .student_head {
  2307. width: 100%;
  2308. margin: 0 auto;
  2309. height: 30%;
  2310. background-image: linear-gradient(90deg, #30c499, #75ceba);
  2311. color: #fff;
  2312. }
  2313. .wheel > img,
  2314. .project > img {
  2315. width: 100%;
  2316. height: 100%;
  2317. }
  2318. .box_course {
  2319. display: flex;
  2320. padding: 35px 0 25px 60px;
  2321. align-items: center;
  2322. }
  2323. .wheel {
  2324. width: 210px;
  2325. }
  2326. .right_box {
  2327. display: flex;
  2328. flex-direction: column;
  2329. margin-left: 30px;
  2330. /* justify-content: space-around; */
  2331. }
  2332. .right_box_title {
  2333. font-size: 23px;
  2334. }
  2335. .people {
  2336. display: flex;
  2337. margin: 30px 0 20px 0px;
  2338. }
  2339. .student_body {
  2340. width: 100%;
  2341. margin: 0 auto;
  2342. background: #fff;
  2343. margin-top: 20px;
  2344. padding: 0 0 20px;
  2345. }
  2346. .project {
  2347. width: 100%;
  2348. height: 100%;
  2349. }
  2350. .project_box {
  2351. display: flex;
  2352. width: 100%;
  2353. flex-direction: row;
  2354. flex-wrap: wrap;
  2355. }
  2356. .three_box_inthis {
  2357. display: flex;
  2358. width: 30.33%;
  2359. flex-direction: column;
  2360. align-items: flex-start;
  2361. border: 1px solid #ccc;
  2362. margin: 15px 0 0 15px;
  2363. }
  2364. .projct_nav {
  2365. margin-left: 5px;
  2366. display: flex;
  2367. flex-direction: column;
  2368. flex-wrap: nowrap;
  2369. justify-content: space-around;
  2370. }
  2371. .projct_nav > div {
  2372. margin-bottom: 5px;
  2373. }
  2374. .look_score {
  2375. border-radius: 0px 0px 5px 5px;
  2376. text-align: center;
  2377. background: #41cda6;
  2378. width: 100%;
  2379. height: 35px;
  2380. font-size: 14px;
  2381. color: #fff;
  2382. line-height: 35px;
  2383. cursor: pointer;
  2384. margin-top: 10px;
  2385. }
  2386. .cancelbox {
  2387. position: absolute;
  2388. z-index: 2;
  2389. left: 50%;
  2390. width: 95%;
  2391. transform: translateX(-50%);
  2392. display: flex;
  2393. justify-content: flex-end;
  2394. box-sizing: border-box;
  2395. }
  2396. .student_table >>> .el-table,
  2397. .student_table >>> .el-table__body-wrapper {
  2398. height: auto !important;
  2399. }
  2400. .pb_head>span:nth-child(2) {
  2401. font-size: 16px;
  2402. margin-left: 80px;
  2403. color: #ab582f;
  2404. }
  2405. .pb_head {
  2406. margin: 0 !important;
  2407. width: 100% !important;
  2408. }
  2409. .student_page {
  2410. margin-top: 10px;
  2411. }
  2412. .student_head {
  2413. margin-top: 10px;
  2414. padding-bottom: 15px;
  2415. }
  2416. .student_search {
  2417. display: flex;
  2418. }
  2419. .student_search>div:nth-child(1) {
  2420. line-height: 35px;
  2421. font-size: 14px;
  2422. }
  2423. .student_search>>>.el-input__inner {
  2424. width: 190px;
  2425. height: 35px;
  2426. margin-left: 10px;
  2427. }
  2428. .student_table>>>.el-table--border td {
  2429. border-right: 0px !important;
  2430. }
  2431. .add_work>>>.el-dialog__header {
  2432. padding: 20px 20px 10px;
  2433. text-align: center;
  2434. background: #32455b;
  2435. }
  2436. .add_work>>>.el-dialog__title {
  2437. font-size: 14px !important;
  2438. color: #fff !important;
  2439. }
  2440. .add_work>>>.el-dialog__headerbtn {
  2441. font-size: 20px !important;
  2442. top: 5px !important;
  2443. right: 8px !important;
  2444. }
  2445. .add_work>>>.el-form-item__label {
  2446. margin-left: 65px;
  2447. }
  2448. .add_work>>>.el-form-item {
  2449. display: flex;
  2450. }
  2451. .add_work>>>.el-form-item__content {
  2452. margin: 0 !important;
  2453. }
  2454. .add_work>>>.el-dialog__footer {
  2455. text-align: center !important;
  2456. }
  2457. .add_work>>>.el-dialog {
  2458. min-width: 650px !important;
  2459. width: 1080px;
  2460. }
  2461. .add_work>>>.el-dialog__body {
  2462. background: #fff;
  2463. height: 660px;
  2464. overflow: auto;
  2465. }
  2466. .header-title {
  2467. display: flex;
  2468. }
  2469. .logoImg {
  2470. width: 30px;
  2471. }
  2472. .logoImg>img {
  2473. width: 100%;
  2474. height: 100%;
  2475. }
  2476. .title_add_student {
  2477. margin: 0 auto;
  2478. color: #fff;
  2479. }
  2480. .first {
  2481. margin-top: 25px;
  2482. border-bottom: 1px solid #c5c5c5;
  2483. }
  2484. .one_top {
  2485. display: flex;
  2486. justify-content: space-between;
  2487. }
  2488. .one_top>div:nth-child(1) {
  2489. color: #2490bf;
  2490. font-size: 16px;
  2491. }
  2492. .one_top>button {
  2493. width: 100px;
  2494. background: #24a0a4;
  2495. height: 30px;
  2496. color: #e0e0e0;
  2497. font-size: 13px;
  2498. padding: 0 !important;
  2499. }
  2500. .work_Img {
  2501. width: 150px;
  2502. margin: 10px 0;
  2503. }
  2504. .assess_Img {
  2505. width: 400px;
  2506. margin: 0 auto;
  2507. padding: 15px 0;
  2508. }
  2509. .work_Img>img,
  2510. .assess_Img>img {
  2511. width: 100%;
  2512. height: 100%;
  2513. }
  2514. .work_input {
  2515. border: 1px solid;
  2516. width: 135px;
  2517. height: 20px;
  2518. line-height: 20px;
  2519. font-size: 13px;
  2520. padding: 5px;
  2521. }
  2522. .poetry {
  2523. margin: 10px 0 15px 0;
  2524. }
  2525. .assess {
  2526. background: #169bd5 !important;
  2527. }
  2528. .assess_top {
  2529. border-bottom: 2px solid #eee;
  2530. padding-bottom: 10px;
  2531. }
  2532. .assess_top>div:nth-child(1) {
  2533. color: #2490bf;
  2534. font-size: 16px;
  2535. }
  2536. .student_Answer {
  2537. display: flex;
  2538. margin: 5px 10px;
  2539. /* padding-bottom: 25px; */
  2540. }
  2541. .workName {
  2542. font-size: 18px;
  2543. font-weight: bold;
  2544. margin: 5px 10px;
  2545. }
  2546. .toux {
  2547. width: 35px;
  2548. /* margin: auto 0; */
  2549. height: 35px;
  2550. }
  2551. .toux>img {
  2552. width: 100%;
  2553. height: 100%;
  2554. }
  2555. .nav {
  2556. display: flex;
  2557. flex-wrap: wrap;
  2558. margin-top: 10px;
  2559. flex-direction: column;
  2560. }
  2561. .studentName {
  2562. margin-left: 10px;
  2563. font-size: 13px;
  2564. }
  2565. .studentAnswer {
  2566. font-size: 12px;
  2567. margin: 5px 0 0 10px;
  2568. height: 42px;
  2569. overflow: auto;
  2570. }
  2571. .comment {
  2572. /* margin: 20px 0 0 10px;
  2573. overflow: auto;
  2574. height: 75%;
  2575. max-height: 330px; */
  2576. overflow: auto;
  2577. /* height: 290px; */
  2578. height: 525px;
  2579. background: #fff;
  2580. border-radius: 5px;
  2581. padding: 10px;
  2582. box-sizing: border-box;
  2583. }
  2584. .comment_body {
  2585. height: calc(100% - 25px);
  2586. overflow: auto;
  2587. }
  2588. .comment>.comment_title {
  2589. font-size: 18px;
  2590. }
  2591. .comment>.comment_title>span {
  2592. font-size: 14px;
  2593. }
  2594. .other_Answer {
  2595. display: flex;
  2596. margin: 5px 10px;
  2597. padding: 15px 0;
  2598. justify-content: center;
  2599. }
  2600. .nav {
  2601. margin-left: 5px;
  2602. width: 80%;
  2603. }
  2604. .nameAndTime {
  2605. display: flex;
  2606. }
  2607. .otherName {
  2608. font-weight: bold;
  2609. margin-left: 10px;
  2610. font-size: 13px;
  2611. }
  2612. .time {
  2613. margin-left: 25px;
  2614. font-size: 12px;
  2615. margin-top: 3px;
  2616. }
  2617. .otherAnswer {
  2618. width: 80%;
  2619. word-wrap: break-word;
  2620. word-break: break-all;
  2621. overflow: hidden;
  2622. font-size: 12px;
  2623. margin: 5px 0 0 10px;
  2624. }
  2625. .doingAssess {
  2626. margin: 0 auto;
  2627. width: 300px;
  2628. background: #169bd5;
  2629. height: 35px;
  2630. line-height: 35px;
  2631. border-radius: 3px;
  2632. font-size: 13px;
  2633. text-align: center;
  2634. color: #fff;
  2635. margin-top: 30px;
  2636. cursor: pointer;
  2637. }
  2638. .score_top {
  2639. display: flex;
  2640. margin-bottom: 10px;
  2641. }
  2642. .userTou {
  2643. width: 50px;
  2644. }
  2645. .userTou>img {
  2646. width: 100%;
  2647. height: 100%;
  2648. }
  2649. .score_user_name {
  2650. line-height: 53px;
  2651. margin-left: 15px;
  2652. }
  2653. .course_top {
  2654. display: flex;
  2655. align-items: center;
  2656. }
  2657. .course_top>div:nth-child(1) {
  2658. line-height: 25px;
  2659. }
  2660. .course_top>div:nth-child(2) {
  2661. border: 1px solid #ccc;
  2662. width: 250px;
  2663. text-align: center;
  2664. height: 25px;
  2665. line-height: 25px;
  2666. margin-left: 30px;
  2667. }
  2668. .sd_score {
  2669. font-size: 15px;
  2670. background: #fff;
  2671. height: 100%;
  2672. padding-top: 40px;
  2673. border-radius: 5px;
  2674. width: 90%;
  2675. box-shadow: 2px 2px 5px #909090;
  2676. overflow: auto;
  2677. }
  2678. .sd_score .score_box {
  2679. display: flex;
  2680. align-items: center;
  2681. justify-content: center;
  2682. margin-bottom: 15px;
  2683. /* margin-left: 30px; */
  2684. }
  2685. .sd_score .score_box:last-child {
  2686. margin-bottom: 0;
  2687. }
  2688. .rate_size>>>.el-rate__icon {
  2689. font-size: 25px;
  2690. }
  2691. .rate_size>>>.el-icon-star-off {
  2692. font-size: 22px;
  2693. }
  2694. .sd_score span {
  2695. width: 130px;
  2696. text-align: justify;
  2697. text-align-last: justify;
  2698. display: block;
  2699. margin-right: 20px;
  2700. white-space: nowrap;
  2701. overflow: hidden;
  2702. text-overflow: ellipsis;
  2703. font-size: 16px;
  2704. }
  2705. .moreSay {
  2706. margin: 0px 0 5px 20px;
  2707. }
  2708. .more_say_input {
  2709. margin-left: 20px;
  2710. width: 80%;
  2711. }
  2712. .more_say_input>>>.el-input__inner {
  2713. height: 75px;
  2714. font-size: 13px;
  2715. padding: 0 0 0 10px;
  2716. }
  2717. .assess_right {
  2718. width: 200px;
  2719. background: #82b0ee;
  2720. color: #fff;
  2721. text-align: center;
  2722. height: 30px;
  2723. line-height: 30px;
  2724. border-radius: 5px;
  2725. margin: 0 auto;
  2726. margin-top: 20px;
  2727. font-size: 13px;
  2728. cursor: pointer;
  2729. }
  2730. .student_page {
  2731. margin-top: 10px;
  2732. }
  2733. .display {
  2734. display: none;
  2735. }
  2736. .firstTop {
  2737. background: #fff;
  2738. display: flex;
  2739. margin-bottom: 15px;
  2740. flex-direction: column;
  2741. align-items: flex-start;
  2742. height: 90px;
  2743. padding: 10px 25px;
  2744. border-radius: 5px;
  2745. width: 90%;
  2746. box-shadow: 2px 2px 5px #909090;
  2747. }
  2748. .talkScore>>>.el-dialog__body {
  2749. background: #efefef;
  2750. margin: 0 !important;
  2751. }
  2752. .lastTop {
  2753. background: #fff;
  2754. border-radius: 5px;
  2755. width: 98%;
  2756. height: 120px;
  2757. box-shadow: 2px 2px 5px #909090;
  2758. }
  2759. .left,
  2760. .right {
  2761. /* background: #fff; */
  2762. border-radius: 5px;
  2763. /* padding: 10px; */
  2764. box-sizing: border-box;
  2765. }
  2766. .left {
  2767. margin-right: 10px;
  2768. width: 30%;
  2769. min-height: 425px;
  2770. }
  2771. /* .left .left_top {
  2772. background: #fff;
  2773. padding: 10px;
  2774. border-radius: 5px;
  2775. margin-bottom: 15px;
  2776. } */
  2777. .left .left_bottom {
  2778. background: #fff;
  2779. padding: 10px;
  2780. border-radius: 5px;
  2781. height: 160px;
  2782. }
  2783. .right {
  2784. width: 20%;
  2785. background: none;
  2786. padding: 0;
  2787. }
  2788. .courseTitle {
  2789. font-size: 16px;
  2790. color: #7c7c7c;
  2791. width: 100%;
  2792. margin-bottom: 10px;
  2793. display: flex;
  2794. justify-content: space-between;
  2795. align-items: center;
  2796. }
  2797. .course_t {
  2798. font-size: 19px;
  2799. display: flex;
  2800. align-items: flex-end;
  2801. }
  2802. .course_t span:nth-child(2) {
  2803. font-size: 16px;
  2804. margin-left: 10px;
  2805. }
  2806. /* .courseTitle span:nth-child(2) { */
  2807. /* font-size: 14px;
  2808. cursor: pointer; */
  2809. /* } */
  2810. .bigImg {
  2811. margin-top: 10px;
  2812. /* height: 300px; */
  2813. height: 150px;
  2814. }
  2815. .bigImg>img,
  2816. .thumbnail>div>img {
  2817. width: 100%;
  2818. height: 100%;
  2819. object-fit: contain;
  2820. }
  2821. .thumbnail {
  2822. display: flex;
  2823. flex-direction: row;
  2824. justify-content: flex-start;
  2825. margin: 5px 0 8px;
  2826. overflow-x: auto;
  2827. overflow-y: hidden;
  2828. }
  2829. .isClick {
  2830. border: 3px solid #5f89d4;
  2831. border-radius: 5px;
  2832. }
  2833. .thumbnail>div {
  2834. width: 80px;
  2835. height: 80px;
  2836. margin-right: 5px;
  2837. cursor: pointer;
  2838. flex-shrink: 0;
  2839. box-sizing: border-box;
  2840. }
  2841. .zyBoxC {
  2842. background: #ededed;
  2843. display: flex;
  2844. align-items: flex-start;
  2845. justify-content: center;
  2846. padding: 20px 0px;
  2847. flex-direction: column;
  2848. height: calc(100% - 50px);
  2849. }
  2850. .zyBox {
  2851. display: flex;
  2852. min-width: 600px;
  2853. width: 600px;
  2854. position: relative;
  2855. background: #fff;
  2856. flex-direction: column;
  2857. flex-wrap: nowrap;
  2858. align-items: flex-start;
  2859. overflow: hidden;
  2860. }
  2861. .zyBoxC+.zyBoxC {
  2862. margin-top: 10px;
  2863. }
  2864. .rbButtom {
  2865. position: absolute;
  2866. bottom: 0;
  2867. right: 0;
  2868. background: #06a7ff;
  2869. width: 100px;
  2870. height: 30px;
  2871. border-radius: 5px;
  2872. text-align: center;
  2873. color: #fff;
  2874. line-height: 30px;
  2875. font-size: 14px;
  2876. cursor: pointer;
  2877. right: 10px;
  2878. }
  2879. .bigImg>>>.vjs-tech,
  2880. .bigImg>>>.video-js {
  2881. height: 300px !important;
  2882. }
  2883. .el-table>>>.even_row {
  2884. background-color: #f1f1f1;
  2885. }
  2886. .data_body {
  2887. height: 200px;
  2888. display: flex;
  2889. position: relative;
  2890. border-radius: 5px;
  2891. box-sizing: border-box;
  2892. width: 100%;
  2893. background: #fff;
  2894. }
  2895. .data_body .title {
  2896. position: absolute;
  2897. top: 10px;
  2898. left: 10px;
  2899. }
  2900. .dialog_diy>>>.el-dialog__header {
  2901. padding: 9px 20px 10px;
  2902. background: #32455b !important;
  2903. }
  2904. .dialog_diy>>>.el-dialog__title {
  2905. color: #fff;
  2906. font-size: 15px;
  2907. }
  2908. .dialog_diy>>>.el-dialog__headerbtn {
  2909. top: 14px;
  2910. }
  2911. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
  2912. color: #fff;
  2913. }
  2914. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
  2915. color: #fff;
  2916. }
  2917. .dialog_diy>>>.el-dialog__body,
  2918. .dialog_diy>>>.el-dialog__footer {
  2919. background: #fafafa;
  2920. }
  2921. .max_diy>>>.el-dialog {
  2922. /* max-width: 1200px; */
  2923. max-width: 1300px;
  2924. /* height:800px */
  2925. }
  2926. .max_diy>>>.el-dialog__body {
  2927. height: 800px;
  2928. }
  2929. .dialog_diy2>>>.el-dialog__header {
  2930. padding: 9px 20px 10px;
  2931. background: #32455b !important;
  2932. }
  2933. .dialog_diy2>>>.el-dialog__title {
  2934. color: #fff;
  2935. font-size: 15px;
  2936. }
  2937. .dialog_diy2>>>.el-dialog__headerbtn {
  2938. top: 12px;
  2939. }
  2940. .dialog_diy2>>>.el-dialog__headerbtn .el-dialog__close {
  2941. color: #fff;
  2942. }
  2943. .dialog_diy2>>>.el-dialog__headerbtn .el-dialog__close:hover {
  2944. color: #fff;
  2945. }
  2946. .dialog_diy2>>>.el-dialog__body,
  2947. .dialog_diy2>>>.el-dialog__footer {
  2948. background: #ededed;
  2949. padding: 15px 20px;
  2950. box-sizing: border-box
  2951. }
  2952. .a_addBox2 {
  2953. margin: 10px 0;
  2954. background: #fff;
  2955. padding: 15px;
  2956. }
  2957. .a_addBox {
  2958. margin: 10px 0;
  2959. background: #fff;
  2960. padding: 15px;
  2961. /* max-height: 400px; */
  2962. max-height: 160px;
  2963. overflow: auto;
  2964. }
  2965. .a_add_box {
  2966. border-bottom: 2px solid #eee;
  2967. padding-bottom: 10px;
  2968. }
  2969. .a_add_head {
  2970. display: flex;
  2971. align-items: center;
  2972. justify-content: space-between;
  2973. margin: 10px 0;
  2974. font-size: 18px;
  2975. }
  2976. .a_add_head .a_add_head_input {
  2977. width: 300px;
  2978. }
  2979. .a_add_head .a_add_head_div {
  2980. display: flex;
  2981. align-items: center;
  2982. justify-content: space-between;
  2983. }
  2984. .a_add_body {
  2985. display: flex;
  2986. align-items: center;
  2987. }
  2988. .a_add_input {
  2989. display: flex;
  2990. align-items: center;
  2991. flex-wrap: wrap;
  2992. /* flex-direction: column; */
  2993. /* width: 100%; */
  2994. }
  2995. .a_add_input>>>el-radio-group {
  2996. margin: 10px 0;
  2997. }
  2998. .a_add_input>>>.el-radio-group {
  2999. display: flex;
  3000. flex-direction: row;
  3001. flex-wrap: wrap;
  3002. }
  3003. .redioStyle>>>.el-radio__label {
  3004. font-size: 18px;
  3005. }
  3006. .task_title {
  3007. font-size: 18px;
  3008. font-weight: 700;
  3009. }
  3010. /* .ask_Answer { */
  3011. /* margin-top: 10px; */
  3012. /* } */
  3013. .ask_Answer_title {
  3014. font-size: 18px;
  3015. }
  3016. .ask_Answer_content {
  3017. display: flex;
  3018. justify-content: center;
  3019. margin: 10px 0;
  3020. }
  3021. .answer_body {
  3022. padding: 10px 0;
  3023. border-bottom: 1px solid #f5f5f5;
  3024. }
  3025. .answer_title {
  3026. font-size: 15px;
  3027. font-weight: 700;
  3028. }
  3029. .answer_content {
  3030. margin-top: 5px;
  3031. }
  3032. .ask_body {
  3033. display: flex;
  3034. font-size: 16px;
  3035. margin-top: 10px;
  3036. flex-direction: column;
  3037. height: 130px;
  3038. overflow: auto;
  3039. /* padding: 0 10px; */
  3040. box-sizing: border-box;
  3041. }
  3042. .ask_body div {
  3043. /* cursor: pointer; */
  3044. display: flex;
  3045. align-items: center;
  3046. justify-content: space-between;
  3047. }
  3048. .ask_body div .btn {
  3049. cursor: pointer;
  3050. color: #fff;
  3051. background-color: #409eff;
  3052. text-align: center;
  3053. font-size: 12px;
  3054. padding: 6px 12px;
  3055. box-sizing: border-box;
  3056. border-radius: 5px;
  3057. width: 60px;
  3058. }
  3059. .ask_body div span:nth-child(1) {
  3060. max-width: 250px;
  3061. white-space: nowrap;
  3062. overflow: hidden;
  3063. text-overflow: ellipsis;
  3064. }
  3065. .ask_body div+div {
  3066. margin-top: 10px;
  3067. }
  3068. .work_nopicture {
  3069. display: flex;
  3070. justify-content: center;
  3071. align-items: center;
  3072. /* height: 350px; */
  3073. height: 352px;
  3074. }
  3075. .student_table>>>.el-table,
  3076. .student_table>>>.el-table__body-wrapper {
  3077. height: auto !important;
  3078. }
  3079. .tx {
  3080. width: 35px;
  3081. }
  3082. .ech {
  3083. width: 100px;
  3084. }
  3085. .tx>img,
  3086. .ech>img {
  3087. width: 100%;
  3088. height: 100%;
  3089. }
  3090. .txName {
  3091. display: flex;
  3092. flex-direction: row;
  3093. align-items: center;
  3094. margin-left: 10px;
  3095. }
  3096. .txName>div:nth-child(2) {
  3097. margin-left: 10px;
  3098. }
  3099. .top {
  3100. display: flex;
  3101. justify-content: space-between;
  3102. padding: 15px 0 15px 20px;
  3103. flex-direction: row;
  3104. flex-wrap: nowrap;
  3105. width: 95%;
  3106. }
  3107. .jdName>div:nth-child(1) {
  3108. font-size: 20px;
  3109. font-weight: bold;
  3110. }
  3111. .taskName {
  3112. font-size: 14px;
  3113. margin-top: 10px;
  3114. display: flex;
  3115. flex-direction: row;
  3116. align-items: center;
  3117. }
  3118. .task {
  3119. background: #49a0f0;
  3120. color: #fff;
  3121. width: 50px;
  3122. height: 22px;
  3123. border-radius: 5px;
  3124. text-align: center;
  3125. line-height: 22px;
  3126. margin-right: 10px;
  3127. }
  3128. .contentBox {
  3129. width: 100%;
  3130. display: flex;
  3131. flex-direction: row;
  3132. flex-wrap: nowrap;
  3133. align-items: flex-start;
  3134. height: 253px;
  3135. }
  3136. .left_top {
  3137. width: 45%;
  3138. padding-left: 20px;
  3139. }
  3140. .right_top {
  3141. width: 53%;
  3142. }
  3143. .cBox {
  3144. display: flex;
  3145. flex-direction: row;
  3146. flex-wrap: nowrap;
  3147. align-items: flex-start;
  3148. width: 100%;
  3149. height: calc(100% - 60px);
  3150. overflow: auto;
  3151. }
  3152. .right_score {
  3153. min-width: 370px;
  3154. height: 351px;
  3155. margin-left: 10px;
  3156. }
  3157. .pb_left {
  3158. width: 20%;
  3159. margin-right: 10px;
  3160. background: rgb(255, 255, 255);
  3161. /* padding-right: 10px; */
  3162. /* height: 500px; */
  3163. height: 100%;
  3164. }
  3165. .cTitle {
  3166. background: #205cc6;
  3167. width: 85%;
  3168. margin: 10px auto;
  3169. height: 50px;
  3170. color: #fff;
  3171. line-height: 50px;
  3172. text-align: center;
  3173. font-size: 20px;
  3174. font-weight: bold;
  3175. border-radius: 5px;
  3176. cursor: pointer;
  3177. white-space: nowrap;
  3178. overflow: hidden;
  3179. text-overflow: ellipsis;
  3180. padding: 0 10px;
  3181. }
  3182. .ml {
  3183. margin-left: 20px;
  3184. color: #5b7dba;
  3185. border-left: 3px solid #5b7dba;
  3186. padding-left: 5px;
  3187. font-weight: bold;
  3188. }
  3189. .cru_selectBox {
  3190. width: 100%;
  3191. margin: 0 auto;
  3192. overflow: auto;
  3193. height: calc(100% - 90px);
  3194. overflow-x: hidden;
  3195. }
  3196. .cru_selectBox::-webkit-scrollbar {
  3197. /*滚动条整体样式*/
  3198. width: 6px;
  3199. /*高宽分别对应横竖滚动条的尺寸*/
  3200. height: 6px;
  3201. }
  3202. /*定义滚动条轨道 内阴影+圆角*/
  3203. .cru_selectBox::-webkit-scrollbar-track {
  3204. border-radius: 10px;
  3205. background-color: #b8bdc9;
  3206. }
  3207. /*定义滑块 内阴影+圆角*/
  3208. .cru_selectBox::-webkit-scrollbar-thumb {
  3209. border-radius: 10px;
  3210. -webkit-box-shadow: inset 0 0 6px rgb(96, 125, 184);
  3211. background-color: #2c5ab3;
  3212. }
  3213. .blue_box_one {
  3214. text-align: center;
  3215. color: #fff;
  3216. background-image: linear-gradient(90deg, #477cd7, #65b9fc);
  3217. border-radius: 7px;
  3218. margin: 10px auto;
  3219. cursor: pointer;
  3220. width: 95%;
  3221. height: 45px;
  3222. display: flex;
  3223. flex-direction: row;
  3224. justify-content: flex-start;
  3225. align-items: center;
  3226. }
  3227. .blue_box_one>div:nth-child(1) {
  3228. line-height: 30px;
  3229. margin: 0 5px 0 10px;
  3230. width: 30%;
  3231. min-width: 70px;
  3232. border-radius: 4px;
  3233. }
  3234. .blue_box_one>div:nth-child(2) {
  3235. white-space: nowrap;
  3236. text-overflow: ellipsis;
  3237. overflow: hidden;
  3238. word-break: break-all;
  3239. width: 70%;
  3240. text-align: left;
  3241. margin-right: 10px;
  3242. max-width: calc(100% - 85px);
  3243. }
  3244. .blue_box_one>div:nth-child(2):hover {
  3245. overflow: hidden;
  3246. text-overflow: ellipsis;
  3247. white-space: nowrap;
  3248. cursor: pointer;
  3249. }
  3250. .twoChild {
  3251. width: 95%;
  3252. margin: 10px auto;
  3253. border-radius: 5px;
  3254. background: #f2f2f2;
  3255. display: flex;
  3256. flex-direction: column;
  3257. flex-wrap: nowrap;
  3258. justify-content: flex-start;
  3259. align-items: flex-start;
  3260. transition: all 0.5s;
  3261. overflow: hidden;
  3262. height: 0;
  3263. background: #e7f3ff;
  3264. }
  3265. .twoChild>div:nth-child(1) {
  3266. margin-top: 5px;
  3267. }
  3268. .navChild {
  3269. width: 100%;
  3270. cursor: pointer;
  3271. margin-bottom: 10px;
  3272. }
  3273. .navActive {
  3274. height: auto;
  3275. }
  3276. .navTask {
  3277. display: flex;
  3278. flex-direction: row;
  3279. flex-wrap: nowrap;
  3280. align-items: center;
  3281. align-content: flex-start;
  3282. height: 40px;
  3283. justify-content: flex-start;
  3284. padding: 0 10px;
  3285. width: 100%;
  3286. box-sizing: border-box;
  3287. }
  3288. .vedioNav {
  3289. margin: 10px 0 0 15px;
  3290. border-bottom: 1px solid #d7d7d7;
  3291. padding-bottom: 5px;
  3292. background: #96d1ff;
  3293. width: 55px;
  3294. min-width: 55px;
  3295. border-radius: 5px;
  3296. color: #fff;
  3297. text-align: center;
  3298. height: 20px;
  3299. line-height: 26px;
  3300. font-size: 14px;
  3301. }
  3302. .navTaskname {
  3303. white-space: nowrap;
  3304. text-overflow: ellipsis;
  3305. overflow: hidden;
  3306. word-break: break-all;
  3307. padding-left: 5px;
  3308. }
  3309. .allBox {
  3310. display: flex;
  3311. flex-direction: row;
  3312. flex-wrap: nowrap;
  3313. align-items: flex-start;
  3314. width: 100%;
  3315. height: 351px;
  3316. margin-bottom: 20px;
  3317. }
  3318. .shuBox {
  3319. display: flex;
  3320. flex-direction: column;
  3321. flex-wrap: nowrap;
  3322. align-items: center;
  3323. width: 100%;
  3324. flex-wrap: nowrap;
  3325. overflow: auto;
  3326. /* height: 500px; */
  3327. height: 100%;
  3328. }
  3329. .answerbox {
  3330. display: flex;
  3331. flex-direction: row;
  3332. /* align-items: center; */
  3333. margin-bottom: 20px;
  3334. font-size: 18px;
  3335. font-weight: bold;
  3336. }
  3337. .answerbox>div:nth-child(2) {
  3338. margin-left: 15px;
  3339. }
  3340. .answerbox1 {
  3341. display: flex;
  3342. flex-direction: column;
  3343. align-items: flex-start;
  3344. flex-wrap: nowrap;
  3345. font-size: 16px;
  3346. }
  3347. .answerbox1>div:nth-child(2) {
  3348. margin-top: 10px;
  3349. width: 265px;
  3350. max-height: 147px;
  3351. overflow: auto;
  3352. }
  3353. .jdName {
  3354. width: 100%;
  3355. }
  3356. .full_diy>>>.el-dialog {
  3357. margin: 0 !important;
  3358. height: 100%;
  3359. }
  3360. .full_diy>>>.el-dialog__body {
  3361. height: calc(100% - 100px);
  3362. }
  3363. .openTaskActive {
  3364. color: #4386e6;
  3365. }
  3366. .isClick {
  3367. background: #4d9def;
  3368. }
  3369. .buttonCss {
  3370. width: 100%;
  3371. display: flex;
  3372. flex-direction: row;
  3373. flex-wrap: nowrap;
  3374. justify-content: flex-end;
  3375. margin: 10px 0;
  3376. }
  3377. .fullStyle>>>.el-dialog__body {
  3378. height: calc(100% - 40px) !important;
  3379. overflow: auto;
  3380. }
  3381. .fullStyle>>>.el-dialog,
  3382. .fullStyle {
  3383. width: 100% !important;
  3384. max-width: 100% !important;
  3385. height: 100% !important;
  3386. margin: 0 !important;
  3387. overflow: hidden;
  3388. }
  3389. .worksTime {
  3390. position: absolute;
  3391. top: 10px;
  3392. right: 0;
  3393. display: flex;
  3394. flex-direction: row;
  3395. flex-wrap: nowrap;
  3396. align-items: baseline;
  3397. }
  3398. /* .fullBox { */
  3399. /* overflow: unset !important;
  3400. height: auto !important; */
  3401. /* } */
  3402. .fullZyBox {
  3403. width: 60% !important;
  3404. }
  3405. .rightScoreFullBox {
  3406. width: 40%;
  3407. }
  3408. .titBri {
  3409. height: 60px;
  3410. display: flex;
  3411. align-items: center;
  3412. justify-content: space-between;
  3413. position: sticky;
  3414. top: 0;
  3415. }
  3416. .claInfo {
  3417. display: flex;
  3418. align-items: center;
  3419. margin-left: 10px;
  3420. }
  3421. .claInfo span {
  3422. margin-left: 10px;
  3423. }
  3424. .claInfo img {
  3425. width: 35px;
  3426. border-radius: 50%;
  3427. }
  3428. .toolEListCon {
  3429. width: 100%;
  3430. /* display: flex; */
  3431. /* justify-content: space-between; */
  3432. /* flex-shrink: 1; */
  3433. }
  3434. .JSCo {
  3435. position: absolute;
  3436. top: 10px;
  3437. right: 10px;
  3438. display: flex;
  3439. flex-direction: column;
  3440. align-items: flex-start;
  3441. }
  3442. .JSCoTxt {
  3443. width: 300px;
  3444. overflow: hidden;
  3445. white-space: nowrap;
  3446. text-overflow: ellipsis;
  3447. }
  3448. .pageCon {
  3449. display: flex;
  3450. height: calc(100% - 60px);
  3451. padding-bottom: 30px;
  3452. box-sizing: border-box;
  3453. }
  3454. .rightBar {
  3455. margin-right: 20px;
  3456. border-radius: 10px;
  3457. height: 100%;
  3458. width: 270px;
  3459. overflow: hidden;
  3460. background-color: #ffffff;
  3461. }
  3462. .workCon {
  3463. display: flex;
  3464. height: 100%;
  3465. flex: 1;
  3466. min-width: 600px;
  3467. overflow-y: auto;
  3468. overflow-x: hidden;
  3469. border-radius: 10px;
  3470. }
  3471. .coverPage {
  3472. height: 743px;
  3473. background-color: #ccc;
  3474. position: relative;
  3475. }
  3476. .coverPageLogo {
  3477. padding: 10px;
  3478. width: 100%;
  3479. display: flex;
  3480. justify-content: flex-end;
  3481. box-sizing: border-box;
  3482. margin-bottom: 30px;
  3483. }
  3484. .coverPageFrom {
  3485. display: flex;
  3486. flex-direction: column;
  3487. align-items: center;
  3488. width: 70%;
  3489. margin: 0 auto;
  3490. }
  3491. .coverPageFromTit {
  3492. font-size: 48px;
  3493. color: rgba(58, 59, 152, 1);
  3494. font-weight: 600;
  3495. }
  3496. .fromCss {
  3497. border: 1.5px dashed rgba(158, 208, 255, 1);
  3498. border-radius: 16px;
  3499. background-color: #fff;
  3500. padding: 24px 32px;
  3501. width: 300px;
  3502. color: rgba(35, 99, 205, 1);
  3503. }
  3504. .fromCss > div {
  3505. margin-bottom: 10px;
  3506. display: flex;
  3507. }
  3508. .fromCss > div > span {
  3509. flex-shrink: 0;
  3510. margin-right: 5px;
  3511. font-size: 16px;
  3512. }
  3513. .fromCss > div:last-child {
  3514. margin-bottom: 0;
  3515. }
  3516. .txt {
  3517. width: 100%;
  3518. border-bottom: 1px solid rgba(192, 210, 229, 1);
  3519. text-align: center;
  3520. color: #000;
  3521. }
  3522. .coverPageCon {
  3523. background-color: #e3edfe;
  3524. display: flex;
  3525. width: 100%;
  3526. flex-direction: column;
  3527. align-items: center;
  3528. /* padding: 0 30px; */
  3529. box-sizing: border-box;
  3530. }
  3531. .stageCon {
  3532. background-color: #fff;
  3533. padding: 15px 20px;
  3534. box-sizing: border-box;
  3535. margin-bottom: 10px;
  3536. border-radius: 8px;
  3537. width: 100%;
  3538. }
  3539. .a_addBox {
  3540. margin: 10px 0;
  3541. background: #fff;
  3542. padding: 0 15px;
  3543. /* max-height: 400px; */
  3544. /* max-height: 160px; */
  3545. /* overflow: auto; */
  3546. }
  3547. .redioStyle >>> .el-radio__label {
  3548. font-size: 18px;
  3549. }
  3550. .redioStyle5 >>> .el-radio__label {
  3551. font-size: 14px;
  3552. color: #06a7ff !important;
  3553. }
  3554. .redioStyle2 >>> .el-radio__label {
  3555. font-size: 14px;
  3556. }
  3557. .redioStyle3 >>> .el-checkbox__label {
  3558. font-size: 14px;
  3559. color: #06a7ff !important;
  3560. }
  3561. .redioStyle4 >>> .el-checkbox__label {
  3562. font-size: 14px;
  3563. }
  3564. .redioStyle4 >>> .el-checkbox-group {
  3565. margin: 0 5px;
  3566. }
  3567. .redioStyle3 >>> .el-checkbox-group {
  3568. margin: 0 5px;
  3569. }
  3570. .sortTool {
  3571. padding: 1px 3px;
  3572. border: 2px #5d89c4 solid;
  3573. margin: 0 5px;
  3574. min-width: 20px;
  3575. border-radius: 5px;
  3576. text-align: center;
  3577. }
  3578. /* table 样式 */
  3579. .cont /deep/ table {
  3580. border-top: 1px solid #ccc;
  3581. border-left: 1px solid #ccc;
  3582. }
  3583. .cont /deep/ table td,
  3584. .cont /deep/ table th {
  3585. border-bottom: 1px solid #ccc;
  3586. border-right: 1px solid #ccc;
  3587. padding: 15px 5px;
  3588. max-width: 0px;
  3589. }
  3590. .cont /deep/ table th {
  3591. border-bottom: 2px solid #ccc;
  3592. text-align: center;
  3593. }
  3594. .score_boxTit > span {
  3595. border-left: 3px solid rgba(54, 129, 252, 1);
  3596. padding-left: 5px;
  3597. }
  3598. .score_boxTit {
  3599. /* padding: 0 30px; */
  3600. box-sizing: border-box;
  3601. font-size: 14px;
  3602. font-weight: 600;
  3603. color: rgba(0, 0, 0, 0.9);
  3604. }
  3605. .inImg {
  3606. width: 100px;
  3607. }
  3608. .inImg > img {
  3609. width: 100%;
  3610. height: 100%;
  3611. object-fit: cover;
  3612. }
  3613. .radioBox {
  3614. display: flex;
  3615. flex-direction: column;
  3616. }
  3617. .radioBox >>> .el-radio {
  3618. display: flex;
  3619. align-items: center;
  3620. margin: 5px;
  3621. }
  3622. .radioBox >>> .el-checkbox {
  3623. display: flex;
  3624. align-items: center;
  3625. margin: 5px;
  3626. }
  3627. .RootImgBlock {
  3628. width: 60%;
  3629. font-size: 12px;
  3630. }
  3631. .RootImgBlockSy {
  3632. /* width: 300px; */
  3633. white-space: nowrap;
  3634. overflow: hidden;
  3635. font-size: 12px;
  3636. text-overflow: ellipsis;
  3637. }
  3638. .score_box {
  3639. font-size: 14px !important;
  3640. margin-bottom: 15px;
  3641. margin: 5px 0;
  3642. width: 100%;
  3643. display: flex;
  3644. justify-content: space-between;
  3645. align-items: center;
  3646. }
  3647. .score_box:last-child {
  3648. margin-bottom: 0;
  3649. }
  3650. .worksTarget {
  3651. border-left: 3px solid rgba(54, 129, 252, 1);
  3652. font-size: 14px;
  3653. font-weight: 600;
  3654. color: rgba(0, 0, 0, 0.9);
  3655. }
  3656. .worksTarget > span {
  3657. margin-left: 5px;
  3658. }
  3659. .worksTargetCon {
  3660. background-color: #fff;
  3661. padding: 10px;
  3662. margin-top: 10px;
  3663. border-radius: 8px;
  3664. box-sizing: border-box;
  3665. font-size: 12px;
  3666. }
  3667. .worksTargetCon > div {
  3668. margin-bottom: 10px;
  3669. }
  3670. .worksTargetCon > div:last-child {
  3671. margin: 0 !important;
  3672. }
  3673. .stageTit {
  3674. text-align: left;
  3675. font-weight: 600;
  3676. font-size: 20px;
  3677. margin-bottom: 20px;
  3678. color: rgba(242, 161, 75, 1);
  3679. border-left: 5px rgba(242, 161, 75, 1) solid;
  3680. padding-left: 5px;
  3681. }
  3682. .taskTitInd {
  3683. font-size: 14px;
  3684. }
  3685. .TitBti {
  3686. background-color: rgba(242, 161, 75, 1);
  3687. color: #fff;
  3688. padding: 3px 5px;
  3689. border-radius: 4px;
  3690. margin-right: 5px;
  3691. box-sizing: border-box;
  3692. font-size: 12px;
  3693. height: 22px;
  3694. line-height: 16px;
  3695. text-align: center;
  3696. }
  3697. .taskTitInd span:nth-child(2) {
  3698. color: rgba(0, 0, 0, 0.9);
  3699. font-weight: 600;
  3700. }
  3701. .taskBri {
  3702. width: 100%;
  3703. background-color: rgba(253, 247, 243, 1);
  3704. padding: 10px 12px;
  3705. line-height: 20px;
  3706. box-sizing: border-box;
  3707. font-weight: PingFang SC;
  3708. font-size: 12px;
  3709. font-weight: 400;
  3710. border-radius: 4px;
  3711. }
  3712. .toolBlk {
  3713. display: flex;
  3714. height: 44px;
  3715. /* padding-left: 5px; */
  3716. box-sizing: border-box;
  3717. margin: 15px 0;
  3718. }
  3719. .toolImg{
  3720. background-color: bisque;
  3721. }
  3722. .toolBlk img {
  3723. height: 100%;
  3724. margin-right: 8px;
  3725. }
  3726. .toolTit {
  3727. display: flex;
  3728. flex-direction: column;
  3729. justify-content: space-around;
  3730. }
  3731. .toolTit div:nth-child(1) {
  3732. font-family: PingFang SC;
  3733. font-size: 14px;
  3734. font-weight: 600;
  3735. text-align: left;
  3736. color: rgba(0, 0, 0, 0.9);
  3737. margin-right: 10px;
  3738. }
  3739. .toolTit div:nth-child(2) {
  3740. font-family: PingFang SC;
  3741. font-size: 10px;
  3742. font-weight: 400;
  3743. text-align: left;
  3744. color: rgba(0, 0, 0, 0.9);
  3745. }
  3746. .answerTxt {
  3747. font-size: 12px;
  3748. color: rgba(0, 0, 0, 0.6);
  3749. font-weight: 400;
  3750. line-height: 30px;
  3751. padding: 0 10px;
  3752. }
  3753. .taskSco {
  3754. background-color: rgba(253, 247, 243, 1);
  3755. border-radius: 8px;
  3756. padding: 10px 15px;
  3757. box-sizing: border-box;
  3758. margin: 10px 0 20px;
  3759. }
  3760. .taskScoTit {
  3761. display: flex;
  3762. justify-content: space-between;
  3763. margin: 0 0 20px;
  3764. }
  3765. .taskScoTit div:nth-child(1) {
  3766. color: rgba(0, 0, 0, 0.9);
  3767. font-family: PingFang SC;
  3768. font-size: 14px;
  3769. font-weight: 600;
  3770. text-align: left;
  3771. }
  3772. .taskScoTit div:nth-child(2) {
  3773. color: rgba(0, 0, 0, 0.6);
  3774. font-family: PingFang SC;
  3775. font-size: 12px;
  3776. font-weight: 400;
  3777. }
  3778. .taskScoCon {
  3779. display: flex;
  3780. justify-content: space-between;
  3781. }
  3782. .taskScoConEList {
  3783. justify-content: space-between;
  3784. display: flex;
  3785. flex: 1;
  3786. }
  3787. .taskScoConEList >>>.rate_size[data-v-8d4152bc] .el-rate__icon{
  3788. font-size: 18px;
  3789. }
  3790. .taskScoConTit {
  3791. text-align: left;
  3792. font-weight: 600;
  3793. font-size: 12px;
  3794. margin-bottom: 10px;
  3795. color: rgba(0, 0, 0, 0.9);
  3796. border-left: 5px rgba(242, 161, 75, 1) solid;
  3797. padding-left: 5px;
  3798. }
  3799. .WorkCon {
  3800. background-color: rgba(255, 255, 255, 0.9);
  3801. padding: 8px;
  3802. box-sizing: border-box;
  3803. border-radius: 8px;
  3804. font-family: PingFang SC;
  3805. font-size: 12px;
  3806. line-height: 20px;
  3807. font-weight: 400;
  3808. flex: 1;
  3809. }
  3810. .WorkConSY {
  3811. background-color: rgba(255, 255, 255, 0.9);
  3812. padding: 8px;
  3813. box-sizing: border-box;
  3814. border-radius: 8px;
  3815. font-family: PingFang SC;
  3816. font-size: 12px;
  3817. font-weight: 400;
  3818. width: 100%;
  3819. flex: 1;
  3820. }
  3821. .WorkConSY div {
  3822. margin-bottom: 8px;
  3823. }
  3824. .WorkConSY div:last-child {
  3825. margin-bottom: 0;
  3826. }
  3827. .item {
  3828. margin: 4px;
  3829. }
  3830. </style>