studyStudentGM.vue 289 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003
  1. <template>
  2. <div class="pb_content" style="overflow: unset">
  3. <div class="pb_content_body" style="display: flex; height: 900px; position: relative">
  4. <div class="pb_left">
  5. <!-- <div class="courseTitle">{{ courseDetail.title }}</div> -->
  6. <el-tooltip class="courseTitle" effect="light" :content="courseDetail.title" placement="top">
  7. <div>{{ courseDetail.title }}</div>
  8. </el-tooltip>
  9. <div class="ml">目录</div>
  10. <div class="cru_selectBox">
  11. <div v-for="(item, stageIndex) in navList" :key="stageIndex">
  12. <div class="blue_box_one" @click="get(stageIndex)">
  13. <div>第{{ stageIndex + 1 }}阶段</div>
  14. <div>{{ item.dyName }}</div>
  15. </div>
  16. <div class="twoChild" :class="{ navActive: item.isOpen }">
  17. <div class="navChild" v-for="(nav, navIndex) in item.task" :key="navIndex">
  18. <div class="navTask" @click="openTask(stageIndex, navIndex, nav.id)" :class="{
  19. openTaskActive:
  20. navIndex == taskCount &&
  21. nav.id == navId &&
  22. stageIndex == courseType,
  23. }">
  24. <div class="vedioNav" :class="{
  25. isClick:
  26. navIndex == taskCount &&
  27. nav.id == navId &&
  28. stageIndex == courseType,
  29. }" style="margin: 0">
  30. 任务{{ navIndex + 1 }}
  31. </div>
  32. <el-tooltip class="navTaskname item" effect="light" :content="nav.taskName" placement="top">
  33. <div :style="{
  34. width:
  35. IsLookOpen && !nav.isLook
  36. ? 'calc(100% - 75px)'
  37. : 'auto',
  38. }">
  39. {{ nav.taskName }}
  40. </div>
  41. </el-tooltip>
  42. <img src="@/assets/lock.png" v-if="IsLookOpen && !nav.isLook" alt="" />
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. <div class="body_student">
  50. <div class="new_top" style="
  51. position: fixed;
  52. top: 0;
  53. left: 20.7%;
  54. width: 80%;
  55. z-index: 999;
  56. box-shadow: 0px 9px 0 0 #f2f2f2;
  57. ">
  58. <div class="courseIndex">
  59. <div>第{{ courseType - 0 + 1 }}阶段</div>
  60. <el-tooltip effect="light" :content="chapInfoList[courseType].dyName" placement="top">
  61. <div>{{ chapInfoList[courseType].dyName }}</div>
  62. </el-tooltip>
  63. <div>任务{{ taskCount + 1 }}</div>
  64. </div>
  65. <div class="btnAll">
  66. <div class="returnBtn" @click="nextOrpreSteps(0)">上一步</div>
  67. <div class="returnBtn" @click="nextOrpreSteps(1)">下一步</div>
  68. <!-- <div class="returnBtn" @click="allScrell">全屏</div> -->
  69. <div class="returnBtn" @click="startRecording" v-if="(!videoStart && tType == 1 || tType == 4)">开始录制</div>
  70. <div class="returnBtn" @click="stopRecording" v-else-if="(tType == 1 || tType == 4)"
  71. style="background:#ee5255">下载录制</div>
  72. <div class="returnBtn" @click="juriVisible = true" v-if="tType == 1">
  73. 权限
  74. </div>
  75. <div class="returnBtn" style="background: #5c6f97" @click.stop="
  76. goTo(
  77. '/courseDetailGM?userid=' +
  78. userid +
  79. '&oid=' +
  80. oid +
  81. '&org=' +
  82. org +
  83. '&cid=' +
  84. classId +
  85. '&courseId=' +
  86. id +
  87. '&tType=' +
  88. tType +
  89. '&screenType=' +
  90. screenType
  91. )
  92. ">
  93. 返回
  94. </div>
  95. </div>
  96. </div>
  97. <!-- v-for="(task, index) in chapInfoList[courseType].chapterInfo[0]
  98. .taskJson"
  99. :key="index"-->
  100. <div class="isNoMessage" v-if="
  101. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  102. .chapterData.length == 0 &&
  103. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  104. .toolChoose[0].tool.length == 0 &&
  105. chapInfoList[courseType].chapterInfo[0].video.length == 0 &&
  106. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  107. .taskDetail == '' &&
  108. !chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].eList
  109. ">
  110. <img src="@/assets/icon/isNoMessage.png" alt />
  111. </div>
  112. <div class="study_top" :class="{ pzClass: pzDialog }">
  113. <div class="vedioBox" v-if="
  114. vedio[taskCount].length > 0 ||
  115. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  116. .taskDetail != '' ||
  117. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  118. .chapterData.length > 0
  119. ">
  120. <div class="checkbox">
  121. <div class="check" style="font-size: 25px" :id="
  122. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].id
  123. ">
  124. <!-- {{ taskCount + 1 }}
  125. {{ chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].task }}-->
  126. 学一学
  127. </div>
  128. </div>
  129. <div class="student_head" v-if="
  130. vedio[taskCount].length > 0 ||
  131. textList[taskCount].length > 0 ||
  132. file[taskCount].length > 0 ||
  133. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  134. .taskDetail != ''
  135. ">
  136. <div class="taskBox">
  137. <div style="
  138. display: flex;
  139. flex-wrap: nowrap;
  140. flex-direction: column;
  141. position: relative;
  142. ">
  143. <div style="padding: 15px 0 15px 20px" v-if="
  144. chapInfoList[courseType].chapterInfo[0].taskJson[
  145. taskCount
  146. ].taskDetail != ''
  147. " v-html="
  148. chapInfoList[courseType].chapterInfo[0].taskJson[
  149. taskCount
  150. ].taskDetail
  151. ? chapInfoList[courseType].chapterInfo[0].taskJson[
  152. taskCount
  153. ].taskDetail
  154. : '暂无描述'
  155. ">
  156. <!-- <span style="color: #cbcbcb">任务描述</span> -->
  157. <!-- {{
  158. chapInfoList[courseType].chapterInfo[0].taskJson[
  159. taskCount
  160. ].taskDetail
  161. ? chapInfoList[courseType].chapterInfo[0].taskJson[
  162. taskCount
  163. ].taskDetail
  164. : "暂无描述"
  165. }}-->
  166. </div>
  167. </div>
  168. </div>
  169. <div class="vedioTaskBox">
  170. <div class="box_course" v-if="
  171. vedio[taskCount].length > 0 ||
  172. textList[taskCount].length > 0 ||
  173. lineList[taskCount].length > 0 ||
  174. file[taskCount].length > 0
  175. ">
  176. <div class="wheel" v-if="
  177. vedio.length &&
  178. vedio[taskCount] &&
  179. vedio[taskCount].length > 0 &&
  180. showType == 0
  181. ">
  182. <div class="workd_media" style="height: 100%">
  183. <video-player class="video-player vjs-custom-skin" :playsinline="true"
  184. :options="playerO[taskCount]" @play="onPlayerPlay($event)"
  185. style="width: 90%; height: 100%; margin: 0 0 0 30px"></video-player>
  186. </div>
  187. </div>
  188. <div class="wheel" v-if="showType == 1" style="
  189. box-shadow: 0 0 6px 1px #f2f2f2;
  190. width: 95%;
  191. margin: 0 auto;
  192. background: #f1f1f1;
  193. ">
  194. <div class="title">查看文档</div>
  195. <el-form class="textBox">
  196. <el-form-item class="textTitle">
  197. <div style="
  198. font-size: 22px;
  199. max-height: 100px;
  200. overflow: auto;
  201. ">
  202. {{ text.name }}
  203. </div>
  204. </el-form-item>
  205. <!-- <div style="color: #918f8f; width: 85%">文档内容</div> -->
  206. <div v-html="text.url" class="textContent"></div>
  207. </el-form>
  208. </div>
  209. <div class="wheel" v-if="showType == 2" style="height: 650px; width: 95%; margin: 0 auto">
  210. <iframe style="width: 100%; height: 100%; border: none" :src="pptImgUrl1"></iframe>
  211. </div>
  212. <div class="wheel" v-if="showType == 3" style="height: 650px; width: 95%; margin: 0 auto">
  213. <!-- <iframe
  214. style="width: 100%; height: 100%; border: none"
  215. :src="pptImgUrl1"
  216. ></iframe>-->
  217. <pdf :pdfUrl="pptImgUrl1" style="width: 100%; height: 100%; overflow: auto"></pdf>
  218. </div>
  219. <div class="wheel" v-if="showType == 4" style="height: 650px; width: 95%; margin: 0 auto">
  220. <el-image :src="pptImgUrl1" fit="cover" style="width: 100%"></el-image>
  221. </div>
  222. </div>
  223. <!-- :class="
  224. vedio[taskCount].length == 0 && file[taskCount].length == 0
  225. ? 'listNoVedio'
  226. : ''
  227. "-->
  228. <!-- :class="
  229. vedio[taskCount].length == 0 &&
  230. file[taskCount].length == 0 &&
  231. textList[taskCount].length == 0
  232. ? 'listNoVedio'
  233. : ''
  234. " -->
  235. <div class="vedioList" v-if="
  236. (vedio.length &&
  237. vedio[taskCount] &&
  238. vedio[taskCount].length > 0) ||
  239. (textList.length &&
  240. textList[taskCount] &&
  241. textList[taskCount].length > 0) ||
  242. (lineList.length &&
  243. lineList[taskCount] &&
  244. lineList[taskCount].length > 0) ||
  245. (file.length &&
  246. file[taskCount] &&
  247. file[taskCount].length > 0)
  248. ">
  249. <div class="navTitile">内容列表:</div>
  250. <div class="navBox">
  251. <div v-show="
  252. vedio.length &&
  253. vedio[taskCount] &&
  254. vedio[taskCount].length > 0
  255. ">
  256. <!-- <div
  257. class="vedioNav"
  258. style="
  259. width: 80px;
  260. min-width: 80px;
  261. height: 30px;
  262. line-height: 36px;
  263. font-size: 16px;
  264. border-radius: 10px;
  265. "
  266. >
  267. 视频
  268. </div> -->
  269. <div class="vedioTimeBox" v-for="(media, vedioIndex) in vedio[taskCount]" :key="vedioIndex + '1'"
  270. @click="lookVedio(media.url, vedioIndex)">
  271. <!-- <div class="media" style="width: 90px; height: 60px; position: relative">
  272. <img style="height: 90px; width: 160px" :src="
  273. media.cover != null && media.cover != ''
  274. ? JSON.parse(media.cover).length > 0
  275. ? JSON.parse(media.cover)[0].url
  276. : mr
  277. : mr
  278. " alt />
  279. </div> -->
  280. <!-- <div class="vedioTime">
  281. {{ vedioTime[vedioIndex] }}
  282. </div> -->
  283. <!-- <div class="vedioName">{{ media.name }}</div> -->
  284. <div class="vedioName" :class="
  285. isClickNav == 'video' + vedioIndex
  286. ? 'isClickNav'
  287. : ''
  288. ">
  289. {{ media.name }}
  290. </div>
  291. </div>
  292. </div>
  293. <div v-show="
  294. textList.length &&
  295. textList[taskCount] &&
  296. textList[taskCount].length > 0
  297. " class="newNav" v-for="(text, textIndex) in textList[taskCount]" :key="textIndex + '2'"
  298. @click="lookText(taskCount, textIndex)">
  299. <!-- <div
  300. class="vedioNav"
  301. style="
  302. width: 80px;
  303. min-width: 80px;
  304. height: 30px;
  305. line-height: 36px;
  306. font-size: 16px;
  307. border-radius: 10px;
  308. "
  309. >
  310. 文档
  311. </div> -->
  312. <div style="width: calc(100% - 0px)">
  313. <div class="navText" :class="
  314. isClickNav == 'text' + textIndex ? 'isClickNav' : ''
  315. ">
  316. {{
  317. textList[taskCount].length > 0 ? text.name : ""
  318. }}.doc
  319. </div>
  320. </div>
  321. </div>
  322. <!-- <div
  323. v-show="
  324. chapInfoList.length &&
  325. chapToolList[taskCount] &&
  326. chapToolList[taskCount].length > 0
  327. "
  328. class="newNav"
  329. v-for="(tools, toolsIndex) in chapToolList[taskCount]"
  330. :key="toolsIndex + '3'"
  331. >
  332. <div class="vedioNav">工具</div>
  333. <div>
  334. <div
  335. class="navText"
  336. @click="lookTools(taskCount, toolsIndex)"
  337. >
  338. {{
  339. chapToolList[taskCount].length > 0 ? tools.name : ""
  340. }}
  341. </div>
  342. </div>
  343. </div>-->
  344. <div v-show="
  345. lineList.length &&
  346. lineList[taskCount] &&
  347. lineList[taskCount].length > 0
  348. " class="newNav" v-for="(lines, lineIndex) in lineList[taskCount]" :key="lineIndex + '4'"
  349. @click="doUrl(lines.url, lineIndex)">
  350. <!-- <div
  351. class="vedioNav"
  352. style="
  353. width: 80px;
  354. min-width: 80px;
  355. height: 30px;
  356. line-height: 36px;
  357. font-size: 16px;
  358. border-radius: 10px;
  359. "
  360. >
  361. 链接
  362. </div> -->
  363. <!-- <div style="width: calc(100% - 0px)">
  364. <div
  365. class="navText"
  366. :class="isClickNav == lineIndex ? 'isClickNav' : ''"
  367. >
  368. <a
  369. style="text-decoration: none; color: #000"
  370. target="_Blank"
  371. >{{ lines.url }}</a
  372. >
  373. </div>
  374. </div> -->
  375. <div style="width: calc(100% - 0px)">
  376. <div class="navText" :class="
  377. isClickNav == 'line' + lineIndex ? 'isClickNav' : ''
  378. ">
  379. {{ lines.title ? lines.title : lines.url }}
  380. </div>
  381. </div>
  382. </div>
  383. <div class="newNav" v-show="
  384. file.length &&
  385. file[taskCount] &&
  386. file[taskCount].length > 0
  387. " v-for="(f, fileIndex) in file[taskCount]" :key="fileIndex" @click="downFile(f, fileIndex)">
  388. <!-- <div
  389. class="vedioNav"
  390. style="
  391. width: 80px;
  392. min-width: 80px;
  393. height: 30px;
  394. line-height: 36px;
  395. font-size: 16px;
  396. border-radius: 10px;
  397. "
  398. >
  399. 文档
  400. </div> -->
  401. <div style="width: calc(100% - 0px)">
  402. <div class="navText" :class="
  403. isClickNav == 'word' + fileIndex ? 'isClickNav' : ''
  404. ">
  405. {{ f.name }}
  406. </div>
  407. </div>
  408. </div>
  409. </div>
  410. </div>
  411. </div>
  412. <div style="padding: 10px 30px 0" v-if="showType == 2 || showType == 3">
  413. <el-button class="btnClassGM" type="primary"
  414. @click="checkFileFull(showType, pptImgUrl1)">全屏查看</el-button>
  415. <el-button class="btnClassGM" type="primary" @click="downloadFile(pptImgUrl1)" v-if="isClickNav.indexOf('line') == -1">文件下载</el-button>
  416. <el-button class="btnClassGM" v-if="isClickNav.indexOf('line') != -1" type="primary"
  417. @click="openLine(pptImgUrl1)">打开链接
  418. </el-button>
  419. </div>
  420. <div style="padding: 0px 30px" v-if="showType == 1">
  421. <el-button class="btnClassGM" type="primary" @click="checkFileFull(showType, text)">全屏查看</el-button>
  422. </div>
  423. </div>
  424. </div>
  425. <div class="student_body" v-resize="resize">
  426. <!-- <div
  427. class="vedioBox"
  428. v-if="
  429. file.length && file[taskCount] && file[taskCount].length > 0
  430. "
  431. >
  432. <div class="queTop">
  433. <div class="question" style="width: 30px; margin-top: 5px">
  434. <img src="@/assets/icon/fileIcon.png" alt />
  435. </div>
  436. <div class="queTitle">
  437. <div>附件</div>
  438. </div>
  439. </div>
  440. <div class="filebox" style="width: 100%">
  441. <div
  442. class="file"
  443. v-for="(f, fileIndex) in file[taskCount]"
  444. :key="fileIndex"
  445. @click="downFile(f, fileIndex)"
  446. >
  447. <img :src="require('@/assets/file.png')" alt />
  448. <div>{{ f.name }}</div>
  449. </div>
  450. </div>
  451. <div class="upFile" v-if="type == 3">提交</div>
  452. </div>-->
  453. <div class="vedioBox" v-if="
  454. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  455. .toolChoose[0].tool &&
  456. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  457. .toolChoose[0].tool.length &&
  458. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  459. .toolChoose[0].tool.length > 0
  460. ">
  461. <div class="queTop" style="
  462. font-size: 25px;
  463. padding: 15px 0 15px 30px;
  464. font-weight: bold;
  465. ">
  466. <!-- <div class="question" style="width: 30px">
  467. <img src="@/assets/icon/toolIcon.png" alt />
  468. </div>
  469. <div class="queTitle">
  470. <div>工具</div>
  471. </div>-->
  472. 练一练
  473. </div>
  474. <div class="toolHeng2" style="position: relative">
  475. <div class="filebox" style="flex-wrap: nowrap; margin: 0 20px" v-for="(tool, toolIndex) in chapInfoList[courseType]
  476. .chapterInfo[0].taskJson[taskCount].toolChoose" :key="toolIndex">
  477. <div class="bzBox">
  478. <div></div>
  479. <div>步骤{{ toolIndex + 1 }}</div>
  480. </div>
  481. <div class="toolBox">
  482. <div>
  483. <!-- v-for="(itemTool, indexTool) in toolTypeList"
  484. :key="indexTool"-->
  485. <!-- <div class="iframeBox">
  486. <div
  487. class="addPoint isBorder"
  488. v-for="(tooC, toolCIndex) in tool.tool"
  489. :key="toolCIndex"
  490. >
  491. <div v-if="tooC == 1" style="border: 1px soild #ccc">
  492. <div
  493. class="iframeName"
  494. >
  495. 电子白板
  496. </div>
  497. <iframe
  498. src="https://iwb.cocorobo.cn/"
  499. ref="whiteBoard"
  500. ></iframe>
  501. </div>
  502. </div>
  503. </div>-->
  504. <div class="noiframeBox">
  505. <div class="addPoint" v-for="(tooC, toolCIndex) in tool.tool" :key="toolCIndex">
  506. <div v-if="tooC == 1">
  507. <img src="@/assets/icon/secondToolList/whiteBoard.png" alt
  508. @click="addTools(tooC, toolIndex, taskCount)" />
  509. <div style="margin: 5px 0">电子白板</div>
  510. </div>
  511. <div v-if="tooC == 3">
  512. <img src="@/assets/icon/secondToolList/mindMapping.png" alt
  513. @click="addTools(tooC, toolIndex, taskCount)" />
  514. <div style="margin: 5px 0">思维导图</div>
  515. </div>
  516. <div v-if="tooC == 6">
  517. <img src="@/assets/icon/secondToolList/doc.png" alt
  518. @click="addTools(tooC, toolIndex, taskCount)" />
  519. <div style="margin: 5px 0">协同文档</div>
  520. </div>
  521. <div v-if="tooC == 7">
  522. <img src="@/assets/icon/secondToolList/mindNetwork.png" alt
  523. @click="addTools(tooC, toolIndex, taskCount)" />
  524. <div style="margin: 5px 0">思维网格</div>
  525. </div>
  526. <div v-if="tooC == 8">
  527. <img src="@/assets/icon/secondToolList/library.png" alt
  528. @click="addTools(tooC, toolIndex, taskCount)" />
  529. <div style="margin: 5px 0">素材库</div>
  530. </div>
  531. <div v-if="tooC == 17">
  532. <img src="@/assets/icon/secondToolList/library.png" alt
  533. @click="addTools(tooC, toolIndex, taskCount)" />
  534. <div style="margin: 5px 0">学习资料</div>
  535. </div>
  536. <div v-if="tooC == 2">
  537. <img @click="addTools(tooC, toolIndex, taskCount)"
  538. src="@/assets/icon/secondToolList/note.png" alt />
  539. <div style="margin: 5px 0">便签</div>
  540. </div>
  541. <div v-if="tooC == 4">
  542. <img @click="addTools(tooC, toolIndex, taskCount)" src="@/assets/icon/thirdToolList/ask.png"
  543. alt />
  544. <div style="margin: 5px 0">问卷调查</div>
  545. </div>
  546. <div v-if="tooC == 45">
  547. <img @click="addTools(tooC, toolIndex, taskCount)"
  548. src="@/assets/icon/thirdToolList/choose.png" alt />
  549. <div style="margin: 5px 0">选择题</div>
  550. </div>
  551. <!-- <div v-if="tooC == 5">
  552. <img
  553. @click="addTools(tooC, toolIndex, taskCount)"
  554. src="@/assets/icon/thirdToolList/score.png"
  555. alt
  556. />
  557. <div style="margin: 5px 0">量规评分</div>
  558. </div> -->
  559. <div v-if="tooC == 10">
  560. <img @click="addTools(tooC, toolIndex, taskCount)"
  561. src="@/assets/icon/thirdToolList/time.png" alt />
  562. <div style="margin: 5px 0">倒计时</div>
  563. </div>
  564. <div v-if="tooC == 15">
  565. <img @click="addTools(tooC, toolIndex, taskCount)"
  566. src="@/assets/icon/thirdToolList/answer.png" alt />
  567. <div style="margin: 5px 0">问答工具</div>
  568. </div>
  569. <div v-if="tooC == 26">
  570. <img @click="addTools(tooC, toolIndex, taskCount)"
  571. src="@/assets/icon/thirdToolList/courseDesign.png" alt />
  572. <div style="margin: 5px 0">课程设计</div>
  573. </div>
  574. <div v-if="tooC == 18">
  575. <img @click="addTools(tooC, toolIndex, taskCount)"
  576. src="@/assets/icon/thirdToolList/trainPlatform.png" alt />
  577. <div style="margin: 5px 0">训练服务器</div>
  578. </div>
  579. <div v-if="tooC == 16">
  580. <img @click="addTools(tooC, toolIndex, taskCount)"
  581. src="@/assets/icon/thirdToolList/work.png" alt />
  582. <div style="margin: 5px 0">作业提交</div>
  583. </div>
  584. <div v-if="tooC == 21">
  585. <img @click="addTools(tooC, toolIndex, taskCount)"
  586. src="@/assets/icon/fourthToolList/program.png" alt />
  587. <div style="margin: 5px 0">编程平台</div>
  588. </div>
  589. <div v-if="tooC == 22">
  590. <img @click="addTools(tooC, toolIndex, taskCount)"
  591. src="@/assets/icon/fourthToolList/program.png" alt />
  592. <div style="margin: 5px 0">AI体验</div>
  593. </div>
  594. <div v-if="tooC == 23">
  595. <img @click="addTools(tooC, toolIndex, taskCount)"
  596. src="@/assets/icon/fourthToolList/program.png" alt />
  597. <div style="margin: 5px 0">Python</div>
  598. </div>
  599. <div v-if="tooC == 24">
  600. <img @click="addTools(tooC, toolIndex, taskCount)"
  601. src="@/assets/icon/fourthToolList/AIprogram.png" alt />
  602. <div style="margin: 5px 0">AI平台</div>
  603. </div>
  604. <div v-if="tooC == 25">
  605. <img @click="addTools(tooC, toolIndex, taskCount)"
  606. src="@/assets/icon/thirdToolList/evalua.png" alt />
  607. <div style="margin: 5px 0">目标管理</div>
  608. </div>
  609. <div v-if="tooC == 31">
  610. <img @click="addTools(tooC, toolIndex, taskCount)"
  611. src="@/assets/icon/secondToolList/networkPanel.png" alt />
  612. <div style="margin: 5px 0">数学画板</div>
  613. </div>
  614. <div v-if="tooC == 28">
  615. <img @click="addTools(tooC, toolIndex, taskCount)"
  616. src="@/assets/icon/secondToolList/translation.png" alt />
  617. <div style="margin: 5px 0">翻译</div>
  618. </div>
  619. <div v-if="tooC == 37">
  620. <img @click="addTools(tooC, toolIndex, taskCount)"
  621. src="@/assets/icon/secondToolList/mohe.png" alt />
  622. <div style="margin: 5px 0">魔盒识字</div>
  623. </div>
  624. <div v-if="tooC == 38">
  625. <img @click="addTools(tooC, toolIndex, taskCount)"
  626. src="@/assets/icon/secondToolList/24game.png" alt />
  627. <div style="margin: 5px 0">24点</div>
  628. </div>
  629. <div v-if="tooC == 39">
  630. <img @click="addTools(tooC, toolIndex, taskCount)"
  631. src="@/assets/icon/secondToolList/GeoGebra.png" alt />
  632. <div style="margin: 5px 0">GeoGebra</div>
  633. </div>
  634. <div v-if="tooC == 32">
  635. <img @click="addTools(tooC, toolIndex, taskCount)"
  636. src="@/assets/icon/thirdToolList/code.png" alt />
  637. <div style="margin: 5px 0">源码编辑</div>
  638. </div>
  639. <div v-if="tooC == 40">
  640. <img @click="addTools(tooC, toolIndex, taskCount)"
  641. src="@/assets/icon/secondToolList/eval.png" alt />
  642. <div style="margin: 5px 0">学生评价</div>
  643. </div>
  644. <div v-if="tooC == 41">
  645. <img @click="addTools(tooC, toolIndex, taskCount)"
  646. src="@/assets/icon/thirdToolList/select.png" alt />
  647. <div style="margin: 5px 0">选择填空</div>
  648. </div>
  649. <div v-if="tooC == 44">
  650. <img @click="addTools(tooC, toolIndex, taskCount)"
  651. src="@/assets/icon/thirdToolList/hanClass.png" alt />
  652. <div style="margin: 5px 0">汉字宫</div>
  653. </div>
  654. </div>
  655. </div>
  656. </div>
  657. <div class="tooldetail" v-if="tool.toolDetail != ''">
  658. <!-- <div class="toolTitle">工具描述</div> -->
  659. <div v-html="contentConvent(tool.toolDetail)">
  660. <!-- {{ contentConvent(tool.toolDetail) }} -->
  661. </div>
  662. </div>
  663. </div>
  664. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(16) != -1" class="worksBox">
  665. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  666. <span>作业预览</span>
  667. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  668. </div>
  669. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  670. <div class="works" style="
  671. width: 200px;
  672. height: 140px;
  673. margin: 10px 10px 10px 0;
  674. box-shadow: 0 0 6px 1px #dfdada;
  675. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  676. <div class="workImg" v-if="w.type == 0">
  677. <img :src="w.works" @click="previewImg(w.works)" alt />
  678. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  679. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  680. {{ JSON.parse(w.score).wScore }}分
  681. </div>
  682. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  683. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  684. 评分
  685. </div>
  686. <img class="deleteImg" src="@/assets/deleteworks.png"
  687. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  688. alt />
  689. </div>
  690. <div class="workImg" v-if="w.type == 1">
  691. <img :src="word" @click="openFile(w.works)" alt />
  692. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  693. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  694. {{ JSON.parse(w.score).wScore }}分
  695. </div>
  696. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  697. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  698. 评分
  699. </div>
  700. <img class="deleteImg" src="@/assets/deleteworks.png"
  701. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  702. alt />
  703. </div>
  704. <div class="workImg" v-if="w.type == 3">
  705. <img style="cursor: pointer" :src="video" @click="openVideo(w.works)" alt />
  706. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  707. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  708. {{ JSON.parse(w.score).wScore }}分
  709. </div>
  710. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  711. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  712. 评分
  713. </div>
  714. <img class="deleteImg" src="@/assets/deleteworks.png"
  715. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  716. alt />
  717. </div>
  718. <div class="worksName">
  719. <div>{{ w.sName }}</div>
  720. </div>
  721. </div>
  722. </div>
  723. </div>
  724. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(4) != -1" class="worksBox">
  725. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  726. <span>作业预览</span>
  727. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  728. </div>
  729. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  730. <div class="isWorksName" v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex" @click="
  731. openTools(4, toolIndex, taskCount, w.works, w.sName)
  732. ">
  733. {{ w.sName }}
  734. <img class="deleteImg deleteImg2" src="@/assets/deleteworks.png"
  735. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  736. </div>
  737. <!-- <div
  738. class="works"
  739. style="
  740. width: 200px;
  741. height: 140px;
  742. border-radius: 10px;
  743. box-shadow: 0 0 6px 1px #dfdada;
  744. overflow: hidden;
  745. "
  746. v-for="(w, wIndex) in workStudent[toolIndex]"
  747. :key="wIndex"
  748. >
  749. <div class="workImg">
  750. <img
  751. src="@/assets/icon/works/noImg.png"
  752. @click="
  753. openTools(
  754. 4,
  755. toolIndex,
  756. taskCount,
  757. w.works,
  758. w.sName
  759. )
  760. "
  761. alt
  762. />
  763. </div>
  764. <div class="worksName">
  765. <div>{{ w.sName }}</div>
  766. <div>{{ w.time }}</div>
  767. </div>
  768. </div> -->
  769. </div>
  770. </div>
  771. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(45) != -1" class="worksBox">
  772. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  773. <span>作业预览</span>
  774. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  775. </div>
  776. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  777. <div class="isWorksName" v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex" @click="
  778. openTools(45, toolIndex, taskCount, w.works, w.sName)
  779. ">
  780. {{ w.sName }}
  781. <img class="deleteImg deleteImg2" src="@/assets/deleteworks.png"
  782. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  783. </div>
  784. </div>
  785. </div>
  786. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(15) != -1" class="worksBox">
  787. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  788. <span>作业预览</span>
  789. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  790. </div>
  791. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  792. <div class="works" v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  793. <div class="workImg">
  794. <!-- <img
  795. src="@/assets/icon/works/noImg.png"
  796. @click="openTools(15, toolIndex, taskCount, w.works)"
  797. alt=""
  798. />-->
  799. <div class="answerBg">
  800. <!-- <div>{{ w.sName }}</div> -->
  801. <el-tooltip class="item" effect="light" :content="JSON.parse(w.works)[0].answer"
  802. placement="top">
  803. <div class="answerContent">
  804. {{ JSON.parse(w.works)[0].answer }}
  805. </div>
  806. </el-tooltip>
  807. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  808. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  809. {{ JSON.parse(w.score).wScore }}分
  810. </div>
  811. <div class="answerScore" @click.stop="openScore(w)"
  812. v-else-if="courseDetail.userid == userid"
  813. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  814. 评分
  815. </div>
  816. <img class="deleteImg" src="@/assets/deleteworks.png"
  817. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  818. alt />
  819. </div>
  820. <div class="comment">
  821. <div class="worksName">
  822. <div>{{ w.sName }}</div>
  823. </div>
  824. </div>
  825. </div>
  826. </div>
  827. </div>
  828. </div>
  829. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(1) != -1" class="worksBox">
  830. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  831. <span>作业预览</span>
  832. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  833. </div>
  834. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  835. <div class="works" style="
  836. width: 200px;
  837. height: 140px;
  838. margin: 10px 10px 10px 0;
  839. box-shadow: 0 0 6px 1px #dfdada;
  840. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  841. <div class="workImg">
  842. <img :src="w.works" @click="previewImg(w.works)" alt />
  843. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  844. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  845. {{ JSON.parse(w.score).wScore }}分
  846. </div>
  847. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  848. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  849. 评分
  850. </div>
  851. <img class="deleteImg" src="@/assets/deleteworks.png"
  852. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  853. alt />
  854. </div>
  855. <div class="worksName">
  856. <div>{{ w.sName }}</div>
  857. </div>
  858. </div>
  859. </div>
  860. </div>
  861. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(3) != -1" class="worksBox">
  862. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  863. <span>作业预览</span>
  864. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  865. </div>
  866. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  867. <div class="works" style="
  868. width: 200px;
  869. height: 140px;
  870. margin: 10px 10px 10px 0;
  871. box-shadow: 0 0 6px 1px #dfdada;
  872. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  873. <div class="workImg">
  874. <img :src="w.works" @click="previewImg(w.works)" alt />
  875. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  876. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  877. {{ JSON.parse(w.score).wScore }}分
  878. </div>
  879. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  880. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  881. 评分
  882. </div>
  883. <img class="deleteImg" src="@/assets/deleteworks.png"
  884. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  885. alt />
  886. </div>
  887. <div class="worksName">
  888. <div>{{ w.sName }}</div>
  889. </div>
  890. </div>
  891. </div>
  892. </div>
  893. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(6) != -1" class="worksBox">
  894. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  895. <span>作业预览</span>
  896. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  897. </div>
  898. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  899. <div class="works" style="
  900. width: 200px;
  901. height: 140px;
  902. margin: 10px 10px 10px 0;
  903. box-shadow: 0 0 6px 1px #dfdada;
  904. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  905. <div class="workImg">
  906. <img :src="w.works" @click="previewImg(w.works)" alt />
  907. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  908. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  909. {{ JSON.parse(w.score).wScore }}分
  910. </div>
  911. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  912. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  913. 评分
  914. </div>
  915. <img class="deleteImg" src="@/assets/deleteworks.png"
  916. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  917. alt />
  918. </div>
  919. <div class="worksName">
  920. <div>{{ w.sName }}</div>
  921. </div>
  922. </div>
  923. </div>
  924. </div>
  925. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(7) != -1" class="worksBox">
  926. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  927. <span>作业预览</span>
  928. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  929. </div>
  930. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  931. <div class="works" style="
  932. width: 200px;
  933. height: 140px;
  934. margin: 10px 10px 10px 0;
  935. box-shadow: 0 0 6px 1px #dfdada;
  936. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  937. <div class="workImg">
  938. <img :src="w.works" @click="previewImg(w.works)" alt />
  939. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  940. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  941. {{ JSON.parse(w.score).wScore }}分
  942. </div>
  943. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  944. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  945. 评分
  946. </div>
  947. <img class="deleteImg" src="@/assets/deleteworks.png"
  948. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  949. alt />
  950. </div>
  951. <div class="worksName">
  952. <div>{{ w.sName }}</div>
  953. </div>
  954. </div>
  955. </div>
  956. </div>
  957. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(26) != -1" class="worksBox">
  958. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  959. <span>作业预览</span>
  960. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  961. </div>
  962. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  963. <div class="works" style="
  964. width: 200px;
  965. height: 140px;
  966. margin: 10px 10px 10px 0;
  967. box-shadow: 0 0 6px 1px #dfdada;
  968. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  969. <div class="workImg">
  970. <img :src="w.works" @click="previewImg(w.works)" alt />
  971. <img class="deleteImg" src="@/assets/deleteworks.png"
  972. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  973. alt />
  974. </div>
  975. <div class="worksName">
  976. <div>{{ w.sName }}</div>
  977. </div>
  978. </div>
  979. </div>
  980. </div>
  981. <div v-if="
  982. tType &&
  983. ((tType == 2 && sIsOpen == true) ||
  984. tType == 1 ||
  985. tType == 4) &&
  986. tool.tool.indexOf(16) != -1
  987. " class="worksBox">
  988. <div class="zuoyeYulan" v-if="
  989. worksStudent.length &&
  990. worksStudent[toolIndex].length > 0
  991. ">
  992. <span>作业预览</span>
  993. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  994. </div>
  995. <div class="worksDetailBox" v-if="
  996. worksStudent.length &&
  997. worksStudent[toolIndex].length > 0
  998. ">
  999. <div class="works" style="
  1000. width: 200px;
  1001. height: 140px;
  1002. margin: 10px 10px 10px 0;
  1003. border-radius: 15px;
  1004. box-shadow: 0 0 6px 1px #dfdada;
  1005. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex"
  1006. :class="w.type == 1 ? 'isTypeOne' : ''">
  1007. <div class="workImg" v-if="w.type == 0">
  1008. <img :src="w.works" @click="previewImg(w.works)" alt />
  1009. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1010. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1011. {{ JSON.parse(w.score).wScore }}分
  1012. </div>
  1013. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1014. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1015. 评分
  1016. </div>
  1017. <img class="deleteImg" src="@/assets/deleteworks.png"
  1018. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1019. alt />
  1020. </div>
  1021. <div class="workImg" v-if="w.type == 1">
  1022. <img :src="word" @click="openFile(w.works)" alt />
  1023. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1024. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1025. {{ JSON.parse(w.score).wScore }}分
  1026. </div>
  1027. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1028. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1029. 评分
  1030. </div>
  1031. <img class="deleteImg" src="@/assets/deleteworks.png"
  1032. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1033. alt />
  1034. </div>
  1035. <div class="workImg" v-if="w.type == 3">
  1036. <img style="cursor: pointer" :src="video" @click="openVideo(w.works)" alt />
  1037. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1038. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1039. {{ JSON.parse(w.score).wScore }}分
  1040. </div>
  1041. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1042. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1043. 评分
  1044. </div>
  1045. <img class="deleteImg" src="@/assets/deleteworks.png"
  1046. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1047. alt />
  1048. </div>
  1049. <div class="comment" style="min-width: 200px">
  1050. <div class="worksName">
  1051. <div>{{ w.sName }}</div>
  1052. </div>
  1053. <div class="commentList">
  1054. <div class="commentList">
  1055. <div class="commentImg" @click="
  1056. isLikes(w.wid, userid, 1, null, w.isLikes)
  1057. ">
  1058. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1059. </div>
  1060. <div>{{ w.likesCount }}</div>
  1061. </div>
  1062. <div class="commentList" style="margin-right: 15px">
  1063. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1064. <img src="@/assets/icon/comment/comment.png" alt="" />
  1065. </div>
  1066. <div>{{ w.commentCount }}</div>
  1067. </div>
  1068. </div>
  1069. </div>
  1070. </div>
  1071. </div>
  1072. <div style="font-size: 18px">未提交</div>
  1073. <div class="noWorksS">
  1074. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1075. {{ s.student }}
  1076. </div>
  1077. </div>
  1078. </div>
  1079. <div v-if="
  1080. tType &&
  1081. ((tType == 2 && sIsOpen == true) ||
  1082. tType == 1 ||
  1083. tType == 4) &&
  1084. tool.tool.indexOf(4) != -1 &&
  1085. (tool.askJson[0].answer ||
  1086. tool.askJson[0].answer === 0) &&
  1087. checkJson[toolIndex].length
  1088. " class="xuan_right_box">
  1089. <div class="tool_right_box" v-for="(item, index) in tool.askJson" :key="index">
  1090. <div>
  1091. <span>{{ index + 1 + "、" + item.askstitle }}</span>
  1092. </div>
  1093. <div class="right_box_xuan">
  1094. <span>正确率</span>
  1095. <span>{{
  1096. (checkJson[toolIndex][index].right
  1097. ? checkJson[toolIndex][index].right
  1098. : 0) + "%"
  1099. }}</span>
  1100. </div>
  1101. </div>
  1102. </div>
  1103. <div class="xuan_right_box" style="background: unset" v-if="
  1104. tType &&
  1105. ((tType == 2 && sIsOpen == true) ||
  1106. tType == 1 ||
  1107. tType == 4) &&
  1108. tool.tool.indexOf(4) != -1
  1109. ">
  1110. <AskStatic v-if="
  1111. worksStudent.length &&
  1112. worksStudent[toolIndex].length > 0
  1113. " :askJSON="tool" :checkJson="checkJson[toolIndex]"></AskStatic>
  1114. </div>
  1115. <div v-if="
  1116. tType &&
  1117. ((tType == 2 && sIsOpen == true) ||
  1118. tType == 1 ||
  1119. tType == 4) &&
  1120. tool.tool.indexOf(4) != -1
  1121. " class="worksBox">
  1122. <div class="zuoyeYulan" v-if="
  1123. worksStudent.length &&
  1124. worksStudent[toolIndex].length > 0
  1125. ">
  1126. <span>作业预览</span>
  1127. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1128. </div>
  1129. <div>
  1130. <div class="worksDetailBox" v-if="
  1131. worksStudent.length &&
  1132. worksStudent[toolIndex].length > 0
  1133. ">
  1134. <div v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex" class="isWorksName" @click="
  1135. openTools(4, toolIndex, taskCount, w.works, w.sName)
  1136. ">
  1137. {{ w.sName }}
  1138. <img class="deleteImg deleteImg2" src="@/assets/deleteworks.png"
  1139. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1140. alt />
  1141. </div>
  1142. <!-- <div class="works" style="
  1143. width: 200px;
  1144. height: 140px;
  1145. border-radius: 10px;
  1146. box-shadow: 0 0 6px 1px #dfdada;
  1147. overflow: hidden;
  1148. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex">
  1149. <div class="workImg">
  1150. <img src="@/assets/icon/works/noImg.png" @click="
  1151. openTools(
  1152. 4,
  1153. toolIndex,
  1154. taskCount,
  1155. w.works,
  1156. w.sName
  1157. )
  1158. " alt />
  1159. </div>
  1160. <div class="worksName">
  1161. <div>{{ w.sName }}</div>
  1162. <div>{{ w.time }}</div>
  1163. </div>
  1164. </div> -->
  1165. </div>
  1166. </div>
  1167. <div style="font-size: 18px">未提交</div>
  1168. <div class="noWorksS">
  1169. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1170. {{ s.student }}
  1171. </div>
  1172. </div>
  1173. </div>
  1174. <div v-if="
  1175. tType &&
  1176. ((tType == 2 && sIsOpen == true) ||
  1177. tType == 1 ||
  1178. tType == 4) &&
  1179. tool.tool.indexOf(45) != -1 &&
  1180. (tool.testJson.testJson[0].answer ||
  1181. tool.testJson.testJson[0].answer === 0) &&
  1182. checkJson[toolIndex].length
  1183. " class="xuan_right_box">
  1184. <div class="tool_right_box" v-for="(item, index) in tool.testJson.testJson" :key="index">
  1185. <div>
  1186. <span>{{ index + 1 + "、" + item.teststitle }}</span>
  1187. </div>
  1188. <div class="right_box_xuan">
  1189. <span>正确率</span>
  1190. <span>{{
  1191. (checkJson[toolIndex][index].right
  1192. ? checkJson[toolIndex][index].right
  1193. : 0) + "%"
  1194. }}</span>
  1195. </div>
  1196. </div>
  1197. </div>
  1198. <div class="xuan_right_box" style="background: unset" v-if="
  1199. tType &&
  1200. ((tType == 2 && sIsOpen == true) ||
  1201. tType == 1 ||
  1202. tType == 4) &&
  1203. tool.tool.indexOf(45) != -1
  1204. ">
  1205. <AskStatic2 v-if="
  1206. worksStudent.length &&
  1207. worksStudent[toolIndex].length > 0
  1208. " :askJSON="tool" :checkJson="checkJson[toolIndex]"></AskStatic2>
  1209. </div>
  1210. <div v-if="
  1211. tType &&
  1212. ((tType == 2 && sIsOpen == true) ||
  1213. tType == 1 ||
  1214. tType == 4) &&
  1215. tool.tool.indexOf(45) != -1
  1216. " class="worksBox">
  1217. <div class="zuoyeYulan" v-if="
  1218. worksStudent.length &&
  1219. worksStudent[toolIndex].length > 0
  1220. ">
  1221. <span>作业预览</span>
  1222. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1223. </div>
  1224. <div>
  1225. <div class="worksDetailBox" v-if="
  1226. worksStudent.length &&
  1227. worksStudent[toolIndex].length > 0
  1228. ">
  1229. <div v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex" class="isWorksName" @click="
  1230. openTools(
  1231. 45,
  1232. toolIndex,
  1233. taskCount,
  1234. w.works,
  1235. w.sName
  1236. )
  1237. ">
  1238. {{ w.sName }}
  1239. <img class="deleteImg deleteImg2" src="@/assets/deleteworks.png"
  1240. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1241. alt />
  1242. </div>
  1243. </div>
  1244. </div>
  1245. <div style="font-size: 18px">未提交</div>
  1246. <div class="noWorksS">
  1247. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1248. {{ s.student }}
  1249. </div>
  1250. </div>
  1251. </div>
  1252. <div v-if="
  1253. tType &&
  1254. ((tType == 2 && sIsOpen == true) ||
  1255. tType == 1 ||
  1256. tType == 4) &&
  1257. tool.tool.indexOf(15) != -1
  1258. " class="worksBox">
  1259. <div class="zuoyeYulan" v-if="
  1260. worksStudent.length &&
  1261. worksStudent[toolIndex].length > 0
  1262. ">
  1263. <span>作业预览</span>
  1264. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1265. </div>
  1266. <div class="worksDetailBox" v-if="
  1267. worksStudent.length &&
  1268. worksStudent[toolIndex].length > 0
  1269. ">
  1270. <div class="works" v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex">
  1271. <div class="workImg" style="
  1272. border-radius: 15px;
  1273. box-shadow: #eee 0px 0px 5px 5px;
  1274. ">
  1275. <!-- <img
  1276. src="@/assets/icon/works/noImg.png"
  1277. @click="openTools(15, toolIndex, taskCount, w.works)"
  1278. alt=""
  1279. />-->
  1280. <div class="answerBg" style="border-radius: 15px 15px 0 0"
  1281. @click="commentOther(w, toolIndex, wIndex)">
  1282. <!-- <div>{{ w.sName }}</div> -->
  1283. <el-tooltip class="item" effect="light" :content="JSON.parse(w.works)[0].answer"
  1284. placement="top">
  1285. <div class="answerContent">
  1286. {{ JSON.parse(w.works)[0].answer }}
  1287. </div>
  1288. </el-tooltip>
  1289. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1290. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1291. {{ JSON.parse(w.score).wScore }}分
  1292. </div>
  1293. <div class="answerScore" @click.stop="openScore(w)"
  1294. v-else-if="courseDetail.userid == userid"
  1295. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1296. 评分
  1297. </div>
  1298. <img class="deleteImg" src="@/assets/deleteworks.png"
  1299. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1300. alt />
  1301. </div>
  1302. <div class="comment">
  1303. <div class="worksName">
  1304. <div>{{ w.sName }}</div>
  1305. </div>
  1306. <div class="commentList">
  1307. <div class="commentImg" @click="
  1308. isLikes(w.wid, userid, 1, null, w.isLikes)
  1309. ">
  1310. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1311. </div>
  1312. <div>{{ w.likesCount }}</div>
  1313. </div>
  1314. <div class="commentList" style="margin-right: 15px">
  1315. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1316. <img src="@/assets/icon/comment/comment.png" alt="" />
  1317. </div>
  1318. <div>{{ w.commentCount }}</div>
  1319. </div>
  1320. </div>
  1321. </div>
  1322. </div>
  1323. </div>
  1324. <div style="font-size: 18px">未提交</div>
  1325. <div class="noWorksS">
  1326. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1327. {{ s.student }}
  1328. </div>
  1329. </div>
  1330. </div>
  1331. <div v-if="
  1332. tType &&
  1333. ((tType == 2 && sIsOpen == true) ||
  1334. tType == 1 ||
  1335. tType == 4) &&
  1336. tool.tool.indexOf(1) != -1
  1337. " class="worksBox">
  1338. <div class="zuoyeYulan" v-if="
  1339. worksStudent.length &&
  1340. worksStudent[toolIndex].length > 0
  1341. ">
  1342. <span>作业预览</span>
  1343. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1344. </div>
  1345. <div class="worksDetailBox" v-if="
  1346. worksStudent.length &&
  1347. worksStudent[toolIndex].length > 0
  1348. ">
  1349. <div class="works" style="
  1350. width: 200px;
  1351. height: 140px;
  1352. margin: 10px 10px 10px 0;
  1353. border-radius: 15px;
  1354. box-shadow: 0 0 6px 1px #dfdada;
  1355. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex">
  1356. <!-- @click="previewImg(w.works)" -->
  1357. <div class="workImg">
  1358. <img :src="w.works" @click="previewImg(w.works)" alt />
  1359. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1360. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1361. {{ JSON.parse(w.score).wScore }}分
  1362. </div>
  1363. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1364. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1365. 评分
  1366. </div>
  1367. <img class="deleteImg" src="@/assets/deleteworks.png"
  1368. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1369. alt />
  1370. </div>
  1371. <div class="comment" style="min-width: 200px">
  1372. <div class="worksName">
  1373. <div>{{ w.sName }}</div>
  1374. </div>
  1375. <div class="commentList">
  1376. <div class="commentList">
  1377. <div class="commentImg" @click="
  1378. isLikes(w.wid, userid, 1, null, w.isLikes)
  1379. ">
  1380. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1381. </div>
  1382. <div>{{ w.likesCount }}</div>
  1383. </div>
  1384. <div class="commentList" style="margin-right: 15px">
  1385. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1386. <img src="@/assets/icon/comment/comment.png" alt="" />
  1387. </div>
  1388. <div>{{ w.commentCount }}</div>
  1389. </div>
  1390. </div>
  1391. </div>
  1392. </div>
  1393. </div>
  1394. <div style="font-size: 18px">未提交</div>
  1395. <div class="noWorksS">
  1396. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1397. {{ s.student }}
  1398. </div>
  1399. </div>
  1400. </div>
  1401. <div v-if="
  1402. tType &&
  1403. ((tType == 2 && sIsOpen == true) ||
  1404. tType == 1 ||
  1405. tType == 4) &&
  1406. tool.tool.indexOf(3) != -1
  1407. " class="worksBox">
  1408. <div class="zuoyeYulan" v-if="
  1409. worksStudent.length &&
  1410. worksStudent[toolIndex].length > 0
  1411. ">
  1412. <span>作业预览</span>
  1413. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1414. </div>
  1415. <div class="worksDetailBox" v-if="
  1416. worksStudent.length &&
  1417. worksStudent[toolIndex].length > 0
  1418. ">
  1419. <div class="works" style="
  1420. width: 200px;
  1421. height: 140px;
  1422. margin: 10px 10px 10px 0;
  1423. border-radius: 15px;
  1424. box-shadow: 0 0 6px 1px #dfdada;
  1425. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex">
  1426. <!-- @click="previewImg(w.works)" -->
  1427. <div class="workImg">
  1428. <img :src="w.works" @click="previewImg(w.works)" alt />
  1429. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1430. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1431. {{ JSON.parse(w.score).wScore }}分
  1432. </div>
  1433. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1434. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1435. 评分
  1436. </div>
  1437. <img class="deleteImg" src="@/assets/deleteworks.png"
  1438. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1439. alt />
  1440. </div>
  1441. <div class="comment" style="min-width: 200px">
  1442. <div class="worksName">
  1443. <div>{{ w.sName }}</div>
  1444. </div>
  1445. <div class="commentList">
  1446. <div class="commentList">
  1447. <div class="commentImg" @click="
  1448. isLikes(w.wid, userid, 1, null, w.isLikes)
  1449. ">
  1450. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1451. </div>
  1452. <div>{{ w.likesCount }}</div>
  1453. </div>
  1454. <div class="commentList" style="margin-right: 15px">
  1455. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1456. <img src="@/assets/icon/comment/comment.png" alt="" />
  1457. </div>
  1458. <div>{{ w.commentCount }}</div>
  1459. </div>
  1460. </div>
  1461. </div>
  1462. </div>
  1463. </div>
  1464. <div style="font-size: 18px">未提交</div>
  1465. <div class="noWorksS">
  1466. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1467. {{ s.student }}
  1468. </div>
  1469. </div>
  1470. </div>
  1471. <div v-if="
  1472. tType &&
  1473. ((tType == 2 && sIsOpen == true) ||
  1474. tType == 1 ||
  1475. tType == 4) &&
  1476. tool.tool.indexOf(6) != -1
  1477. " class="worksBox">
  1478. <div class="zuoyeYulan" v-if="
  1479. worksStudent.length &&
  1480. worksStudent[toolIndex].length > 0
  1481. ">
  1482. <span>作业预览</span>
  1483. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1484. </div>
  1485. <div class="worksDetailBox" v-if="
  1486. worksStudent.length &&
  1487. worksStudent[toolIndex].length > 0
  1488. ">
  1489. <div class="works" style="
  1490. width: 200px;
  1491. height: 140px;
  1492. margin: 10px 10px 10px 0;
  1493. border-radius: 15px;
  1494. box-shadow: 0 0 6px 1px #dfdada;
  1495. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex">
  1496. <!-- @click="previewImg(w.works)" -->
  1497. <div class="workImg">
  1498. <img :src="w.works" @click="previewImg(w.works)" alt />
  1499. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1500. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1501. {{ JSON.parse(w.score).wScore }}分
  1502. </div>
  1503. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1504. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1505. 评分
  1506. </div>
  1507. <img class="deleteImg" src="@/assets/deleteworks.png"
  1508. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1509. alt />
  1510. </div>
  1511. <div class="comment" style="min-width: 200px">
  1512. <div class="worksName">
  1513. <div>{{ w.sName }}</div>
  1514. </div>
  1515. <div class="commentList">
  1516. <div class="commentList">
  1517. <div class="commentImg" @click="
  1518. isLikes(w.wid, userid, 1, null, w.isLikes)
  1519. ">
  1520. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1521. </div>
  1522. <div>{{ w.likesCount }}</div>
  1523. </div>
  1524. <div class="commentList" style="margin-right: 15px">
  1525. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1526. <img src="@/assets/icon/comment/comment.png" alt="" />
  1527. </div>
  1528. <div>{{ w.commentCount }}</div>
  1529. </div>
  1530. </div>
  1531. </div>
  1532. </div>
  1533. </div>
  1534. <div style="font-size: 18px">未提交</div>
  1535. <div class="noWorksS">
  1536. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1537. {{ s.student }}
  1538. </div>
  1539. </div>
  1540. </div>
  1541. <div v-if="
  1542. tType &&
  1543. ((tType == 2 && sIsOpen == true) ||
  1544. tType == 1 ||
  1545. tType == 4) &&
  1546. tool.tool.indexOf(7) != -1
  1547. " class="worksBox">
  1548. <div class="zuoyeYulan" v-if="
  1549. worksStudent.length &&
  1550. worksStudent[toolIndex].length > 0
  1551. ">
  1552. <span>作业预览</span>
  1553. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1554. </div>
  1555. <div class="worksDetailBox" v-if="
  1556. worksStudent.length &&
  1557. worksStudent[toolIndex].length > 0
  1558. ">
  1559. <div class="works" style="
  1560. width: 200px;
  1561. height: 140px;
  1562. margin: 10px 10px 10px 0;
  1563. border-radius: 15px;
  1564. box-shadow: 0 0 6px 1px #dfdada;
  1565. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex">
  1566. <!-- @click="previewImg(w.works)" -->
  1567. <div class="workImg">
  1568. <img :src="w.works" @click="previewImg(w.works)" alt />
  1569. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)"
  1570. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1571. {{ JSON.parse(w.score).wScore }}分
  1572. </div>
  1573. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1574. :class="{ rightW: w.userid == userid || tType == 1 || tType == 4 }">
  1575. 评分
  1576. </div>
  1577. <img class="deleteImg" src="@/assets/deleteworks.png"
  1578. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1579. alt />
  1580. </div>
  1581. <div class="comment" style="min-width: 200px">
  1582. <div class="worksName">
  1583. <div>{{ w.sName }}</div>
  1584. </div>
  1585. <div class="commentList">
  1586. <div class="commentList">
  1587. <div class="commentImg" @click="
  1588. isLikes(w.wid, userid, 1, null, w.isLikes)
  1589. ">
  1590. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1591. </div>
  1592. <div>{{ w.likesCount }}</div>
  1593. </div>
  1594. <div class="commentList" style="margin-right: 15px">
  1595. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1596. <img src="@/assets/icon/comment/comment.png" alt="" />
  1597. </div>
  1598. <div>{{ w.commentCount }}</div>
  1599. </div>
  1600. </div>
  1601. </div>
  1602. </div>
  1603. </div>
  1604. <div style="font-size: 18px">未提交</div>
  1605. <div class="noWorksS">
  1606. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1607. {{ s.student }}
  1608. </div>
  1609. </div>
  1610. </div>
  1611. <div v-if="
  1612. tType &&
  1613. ((tType == 2 && sIsOpen == true) ||
  1614. tType == 1 ||
  1615. tType == 4) &&
  1616. tool.tool.indexOf(26) != -1
  1617. " class="worksBox">
  1618. <div class="zuoyeYulan" v-if="
  1619. worksStudent.length &&
  1620. worksStudent[toolIndex].length > 0
  1621. ">
  1622. <span>作业预览</span>
  1623. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1624. </div>
  1625. <div class="worksDetailBox" v-if="
  1626. worksStudent.length &&
  1627. worksStudent[toolIndex].length > 0
  1628. ">
  1629. <div class="works" style="width: 240px; height: 140px; overflow: hidden"
  1630. v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex"
  1631. :class="w.type == 1 ? 'isTypeOne' : ''">
  1632. <div class="workImg" v-if="w.type == 0">
  1633. <img :src="w.works" @click="previewImg(w.works)" alt />
  1634. <img class="deleteImg" src="@/assets/deleteworks.png"
  1635. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1636. alt />
  1637. </div>
  1638. <div class="workImg" v-if="w.type == 1">
  1639. <img :src="word" @click="openFile(w.works)" alt />
  1640. <img class="deleteImg" src="@/assets/deleteworks.png"
  1641. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1642. alt />
  1643. </div>
  1644. <div class="worksName">
  1645. <div>{{ w.sName }}</div>
  1646. </div>
  1647. </div>
  1648. </div>
  1649. <div style="font-size: 18px">未提交</div>
  1650. <div class="noWorksS">
  1651. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1652. {{ s.student }}
  1653. </div>
  1654. </div>
  1655. </div>
  1656. <div v-if="
  1657. tType &&
  1658. ((tType == 2 && sIsOpen == true) ||
  1659. tType == 1 ||
  1660. tType == 4) &&
  1661. tool.tool.indexOf(40) != -1
  1662. " class="worksBox">
  1663. <div class="zuoyeYulan" v-if="
  1664. worksStudent.length &&
  1665. worksStudent[toolIndex].length > 0
  1666. ">
  1667. <span>作业预览</span>
  1668. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1669. </div>
  1670. <div class="worksDetailBox" v-if="
  1671. worksStudent.length &&
  1672. worksStudent[toolIndex].length > 0
  1673. ">
  1674. <div class="works" style="
  1675. width: 200px;
  1676. height: 140px;
  1677. margin: 10px 10px 10px 0;
  1678. border-radius: 15px;
  1679. box-shadow: 0 0 6px 1px #dfdada;
  1680. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex"
  1681. :class="w.type == 1 ? 'isTypeOne' : ''">
  1682. <div class="workImg">
  1683. <img src="@/assets/icon/works/noImg.png" @click="openPj(w.works, toolIndex)" alt />
  1684. <img class="deleteImg" src="@/assets/deleteworks.png"
  1685. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1686. alt />
  1687. </div>
  1688. <div class="comment" style="min-width: 200px">
  1689. <div class="worksName">
  1690. <div>{{ w.sName }}</div>
  1691. </div>
  1692. <div class="commentList">
  1693. <div class="commentList">
  1694. <div class="commentImg" @click="
  1695. isLikes(w.wid, userid, 1, null, w.isLikes)
  1696. ">
  1697. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1698. </div>
  1699. <div>{{ w.likesCount }}</div>
  1700. </div>
  1701. <div class="commentList" style="margin-right: 15px">
  1702. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1703. <img src="@/assets/icon/comment/comment.png" alt="" />
  1704. </div>
  1705. <div>{{ w.commentCount }}</div>
  1706. </div>
  1707. </div>
  1708. </div>
  1709. </div>
  1710. </div>
  1711. <div style="font-size: 18px">未提交</div>
  1712. <div class="noWorksS">
  1713. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1714. {{ s.student }}
  1715. </div>
  1716. </div>
  1717. </div>
  1718. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(40) != -1" class="worksBox">
  1719. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  1720. <span>作业预览</span>
  1721. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1722. </div>
  1723. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  1724. <div class="works" style="
  1725. width: 200px;
  1726. height: 140px;
  1727. margin: 10px 10px 10px 0;
  1728. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  1729. <div class="workImg">
  1730. <img src="@/assets/icon/works/noImg.png" @click="openPj(w.works, toolIndex)" alt />
  1731. <img class="deleteImg" src="@/assets/deleteworks.png"
  1732. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1733. alt />
  1734. </div>
  1735. <div class="worksName">
  1736. <div>{{ w.sName }}</div>
  1737. </div>
  1738. </div>
  1739. </div>
  1740. </div>
  1741. <div v-if="
  1742. tType &&
  1743. ((tType == 2 && sIsOpen == true) ||
  1744. tType == 1 ||
  1745. tType == 4) &&
  1746. tool.tool.indexOf(41) != -1
  1747. ">
  1748. <AnswerData2 v-if="
  1749. worksStudent.length &&
  1750. worksStudent[toolIndex].length > 0
  1751. " :problemJson="tool.selectJson.answer" :people="worksStudent[toolIndex]"></AnswerData2>
  1752. </div>
  1753. <div v-if="
  1754. tType &&
  1755. ((tType == 2 && sIsOpen == true) ||
  1756. tType == 1 ||
  1757. tType == 4) &&
  1758. tool.tool.indexOf(41) != -1
  1759. " class="worksBox">
  1760. <div class="zuoyeYulan" v-if="
  1761. worksStudent.length &&
  1762. worksStudent[toolIndex].length > 0
  1763. ">
  1764. <span>作业预览</span>
  1765. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1766. </div>
  1767. <div class="worksDetailBox" v-if="
  1768. worksStudent.length &&
  1769. worksStudent[toolIndex].length > 0
  1770. ">
  1771. <div v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex" class="isWorksName"
  1772. @click="openXz(w, toolIndex)">
  1773. {{ w.sName }}
  1774. <img class="deleteImg deleteImg2" src="@/assets/deleteworks.png"
  1775. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  1776. </div>
  1777. <!-- <div
  1778. class="works"
  1779. style="
  1780. width: 200px;
  1781. height: 140px;
  1782. margin: 10px 10px 10px 0;
  1783. border-radius: 15px;
  1784. box-shadow: 0 0 6px 1px #dfdada;
  1785. " v-for="(w, wIndex) in worksStudent[toolIndex]" :key="wIndex"
  1786. :class="w.type == 5 ? 'isTypeOne' : ''">
  1787. <div class="workImg">
  1788. <img src="@/assets/icon/works/noImg.png" @click="openXz(w, toolIndex)" alt />
  1789. </div>
  1790. <div class="worksName">
  1791. <div>{{ w.sName }}</div>
  1792. </div>
  1793. </div> -->
  1794. </div>
  1795. <div style="font-size: 18px">未提交</div>
  1796. <div class="noWorksS">
  1797. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName">
  1798. {{ s.student }}
  1799. </div>
  1800. </div>
  1801. </div>
  1802. <div v-if="tType && tType == 2 && !sIsOpen && tool.tool.indexOf(41) != -1" class="worksBox">
  1803. <div class="zuoyeYulan" v-if="workStudent[toolIndex].length > 0">
  1804. <span>作业预览</span>
  1805. <el-button type="text" @click="jump()" v-if="tType == 2" class="buttonA">我的评价</el-button>
  1806. </div>
  1807. <div class="worksDetailBox" v-if="workStudent[toolIndex].length > 0">
  1808. <div class="works" style="
  1809. width: 200px;
  1810. height: 140px;
  1811. margin: 10px 10px 10px 0;
  1812. " v-for="(w, wIndex) in workStudent[toolIndex]" :key="wIndex">
  1813. <div class="workImg">
  1814. <img src="@/assets/icon/works/noImg.png" @click="openXz(w, toolIndex)" alt />
  1815. <img class="deleteImg" src="@/assets/deleteworks.png"
  1816. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)"
  1817. alt />
  1818. </div>
  1819. <div class="worksName">
  1820. <div>{{ w.sName }}</div>
  1821. </div>
  1822. </div>
  1823. </div>
  1824. </div>
  1825. </div>
  1826. <!-- <div class="upload_toolBtn" @click="addImg($event)">
  1827. 上传文件
  1828. <input
  1829. type="file"
  1830. accept="image/png, image/gif, image/jpeg"
  1831. style="display: none"
  1832. @change="beforeUpload1($event, 2, index)"
  1833. />
  1834. </div>-->
  1835. </div>
  1836. </div>
  1837. <div class="vedioBox" v-if="
  1838. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  1839. .eList &&
  1840. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  1841. .eList.length &&
  1842. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  1843. .eList.length > 0 &&
  1844. tType != 2
  1845. ">
  1846. <div class="queTop" style="
  1847. font-size: 25px;
  1848. padding: 15px 0 15px 30px;
  1849. font-weight: bold;
  1850. ">
  1851. <!-- <div class="question" style="width: 30px">
  1852. <img src="@/assets/icon/toolIcon.png" alt />
  1853. </div>
  1854. <div class="queTitle">
  1855. <div>工具</div>
  1856. </div>-->
  1857. 评一评
  1858. </div>
  1859. <div class="evaCss" :class="{ evaCssMax: Stbodywidth < 974 }">
  1860. <div class="elist_input">
  1861. <div v-for="(eItem, eIndex) in chapInfoList[courseType]
  1862. .chapterInfo[0].taskJson[taskCount].eList" :key="eIndex" class="elist_input_box">
  1863. <div style="width: 95%">
  1864. <div style="
  1865. display: flex;
  1866. flex-direction: row;
  1867. flex-wrap: nowrap;
  1868. align-items: center;
  1869. ">
  1870. <div style="max-width: calc(100% - 285px)">
  1871. <span>{{ eItem.value }}</span>
  1872. </div>
  1873. <div style="
  1874. padding-left: 25px;
  1875. display: flex;
  1876. flex-direction: row;
  1877. align-items: center;
  1878. ">
  1879. <el-rate v-model="eItem.score" :colors="colors" disabled></el-rate>
  1880. </div>
  1881. </div>
  1882. <div class="elist_inptu_text" style="padding-left: 10px">
  1883. <span v-if="eItem.detail != ''">{{
  1884. eItem.detail
  1885. }}</span>
  1886. <span v-else style="color: #b2b1b3; font-size: 14px">暂无描述...</span>
  1887. </div>
  1888. </div>
  1889. </div>
  1890. </div>
  1891. <div v-if="evalua" style="
  1892. border: 1px solid #e5e5e5;
  1893. max-width: 650px;
  1894. width: 100%;
  1895. margin-top: 20px;
  1896. box-shadow: 3px 1px 15px 3px #e0e0e0;
  1897. ">
  1898. <div class="e_add_top">
  1899. <div class="e_add_title">
  1900. <span>目标管理名称</span>
  1901. <span>{{ eTitle }}</span>
  1902. <img src="@/assets/lineGM.png" class="cru_line" style="
  1903. width: 125px;
  1904. height: 20px;
  1905. bottom: -10px;
  1906. left: 120px;
  1907. " />
  1908. <!-- <el-input
  1909. v-model="eTitle"
  1910. placeholder="请输入名称"
  1911. @change="setMindData"
  1912. ></el-input>-->
  1913. </div>
  1914. </div>
  1915. <div class="e_add_content">
  1916. <div class="e_add_list_pbox">
  1917. <div class="e_add_list_pbox_title">
  1918. <span class="type_title">切换模式</span>
  1919. <div class="type_content">
  1920. <span :class="{ active: typeMode == 1 }" @click="typeMode = 1">目标树</span>
  1921. <span :class="{ active: typeMode == 2 }" @click="typeMode = 2">目标罗盘</span>
  1922. <span :class="{ active: typeMode == 3 }" @click="typeMode = 3">目标看板</span>
  1923. </div>
  1924. </div>
  1925. <div class="e_add_list_pbox_content">
  1926. <Mind :showBar="false" :mindData="data" style="width: 100%" v-show="typeMode == 1"></Mind>
  1927. <Sunburst :Josn="eJson" :num="eJSONNum" style="width: 100%" v-if="typeMode == 2"></Sunburst>
  1928. <SeeBoard :Josn="eJson" :num="eJSONNum" :ename="eTitle" style="width: 100%"
  1929. v-if="typeMode == 3"></SeeBoard>
  1930. </div>
  1931. </div>
  1932. </div>
  1933. </div>
  1934. </div>
  1935. </div>
  1936. <!-- <div
  1937. class="project_box"
  1938. style="margin-top: 15px; padding-bottom: 30px"
  1939. >
  1940. <div
  1941. style="
  1942. display: flex;
  1943. flex-wrap: nowrap;
  1944. flex-direction: column;
  1945. position: relative;
  1946. "
  1947. >
  1948. <div class="queTop">
  1949. <div class="question">
  1950. <img src="@/assets/icon/homeWork.png" alt="" />
  1951. </div>
  1952. <div class="queTitle">
  1953. <div>作业提交<span>(提交图文视频等)</span></div>
  1954. <div>:任务:{{ task.task }}</div>
  1955. </div>
  1956. </div>
  1957. <div class="ediBottom">
  1958. <div
  1959. class="addEditor"
  1960. style="margin-top: 23px"
  1961. @click="openAddWork"
  1962. v-if="!isNoHomeWork"
  1963. >
  1964. 选择文件
  1965. </div>
  1966. <div
  1967. class="addEditor"
  1968. style="margin-top: 23px"
  1969. @click="openAddWork"
  1970. v-else
  1971. >
  1972. 已提交
  1973. </div>
  1974. </div>
  1975. </div>
  1976. </div>-->
  1977. </div>
  1978. </div>
  1979. <el-dialog title="作业提交" :visible.sync="dialogVisible" :append-to-body="true" width="500px"
  1980. :before-close="handleClose" class="dialog_change">
  1981. <div class="marginT">
  1982. <div>上传文件</div>
  1983. <div class="chapter_add" @click="addImg($event)" v-if="studyJuri[0].cover.length == 0">
  1984. <div class="up_photo">
  1985. <img src="@/assets/icon/uploadImg.png" alt />
  1986. </div>
  1987. <input type="file"
  1988. accept="video/mp4, video/quicktime, video/x-msvideo,application/pdf, application/.ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/*"
  1989. capture="camera" style="display: none" @change="beforeUpload1($event, 1)" />
  1990. <!-- <input
  1991. type="file"
  1992. accept="image/*"
  1993. capture="camera"
  1994. style="display: none"
  1995. @change="beforeUpload1($event, 1)"
  1996. /> -->
  1997. </div>
  1998. <div class="chapter_add" style="
  1999. display: flex;
  2000. width: 100%;
  2001. flex-direction: row;
  2002. flex-wrap: wrap;
  2003. justify-content: flex-start;
  2004. padding: 15px 0;
  2005. " v-if="studyJuri[0].cover.length > 0">
  2006. <div class="upCover">
  2007. <img :src="studyJuri[0].cover[0].url" alt v-if="fileType == 0" />
  2008. <img :src="word" alt v-else-if="fileType == 1" />
  2009. <img :src="video" alt v-else />
  2010. <span class="picName">{{ studyJuri[0].cover[0].name }}</span>
  2011. <div class="deleteWord" @click="clean(1)">
  2012. <img src="@/assets/icon/deleteWorks.png" alt />
  2013. </div>
  2014. </div>
  2015. </div>
  2016. </div>
  2017. <!-- <div class="first">
  2018. <div>作业名称:</div>
  2019. <div>{{ chapInfoList[courseType].dyName }}</div>
  2020. </div>
  2021. <div style="font-size: 20px; margin-bottom: 10px">上传作业</div>
  2022. <el-input
  2023. type="textarea"
  2024. resize="none"
  2025. rows="7"
  2026. placeholder="输入文字描述..."
  2027. v-model="studyJuri[0].content"
  2028. ></el-input>
  2029. <div class="marginT">
  2030. <div>上传图片</div>
  2031. <div class="chapter_add" @click="addImg($event)">
  2032. <div class="up_photo">
  2033. <img src="@/assets/photo.png" alt />
  2034. </div>
  2035. <input
  2036. type="file"
  2037. accept="image/png, image/gif, image/jpeg"
  2038. style="display: none"
  2039. @change="beforeUpload1($event, 1)"
  2040. />
  2041. </div>
  2042. <div
  2043. class="chapter_add"
  2044. style="
  2045. display: flex;
  2046. width: 100%;
  2047. flex-direction: row;
  2048. flex-wrap: wrap;
  2049. justify-content: flex-start;
  2050. "
  2051. v-if="studyJuri[0].cover.length > 0"
  2052. >
  2053. <div
  2054. v-for="(c, cIndex) in studyJuri[0].cover"
  2055. :key="cIndex"
  2056. class="upCover"
  2057. >
  2058. <img :src="c.url != null && c.url != '' ? c.url : mr" alt />
  2059. <span class="picName">{{ c.name }}</span>
  2060. <div class="deleteWord" @click="clean(1)">
  2061. <img src="@/assets/icon/delete.png" alt />
  2062. </div>
  2063. </div>
  2064. </div>
  2065. </div>
  2066. <div class="marginT">
  2067. <div>上传视频</div>
  2068. <div class="chapter_add" @click="addImg($event)">
  2069. <div class="up_photo">
  2070. <img src="@/assets/vidio.png" alt />
  2071. </div>
  2072. <input
  2073. type="file"
  2074. accept="video/mp4, video/quicktime, video/x-msvideo"
  2075. style="display: none"
  2076. @change="beforeUpload2($event, 2)"
  2077. />
  2078. </div>
  2079. <div
  2080. class="chapter_add"
  2081. style="
  2082. display: flex;
  2083. flex-direction: row;
  2084. flex-wrap: wrap;
  2085. width: 100%;
  2086. justify-content: flex-start;
  2087. "
  2088. v-if="studyJuri[0].upVedio.length > 0"
  2089. >
  2090. <div
  2091. style="
  2092. width: 100%;
  2093. display: flex;
  2094. flex-direction: row;
  2095. flex-wrap: wrap;
  2096. align-content: flex-start;
  2097. justify-content: flex-start;
  2098. align-items: center;
  2099. "
  2100. >
  2101. <div
  2102. class="uploadVedio isAddThings"
  2103. v-for="(v, vIndex) in studyJuri[0].upVedio"
  2104. :key="vIndex"
  2105. >
  2106. <img src="@/assets/uploadMp4.png" alt />
  2107. <span>{{ v.name }}</span>
  2108. <div class="deleteWord" @click="clean(2)">
  2109. <img src="@/assets/icon/delete.png" alt />
  2110. </div>
  2111. </div>
  2112. </div>
  2113. </div>
  2114. </div>-->
  2115. <div class="upload_send" @click="addCourseWorks(taskCount)" v-if="!proVisible">提交</div>
  2116. </el-dialog>
  2117. </div>
  2118. </div>
  2119. <div class="pButton" @click="(pzDialog = true), selectPz()" v-if="tType == 4">
  2120. <!-- 批 -->
  2121. <img src="@/assets/pzBtn2.png" style="width: 25px" alt="" />
  2122. </div>
  2123. <div v-if="pzDialog == true" class="newDialogCss">
  2124. <div class="pzTop2">
  2125. <!-- <div>批注</div>
  2126. <div @click="pzDialog = false">
  2127. <img src="@/assets/close1.png" alt="" />
  2128. </div> -->
  2129. <div class="checkbox">
  2130. <div class="check" style="font-size: 25px">评课笔记</div>
  2131. <img src="@/assets/pzBtn.png" @click="pzDialog = false" alt="" />
  2132. </div>
  2133. </div>
  2134. <div :class="pzList && pzList.length ? 'pzBox' : 'noPzBox'">
  2135. <div class="pzListBox" v-if="pzList && pzList.length">
  2136. <div class="pzList" v-for="(pz, pzIndex) in pzList" :key="pzIndex">
  2137. <div class="pzNavTop">
  2138. <div>批</div>
  2139. <div>
  2140. {{
  2141. pz.username.length > 5
  2142. ? pz.username.substring(0, 5) + "..."
  2143. : pz.username
  2144. }}的批注
  2145. </div>
  2146. <div class="pzDelete" v-if="pz.userid == userid" @click="deletePz(pz.id)">
  2147. 删除
  2148. </div>
  2149. </div>
  2150. <div class="pzContent cont" v-html="pz.content" v-if="pz.type == '1'">
  2151. <!-- {{ }} -->
  2152. </div>
  2153. <div class="pzContent" v-if="pz.type == '2'">
  2154. <audio :src="pz.content" controls="controls" ref="audio">
  2155. Your browser does not support the audio element.
  2156. </audio>
  2157. </div>
  2158. <div class="pzContent" v-if="pz.type == '3'">
  2159. <img :src="pz.content" style="width: 90%; margin: 0 auto; display: block"
  2160. @click="previewImg(pz.content)" />
  2161. </div>
  2162. <div class="time">
  2163. {{ pz.time }}
  2164. </div>
  2165. </div>
  2166. </div>
  2167. <div class="noPz" v-else>
  2168. <img src="@/assets/icon/noPz.png" alt="" />
  2169. </div>
  2170. <div class="addPzButton">
  2171. <div class="addPz" @click="(addPzDialog = true), (pzType = 1)">
  2172. 添加批注
  2173. </div>
  2174. <div class="img1">
  2175. <div @click="(addPzDialog = true), (pzType = 2)">
  2176. <img src="@/assets/audio.png" /><span>音频</span>
  2177. </div>
  2178. <!-- <img src="@/assets/picture.png" @click="addPzDialog = true,pzType = 3" /> -->
  2179. </div>
  2180. </div>
  2181. </div>
  2182. </div>
  2183. <div v-if="addPzDialog == true" class="addDialogCss">
  2184. <div class="pzTop">
  2185. <div class="teacherPz">
  2186. <div class="teacherPzImg">
  2187. <img src="@/assets/icon/teacherPz.png" alt="" />
  2188. </div>
  2189. <div style="margin-left: 10px; height: 25px">教师批注</div>
  2190. </div>
  2191. <div @click="addPzDialog = false">
  2192. <img src="@/assets/close1.png" alt="" />
  2193. </div>
  2194. </div>
  2195. <div class="addPzBox">
  2196. <div class="addPzCheck">
  2197. <span :class="{ isChooseActive: pzType == 1 }" @click="pzType = 1">文本</span>
  2198. <!-- <span :class="{isChooseActive:pzType==3}" @click="pzType = 3">图片</span> -->
  2199. <span :class="{ isChooseActive: pzType == 2 }" @click="pzType = 2">音频</span>
  2200. </div>
  2201. <div style="height: calc(100% - 95px)">
  2202. <!-- <textarea class="binfo_input pzConText" cols placeholder="请填写项目课程关键问题...." v-model="pzConText"
  2203. v-if="pzType == 1"></textarea> -->
  2204. <editor-bar class="binfo_input pzConText" style="width: 100% !important" placeholder="请输入任务描述"
  2205. v-model="pzConText" @change="change" v-if="pzType == 1"></editor-bar>
  2206. <Audio @addPz="addPz" class="pzAudioClass" v-if="pzType == 2"></Audio>
  2207. <!-- <div class="pzAudioClass" v-if="pzType == 3">
  2208. <div @click="addImg($event)">
  2209. <el-button type="primary">上传图片</el-button>
  2210. <input type="file" accept="image/png, image/gif, image/jpeg" style="display: none"
  2211. @change="beforeUpload1($event, 4)" />
  2212. </div>
  2213. </div> -->
  2214. </div>
  2215. <div class="addTextCss" @click="addPz('1')" v-if="pzType == 1">
  2216. 确定
  2217. </div>
  2218. </div>
  2219. </div>
  2220. <div v-if="proVisible" class="mask">
  2221. <div class="progressBox">
  2222. <div class="lbox"><img src="@/assets/loading.gif" />上传中,请稍后</div>
  2223. <el-progress :text-inside="true" :stroke-width="20" :percentage="progress" style="width: 80%"></el-progress>
  2224. </div>
  2225. </div>
  2226. <el-dialog :visible.sync="pictureDialog" size="tiny">
  2227. <img width="100%" :src="dialogImageUrl" alt />
  2228. </el-dialog>
  2229. <el-dialog :title="noteName != '' ? noteName : '查看问卷'" :visible.sync="dialogVisible5" :append-to-body="true"
  2230. width="1000px" :before-close="handleClose" class="dialog_diy dialog_diy3">
  2231. <div>
  2232. <div class="a_add_title" style="
  2233. display: flex;
  2234. flex-direction: row;
  2235. align-items: center;
  2236. justify-content: center;
  2237. ">
  2238. <div style="margin-right: 20px; font-size: 20px">标题:</div>
  2239. <div style="font-size: 20px">{{ askJson.askTitle }}</div>
  2240. </div>
  2241. <div class="a_addBox">
  2242. <div style="font-size: 16px; color: #c7c7c7">题目内容</div>
  2243. <div class="a_add_box" v-for="(item1, index1) in askJson.askCount" :key="index1">
  2244. <div class="a_add_head">
  2245. <div style="display: flex">
  2246. {{ index1 + 1 + "、" }}
  2247. <div>题目:{{ askJson.askJson[index1].askstitle }}</div>
  2248. </div>
  2249. <img v-if="askJson.askJson[index1].img" :src="askJson.askJson[index1].img"
  2250. style="height: 300px; margin-top: 10px; max-width: 100%" />
  2251. </div>
  2252. <div class="a_add_body">
  2253. <div class="a_add_input">
  2254. <el-radio-group v-model="radio[index1]">
  2255. <el-radio v-for="(item2, checkIndex) in askJson.askJson[index1]
  2256. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle"><span
  2257. v-html="item2"></span></el-radio>
  2258. </el-radio-group>
  2259. </div>
  2260. </div>
  2261. </div>
  2262. </div>
  2263. </div>
  2264. <span slot="footer" class="dialog-footer">
  2265. <el-button class="cancelbtnGM" @click="dialogVisible5 = false" v-show="noteName == ''">取 消</el-button>
  2266. <el-button class="btnClassGM" type="primary" @click="addStudentAsk" v-show="noteName == ''">确 定</el-button>
  2267. </span>
  2268. </el-dialog>
  2269. <el-dialog :title="noteName != '' ? noteName : '查看问卷'" :visible.sync="dialogVisibleChoice" :append-to-body="true"
  2270. width="1000px" :before-close="handleClose" class="dialog_diy dialog_diy3">
  2271. <div>
  2272. <!-- <div class="a_add_title" style="
  2273. display: flex;
  2274. flex-direction: row;
  2275. align-items: center;
  2276. justify-content: center;
  2277. ">
  2278. <div style="margin-right: 20px; font-size: 20px">标题:</div>
  2279. <div style="font-size: 20px">{{ testJson.testTitle }}</div>
  2280. </div> -->
  2281. <div class="a_addBox">
  2282. <div style="font-size: 16px; color: #c7c7c7">题目内容</div>
  2283. <div class="a_add_box" v-for="(item1, index1) in testJson.testCount" :key="index1">
  2284. <div class="a_add_head">
  2285. <div style="display: flex">
  2286. {{ index1 + 1 + "、" }}
  2287. <div>题目:{{ testJson.testJson[index1].teststitle }}</div>
  2288. </div>
  2289. <img v-if="testJson.testJson[index1].img" :src="testJson.testJson[index1].img"
  2290. style="height: 300px; margin-top: 10px; max-width: 100%" />
  2291. </div>
  2292. <div class="a_add_body">
  2293. <div class="a_add_input">
  2294. <el-radio-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '1'">
  2295. <el-radio v-for="(item2, checkIndex) in testJson.testJson[index1]
  2296. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle"><span
  2297. v-html="item2"></span></el-radio>
  2298. </el-radio-group>
  2299. <el-checkbox-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '2'">
  2300. <el-checkbox v-for="(item2, checkIndex) in testJson.testJson[index1]
  2301. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle">
  2302. <span v-html="item2"></span>
  2303. </el-checkbox>
  2304. </el-checkbox-group>
  2305. </div>
  2306. </div>
  2307. </div>
  2308. </div>
  2309. </div>
  2310. <span slot="footer" class="dialog-footer">
  2311. <el-button class="cancelbtnGM" @click="dialogVisibleChoice = false" v-show="noteName == ''">取 消</el-button>
  2312. <el-button class="btnClassGM" type="primary" @click="addStudentTest" v-show="noteName == ''">确 定</el-button>
  2313. </span>
  2314. </el-dialog>
  2315. <el-dialog title="查看富文本" :visible.sync="dialogVisible1" :append-to-body="true" width="500px"
  2316. :before-close="handleClose" class="dialog_diy textCss">
  2317. <el-form style="font-size: 20px">
  2318. <el-form-item label="文本标题" class="textTitle">
  2319. <div style="font-size: 20px">{{ text.name }}</div>
  2320. </el-form-item>
  2321. <div>富文本内容</div>
  2322. <div v-html="text.url" style="font-size: 18px; padding: 40px 0 0 0"></div>
  2323. </el-form>
  2324. <span slot="footer" class="dialog-footer">
  2325. <el-button class="btnClassGM" type="primary" @click="dialogVisible1 = false">确定</el-button>
  2326. </span>
  2327. </el-dialog>
  2328. <el-dialog title="文件预览" :visible.sync="dialogVisible3" width="50%" :before-close="handleClose" class="dialog_diy"
  2329. :class="{ fullStyle: full }">
  2330. <div slot="title" class="header-title">
  2331. <div style="color: #fff">文件预览</div>
  2332. <div style="position: absolute; top: 19px; right: 50px">
  2333. <img src="@/assets/full.png" style="height: 16px; cursor: pointer" alt="" @click="fullTools" />
  2334. </div>
  2335. </div>
  2336. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"
  2337. :class="{ fullStyle: full }"></pdf>
  2338. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600" :class="{ fullStyle: full }"></iframe>
  2339. </el-dialog>
  2340. <el-dialog title="文件预览" :visible.sync="dialogVisible6" width="50%" :before-close="handleClose" class="dialog_diy">
  2341. <iframe :src="pptImgUrl1" frameborder="0" width="100%" height="600"></iframe>
  2342. </el-dialog>
  2343. <el-dialog title="提示" :visible.sync="dialogVisible4" :append-to-body="true" width="800px"
  2344. :before-close="handleClose" class="dialog_diy notice">
  2345. <div>此功能暂未开放!</div>
  2346. <el-button type="primary" @click="dialogVisible4 = false">确定</el-button>
  2347. </el-dialog>
  2348. <el-dialog title="问答" :visible.sync="answerDialogVisible" :append-to-body="true" width="800px"
  2349. :before-close="handleClose" class="dialog_diy">
  2350. <div>
  2351. <div style="
  2352. display: flex;
  2353. flex-wrap: nowrap;
  2354. flex-direction: column;
  2355. position: relative;
  2356. ">
  2357. <div class="queTop" style="padding: 20px 0 20px 0">
  2358. <div class="question">
  2359. <img src="@/assets/icon/question.png" alt />
  2360. </div>
  2361. <div class="queTitle">
  2362. <div style="width: 90px; min-width: 90px">提问:</div>
  2363. <div>{{ answerQ }}</div>
  2364. </div>
  2365. </div>
  2366. <div class="ediBottom">
  2367. <textarea rows="6" class="binfo_input" cols style="width: 95%; height: 120px"
  2368. v-model="questionAnswer"></textarea>
  2369. </div>
  2370. </div>
  2371. </div>
  2372. <div slot="footer">
  2373. <el-button class="cancelbtnGM" @click="answerDialogVisible = false">取 消</el-button>
  2374. <el-button class="btnClassGM" type="primary" @click="addQuestion">提 交</el-button>
  2375. </div>
  2376. </el-dialog>
  2377. <el-dialog title="倒计时" :visible.sync="timeDialogVisible" :append-to-body="true" width="800px"
  2378. :before-close="handleClose" class="dialog_diy">
  2379. <div>
  2380. <Time v-if="timeDialogVisible"></Time>
  2381. </div>
  2382. <div slot="footer">
  2383. <el-button class="cancelbtnGM" @click="timeDialogVisible = false">关 闭</el-button>
  2384. </div>
  2385. </el-dialog>
  2386. <el-dialog title="权限设置" :visible.sync="juriVisible" :append-to-body="true" width="400px" :before-close="handleClose"
  2387. class="dialog_diy">
  2388. <div>
  2389. <div class="open_box">
  2390. <div class="switch_box">
  2391. <span>允许学生查看所有作业</span>
  2392. <el-switch v-model="sIsOpen" active-text="" class="switchCss" @change="updateSLook"></el-switch>
  2393. </div>
  2394. <div class="switch_box" v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1">
  2395. <span>不允许学生查看所有阶段</span>
  2396. <el-switch v-model="IsLookOpen" active-text="" class="switchCss" @change="updateLookOpen"></el-switch>
  2397. </div>
  2398. </div>
  2399. </div>
  2400. <div slot="footer">
  2401. <el-button class="cancelbtnGM" @click="juriVisible = false">关 闭</el-button>
  2402. </div>
  2403. </el-dialog>
  2404. <el-dialog title="查看视频" :visible.sync="videoVisible" :append-to-body="true" width="1000px"
  2405. :before-close="handleClose" class="dialog_diy1">
  2406. <div class="workd_media" style="height: 100%" v-if="videoDetail.sources">
  2407. <video-player class="video-player vjs-custom-skin" :playsinline="true" :options="videoDetail"
  2408. @play="onPlayerPlay($event)" style="width: 100%; height: 100%"></video-player>
  2409. </div>
  2410. <div slot="footer">
  2411. <el-button class="btnClassGM" style="color: #fff"
  2412. @click="(videoVisible = false), (videoDetail.sources[0].src = '')">
  2413. 关 闭</el-button>
  2414. </div>
  2415. </el-dialog>
  2416. <el-dialog title="查看详情" :visible.sync="commentDialogVisible" :append-to-body="true" width="800px"
  2417. :before-close="handleClose" class="dialog_diy">
  2418. <div class="commentTop">
  2419. <div class="studentDetail">
  2420. <div class="tx"><img src="@/assets/avatar.png" alt="" /></div>
  2421. <div class="nameAndTime">
  2422. <div style="margin-bottom: 5px">{{ commentDetail.sName }}</div>
  2423. <div>{{ commentDetail.time }}</div>
  2424. </div>
  2425. <div class="returnBtn btnClassGM" style="margin-left: auto;width: 80px;" v-if="
  2426. (commentDetail.works && commentDetail.type == 0) ||
  2427. tType == 1 ||
  2428. tType == 4
  2429. " @click="showPicturePaint(commentDetail.img ? commentDetail.img : commentDetail.works)">
  2430. 教师批注
  2431. </div>
  2432. </div>
  2433. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 2">
  2434. {{ JSON.parse(commentDetail.works)[0].answer }}
  2435. </div>
  2436. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 1">
  2437. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"
  2438. :class="{ fullStyle: full }"></pdf>
  2439. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600"
  2440. :class="{ fullStyle: full }"></iframe>
  2441. </div>
  2442. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 0">
  2443. <img :src="commentDetail.works" alt="" @click="previewImg(commentDetail.works)" />
  2444. </div>
  2445. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 3">
  2446. <video-player class="video-player vjs-custom-skin" :playsinline="true" :options="videoDetail"
  2447. @play="onPlayerPlay($event)" style="width: 90%; height: 100%; margin: 0 0 0 30px"></video-player>
  2448. </div>
  2449. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 4">
  2450. <div class="evalCss">
  2451. <div class="nav">请选择星星进行评分</div>
  2452. <div class="middleBox" v-if="eScore.eStar">
  2453. <div class="pfBox" v-for="(e, eIndex) in rateJson" :key="eIndex">
  2454. <div class="nameAndrate">
  2455. <div>{{ e.value }}</div>
  2456. <el-rate v-model="eScore.eStar[eIndex]" disabled></el-rate>
  2457. </div>
  2458. <div v-if="e.detail">{{ e.detail }}</div>
  2459. </div>
  2460. <div class="bz">
  2461. <textarea disabled rows="4" class="pj" style="
  2462. padding: 10px 5px;
  2463. width: 70%;
  2464. background: #f7f6f9;
  2465. font-size: 14px;
  2466. text-indent: 10px;
  2467. color: #000;
  2468. " cols v-model="eScore.eBzText" placeholder="请输入评价内容..."></textarea>
  2469. </div>
  2470. </div>
  2471. </div>
  2472. </div>
  2473. <div class="comment">
  2474. <div class="commentList">
  2475. <div class="commentImg">
  2476. <img @click="
  2477. isLikes(
  2478. commentDetail.wid,
  2479. userid,
  2480. 1,
  2481. null,
  2482. commentDetail.isLikes
  2483. )
  2484. " :src="commentDetail.isLikes == true ? likes : noLikes" alt="" />
  2485. </div>
  2486. <div>{{ commentDetail.likesCount }}</div>
  2487. </div>
  2488. <div class="commentList">
  2489. <div class="commentImg">
  2490. <img src="@/assets/icon/comment/comment.png" alt="" />
  2491. </div>
  2492. <div>{{ commentDetail.commentCount }}</div>
  2493. </div>
  2494. </div>
  2495. <div class="drawPBox" v-if="commentDetail.img">
  2496. <span>教师批注</span>
  2497. <img :src="commentDetail.img" alt="" @click="previewImg(commentDetail.img)" />
  2498. <span class="deleteImg" v-if="tType == 1 || tType == 4" @click.stop="deletePicturePaint(commentDetail.wid)"
  2499. style="font-size: 14px;width: auto !important;color: #b4b4b4;top: unset;bottom: 0;border: none;padding: 0;height: auto !important;margin: 0;">删除</span>
  2500. </div>
  2501. </div>
  2502. <div class="commentBox">
  2503. <div class="pl">评论:</div>
  2504. <div style="max-height: 200px; overflow: auto">
  2505. <div v-if="commentDetail.commentJson" style="padding: 10px 0 0 0">
  2506. <div class="studentDetail" style="padding-top: 10px" v-for="(co, coIndex) in commentDetail.commentJson"
  2507. :key="coIndex">
  2508. <div class="tx" style="min-width: 50px">
  2509. <img src="@/assets/avatar.png" alt="" />
  2510. </div>
  2511. <div class="plPerson">
  2512. <div class="plName">
  2513. <div>{{ co.commentPeople }}</div>
  2514. <div style="margin-left: 5px">
  2515. {{ co.commentTime }}
  2516. </div>
  2517. </div>
  2518. <div class="plContent">{{ co.commentText }}</div>
  2519. </div>
  2520. </div>
  2521. </div>
  2522. <div v-else style="padding: 10px 0 0 0">暂无评论</div>
  2523. </div>
  2524. </div>
  2525. <div style="margin-top: 10px">
  2526. <div class="displayBox">
  2527. <div style="
  2528. color: #556db4;
  2529. font-size: 14px;
  2530. font-weight: bold;
  2531. padding-bottom: 10px;
  2532. ">
  2533. 评价
  2534. </div>
  2535. <div class="easy_comment">
  2536. <div v-for="(p, pIndex) in PlTextList" :key="pIndex" @click="fastText(p, 1)">
  2537. {{ p }}
  2538. </div>
  2539. </div>
  2540. </div>
  2541. <div>
  2542. <textarea rows="3" class="pj" style="padding: 10px 5px" cols v-model="commentText"
  2543. placeholder="请输入对该学生的评价"></textarea>
  2544. </div>
  2545. </div>
  2546. <div slot="footer">
  2547. <el-button class="cancelbtnGM" @click="
  2548. (commentDialogVisible = false),
  2549. (commentIndexJson = {}),
  2550. videoDetail.sources && videoDetail.sources[0]
  2551. ? (videoDetail.sources[0].src = '')
  2552. : ''
  2553. ">取 消</el-button>
  2554. <el-button class="btnClassGM" type="primary" @click="addComment(commentDetail.wid, userid, 2)">确 定</el-button>
  2555. </div>
  2556. </el-dialog>
  2557. <el-dialog title="查看文档" :visible.sync="fullDialogVisible" :append-to-body="true" width="100%"
  2558. :before-close="handleClose" :show-close="false" class="dialog_diy full_diy" :class="{ full_diy2: fulltype == 3 }">
  2559. <div slot="title" class="header-title">
  2560. <div style="color: #fff">查看文档</div>
  2561. <div @click="fullDialogVisible = false" style="
  2562. cursor: pointer;
  2563. position: absolute;
  2564. top: 20px;
  2565. right: 20px;
  2566. color: #fff;
  2567. ">
  2568. 退出全屏
  2569. </div>
  2570. </div>
  2571. <div style="height: 100%">
  2572. <iframe v-if="fulltype == 2" style="width: 100%; height: 100%; border: none" :src="fullUrl"></iframe>
  2573. <pdf v-else-if="fulltype == 3" :pdfUrl="fullUrl" style="width: 100%; height: 100%; overflow: auto"></pdf>
  2574. <div class="wheel" v-if="fulltype == 1" style="
  2575. box-shadow: 0 0 6px 1px #f2f2f2;
  2576. width: 100%;
  2577. background: #f1f1f1;
  2578. ">
  2579. <div class="title" style="width: 100%; box-sizing: border-box">
  2580. 查看文档
  2581. </div>
  2582. <el-form class="textBox" style="height: 90%">
  2583. <el-form-item class="textTitle">
  2584. <div style="font-size: 22px; max-height: 100px; overflow: auto">
  2585. {{ fullUrl.name }}
  2586. </div>
  2587. </el-form-item>
  2588. <!-- <div style="color: #918f8f; width: 85%">文档内容</div> -->
  2589. <div v-html="fullUrl.url" class="textContent" style="height: auto"></div>
  2590. </el-form>
  2591. </div>
  2592. </div>
  2593. <!-- <div slot="footer">
  2594. <el-button @click="fullDialogVisible = false">关 闭</el-button>
  2595. </div> -->
  2596. </el-dialog>
  2597. <el-dialog title="学生评价" :visible.sync="studentEvalDialogVisible" :append-to-body="true" width="800px"
  2598. :before-close="handleClose" class="dialog_diy">
  2599. <div class="evalCss">
  2600. <div class="nav">请选择星星进行评分</div>
  2601. <div class="middleBox" v-if="eScore.eStar">
  2602. <div class="pfBox" v-for="(e, eIndex) in rateJson" :key="eIndex">
  2603. <div class="nameAndrate">
  2604. <div>{{ e.value }}</div>
  2605. <el-rate v-model="eScore.eStar[eIndex]" :disabled="isStar"></el-rate>
  2606. </div>
  2607. <div v-if="e.detail">{{ e.detail }}</div>
  2608. </div>
  2609. <div class="easy_comment" v-if="isStar == false">
  2610. <div v-for="(p, pIndex) in PlTextList" :key="pIndex" @click="fastText(p, 2)">
  2611. {{ p }}
  2612. </div>
  2613. </div>
  2614. <div class="bz">
  2615. <textarea :disabled="isStar" rows="4" class="pj" style="
  2616. padding: 10px 5px;
  2617. width: 70%;
  2618. background: #f7f6f9;
  2619. font-size: 14px;
  2620. text-indent: 10px;
  2621. " cols v-model="eScore.eBzText" placeholder="请输入评价内容..."></textarea>
  2622. </div>
  2623. </div>
  2624. </div>
  2625. <div slot="footer">
  2626. <el-button class="cancelbtnGM" @click="studentEvalDialogVisible = false">取 消</el-button>
  2627. <el-button class="btnClassGM" type="primary" @click="addBzWorks" v-if="!isStar">确 定</el-button>
  2628. </div>
  2629. </el-dialog>
  2630. <el-dialog title="选择填空" :visible.sync="dialogVisibleSelect" :append-to-body="true" width="90%"
  2631. :before-close="handleClose" class="dialog_diy dialog_diy3">
  2632. <div v-if="selectJson">
  2633. <div class="select_box2">
  2634. <div class="select_box2_title">
  2635. <div>选择填空</div>
  2636. <div>请选择对应的答案进行答题!</div>
  2637. </div>
  2638. <div class="select_box2_box">
  2639. <div class="select_box2_img">
  2640. <img :src="selectJson.url" @click="previewImg(selectJson.url)" alt="" />
  2641. </div>
  2642. <div :class="isSelect ? 'rightWidthCss' : 'select_box2_answer'">
  2643. <div style="padding-top: 15px">
  2644. <div class="select_answer_title" v-if="isSelect">
  2645. {{ selectAnswer.stu }}
  2646. </div>
  2647. <div class="select_answer_title" v-else>
  2648. 根据题目选择对应答案
  2649. </div>
  2650. <div class="select_box2_answer_box" v-for="(item2, checkIndex) in selectJson.select" :key="checkIndex">
  2651. <span style="min-width: 30px">{{ checkIndex + 1 }}、</span>
  2652. <el-select :disabled="isSelect" v-model="selectAnswer.answer[checkIndex]" placeholder="请选择正确答案">
  2653. <el-option v-for="(e, eIndex) in selectJson.select" :key="eIndex" :label="e" :value="eIndex">
  2654. </el-option>
  2655. </el-select>
  2656. </div>
  2657. </div>
  2658. <div class="rightAnswerCss" v-if="isSelect && (tType == 1 || tType == 4)">
  2659. <div v-for="(a, aIndex) in selectJson.answer" :key="aIndex" class="rightAnswer">
  2660. <div v-if="selectAnswer.answer[aIndex] === a" style="color: #767de1">
  2661. 回答正确
  2662. </div>
  2663. <div v-else>回答错误</div>
  2664. <div style="margin-left: 10px" v-if="selectAnswer.answer[aIndex] !== a">
  2665. 正确答案:
  2666. </div>
  2667. <div :class="
  2668. selectAnswer.answer[aIndex] === a ? 'blueCss' : 'redCss'
  2669. ">
  2670. {{ selectJson.select[a] }}
  2671. </div>
  2672. </div>
  2673. </div>
  2674. </div>
  2675. <div class="upAnswerCss">
  2676. <el-button class="btnClassGM" type="primary" @click="addSelectAnswer" v-if="!isSelect">提交答案</el-button>
  2677. </div>
  2678. </div>
  2679. </div>
  2680. </div>
  2681. </el-dialog>
  2682. <el-dialog title="教师评分" :visible.sync="dialogVisibleScore" :append-to-body="true" width="800px"
  2683. :before-close="handleClose" class="dialog_diy">
  2684. <div>
  2685. <div class="studentDetail">
  2686. <div class="tx"><img src="@/assets/avatar.png" alt="" /></div>
  2687. <div class="nameAndTime">
  2688. <div style="margin-bottom: 5px">{{ commentDetail.sName }}</div>
  2689. <div>{{ commentDetail.time }}</div>
  2690. </div>
  2691. </div>
  2692. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 2">
  2693. {{ JSON.parse(commentDetail.works)[0].answer }}
  2694. </div>
  2695. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 1">
  2696. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"
  2697. :class="{ fullStyle: full }"></pdf>
  2698. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600"
  2699. :class="{ fullStyle: full }"></iframe>
  2700. </div>
  2701. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 0">
  2702. <img :src="commentDetail.works" alt="" @click="previewImg(commentDetail.works)" />
  2703. </div>
  2704. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 3">
  2705. <video-player class="video-player vjs-custom-skin" :playsinline="true" :options="videoDetail"
  2706. @play="onPlayerPlay($event)" style="width: 90%; height: 100%; margin: 0 0 0 30px"></video-player>
  2707. </div>
  2708. <div class="scoreBox">
  2709. <span class="t">请输入分数</span><el-input-number :disabled="courseDetail.userid != userid" v-model="wScore"
  2710. :controls="false" :min="0" :max="100"></el-input-number>
  2711. </div>
  2712. <div class="scoreDetailBox">
  2713. <span class="t">评分评论</span>
  2714. <el-input type="textarea" :rows="5" :disabled="courseDetail.userid != userid" resize="none"
  2715. v-model="scoreDetail" placeholder="请输入对学生的评价">
  2716. </el-input>
  2717. </div>
  2718. </div>
  2719. <span slot="footer" class="dialog-footer">
  2720. <el-button class="cancelbtnGM" @click="
  2721. (dialogVisibleScore = false),
  2722. (commentIndexJson = {}),
  2723. videoDetail.sources && videoDetail.sources[0]
  2724. ? (videoDetail.sources[0].src = '')
  2725. : ''
  2726. ">取 消</el-button>
  2727. <el-button type="primary" class="btnClassGM" v-if="courseDetail.userid == userid"
  2728. @click="scoreWork(commentDetail.wid)">确 定</el-button>
  2729. </span>
  2730. </el-dialog>
  2731. <ImgDraw :drawShow="drawShow" @closeDraw="closeDraw" @addImgDraw="addImgDraw" :bg="bg"></ImgDraw>
  2732. </div>
  2733. </template>
  2734. <script>
  2735. import "../../common/aws-sdk-2.235.1.min.js";
  2736. // import pdf from "./components/pdf3";
  2737. import pdf from "../components/vpdfGM";
  2738. import AskStatic from "../components/askStaticGM";
  2739. import AskStatic2 from "../components/askStatic2GM";
  2740. import AnswerData2 from "../components/answerData2";
  2741. import EditorBar from "../tools/wangEnduit.vue";
  2742. import Time from "../tools/time.vue";
  2743. import Mind from "../tools/jsmind.vue";
  2744. import Sunburst from "../tools/sunburst";
  2745. import SeeBoard from "../tools/seeBoard";
  2746. import * as imageConversion from "image-conversion";
  2747. import Audio from "../components/audioGM.vue";
  2748. import ImgDraw from "../tools/imgDraw/imgDraw";
  2749. import RecordRTC from 'recordrtc';
  2750. export default {
  2751. components: {
  2752. EditorBar,
  2753. Time,
  2754. pdf,
  2755. AskStatic,
  2756. AskStatic2,
  2757. Mind,
  2758. Sunburst,
  2759. SeeBoard,
  2760. AnswerData2,
  2761. Audio,
  2762. ImgDraw,
  2763. },
  2764. data() {
  2765. return {
  2766. bg: false,
  2767. drawShow: false,
  2768. dialogVisible: false,
  2769. commentDialogVisible: false,
  2770. videoVisible: false,
  2771. isStar: false,
  2772. studentEvalDialogVisible: false,
  2773. dialogVisibleSelect: false,
  2774. dialogVisibleScore: false,
  2775. bzText: "",
  2776. commentDetail: [],
  2777. selectAnswer: [],
  2778. videoDetail: {},
  2779. selectJson: {},
  2780. eScore: { eBzText: "", eStar: [] },
  2781. id: this.$route.query.courseId,
  2782. userid: this.$route.query.userid,
  2783. classId: this.$route.query.cid,
  2784. // courseTypeLine: this.$route.query.type,
  2785. oid: this.$route.query.oid,
  2786. org: this.$route.query.org,
  2787. tType: this.$route.query.tType,
  2788. courseType: this.$route.query.type,
  2789. screenType: this.$route.query.screenType,
  2790. pptImgUrl: "",
  2791. pptImgUrl1: "",
  2792. commentText: "",
  2793. full: false,
  2794. sIsOpen: false,
  2795. IsLookOpen: false,
  2796. pzDialog: false,
  2797. type: 1,
  2798. vedio: [],
  2799. text: [],
  2800. textList: [],
  2801. line: [],
  2802. lineList: [],
  2803. chapTools: [],
  2804. chapToolList: [],
  2805. file: [],
  2806. vedioTime: [],
  2807. upToolImg: "",
  2808. rateList: {
  2809. ca: 0,
  2810. },
  2811. rateParams: [],
  2812. colors: ["#DFDFDF", "#DFDFDF", "#DFDFDF"],
  2813. studyJuri: [
  2814. {
  2815. content: "",
  2816. cover: [],
  2817. upVedio: [],
  2818. upFile: [],
  2819. },
  2820. ],
  2821. mr: require("@/assets/vedioPic.png"),
  2822. word: require("@/assets/icon/isWord.png"),
  2823. video: require("@/assets/icon/isVideo.png"),
  2824. noLikes: require("@/assets/icon/comment/noLikes.png"),
  2825. likes: require("@/assets/icon/comment/likes.png"),
  2826. scoreImg: require("@/assets/score.png"),
  2827. courseDetail: {},
  2828. isSelect: false,
  2829. chapInfo: [],
  2830. chapInfoList: [],
  2831. taskCount: 0,
  2832. imgList: [],
  2833. noImgList: [],
  2834. pzList: [],
  2835. PlTextList: [
  2836. "Excellent!",
  2837. "nice!",
  2838. "很有创意!",
  2839. "还不错哦~",
  2840. "继续努力哦~",
  2841. ],
  2842. isClickNav: "",
  2843. navId: "",
  2844. playerOptions: {
  2845. playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
  2846. autoplay: false, //如果true,浏览器准备好时开始回放。
  2847. muted: false, // 默认情况下将会消除任何音频。
  2848. loop: false, // 导致视频一结束就重新开始。
  2849. preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
  2850. language: "zh-CN",
  2851. aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
  2852. fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
  2853. sources: [
  2854. {
  2855. type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 || "video/ogg"|| "video/webm"
  2856. src: "", //url地址require("../@/assets/media/aaa.mp4")
  2857. },
  2858. ],
  2859. // poster: require("../@/assets/tu31.png"), //你的封面地址
  2860. // poster: dataRes.imgUrl, //你的封面地址
  2861. notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
  2862. controlBar: {
  2863. timeDivider: true, //当前时间和持续时间的分隔符
  2864. durationDisplay: true, //显示持续时间
  2865. remainingTimeDisplay: false, //是否显示剩余时间功能
  2866. fullscreenToggle: true, //全屏按钮
  2867. },
  2868. },
  2869. playerOptions1: {
  2870. playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
  2871. autoplay: false, //如果true,浏览器准备好时开始回放。
  2872. muted: false, // 默认情况下将会消除任何音频。
  2873. loop: false, // 导致视频一结束就重新开始。
  2874. preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
  2875. language: "zh-CN",
  2876. aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
  2877. fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
  2878. sources: [
  2879. {
  2880. type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 || "video/ogg"|| "video/webm"
  2881. src: "", //url地址require("../@/assets/media/aaa.mp4")
  2882. },
  2883. ],
  2884. // poster: require("../@/assets/tu31.png"), //你的封面地址
  2885. // poster: dataRes.imgUrl, //你的封面地址
  2886. notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
  2887. controlBar: {
  2888. timeDivider: true, //当前时间和持续时间的分隔符
  2889. durationDisplay: true, //显示持续时间
  2890. remainingTimeDisplay: false, //是否显示剩余时间功能
  2891. fullscreenToggle: true, //全屏按钮
  2892. },
  2893. },
  2894. playerO: {},
  2895. noneBtnImg: false,
  2896. proVisible: false,
  2897. progress: 0,
  2898. questionAnswer: "",
  2899. answerQ: "", //问答标题
  2900. rateJson: [],
  2901. wbCount: 0,
  2902. wordCount: 0,
  2903. mindCount: 0,
  2904. askCount: 0,
  2905. noteCount: 0,
  2906. mindNetWorkCount: 0,
  2907. libraryCount: 0,
  2908. workCount: 0,
  2909. timeCount: 0,
  2910. answerCount: 0,
  2911. trainCount: 0,
  2912. evalCount: 0,
  2913. dialogImageUrl: "",
  2914. pictureDialog: false,
  2915. toolTypeList: [],
  2916. dialogVisible1: false,
  2917. dialogVisible2: false,
  2918. dialogVisible3: false,
  2919. dialogVisible6: false,
  2920. dialogVisible4: false,
  2921. isNoHomeWork: false,
  2922. dialogVisible5: false,
  2923. dialogVisibleChoice: false,
  2924. answerDialogVisible: false,
  2925. juriVisible: false,
  2926. timeDialogVisible: false,
  2927. radio: [],
  2928. isAsk: false,
  2929. askJson: {
  2930. askCount: 1,
  2931. askTitle: "",
  2932. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  2933. },
  2934. testJson: {},
  2935. checkJson: [],
  2936. askList: [],
  2937. answerList: [],
  2938. navList: [],
  2939. addPzDialog: false,
  2940. pzConText: "",
  2941. worksStudent: [],
  2942. workStudent: [],
  2943. noWorksS: [],
  2944. isWorksS: [],
  2945. noWorksStudent: [],
  2946. toolindex: 0,
  2947. workTypeA: false,
  2948. workTypeB: false,
  2949. workTypeC: false,
  2950. isAnswer: false,
  2951. timer: null,
  2952. showType: 0,
  2953. fileType: 0,
  2954. showPDF: false,
  2955. noteName: "",
  2956. evaJuri: [],
  2957. evalua: "",
  2958. eTitle: "",
  2959. eName: "",
  2960. eJson: {},
  2961. fid: "", //一级
  2962. sid: "", //二级
  2963. tid: "", //二级
  2964. typeMode: 1,
  2965. eJSONNum: 0,
  2966. Etype: 1,
  2967. data: {
  2968. meta: {
  2969. name: "example",
  2970. author: "dd@163.com",
  2971. version: "0.2",
  2972. },
  2973. format: "node_array",
  2974. data: [{ id: "root", isroot: true, topic: "" }],
  2975. },
  2976. fullDialogVisible: false,
  2977. fulltype: "",
  2978. fullUrl: "",
  2979. commentIndexJson: {},
  2980. Stbodywidth: 0,
  2981. pzType: 1,
  2982. wScore: 0,
  2983. scoreDetail: "",
  2984. videoStart: false,
  2985. recorder: null,
  2986. };
  2987. },
  2988. methods: {
  2989. jump() {
  2990. window.opener.postMessage({ tools: "43" }, "*");
  2991. },
  2992. previewImg(url) {
  2993. this.$hevueImgPreview(url);
  2994. },
  2995. change(val) {
  2996. console.log(val);
  2997. },
  2998. goTo(path) {
  2999. this.$router.push(path);
  3000. },
  3001. handlePictureCardPreview(url) {
  3002. this.dialogImageUrl = url;
  3003. this.pictureDialog = true;
  3004. },
  3005. clean(type) {
  3006. if (type == 1) {
  3007. this.studyJuri[0].cover.splice(0, 1);
  3008. } else if (type == 2) {
  3009. this.studyJuri[0].upVedio.splice(0, 1);
  3010. } else {
  3011. this.studyJuri[0].upFile.splice(0, 1);
  3012. }
  3013. },
  3014. handleClose(done) {
  3015. if (this.videoDetail.sources && this.videoDetail.sources[0]) {
  3016. this.videoDetail.sources[0].src = "";
  3017. }
  3018. this.commentIndexJson = {};
  3019. done();
  3020. },
  3021. fullTools() {
  3022. this.full = !this.full;
  3023. },
  3024. imgChange(file, fileList, type) {
  3025. if (type == 1) {
  3026. var _tmp = this.studyJuri[0].cover;
  3027. } else if (type == 2) {
  3028. var _tmp = this.studyJuri[0].upVedio;
  3029. } else {
  3030. var _tmp = this.studyJuri[0].upFile;
  3031. }
  3032. this.noneBtnImg = _tmp.length >= 1;
  3033. },
  3034. addImg(e) {
  3035. var el = e.currentTarget;
  3036. // this.$message.success('触发上传')
  3037. el.getElementsByTagName("input")[0].click();
  3038. },
  3039. addSelectAnswer() {
  3040. let params = [
  3041. {
  3042. uid: this.userid,
  3043. cid: this.id,
  3044. stage: this.courseType,
  3045. task: this.taskCount,
  3046. tool: this.toolindex,
  3047. content: this.selectAnswer.answer,
  3048. type: 7,
  3049. },
  3050. ];
  3051. this.ajax
  3052. .post(this.$store.state.api + "addCourseWorks", params)
  3053. .then((res) => {
  3054. this.$message({
  3055. message: "提交成功",
  3056. type: "success",
  3057. });
  3058. this.dialogVisibleSelect = false;
  3059. // this.selectAnswer = {};
  3060. this.selectSWorks();
  3061. this.selectStudent();
  3062. })
  3063. .catch((err) => {
  3064. this.$message.error("提交失败");
  3065. console.error(err);
  3066. });
  3067. },
  3068. addCourseWorks(i) {
  3069. var typesql;
  3070. if (this.fileType === 0) {
  3071. typesql = 1;
  3072. } else if (this.fileType === 1) {
  3073. typesql = 4;
  3074. } else {
  3075. typesql = 5;
  3076. }
  3077. if (!this.studyJuri[0].cover[0].url) {
  3078. this.$message.error("请上传文件")
  3079. return;
  3080. }
  3081. if (this.workTypeA == true) {
  3082. this.$confirm(
  3083. "您已经提交了该作业了,如果您再提交将覆盖上次提交的作业!",
  3084. "提示",
  3085. {
  3086. confirmButtonText: "确定",
  3087. cancelButtonText: "取消",
  3088. type: "warning",
  3089. }
  3090. )
  3091. .then(() => {
  3092. let params = [
  3093. {
  3094. uid: this.userid,
  3095. cid: this.id,
  3096. stage: this.courseType,
  3097. task: i,
  3098. tool: this.toolindex,
  3099. content: this.studyJuri[0].cover[0].url,
  3100. type: typesql,
  3101. },
  3102. ];
  3103. this.ajax
  3104. .post(this.$store.state.api + "addCourseWorks", params)
  3105. .then((res) => {
  3106. this.$message({
  3107. message: "提交成功",
  3108. type: "success",
  3109. });
  3110. this.studyJuri[0].cover = [];
  3111. this.dialogVisible = false;
  3112. this.getCourseDetail();
  3113. })
  3114. .catch((err) => {
  3115. this.$message.error("提交失败");
  3116. console.error(err);
  3117. });
  3118. })
  3119. .catch(() => { });
  3120. } else {
  3121. let params = [
  3122. {
  3123. uid: this.userid,
  3124. cid: this.id,
  3125. stage: this.courseType,
  3126. task: i,
  3127. tool: this.toolindex,
  3128. content: this.studyJuri[0].cover[0].url,
  3129. type: typesql,
  3130. },
  3131. ];
  3132. this.ajax
  3133. .post(this.$store.state.api + "addCourseWorks", params)
  3134. .then((res) => {
  3135. this.$message({
  3136. message: "提交成功",
  3137. type: "success",
  3138. });
  3139. this.studyJuri[0].cover = [];
  3140. this.dialogVisible = false;
  3141. this.getCourseDetail();
  3142. })
  3143. .catch((err) => {
  3144. this.$message.error("提交失败");
  3145. console.error(err);
  3146. });
  3147. }
  3148. },
  3149. selectWorksStudent() {
  3150. let params = {
  3151. oid: this.oid,
  3152. cid: this.courseDetail.juri,
  3153. };
  3154. this.ajax
  3155. .get(this.$store.state.api + "selectWorksStudent", params)
  3156. .then((res) => {
  3157. var a = res.data[0];
  3158. for (var i = 0; i < this.isWorksS.length; i++) {
  3159. this.noWorksS[i] = [];
  3160. var studentK = [];
  3161. if (this.isWorksS[i].length > 0) {
  3162. for (var z = 0; z < this.isWorksS[i].length; z++) {
  3163. studentK.push(this.isWorksS[i][z].uid);
  3164. }
  3165. studentK = studentK.join(",");
  3166. for (var j = 0; j < a.length; j++) {
  3167. if (studentK.indexOf(a[j].userid) == -1) {
  3168. this.noWorksS[i].push({ student: a[j].name });
  3169. }
  3170. }
  3171. } else {
  3172. for (var k = 0; k < a.length; k++) {
  3173. this.noWorksS[i].push({ student: a[k].name });
  3174. }
  3175. }
  3176. }
  3177. this.$forceUpdate();
  3178. if (
  3179. Object.keys(this.commentDetail).length &&
  3180. Object.keys(this.commentIndexJson).length &&
  3181. !this.dialogVisibleScore
  3182. ) {
  3183. let a = 1
  3184. for (var i = 0; i < this.worksStudent[this.commentIndexJson.toolIndex].length; i++) {
  3185. let el = this.worksStudent[this.commentIndexJson.toolIndex][i]
  3186. if (el.wid == this.commentDetail.wid) {
  3187. a = 2
  3188. this.commentOther(
  3189. this.worksStudent[this.commentIndexJson.toolIndex][
  3190. i
  3191. ],
  3192. this.commentIndexJson.toolIndex,
  3193. i
  3194. );
  3195. break;
  3196. }
  3197. }
  3198. if (a === 1) {
  3199. this.commentDetail = []
  3200. this.commentIndexJson = {}
  3201. this.commentDialogVisible = false;
  3202. this.$message("此作业已被删除")
  3203. }
  3204. }
  3205. })
  3206. .catch((err) => {
  3207. console.error(err);
  3208. });
  3209. },
  3210. selectStudent() {
  3211. //学生查看自己作业
  3212. let params = {
  3213. uid: this.userid,
  3214. cid: this.id,
  3215. s: this.courseType,
  3216. t: this.taskCount,
  3217. };
  3218. this.ajax
  3219. .get(this.$store.state.api + "selectStudentWorks", params)
  3220. .then((res) => {
  3221. var a =
  3222. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  3223. this.taskCount
  3224. ].toolChoose;
  3225. var b = res.data[0];
  3226. var c = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  3227. var y = [
  3228. "AVI",
  3229. "NAVI",
  3230. "MPEG",
  3231. "ASF",
  3232. "MOV",
  3233. "WMV",
  3234. "3GP",
  3235. "RM",
  3236. "RMVB",
  3237. "FLV",
  3238. "F4V",
  3239. "H.264",
  3240. "H.265",
  3241. "REAL VIDEO",
  3242. "MKV",
  3243. "WebM",
  3244. "HDDVD",
  3245. "MP4",
  3246. "MPG",
  3247. "M4V",
  3248. "MGV",
  3249. "OGV",
  3250. "QTM",
  3251. "STR",
  3252. "AMC",
  3253. "DVX",
  3254. "EVO",
  3255. "DAT",
  3256. "OGG",
  3257. "OGM",
  3258. ];
  3259. for (var i = 0; i < a.length; i++) {
  3260. this.workStudent[i] = [];
  3261. for (var j = 0; j < b.length; j++) {
  3262. if (i == b[j].tool) {
  3263. if (
  3264. (b[j].type == 1 ||
  3265. b[j].type == 4 ||
  3266. b[j].type == 5 ||
  3267. b[j].type == 6 ||
  3268. b[j].type == 7) &&
  3269. a[i].tool[0] != 15 &&
  3270. a[i].tool[0] != 4 &&
  3271. a[i].tool[0] != 45
  3272. ) {
  3273. if (
  3274. c.indexOf(
  3275. b[j].content
  3276. .split(".")
  3277. [b[j].content.split(".").length - 1].toLocaleUpperCase()
  3278. ) != -1
  3279. ) {
  3280. this.workStudent[i].push({
  3281. works: b[j].content,
  3282. sName: b[j].name,
  3283. score: b[j].score,
  3284. img: b[j].img,
  3285. type: 1,
  3286. time: b[j].time,
  3287. userid: b[j].userid,
  3288. wid: b[j].id,
  3289. });
  3290. } else if (
  3291. y.indexOf(
  3292. b[j].content
  3293. .split(".")
  3294. [b[j].content.split(".").length - 1].toLocaleUpperCase()
  3295. ) != -1
  3296. ) {
  3297. this.workStudent[i].push({
  3298. userid: b[j].userid,
  3299. wid: b[j].id,
  3300. works: b[j].content,
  3301. sName: b[j].name,
  3302. score: b[j].score,
  3303. img: b[j].img,
  3304. type: 3,
  3305. time: b[j].time,
  3306. });
  3307. } else if (b[j].type == 6) {
  3308. this.workStudent[i].push({
  3309. userid: b[j].userid,
  3310. wid: b[j].id,
  3311. works: b[j].content,
  3312. sName: b[j].name,
  3313. score: b[j].score,
  3314. img: b[j].img,
  3315. type: 4,
  3316. time: b[j].time,
  3317. });
  3318. } else if (b[j].type == 7) {
  3319. this.workStudent[i].push({
  3320. userid: b[j].userid,
  3321. wid: b[j].id,
  3322. works: b[j].content,
  3323. sName: b[j].name,
  3324. score: b[j].score,
  3325. img: b[j].img,
  3326. type: 5,
  3327. time: b[j].time,
  3328. });
  3329. } else if (b[j].type == 1 && a[i].tool[0] == b[j].atool) {
  3330. this.workStudent[i].push({
  3331. works: b[j].content,
  3332. sName: b[j].name,
  3333. score: b[j].score,
  3334. img: b[j].img,
  3335. type: 0,
  3336. time: b[j].time,
  3337. userid: b[j].userid,
  3338. wid: b[j].id,
  3339. });
  3340. } else if (b[j].type == 1 && !parseInt(b[j].atool)) {
  3341. this.workStudent[i].push({
  3342. works: b[j].content,
  3343. sName: b[j].name,
  3344. score: b[j].score,
  3345. img: b[j].img,
  3346. type: 0,
  3347. time: b[j].time,
  3348. userid: b[j].userid,
  3349. wid: b[j].id,
  3350. });
  3351. }
  3352. } else if (b[j].type == 3 && a[i].tool[0] == 15) {
  3353. this.workStudent[i].push({
  3354. works: b[j].content,
  3355. sName: b[j].name,
  3356. score: b[j].score,
  3357. img: b[j].img,
  3358. type: 2,
  3359. time: b[j].time,
  3360. userid: b[j].userid,
  3361. wid: b[j].id,
  3362. });
  3363. } else if (b[j].type == 2 && a[i].tool[0] == 4) {
  3364. //问卷
  3365. this.workStudent[i].push({
  3366. works: b[j].content,
  3367. sName: b[j].name,
  3368. score: b[j].score,
  3369. img: b[j].img,
  3370. type: 2,
  3371. time: b[j].time,
  3372. userid: b[j].userid,
  3373. wid: b[j].id,
  3374. });
  3375. } else if (b[j].type == 8 && a[i].tool[0] == 45) {
  3376. //选择题
  3377. this.workStudent[i].push({
  3378. works: b[j].content,
  3379. sName: b[j].name,
  3380. score: b[j].score,
  3381. img: b[j].img,
  3382. type: 8,
  3383. time: b[j].time,
  3384. userid: b[j].userid,
  3385. wid: b[j].id,
  3386. });
  3387. }
  3388. }
  3389. }
  3390. }
  3391. })
  3392. .catch((err) => {
  3393. console.error(err);
  3394. });
  3395. },
  3396. openVideo(w) {
  3397. this.videoDetail = {};
  3398. this.playerOptions1.sources[0].src = w;
  3399. this.videoDetail = this.playerOptions1;
  3400. this.videoVisible = true;
  3401. },
  3402. isLikes(wid, uid, t, c, isLikes) {
  3403. if (isLikes == false) {
  3404. let params = [
  3405. {
  3406. wid: wid,
  3407. lid: uid,
  3408. t: t,
  3409. c: c,
  3410. },
  3411. ];
  3412. this.ajax
  3413. .post(this.$store.state.api + "insertComment", params)
  3414. .then((res) => {
  3415. this.$message({
  3416. message: "点赞成功",
  3417. type: "success",
  3418. });
  3419. this.selectSWorks();
  3420. this.selectStudent();
  3421. })
  3422. .catch((err) => {
  3423. this.$message.error("点赞失败");
  3424. console.error(err);
  3425. });
  3426. } else {
  3427. let params = {
  3428. wid: wid,
  3429. lid: uid,
  3430. type: t,
  3431. };
  3432. this.ajax
  3433. .get(this.$store.state.api + "deleteComment", params)
  3434. .then((res) => {
  3435. this.$message({
  3436. message: "取消点赞成功",
  3437. type: "success",
  3438. });
  3439. this.selectSWorks();
  3440. this.selectStudent();
  3441. })
  3442. .catch((err) => {
  3443. console.error(err);
  3444. });
  3445. }
  3446. },
  3447. commentOther(w, toolIndex, wIndex) {
  3448. this.commentIndexJson = { toolIndex: toolIndex, wIndex: wIndex };
  3449. this.commentDetail = [];
  3450. this.commentDialogVisible = true;
  3451. this.commentDetail = w;
  3452. if (w.works && w.type == 1) {
  3453. this.pptImgUrl = "";
  3454. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  3455. if (
  3456. a.indexOf(
  3457. w.works
  3458. .split(".")
  3459. [w.works.split(".").length - 1].toLocaleUpperCase()
  3460. ) != -1
  3461. ) {
  3462. this.pptImgUrl =
  3463. "https://view.officeapps.live.com/op/view.aspx?src=" + w.works;
  3464. this.showPDF = false;
  3465. } else if (
  3466. w.works
  3467. .split(".")
  3468. [w.works.split(".").length - 1].toLocaleUpperCase() == "PDF"
  3469. ) {
  3470. this.pptImgUrl = w.works;
  3471. this.showPDF = true;
  3472. }
  3473. } else if (w.works && w.type == 3) {
  3474. this.videoDetail = {};
  3475. this.playerOptions1.sources[0].src = w.works;
  3476. this.videoDetail = this.playerOptions1;
  3477. // this.videoVisible = true;
  3478. } else if (w.works && w.type == 4) {
  3479. this.eScore = JSON.parse(w.works);
  3480. this.rateJson =
  3481. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  3482. this.taskCount
  3483. ].toolChoose[toolIndex].rateJson;
  3484. }
  3485. },
  3486. openScore(w) {
  3487. this.wScore = 0;
  3488. this.wScore = w.score ? JSON.parse(w.score).wScore : 0;
  3489. this.scoreDetail = w.score ? JSON.parse(w.score).detail : "";
  3490. this.commentDetail = [];
  3491. this.dialogVisibleScore = true;
  3492. this.commentDetail = w;
  3493. if (w.works && w.type == 1) {
  3494. this.pptImgUrl = "";
  3495. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  3496. if (
  3497. a.indexOf(
  3498. w.works
  3499. .split(".")
  3500. [w.works.split(".").length - 1].toLocaleUpperCase()
  3501. ) != -1
  3502. ) {
  3503. this.pptImgUrl =
  3504. "https://view.officeapps.live.com/op/view.aspx?src=" + w.works;
  3505. this.showPDF = false;
  3506. } else if (
  3507. w.works
  3508. .split(".")
  3509. [w.works.split(".").length - 1].toLocaleUpperCase() == "PDF"
  3510. ) {
  3511. this.pptImgUrl = w.works;
  3512. this.showPDF = true;
  3513. }
  3514. } else if (w.works && w.type == 3) {
  3515. this.videoDetail = {};
  3516. this.playerOptions1.sources[0].src = w.works;
  3517. this.videoDetail = this.playerOptions1;
  3518. }
  3519. },
  3520. addComment(wid, uid, t) {
  3521. if (this.commentText == "") {
  3522. this.$message.error("请输入对该学生的评价");
  3523. return;
  3524. }
  3525. let params2 = [
  3526. {
  3527. wid: wid,
  3528. lid: uid,
  3529. t: t,
  3530. },
  3531. ];
  3532. this.ajax
  3533. .post(this.$store.state.api + "getComment", params2)
  3534. .then((res) => {
  3535. if (res.data[0].length > 0) {
  3536. this.$message.error("一个作业只能评论一条");
  3537. } else {
  3538. let params = [
  3539. {
  3540. wid: wid,
  3541. lid: uid,
  3542. t: t,
  3543. c: this.commentText,
  3544. },
  3545. ];
  3546. this.ajax
  3547. .post(this.$store.state.api + "insertComment", params)
  3548. .then((res) => {
  3549. this.$message({
  3550. message: "评论成功",
  3551. type: "success",
  3552. });
  3553. this.commentText = "";
  3554. this.selectSWorks();
  3555. this.selectStudent();
  3556. })
  3557. .catch((err) => {
  3558. this.$message.error("评论失败");
  3559. console.error(err);
  3560. });
  3561. }
  3562. })
  3563. .catch((err) => {
  3564. // this.$message.error("评论失败");
  3565. console.error(err);
  3566. });
  3567. },
  3568. scoreWork(wid) {
  3569. if (this.wScore == 0) {
  3570. this.$message.error("请评分");
  3571. return;
  3572. }
  3573. let params = [
  3574. {
  3575. wid: wid,
  3576. score: JSON.stringify({
  3577. wScore: this.wScore,
  3578. detail: this.scoreDetail,
  3579. }),
  3580. },
  3581. ];
  3582. this.ajax
  3583. .post(this.$store.state.api + "scoreWork", params)
  3584. .then((res) => {
  3585. this.$message({
  3586. message: "评分成功",
  3587. type: "success",
  3588. });
  3589. this.wScore = 0;
  3590. this.scoreDetail = "";
  3591. this.dialogVisibleScore = false;
  3592. this.selectSWorks();
  3593. this.selectStudent();
  3594. })
  3595. .catch((err) => {
  3596. this.$message.error("评分失败");
  3597. console.error(err);
  3598. });
  3599. },
  3600. openXz(w, i) {
  3601. this.selectJson = this.chapInfoList[this.courseType].chapterInfo[0]
  3602. .taskJson[this.taskCount].toolChoose[i].selectJson
  3603. ? JSON.parse(
  3604. JSON.stringify(
  3605. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  3606. this.taskCount
  3607. ].toolChoose[i].selectJson
  3608. )
  3609. )
  3610. : { url: "", select: [], answer: [] };
  3611. var a = w.works.split(",");
  3612. for (var k = 0; k < a.length; k++) {
  3613. a[k] = parseInt(a[k]);
  3614. }
  3615. this.selectAnswer = { answer: a, stu: w.sName };
  3616. this.isSelect = true;
  3617. this.dialogVisibleSelect = true;
  3618. },
  3619. openPj(w, toolindex) {
  3620. this.isStar = true;
  3621. this.eScore = JSON.parse(w);
  3622. this.rateJson =
  3623. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  3624. this.taskCount
  3625. ].toolChoose[toolindex].rateJson;
  3626. this.studentEvalDialogVisible = true;
  3627. },
  3628. deleteWorks(id) {
  3629. this.$confirm("确定删除此作业吗?", "提示", {
  3630. confirmButtonText: "确定",
  3631. cancelButtonText: "取消",
  3632. type: "warning",
  3633. })
  3634. .then(() => {
  3635. let params = [
  3636. {
  3637. id: id,
  3638. },
  3639. ];
  3640. this.ajax
  3641. .post(this.$store.state.api + "deleteCourseWork", params)
  3642. .then((res) => {
  3643. this.$message({
  3644. message: "删除成功",
  3645. type: "success",
  3646. });
  3647. this.selectStudent();
  3648. this.selectSWorks();
  3649. this.selectSLook();
  3650. })
  3651. .catch((err) => {
  3652. this.$message.error("网络异常");
  3653. console.error(err);
  3654. });
  3655. })
  3656. .catch(() => { });
  3657. },
  3658. selectSWorks() {
  3659. //教师查看全部作业
  3660. let params = {
  3661. cid: this.id,
  3662. s: this.courseType,
  3663. t: this.taskCount,
  3664. };
  3665. this.ajax
  3666. .get(this.$store.state.api + "selectSWorks", params)
  3667. .then((res) => {
  3668. var a =
  3669. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  3670. this.taskCount
  3671. ].toolChoose;
  3672. var b = res.data[0];
  3673. var c = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  3674. var y = [
  3675. "AVI",
  3676. "NAVI",
  3677. "MPEG",
  3678. "ASF",
  3679. "MOV",
  3680. "WMV",
  3681. "3GP",
  3682. "RM",
  3683. "RMVB",
  3684. "FLV",
  3685. "F4V",
  3686. "H.264",
  3687. "H.265",
  3688. "REAL VIDEO",
  3689. "MKV",
  3690. "WebM",
  3691. "HDDVD",
  3692. "MP4",
  3693. "MPG",
  3694. "M4V",
  3695. "MGV",
  3696. "OGV",
  3697. "QTM",
  3698. "STR",
  3699. "AMC",
  3700. "DVX",
  3701. "EVO",
  3702. "DAT",
  3703. "OGG",
  3704. "OGM",
  3705. ];
  3706. var d = res.data[1];
  3707. var e = res.data[2];
  3708. for (var i = 0; i < a.length; i++) {
  3709. this.worksStudent[i] = [];
  3710. this.isWorksS[i] = [];
  3711. this.checkJson[i] = [];
  3712. for (var j = 0; j < b.length; j++) {
  3713. var likesCount = 0;
  3714. var commentCount = 0;
  3715. var isLikes = false;
  3716. var commentJson = [];
  3717. var data = b[j];
  3718. if (i == b[j].tool) {
  3719. if (data.type == 2 && a[i].tool[0] == 4) {
  3720. var checkL = JSON.parse(data.content)[0].anwer.split(",");
  3721. for (var z = 0; z < checkL.length; z++) {
  3722. if (!this.checkJson[i][z]) {
  3723. this.checkJson[i].push({
  3724. checkCount: [],
  3725. checkPerson: [],
  3726. rightPerson: [],
  3727. });
  3728. }
  3729. if (!this.checkJson[i][z].checkCount.length) {
  3730. this.checkJson[i][z].checkCount = [];
  3731. let _askItemCount = JSON.parse(data.content)[0].askJson
  3732. .askJson[z].askItem;
  3733. for (var aic = 0; aic < _askItemCount; aic++) {
  3734. this.checkJson[i][z].checkCount.push(0);
  3735. }
  3736. }
  3737. if (
  3738. (JSON.parse(data.content)[0].askJson.askJson[z].answer ||
  3739. JSON.parse(data.content)[0].askJson.askJson[z].answer ==
  3740. 0) &&
  3741. JSON.parse(data.content)[0].askJson.askJson[z].answer ==
  3742. checkL[z]
  3743. ) {
  3744. this.checkJson[i][z].rightPerson.push(data.name);
  3745. }
  3746. this.checkJson[i][z].checkPerson[parseInt(checkL[z])]
  3747. ? this.checkJson[i][z].checkPerson[
  3748. parseInt(checkL[z])
  3749. ].push(data.name)
  3750. : (this.checkJson[i][z].checkPerson[parseInt(checkL[z])] =
  3751. [data.name]);
  3752. this.checkJson[i][z].checkCount[parseInt(checkL[z])]
  3753. ? this.checkJson[i][z].checkCount[parseInt(checkL[z])]++
  3754. : (this.checkJson[i][z].checkCount[
  3755. parseInt(checkL[z])
  3756. ] = 1);
  3757. }
  3758. } else if (data.type == 8 && a[i].tool[0] == 45) {
  3759. var checkL = JSON.parse(data.content)[0].anwer;
  3760. for (var z = 0; z < checkL.length; z++) {
  3761. if (!this.checkJson[i][z]) {
  3762. this.checkJson[i].push({
  3763. checkCount: [],
  3764. checkPerson: [],
  3765. rightPerson: [],
  3766. });
  3767. }
  3768. if (!this.checkJson[i][z].checkCount.length) {
  3769. this.checkJson[i][z].checkCount = [];
  3770. let _askItemCount = JSON.parse(data.content)[0].testJson
  3771. .testJson[z].testItem;
  3772. for (var aic = 0; aic < _askItemCount; aic++) {
  3773. this.checkJson[i][z].checkCount.push(0);
  3774. }
  3775. }
  3776. if (checkL[z] instanceof Array) {
  3777. if (
  3778. JSON.parse(data.content)[0].testJson.testJson[
  3779. z
  3780. ].answer.join(",") == checkL[z].join(",")
  3781. ) {
  3782. this.checkJson[i][z].rightPerson.push(data.name);
  3783. }
  3784. for (var q = 0; q < checkL[z].length; q++) {
  3785. this.checkJson[i][z].checkPerson[parseInt(checkL[z][q])]
  3786. ? this.checkJson[i][z].checkPerson[
  3787. parseInt(checkL[z][q])
  3788. ].push(data.name)
  3789. : (this.checkJson[i][z].checkPerson[
  3790. parseInt(checkL[z][q])
  3791. ] = [data.name]);
  3792. this.checkJson[i][z].checkCount[parseInt(checkL[z][q])]
  3793. ? this.checkJson[i][z].checkCount[
  3794. parseInt(checkL[z][q])
  3795. ]++
  3796. : (this.checkJson[i][z].checkCount[
  3797. parseInt(checkL[z][q])
  3798. ] = 1);
  3799. }
  3800. } else {
  3801. if (
  3802. JSON.parse(data.content)[0].testJson.testJson[z]
  3803. .answer == checkL[z]
  3804. ) {
  3805. this.checkJson[i][z].rightPerson.push(data.name);
  3806. }
  3807. this.checkJson[i][z].checkPerson[parseInt(checkL[z])]
  3808. ? this.checkJson[i][z].checkPerson[
  3809. parseInt(checkL[z])
  3810. ].push(data.name)
  3811. : (this.checkJson[i][z].checkPerson[
  3812. parseInt(checkL[z])
  3813. ] = [data.name]);
  3814. this.checkJson[i][z].checkCount[parseInt(checkL[z])]
  3815. ? this.checkJson[i][z].checkCount[parseInt(checkL[z])]++
  3816. : (this.checkJson[i][z].checkCount[
  3817. parseInt(checkL[z])
  3818. ] = 1);
  3819. }
  3820. }
  3821. }
  3822. for (var k = 0; k < d.length; k++) {
  3823. //点赞
  3824. if (d[k].workId == b[j].id) {
  3825. likesCount++;
  3826. if (d[k].likesId == this.userid) {
  3827. isLikes = true;
  3828. }
  3829. }
  3830. }
  3831. for (var l = 0; l < e.length; l++) {
  3832. //评论
  3833. if (e[l].workId == b[j].id) {
  3834. if (e[l].comment != "") {
  3835. commentCount++;
  3836. commentJson.push({
  3837. commentText: e[l].comment,
  3838. commentTime: e[l].commentTime,
  3839. commentPeople: e[l].commentPeople,
  3840. });
  3841. }
  3842. }
  3843. }
  3844. if (
  3845. (b[j].type == 1 ||
  3846. b[j].type == 4 ||
  3847. b[j].type == 5 ||
  3848. b[j].type == 6 ||
  3849. b[j].type == 7) &&
  3850. a[i].tool[0] != 15 &&
  3851. a[i].tool[0] != 4 &&
  3852. a[i].tool[0] != 45
  3853. ) {
  3854. if (
  3855. c.indexOf(
  3856. b[j].content
  3857. .split(".")
  3858. [b[j].content.split(".").length - 1].toLocaleUpperCase()
  3859. ) != -1
  3860. ) {
  3861. this.worksStudent[i].push({
  3862. userid: b[j].userid,
  3863. wid: b[j].id,
  3864. works: b[j].content,
  3865. sName: b[j].name,
  3866. type: 1,
  3867. time: b[j].time,
  3868. score: b[j].score,
  3869. img: b[j].img,
  3870. likesCount: likesCount,
  3871. commentCount: commentCount,
  3872. isLikes: isLikes,
  3873. commentJson: commentJson,
  3874. });
  3875. } else if (
  3876. y.indexOf(
  3877. b[j].content
  3878. .split(".")
  3879. [b[j].content.split(".").length - 1].toLocaleUpperCase()
  3880. ) != -1
  3881. ) {
  3882. this.worksStudent[i].push({
  3883. userid: b[j].userid,
  3884. wid: b[j].id,
  3885. works: b[j].content,
  3886. sName: b[j].name,
  3887. type: 3,
  3888. time: b[j].time,
  3889. score: b[j].score,
  3890. img: b[j].img,
  3891. likesCount: likesCount,
  3892. commentCount: commentCount,
  3893. isLikes: isLikes,
  3894. commentJson: commentJson,
  3895. });
  3896. } else if (b[j].type == 6) {
  3897. this.worksStudent[i].push({
  3898. userid: b[j].userid,
  3899. wid: b[j].id,
  3900. works: b[j].content,
  3901. sName: b[j].name,
  3902. type: 4,
  3903. time: b[j].time,
  3904. score: b[j].score,
  3905. img: b[j].img,
  3906. likesCount: likesCount,
  3907. commentCount: commentCount,
  3908. isLikes: isLikes,
  3909. commentJson: commentJson,
  3910. });
  3911. } else if (b[j].type == 7) {
  3912. this.worksStudent[i].push({
  3913. userid: b[j].userid,
  3914. wid: b[j].id,
  3915. works: b[j].content,
  3916. sName: b[j].name,
  3917. type: 5,
  3918. time: b[j].time,
  3919. score: b[j].score,
  3920. img: b[j].img,
  3921. likesCount: likesCount,
  3922. commentCount: commentCount,
  3923. isLikes: isLikes,
  3924. commentJson: commentJson,
  3925. });
  3926. } else if (b[j].type == 1 && a[i].tool[0] == b[j].atool) {
  3927. this.worksStudent[i].push({
  3928. userid: b[j].userid,
  3929. ateacher: b[j].ateacher,
  3930. wid: b[j].id,
  3931. works: b[j].content,
  3932. sName: b[j].name,
  3933. type: 0,
  3934. time: b[j].time,
  3935. score: b[j].score,
  3936. img: b[j].img,
  3937. likesCount: likesCount,
  3938. commentCount: commentCount,
  3939. isLikes: isLikes,
  3940. commentJson: commentJson,
  3941. });
  3942. } else if (b[j].type == 1 && !parseInt(b[j].atool)) {
  3943. this.worksStudent[i].push({
  3944. userid: b[j].userid,
  3945. ateacher: b[j].ateacher,
  3946. wid: b[j].id,
  3947. works: b[j].content,
  3948. sName: b[j].name,
  3949. type: 0,
  3950. time: b[j].time,
  3951. score: b[j].score,
  3952. img: b[j].img,
  3953. likesCount: likesCount,
  3954. commentCount: commentCount,
  3955. isLikes: isLikes,
  3956. commentJson: commentJson,
  3957. });
  3958. }
  3959. } else if (b[j].type == 3 && a[i].tool[0] == 15) {
  3960. this.worksStudent[i].push({
  3961. userid: b[j].userid,
  3962. wid: b[j].id,
  3963. works: b[j].content,
  3964. sName: b[j].name,
  3965. type: 2,
  3966. time: b[j].time,
  3967. score: b[j].score,
  3968. img: b[j].img,
  3969. likesCount: likesCount,
  3970. commentCount: commentCount,
  3971. isLikes: isLikes,
  3972. commentJson: commentJson,
  3973. });
  3974. } else if (b[j].type == 2 && a[i].tool[0] == 4) {
  3975. //问卷
  3976. this.worksStudent[i].push({
  3977. userid: b[j].userid,
  3978. wid: b[j].id,
  3979. works: b[j].content,
  3980. sName: b[j].name,
  3981. type: 2,
  3982. time: b[j].time,
  3983. score: b[j].score,
  3984. img: b[j].img,
  3985. likesCount: likesCount,
  3986. commentCount: commentCount,
  3987. isLikes: isLikes,
  3988. commentJson: commentJson,
  3989. });
  3990. } else if (b[j].type == 8 && a[i].tool[0] == 45) {
  3991. //选择题
  3992. this.worksStudent[i].push({
  3993. userid: b[j].userid,
  3994. wid: b[j].id,
  3995. works: b[j].content,
  3996. sName: b[j].name,
  3997. type: 8,
  3998. time: b[j].time,
  3999. score: b[j].score,
  4000. img: b[j].img,
  4001. likesCount: likesCount,
  4002. commentCount: commentCount,
  4003. isLikes: isLikes,
  4004. commentJson: commentJson,
  4005. });
  4006. }
  4007. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  4008. }
  4009. }
  4010. if (this.worksStudent[i] && this.worksStudent[i].length) {
  4011. this.worksStudent[i] = this.worksStudent[i].sort(function (a, b) {
  4012. let jscoreA = a.score ? JSON.parse(a.score).wScore : 0;
  4013. let jscoreB = b.score ? JSON.parse(b.score).wScore : 0;
  4014. var scoreA = parseFloat(jscoreA);
  4015. var scoreB = parseFloat(jscoreB);
  4016. if (scoreA == scoreB) {
  4017. return b.likesCount - a.likesCount;
  4018. }
  4019. return scoreB - scoreA;
  4020. });
  4021. }
  4022. }
  4023. for (var i = 0; i < a.length; i++) {
  4024. for (var j = 0; j < b.length; j++) {
  4025. var data = b[j];
  4026. if (i == b[j].tool) {
  4027. if (data.type == 2 || data.type == 8) {
  4028. for (var z = 0; z < this.checkJson[i].length; z++) {
  4029. this.checkJson[i][z].checkPerent = [];
  4030. this.checkJson[i][z].right = Math.round(
  4031. (this.checkJson[i][z].rightPerson.length /
  4032. parseInt(this.worksStudent[i].length)) *
  4033. 100
  4034. );
  4035. let aaaa = this.checkJson[i][z];
  4036. console.log(aaaa);
  4037. for (
  4038. var k = 0;
  4039. k < this.checkJson[i][z].checkCount.length;
  4040. k++
  4041. ) {
  4042. this.checkJson[i][z].checkPerent.push(
  4043. Math.round(
  4044. (this.checkJson[i][z].checkCount[k] /
  4045. parseInt(this.worksStudent[i].length)) *
  4046. 100
  4047. )
  4048. );
  4049. }
  4050. }
  4051. }
  4052. }
  4053. }
  4054. }
  4055. this.selectWorksStudent();
  4056. })
  4057. .catch((err) => {
  4058. console.error(err);
  4059. });
  4060. },
  4061. pngToWhiteBg(file) {
  4062. const _file = file;
  4063. let read = new FileReader();
  4064. read.readAsDataURL(file); // 文件转base64
  4065. return new Promise((resolve, reject) => {
  4066. read.onload = (e) => {
  4067. let img = new Image();
  4068. img.src = e.target.result;
  4069. img.onload = async () => {
  4070. // 生成canvas
  4071. let canvas = document.createElement("canvas");
  4072. let context = canvas.getContext("2d");
  4073. // 绘制图片到canvas上
  4074. canvas.width = img.width;
  4075. canvas.height = img.height;
  4076. // 在canvas绘制前填充白色背景
  4077. context.fillStyle = "#fff";
  4078. context.fillRect(0, 0, canvas.width, canvas.height);
  4079. context.drawImage(img, 0, 0);
  4080. let base64 = canvas.toDataURL(file["type"], 1);
  4081. let newFile = this.dataUrlToFile(base64, _file);
  4082. resolve(newFile);
  4083. };
  4084. };
  4085. });
  4086. },
  4087. dataUrlToFile(dataurl, file) {
  4088. let arr = dataurl.split(","),
  4089. mime = arr[0].match(/:(.*?);/)[1],
  4090. bstr = atob(arr[1]),
  4091. n = bstr.length,
  4092. u8arr = new Uint8Array(n);
  4093. while (n--) {
  4094. u8arr[n] = bstr.charCodeAt(n);
  4095. }
  4096. // return new Blob([u8arr], { type: mime });
  4097. return new File([new Blob([u8arr], { type: mime })], file.name, {
  4098. type: mime,
  4099. });
  4100. },
  4101. async beforeUpload1(event, type, i) {
  4102. // this.$message.success('进入上传')
  4103. var file = "";
  4104. if (type == 5) {
  4105. file = event;
  4106. } else {
  4107. file = event.target.files[0];
  4108. }
  4109. var credentials = {
  4110. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  4111. secretAccessKey: "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",
  4112. }; //秘钥形式的登录上传
  4113. window.AWS.config.update(credentials);
  4114. window.AWS.config.region = "cn-northwest-1"; //设置区域
  4115. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  4116. var _this = this;
  4117. _this.progress = 0;
  4118. _this.proVisible = true;
  4119. var b = [
  4120. "DOC",
  4121. "DOCX",
  4122. "DOCM",
  4123. "DOTM",
  4124. "DOTX",
  4125. "PPTX",
  4126. "PPSX",
  4127. "PPT",
  4128. "PPS",
  4129. "PPTM",
  4130. "POTM",
  4131. "PPAM",
  4132. "POTX",
  4133. "PPSM",
  4134. ];
  4135. var excelA = ["XLSX", "XLXB", "XLS", "XLSM"];
  4136. var photoA = [
  4137. "BMP",
  4138. "GIF",
  4139. "PNG",
  4140. "JPGE",
  4141. "JPG",
  4142. "TIF",
  4143. "PCX",
  4144. "TGA",
  4145. "EXIF",
  4146. "FPX",
  4147. "SVG",
  4148. "APNG",
  4149. ];
  4150. // if (
  4151. // b.indexOf(
  4152. // file.name
  4153. // .split(".")
  4154. // [file.name.split(".").length - 1].toLocaleUpperCase()
  4155. // ) != -1
  4156. // ) {
  4157. // if (file.size / 1024 / 1024 > 10) {
  4158. // this.$message.error("上传文件大于10兆,请重新选择文件!");
  4159. // return;
  4160. // }
  4161. // } else if (
  4162. // excelA.indexOf(
  4163. // file.name
  4164. // .split(".")
  4165. // [file.name.split(".").length - 1].toLocaleUpperCase()
  4166. // ) != "-1"
  4167. // ) {
  4168. // if (file.size / 1024 / 1024 > 5) {
  4169. // this.$message.error("添加成上传文件大于5兆,请重新选择文件!");
  4170. // return;
  4171. // }
  4172. // }
  4173. if (
  4174. photoA.indexOf(
  4175. file.name
  4176. .split(".")
  4177. [file.name.split(".").length - 1].toLocaleUpperCase()
  4178. ) != -1 &&
  4179. type != 4
  4180. ) {
  4181. // const blob = await imageConversion.compress(file, 0.8)
  4182. file = await this.pngToWhiteBg(file);
  4183. const blob = await imageConversion.compressAccurately(file, 256);
  4184. // const blob = await imageConversion.compressAccurately(file, {type:file.type});
  4185. file = new File([blob], file.name, { type: file.type });
  4186. }
  4187. if (file) {
  4188. var params = {
  4189. Key:
  4190. file.name.split(".")[0] +
  4191. new Date().getTime() +
  4192. "." +
  4193. file.name.split(".")[file.name.split(".").length - 1],
  4194. ContentType: file.type,
  4195. Body: file,
  4196. "Access-Control-Allow-Credentials": "*",
  4197. ACL: "public-read",
  4198. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  4199. var options = {
  4200. // partSize: 2048 * 1024 * 1024,
  4201. partSize: 1024 * 1024 * 1024,
  4202. queueSize: 2,
  4203. leavePartsOnError: true,
  4204. };
  4205. bucket
  4206. .upload(params, options)
  4207. .on("httpUploadProgress", function (evt) {
  4208. //这里可以写进度条
  4209. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  4210. _this.progress = parseInt((evt.loaded * 80) / evt.total);
  4211. })
  4212. .send(function (err, data) {
  4213. _this.progress = 100;
  4214. setTimeout(() => {
  4215. _this.proVisible = false;
  4216. }, 1000);
  4217. if (err) {
  4218. var a = _this.$refs.upload1.uploadFiles;
  4219. a.splice(a.length - 1, a.length);
  4220. _this.$message.error("上传失败");
  4221. } else {
  4222. // _this.$message.success('上传成功')
  4223. if (type == 1) {
  4224. _this.studyJuri[0].cover.push({
  4225. name: file.name,
  4226. url: data.Location,
  4227. uid: file.uid,
  4228. });
  4229. var b = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  4230. var c = [
  4231. "AVI",
  4232. "NAVI",
  4233. "MPEG",
  4234. "ASF",
  4235. "MOV",
  4236. "WMV",
  4237. "3GP",
  4238. "RM",
  4239. "RMVB",
  4240. "FLV",
  4241. "F4V",
  4242. "H.264",
  4243. "H.265",
  4244. "REAL VIDEO",
  4245. "MKV",
  4246. "WebM",
  4247. "HDDVD",
  4248. "MP4",
  4249. "MPG",
  4250. "M4V",
  4251. "MGV",
  4252. "OGV",
  4253. "QTM",
  4254. "STR",
  4255. "AMC",
  4256. "DVX",
  4257. "EVO",
  4258. "DAT",
  4259. "OGG",
  4260. "OGM",
  4261. ];
  4262. if (
  4263. c.indexOf(
  4264. _this.studyJuri[0].cover[0].url
  4265. .split(".")
  4266. [
  4267. _this.studyJuri[0].cover[0].url.split(".").length - 1
  4268. ].toLocaleUpperCase()
  4269. ) != -1
  4270. ) {
  4271. _this.fileType = 2;
  4272. } else if (
  4273. b.indexOf(
  4274. _this.studyJuri[0].cover[0].url
  4275. .split(".")
  4276. [
  4277. _this.studyJuri[0].cover[0].url.split(".").length - 1
  4278. ].toLocaleUpperCase()
  4279. ) != -1
  4280. ) {
  4281. _this.fileType = 1;
  4282. } else {
  4283. _this.fileType = 0;
  4284. }
  4285. _this.imgChange(null, null, type);
  4286. } else if (type == 2) {
  4287. _this.upToolImg = data.Location;
  4288. _this.imgChange(null, null, type);
  4289. _this.addCourseWorks(i);
  4290. } else if (type == 4) {
  4291. _this.addPz("3", data.Location);
  4292. } else if (type == 5) {
  4293. _this.addImgDrawImG(data.Location);
  4294. }
  4295. _this.imgChange(null, null, type);
  4296. console.log(data.Location);
  4297. // _this.$message.success('上传成功'+data.Location)
  4298. }
  4299. });
  4300. }
  4301. },
  4302. beforeUpload2(event, type) {
  4303. var file = event.target.files[0];
  4304. var credentials = {
  4305. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  4306. secretAccessKey: "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",
  4307. }; //秘钥形式的登录上传
  4308. window.AWS.config.update(credentials);
  4309. window.AWS.config.region = "cn-northwest-1"; //设置区域
  4310. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  4311. var _this = this;
  4312. _this.progress = 0;
  4313. _this.proVisible = true;
  4314. if (file) {
  4315. var params = {
  4316. Key:
  4317. file.name.split(".")[0] +
  4318. new Date().getTime() +
  4319. "." +
  4320. file.name.split(".")[file.name.split(".").length - 1],
  4321. ContentType: file.type,
  4322. Body: file,
  4323. "Access-Control-Allow-Credentials": "*",
  4324. ACL: "public-read",
  4325. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  4326. var options = {
  4327. partSize: 2048 * 1024 * 1024,
  4328. queueSize: 2,
  4329. leavePartsOnError: true,
  4330. };
  4331. bucket
  4332. .upload(params, options)
  4333. .on("httpUploadProgress", function (evt) {
  4334. //这里可以写进度条
  4335. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  4336. _this.progress = parseInt((evt.loaded * 80) / evt.total);
  4337. })
  4338. .send(function (err, data) {
  4339. _this.progress = 100;
  4340. setTimeout(() => {
  4341. _this.proVisible = false;
  4342. }, 1000);
  4343. if (err) {
  4344. var a = _this.$refs.upload1.uploadFiles;
  4345. a.splice(a.length - 1, a.length);
  4346. _this.$message.error("上传失败");
  4347. } else {
  4348. if (type == 2) {
  4349. _this.studyJuri[0].upVedio.push({
  4350. name: file.name,
  4351. url: data.Location,
  4352. uid: file.uid,
  4353. });
  4354. _this.imgChange(null, null, type);
  4355. } else if (type == 3) {
  4356. _this.studyJuri[0].upFile.push({
  4357. name: file.name,
  4358. url: data.Location,
  4359. uid: file.uid,
  4360. });
  4361. _this.imgChange(null, null, type);
  4362. }
  4363. console.log(data.Location);
  4364. }
  4365. });
  4366. }
  4367. },
  4368. allScrell() {
  4369. window.opener.postMessage({ allScreen: this.screenType }, "*");
  4370. },
  4371. nextOrpreSteps(t) {
  4372. var b = this.chapInfoList.length - 1;
  4373. if (t == 0) {
  4374. if (this.courseType == 0) {
  4375. if (this.taskCount == 0) {
  4376. // console.log(this.navList[b].task[this.navList[b].task.length - 1].isLook);
  4377. if (this.IsLookOpen) {
  4378. if (
  4379. !this.navList[b].task[this.navList[b].task.length - 1].isLook
  4380. ) {
  4381. if (this.courseDetail.userid != this.userid) {
  4382. this.$message.error("任务未解锁");
  4383. } else {
  4384. this.$message.error("上一任务未解锁");
  4385. }
  4386. return;
  4387. }
  4388. }
  4389. this.navList[this.courseType].isOpen = false;
  4390. this.courseType = b;
  4391. this.taskCount =
  4392. this.chapInfoList[this.courseType].chapterInfo[0].taskJson
  4393. .length - 1;
  4394. this.navList[this.courseType].isOpen = true;
  4395. } else {
  4396. this.taskCount--;
  4397. }
  4398. } else {
  4399. if (this.taskCount == 0) {
  4400. this.navList[this.courseType].isOpen = false;
  4401. this.courseType--;
  4402. this.taskCount =
  4403. this.chapInfoList[this.courseType].chapterInfo[0].taskJson
  4404. .length - 1;
  4405. this.navList[this.courseType].isOpen = true;
  4406. } else {
  4407. this.taskCount--;
  4408. }
  4409. }
  4410. } else {
  4411. if (this.courseType == b) {
  4412. if (
  4413. this.taskCount ==
  4414. this.chapInfoList[this.courseType].chapterInfo[0].taskJson.length -
  4415. 1
  4416. ) {
  4417. this.navList[this.courseType].isOpen = false;
  4418. this.courseType = 0;
  4419. this.taskCount = 0;
  4420. this.navList[this.courseType].isOpen = true;
  4421. } else {
  4422. var bbb = parseInt(this.taskCount) + 1;
  4423. if (
  4424. !this.chapInfoList[this.courseType].chapterInfo[0].taskJson[bbb]
  4425. .isLook &&
  4426. this.courseDetail.userid != this.userid &&
  4427. this.IsLookOpen
  4428. ) {
  4429. this.$message.error("任务未解锁");
  4430. return;
  4431. }
  4432. this.taskCount++;
  4433. if (this.IsLookOpen) {
  4434. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4435. this.taskCount
  4436. ].isLook = true;
  4437. this.addCourseState(3);
  4438. }
  4439. }
  4440. } else {
  4441. if (
  4442. this.taskCount ==
  4443. this.chapInfoList[this.courseType].chapterInfo[0].taskJson.length -
  4444. 1
  4445. ) {
  4446. var bbb = parseInt(this.courseType) + 1;
  4447. if (
  4448. !this.chapInfoList[bbb].chapterInfo[0].taskJson[0].isLook &&
  4449. this.courseDetail.userid != this.userid &&
  4450. this.IsLookOpen
  4451. ) {
  4452. this.$message.error("任务未解锁");
  4453. return;
  4454. }
  4455. this.navList[this.courseType].isOpen = false;
  4456. this.courseType++;
  4457. this.taskCount = 0;
  4458. this.navList[this.courseType].isOpen = true;
  4459. } else {
  4460. var bbb = parseInt(this.taskCount) + 1;
  4461. if (
  4462. !this.chapInfoList[this.courseType].chapterInfo[0].taskJson[bbb]
  4463. .isLook &&
  4464. this.courseDetail.userid != this.userid &&
  4465. this.IsLookOpen
  4466. ) {
  4467. this.$message.error("任务未解锁");
  4468. return;
  4469. }
  4470. this.taskCount++;
  4471. }
  4472. if (this.IsLookOpen) {
  4473. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4474. this.taskCount
  4475. ].isLook = true;
  4476. this.addCourseState(3);
  4477. }
  4478. }
  4479. // if (
  4480. // this.taskCount ==
  4481. // this.chapInfo.chapterInfo[0].taskJson.length - 1
  4482. // ) {
  4483. // this.taskCount = this.chapInfo.chapterInfo[0].taskJson.length - 1;
  4484. // } else {
  4485. // this.taskCount++;
  4486. // }
  4487. }
  4488. document.scrollingElement.scrollTop = 0;
  4489. this.showType = 0;
  4490. this.navId = this.navList[this.courseType].task[this.taskCount].id;
  4491. // if (this.vedio[this.taskCount].length > 0) {
  4492. // var a =
  4493. // document.getElementsByClassName("box_course")[this.taskCount]
  4494. // .offsetHeight;
  4495. // document.getElementsByClassName("vedioList")[
  4496. // this.taskCount
  4497. // ].style.height = a + "px";
  4498. // document.getElementsByClassName("navBox")[this.taskCount].style.height =
  4499. // a - 40 + "px";
  4500. // }
  4501. this.isNoHomeWork = false;
  4502. (this.studyJuri = [
  4503. {
  4504. content: "",
  4505. cover: [],
  4506. upVedio: [],
  4507. upFile: [],
  4508. },
  4509. ]),
  4510. (this.radio = []);
  4511. this.isClickNav = "";
  4512. this.selectPz();
  4513. this.getHomeWork();
  4514. this.getCourseDetail();
  4515. this.$forceUpdate();
  4516. },
  4517. openTask(s, n, i) {
  4518. if (this.IsLookOpen) {
  4519. if (
  4520. !this.chapInfoList[s].chapterInfo[0].taskJson[n].isLook &&
  4521. this.courseDetail.userid != this.userid
  4522. ) {
  4523. this.$message.error("任务未解锁");
  4524. return;
  4525. }
  4526. if (this.courseType == s && this.taskCount != n && n > this.taskCount) {
  4527. if (
  4528. !this.chapInfoList[this.courseType].chapterInfo[0].taskJson[n - 1]
  4529. .isLook
  4530. ) {
  4531. this.$message.error("上一任务未解锁");
  4532. return;
  4533. }
  4534. } else if (s > this.courseType) {
  4535. if (n > 0) {
  4536. if (!this.chapInfoList[s].chapterInfo[0].taskJson[n - 1].isLook) {
  4537. this.$message.error("上一任务未解锁");
  4538. return;
  4539. }
  4540. } else {
  4541. if (
  4542. !this.chapInfoList[s - 1].chapterInfo[0].taskJson[
  4543. this.chapInfoList[s - 1].chapterInfo[0].taskJson.length - 1
  4544. ].isLook
  4545. ) {
  4546. this.$message.error("上一任务未解锁");
  4547. return;
  4548. }
  4549. }
  4550. }
  4551. }
  4552. this.courseType = s;
  4553. this.navId = i;
  4554. this.taskCount = n;
  4555. if (this.IsLookOpen) {
  4556. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4557. this.taskCount
  4558. ].isLook = true;
  4559. this.addCourseState(3);
  4560. }
  4561. this.showType = 0;
  4562. this.isNoHomeWork = false;
  4563. (this.studyJuri = [
  4564. {
  4565. content: "",
  4566. cover: [],
  4567. upVedio: [],
  4568. upFile: [],
  4569. },
  4570. ]),
  4571. (this.radio = []);
  4572. document.scrollingElement.scrollTop = 0;
  4573. // setTimeout(() => {
  4574. // let a = document.getElementById(i);
  4575. // if (a.offsetTop - 110 == 0) {
  4576. // window.scrollTo(0, 0);
  4577. // } else {
  4578. // window.scrollTo(0, a.offsetTop);
  4579. // }
  4580. // }, 0);
  4581. this.selectPz();
  4582. this.getHomeWork();
  4583. this.getCourseDetail();
  4584. },
  4585. get(i) {
  4586. this.navList[i].isOpen = !this.navList[i].isOpen;
  4587. },
  4588. addQuestion() {
  4589. this.answerList.push({
  4590. answerTitle: this.answerQ.replaceAll(/%/g, "%25"),
  4591. answer: this.questionAnswer.replaceAll(/%/g, "%25"),
  4592. });
  4593. let params = [
  4594. {
  4595. uid: this.userid,
  4596. cid: this.id,
  4597. stage: this.courseType,
  4598. task: this.taskCount,
  4599. tool: this.toolindex,
  4600. content: JSON.stringify(this.answerList),
  4601. type: 3,
  4602. },
  4603. ];
  4604. this.ajax
  4605. .post(this.$store.state.api + "addCourseWorks", params)
  4606. .then((res) => {
  4607. this.$message({
  4608. message: "提交成功",
  4609. type: "success",
  4610. });
  4611. this.answerList = [];
  4612. this.answerDialogVisible = false;
  4613. this.selectStudent();
  4614. this.selectSWorks();
  4615. this.selectSLook();
  4616. })
  4617. .catch((err) => {
  4618. this.$message.error("提交失败");
  4619. console.error(err);
  4620. });
  4621. },
  4622. getCourseDetail() {
  4623. const loading = this.$loading.service({
  4624. background: "rgba(255, 255, 255, 0.7)",
  4625. target: document.querySelector(".student_table"),
  4626. });
  4627. // this.navList[0].isOpen = false;
  4628. // this.navList[this.courseType].isOpen = true;
  4629. // this.courseType = this.courseTypeLine;
  4630. // this.navId = this.navList[this.courseType].task[this.taskCount].id;
  4631. let params = {
  4632. courseId: this.id,
  4633. };
  4634. this.ajax
  4635. .get(this.$store.state.api + "selectCourseDetail", params)
  4636. .then((res) => {
  4637. loading.close();
  4638. var a = JSON.parse(res.data[0][0].chapters)[this.courseType]
  4639. .chapterInfo[0].taskJson;
  4640. var b = [
  4641. "AVI",
  4642. "NAVI",
  4643. "MPEG",
  4644. "ASF",
  4645. "MOV",
  4646. "WMV",
  4647. "3GP",
  4648. "RM",
  4649. "RMVB",
  4650. "FLV",
  4651. "F4V",
  4652. "H.264",
  4653. "H.265",
  4654. "REAL VIDEO",
  4655. "MKV",
  4656. "WebM",
  4657. "HDDVD",
  4658. "MP4",
  4659. "MPG",
  4660. "M4V",
  4661. "MGV",
  4662. "OGV",
  4663. "QTM",
  4664. "STR",
  4665. "AMC",
  4666. "DVX",
  4667. "EVO",
  4668. "DAT",
  4669. "OGG",
  4670. "OGM",
  4671. ];
  4672. for (var i = 0; i < a.length; i++) {
  4673. var c = a[i].chapterData;
  4674. this.vedio[i] = [];
  4675. this.textList[i] = [];
  4676. this.lineList[i] = [];
  4677. this.chapToolList[i] = [];
  4678. this.file[i] = [];
  4679. for (var j = 0; j < c.length; j++) {
  4680. if (c[j].type == 7) {
  4681. this.chapToolList[i].push(c[j]);
  4682. } else if (c[j].type == 8) {
  4683. this.lineList[i].push(c[j]);
  4684. } else if (c[j].type == 6) {
  4685. this.textList[i].push(c[j]);
  4686. } else {
  4687. if (
  4688. b.indexOf(
  4689. c[j].url
  4690. .split(".")
  4691. [c[j].url.split(".").length - 1].toLocaleUpperCase()
  4692. ) != -1
  4693. ) {
  4694. this.vedio[i].push(c[j]);
  4695. } else {
  4696. this.file[i].push(c[j]);
  4697. }
  4698. }
  4699. }
  4700. var d = JSON.parse(JSON.stringify(this.playerOptions));
  4701. d.sources[0].src =
  4702. this.vedio[i].length > 0 ? this.vedio[i][0].url : this.mr;
  4703. this.playerO[i] = d;
  4704. }
  4705. this.courseDetail = res.data[0][0];
  4706. this.evalua = res.data[0][0].evaId;
  4707. this.chapInfo = JSON.parse(this.courseDetail.chapters)[
  4708. this.courseType
  4709. ];
  4710. this.chapInfoList = JSON.parse(this.courseDetail.chapters);
  4711. // if (this.navList.length == 0) {
  4712. // this.navList = [];
  4713. // for (var l = 0; l < this.chapInfoList.length; l++) {
  4714. // var q = this.chapInfoList[l].dyName;
  4715. // var w = this.chapInfoList[l].chapterInfo[0].taskJson;
  4716. // var e;
  4717. // this.navList.push({
  4718. // dyName: q,
  4719. // isOpen: l === 0 ? true : false,
  4720. // task: [],
  4721. // });
  4722. // for (var r = 0; r < w.length; r++) {
  4723. // e = w[r].task;
  4724. // this.navList[l].task.push({ taskName: e, id: l + "-" + r });
  4725. // this.navId = this.navId ? this.navId : l + "-" + r;
  4726. // }
  4727. // }
  4728. // }
  4729. // this.navList[0].isOpen = false;
  4730. // this.navList[this.courseType].isOpen = true;
  4731. // this.navId = this.navList[this.courseType].task[this.taskCount].id;
  4732. for (var l = 0; l < this.chapInfoList.length; l++) {
  4733. var w = this.chapInfoList[l].chapterInfo[0].taskJson;
  4734. for (var m = 0; m < w.length; m++) {
  4735. w[m].id = l + "-" + m;
  4736. }
  4737. }
  4738. if (
  4739. !this.vedio[this.taskCount][0] ||
  4740. this.vedio[this.taskCount][0].url == ""
  4741. ) {
  4742. if (
  4743. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4744. this.taskCount
  4745. ].chapterData.length > 0
  4746. ) {
  4747. // if (
  4748. // this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4749. // this.taskCount
  4750. // ].chapterData[0].type != 8
  4751. // ) {
  4752. let _url =
  4753. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4754. this.taskCount
  4755. ].chapterData[0].url;
  4756. if (
  4757. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4758. this.taskCount
  4759. ].chapterData[0].type == 8
  4760. ) {
  4761. this.showType = 2;
  4762. if (
  4763. _url.indexOf("https://") == -1 &&
  4764. _url.indexOf("http://") == -1
  4765. ) {
  4766. _url = "https://" + _url;
  4767. }
  4768. this.pptImgUrl1 = _url;
  4769. this.isClickNav = "line0";
  4770. } else if (
  4771. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4772. this.taskCount
  4773. ].chapterData[0].type == 3
  4774. ) {
  4775. if (
  4776. _url
  4777. .split(".")
  4778. [_url.split(".").length - 1].toLocaleUpperCase() == "PDF"
  4779. ) {
  4780. this.showType = 3;
  4781. this.pptImgUrl1 = _url;
  4782. this.isClickNav = "word0";
  4783. } else if (
  4784. this.isAssetTypeAnImage(
  4785. _url
  4786. .split(".")
  4787. [_url.split(".").length - 1].toLocaleLowerCase()
  4788. )
  4789. ) {
  4790. this.showType = 4;
  4791. this.pptImgUrl1 = _url;
  4792. this.isClickNav = "word0";
  4793. } else {
  4794. this.showType = 2;
  4795. this.pptImgUrl1 =
  4796. "https://view.officeapps.live.com/op/view.aspx?src=" + _url;
  4797. this.isClickNav = "word0";
  4798. }
  4799. } else if (
  4800. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4801. this.taskCount
  4802. ].chapterData[0].type == 6
  4803. ) {
  4804. this.showType = 1;
  4805. this.text = this.textList[this.taskCount][0];
  4806. this.isClickNav = "text0";
  4807. }
  4808. // }
  4809. // else {
  4810. // for (
  4811. // var y = 0;
  4812. // y <
  4813. // this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4814. // this.taskCount
  4815. // ].chapterData.length;
  4816. // y++
  4817. // ) {
  4818. // if (
  4819. // this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  4820. // this.taskCount
  4821. // ].chapterData[y].type != 8
  4822. // ) {
  4823. // if (
  4824. // this.chapInfoList[this.courseType].chapterInfo[0]
  4825. // .taskJson[this.taskCount].chapterData[y].type == 3
  4826. // ) {
  4827. // let _url =
  4828. // this.chapInfoList[this.courseType].chapterInfo[0]
  4829. // .taskJson[this.taskCount].chapterData[y].url;
  4830. // if (
  4831. // _url
  4832. // .split(".")
  4833. // [_url.split(".").length - 1].toLocaleUpperCase() ==
  4834. // "PDF"
  4835. // ) {
  4836. // this.showType = 3;
  4837. // this.pptImgUrl1 = _url;
  4838. // } else if (
  4839. // this.isAssetTypeAnImage(
  4840. // _url
  4841. // .split(".")
  4842. // [_url.split(".").length - 1].toLocaleLowerCase()
  4843. // )
  4844. // ) {
  4845. // this.showType = 4;
  4846. // this.pptImgUrl1 = _url;
  4847. // } else {
  4848. // this.showType = 2;
  4849. // this.pptImgUrl1 =
  4850. // "https://view.officeapps.live.com/op/view.aspx?src=" +
  4851. // _url;
  4852. // }
  4853. // } else if (
  4854. // this.chapInfoList[this.courseType].chapterInfo[0]
  4855. // .taskJson[this.taskCount].chapterData[y].type == 6
  4856. // ) {
  4857. // this.showType = 1;
  4858. // this.text = this.textList[this.taskCount][0];
  4859. // }
  4860. // } else {
  4861. // this.showType = 2;
  4862. // this.pptImgUrl1 =
  4863. // "https://view.officeapps.live.com/op/view.aspx?src=" +
  4864. // _url;
  4865. // }
  4866. // }
  4867. // }
  4868. }
  4869. } else {
  4870. this.isClickNav = "video0";
  4871. }
  4872. setTimeout(() => {
  4873. this.checkEva();
  4874. }, 500);
  4875. this.selectStudent();
  4876. this.selectSWorks();
  4877. this.selectSLook();
  4878. let _this = this;
  4879. if (_this.timer) {
  4880. clearInterval(_this.timer);
  4881. _this.timer = null;
  4882. }
  4883. _this.timer = setInterval(function () {
  4884. _this.selectSWorks();
  4885. _this.selectStudent();
  4886. _this.selectSLook();
  4887. if (_this.tType == 4) {
  4888. _this.selectPz();
  4889. }
  4890. }, 5000);
  4891. _this.$nextTick(function () {
  4892. setTimeout(() => {
  4893. var a =
  4894. document.getElementsByClassName("box_course")[0].offsetHeight;
  4895. document.getElementsByClassName("vedioList")[0].style.height =
  4896. a + "px";
  4897. document.getElementsByClassName("navBox")[0].style.height =
  4898. a - 40 + "px";
  4899. if (_this.vedio[_this.taskCount].length > 0) {
  4900. _this.vedioTime = [];
  4901. for (var i = 0; i < _this.vedio[_this.taskCount].length; i++) {
  4902. _this.vedioTime[i] = document.getElementsByClassName(
  4903. "vjs-duration-display"
  4904. )[i].textContent;
  4905. }
  4906. }
  4907. }, 500);
  4908. });
  4909. })
  4910. .catch((err) => {
  4911. loading.close();
  4912. console.error(err);
  4913. });
  4914. },
  4915. addPz(type, content) {
  4916. if (type == "1" && this.pzConText == "") {
  4917. this.$message.error("批注不能为空!");
  4918. return;
  4919. }
  4920. let params = [
  4921. {
  4922. cid: this.id,
  4923. uid: this.userid,
  4924. s: this.courseType,
  4925. t: this.taskCount,
  4926. c: type == "1" ? this.pzConText.replaceAll(/%/g, "%25") : content,
  4927. type: type,
  4928. },
  4929. ];
  4930. this.ajax
  4931. .post(this.$store.state.api + "addPz2", params)
  4932. .then((res) => {
  4933. this.$message({
  4934. message: "添加成功",
  4935. type: "success",
  4936. });
  4937. this.pzConText = "";
  4938. this.addPzDialog = false;
  4939. this.selectPz();
  4940. })
  4941. .catch((err) => {
  4942. this.$message.error("添加失败");
  4943. console.error(err);
  4944. });
  4945. },
  4946. deletePz(id) {
  4947. this.$confirm("确定删除此批注吗?", "提示", {
  4948. confirmButtonText: "确定",
  4949. cancelButtonText: "取消",
  4950. type: "warning",
  4951. })
  4952. .then(() => {
  4953. let params = [
  4954. {
  4955. id: id,
  4956. },
  4957. ];
  4958. this.ajax
  4959. .post(this.$store.state.api + "deletePz", params)
  4960. .then((res) => {
  4961. this.$message({
  4962. message: "删除成功",
  4963. type: "success",
  4964. });
  4965. this.selectPz();
  4966. })
  4967. .catch((err) => {
  4968. this.$message.error("网络异常");
  4969. console.error(err);
  4970. });
  4971. })
  4972. .catch(() => { });
  4973. },
  4974. selectPz() {
  4975. let params = {
  4976. cid: this.id,
  4977. s: this.courseType,
  4978. t: this.taskCount,
  4979. };
  4980. this.ajax
  4981. .get(this.$store.state.api + "selectPzList", params)
  4982. .then((res) => {
  4983. this.pzList = res.data[0];
  4984. })
  4985. .catch((err) => {
  4986. console.error(err);
  4987. });
  4988. },
  4989. updateSLook() {
  4990. let params = {
  4991. sopen: this.sIsOpen == false ? 1 : 2,
  4992. cid: this.id,
  4993. };
  4994. this.ajax
  4995. .get(this.$store.state.api + "updateCourseSLook", params)
  4996. .then((res) => {
  4997. if (this.sIsOpen == true) {
  4998. this.$message({
  4999. message: "权限设置成功",
  5000. type: "success",
  5001. });
  5002. } else {
  5003. this.$message({
  5004. message: "权限关闭成功",
  5005. type: "success",
  5006. });
  5007. }
  5008. })
  5009. .catch((err) => {
  5010. console.error(err);
  5011. });
  5012. },
  5013. updateLookOpen() {
  5014. let params = [
  5015. {
  5016. sopen: this.IsLookOpen == false ? 1 : 2,
  5017. cid: this.id,
  5018. },
  5019. ];
  5020. this.ajax
  5021. .post(this.$store.state.api + "updateCourseLookOpen", params)
  5022. .then((res) => {
  5023. if (this.IsLookOpen == true) {
  5024. // if (this.courseType != 0 && this.taskCount != 0) {
  5025. // this.openTask(0, 0, "0-0");
  5026. // }
  5027. this.$message({
  5028. message: "权限设置成功",
  5029. type: "success",
  5030. });
  5031. } else {
  5032. this.$message({
  5033. message: "权限关闭成功",
  5034. type: "success",
  5035. });
  5036. }
  5037. this.getCourseState(2);
  5038. })
  5039. .catch((err) => {
  5040. console.error(err);
  5041. });
  5042. },
  5043. selectSLook() {
  5044. let params = {
  5045. cid: this.id,
  5046. };
  5047. this.ajax
  5048. .get(this.$store.state.api + "selectCourseSLook", params)
  5049. .then((res) => {
  5050. this.sIsOpen = res.data[0][0].sopen == 1 ? false : true;
  5051. this.IsLookOpen = res.data[0][0].look == 1 ? false : true;
  5052. if (!this.IsLookOpen) {
  5053. this.setNavList();
  5054. } else {
  5055. this.getCourseState(1);
  5056. }
  5057. })
  5058. .catch((err) => {
  5059. console.error(err);
  5060. });
  5061. },
  5062. setNavList() {
  5063. if (this.navList.length == 0) {
  5064. this.navList = [];
  5065. for (var l = 0; l < this.chapInfoList.length; l++) {
  5066. var q = this.chapInfoList[l].dyName;
  5067. var w = this.chapInfoList[l].chapterInfo[0].taskJson;
  5068. var e;
  5069. this.navList.push({
  5070. dyName: q,
  5071. isOpen: l === 0 ? true : false,
  5072. task: [],
  5073. });
  5074. for (var r = 0; r < w.length; r++) {
  5075. e = w[r].task;
  5076. this.navList[l].task.push({
  5077. taskName: e,
  5078. id: l + "-" + r,
  5079. isLook: w[r].isLook,
  5080. });
  5081. // this.navId = this.navId ? this.navId : l + "-" + r;
  5082. // this.navId = l + "-" + r;
  5083. }
  5084. }
  5085. this.navList[0].isOpen = false;
  5086. this.navList[this.courseType].isOpen = true;
  5087. this.navId = this.navList[this.courseType].task[this.taskCount].id;
  5088. } else {
  5089. this.setNavList2();
  5090. }
  5091. },
  5092. setNavList2() {
  5093. for (var l = 0; l < this.chapInfoList.length; l++) {
  5094. var w = this.chapInfoList[l].chapterInfo[0].taskJson;
  5095. for (var r = 0; r < w.length; r++) {
  5096. this.navList[l].task[r].isLook = w[r].isLook;
  5097. }
  5098. }
  5099. if (
  5100. this.IsLookOpen &&
  5101. !this.navList[this.courseType].task[this.taskCount].isLook
  5102. ) {
  5103. this.openTask(0, 0, "0-0");
  5104. }
  5105. this.$forceUpdate();
  5106. },
  5107. getCourseState(type) {
  5108. let params = {
  5109. cid: this.id,
  5110. };
  5111. this.ajax
  5112. .get(this.$store.state.api + "getCourseState", params)
  5113. .then((res) => {
  5114. if (res.data[0].length > 0 && this.IsLookOpen && type == 1) {
  5115. this.chapInfoList = JSON.parse(res.data[0][0].state);
  5116. this.setNavList();
  5117. this.$forceUpdate();
  5118. } else if (res.data[0].length > 0 && this.IsLookOpen && type == 2) {
  5119. this.addCourseState(2);
  5120. } else {
  5121. this.addCourseState(1);
  5122. }
  5123. })
  5124. .catch((err) => {
  5125. console.error(err);
  5126. });
  5127. },
  5128. addCourseState(type) {
  5129. let _state = this.chapInfoList;
  5130. if (type == 1 || type == 2) {
  5131. for (var i = 0; i < _state.length; i++) {
  5132. let el = _state[i].chapterInfo[0].taskJson;
  5133. for (var j = 0; j < el.length; j++) {
  5134. // if (i == 0 && j == 0) {
  5135. // el[j].isLook = true;
  5136. // } else {
  5137. // el[j].isLook = false;
  5138. // }
  5139. if (
  5140. this.courseType > i ||
  5141. (this.courseType == i && this.taskCount + 1 > j)
  5142. ) {
  5143. el[j].isLook = true;
  5144. } else {
  5145. el[j].isLook = false;
  5146. }
  5147. }
  5148. }
  5149. }
  5150. let params = [
  5151. {
  5152. cid: this.id,
  5153. state: JSON.stringify(_state).replaceAll(/%/g, "%25"),
  5154. },
  5155. ];
  5156. this.ajax
  5157. .post(
  5158. this.$store.state.api +
  5159. (type == 1 ? "addCourseState" : "updateCourseSate"),
  5160. params
  5161. )
  5162. .then((res) => {
  5163. if (this.IsLookOpen) {
  5164. this.setNavList();
  5165. }
  5166. if (type == 3 && type == 2) {
  5167. this.getCourseState(1);
  5168. }
  5169. })
  5170. .catch((err) => {
  5171. console.error(err);
  5172. });
  5173. },
  5174. getHomeWork() {
  5175. let params = {
  5176. cid: this.id,
  5177. stage: this.courseType,
  5178. task: this.taskCount,
  5179. uid: this.userid,
  5180. };
  5181. this.ajax
  5182. .get(this.$store.state.api + "selectWork", params)
  5183. .then((res) => {
  5184. if (res.data[0].length > 0) {
  5185. this.studyJuri = JSON.parse(res.data[0][0].content);
  5186. this.isNoHomeWork = true;
  5187. }
  5188. })
  5189. .catch((err) => {
  5190. console.error(err);
  5191. });
  5192. },
  5193. isAssetTypeAnImage(ext) {
  5194. return (
  5195. [
  5196. "png",
  5197. "jpg",
  5198. "jpeg",
  5199. "bmp",
  5200. "gif",
  5201. "webp",
  5202. "psd",
  5203. "svg",
  5204. "tiff",
  5205. ].indexOf(ext) !== -1
  5206. );
  5207. },
  5208. switchVideo(media) {
  5209. this.playerO = {};
  5210. this.playerOptions.poster = "";
  5211. this.playerOptions.sources[0].src = media;
  5212. this.playerO = this.playerOptions;
  5213. },
  5214. onPlayerPlay() { },
  5215. lookVedio(u, i) {
  5216. this.isClickNav = "";
  5217. // this.playerOptions.sources[0].src = u;
  5218. var d = JSON.parse(JSON.stringify(this.playerOptions));
  5219. d.sources[0].src = u;
  5220. this.playerO[this.taskCount] = d;
  5221. this.showType = 0;
  5222. this.isClickNav = "video" + i;
  5223. this.$forceUpdate();
  5224. },
  5225. lookText(i, t) {
  5226. this.isClickNav = "";
  5227. this.text = this.textList[i][t];
  5228. // this.dialogVisible1 = true;
  5229. this.showType = 1;
  5230. this.isClickNav = "text" + t;
  5231. },
  5232. lookTools(i, t) {
  5233. this.chapTools = this.chapToolList[i][t];
  5234. this.dialogVisible2 = true;
  5235. },
  5236. openFile(f) {
  5237. this.pptImgUrl = "";
  5238. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  5239. if (
  5240. a.indexOf(f.split(".")[f.split(".").length - 1].toLocaleUpperCase()) !=
  5241. -1
  5242. ) {
  5243. this.pptImgUrl =
  5244. "https://view.officeapps.live.com/op/view.aspx?src=" + f;
  5245. this.showPDF = false;
  5246. this.dialogVisible3 = true;
  5247. } else if (
  5248. f.split(".")[f.split(".").length - 1].toLocaleUpperCase() == "PDF"
  5249. ) {
  5250. this.pptImgUrl = f;
  5251. this.showPDF = true;
  5252. this.dialogVisible3 = true;
  5253. }
  5254. },
  5255. doUrl(url, i) {
  5256. this.isClickNav = "";
  5257. this.pptImgUrl1 = "";
  5258. this.showType = 2;
  5259. if (url.indexOf("https://") == -1 && url.indexOf("http://") == -1) {
  5260. url = "https://" + url;
  5261. }
  5262. this.pptImgUrl1 = url;
  5263. this.isClickNav = "line" + i;
  5264. },
  5265. downFile(f, i) {
  5266. this.isClickNav = "";
  5267. this.pptImgUrl1 = "";
  5268. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"]; //"PDF",
  5269. if (
  5270. a.indexOf(
  5271. f.url.split(".")[f.url.split(".").length - 1].toLocaleUpperCase()
  5272. ) != -1
  5273. ) {
  5274. this.pptImgUrl1 =
  5275. "https://view.officeapps.live.com/op/view.aspx?src=" + f.url;
  5276. // this.dialogVisible3 = true;
  5277. this.showType = 2;
  5278. } else if (
  5279. this.isAssetTypeAnImage(
  5280. f.url.split(".")[f.url.split(".").length - 1].toLocaleLowerCase()
  5281. )
  5282. ) {
  5283. this.showType = 4;
  5284. this.pptImgUrl1 = f.url;
  5285. } else if (
  5286. f.url.split(".")[f.url.split(".").length - 1].toLocaleUpperCase() ==
  5287. "PDF"
  5288. ) {
  5289. this.pptImgUrl1 = f.url;
  5290. // this.dialogVisible3 = true;
  5291. this.showType = 3;
  5292. } else {
  5293. window.open(this.file[i].url);
  5294. }
  5295. this.isClickNav = "word" + i;
  5296. },
  5297. downFileList(i) {
  5298. window.open(this.noImgList[i].url);
  5299. },
  5300. openAddWork() {
  5301. this.dialogVisible = true;
  5302. },
  5303. addBzWorks() {
  5304. let params = [
  5305. {
  5306. uid: this.userid,
  5307. cid: this.id,
  5308. stage: this.courseType,
  5309. task: this.taskCount,
  5310. tool: this.toolindex,
  5311. content: JSON.stringify(this.eScore),
  5312. type: 6,
  5313. },
  5314. ];
  5315. this.ajax
  5316. .post(this.$store.state.api + "addCourseWorks", params)
  5317. .then((res) => {
  5318. this.$message({
  5319. message: "提交成功",
  5320. type: "success",
  5321. });
  5322. this.eScore = { eBzText: "", eStar: [] };
  5323. this.studentEvalDialogVisible = false;
  5324. this.selectSWorks();
  5325. })
  5326. .catch((err) => {
  5327. this.$message.error("提交失败");
  5328. console.error(err);
  5329. });
  5330. },
  5331. addStudentAsk() {
  5332. for (var i = 0; i < this.radio.length; i++) {
  5333. if (this.radio[i] !== 0 && !this.radio[i]) {
  5334. this.$message.error("请选择选项");
  5335. return;
  5336. }
  5337. }
  5338. this.askList.push({ askJson: this.askJson, anwer: this.radio.join(",") });
  5339. let params = [
  5340. {
  5341. uid: this.userid,
  5342. cid: this.id,
  5343. stage: this.courseType,
  5344. task: this.taskCount,
  5345. tool: this.toolindex,
  5346. content: JSON.stringify(this.askList).replaceAll(/%/g, "%25"),
  5347. type: 2,
  5348. },
  5349. ];
  5350. this.ajax
  5351. .post(this.$store.state.api + "addCourseWorks", params)
  5352. .then((res) => {
  5353. this.$message({
  5354. message: "提交成功",
  5355. type: "success",
  5356. });
  5357. this.askList = [];
  5358. this.dialogVisible5 = false;
  5359. this.selectStudent();
  5360. this.selectSWorks();
  5361. this.selectSLook();
  5362. })
  5363. .catch((err) => {
  5364. this.$message.error("提交失败");
  5365. console.error(err);
  5366. });
  5367. },
  5368. addStudentTest() {
  5369. for (var i = 0; i < this.radio.length; i++) {
  5370. if (
  5371. (this.radio[i] instanceof Array && !this.radio[i].length) ||
  5372. (this.radio[i] !== 0 && !this.radio[i])
  5373. ) {
  5374. this.$message.error("请选择选项");
  5375. return;
  5376. }
  5377. }
  5378. this.askList.push({ testJson: this.testJson, anwer: this.radio });
  5379. let params = [
  5380. {
  5381. uid: this.userid,
  5382. cid: this.id,
  5383. stage: this.courseType,
  5384. task: this.taskCount,
  5385. tool: this.toolindex,
  5386. content: JSON.stringify(this.askList).replaceAll(/%/g, "%25"),
  5387. type: 8,
  5388. },
  5389. ];
  5390. this.ajax
  5391. .post(this.$store.state.api + "addCourseWorks", params)
  5392. .then((res) => {
  5393. this.$message({
  5394. message: "提交成功",
  5395. type: "success",
  5396. });
  5397. this.askList = [];
  5398. this.dialogVisibleChoice = false;
  5399. this.selectStudent();
  5400. this.selectSWorks();
  5401. this.selectSLook();
  5402. })
  5403. .catch((err) => {
  5404. this.$message.error("提交失败");
  5405. console.error(err);
  5406. });
  5407. },
  5408. addWork() {
  5409. if (this.studyJuri[0].content == "") {
  5410. this.$message.error("请将信息填写完整");
  5411. return;
  5412. } else if (this.studyJuri[0].cover.length == 0) {
  5413. this.$message.error("请将信息填写完整");
  5414. return;
  5415. } else if (this.studyJuri[0].upVedio.length == 0) {
  5416. this.$message.error("请将信息填写完整");
  5417. return;
  5418. }
  5419. if (this.isNoHomeWork) {
  5420. this.$confirm(
  5421. "您已经提交了该作业了,如果您再提交将覆盖上次提交的作业!",
  5422. "提示",
  5423. {
  5424. confirmButtonText: "确定",
  5425. cancelButtonText: "取消",
  5426. type: "warning",
  5427. }
  5428. )
  5429. .then(() => {
  5430. let params = [
  5431. {
  5432. uid: this.userid,
  5433. cid: this.id,
  5434. stage: this.courseType,
  5435. task: this.taskCount,
  5436. content: JSON.stringify(this.studyJuri),
  5437. },
  5438. ];
  5439. this.ajax
  5440. .post(this.$store.state.api + "addWorks", params)
  5441. .then((res) => {
  5442. this.$message({
  5443. message: "提交成功",
  5444. type: "success",
  5445. });
  5446. this.isNoHomeWork = true;
  5447. this.dialogVisible = false;
  5448. })
  5449. .catch((err) => {
  5450. this.$message.error("提交失败");
  5451. console.error(err);
  5452. });
  5453. })
  5454. .catch(() => { });
  5455. } else {
  5456. let params = [
  5457. {
  5458. uid: this.userid,
  5459. cid: this.id,
  5460. stage: this.courseType,
  5461. task: this.taskCount,
  5462. content: JSON.stringify(this.studyJuri),
  5463. },
  5464. ];
  5465. this.ajax
  5466. .post(this.$store.state.api + "addWorks", params)
  5467. .then((res) => {
  5468. this.$message({
  5469. message: "提交成功",
  5470. type: "success",
  5471. });
  5472. this.isNoHomeWork = true;
  5473. this.dialogVisible = false;
  5474. })
  5475. .catch((err) => {
  5476. this.$message.error("提交失败");
  5477. console.error(err);
  5478. });
  5479. }
  5480. },
  5481. selectCount() {
  5482. let params = {
  5483. cid: this.id,
  5484. chid: this.courseType,
  5485. uid: this.userid,
  5486. };
  5487. this.ajax
  5488. .get(this.$store.state.api + "selectToolsCount", params)
  5489. .then((res) => {
  5490. for (var i = 0; i < res.data[0].length; i++) {
  5491. if (res.data[0][i].tools == 1) {
  5492. this.wbCount = res.data[0][i].count;
  5493. } else if (res.data[0][i].tools == 2) {
  5494. this.wordCount = res.data[0][i].count;
  5495. } else if (res.data[0][i].tools == 3) {
  5496. this.mindCount = res.data[0][i].count;
  5497. } else if (res.data[0][i].tools == 4) {
  5498. this.askCount = res.data[0][i].count;
  5499. } else if (res.data[0][i].tools == 6) {
  5500. this.noteCount = res.data[0][i].count;
  5501. } else if (res.data[0][i].tools == 7) {
  5502. this.mindNetWorkCount = res.data[0][i].count;
  5503. } else if (res.data[0][i].tools == 8) {
  5504. this.libraryCount = res.data[0][i].count;
  5505. } else if (res.data[0][i].tools == 16) {
  5506. this.workCount = res.data[0][i].count;
  5507. } else if (res.data[0][i].tools == 10) {
  5508. this.timeCount = res.data[0][i].count;
  5509. } else if (res.data[0][i].tools == 15) {
  5510. this.answerCount = res.data[0][i].count;
  5511. } else if (res.data[0][i].tools == 18) {
  5512. this.trainCount = res.data[0][i].count;
  5513. }
  5514. }
  5515. })
  5516. .catch((err) => {
  5517. console.error(err);
  5518. });
  5519. },
  5520. openTools(t, i, index, c, sName) {
  5521. var z = JSON.parse(c);
  5522. this.noteName = sName;
  5523. if (t == 4) {
  5524. this.radio = [];
  5525. this.isAnswer = false;
  5526. for (var i = 0; i < z.length; i++) {
  5527. let a = z[i];
  5528. let b = a.anwer.split(",");
  5529. let d = [];
  5530. for (var j = 0; j < b.length; j++) {
  5531. d.push(parseInt(b[j]));
  5532. }
  5533. this.radio = d;
  5534. this.askJson = a.askJson;
  5535. }
  5536. this.isAnswer = true;
  5537. this.dialogVisible5 = true;
  5538. } else if (t == 45) {
  5539. this.radio = [];
  5540. this.isAnswer = false;
  5541. let b = z[0].anwer;
  5542. this.radio = b;
  5543. this.testJson = z[0].testJson;
  5544. this.isAnswer = true;
  5545. this.dialogVisibleChoice = true;
  5546. }
  5547. // else if (t == 15) {
  5548. // this.answerQ = "";
  5549. // this.questionAnswer = "";
  5550. // this.answerQ = z[0].answerTitle;
  5551. // this.questionAnswer = z[0].answer;
  5552. // this.answerDialogVisible = true;
  5553. // }
  5554. },
  5555. fastText(p, t) {
  5556. if (t == 1) {
  5557. this.commentText += p;
  5558. } else {
  5559. this.eScore.eBzText += p;
  5560. }
  5561. },
  5562. addTools(t, i, index) {
  5563. var a = 0;
  5564. // this.taskCount = index;
  5565. this.toolindex = i;
  5566. if (t == 1) {
  5567. if (this.wbCount > 0) {
  5568. this.updateCount(this.wbCount, t);
  5569. } else {
  5570. this.wbCount++;
  5571. a = this.wbCount;
  5572. this.toolsCount(a, t);
  5573. }
  5574. window.opener.postMessage(
  5575. {
  5576. tools: "1",
  5577. cid: this.id,
  5578. stage: this.courseType,
  5579. task: this.taskCount,
  5580. tool: i,
  5581. },
  5582. "*"
  5583. );
  5584. } else if (t == 2) {
  5585. if (this.wordCount > 0) {
  5586. this.updateCount(this.wordCount, t);
  5587. } else {
  5588. this.wordCount++;
  5589. a = this.wordCount;
  5590. this.toolsCount(a, t);
  5591. }
  5592. window.opener.postMessage({ tools: "2" }, "*");
  5593. } else if (t == 3) {
  5594. if (this.mindCount > 0) {
  5595. this.updateCount(this.mindCount, t);
  5596. } else {
  5597. this.mindCount++;
  5598. a = this.mindCount;
  5599. this.toolsCount(a, t);
  5600. }
  5601. window.opener.postMessage(
  5602. {
  5603. tools: "3",
  5604. cid: this.id,
  5605. stage: this.courseType,
  5606. task: this.taskCount,
  5607. tool: i,
  5608. },
  5609. "*"
  5610. );
  5611. } else if (t == 4) {
  5612. this.radio = [];
  5613. this.noteName = "";
  5614. this.isAnswer = false;
  5615. if (this.askCount > 0) {
  5616. this.updateCount(this.askCount, t);
  5617. } else {
  5618. this.askCount++;
  5619. a = this.askCount;
  5620. this.toolsCount(a, t);
  5621. }
  5622. if (!this.dialogVisible2) {
  5623. this.askJson.askJson =
  5624. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5625. index
  5626. ].toolChoose[i].askJson;
  5627. this.askJson.askTitle =
  5628. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5629. index
  5630. ].toolChoose[i].askTitle;
  5631. this.askJson.askCount =
  5632. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5633. index
  5634. ].toolChoose[i].askCount;
  5635. } else {
  5636. this.askJson.askJson = this.chapTools.askJson.askJson;
  5637. this.askJson.askTitle = this.chapTools.askJson.askTitle;
  5638. this.askJson.askCount = this.chapTools.askJson.askCount;
  5639. }
  5640. this.dialogVisible5 = true;
  5641. // window.opener.postMessage({ tools: "4" }, "*");
  5642. } else if (t == 45) {
  5643. this.noteName = "";
  5644. this.radio = [];
  5645. this.isAnswer = false;
  5646. if (this.askCount > 0) {
  5647. this.updateCount(this.askCount, t);
  5648. } else {
  5649. this.askCount++;
  5650. a = this.askCount;
  5651. this.toolsCount(a, t);
  5652. }
  5653. this.testJson =
  5654. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5655. index
  5656. ].toolChoose[i].testJson;
  5657. for (var k = 0; k < this.testJson.testJson.length; k++) {
  5658. if (this.testJson.testJson[k].type == "2") {
  5659. this.radio.push([]);
  5660. } else {
  5661. this.radio.push("");
  5662. }
  5663. }
  5664. this.dialogVisibleChoice = true;
  5665. // window.opener.postMessage({ tools: "4" }, "*");
  5666. } else if (t == 5) {
  5667. if (this.scoreCount > 0) {
  5668. this.updateCount(this.scoreCount, t);
  5669. } else {
  5670. this.scoreCount++;
  5671. a = this.scoreCount;
  5672. this.toolsCount(a, t);
  5673. }
  5674. this.dialogVisible4 = true;
  5675. // window.opener.postMessage({ tools: "5" }, "*");
  5676. } else if (t == 6) {
  5677. if (this.noteCount > 0) {
  5678. this.updateCount(this.noteCount, t);
  5679. } else {
  5680. this.noteCount++;
  5681. a = this.noteCount;
  5682. this.toolsCount(a, t);
  5683. }
  5684. window.opener.postMessage(
  5685. {
  5686. tools: "6",
  5687. cid: this.id,
  5688. stage: this.courseType,
  5689. task: this.taskCount,
  5690. tool: i,
  5691. },
  5692. "*"
  5693. );
  5694. } else if (t == 7) {
  5695. if (this.mindNetWorkCount > 0) {
  5696. this.updateCount(this.mindNetWorkCount, t);
  5697. } else {
  5698. this.mindNetWorkCount++;
  5699. a = this.mindNetWorkCount;
  5700. this.toolsCount(a, t);
  5701. }
  5702. window.opener.postMessage(
  5703. {
  5704. tools: "7",
  5705. cid: this.id,
  5706. stage: this.courseType,
  5707. task: this.taskCount,
  5708. tool: i,
  5709. },
  5710. "*"
  5711. );
  5712. } else if (t == 16) {
  5713. if (this.workCount > 0) {
  5714. this.updateCount(this.workCount, t);
  5715. } else {
  5716. this.workCount++;
  5717. a = this.workCount;
  5718. this.toolsCount(a, t);
  5719. }
  5720. this.dialogVisible = true;
  5721. } else if (t == 8) {
  5722. if (this.libraryCount > 0) {
  5723. this.updateCount(this.libraryCount, t);
  5724. } else {
  5725. this.libraryCount++;
  5726. a = this.libraryCount;
  5727. this.toolsCount(a, t);
  5728. }
  5729. window.opener.postMessage({ tools: "8" }, "*");
  5730. } else if (t == 17) {
  5731. if (this.libraryCount > 0) {
  5732. this.updateCount(this.libraryCount, t);
  5733. } else {
  5734. this.libraryCount++;
  5735. a = this.libraryCount;
  5736. this.toolsCount(a, t);
  5737. }
  5738. window.opener.postMessage({ tools: "17" }, "*");
  5739. } else if (t == 18) {
  5740. if (this.trainCount > 0) {
  5741. this.updateCount(this.trainCount, t);
  5742. } else {
  5743. this.trainCount++;
  5744. a = this.trainCount;
  5745. this.toolsCount(a, t);
  5746. }
  5747. window.opener.postMessage({ tools: "18" }, "*");
  5748. } else if (t == 10) {
  5749. if (this.timeCount > 0) {
  5750. this.updateCount(this.timeCount, t);
  5751. } else {
  5752. this.timeCount++;
  5753. a = this.timeCount;
  5754. this.toolsCount(a, t);
  5755. }
  5756. this.timeDialogVisible = true;
  5757. } else if (t == 15) {
  5758. this.answerQ = "";
  5759. this.questionAnswer = "";
  5760. if (this.answerCount > 0) {
  5761. this.updateCount(this.answerCount, t);
  5762. } else {
  5763. this.answerCount++;
  5764. a = this.answerCount;
  5765. this.toolsCount(a, t);
  5766. }
  5767. this.answerQ = this.chapInfoList[this.courseType].chapterInfo[0]
  5768. .taskJson[index].toolChoose[i].answerQ
  5769. ? this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index]
  5770. .toolChoose[i].answerQ
  5771. : "";
  5772. this.answerDialogVisible = true;
  5773. } else if (t == 21) {
  5774. window.opener.postMessage({ tools: "21" }, "*");
  5775. } else if (t == 22) {
  5776. window.opener.postMessage({ tools: "22" }, "*");
  5777. } else if (t == 23) {
  5778. window.opener.postMessage({ tools: "23" }, "*");
  5779. } else if (t == 24) {
  5780. window.opener.postMessage({ tools: "24" }, "*");
  5781. } else if (t == 25) {
  5782. window.opener.postMessage({ tools: "25" }, "*");
  5783. } else if (t == 31) {
  5784. window.opener.postMessage({ tools: "31" }, "*");
  5785. } else if (t == 28) {
  5786. window.opener.postMessage({ tools: "28" }, "*");
  5787. } else if (t == 37) {
  5788. window.opener.postMessage({ tools: "37" }, "*");
  5789. } else if (t == 38) {
  5790. window.opener.postMessage({ tools: "38" }, "*");
  5791. } else if (t == 39) {
  5792. window.opener.postMessage({ tools: "39" }, "*");
  5793. } else if (t == 32) {
  5794. window.opener.postMessage({ tools: "32" }, "*");
  5795. } else if (t == 26) {
  5796. window.opener.postMessage(
  5797. {
  5798. tools: "26",
  5799. cid: this.id,
  5800. stage: this.courseType,
  5801. task: this.taskCount,
  5802. tool: i,
  5803. },
  5804. "*"
  5805. );
  5806. } else if (t == 40) {
  5807. if (this.evalCount > 0) {
  5808. this.updateCount(this.evalCount, t);
  5809. } else {
  5810. this.evalCount++;
  5811. a = this.evalCount;
  5812. this.toolsCount(a, t);
  5813. }
  5814. this.eScore = { eBzText: "", eStar: [] };
  5815. if (this.worksStudent[i].length) {
  5816. for (var k = 0; k < this.worksStudent[i].length; k++) {
  5817. if (this.userid == this.worksStudent[i][k].userid) {
  5818. this.eScore = JSON.parse(this.worksStudent[i][k].works);
  5819. this.rateJson =
  5820. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5821. index
  5822. ].toolChoose[i].rateJson;
  5823. break;
  5824. } else {
  5825. this.rateJson =
  5826. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5827. index
  5828. ].toolChoose[i].rateJson;
  5829. }
  5830. }
  5831. } else {
  5832. this.rateJson =
  5833. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5834. index
  5835. ].toolChoose[i].rateJson;
  5836. }
  5837. this.isStar = false;
  5838. this.studentEvalDialogVisible = true;
  5839. } else if (t == 41) {
  5840. this.selectJson = this.chapInfoList[this.courseType].chapterInfo[0]
  5841. .taskJson[index].toolChoose[i].selectJson
  5842. ? JSON.parse(
  5843. JSON.stringify(
  5844. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  5845. index
  5846. ].toolChoose[i].selectJson
  5847. )
  5848. )
  5849. : { url: "", select: [], answer: [] };
  5850. if (this.worksStudent[i].length) {
  5851. for (var k = 0; k < this.worksStudent[i].length; k++) {
  5852. if (this.userid == this.worksStudent[i][k].userid) {
  5853. var a = this.worksStudent[i][k].works.split(",");
  5854. for (var ki = 0; ki < a.length; ki++) {
  5855. a[ki] = parseInt(a[ki]);
  5856. }
  5857. this.selectAnswer = {
  5858. answer: a,
  5859. stu: this.worksStudent[i][k].sName,
  5860. };
  5861. break;
  5862. } else {
  5863. this.selectAnswer = { answer: [], stu: "" };
  5864. }
  5865. }
  5866. } else {
  5867. this.selectAnswer = { answer: [], stu: "" };
  5868. }
  5869. this.isSelect = false;
  5870. this.dialogVisibleSelect = true;
  5871. } else if (t == 44) {
  5872. window.opener.postMessage({ tools: "44" }, "*");
  5873. }
  5874. },
  5875. toolsCount(a, t) {
  5876. let params = {
  5877. cid: this.id,
  5878. chid: this.courseType,
  5879. uid: this.userid,
  5880. tid: t,
  5881. count: a,
  5882. };
  5883. this.ajax
  5884. .get(this.$store.state.api + "insertToolsCount", params)
  5885. .then((res) => {
  5886. this.selectCount();
  5887. })
  5888. .catch((err) => {
  5889. console.error(err);
  5890. });
  5891. },
  5892. updateCount(c, t) {
  5893. c++;
  5894. let params = {
  5895. cid: this.id,
  5896. chid: this.courseType,
  5897. uid: this.userid,
  5898. tid: t,
  5899. count: c,
  5900. };
  5901. this.ajax
  5902. .get(this.$store.state.api + "updateToolsCount", params)
  5903. .then((res) => {
  5904. this.selectCount();
  5905. })
  5906. .catch((err) => {
  5907. console.error(err);
  5908. });
  5909. },
  5910. checkEva() {
  5911. if (this.evalua != "") {
  5912. for (var i = 0; i < this.evaJuri.length; i++) {
  5913. if (this.evalua == this.evaJuri[i].id) {
  5914. this.eTitle = this.evaJuri[i].title;
  5915. this.eJson = JSON.parse(this.evaJuri[i].content);
  5916. }
  5917. }
  5918. this.$forceUpdate();
  5919. setTimeout(() => {
  5920. this.setMindData();
  5921. }, 0);
  5922. }
  5923. },
  5924. selectEva() {
  5925. let params = {
  5926. oid: this.oid,
  5927. };
  5928. this.ajax
  5929. .get(this.$store.state.api + "selectAllEvaluation", params)
  5930. .then((res) => {
  5931. this.evaJuri = res.data[0];
  5932. })
  5933. .catch((err) => {
  5934. console.error(err);
  5935. });
  5936. },
  5937. setMindData() {
  5938. this.data.data = [];
  5939. this.data.data.push({ id: "root", isroot: true, topic: this.eTitle });
  5940. let _eJson = Object.keys(this.eJson);
  5941. let _e = this.eJson;
  5942. for (let i = 0; i < _eJson.length; i++) {
  5943. let element = _e[_eJson[i]];
  5944. this.data.data.push({
  5945. id: element.id,
  5946. parentid: "root",
  5947. topic: element.name,
  5948. });
  5949. let _eJsonc = Object.keys(element.child);
  5950. let _e2 = element.child;
  5951. for (let j = 0; j < _eJsonc.length; j++) {
  5952. let _ec = _e2[_eJsonc[j]];
  5953. this.data.data.push({
  5954. id: _ec.id,
  5955. parentid: element.id,
  5956. topic: _ec.name,
  5957. });
  5958. let _eJsonz = Object.keys(_ec.child);
  5959. let _e3 = _ec.child;
  5960. for (let z = 0; z < _eJsonz.length; z++) {
  5961. let _ez = _e3[_eJsonz[z]];
  5962. this.data.data.push({
  5963. id: _ez.id,
  5964. parentid: _ec.id,
  5965. topic: _ez.name,
  5966. });
  5967. }
  5968. }
  5969. }
  5970. this.$forceUpdate();
  5971. },
  5972. checkFileFull(type, url) {
  5973. this.fullDialogVisible = true;
  5974. this.fulltype = type;
  5975. this.fullUrl = url;
  5976. },
  5977. downloadFile(url) {
  5978. let _url = "";
  5979. if (
  5980. url.indexOf("https://view.officeapps.live.com/op/view.aspx?src=") != -1
  5981. ) {
  5982. _url = url.split(
  5983. "https://view.officeapps.live.com/op/view.aspx?src="
  5984. )[1];
  5985. } else {
  5986. _url = url;
  5987. }
  5988. const x = new XMLHttpRequest();
  5989. x.open("GET", _url, true);
  5990. x.responseType = "blob";
  5991. x.onload = function (e) {
  5992. // const url = window.URL.createObjectURL(x.response);
  5993. // const a = document.createElement("a");
  5994. // a.href = url;
  5995. // a.target = "_blank";
  5996. // a.download = url;
  5997. // a.click();
  5998. // a.remove();
  5999. let content = x.response;
  6000. let elink = document.createElement("a");
  6001. elink.download = decodeURI(
  6002. _url.split("https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/")[1]
  6003. );
  6004. elink.style.display = "none";
  6005. let blob = new Blob([content]);
  6006. elink.href = URL.createObjectURL(blob);
  6007. document.body.appendChild(elink);
  6008. elink.click();
  6009. document.body.removeChild(elink);
  6010. };
  6011. x.send();
  6012. },
  6013. openLine(url) {
  6014. window.open(url);
  6015. },
  6016. resize() {
  6017. if (document.getElementsByClassName("box_course").length) {
  6018. var a = document.getElementsByClassName("box_course")[0].offsetHeight;
  6019. document.getElementsByClassName("vedioList")[0].style.height = a + "px";
  6020. document.getElementsByClassName("navBox")[0].style.height =
  6021. a - 40 + "px";
  6022. }
  6023. this.Stbodywidth =
  6024. document.getElementsByClassName("student_body").length &&
  6025. document.getElementsByClassName("student_body")[0].offsetWidth;
  6026. },
  6027. closeDraw() {
  6028. this.bg = null;
  6029. this.drawShow = false;
  6030. },
  6031. showPicturePaint(url) {
  6032. let params = {
  6033. img: url,
  6034. };
  6035. this.ajax
  6036. .get(this.$store.state.api + "imgToBase64", params)
  6037. .then((res) => {
  6038. console.log(res);
  6039. this.drawShow = true;
  6040. this.bg = res.data[0].img;
  6041. })
  6042. .catch((err) => {
  6043. console.error(err);
  6044. });
  6045. },
  6046. addImgDraw(base64) {
  6047. let file = { name: "批注图.png" };
  6048. let img = this.dataUrlToFile(base64, file);
  6049. this.beforeUpload1(img, 5);
  6050. },
  6051. addImgDrawImG(url) {
  6052. // console.log(url);
  6053. let params = [
  6054. {
  6055. wid: this.commentDetail.wid,
  6056. img: url,
  6057. },
  6058. ];
  6059. this.ajax
  6060. .post(this.$store.state.api + "updateCourseWorks", params)
  6061. .then((res) => {
  6062. this.$message({
  6063. message: "提交成功",
  6064. type: "success",
  6065. });
  6066. this.drawShow = false;
  6067. this.bg = "";
  6068. this.selectSWorks();
  6069. this.selectStudent();
  6070. })
  6071. .catch((err) => {
  6072. this.$message.error("提交失败");
  6073. console.error(err);
  6074. });
  6075. },
  6076. deletePicturePaint() {
  6077. this.$confirm("确定删除此批注吗?", "提示", {
  6078. confirmButtonText: "确定",
  6079. cancelButtonText: "取消",
  6080. type: "warning",
  6081. })
  6082. .then(() => {
  6083. let params = [
  6084. {
  6085. wid: this.commentDetail.wid,
  6086. img: '',
  6087. },
  6088. ];
  6089. this.ajax
  6090. .post(this.$store.state.api + "updateCourseWorks", params)
  6091. .then((res) => {
  6092. this.$message({
  6093. message: "删除成功",
  6094. type: "success",
  6095. });
  6096. this.selectSWorks();
  6097. this.selectStudent();
  6098. })
  6099. .catch((err) => {
  6100. this.$message.error("删除失败");
  6101. console.error(err);
  6102. });
  6103. })
  6104. .catch(() => { });
  6105. },
  6106. getAudioVideo(constraintsData) {
  6107. if (navigator.mediaDevices === undefined) {
  6108. navigator.mediaDevices = {};
  6109. }
  6110. if (navigator.mediaDevices.getUserMedia === undefined) {
  6111. navigator.mediaDevices.getUserMedia = function (constraints) {
  6112. // 首先,如果有getUserMedia的话,就获得它
  6113. var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
  6114. // 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
  6115. if (!getUserMedia) {
  6116. return Promise.reject({ code: 404 });
  6117. }
  6118. // 否则,为老的navigator.getUserMedia方法包裹一个Promise
  6119. return new Promise(function (resolve, reject) {
  6120. getUserMedia.call(navigator, constraints, resolve, reject);
  6121. });
  6122. }
  6123. }
  6124. return navigator.mediaDevices.getUserMedia(constraintsData)
  6125. },
  6126. /**
  6127. * 开始录制
  6128. */
  6129. startRecording(callback) {
  6130. const _function = (screenStream) => {
  6131. this.addStreamStopListener(screenStream, () => {
  6132. console.log("流停止监听");
  6133. this.stopRecording();
  6134. this.$emit("streamStop", {})
  6135. // this.stopRecording();
  6136. });
  6137. var options = {
  6138. type: 'video',
  6139. mimeType: 'video/webm',
  6140. disableLogs: false,
  6141. getNativeBlob: false, // enable it for longer recordings
  6142. ignoreMutedMedia: false
  6143. };
  6144. // this.video.srcObject = screenStream;
  6145. this.recorder = RecordRTC(screenStream, options);
  6146. this.recorder.startRecording();
  6147. this.recorder.screen = screenStream;
  6148. this.videoStart = true;
  6149. // callback(true);
  6150. }
  6151. this.getAudioVideo({ audio: true }).then(res => {
  6152. this.captureScreen(_function, true);
  6153. console.log('已点击允许,开启成功');
  6154. }).catch(err => {
  6155. // console.log('浏览器不支持,请更换浏览器')
  6156. // } else {
  6157. this.captureScreen(_function, false);
  6158. console.log('请检查是否存在麦克风')
  6159. })
  6160. },
  6161. /**
  6162. * 停止录制
  6163. */
  6164. stopRecording(callback) {
  6165. this.recorder.stopRecording(() => {
  6166. // this.video.src = this.video.srcObject = null;
  6167. // this.video.src = URL.createObjectURL(this.recorder.getBlob());
  6168. const url = URL.createObjectURL(this.recorder.getBlob());
  6169. const a = document.createElement("a");//this.fileName+
  6170. let videoFile = new File([this.recorder.getBlob()], this.courseDetail.title + "录屏.mp4", {
  6171. type: 'video/mp4'
  6172. })
  6173. let downloadUrl = URL.createObjectURL(videoFile);
  6174. document.body.appendChild(a);
  6175. a.style.display = "none";
  6176. a.href = url;
  6177. a.download = this.courseDetail.title + "录屏.mp4";//this.fileName +
  6178. a.click();
  6179. this.recorder.screen.stop();
  6180. this.recorder.destroy();
  6181. this.recorder = null;
  6182. this.videoStart = false;
  6183. // callback(false);
  6184. });
  6185. },
  6186. //初始化
  6187. captureScreen(callback, type) {
  6188. if (navigator.getDisplayMedia) {
  6189. //录制结束,文件下载
  6190. navigator.getDisplayMedia({
  6191. video: true
  6192. }).then(screenStream => {
  6193. if (type) {
  6194. navigator.mediaDevices.getUserMedia({ audio: true }).then((mic) => {
  6195. screenStream.addTrack(mic.getTracks()[0]);
  6196. callback(screenStream);
  6197. });
  6198. } else {
  6199. callback(screenStream);
  6200. }
  6201. }).catch(function (error) {
  6202. console.log('error', error);
  6203. });
  6204. } else if (navigator.mediaDevices.getDisplayMedia) {
  6205. navigator.mediaDevices.getDisplayMedia({
  6206. video: true
  6207. }).then(screenStream => {
  6208. if (type) {
  6209. navigator.mediaDevices.getUserMedia({ audio: true }).then((mic) => {
  6210. screenStream.addTrack(mic.getTracks()[0]);
  6211. callback(screenStream);
  6212. });
  6213. } else {
  6214. callback(screenStream);
  6215. }
  6216. }).catch(function (error) {
  6217. console.log('error', error);
  6218. });
  6219. } else {
  6220. var error = 'getDisplayMedia API are not supported in this browser.';
  6221. console.log('error', error);
  6222. alert(error);
  6223. }
  6224. },
  6225. //流监听
  6226. addStreamStopListener(stream, callback) {
  6227. stream.addEventListener('ended', function () {
  6228. callback();
  6229. callback = function () { };
  6230. }, false);
  6231. stream.addEventListener('inactive', function () {
  6232. callback();
  6233. callback = function () { };
  6234. }, false);
  6235. stream.getTracks().forEach(function (track) {
  6236. track.addEventListener('ended', function () {
  6237. callback();
  6238. callback = function () { };
  6239. }, false);
  6240. track.addEventListener('inactive', function () {
  6241. callback();
  6242. callback = function () { };
  6243. }, false);
  6244. });
  6245. },
  6246. },
  6247. directives: {
  6248. // 使用局部注册指令的方式
  6249. resize: {
  6250. // 指令的名称
  6251. bind(el, binding) {
  6252. // el为绑定的元素,binding为绑定给指令的对象
  6253. let width = "",
  6254. height = "";
  6255. function isReize() {
  6256. const style = document.defaultView.getComputedStyle(el);
  6257. if (width !== style.width || height !== style.height) {
  6258. binding.value(); // 关键
  6259. }
  6260. width = style.width;
  6261. height = style.height;
  6262. }
  6263. el.__vueSetInterval__ = setInterval(isReize, 300);
  6264. },
  6265. unbind(el) {
  6266. clearInterval(el.__vueSetInterval__);
  6267. },
  6268. },
  6269. },
  6270. beforeDestroy() {
  6271. window.onresize = null;
  6272. clearInterval(this.timer);
  6273. this.timer = null;
  6274. },
  6275. computed: {
  6276. contentConvent() {
  6277. return function (c) {
  6278. return c
  6279. ? c
  6280. .replaceAll(/\r\n/g, "<br/>")
  6281. .replaceAll(/\n/g, "<br/>")
  6282. .replaceAll(/\s/g, " &nbsp")
  6283. : "";
  6284. };
  6285. },
  6286. },
  6287. created() {
  6288. if (this.screenType == 2) {
  6289. window.opener.postMessage({ allScreen: 4 }, "*");
  6290. } else if (this.screenType == 3) {
  6291. window.opener.postMessage({ allScreen: "5gm" }, "*");
  6292. } else if (this.screenType == 1) {
  6293. window.opener.postMessage({ allScreen: 6 }, "*");
  6294. }
  6295. this.selectEva();
  6296. this.getCourseDetail();
  6297. this.selectCount();
  6298. this.getHomeWork();
  6299. if (this.tType == 4) {
  6300. this.pzDialog = true;
  6301. this.selectPz();
  6302. }
  6303. document.scrollingElement.scrollTop = 0;
  6304. window.addEventListener("resize", () => {
  6305. var a = document.getElementsByClassName("box_course")[0].offsetHeight;
  6306. document.getElementsByClassName("vedioList")[0].style.height = a + "px";
  6307. document.getElementsByClassName("navBox")[0].style.height = a - 40 + "px";
  6308. });
  6309. let _this = this;
  6310. setTimeout(() => {
  6311. _this.vedioTime = [];
  6312. for (var i = 0; i < _this.vedio[_this.taskCount].length; i++) {
  6313. _this.vedioTime[i] = document.getElementsByClassName(
  6314. "vjs-duration-display"
  6315. )[i].textContent;
  6316. }
  6317. }, 1000);
  6318. },
  6319. };
  6320. </script>
  6321. <style scoped>
  6322. @media screen and (max-width: 1280px) {
  6323. /* .courseIndex > div:first-child(2) {
  6324. width: 15% !important;
  6325. } */
  6326. /* .navText {
  6327. width: 120px !important;
  6328. } */
  6329. .evaCss {
  6330. flex-direction: column !important;
  6331. align-items: center !important;
  6332. }
  6333. .dialog_diy1>>>.el-dialog {
  6334. width: 100% !important;
  6335. }
  6336. .rightWidthCss {
  6337. width: 100% !important;
  6338. }
  6339. .dialog_diy3>>>.el-dialog {
  6340. width: 100% !important;
  6341. }
  6342. /* .textTitle >>> .el-form-item__label {
  6343. width: 150px !important;
  6344. } */
  6345. }
  6346. .evaCssMax {
  6347. flex-direction: column !important;
  6348. align-items: center !important;
  6349. }
  6350. .dialog_diy>>>.el-dialog {
  6351. margin-top: 10vh !important;
  6352. }
  6353. .body_student {
  6354. width: 77%;
  6355. height: 100%;
  6356. position: absolute;
  6357. left: 22%;
  6358. top: 0;
  6359. }
  6360. .student_head {
  6361. width: 100%;
  6362. margin: 0 auto;
  6363. padding-bottom: 50px;
  6364. display: flex;
  6365. flex-direction: column;
  6366. flex-wrap: nowrap;
  6367. align-items: flex-start;
  6368. justify-content: flex-start;
  6369. }
  6370. .pb_left {
  6371. width: 20%;
  6372. margin-right: 10px;
  6373. background: rgb(255, 255, 255);
  6374. padding-right: 10px;
  6375. position: fixed;
  6376. height: 100%;
  6377. }
  6378. .wheel>img,
  6379. .project>img,
  6380. .star>img,
  6381. .evaluate>img,
  6382. .up_photo>img,
  6383. .chapter_add>img,
  6384. .upCover>img,
  6385. .deleteWord>img,
  6386. .question>img,
  6387. .homework>img {
  6388. width: 100%;
  6389. height: 100%;
  6390. }
  6391. .upCover {
  6392. width: calc(100% / 3.5);
  6393. position: relative;
  6394. margin: 0 15px 10px 0;
  6395. display: flex;
  6396. flex-direction: column;
  6397. flex-wrap: nowrap;
  6398. justify-content: center;
  6399. align-content: center;
  6400. align-items: center;
  6401. }
  6402. .chapter_add {
  6403. width: 120px;
  6404. position: relative;
  6405. text-align: center;
  6406. }
  6407. .isAddThings {
  6408. margin-top: 20px;
  6409. position: relative;
  6410. text-align: center;
  6411. background: #f7f8fa;
  6412. height: 90px;
  6413. width: 90px;
  6414. display: flex;
  6415. flex-direction: column;
  6416. justify-content: center;
  6417. }
  6418. .deleteWord {
  6419. width: 22px;
  6420. height: 22px;
  6421. position: absolute;
  6422. right: -5px;
  6423. top: -5px;
  6424. cursor: pointer;
  6425. }
  6426. .box_course {
  6427. /* width: 60%; */
  6428. width: 81%;
  6429. }
  6430. .wheel {
  6431. width: 100%;
  6432. height: 100%;
  6433. }
  6434. .right_box {
  6435. display: flex;
  6436. flex-direction: column;
  6437. margin-left: 30px;
  6438. justify-content: space-around;
  6439. }
  6440. .right_box_title {
  6441. font-size: 23px;
  6442. }
  6443. .people {
  6444. display: flex;
  6445. }
  6446. .student_body {
  6447. width: 100%;
  6448. margin: 0 auto;
  6449. margin-top: 10px;
  6450. padding: 0 0 20px;
  6451. }
  6452. .study_top {
  6453. margin-top: 70px;
  6454. width: 100%;
  6455. /* overflow: auto; */
  6456. height: auto;
  6457. }
  6458. .study_top .checkbox {
  6459. display: flex;
  6460. align-items: center;
  6461. padding: 15px 0 15px 30px;
  6462. flex: 0 0 auto;
  6463. font-weight: bold;
  6464. border-bottom: 1px solid #eee;
  6465. }
  6466. .study_top .check {
  6467. padding-bottom: 5px;
  6468. text-align: center;
  6469. cursor: pointer;
  6470. height: 30px;
  6471. box-sizing: border-box;
  6472. display: flex;
  6473. }
  6474. .study_top .checked {
  6475. border-bottom: 4px solid #3fc6a0;
  6476. padding-bottom: 5px;
  6477. color: #3fc6a0;
  6478. display: flex;
  6479. height: 35px;
  6480. }
  6481. .study_top .checked>div,
  6482. .study_top .check>div {
  6483. margin-right: 5px;
  6484. }
  6485. .videoTop {
  6486. display: flex;
  6487. flex-direction: row;
  6488. justify-content: space-between;
  6489. background: #fff;
  6490. align-items: center;
  6491. width: 95%;
  6492. padding: 20px;
  6493. }
  6494. .upbtn {
  6495. margin: 25px;
  6496. background: #70afdb;
  6497. color: #fff;
  6498. width: 120px;
  6499. text-align: center;
  6500. height: 30px;
  6501. line-height: 30px;
  6502. font-size: 13px;
  6503. border-radius: 5px;
  6504. cursor: pointer;
  6505. }
  6506. .filebox {
  6507. display: flex;
  6508. flex-wrap: wrap;
  6509. flex-direction: column;
  6510. padding: 15px 0 5px;
  6511. }
  6512. .filebox .tooldetail {
  6513. width: 100%;
  6514. margin: 0px 12px;
  6515. background: rgb(247, 247, 247);
  6516. padding: 20px;
  6517. line-height: 30px;
  6518. word-break: break-word;
  6519. }
  6520. .file {
  6521. display: flex;
  6522. flex-direction: column;
  6523. align-items: center;
  6524. justify-content: center;
  6525. cursor: pointer;
  6526. width: 200px;
  6527. }
  6528. .file div {
  6529. margin-top: 10px;
  6530. width: 150px;
  6531. text-align: center;
  6532. overflow: hidden;
  6533. white-space: nowrap;
  6534. text-overflow: ellipsis;
  6535. }
  6536. .media {
  6537. display: flex;
  6538. flex-direction: column;
  6539. align-items: center;
  6540. justify-content: center;
  6541. margin: 0 20px 20px 0;
  6542. cursor: pointer;
  6543. margin: 12px 0 5px 15px;
  6544. overflow: hidden;
  6545. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%),
  6546. 0px 2px 1px -1px rgb(0 0 0 / 12%);
  6547. box-sizing: border-box;
  6548. }
  6549. .media img {
  6550. height: 90px;
  6551. width: 160px;
  6552. object-fit: cover;
  6553. }
  6554. .media .title {
  6555. padding: 5px;
  6556. text-align: left;
  6557. width: 100%;
  6558. box-sizing: border-box;
  6559. }
  6560. .media .btn {
  6561. width: 100%;
  6562. height: 35px;
  6563. line-height: 35px;
  6564. color: #fff;
  6565. background: #606060;
  6566. text-align: center;
  6567. overflow: hidden;
  6568. white-space: nowrap;
  6569. text-overflow: ellipsis;
  6570. }
  6571. .detail_content_top {
  6572. width: 100%;
  6573. padding: 25px 0 25px 0;
  6574. }
  6575. .detail_title {
  6576. text-align: center;
  6577. font-size: 24px;
  6578. }
  6579. .detail_time {
  6580. font-size: 13px;
  6581. padding: 15px 0 0 40px;
  6582. }
  6583. .detail_content {
  6584. line-height: 2pc;
  6585. width: 90%;
  6586. margin: 0 auto;
  6587. padding-top: 30px;
  6588. text-indent: 30px;
  6589. overflow: auto;
  6590. height: 200px;
  6591. }
  6592. .score_box>>>.el-rate {
  6593. margin-left: 10px;
  6594. }
  6595. .dialog_change>>>.el-dialog {
  6596. border-radius: 5px;
  6597. }
  6598. .dialog_change>>>.el-dialog__header {
  6599. background: #f2f2f2;
  6600. text-align: center;
  6601. }
  6602. .dialog_change>>>.el-dialog__title {
  6603. line-height: 5px;
  6604. }
  6605. .dialog_change>>>.el-dialog__body {
  6606. background: #fff;
  6607. padding: 10px 20px;
  6608. }
  6609. .score_box {
  6610. display: flex;
  6611. align-items: center;
  6612. margin-bottom: 18px;
  6613. margin-top: 20px;
  6614. }
  6615. .up_photo {
  6616. width: 120px;
  6617. cursor: pointer;
  6618. margin-top: 10px;
  6619. }
  6620. .upload_send {
  6621. margin: 30px auto 30px;
  6622. width: 60%;
  6623. background: #169bd6;
  6624. text-align: center;
  6625. height: 35px;
  6626. line-height: 35px;
  6627. color: #fff;
  6628. border-radius: 5px;
  6629. cursor: pointer;
  6630. }
  6631. .marginT {
  6632. margin-top: 20px;
  6633. }
  6634. .cd_content_steps {
  6635. display: flex;
  6636. width: 90%;
  6637. justify-content: space-around;
  6638. border-top: 1px solid #eeeeee;
  6639. }
  6640. .cd_steps_box {
  6641. display: flex;
  6642. justify-content: center;
  6643. align-items: center;
  6644. flex-direction: column;
  6645. cursor: pointer;
  6646. }
  6647. .first {
  6648. display: flex;
  6649. align-items: center;
  6650. margin: 15px 0 20px 0;
  6651. font-size: 20px;
  6652. }
  6653. .first>div:nth-child(2) {
  6654. font-size: 16px !important;
  6655. padding-left: 10px;
  6656. line-height: 26px;
  6657. box-sizing: border-box;
  6658. }
  6659. .blue_box_one {
  6660. text-align: center;
  6661. color: #fff;
  6662. background-image: linear-gradient(90deg, #7960d5, #65b9fc);
  6663. border-radius: 7px;
  6664. margin: 10px;
  6665. cursor: pointer;
  6666. width: 95%;
  6667. height: 45px;
  6668. display: flex;
  6669. flex-direction: row;
  6670. justify-content: flex-start;
  6671. align-items: center;
  6672. }
  6673. .blue_box_one>div:nth-child(1) {
  6674. line-height: 30px;
  6675. margin: 0 5px 0 10px;
  6676. width: 30%;
  6677. min-width: 70px;
  6678. border-radius: 4px;
  6679. }
  6680. .blue_box_one>div:nth-child(2) {
  6681. white-space: nowrap;
  6682. text-overflow: ellipsis;
  6683. overflow: hidden;
  6684. word-break: break-all;
  6685. width: 70%;
  6686. text-align: left;
  6687. margin-right: 10px;
  6688. max-width: calc(100% - 85px);
  6689. }
  6690. .blue_box_one>div:nth-child(2):hover {
  6691. overflow: hidden;
  6692. text-overflow: ellipsis;
  6693. white-space: nowrap;
  6694. cursor: pointer;
  6695. }
  6696. .upFile {
  6697. margin: 0 auto;
  6698. width: 120px;
  6699. background: #70afdb;
  6700. color: #fff;
  6701. height: 30px;
  6702. text-align: center;
  6703. line-height: 30px;
  6704. border-radius: 5px;
  6705. font-size: 14px;
  6706. cursor: pointer;
  6707. }
  6708. .courseTitle {
  6709. background: #634fa4;
  6710. width: 85%;
  6711. margin: 10px auto;
  6712. height: 50px;
  6713. color: #fff;
  6714. line-height: 50px;
  6715. text-align: center;
  6716. font-size: 20px;
  6717. font-weight: bold;
  6718. border-radius: 5px;
  6719. cursor: pointer;
  6720. white-space: nowrap;
  6721. overflow: hidden;
  6722. text-overflow: ellipsis;
  6723. padding: 0 10px;
  6724. }
  6725. .ml {
  6726. margin-left: 20px;
  6727. color: #5b7dba;
  6728. border-left: 3px solid #5b7dba;
  6729. padding-left: 5px;
  6730. font-weight: bold;
  6731. }
  6732. .return {
  6733. width: 2rem;
  6734. height: 2rem;
  6735. cursor: pointer;
  6736. }
  6737. .return>img {
  6738. width: 100%;
  6739. height: 100%;
  6740. }
  6741. .returnBtn {
  6742. background: #7b7cb3;
  6743. width: 65px;
  6744. height: 30px;
  6745. color: #fff;
  6746. text-align: center;
  6747. line-height: 32px;
  6748. margin-right: 20px;
  6749. cursor: pointer;
  6750. border-radius: 5px;
  6751. font-size: 14px;
  6752. }
  6753. .tool {
  6754. display: flex;
  6755. flex-direction: column;
  6756. flex-wrap: nowrap;
  6757. width: 13%;
  6758. margin: 0 30px;
  6759. align-items: center;
  6760. }
  6761. .whiteBIcon {
  6762. width: 150px;
  6763. cursor: pointer;
  6764. }
  6765. .whiteBIcon>img {
  6766. width: 100%;
  6767. height: 100%;
  6768. }
  6769. .mask {
  6770. background-color: rgba(0, 0, 0, 0);
  6771. position: fixed;
  6772. top: 0;
  6773. left: 0;
  6774. width: 100%;
  6775. height: 100%;
  6776. z-index: 20000;
  6777. display: flex;
  6778. align-items: center;
  6779. justify-content: center;
  6780. }
  6781. .progressBox {
  6782. width: 500px;
  6783. height: 180px;
  6784. background: #fff;
  6785. border-radius: 10px;
  6786. box-shadow: 0 0 6px 1px #bfbfbf;
  6787. display: flex;
  6788. align-items: center;
  6789. justify-content: center;
  6790. flex-direction: column;
  6791. }
  6792. .progressBox .lbox {
  6793. height: 100px;
  6794. font-size: 19px;
  6795. display: flex;
  6796. align-items: center;
  6797. }
  6798. .progressBox .lbox img {
  6799. width: 40px;
  6800. margin-right: 20px;
  6801. }
  6802. .progressBox>>>.el-progress-bar__outer {
  6803. background-color: #d1dfff !important;
  6804. }
  6805. .progressBox .lbox {
  6806. height: 100px;
  6807. font-size: 19px;
  6808. display: flex;
  6809. align-items: center;
  6810. }
  6811. .progressBox .lbox img {
  6812. width: 40px;
  6813. margin-right: 20px;
  6814. }
  6815. .uploadVedio {
  6816. display: flex;
  6817. flex-direction: column;
  6818. flex-wrap: nowrap;
  6819. justify-content: center;
  6820. align-items: center;
  6821. margin: 0 15px 10px 0;
  6822. }
  6823. .uploadVedio>img {
  6824. width: 30px;
  6825. height: 30px;
  6826. }
  6827. .uploadVedio>span {
  6828. white-space: nowrap;
  6829. overflow: hidden;
  6830. text-overflow: ellipsis;
  6831. width: 75px;
  6832. margin-top: 7px;
  6833. }
  6834. .picName {
  6835. white-space: nowrap;
  6836. overflow: hidden;
  6837. text-overflow: ellipsis;
  6838. width: 75px;
  6839. margin-top: 7px;
  6840. }
  6841. .new_top {
  6842. display: flex;
  6843. background: #fff;
  6844. flex-direction: row;
  6845. justify-content: flex-start;
  6846. align-items: center;
  6847. height: 60px;
  6848. position: relative;
  6849. }
  6850. .before {
  6851. position: absolute;
  6852. background: #c3dad4;
  6853. width: 6px;
  6854. height: 100%;
  6855. }
  6856. .courseIndex {
  6857. display: flex;
  6858. flex-direction: row;
  6859. align-items: center;
  6860. width: calc(100% - 520px);
  6861. }
  6862. .courseIndex>div:nth-child(1) {
  6863. margin: 0 20px;
  6864. padding-left: 5px;
  6865. font-size: 24px;
  6866. min-width: 100px;
  6867. font-weight: bold;
  6868. border-left: 4px solid #5e539d;
  6869. height: 35px;
  6870. text-align: center;
  6871. line-height: 35px;
  6872. }
  6873. .courseIndex>div:nth-child(2) {
  6874. font-size: 23px;
  6875. /* width: 300px; */
  6876. max-width: calc(100% - 180px);
  6877. white-space: nowrap;
  6878. overflow: hidden;
  6879. text-overflow: ellipsis;
  6880. }
  6881. .courseIndex>div:nth-child(3) {
  6882. border-bottom: 1px solid #d7d7d7;
  6883. padding-bottom: 5px;
  6884. background: #967cdf;
  6885. width: 55px;
  6886. min-width: 55px;
  6887. border-radius: 5px;
  6888. color: #fff;
  6889. text-align: center;
  6890. height: 20px;
  6891. line-height: 26px;
  6892. font-size: 14px;
  6893. margin: 0 0 0 10px;
  6894. }
  6895. .course_text {
  6896. padding: 20px 0 0 15px;
  6897. text-indent: 30px;
  6898. width: 80%;
  6899. min-height: 20px;
  6900. }
  6901. .vedioList {
  6902. background: #f2f2f2;
  6903. border: 1px solid #ececec;
  6904. /* width: 38.8%; */
  6905. width: calc(100% - 83%);
  6906. height: 445px;
  6907. border-radius: 10px;
  6908. overflow: hidden;
  6909. }
  6910. .vedioNav {
  6911. margin: 10px 0 0 15px;
  6912. /* border-bottom: 1px solid #d7d7d7; */
  6913. padding-bottom: 5px;
  6914. background: #b9afe3;
  6915. width: 55px;
  6916. min-width: 55px;
  6917. border-radius: 5px;
  6918. color: #fff;
  6919. text-align: center;
  6920. height: 20px;
  6921. line-height: 26px;
  6922. font-size: 14px;
  6923. }
  6924. .queTop {
  6925. display: flex;
  6926. padding: 20px 0 20px 30px;
  6927. width: 100%;
  6928. flex-direction: row;
  6929. justify-content: flex-start;
  6930. align-items: center;
  6931. border-bottom: 1px solid #eeeeee;
  6932. box-sizing: border-box;
  6933. }
  6934. .question {
  6935. width: 40px;
  6936. margin-right: 10px;
  6937. margin-top: 7px;
  6938. }
  6939. .queTitle {
  6940. margin-left: 5px;
  6941. font-size: 25px;
  6942. display: flex;
  6943. align-items: center;
  6944. }
  6945. .addEditor {
  6946. width: 100px;
  6947. height: 30px;
  6948. background: #42cda6;
  6949. color: #fff;
  6950. border-radius: 5px;
  6951. text-align: center;
  6952. line-height: 30px;
  6953. box-shadow: 1px 3px 6px 1px #bfbfbf;
  6954. cursor: pointer;
  6955. }
  6956. .vedioName {
  6957. /* text-overflow: ellipsis;
  6958. top: 8px;
  6959. font-size: 14px;
  6960. overflow: hidden;
  6961. width: 100%;
  6962. word-break: break-all;
  6963. white-space: nowrap; */
  6964. cursor: pointer;
  6965. margin: 0px 0px 10px 5px;
  6966. white-space: nowrap;
  6967. overflow: hidden;
  6968. text-overflow: ellipsis;
  6969. width: 100%;
  6970. }
  6971. .vedioTime {
  6972. width: 35px;
  6973. position: absolute;
  6974. color: #fff;
  6975. bottom: 0px;
  6976. right: 0px;
  6977. text-align: center;
  6978. background: #46411f;
  6979. height: 20px;
  6980. font-size: 14px;
  6981. line-height: 20px;
  6982. }
  6983. .homework {
  6984. width: 200px;
  6985. display: flex;
  6986. flex-direction: column;
  6987. flex-wrap: nowrap;
  6988. align-items: center;
  6989. cursor: pointer;
  6990. }
  6991. .homebox {
  6992. display: flex;
  6993. flex-wrap: wrap;
  6994. flex-direction: row;
  6995. justify-content: flex-start;
  6996. align-items: center;
  6997. padding: 15px 0;
  6998. }
  6999. .isChooseActive {
  7000. color: #5c549f;
  7001. border-bottom: 2px solid #5c549f;
  7002. }
  7003. .chooseWho {
  7004. display: flex;
  7005. width: 100%;
  7006. flex-direction: row;
  7007. flex-wrap: nowrap;
  7008. justify-content: flex-start;
  7009. padding-bottom: 10px;
  7010. }
  7011. .chooseWho>div {
  7012. cursor: pointer;
  7013. padding-bottom: 10px;
  7014. margin: 0 30px;
  7015. }
  7016. .addPoint>div>img {
  7017. cursor: pointer;
  7018. margin: 0 10px;
  7019. width: 85px;
  7020. border-radius: 15px;
  7021. box-shadow: 0px 1px 8px 0px rgb(20 20 20 / 14%);
  7022. }
  7023. .addPoint>div {
  7024. display: flex;
  7025. flex-direction: column;
  7026. flex-wrap: nowrap;
  7027. align-items: center;
  7028. }
  7029. .isBorder>div {
  7030. margin: 0 0 10px 0;
  7031. align-items: flex-start !important;
  7032. }
  7033. .noiframeBox {
  7034. display: flex;
  7035. flex-wrap: wrap;
  7036. }
  7037. .iframeBox iframe {
  7038. width: 100%;
  7039. height: 800px;
  7040. border: none;
  7041. margin-bottom: 20px;
  7042. border: 1px solid #ccc;
  7043. }
  7044. .upload_toolBtn {
  7045. background: #6b92c9;
  7046. color: #fff;
  7047. width: 110px;
  7048. text-align: center;
  7049. height: 35px;
  7050. line-height: 35px;
  7051. font-size: 14px;
  7052. border-radius: 5px;
  7053. cursor: pointer;
  7054. position: absolute;
  7055. right: 10px;
  7056. bottom: 0;
  7057. }
  7058. .binfo_input,
  7059. .pj {
  7060. font: inherit;
  7061. color: currentColor;
  7062. width: 100%;
  7063. margin: 0;
  7064. padding: 15px 14px;
  7065. display: block;
  7066. min-width: 0;
  7067. outline: none;
  7068. box-sizing: content-box;
  7069. background: none;
  7070. -webkit-tap-highlight-color: transparent;
  7071. border: 1px solid rgba(0, 0, 0, 0.23);
  7072. border-radius: 4px;
  7073. box-sizing: border-box;
  7074. resize: none;
  7075. }
  7076. .binfo_input:focus-visible {
  7077. border: 1px solid rgba(61, 103, 188);
  7078. }
  7079. .dialog_diy>>>.el-dialog__header,
  7080. .dialog_diy1>>>.el-dialog__header {
  7081. background: #454545 !important;
  7082. padding: 15px 20px;
  7083. }
  7084. .dialog_diy>>>.el-dialog__title,
  7085. .dialog_diy1>>>.el-dialog__title {
  7086. color: #fff;
  7087. }
  7088. .dialog_diy>>>.el-dialog__headerbtn,
  7089. .dialog_diy1>>>.el-dialog__headerbtn {
  7090. top: 19px;
  7091. }
  7092. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close,
  7093. .dialog_diy1>>>.el-dialog__headerbtn .el-dialog__close {
  7094. color: #fff;
  7095. }
  7096. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover,
  7097. .dialog_diy1>>>.el-dialog__headerbtn .el-dialog__close:hover {
  7098. color: #fff;
  7099. }
  7100. .dialog_diy1>>>.el-dialog__body {
  7101. padding: 0;
  7102. }
  7103. .dialog_diy>>>.el-dialog__body,
  7104. .dialog_diy>>>.el-dialog__footer,
  7105. .dialog_diy1>>>.el-dialog__footer {
  7106. background: #fafafa;
  7107. }
  7108. .a_addBox {
  7109. margin: 10px 0;
  7110. background: #fff;
  7111. padding: 15px;
  7112. max-height: 400px;
  7113. overflow: auto;
  7114. }
  7115. .a_add_box {
  7116. border-bottom: 2px solid #eee;
  7117. padding-bottom: 10px;
  7118. }
  7119. .a_add_head {
  7120. display: flex;
  7121. align-items: flex-start;
  7122. /* justify-content: space-between; */
  7123. flex-direction: column;
  7124. margin: 10px 0;
  7125. font-size: 18px;
  7126. width: 100%;
  7127. }
  7128. .a_add_head .a_add_head_input {
  7129. width: 300px;
  7130. }
  7131. .a_add_head .a_add_head_div {
  7132. display: flex;
  7133. align-items: center;
  7134. justify-content: space-between;
  7135. }
  7136. .a_add_body {
  7137. display: flex;
  7138. align-items: center;
  7139. }
  7140. .a_add_input {
  7141. display: flex;
  7142. align-items: center;
  7143. flex-wrap: wrap;
  7144. }
  7145. .a_add_input>>>el-radio-group {
  7146. margin: 10px 0;
  7147. }
  7148. .a_add_input>>>.el-radio {
  7149. margin-bottom: 10px;
  7150. }
  7151. .redioStyle>>>.el-radio__label {
  7152. font-size: 18px;
  7153. }
  7154. .redioStyle>>>.el-checkbox__label {
  7155. font-size: 18px;
  7156. }
  7157. .toolHeng2 {
  7158. width: 100%;
  7159. }
  7160. .toolHeng {
  7161. display: flex;
  7162. flex-direction: row;
  7163. flex-wrap: wrap;
  7164. justify-content: flex-start;
  7165. align-items: center;
  7166. width: 100%;
  7167. }
  7168. .toolHeng>div {
  7169. padding-left: 20px;
  7170. }
  7171. .isWidth {
  7172. width: 20%;
  7173. }
  7174. .textTitle {
  7175. display: flex;
  7176. flex-direction: row;
  7177. flex-wrap: nowrap;
  7178. align-items: center;
  7179. width: 95%;
  7180. }
  7181. .textTitle>>>.el-form-item__label {
  7182. font-size: 22px;
  7183. color: #918f8f;
  7184. width: 100px;
  7185. }
  7186. .textTitle>>>.el-form-item__content {
  7187. width: calc(100% - 100px);
  7188. }
  7189. .textCss>>>.el-dialog {
  7190. width: 800px !important;
  7191. height: 400px;
  7192. background: #fafafa;
  7193. }
  7194. .textCss>>>.el-dialog__body {
  7195. margin: 55px 8% 0 8%;
  7196. padding: 0 !important;
  7197. }
  7198. .textCss>>>.el-dialog__footer {
  7199. padding-top: 38px;
  7200. }
  7201. .toolsCss>>>.el-dialog__body {
  7202. padding: 20px;
  7203. }
  7204. .lineCss>>>.el-dialog__body {
  7205. display: flex;
  7206. flex-direction: row;
  7207. align-items: center;
  7208. justify-content: center;
  7209. }
  7210. .newNav {
  7211. display: flex;
  7212. flex-direction: row;
  7213. align-items: baseline;
  7214. justify-content: flex-start;
  7215. }
  7216. .navText {
  7217. cursor: pointer;
  7218. margin: 0px 0px 10px 5px;
  7219. white-space: nowrap;
  7220. overflow: hidden;
  7221. text-overflow: ellipsis;
  7222. /* width: 300px; */
  7223. width: 100%;
  7224. }
  7225. .noVedio {
  7226. display: flex;
  7227. flex-direction: row;
  7228. justify-content: center;
  7229. align-content: center;
  7230. }
  7231. .noNavText {
  7232. cursor: pointer;
  7233. margin: 0px 0px 10px 5px;
  7234. width: 112px;
  7235. }
  7236. .listNoVedio {
  7237. margin: 0 0 0 30px;
  7238. width: 97%;
  7239. }
  7240. .video-player>>>.video-js {
  7241. height: 100%;
  7242. }
  7243. .hangVedioList {
  7244. width: 90% !important;
  7245. height: 150px !important;
  7246. margin: 20px 0 0 30px;
  7247. }
  7248. .hangVedio {
  7249. width: 100%;
  7250. height: 170px !important;
  7251. align-items: flex-start !important;
  7252. }
  7253. .hangHand {
  7254. height: 150px !important;
  7255. }
  7256. .twoChild {
  7257. width: 95%;
  7258. margin: 10px;
  7259. border-radius: 5px;
  7260. background: #f2f2f2;
  7261. display: flex;
  7262. flex-direction: column;
  7263. flex-wrap: nowrap;
  7264. justify-content: flex-start;
  7265. align-items: flex-start;
  7266. transition: all 0.5s;
  7267. overflow: hidden;
  7268. height: 0;
  7269. background: #e7f3ff;
  7270. }
  7271. .twoChild>div:nth-child(1) {
  7272. margin-top: 5px;
  7273. }
  7274. .navChild {
  7275. width: 100%;
  7276. cursor: pointer;
  7277. margin-bottom: 10px;
  7278. position: relative;
  7279. }
  7280. .navChild img {
  7281. position: absolute;
  7282. right: 11px;
  7283. width: 15px;
  7284. top: 50%;
  7285. transform: translateY(-50%);
  7286. }
  7287. .navActive {
  7288. height: auto;
  7289. }
  7290. .navTask {
  7291. display: flex;
  7292. flex-direction: row;
  7293. flex-wrap: nowrap;
  7294. align-items: center;
  7295. align-content: flex-start;
  7296. height: 40px;
  7297. justify-content: flex-start;
  7298. padding: 0 10px;
  7299. width: 100%;
  7300. box-sizing: border-box;
  7301. }
  7302. .navTaskname {
  7303. white-space: nowrap;
  7304. text-overflow: ellipsis;
  7305. overflow: hidden;
  7306. word-break: break-all;
  7307. padding-left: 5px;
  7308. }
  7309. .openTaskActive {
  7310. color: #947edc;
  7311. }
  7312. .iframeName {
  7313. margin: 5px 0;
  7314. border-left: 4px solid #41c4a4;
  7315. padding-left: 4px;
  7316. }
  7317. .toolTitle {
  7318. margin: 0px 0px 20px;
  7319. font-size: 20px;
  7320. font-weight: 500;
  7321. border-left: 4px solid #41c4a4;
  7322. padding-left: 4px;
  7323. }
  7324. .cru_selectBox {
  7325. overflow: auto;
  7326. width: 96%;
  7327. margin: 0 auto;
  7328. height: calc(100% - 40px - 21px - 20px);
  7329. }
  7330. .cru_selectBox::-webkit-scrollbar,
  7331. .study_top::-webkit-scrollbar,
  7332. .textContent::-webkit-scrollbar {
  7333. /*滚动条整体样式*/
  7334. width: 6px;
  7335. /*高宽分别对应横竖滚动条的尺寸*/
  7336. height: 6px;
  7337. }
  7338. /*定义滚动条轨道 内阴影+圆角*/
  7339. .cru_selectBox::-webkit-scrollbar-track,
  7340. .study_top::-webkit-scrollbar-track,
  7341. .textContent::-webkit-scrollbar {
  7342. border-radius: 10px;
  7343. background-color: #b8bdc9;
  7344. }
  7345. /*定义滑块 内阴影+圆角*/
  7346. .cru_selectBox::-webkit-scrollbar-thumb,
  7347. .study_top::-webkit-scrollbar-thumb,
  7348. .textContent::-webkit-scrollbar-thumb {
  7349. border-radius: 10px;
  7350. -webkit-box-shadow: inset 0 0 6px rgb(96, 125, 184);
  7351. background-color: #2c5ab3;
  7352. }
  7353. .vedioBox {
  7354. border-radius: 20px;
  7355. background: #fff;
  7356. margin-bottom: 10px;
  7357. }
  7358. .taskBox {
  7359. margin: 15px auto 20px;
  7360. background: #f7f7f7;
  7361. width: 97%;
  7362. border-radius: 10px;
  7363. }
  7364. .vedioTaskBox {
  7365. width: 100%;
  7366. display: flex;
  7367. flex-direction: row;
  7368. flex-wrap: nowrap;
  7369. align-items: center;
  7370. }
  7371. .toolBox {
  7372. padding: 20px 0 0 0;
  7373. display: flex;
  7374. }
  7375. .btnAll {
  7376. position: absolute;
  7377. right: 0;
  7378. display: flex;
  7379. flex-direction: row;
  7380. flex-wrap: nowrap;
  7381. align-items: center;
  7382. }
  7383. .vedioTimeBox {
  7384. display: flex;
  7385. flex-direction: row;
  7386. align-items: center;
  7387. flex-wrap: nowrap;
  7388. position: relative;
  7389. }
  7390. .navBox {
  7391. background: rgb(255, 255, 255);
  7392. height: 400px;
  7393. padding: 5px 1px 0 1px;
  7394. overflow: auto;
  7395. }
  7396. .worksBox {
  7397. padding: 5px 0 0 10px;
  7398. border-bottom: 1px solid #eeeeee;
  7399. }
  7400. .worksBTitle {
  7401. font-size: 20px;
  7402. padding-bottom: 15px;
  7403. border-bottom: 1px solid #eeeeee;
  7404. display: flex;
  7405. align-items: center;
  7406. }
  7407. .greenBox {
  7408. width: 5px;
  7409. height: 30px;
  7410. background: #63b6fa;
  7411. margin-right: 5px;
  7412. }
  7413. .worksDetailBox {
  7414. display: flex;
  7415. width: 100%;
  7416. flex-direction: row;
  7417. flex-wrap: wrap;
  7418. align-items: center;
  7419. justify-content: flex-start;
  7420. padding: 15px 0;
  7421. }
  7422. .works {
  7423. display: flex;
  7424. flex-direction: column;
  7425. flex-wrap: nowrap;
  7426. align-items: flex-start;
  7427. justify-content: flex-start;
  7428. align-content: center;
  7429. max-width: 240px;
  7430. width: calc(100% / 3 - 10px);
  7431. height: auto;
  7432. margin-right: 10px;
  7433. margin-bottom: 10px;
  7434. overflow: hidden;
  7435. height: 140px;
  7436. box-shadow: 0 0 6px 1px #dfdada;
  7437. border-radius: 15px;
  7438. }
  7439. .workImg {
  7440. width: 100%;
  7441. /* height: calc(100% - 40px); */
  7442. height: 105px;
  7443. position: relative;
  7444. }
  7445. .workImg>img {
  7446. width: 100%;
  7447. height: 100%;
  7448. object-fit: contain;
  7449. }
  7450. .worksName {
  7451. height: 40px;
  7452. line-height: 40px;
  7453. display: flex;
  7454. width: 92%;
  7455. flex-direction: row;
  7456. flex-wrap: nowrap;
  7457. justify-content: space-between;
  7458. align-items: center;
  7459. margin: 0 10px;
  7460. }
  7461. .worksName>div:nth-child(1) {
  7462. width: 48px;
  7463. white-space: nowrap;
  7464. overflow: hidden;
  7465. text-overflow: ellipsis;
  7466. }
  7467. .worksName>div:nth-child(2) {
  7468. color: #b7b4b5;
  7469. }
  7470. .noWorksS {
  7471. padding: 15px 0;
  7472. display: flex;
  7473. flex-direction: row;
  7474. flex-wrap: wrap;
  7475. align-items: center;
  7476. justify-content: flex-start;
  7477. }
  7478. .noWorksName,
  7479. .isWorksName {
  7480. background: #967cdf;
  7481. color: #fff;
  7482. width: 90px;
  7483. height: 25px;
  7484. text-align: center;
  7485. line-height: 25px;
  7486. border-radius: 5px;
  7487. margin: 10px 15px 10px 0;
  7488. white-space: nowrap;
  7489. overflow: hidden;
  7490. padding: 5px;
  7491. text-overflow: ellipsis;
  7492. }
  7493. .isWorksName {
  7494. cursor: pointer;
  7495. background: #967cdf !important;
  7496. width: 100px;
  7497. height: 40px;
  7498. line-height: 40px;
  7499. position: relative;
  7500. }
  7501. .noWorksName:hover {
  7502. background: #8363dc !important;
  7503. }
  7504. .title {
  7505. background: #74679c;
  7506. /* width: 98%; */
  7507. height: 45px;
  7508. color: #fff;
  7509. line-height: 45px;
  7510. padding-left: 20px;
  7511. box-sizing: border-box;
  7512. }
  7513. .textBox {
  7514. font-size: 20px;
  7515. width: 90%;
  7516. display: flex;
  7517. flex-direction: column;
  7518. align-items: center;
  7519. margin: 20px auto 0;
  7520. }
  7521. .textContent {
  7522. font-size: 18px;
  7523. height: 450px;
  7524. width: 95%;
  7525. overflow: auto;
  7526. line-height: 30px;
  7527. }
  7528. .answerBg {
  7529. background: url("../../assets/icon/answerBgNew.png") no-repeat;
  7530. background-size: 100% 100%;
  7531. width: 100%;
  7532. height: 100%;
  7533. color: #fff;
  7534. text-align: center;
  7535. display: flex;
  7536. flex-direction: column;
  7537. flex-wrap: nowrap;
  7538. align-items: center;
  7539. position: relative;
  7540. justify-content: center;
  7541. }
  7542. .answerBg>div:nth-child(1) {
  7543. /* font-size: 22px;
  7544. padding: 25px 0 10px; */
  7545. }
  7546. .answerContent {
  7547. width: 215px;
  7548. max-height: 60px;
  7549. word-break: break-all;
  7550. text-align: center;
  7551. /* white-space: nowrap; */
  7552. overflow: hidden;
  7553. text-overflow: ellipsis;
  7554. /* padding: 23px 0 0; */
  7555. -webkit-line-clamp: 3;
  7556. -webkit-box-orient: vertical;
  7557. display: -webkit-box;
  7558. font-size: 15px;
  7559. }
  7560. .elist_input_box {
  7561. display: flex;
  7562. align-items: flex-start;
  7563. flex-wrap: nowrap;
  7564. padding: 10px 0 15px 30px;
  7565. flex-direction: column;
  7566. }
  7567. .elist_input {
  7568. /* width: 40%; */
  7569. width: 100%;
  7570. }
  7571. .elist_input .elist_input_box input {
  7572. font: inherit;
  7573. color: currentColor;
  7574. width: 200px;
  7575. padding: 8px 14px;
  7576. display: block;
  7577. min-width: 0;
  7578. outline: none;
  7579. border: 1px solid rgba(0, 0, 0, 0.23);
  7580. border-radius: 4px;
  7581. box-sizing: border-box;
  7582. background: #fff;
  7583. margin: 0 20px 0 0;
  7584. }
  7585. .elist_input .elist_input_box span {
  7586. height: 36px;
  7587. line-height: 36px;
  7588. color: rgb(82, 82, 82);
  7589. }
  7590. .elist_input .elist_input_box .remove {
  7591. height: 20px;
  7592. width: 20px;
  7593. background-size: 100% 100%;
  7594. background-position: unset;
  7595. margin-left: 5px;
  7596. }
  7597. .elist_input_box>>>.el-rate {
  7598. display: flex;
  7599. height: 36px;
  7600. align-items: center;
  7601. }
  7602. .elist_input_box .elist_inptu_text {
  7603. min-height: 50px;
  7604. /* width: 500px;
  7605. max-height: 150px; */
  7606. width: 100%;
  7607. line-height: 50px;
  7608. color: rgb(82, 82, 82);
  7609. overflow: auto;
  7610. text-indent: 5px;
  7611. background: #f7f6f9;
  7612. border-radius: 10px;
  7613. }
  7614. .elist_input_box .elist_inptu_text input {
  7615. width: 500px;
  7616. }
  7617. .elist_input_box>>>.el-rate__icon {
  7618. font-size: 24px;
  7619. }
  7620. .isClick {
  7621. background: #947edc;
  7622. }
  7623. .bzBox {
  7624. display: flex;
  7625. flex-direction: row;
  7626. align-items: center;
  7627. }
  7628. .bzBox>div:nth-child(1) {
  7629. width: 4px;
  7630. height: 40px;
  7631. background-image: linear-gradient(180deg, #2c5cbd, #a1cff4);
  7632. }
  7633. .bzBox>div:nth-child(2) {
  7634. font-size: 23px;
  7635. font-weight: bold;
  7636. padding: 0px 0px 0 10px;
  7637. }
  7638. .navTitile {
  7639. padding: 0 0px 0 15px;
  7640. background: #74679c;
  7641. color: #fff;
  7642. height: 40px;
  7643. line-height: 40px;
  7644. border-top-left-radius: 10px;
  7645. border-top-right-radius: 10px;
  7646. }
  7647. .isTypeOne {
  7648. width: 240px;
  7649. height: 170px;
  7650. /* border: 1px solid #f8f8f8; */
  7651. border-radius: 10px;
  7652. box-shadow: 0 0 6px 1px #dfdada;
  7653. }
  7654. .e_add_top {
  7655. display: flex;
  7656. justify-content: space-between;
  7657. padding: 20px 20px 0 20px;
  7658. border-radius: 3px;
  7659. background: #fff;
  7660. }
  7661. .e_add_title2 {
  7662. display: flex;
  7663. align-items: center;
  7664. }
  7665. .e_add_title2 span {
  7666. width: 40px;
  7667. }
  7668. .e_add_title {
  7669. display: flex;
  7670. align-items: center;
  7671. color: #b8b8b8;
  7672. font-size: 18px;
  7673. position: relative;
  7674. height: 40px;
  7675. }
  7676. .e_add_title span {
  7677. margin-right: 10px;
  7678. }
  7679. .e_add_title .el_input {
  7680. width: 300px;
  7681. }
  7682. .e_add_title>>>.el-input__inner {
  7683. width: 400px;
  7684. }
  7685. .e_add_btn {}
  7686. .e_add_content {
  7687. display: flex;
  7688. width: 100%;
  7689. max-width: 650px;
  7690. height: 550px;
  7691. }
  7692. .e_add_list {
  7693. background: #fff;
  7694. height: 500px;
  7695. width: 210px;
  7696. position: relative;
  7697. margin: 15px 5px 0 0;
  7698. flex-shrink: 0;
  7699. display: flex;
  7700. flex-direction: column;
  7701. }
  7702. .e_add_list_title {
  7703. font-size: 20px;
  7704. width: 100%;
  7705. box-sizing: border-box;
  7706. padding: 15px 40px;
  7707. text-align: center;
  7708. border-bottom: 1px solid #eaeaea;
  7709. position: relative;
  7710. display: flex;
  7711. align-items: center;
  7712. justify-content: center;
  7713. height: 57px;
  7714. background: #f6f6f6;
  7715. }
  7716. .e_add_list_title span {
  7717. overflow: hidden;
  7718. white-space: nowrap;
  7719. text-overflow: ellipsis;
  7720. }
  7721. .e_add_list_title img {
  7722. position: absolute;
  7723. right: 15px;
  7724. width: 25px;
  7725. cursor: pointer;
  7726. top: 50%;
  7727. transform: translateY(-50%);
  7728. }
  7729. .e_add_list_body {
  7730. height: calc(100% - 187px);
  7731. overflow: auto;
  7732. }
  7733. .e_add_list_child {
  7734. width: 100%;
  7735. display: flex;
  7736. align-items: center;
  7737. justify-content: center;
  7738. position: relative;
  7739. box-sizing: border-box;
  7740. padding: 15px 40px;
  7741. text-align: center;
  7742. }
  7743. .e_add_list_child span {
  7744. overflow: hidden;
  7745. white-space: nowrap;
  7746. text-overflow: ellipsis;
  7747. cursor: pointer;
  7748. }
  7749. .e_add_list_child img {
  7750. position: absolute;
  7751. right: 10px;
  7752. width: 21px;
  7753. cursor: pointer;
  7754. top: 50%;
  7755. transform: translateY(-50%);
  7756. }
  7757. .e_add_list_child+.e_add_list_child {
  7758. border-top: 1px solid #eaeaea;
  7759. }
  7760. .e_add_list_child .active {
  7761. color: #409eff;
  7762. }
  7763. .e_add_list_btn {
  7764. position: absolute;
  7765. bottom: 0;
  7766. height: 50px;
  7767. background: rgb(120, 120, 254);
  7768. width: 100%;
  7769. color: #fff;
  7770. font-size: 16px;
  7771. text-align: center;
  7772. line-height: 50px;
  7773. cursor: pointer;
  7774. }
  7775. .e_add_list_detail {
  7776. position: absolute;
  7777. bottom: 0;
  7778. height: 130px;
  7779. background: rgb(120, 120, 254);
  7780. width: 100%;
  7781. color: #fff;
  7782. font-size: 16px;
  7783. display: flex;
  7784. align-items: center;
  7785. justify-content: center;
  7786. }
  7787. .e_add_list_detail textarea {
  7788. height: 90%;
  7789. width: 95%;
  7790. border: none;
  7791. resize: none;
  7792. outline: none;
  7793. padding: 5px;
  7794. box-sizing: border-box;
  7795. }
  7796. .e_add_list_pbox {
  7797. width: 100%;
  7798. max-width: 650px;
  7799. /* height: 600px; */
  7800. }
  7801. .e_add_list_pbox_title {
  7802. height: 50px;
  7803. background: #fff;
  7804. display: flex;
  7805. align-items: center;
  7806. width: 100%;
  7807. box-sizing: border-box;
  7808. padding: 0 20px;
  7809. }
  7810. .type_title {
  7811. font-size: 18px;
  7812. font-weight: 700;
  7813. }
  7814. .type_content {
  7815. font-size: 16px;
  7816. margin-left: 30px;
  7817. }
  7818. .type_content span+span {
  7819. margin-left: 20px;
  7820. }
  7821. .type_content span {
  7822. cursor: pointer;
  7823. padding-bottom: 5px;
  7824. box-sizing: border-box;
  7825. }
  7826. .type_content .active {
  7827. color: #5c549f;
  7828. border-bottom: 2px solid #5c549f;
  7829. }
  7830. .e_add_list_pbox_content {
  7831. height: calc(100% - 50px);
  7832. display: flex;
  7833. align-items: center;
  7834. width: 100%;
  7835. background: #fff;
  7836. }
  7837. .evaCss {
  7838. display: flex;
  7839. flex-direction: row;
  7840. flex-wrap: nowrap;
  7841. align-items: flex-start;
  7842. }
  7843. .cru_line {
  7844. position: absolute;
  7845. bottom: 0px;
  7846. transition: all 0.5s;
  7847. left: 0px;
  7848. width: 125px;
  7849. margin-left: -25px;
  7850. }
  7851. .isNoMessage {
  7852. width: 20%;
  7853. margin: 25% auto 0;
  7854. }
  7855. .isNoMessage>img {
  7856. width: 100%;
  7857. height: 100%;
  7858. }
  7859. .fullStyle>>>.el-dialog__body {
  7860. height: 100% !important;
  7861. }
  7862. .fullStyle>>>.el-dialog,
  7863. .fullStyle {
  7864. width: 100% !important;
  7865. max-width: 100% !important;
  7866. height: 100% !important;
  7867. margin: 0 !important;
  7868. }
  7869. .full_diy>>>.el-dialog {
  7870. margin: 0 !important;
  7871. height: 100%;
  7872. padding: 4px;
  7873. }
  7874. .full_diy>>>.el-dialog__body {
  7875. height: calc(100% - 100px);
  7876. }
  7877. .full_diy2>>>.el-dialog__body {
  7878. height: calc(100% - 50px);
  7879. padding: 0;
  7880. }
  7881. .switchCss {
  7882. /* width: 100%; */
  7883. display: flex;
  7884. flex-direction: row;
  7885. flex-wrap: nowrap;
  7886. align-items: center;
  7887. /* justify-content: center; */
  7888. }
  7889. .isClickNav {
  7890. color: #947edc;
  7891. }
  7892. .commentImg {
  7893. width: 25px;
  7894. height: 25px;
  7895. cursor: pointer;
  7896. }
  7897. .commentImg>img {
  7898. width: 100%;
  7899. height: 100%;
  7900. }
  7901. .comment {
  7902. background: #f9f9f9;
  7903. border-radius: 0 0 15px 15px;
  7904. display: flex;
  7905. flex-direction: row;
  7906. flex-wrap: nowrap;
  7907. align-items: center;
  7908. justify-content: flex-end;
  7909. height: 35px;
  7910. }
  7911. .commentList {
  7912. display: flex;
  7913. flex-direction: row;
  7914. flex-wrap: nowrap;
  7915. align-items: center;
  7916. justify-content: center;
  7917. align-content: center;
  7918. /* margin-left: 15px; */
  7919. margin-left: 8px;
  7920. }
  7921. .scoreImg {
  7922. width: 17px;
  7923. height: 17px;
  7924. }
  7925. .studentDetail {
  7926. display: flex;
  7927. flex-direction: row;
  7928. flex-wrap: nowrap;
  7929. /* align-items: center; */
  7930. align-items: flex-start;
  7931. }
  7932. .tx {
  7933. width: 50px;
  7934. }
  7935. .tx>img {
  7936. width: 100%;
  7937. height: 100%;
  7938. }
  7939. .nameAndTime {
  7940. display: flex;
  7941. flex-direction: column;
  7942. flex-wrap: nowrap;
  7943. align-items: flex-start;
  7944. margin-left: 10px;
  7945. }
  7946. .worksAnswer {
  7947. color: #4078dd;
  7948. margin: 10px 0;
  7949. font-size: 16px;
  7950. }
  7951. .worksAnswer>img {
  7952. width: 500px;
  7953. height: 300px;
  7954. object-fit: contain;
  7955. margin: 0 auto;
  7956. display: block;
  7957. }
  7958. .commentTop {
  7959. border-bottom: 1px solid #eaeaea;
  7960. padding-bottom: 10px;
  7961. }
  7962. .commentBox {
  7963. padding-top: 15px;
  7964. }
  7965. .pl {
  7966. font-size: 18px;
  7967. }
  7968. .plName {
  7969. display: flex;
  7970. flex-direction: row;
  7971. flex-wrap: nowrap;
  7972. align-items: baseline;
  7973. color: #78787a;
  7974. }
  7975. .evalCss {
  7976. background: #fff;
  7977. font-size: 18px;
  7978. }
  7979. .nav {
  7980. color: #9d9d9d;
  7981. padding: 5px 0 15px 20px;
  7982. }
  7983. .middleBox {
  7984. padding: 5px 0 15px 20px;
  7985. }
  7986. .pfBox {
  7987. padding-bottom: 30px;
  7988. }
  7989. .nameAndrate {
  7990. display: flex;
  7991. flex-direction: row;
  7992. flex-wrap: nowrap;
  7993. align-items: center;
  7994. padding-bottom: 10px;
  7995. }
  7996. .nameAndrate>div {
  7997. margin-left: 10px;
  7998. color: #000;
  7999. }
  8000. .pfBox>div:nth-child(2) {
  8001. background: #f7f6f9;
  8002. width: 400px;
  8003. min-height: 45px;
  8004. border-radius: 10px;
  8005. font-size: 16px;
  8006. display: flex;
  8007. flex-wrap: wrap;
  8008. align-items: center;
  8009. padding: 10px 20px;
  8010. box-sizing: border-box;
  8011. color: #000;
  8012. }
  8013. .bz {
  8014. display: flex;
  8015. flex-direction: row;
  8016. flex-wrap: nowrap;
  8017. align-items: flex-start;
  8018. }
  8019. .bz>div {
  8020. padding: 0 10px;
  8021. }
  8022. .select_box2_title {
  8023. background: #fff;
  8024. border-radius: 5px;
  8025. padding: 15px 10px;
  8026. box-sizing: border-box;
  8027. margin-bottom: 10px;
  8028. display: flex;
  8029. flex-direction: row;
  8030. flex-wrap: nowrap;
  8031. align-items: center;
  8032. }
  8033. .select_box2_title>div:nth-child(2) {
  8034. margin-left: 10px;
  8035. color: #c4c4c4;
  8036. }
  8037. .select_box2_box {
  8038. display: flex;
  8039. height: 500px;
  8040. }
  8041. .select_box2_img {
  8042. width: calc(100% - 310px);
  8043. height: 100%;
  8044. overflow: auto;
  8045. background: #fff;
  8046. border-radius: 5px;
  8047. }
  8048. .select_box2_img img {
  8049. width: 100%;
  8050. }
  8051. .select_box2_answer {
  8052. background: #fff;
  8053. margin-left: 10px;
  8054. border-radius: 5px;
  8055. width: 300px;
  8056. overflow: auto;
  8057. height: 90%;
  8058. display: flex;
  8059. flex-direction: column;
  8060. align-items: flex-start;
  8061. padding-top: 10px;
  8062. box-sizing: border-box;
  8063. position: relative;
  8064. }
  8065. .select_answer_title {
  8066. padding: 0 0 15px 20px;
  8067. color: #c4c4c4;
  8068. }
  8069. .select_box2_answer_box {
  8070. margin: 0 0 10px 20px;
  8071. width: 85%;
  8072. display: flex;
  8073. flex-direction: row;
  8074. flex-wrap: nowrap;
  8075. align-items: center;
  8076. }
  8077. .select_box2_answer_box>>>.el-input.is-disabled .el-input__inner {
  8078. color: #000;
  8079. }
  8080. .upAnswerCss {
  8081. position: absolute;
  8082. bottom: 15px;
  8083. right: 15px;
  8084. }
  8085. .upAnswerCss>>>.el-button {
  8086. width: 95px;
  8087. height: 35px;
  8088. line-height: 35px;
  8089. padding: 0;
  8090. }
  8091. .rightWidthCss {
  8092. width: 60%;
  8093. display: flex;
  8094. flex-direction: row;
  8095. align-items: flex-start;
  8096. }
  8097. .rightAnswer {
  8098. display: flex;
  8099. flex-direction: row;
  8100. flex-wrap: nowrap;
  8101. align-items: center;
  8102. color: red;
  8103. margin-bottom: 31px;
  8104. }
  8105. .rightAnswerCss {
  8106. display: flex;
  8107. flex-direction: column;
  8108. flex-wrap: nowrap;
  8109. padding-top: 60px;
  8110. }
  8111. .blueCss {
  8112. color: #767de1;
  8113. margin-left: 10px;
  8114. }
  8115. .redCss {
  8116. color: red;
  8117. }
  8118. .redioStyle>>>.el-radio__input.is-checked+.el-radio__label {
  8119. color: rgb(0 123 255) !important;
  8120. }
  8121. .redioStyle>>>.el-checkbox__input.is-checked+.el-checkbox__label {
  8122. color: rgb(0 123 255) !important;
  8123. }
  8124. .zuoyeYulan {
  8125. padding-top: 15px;
  8126. font-size: 18px;
  8127. display: flex;
  8128. align-items: flex-end;
  8129. }
  8130. .buttonA {
  8131. margin-left: 10px;
  8132. padding: 0;
  8133. color: #8681b7;
  8134. }
  8135. .displayBox {
  8136. margin-bottom: 10px;
  8137. display: block;
  8138. border-bottom: 3px solid #eee;
  8139. display: flex;
  8140. align-items: center;
  8141. }
  8142. .easy_comment {
  8143. width: calc(100% - 90px);
  8144. margin-left: 10px;
  8145. display: flex;
  8146. flex-wrap: wrap;
  8147. }
  8148. .easy_comment>div {
  8149. border: 1px solid #4a4a4a;
  8150. color: #666;
  8151. border-radius: 15px;
  8152. padding: 5px 10px;
  8153. font-size: 16px;
  8154. margin-bottom: 10px;
  8155. margin-right: 5px;
  8156. cursor: pointer;
  8157. }
  8158. .easy_comment div:hover {
  8159. border: 1px solid #f7ba2a;
  8160. color: #c69217;
  8161. }
  8162. .xuan_right_box {
  8163. padding: 10px;
  8164. background: rgb(247, 247, 247);
  8165. margin: 10px 12px;
  8166. border-radius: 5px;
  8167. }
  8168. .tool_right_box {
  8169. display: flex;
  8170. align-items: center;
  8171. }
  8172. .tool_right_box+.tool_right_box {
  8173. margin-top: 10px;
  8174. }
  8175. .right_box_xuan {
  8176. background: rgb(0 123 255);
  8177. color: #fff;
  8178. border-radius: 5px;
  8179. padding: 5px;
  8180. margin-left: 10px;
  8181. }
  8182. .pButton {
  8183. position: fixed;
  8184. /* right: 5%; */
  8185. /* bottom: 5%; */
  8186. color: #fff;
  8187. /* width: 50px;
  8188. height: 50px; */
  8189. /* border-radius: 50%; */
  8190. text-align: center;
  8191. /* line-height: 50px; */
  8192. /* background-image: -webkit-linear-gradient(left, #72aaf4, #4d81d5); */
  8193. cursor: pointer;
  8194. z-index: 999;
  8195. right: 0;
  8196. top: 83px;
  8197. width: 50px;
  8198. height: 50px;
  8199. background: #fff;
  8200. display: flex;
  8201. align-items: center;
  8202. justify-content: center;
  8203. box-shadow: 0px 0 8px 0px #c5c5c5;
  8204. }
  8205. .pzClass {
  8206. width: calc(100% - 340px);
  8207. }
  8208. .newDialogCss {
  8209. /* position: fixed;
  8210. right: 5%;
  8211. top: 50%;
  8212. width: 340px;
  8213. transform: translateY(-50%);
  8214. height: 60%;
  8215. box-shadow: 0px 0 8px 0px #555555;
  8216. border-radius: 15px;
  8217. z-index: 999; */
  8218. position: fixed;
  8219. right: 0;
  8220. top: 70px;
  8221. width: 340px;
  8222. height: calc(100% - 80px);
  8223. z-index: 999;
  8224. background: #fff;
  8225. border-radius: 15px;
  8226. border-top-right-radius: 0px;
  8227. border-bottom-right-radius: 0px;
  8228. overflow: hidden;
  8229. }
  8230. .pzTop {
  8231. color: #fff;
  8232. background: #000;
  8233. display: flex;
  8234. flex-direction: row;
  8235. flex-wrap: nowrap;
  8236. align-items: center;
  8237. justify-content: space-between;
  8238. height: 40px;
  8239. border-radius: 15px 15px 0 0;
  8240. }
  8241. .pzTop2 .checkbox {
  8242. display: flex;
  8243. align-items: center;
  8244. padding: 15px 30px;
  8245. flex: 0 0 auto;
  8246. font-weight: bold;
  8247. border-bottom: 1px solid #eee;
  8248. justify-content: space-between;
  8249. }
  8250. .pzTop2 .check {
  8251. text-align: center;
  8252. cursor: pointer;
  8253. box-sizing: border-box;
  8254. display: flex;
  8255. }
  8256. .pzTop2 img {
  8257. width: 25px;
  8258. cursor: pointer;
  8259. }
  8260. .pzTop>div:nth-child(1) {
  8261. padding-left: 10px;
  8262. }
  8263. .pzTop>div:nth-child(2) {
  8264. width: 15px;
  8265. height: 15px;
  8266. padding-right: 10px;
  8267. cursor: pointer;
  8268. }
  8269. .pzTop>div:nth-child(2)>img {
  8270. width: 100%;
  8271. height: 100%;
  8272. }
  8273. .pzBox,
  8274. .noPzBox {
  8275. height: calc(100% - 60px);
  8276. /* background: #ededed; */
  8277. background: #fff;
  8278. /* border-radius: 0 0 15px 15px; */
  8279. }
  8280. .noPzBox {
  8281. display: flex;
  8282. flex-direction: column;
  8283. flex-wrap: nowrap;
  8284. justify-content: center;
  8285. align-items: center;
  8286. }
  8287. .pzList {
  8288. background: #f7f7f7;
  8289. width: 90%;
  8290. margin: 0 auto 15px;
  8291. border-radius: 5px;
  8292. }
  8293. .pzNavTop {
  8294. display: flex;
  8295. flex-direction: row;
  8296. flex-wrap: nowrap;
  8297. padding: 10px 10px 0 10px;
  8298. align-items: center;
  8299. }
  8300. .pzDelete {
  8301. cursor: pointer;
  8302. margin-left: auto;
  8303. font-size: 14px;
  8304. color: #afafaf;
  8305. }
  8306. .pzNavTop>div:nth-child(1) {
  8307. background: #967cdf;
  8308. width: 35px;
  8309. height: 35px;
  8310. color: #fff;
  8311. text-align: center;
  8312. line-height: 35px;
  8313. border-radius: 50%;
  8314. font-size: 14px;
  8315. }
  8316. .pzNavTop>div:nth-child(2) {
  8317. font-size: 18px;
  8318. color: #959595;
  8319. margin-left: 5px;
  8320. }
  8321. .pzContent {
  8322. padding: 10px;
  8323. word-break: break-word;
  8324. }
  8325. .pzContent audio {
  8326. width: 100%;
  8327. }
  8328. .pzContent audio::-webkit-media-controls-panel {
  8329. background: #fff;
  8330. }
  8331. .pzListBox {
  8332. padding-top: 15px;
  8333. height: calc(100% - 60px);
  8334. overflow: auto;
  8335. }
  8336. .addPzButton {
  8337. position: relative;
  8338. margin-top: 3px;
  8339. width: 100%;
  8340. }
  8341. .addPzButton .img1 {
  8342. position: absolute;
  8343. top: 50%;
  8344. right: 25px;
  8345. transform: translateY(-50%);
  8346. height: 100%;
  8347. display: flex;
  8348. align-items: center;
  8349. }
  8350. .addPzButton .img1 div {
  8351. display: flex;
  8352. }
  8353. .addPzButton .img1 div img {
  8354. width: 28px;
  8355. margin-left: 10px;
  8356. cursor: pointer;
  8357. }
  8358. .addPzButton .img1 div span {
  8359. font-size: 14px;
  8360. margin: 4px 0 0 3px;
  8361. color: #afafaf;
  8362. }
  8363. .addPz {
  8364. background: #8681b7;
  8365. width: 100px;
  8366. color: #fff;
  8367. font-size: 12px;
  8368. height: 30px;
  8369. margin: 0 auto;
  8370. text-align: center;
  8371. line-height: 30px;
  8372. border-radius: 10px;
  8373. cursor: pointer;
  8374. }
  8375. .addDialogCss {
  8376. position: fixed;
  8377. right: 37%;
  8378. top: 50%;
  8379. width: 600px;
  8380. transform: translateY(-50%);
  8381. height: 70%;
  8382. min-height: 450px;
  8383. box-shadow: 0px 0 8px 0px #555555;
  8384. border-radius: 15px;
  8385. z-index: 999;
  8386. }
  8387. .teacherPz {
  8388. display: flex;
  8389. flex-direction: row;
  8390. align-items: center;
  8391. flex-wrap: nowrap;
  8392. }
  8393. .teacherPzImg {
  8394. width: 30px;
  8395. height: 30px;
  8396. }
  8397. .teacherPzImg>img {
  8398. width: 100%;
  8399. height: 100%;
  8400. }
  8401. .addPzBox {
  8402. height: calc(100% - 40px);
  8403. background: #ededed;
  8404. }
  8405. .pzAudioClass {
  8406. margin: 15px 14px;
  8407. background: #fff;
  8408. height: 100%;
  8409. display: flex;
  8410. justify-content: center;
  8411. align-items: center;
  8412. }
  8413. .pzConText {
  8414. width: 95%;
  8415. height: 100%;
  8416. margin: 10px auto 0;
  8417. border: none;
  8418. background: #fff;
  8419. border-radius: 0px;
  8420. }
  8421. .pzConText>>>.text {
  8422. height: calc(100% - 82px);
  8423. }
  8424. .addTextCss {
  8425. background: #8681b7;
  8426. width: 80px;
  8427. height: 30px;
  8428. text-align: center;
  8429. color: #fff;
  8430. line-height: 30px;
  8431. border-radius: 10px;
  8432. margin: 10px auto 0;
  8433. cursor: pointer;
  8434. }
  8435. .pzConText:focus-visible {
  8436. border: none !important;
  8437. }
  8438. .maxWidth {
  8439. width: 1000px;
  8440. }
  8441. .noPz {
  8442. width: 150px;
  8443. margin: 0 auto 20%;
  8444. }
  8445. .noPz>img {
  8446. width: 100%;
  8447. height: 100%;
  8448. }
  8449. .pzList .time {
  8450. text-align: right;
  8451. box-sizing: border-box;
  8452. padding: 0 10px 10px 0px;
  8453. color: #949494;
  8454. font-size: 14px;
  8455. }
  8456. /* table 样式 */
  8457. .cont>>>table {
  8458. border-top: 1px solid #ccc;
  8459. border-left: 1px solid #ccc;
  8460. }
  8461. .cont>>>table td,
  8462. .cont>>>table th {
  8463. border-bottom: 1px solid #ccc;
  8464. border-right: 1px solid #ccc;
  8465. padding: 3px 5px;
  8466. max-width: 0px;
  8467. }
  8468. .cont>>>table th {
  8469. border-bottom: 2px solid #ccc;
  8470. text-align: center;
  8471. }
  8472. /* blockquote 样式 */
  8473. .cont>>>blockquote {
  8474. display: block;
  8475. border-left: 8px solid #d0e5f2;
  8476. padding: 5px 10px;
  8477. margin: 10px 0;
  8478. line-height: 1.4;
  8479. font-size: 100%;
  8480. background-color: #f1f1f1;
  8481. }
  8482. .addPzCheck {
  8483. display: flex;
  8484. flex-direction: row;
  8485. flex-wrap: nowrap;
  8486. padding: 10px 15px 0;
  8487. }
  8488. .addPzCheck span {
  8489. cursor: pointer;
  8490. padding-bottom: 5px;
  8491. font-weight: bold;
  8492. }
  8493. .addPzCheck span+span {
  8494. margin-left: 10px;
  8495. }
  8496. .addPzCheck .isChooseActive {
  8497. color: #5c549f;
  8498. border-bottom: 2px solid #5c549f;
  8499. }
  8500. /* code 样式 */
  8501. .cont>>>code {
  8502. display: inline-block;
  8503. *display: inline;
  8504. *zoom: 1;
  8505. background-color: #f1f1f1;
  8506. border-radius: 3px;
  8507. padding: 3px 5px;
  8508. margin: 0 3px;
  8509. }
  8510. .cont>>>pre code {
  8511. display: block;
  8512. }
  8513. /* ul ol 样式 */
  8514. .cont>>>ul,
  8515. ol {
  8516. margin: 10px 0 10px 20px;
  8517. }
  8518. .scoreBox,
  8519. .scoreDetailBox {
  8520. display: flex;
  8521. align-items: center;
  8522. justify-content: flex-start;
  8523. margin-top: 20px;
  8524. font-size: 18px;
  8525. width: 100%;
  8526. }
  8527. .scoreBox .t,
  8528. .scoreDetailBox .t {
  8529. margin-right: 10px;
  8530. width: 100px;
  8531. text-align: right;
  8532. }
  8533. .scoreDetailBox {
  8534. align-items: flex-start;
  8535. }
  8536. .scoreDetailBox>>>.el-textarea {
  8537. width: calc(100% - 200px);
  8538. }
  8539. .scoreBox>>>.el-input {
  8540. width: 130px;
  8541. font-size: 38px;
  8542. }
  8543. .scoreBox>>>.el-input__inner {
  8544. height: 60px;
  8545. }
  8546. .answerScore {
  8547. position: absolute;
  8548. top: 10px;
  8549. right: 10px;
  8550. background: #0000008f;
  8551. border-radius: 5px;
  8552. padding: 3px 5px;
  8553. font-size: 14px;
  8554. color: #fff;
  8555. cursor: pointer;
  8556. }
  8557. .open_box .switch_box {
  8558. width: 100%;
  8559. margin: 0 auto;
  8560. display: flex;
  8561. justify-content: space-between;
  8562. }
  8563. .open_box .switch_box+.switch_box {
  8564. margin-top: 10px;
  8565. }
  8566. .deleteImg {
  8567. width: 25px !important;
  8568. height: 25px !important;
  8569. cursor: pointer;
  8570. position: absolute;
  8571. top: 10px;
  8572. right: 10px;
  8573. }
  8574. .deleteImg2 {
  8575. width: 15px !important;
  8576. height: 15px !important;
  8577. top: 5px;
  8578. right: 5px;
  8579. }
  8580. .rightW {
  8581. right: 40px;
  8582. }
  8583. .drawPBox {
  8584. display: flex;
  8585. flex-direction: column;
  8586. position: relative;
  8587. }
  8588. .drawPBox span {
  8589. font-size: 18px;
  8590. color: #606266;
  8591. padding-bottom: 10px;
  8592. margin: 10px 0;
  8593. border-bottom: 1px solid #eaeaea;
  8594. }
  8595. .drawPBox img {
  8596. width: 500px;
  8597. height: 300px;
  8598. object-fit: contain;
  8599. cursor: pointer;
  8600. margin: 0 auto;
  8601. }
  8602. </style>