studyStudent.vue 611 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685
  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="btnAllNT">
  5. <!-- <img src="../../assets/icon/learn/screen.png" @click="allScrell" /> -->
  6. <img src="../../assets/icon/learn/last.png" @click="nextOrpreSteps(0)" />
  7. <img src="../../assets/icon/learn/next.png" @click="nextOrpreSteps(1)" />
  8. <img src="../../assets/icon/learn/return.png" @click.stop="goTo(
  9. '/courseDetail?userid=' +
  10. userid +
  11. '&oid=' +
  12. oid +
  13. '&org=' +
  14. org +
  15. '&cid=' +
  16. classId +
  17. '&courseId=' +
  18. id +
  19. '&tType=' +
  20. tType +
  21. '&screenType=' +
  22. screenType
  23. )
  24. " />
  25. </div>
  26. <div class="pButton" style="
  27. left: 0;
  28. background-image: linear-gradient(90deg, #477cd7, #65b9fc);
  29. " v-if="mlDialog == false" @click="setContent2(true)">
  30. <!-- 批 , getCourseDetail()-->
  31. <img src="../../assets/mlBtn.png" style="width: 25px" alt="" />
  32. </div>
  33. <div class="pb_left" v-else>
  34. <!-- <div class="courseTitle">{{ courseDetail.title }}</div> -->
  35. <div class="courseTitle">
  36. <div style="width:calc(100% - 25px)">
  37. <el-tooltip effect="light" :content="courseDetail.title" placement="top">
  38. <div class="ctitle">{{ courseDetail.title }}</div>
  39. </el-tooltip>
  40. <!-- <div class="inviteBox" v-if="tcid && inviteCode">
  41. <div><span>随机码:{{ inviteCode }}</span></div>
  42. </div> -->
  43. </div>
  44. <el-tooltip effect="light" content="收缩" placement="top">
  45. <div class="mlImg" @click="setContent2(false)">
  46. <img src="../../assets/mlBtn.png" alt="" />
  47. </div>
  48. </el-tooltip>
  49. </div>
  50. <div class="ml">目录</div>
  51. <div class="cru_selectBox">
  52. <div v-for="(item, stageIndex) in navList" :key="stageIndex">
  53. <div class="blue_box_one" @click="get(stageIndex)">
  54. <div v-if="courseDetail.state == 1">第{{ stageIndex + 1 }}阶段</div>
  55. <div v-if="courseDetail.state == 2">任务查看</div>
  56. <div>{{ item.dyName }}</div>
  57. </div>
  58. <div class="twoChild" :class="{ navActive: item.isOpen }">
  59. <div class="navChild" v-for="(nav, navIndex) in item.task" :key="navIndex">
  60. <div class="navTask" @click="openTask(stageIndex, navIndex, nav.id)" :class="{
  61. openTaskActive:
  62. navIndex == taskCount &&
  63. nav.id == navId &&
  64. stageIndex == courseType,
  65. }">
  66. <div class="vedioNav" :class="{
  67. isClick:
  68. navIndex == taskCount &&
  69. nav.id == navId &&
  70. stageIndex == courseType,
  71. }" style="margin: 0">
  72. 任务{{ navIndex + 1 }}
  73. </div>
  74. <el-tooltip class="navTaskname item" effect="light" :content="nav.taskName" placement="top">
  75. <div :style="{
  76. width:
  77. IsLookOpen && !nav.isLook
  78. ? 'calc(100% - 75px)'
  79. : 'auto',
  80. }">
  81. {{ nav.taskName }}
  82. </div>
  83. </el-tooltip>
  84. <img src="../../assets/lock.png" v-if="IsLookOpen && !nav.isLook" alt="" />
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <div class="body_student" :class="{ navLeftCss: !mlDialog }">
  92. <div class="new_top" style="
  93. position: fixed;
  94. top: 0;
  95. left: 20.7%;
  96. width: 80%;
  97. z-index: 999;
  98. box-shadow: 0px 9px 0 0 #f2f2f2;
  99. " :class="{ navLeftCss: !mlDialog }">
  100. <div class="courseIndex">
  101. <div v-show="chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].task">
  102. {{ chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].task }}</div>
  103. <!-- <el-tooltip effect="light" :content="chapInfoList[courseType].dyName" placement="top">
  104. <div>{{ chapInfoList[courseType].dyName }}</div>
  105. </el-tooltip> -->
  106. <div>任务{{ taskCount + 1 }}</div>
  107. </div>
  108. <div class="btnAll">
  109. <div class="returnBtn" @click="nextOrpreSteps(0)">上一步</div>
  110. <div class="returnBtn" @click="nextOrpreSteps(1)">下一步</div>
  111. <div class="returnBtn" @click="refreshCourse">刷新</div>
  112. <div class="returnBtn" @click="setPz" v-if="tType == 1">评论</div>
  113. <!-- <div class="returnBtn" @click="allScrell">全屏</div> -->
  114. <!-- <div class="returnBtn" @click="startRecording" v-if="!videoStart && (tType == 1 || tType == 4)">
  115. 开始录制
  116. </div>
  117. <div class="returnBtn" @click="stopRecording" v-else-if="tType == 1 || tType == 4"
  118. style="background: #ee5255">
  119. 下载录制
  120. </div>
  121. <div class="returnBtn" @click="juriVisible = true" v-if="tType == 1">
  122. 权限
  123. </div> -->
  124. <div class="returnBtn" style="background: #225bc7" @click.stop="goTo(
  125. '/courseDetail?userid=' +
  126. userid +
  127. '&oid=' +
  128. oid +
  129. '&org=' +
  130. org +
  131. '&cid=' +
  132. classId +
  133. '&courseId=' +
  134. id +
  135. '&tType=' +
  136. tType +
  137. '&screenType=' +
  138. screenType
  139. )
  140. ">
  141. 返回
  142. </div>
  143. </div>
  144. </div>
  145. <!-- v-for="(task, index) in chapInfoList[courseType].chapterInfo[0]
  146. .taskJson"
  147. :key="index"-->
  148. <!-- <div class="isNoMessage" v-if="chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  149. .chapterData.length == 0 &&
  150. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  151. .toolChoose[0].tool.length == 0 &&
  152. chapInfoList[courseType].chapterInfo[0].video.length == 0 &&
  153. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  154. .taskDetail == '' &&
  155. !chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].eList
  156. ">
  157. <img src="../../assets/icon/isNoMessage.png" alt />
  158. </div> -->
  159. <div class="study_top" :class="{ pzClass: pzDialog }">
  160. <div class="vedioBox" v-if="chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  161. .taskDetail != '' ||
  162. vChapterData[taskCount].length > 0 || fileC[taskCount].length > 0
  163. ">
  164. <!-- <div class="checkbox">
  165. <div class="check" style="font-size: 25px" :id="chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].id
  166. ">
  167. 学一学
  168. </div>
  169. </div> -->
  170. <div class="student_head" v-if="vChapterData[taskCount].length > 0 || fileC[taskCount].length > 0 ||
  171. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  172. .taskDetail != ''
  173. ">
  174. <div class="vedioTaskBox">
  175. <div :class="contentDialog == false
  176. ? 'box_course isContentCss'
  177. : 'box_course'
  178. " v-if="vChapterData.length > 0 && vChapterData[taskCount] && showType !== ''">
  179. <div class="wheel" style="height: auto;" v-if="showType === 0
  180. ">
  181. <div class="workd_media" style="height: 650px; width: calc(100% - 50px)">
  182. <video-player class="video-player vjs-custom-skin"
  183. :class="contentDialog == false ? 'isAllWidth' : ''" :playsinline="true"
  184. :options="playerO[taskCount]" @play="onPlayerPlay($event)"
  185. style="width: 100%; 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="font-size: 22px">
  198. {{ text.name }}
  199. </div>
  200. </el-form-item>
  201. <!-- <div style="color: #918f8f; width: 85%">文档内容</div> -->
  202. <div v-html="text.url" class="textContent cont"></div>
  203. </el-form>
  204. </div>
  205. <div class="wheel"
  206. v-if="pptImgUrl1.indexOf('https://view.officeapps.live.com/op/view.aspx?src=') != -1 && showType == 2"
  207. style="width: 95%; margin: 0 auto">
  208. <iframe style="width: 100%; height: 100%; border: none" :src="pptImgUrl1"></iframe>
  209. </div>
  210. <div class="wheel" v-else-if="showType == 2" style="width: 95%; margin: 0 auto">
  211. <iframe style="width: 100%; height: 100%; border: none" security="restricted"
  212. sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts allow-popups"
  213. :src="pptImgUrl1"></iframe>
  214. </div>
  215. <div class="wheel" v-if="showType == 3" style="width: 95%; margin: 0 auto">
  216. <pdf :pdfUrl="pptImgUrl1" style="width: 100%; height: 100%; overflow: auto"></pdf>
  217. </div>
  218. <div class="wheel" v-if="showType == 4" style="width: 95%; margin: 0 auto">
  219. <el-image :src="pptImgUrl1" fit="contain" style="width: 100%;height:100%;cursor: pointer;" @click="previewImg(pptImgUrl1)"></el-image>
  220. </div>
  221. </div>
  222. <div class="pButton" style="
  223. position: absolute;
  224. right: 20px;
  225. top: 0;
  226. background: #205cc6;
  227. z-index: 998;
  228. opacity: .8;
  229. " v-if="!contentDialog" @click="setContent(true)">
  230. <!-- 批 -->
  231. <img src="../../assets/navBtn2.png" style="width: 25px" alt="" />
  232. </div>
  233. <div v-if="contentDialog == true" :style="{
  234. width: ((vChapterData[taskCount].length > 0 || fileC[taskCount].length > 0) && showType === '') ? 'calc(100%)' : 'calc(100% - 83%)', margin: ((vChapterData[taskCount].length > 0 || fileC[taskCount].length > 0) && showType === '') ? '0 15px' : '0 15px 0 0'
  235. }">
  236. <div class="vedioList" v-if="vChapterData[taskCount].length > 0 || fileC[taskCount].length > 0" style="height: 650px">
  237. <div class="navCorOpenBox">
  238. <div class="navTitile">内容列表:</div>
  239. <div class="navCorOpen" @click="setContent(false)">
  240. <img src="../../assets/navBtn2.png" alt="" />
  241. </div>
  242. </div>
  243. <div class="navBox">
  244. <div v-show="vChapterData[taskCount].length > 0 || fileC[taskCount].length > 0
  245. ">
  246. <div class="vedioTimeBox" v-for="(vitem, vindex) in vChapterData[taskCount]" :key="vindex + '1'">
  247. <div @click="lookVedio(vitem.url, vindex)" v-if="vitem.type == 2" class="vedioName" :class="isClickNav == vindex
  248. ? 'isClickNav'
  249. : ''
  250. ">
  251. <span v-if="vitem.text">{{ vitem.text }}-</span>{{ vitem.name }}
  252. </div>
  253. <div style="width: calc(100% - 0px)" @click="lookText(taskCount, vindex)"
  254. v-if="vitem.type == 6">
  255. <div class="navText" :class="isClickNav == vindex
  256. ? 'isClickNav'
  257. : ''
  258. ">
  259. {{
  260. vitem.name
  261. }}.doc
  262. </div>
  263. </div>
  264. <div style="width: calc(100% - 0px)" @click="doUrl(vitem.url, vindex)" v-if="vitem.type == 8">
  265. <div class="navText" :class="isClickNav == vindex
  266. ? 'isClickNav'
  267. : ''
  268. ">
  269. {{ vitem.title ? vitem.title : vitem.url }}
  270. </div>
  271. </div>
  272. <div style="width: calc(100% - 0px)" @click="downFile(vitem, vindex)" v-if="vitem.type == 3">
  273. <div class="navText" :class="isClickNav == vindex
  274. ? 'isClickNav'
  275. : ''
  276. ">
  277. <span v-if="vitem.text">{{ vitem.text }}-</span>{{ vitem.name }}
  278. </div>
  279. </div>
  280. <div style="width: calc(100% - 0px)" @click="downloadFile2(vitem)" v-if="vitem.type == 12">
  281. <div class="navText">
  282. <span v-if="vitem.text">{{ vitem.text }}-</span>{{ vitem.name }}
  283. </div>
  284. </div>
  285. <div style="width: calc(100% - 0px)" @click="checkPhoto(vitem, vindex)" v-if="vitem.type == 13">
  286. <div class="navText" :class="isClickNav == vindex
  287. ? 'isClickNav'
  288. : ''
  289. ">
  290. {{ vitem.name }}
  291. </div>
  292. </div>
  293. </div>
  294. <div class="fileC_box" v-if="fileC[taskCount].length > 0">
  295. <div class="fileC_title">以下文件不支持预览</div>
  296. <div class="vedioTimeBox" v-for="(vitem, vindex) in fileC[taskCount]" :key="vindex + '1'">
  297. <div style="width: calc(100% - 0px)" @click="downloadFile2(vitem)" v-if="vitem.type == 12">
  298. <div class="navText">
  299. <span v-if="vitem.text">{{ vitem.text }}-</span>{{ vitem.name }}
  300. </div>
  301. </div>
  302. </div>
  303. </div>
  304. </div>
  305. </div>
  306. </div>
  307. </div>
  308. </div>
  309. <div style="width: 81%">
  310. <div style="padding: 10px 0 0; width: 95%; margin: 0 auto" v-if="showType == 2 || showType == 3">
  311. <el-button type="primary" @click="checkFileFull(showType, pptImgUrl1)">全屏查看</el-button>
  312. <el-button type="primary" @click="downloadFile(pptImgUrl1)" v-if="showType != 2">文件下载</el-button>
  313. <el-button
  314. v-if="showType == 2 && pptImgUrl1.indexOf('https://view.officeapps.live.com/op/view.aspx?src=') == -1"
  315. type="primary" @click="openLine(pptImgUrl1)">打开链接
  316. </el-button>
  317. </div>
  318. <div style="padding: 10px 0 0; width: 95%; margin: 0 auto" v-if="showType == 1">
  319. <el-button type="primary" @click="checkFileFull(showType, text)">全屏查看</el-button>
  320. </div>
  321. </div>
  322. <div class="taskBox">
  323. <div style="
  324. display: flex;
  325. flex-wrap: nowrap;
  326. flex-direction: column;
  327. position: relative;
  328. ">
  329. <div style="padding: 15px 0 15px 20px; line-height: 25px" class="cont" v-if="chapInfoList[courseType].chapterInfo[0].taskJson[
  330. taskCount
  331. ].taskDetail != ''
  332. " v-html="chapInfoList[courseType].chapterInfo[0].taskJson[
  333. taskCount
  334. ].taskDetail
  335. ? chapInfoList[courseType].chapterInfo[0].taskJson[
  336. taskCount
  337. ].taskDetail
  338. : '暂无描述'
  339. "></div>
  340. </div>
  341. </div>
  342. </div>
  343. </div>
  344. <div class="student_body" v-resize="resize">
  345. <div class="vedioBox" v-if="courseDetail.userid == userid ||
  346. (courseDetail.course_teacher &&
  347. courseDetail.course_teacher.indexOf(userid) != -1)">
  348. <div class="queTop" style="
  349. font-size: 25px;
  350. padding: 15px 0 15px 30px;
  351. font-weight: bold;
  352. ">
  353. 任务布置区
  354. <el-button style="margin:0 30px 0 auto" type="primary" size="small" @click="addToolChoose">确定</el-button>
  355. </div>
  356. <div class="tool_work_box">
  357. <div class="tool_box">
  358. <div class="tool_type_box">
  359. <div class="chooseWho">
  360. <div :class="toolType == 0 ? 'isChooseActive' : ''
  361. " @click="(toolType = 0), $forceUpdate()">
  362. 互动类
  363. </div>
  364. <div :class="toolType == 1 ? 'isChooseActive' : ''
  365. " @click="(toolType = 1), $forceUpdate()">
  366. 思维类
  367. </div>
  368. <div :class="toolType == 2 ? 'isChooseActive' : ''
  369. " @click="(toolType = 2), $forceUpdate()">
  370. 评价类
  371. </div>
  372. <div :class="toolType == 3 ? 'isChooseActive' : ''
  373. " @click="(toolType = 3), $forceUpdate()">
  374. 编程类
  375. </div>
  376. <div :class="toolType == 5 ? 'isChooseActive' : ''
  377. " @click="(toolType = 5), $forceUpdate()">
  378. 学科类
  379. </div>
  380. <div :class="toolType == 4 ? 'isChooseActive' : ''
  381. " @click="(toolType = 4), $forceUpdate()">
  382. 其他
  383. </div>
  384. </div>
  385. </div>
  386. <di>
  387. <div class="toolSort" v-if="toolType == 0">
  388. <div class="tool">
  389. <div class="whiteBIcon" @click="addTools2(10)">
  390. <img src="../../assets/icon/thirdToolList/time.png" alt />
  391. <div style="margin: 5px 0">倒计时</div>
  392. </div>
  393. <div class="check" @click="addTools2(10)">
  394. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(10) == -1" />
  395. <div class="checkDiv" v-else>
  396. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  397. </div>
  398. </div>
  399. </div>
  400. <!-- <div class="tool">
  401. <div class="whiteBIcon" @click="openTools2(49)">
  402. <img src="../../assets/icon/fourthToolList/group.png" alt />
  403. <div style="margin: 5px 0">学生分组</div>
  404. </div>
  405. <div class="check" @click="addTools2(49)">
  406. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(49) == -1" />
  407. <div class="checkDiv" v-else>
  408. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  409. </div>
  410. </div>
  411. </div>
  412. <div class="tool">
  413. <div class="whiteBIcon" @click="openTools2(62)">
  414. <img src="../../assets/icon/fourthToolList/interVideo.png" alt />
  415. <div style="margin: 5px 0">交互视频</div>
  416. </div>
  417. <div class="check" @click="addTools2(62)">
  418. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(62) == -1" />
  419. <div class="checkDiv" v-else>
  420. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  421. </div>
  422. </div>
  423. </div> -->
  424. </div>
  425. <div class="toolSort" v-if="toolType == 1">
  426. <div class="tool">
  427. <div class="whiteBIcon" @click="addTools2(7)">
  428. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt />
  429. <div style="margin: 5px 0">思维网格</div>
  430. </div>
  431. <div class="check" @click="addTools2(7)">
  432. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(7) == -1" />
  433. <div class="checkDiv" v-else>
  434. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  435. </div>
  436. </div>
  437. </div>
  438. <div class="tool">
  439. <div class="whiteBIcon" @click="addTools2(1)">
  440. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  441. <div style="margin: 5px 0">电子白板</div>
  442. </div>
  443. <div class="check" @click="addTools2(1)">
  444. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(1) == -1" />
  445. <div class="checkDiv" v-else>
  446. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  447. </div>
  448. </div>
  449. </div>
  450. <div class="tool">
  451. <div class="whiteBIcon" @click="addTools2(52)">
  452. <img src="../../assets/icon/fourthToolList/text.png" alt />
  453. <div style="margin: 5px 0">文档</div>
  454. </div>
  455. <div class="check" @click="addTools2(52)">
  456. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(52) == -1" />
  457. <div class="checkDiv" v-else>
  458. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  459. </div>
  460. </div>
  461. </div>
  462. <div class="tool">
  463. <div class="whiteBIcon" @click="addTools2(3)">
  464. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  465. <div style="margin: 5px 0">思维导图</div>
  466. </div>
  467. <div class="check" @click="addTools2(3)">
  468. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(3) == -1" />
  469. <div class="checkDiv" v-else>
  470. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  471. </div>
  472. </div>
  473. </div>
  474. <div class="tool">
  475. <div class="whiteBIcon" @click="addTools2(48)">
  476. <img src="../../assets/icon/fourthToolList/table.png" alt />
  477. <div style="margin: 5px 0">表格</div>
  478. </div>
  479. <div class="check" @click="addTools2(48)">
  480. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(48) == -1" />
  481. <div class="checkDiv" v-else>
  482. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  483. </div>
  484. </div>
  485. </div>
  486. </div>
  487. <div class="toolSort" v-if="toolType == 2">
  488. <!-- <div class="tool">
  489. <div class="whiteBIcon" @click="openTools2(4)">
  490. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  491. <div style="margin: 5px 0">问卷调查</div>
  492. </div>
  493. <div class="check" @click="addTools2(4)">
  494. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(4) == -1" />
  495. <div class="checkDiv" v-else>
  496. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  497. </div>
  498. </div>
  499. </div>
  500. <div class="tool">
  501. <div class="whiteBIcon" @click="openTools2(45)">
  502. <img src="../../assets/icon/thirdToolList/choose.png" alt />
  503. <div style="margin: 5px 0">选择题</div>
  504. </div>
  505. <div class="check" @click="addTools2(45)">
  506. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(45) == -1" />
  507. <div class="checkDiv" v-else>
  508. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  509. </div>
  510. </div>
  511. </div>
  512. <div class="tool">
  513. <div class="whiteBIcon" @click="openTools2(15)">
  514. <img src="../../assets/icon/thirdToolList/answer.png" alt />
  515. <div style="margin: 5px 0">问答工具</div>
  516. </div>
  517. <div class="check" @click="addTools2(15)">
  518. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(15) == -1" />
  519. <div class="checkDiv" v-else>
  520. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  521. </div>
  522. </div>
  523. </div> -->
  524. <div class="tool">
  525. <div class="whiteBIcon" @click="addTools2(16)">
  526. <img src="../../assets/icon/thirdToolList/work.png" alt />
  527. <div style="margin: 5px 0">作业提交</div>
  528. </div>
  529. <div class="check" @click="addTools2(16)">
  530. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(16) == -1" />
  531. <div class="checkDiv" v-else>
  532. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  533. </div>
  534. </div>
  535. </div>
  536. <div class="tool">
  537. <div class="whiteBIcon" @click="addTools2(50)">
  538. <img src="../../assets/icon/thirdToolList/plwork.png" alt />
  539. <div style="margin: 5px 0">批量上传</div>
  540. </div>
  541. <div class="check" @click="addTools2(50)">
  542. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(50) == -1" />
  543. <div class="checkDiv" v-else>
  544. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  545. </div>
  546. </div>
  547. </div>
  548. <!-- <div class="tool">
  549. <div class="whiteBIcon" @click="openTools2(40)">
  550. <img src="../../assets/icon/secondToolList/eval.png" alt />
  551. <div style="margin: 5px 0">个人评价</div>
  552. </div>
  553. <div class="check" @click="addTools2(40)">
  554. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(40) == -1" />
  555. <div class="checkDiv" v-else>
  556. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  557. </div>
  558. </div>
  559. </div> -->
  560. <!-- <div class="tool">
  561. <div class="whiteBIcon" @click="openTools2(41)">
  562. <img src="../../assets/icon/thirdToolList/select.png" alt />
  563. <div style="margin: 5px 0">选择填空</div>
  564. </div>
  565. <div class="check" @click="addTools2(41)">
  566. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(41) == -1" />
  567. <div class="checkDiv" v-else>
  568. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  569. </div>
  570. </div>
  571. </div>
  572. <div class="tool">
  573. <div class="whiteBIcon" @click="openTools2(47)">
  574. <img src="../../assets/icon/fourthToolList/conSentences.png" alt />
  575. <div style="margin: 5px 0">连词成句</div>
  576. </div>
  577. <div class="check" @click="addTools2(47)">
  578. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(47) == -1" />
  579. <div class="checkDiv" v-else>
  580. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  581. </div>
  582. </div>
  583. </div> -->
  584. </div>
  585. <div class="toolSort" v-if="toolType == 3">
  586. <div class="tool">
  587. <div class="whiteBIcon" @click="addTools2(18)">
  588. <img src="../../assets/icon/thirdToolList/trainPlatform.png" alt />
  589. <div style="margin: 5px 0">训练平台</div>
  590. </div>
  591. <div class="check" @click="addTools2(18)">
  592. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(18) == -1" />
  593. <div class="checkDiv" v-else>
  594. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  595. </div>
  596. </div>
  597. </div>
  598. <div class="tool">
  599. <div class="whiteBIcon" @click="addTools2(21)">
  600. <img src="../../assets/icon/fourthToolList/program.png" alt />
  601. <div style="margin: 5px 0">编程平台</div>
  602. </div>
  603. <div class="check" @click="addTools2(21)">
  604. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(21) == -1" />
  605. <div class="checkDiv" v-else>
  606. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  607. </div>
  608. </div>
  609. </div>
  610. <div class="tool">
  611. <div class="whiteBIcon" @click="addTools2(22)">
  612. <img src="../../assets/icon/fourthToolList/AIprogram2.png" alt />
  613. <div style="margin: 5px 0">AI体验</div>
  614. </div>
  615. <div class="check" @click="addTools2(22)">
  616. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(22) == -1" />
  617. <div class="checkDiv" v-else>
  618. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  619. </div>
  620. </div>
  621. </div>
  622. <div class="tool">
  623. <div class="whiteBIcon" @click="addTools2(23)">
  624. <img src="../../assets/icon/fourthToolList/Pythonprogram.png" alt />
  625. <div style="margin: 5px 0">Python</div>
  626. </div>
  627. <div class="check" @click="addTools2(23)">
  628. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(23) == -1" />
  629. <div class="checkDiv" v-else>
  630. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  631. </div>
  632. </div>
  633. </div>
  634. <div class="tool">
  635. <div class="whiteBIcon" @click="addTools2(24)">
  636. <img src="../../assets/icon/fourthToolList/AIprogram.png" alt />
  637. <div style="margin: 5px 0">AI平台</div>
  638. </div>
  639. <div class="check" @click="addTools2(24)">
  640. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(24) == -1" />
  641. <div class="checkDiv" v-else>
  642. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  643. </div>
  644. </div>
  645. </div>
  646. <div class="tool">
  647. <div class="whiteBIcon" @click="addTools2(32)">
  648. <img src="../../assets/icon/thirdToolList/code.png" alt />
  649. <div style="margin: 5px 0">源码编辑</div>
  650. </div>
  651. <div class="check" @click="addTools2(32)">
  652. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(32) == -1" />
  653. <div class="checkDiv" v-else>
  654. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  655. </div>
  656. </div>
  657. </div>
  658. <div class="tool">
  659. <div class="whiteBIcon" @click="addTools2(57)">
  660. <img src="../../assets/icon/fourthToolList/cocopi.png" alt />
  661. <div style="margin: 5px 0">CocoPi</div>
  662. </div>
  663. <div class="check" @click="addTools2(57)">
  664. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(57) == -1" />
  665. <div class="checkDiv" v-else>
  666. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  667. </div>
  668. </div>
  669. </div>
  670. <div class="tool">
  671. <div class="whiteBIcon" @click="addTools2(63)">
  672. <img src="../../assets/icon/fourthToolList/Wood.png" alt />
  673. <div style="margin: 5px 0">海龟编程</div>
  674. </div>
  675. <div class="check" @click="addTools2(63)">
  676. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(63) == -1" />
  677. <div class="checkDiv" v-else>
  678. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  679. </div>
  680. </div>
  681. </div>
  682. </div>
  683. <div class="toolSort" v-if="toolType == 5">
  684. <div class="tool">
  685. <div class="whiteBIcon" @click="addTools2(28)">
  686. <img src="../../assets/icon/secondToolList/translation.png" alt />
  687. <div style="margin: 5px 0">翻译</div>
  688. </div>
  689. <div class="check" @click="addTools2(28)">
  690. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(28) == -1" />
  691. <div class="checkDiv" v-else>
  692. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  693. </div>
  694. </div>
  695. </div>
  696. <div class="tool">
  697. <div class="whiteBIcon" @click="addTools2(37)">
  698. <img src="../../assets/icon/secondToolList/mohe.png" alt />
  699. <div style="margin: 5px 0">魔盒识字</div>
  700. </div>
  701. <div class="check" @click="addTools2(37)">
  702. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(37) == -1" />
  703. <div class="checkDiv" v-else>
  704. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  705. </div>
  706. </div>
  707. </div>
  708. <div class="tool">
  709. <div class="whiteBIcon" @click="addTools2(38)">
  710. <img src="../../assets/icon/secondToolList/24game.png" alt />
  711. <div style="margin: 5px 0">24点</div>
  712. </div>
  713. <div class="check" @click="addTools2(38)">
  714. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(38) == -1" />
  715. <div class="checkDiv" v-else>
  716. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  717. </div>
  718. </div>
  719. </div>
  720. <div class="tool">
  721. <div class="whiteBIcon" @click="addTools2(31)">
  722. <img src="../../assets/icon/secondToolList/networkPanel.png" alt />
  723. <div style="margin: 5px 0">数学画板</div>
  724. </div>
  725. <div class="check" @click="addTools2(31)">
  726. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(31) == -1" />
  727. <div class="checkDiv" v-else>
  728. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  729. </div>
  730. </div>
  731. </div>
  732. <div class="tool">
  733. <div class="whiteBIcon" @click="addTools2(39)">
  734. <img src="../../assets/icon/secondToolList/GeoGebra.png" alt />
  735. <div style="margin: 5px 0">GeoGebra</div>
  736. </div>
  737. <div class="check" @click="addTools2(39)">
  738. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(39) == -1" />
  739. <div class="checkDiv" v-else>
  740. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  741. </div>
  742. </div>
  743. </div>
  744. <div class="tool">
  745. <div class="whiteBIcon" @click="addTools2(58)">
  746. <img src="../../assets/icon/fourthToolList/car.png" alt />
  747. <div style="margin: 5px 0">模拟驾驶</div>
  748. </div>
  749. <div class="check" @click="addTools2(58)">
  750. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(58) == -1" />
  751. <div class="checkDiv" v-else>
  752. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  753. </div>
  754. </div>
  755. </div>
  756. <div class="tool">
  757. <div class="whiteBIcon" @click="addTools2(59)">
  758. <img src="../../assets/icon/fourthToolList/lineSearch.png" alt />
  759. <div style="margin: 5px 0">路径搜索</div>
  760. </div>
  761. <div class="check" @click="addTools2(59)">
  762. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(59) == -1" />
  763. <div class="checkDiv" v-else>
  764. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  765. </div>
  766. </div>
  767. </div>
  768. <div class="tool">
  769. <div class="whiteBIcon" @click="addTools2(60)">
  770. <img src="../../assets/icon/fourthToolList/deepLearning.png" alt />
  771. <div style="margin: 5px 0">深度学习</div>
  772. </div>
  773. <div class="check" @click="addTools2(60)">
  774. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(60) == -1" />
  775. <div class="checkDiv" v-else>
  776. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  777. </div>
  778. </div>
  779. </div>
  780. <div class="tool">
  781. <div class="whiteBIcon" @click="addTools2(61)">
  782. <img src="../../assets/icon/fourthToolList/allHistory.png" alt />
  783. <div style="margin: 5px 0">全历史</div>
  784. </div>
  785. <div class="check" @click="addTools2(61)">
  786. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(61) == -1" />
  787. <div class="checkDiv" v-else>
  788. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  789. </div>
  790. </div>
  791. </div>
  792. </div>
  793. <div class="toolSort" v-if="toolType == 4">
  794. <div class="tool">
  795. <div class="whiteBIcon" @click="addTools2(26)">
  796. <img src="../../assets/icon/thirdToolList/courseDesign.png" alt />
  797. <div style="margin: 5px 0">课程设计</div>
  798. </div>
  799. <div class="check" @click="addTools2(26)">
  800. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(26) == -1" />
  801. <div class="checkDiv" v-else>
  802. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  803. </div>
  804. </div>
  805. </div>
  806. <div class="tool">
  807. <div class="whiteBIcon" @click="addTools2(25)">
  808. <img src="../../assets/icon/thirdToolList/evalua.png" alt />
  809. <div style="margin: 5px 0">目标管理</div>
  810. </div>
  811. <div class="check" @click="addTools2(25)">
  812. <img src="../../assets/icon/checkNo.png" alt v-if="checktoolArray.indexOf(25) == -1" />
  813. <div class="checkDiv" v-else>
  814. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  815. </div>
  816. </div>
  817. </div>
  818. </div>
  819. </di>
  820. </div>
  821. </div>
  822. </div>
  823. <div class="vedioBox" v-if="chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  824. .toolChoose[0].tool &&
  825. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  826. .toolChoose[0].tool.length &&
  827. chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
  828. .toolChoose[0].tool.length > 0
  829. ">
  830. <div class="queTop" style="
  831. font-size: 25px;
  832. padding: 15px 0 15px 30px;
  833. font-weight: bold;
  834. ">
  835. 任务发布区
  836. </div>
  837. <div class="toolHeng2" style="position: relative">
  838. <div class="filebox" style="flex-wrap: nowrap; margin: 0 20px"
  839. v-if="chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].toolChoose.length">
  840. <div class="choiceBox">
  841. <div class="bzChild" style="margin-right:20px;">
  842. <span>步骤选择:</span>
  843. </div>
  844. <div class="bzTypeBox">
  845. <div class="bzChild"
  846. v-for="(bz, bzIndex) in chapInfoList[courseType].chapterInfo[0].taskJson[taskCount].toolChoose"
  847. :key="bzIndex" :class="{ active: toolIndex == bzIndex }" @click="checkBz(bzIndex)">
  848. <span>步骤{{ bzIndex + 1 }}</span>
  849. </div>
  850. </div>
  851. </div>
  852. <div class="bzBox">
  853. <div></div>
  854. <div>步骤{{ toolIndex + 1 }}</div>
  855. <div style="margin: 0 72px 0 auto;" v-if="courseDetail.userid == userid"><el-button type="primary"
  856. size="mini" @click="updateToolDetail">{{ !isUpdateToolDetail ? '编辑' : '确认修改' }}</el-button>
  857. </div>
  858. </div>
  859. <div class="toolBox">
  860. <div class="toolBoxSteps" @click="nextToolindex('last')"><img src="../../assets/icon/leftIcon.png" />
  861. </div>
  862. <div class="toolBoxSteps" @click="nextToolindex('next')"><img src="../../assets/icon/rightIcon.png" />
  863. </div>
  864. <div>
  865. <div class="noiframeBox">
  866. <div class="addPoint" v-for="(tooC, toolCIndex) in tool.tool" :key="toolCIndex">
  867. <div v-show="tooC == 1">
  868. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt
  869. @click="addTools(tooC, toolIndex, taskCount)" />
  870. <div style="margin: 5px 0">电子白板</div>
  871. </div>
  872. <div v-show="tooC == 3">
  873. <img src="../../assets/icon/secondToolList/mindMapping.png" alt
  874. @click="addTools(tooC, toolIndex, taskCount)" />
  875. <div style="margin: 5px 0">思维导图</div>
  876. </div>
  877. <div v-show="tooC == 6">
  878. <img src="../../assets/icon/secondToolList/doc.png" alt
  879. @click="addTools(tooC, toolIndex, taskCount)" />
  880. <div style="margin: 5px 0">协同文档</div>
  881. </div>
  882. <div v-show="tooC == 7">
  883. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt
  884. @click="addTools(tooC, toolIndex, taskCount)" />
  885. <div style="margin: 5px 0">思维网格</div>
  886. </div>
  887. <div v-show="tooC == 8">
  888. <img src="../../assets/icon/secondToolList/library.png" alt
  889. @click="addTools(tooC, toolIndex, taskCount)" />
  890. <div style="margin: 5px 0">素材库</div>
  891. </div>
  892. <div v-show="tooC == 17">
  893. <img src="../../assets/icon/secondToolList/library.png" alt
  894. @click="addTools(tooC, toolIndex, taskCount)" />
  895. <div style="margin: 5px 0">学习资料</div>
  896. </div>
  897. <div v-show="tooC == 2">
  898. <img @click="addTools(tooC, toolIndex, taskCount)"
  899. src="../../assets/icon/secondToolList/note.png" alt />
  900. <div style="margin: 5px 0">便签</div>
  901. </div>
  902. <div v-show="tooC == 4">
  903. <img @click="addTools(tooC, toolIndex, taskCount)"
  904. src="../../assets/icon/thirdToolList/ask.png" alt />
  905. <div style="margin: 5px 0">问卷调查</div>
  906. </div>
  907. <div v-show="tooC == 45">
  908. <img @click="addTools(tooC, toolIndex, taskCount)"
  909. src="../../assets/icon/thirdToolList/choose.png" alt />
  910. <div style="margin: 5px 0">选择题</div>
  911. </div>
  912. <!-- <div v-show="tooC == 5">
  913. <img
  914. @click="addTools(tooC, toolIndex, taskCount)"
  915. src="../../assets/icon/thirdToolList/score.png"
  916. alt
  917. />
  918. <div style="margin: 5px 0">量规评分</div>
  919. </div> -->
  920. <div v-show="tooC == 10">
  921. <img @click="addTools(tooC, toolIndex, taskCount)"
  922. src="../../assets/icon/thirdToolList/time.png" alt />
  923. <div style="margin: 5px 0">倒计时</div>
  924. </div>
  925. <div v-show="tooC == 15">
  926. <img @click="addTools(tooC, toolIndex, taskCount)"
  927. src="../../assets/icon/thirdToolList/answer.png" alt />
  928. <div style="margin: 5px 0">问答工具</div>
  929. </div>
  930. <div v-show="tooC == 26">
  931. <img @click="addTools(tooC, toolIndex, taskCount)"
  932. src="../../assets/icon/thirdToolList/courseDesign.png" alt />
  933. <div style="margin: 5px 0">课程设计</div>
  934. </div>
  935. <div v-show="tooC == 18">
  936. <img @click="addTools(tooC, toolIndex, taskCount)"
  937. src="../../assets/icon/thirdToolList/trainPlatform.png" alt />
  938. <div style="margin: 5px 0">训练服务器</div>
  939. </div>
  940. <div v-show="tooC == 16">
  941. <img @click="addTools(tooC, toolIndex, taskCount)"
  942. src="../../assets/icon/thirdToolList/work.png" alt />
  943. <div style="margin: 5px 0">作业提交</div>
  944. </div>
  945. <div v-show="tooC == 50">
  946. <img @click="addTools(tooC, toolIndex, taskCount)"
  947. src="../../assets/icon/thirdToolList/plwork.png" alt />
  948. <div style="margin: 5px 0">批量上传</div>
  949. </div>
  950. <div v-show="tooC == 21">
  951. <img @click="addTools(tooC, toolIndex, taskCount)"
  952. src="../../assets/icon/fourthToolList/program.png" alt />
  953. <div style="margin: 5px 0">编程平台</div>
  954. </div>
  955. <div v-show="tooC == 22">
  956. <img @click="addTools(tooC, toolIndex, taskCount)"
  957. src="../../assets/icon/fourthToolList/program.png" alt />
  958. <div style="margin: 5px 0">AI体验</div>
  959. </div>
  960. <div v-show="tooC == 23">
  961. <img @click="addTools(tooC, toolIndex, taskCount)"
  962. src="../../assets/icon/fourthToolList/Pythonprogram.png" alt />
  963. <div style="margin: 5px 0">Python</div>
  964. </div>
  965. <div v-show="tooC == 24">
  966. <img @click="addTools(tooC, toolIndex, taskCount)"
  967. src="../../assets/icon/fourthToolList/AIprogram.png" alt />
  968. <div style="margin: 5px 0">AI平台</div>
  969. </div>
  970. <div v-show="tooC == 25">
  971. <img @click="addTools(tooC, toolIndex, taskCount)"
  972. src="../../assets/icon/thirdToolList/evalua.png" alt />
  973. <div style="margin: 5px 0">目标管理</div>
  974. </div>
  975. <div v-show="tooC == 31">
  976. <img @click="addTools(tooC, toolIndex, taskCount)"
  977. src="../../assets/icon/secondToolList/networkPanel.png" alt />
  978. <div style="margin: 5px 0">数学画板</div>
  979. </div>
  980. <div v-show="tooC == 28">
  981. <img @click="addTools(tooC, toolIndex, taskCount)"
  982. src="../../assets/icon/secondToolList/translation.png" alt />
  983. <div style="margin: 5px 0">翻译</div>
  984. </div>
  985. <div v-show="tooC == 37">
  986. <img @click="addTools(tooC, toolIndex, taskCount)"
  987. src="../../assets/icon/secondToolList/mohe.png" alt />
  988. <div style="margin: 5px 0">魔盒识字</div>
  989. </div>
  990. <div v-show="tooC == 38">
  991. <img @click="addTools(tooC, toolIndex, taskCount)"
  992. src="../../assets/icon/secondToolList/24game.png" alt />
  993. <div style="margin: 5px 0">24点</div>
  994. </div>
  995. <div v-show="tooC == 39">
  996. <img @click="addTools(tooC, toolIndex, taskCount)"
  997. src="../../assets/icon/secondToolList/GeoGebra.png" alt />
  998. <div style="margin: 5px 0">GeoGebra</div>
  999. </div>
  1000. <div v-show="tooC == 32">
  1001. <img @click="addTools(tooC, toolIndex, taskCount)"
  1002. src="../../assets/icon/thirdToolList/code.png" alt />
  1003. <div style="margin: 5px 0">源码编辑</div>
  1004. <!-- <div class="upload_toolBtn" @click="addImg($event)"
  1005. style="position: absolute;left: 110px;bottom: 30px;">
  1006. 上传文件
  1007. <input type="file" accept="*" style="display: none"
  1008. @change="beforeUpload1($event, 7, toolIndex)" />
  1009. </div> -->
  1010. </div>
  1011. <div v-show="tooC == 40">
  1012. <img @click="addTools(tooC, toolIndex, taskCount)"
  1013. src="../../assets/icon/secondToolList/eval.png" alt />
  1014. <div style="margin: 5px 0">个人评价</div>
  1015. </div>
  1016. <div v-show="tooC == 41">
  1017. <img @click="addTools(tooC, toolIndex, taskCount)"
  1018. src="../../assets/icon/thirdToolList/select.png" alt />
  1019. <div style="margin: 5px 0">选择填空</div>
  1020. </div>
  1021. <div v-show="tooC == 44">
  1022. <img @click="addTools(tooC, toolIndex, taskCount)"
  1023. src="../../assets/icon/thirdToolList/hanClass.png" alt />
  1024. <div style="margin: 5px 0">汉字宫</div>
  1025. </div>
  1026. <div v-show="tooC == 47">
  1027. <img @click="addTools(tooC, toolIndex, taskCount)"
  1028. src="../../assets/icon/fourthToolList/conSentences.png" alt />
  1029. <div style="margin: 5px 0">连词成句</div>
  1030. </div>
  1031. <div v-show="tooC == 48">
  1032. <img @click="addTools(tooC, toolIndex, taskCount)"
  1033. src="../../assets/icon/fourthToolList/table.png" alt />
  1034. <div style="margin: 5px 0">表格</div>
  1035. </div>
  1036. <div v-show="tooC == 52">
  1037. <img @click="addTools(tooC, toolIndex, taskCount)"
  1038. src="../../assets/icon/fourthToolList/text.png" alt />
  1039. <div style="margin: 5px 0">文档</div>
  1040. </div>
  1041. <div v-show="tooC == 49">
  1042. <img @click="addTools(tooC, toolIndex, taskCount)"
  1043. src="../../assets/icon/fourthToolList/group.png" alt />
  1044. <div style="margin: 5px 0">学生分组</div>
  1045. </div>
  1046. <div v-show="tooC == 57">
  1047. <img @click="addTools(tooC, toolIndex, taskCount)"
  1048. src="../../assets/icon/fourthToolList/cocopi.png" alt />
  1049. <div style="margin: 5px 0">CocoPi</div>
  1050. </div>
  1051. <div v-show="tooC == 58">
  1052. <img @click="addTools(tooC, toolIndex, taskCount)"
  1053. src="../../assets/icon/fourthToolList/car.png" alt />
  1054. <div style="margin: 5px 0">模拟驾驶</div>
  1055. </div>
  1056. <div v-show="tooC == 59">
  1057. <img @click="addTools(tooC, toolIndex, taskCount)"
  1058. src="../../assets/icon/fourthToolList/lineSearch.png" alt />
  1059. <div style="margin: 5px 0">路径搜索</div>
  1060. </div>
  1061. <div v-show="tooC == 60">
  1062. <img @click="addTools(tooC, toolIndex, taskCount)"
  1063. src="../../assets/icon/fourthToolList/deepLearning.png" alt />
  1064. <div style="margin: 5px 0">深度学习</div>
  1065. </div>
  1066. <div v-show="tooC == 61">
  1067. <img @click="addTools(tooC, toolIndex, taskCount)"
  1068. src="../../assets/icon/fourthToolList/allHistory.png" alt />
  1069. <div style="margin: 5px 0">全历史</div>
  1070. </div>
  1071. <div v-show="tooC == 62">
  1072. <img @click="addTools(tooC, toolIndex, taskCount)"
  1073. src="../../assets/icon/fourthToolList/interVideo.png" alt />
  1074. <div style="margin: 5px 0">交互视频</div>
  1075. </div>
  1076. <div v-show="tooC == 63">
  1077. <img @click="addTools(tooC, toolIndex, taskCount)"
  1078. src="../../assets/icon/fourthToolList/Wood.png" alt />
  1079. <div style="margin: 5px 0">海龟编程</div>
  1080. </div>
  1081. </div>
  1082. </div>
  1083. </div>
  1084. <div class="tooldetail">
  1085. <!-- <div class="toolTitle">工具描述</div> -->
  1086. <div style="height:100%" v-html="contentConvent(tool.toolDetail ? tool.toolDetail : '暂无描述')"
  1087. v-if="!isUpdateToolDetail" @click="updateToolDetail"></div>
  1088. <div v-else>
  1089. <el-input type="textarea" :rows="3" resize="none" v-model="updateToolDetailInner"
  1090. placeholder="请输入任务描述"></el-input>
  1091. </div>
  1092. </div>
  1093. <el-button type="primary" v-if="tool.tool[0] == 32" style="
  1094. position: absolute;
  1095. right: 30px;
  1096. transform: translateY(-130%);
  1097. " @click="addImg($event)">上传作业<input type="file" accept="*"
  1098. style="display: none" @change="beforeUpload1($event, 7, toolIndex)" /></el-button>
  1099. <!-- <el-button type="primary" v-if="tool.tool[0] == 57" style="
  1100. position: absolute;
  1101. right: 30px;
  1102. transform: translateY(-130%);
  1103. " @click="addImg($event)">上传作业<input type="file" accept="*"
  1104. style="display: none" @change="beforeUpload1($event, 8, toolIndex)" /></el-button> -->
  1105. </div>
  1106. </div>
  1107. </div>
  1108. </div>
  1109. <div class="vedioBox"
  1110. v-if="arrayToArray(tool.tool, isWorkTool).length && worksTeacher.length && worksTeacher[toolIndex].length && false">
  1111. <div class="queTop" style="
  1112. font-size: 25px;
  1113. padding: 15px 0 15px 30px;
  1114. font-weight: bold;
  1115. ">
  1116. 教师工作区
  1117. </div>
  1118. <div class="tool_work_box">
  1119. <div v-if="tType &&
  1120. ((tType == 2 && sIsOpen == true) ||
  1121. tType == 1 ||
  1122. tType == 4) &&
  1123. tool.tool.indexOf(16) != -1
  1124. " class="worksBox">
  1125. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1126. worksTeacher[toolIndex].length > 0
  1127. ">
  1128. <div class="worksTop">
  1129. <div>作业预览</div>
  1130. </div>
  1131. </div>
  1132. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1133. worksTeacher[toolIndex].length > 0
  1134. ">
  1135. <div class="works" style="
  1136. width: 200px;
  1137. height: 140px;
  1138. margin: 10px 10px 10px 0;
  1139. border-radius: 15px;
  1140. box-shadow: 0 0 6px 1px #dfdada;
  1141. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1142. :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  1143. <div class="workImg" v-if="w.type == 0">
  1144. <!-- @click="commentOther(w, toolIndex, wIndex)" -->
  1145. <img :src="w.works" @click="previewImg(w.works)" alt />
  1146. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1147. rightW:
  1148. w.userid == userid ||
  1149. tType == 1 ||
  1150. tType == 4 ||
  1151. w.ateacher == userid,
  1152. }">
  1153. {{ JSON.parse(w.score).wScore }}分
  1154. </div>
  1155. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1156. :class="{
  1157. rightW:
  1158. w.userid == userid ||
  1159. tType == 1 ||
  1160. tType == 4 ||
  1161. w.ateacher == userid,
  1162. }">
  1163. 评分
  1164. </div>
  1165. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1166. " @click.stop="deleteWorks(w.wid)" alt />
  1167. </div>
  1168. <div class="workImg" v-if="w.type == 1">
  1169. <img :src="word" @click="openFile(w.works)" alt />
  1170. <!-- @click="openFile(w.works)" -->
  1171. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1172. rightW:
  1173. w.userid == userid ||
  1174. tType == 1 ||
  1175. tType == 4 ||
  1176. w.ateacher == userid,
  1177. }">
  1178. {{ JSON.parse(w.score).wScore }}分
  1179. </div>
  1180. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1181. :class="{
  1182. rightW:
  1183. w.userid == userid ||
  1184. tType == 1 ||
  1185. tType == 4 ||
  1186. w.ateacher == userid,
  1187. }">
  1188. 评分
  1189. </div>
  1190. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1191. " @click.stop="deleteWorks(w.wid)" alt />
  1192. </div>
  1193. <div class="workImg" v-if="w.type == 3">
  1194. <img style="cursor: pointer" :src="video" @click="openVideo(w)" alt />
  1195. <!-- @click="openVideo(w.works)" -->
  1196. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1197. rightW:
  1198. w.userid == userid ||
  1199. tType == 1 ||
  1200. tType == 4 ||
  1201. w.ateacher == userid,
  1202. }">
  1203. {{ JSON.parse(w.score).wScore }}分
  1204. </div>
  1205. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1206. :class="{
  1207. rightW:
  1208. w.userid == userid ||
  1209. tType == 1 ||
  1210. tType == 4 ||
  1211. w.ateacher == userid,
  1212. }">
  1213. 评分
  1214. </div>
  1215. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1216. " @click.stop="deleteWorks(w.wid)" alt />
  1217. </div>
  1218. <div class="workImg" v-if="w.type == 12">
  1219. <img style="cursor: pointer" :src="word2" @click="downloadFile(w.works)" alt />
  1220. <!-- @click="openVideo(w.works)" -->
  1221. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1222. rightW:
  1223. w.userid == userid ||
  1224. tType == 1 ||
  1225. tType == 4 ||
  1226. w.ateacher == userid,
  1227. }">
  1228. {{ JSON.parse(w.score).wScore }}分
  1229. </div>
  1230. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1231. :class="{
  1232. rightW:
  1233. w.userid == userid ||
  1234. tType == 1 ||
  1235. tType == 4 ||
  1236. w.ateacher == userid,
  1237. }">
  1238. 评分
  1239. </div>
  1240. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1241. " @click.stop="deleteWorks(w.wid)" alt />
  1242. </div>
  1243. <div class="comment" style="min-width: 200px">
  1244. <div class="worksName">
  1245. <div>{{ w.sName }}</div>
  1246. </div>
  1247. <div class="commentList">
  1248. <div class="commentList">
  1249. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1250. ">
  1251. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1252. </div>
  1253. <div>{{ w.likesCount }}</div>
  1254. </div>
  1255. <div class="commentList" style="margin-right: 15px">
  1256. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1257. <img src="../../assets/icon/comment/comment.png" alt="" />
  1258. </div>
  1259. <div>{{ w.commentCount }}</div>
  1260. </div>
  1261. </div>
  1262. </div>
  1263. </div>
  1264. </div>
  1265. </div>
  1266. <div v-if="tType &&
  1267. ((tType == 2 && sIsOpen == true) ||
  1268. tType == 1 ||
  1269. tType == 4) &&
  1270. tool.tool.indexOf(32) != -1
  1271. " class="worksBox">
  1272. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1273. worksTeacher[toolIndex].length > 0
  1274. ">
  1275. <div class="worksTop">
  1276. <div>作业预览</div>
  1277. </div>
  1278. </div>
  1279. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1280. worksTeacher[toolIndex].length > 0
  1281. ">
  1282. <div class="works" style="
  1283. width: 200px;
  1284. height: 140px;
  1285. margin: 10px 10px 10px 0;
  1286. border-radius: 15px;
  1287. box-shadow: 0 0 6px 1px #dfdada;
  1288. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1289. :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  1290. <div class="workImg">
  1291. <img :src="word2" @click="downloadFile(w.works)" alt />
  1292. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1293. rightW:
  1294. w.userid == userid ||
  1295. tType == 1 ||
  1296. tType == 4 ||
  1297. w.ateacher == userid,
  1298. }">
  1299. {{ JSON.parse(w.score).wScore }}分
  1300. </div>
  1301. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1302. :class="{
  1303. rightW:
  1304. w.userid == userid ||
  1305. tType == 1 ||
  1306. tType == 4 ||
  1307. w.ateacher == userid,
  1308. }">
  1309. 评分
  1310. </div>
  1311. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1312. " @click.stop="deleteWorks(w.wid)" alt />
  1313. </div>
  1314. <div class="comment" style="min-width: 200px">
  1315. <div class="worksName">
  1316. <div>{{ w.sName }}</div>
  1317. </div>
  1318. <div class="commentList">
  1319. <div class="commentList">
  1320. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1321. ">
  1322. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1323. </div>
  1324. <div>{{ w.likesCount }}</div>
  1325. </div>
  1326. <div class="commentList" style="margin-right: 15px">
  1327. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1328. <img src="../../assets/icon/comment/comment.png" alt="" />
  1329. </div>
  1330. <div>{{ w.commentCount }}</div>
  1331. </div>
  1332. </div>
  1333. </div>
  1334. </div>
  1335. </div>
  1336. </div>
  1337. <div v-if="tType &&
  1338. ((tType == 2 && sIsOpen == true) ||
  1339. tType == 1 ||
  1340. tType == 4) &&
  1341. tool.tool.indexOf(57) != -1
  1342. " class="worksBox">
  1343. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1344. worksTeacher[toolIndex].length > 0
  1345. ">
  1346. <div class="worksTop">
  1347. <div>作业预览</div>
  1348. </div>
  1349. </div>
  1350. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1351. worksTeacher[toolIndex].length > 0
  1352. ">
  1353. <div class="works" style="
  1354. width: 200px;
  1355. height: 140px;
  1356. margin: 10px 10px 10px 0;
  1357. border-radius: 15px;
  1358. box-shadow: 0 0 6px 1px #dfdada;
  1359. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1360. :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  1361. <div class="workImg">
  1362. <img :src="word2" @click="downloadFile(w.works)" v-if="w.type == 12" alt />
  1363. <img :src="word2" @click="openCocoPi(57, toolIndex, w.userid, w.sName)" v-else-if="w.type == 15"
  1364. alt />
  1365. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1366. rightW:
  1367. w.userid == userid ||
  1368. tType == 1 ||
  1369. tType == 4 ||
  1370. w.ateacher == userid,
  1371. }">
  1372. {{ JSON.parse(w.score).wScore }}分
  1373. </div>
  1374. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1375. :class="{
  1376. rightW:
  1377. w.userid == userid ||
  1378. tType == 1 ||
  1379. tType == 4 ||
  1380. w.ateacher == userid,
  1381. }">
  1382. 评分
  1383. </div>
  1384. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1385. " @click.stop="deleteWorks(w.wid)" alt />
  1386. </div>
  1387. <div class="comment" style="min-width: 200px">
  1388. <div class="worksName">
  1389. <div>{{ w.sName }}</div>
  1390. </div>
  1391. <div class="commentList">
  1392. <div class="commentList">
  1393. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1394. ">
  1395. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1396. </div>
  1397. <div>{{ w.likesCount }}</div>
  1398. </div>
  1399. <div class="commentList" style="margin-right: 15px">
  1400. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1401. <img src="../../assets/icon/comment/comment.png" alt="" />
  1402. </div>
  1403. <div>{{ w.commentCount }}</div>
  1404. </div>
  1405. </div>
  1406. </div>
  1407. </div>
  1408. </div>
  1409. </div>
  1410. <div v-if="tool.tool.indexOf(50) != -1" class="worksBox">
  1411. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1412. worksTeacher[toolIndex].length > 0
  1413. ">
  1414. <span>作业预览</span>
  1415. </div>
  1416. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1417. worksTeacher[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 worksTeacher[toolIndex]"
  1426. :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  1427. <div class="workImg" v-if="w.type == 0">
  1428. <!-- @click="commentOther(w, toolIndex, wIndex)" -->
  1429. <img :src="w.works" @click="previewImg(w.works)" alt />
  1430. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1431. rightW:
  1432. w.userid == userid ||
  1433. tType == 1 ||
  1434. tType == 4 ||
  1435. w.ateacher == userid,
  1436. }">
  1437. {{ JSON.parse(w.score).wScore }}分
  1438. </div>
  1439. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1440. :class="{
  1441. rightW:
  1442. w.userid == userid ||
  1443. tType == 1 ||
  1444. tType == 4 ||
  1445. w.ateacher == userid,
  1446. }">
  1447. 评分
  1448. </div>
  1449. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1450. " @click.stop="deleteWorks(w.wid)" alt />
  1451. </div>
  1452. <div class="workImg" style="cursor: pointer" v-if="w.type == 1">
  1453. <img :src="word" @click="openFile(w.works)" alt />
  1454. <!-- @click="openFile(w.works)" -->
  1455. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1456. rightW:
  1457. w.userid == userid ||
  1458. tType == 1 ||
  1459. tType == 4 ||
  1460. w.ateacher == userid,
  1461. }">
  1462. {{ JSON.parse(w.score).wScore }}分
  1463. </div>
  1464. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1465. :class="{
  1466. rightW:
  1467. w.userid == userid ||
  1468. tType == 1 ||
  1469. tType == 4 ||
  1470. w.ateacher == userid,
  1471. }">
  1472. 评分
  1473. </div>
  1474. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1475. " @click.stop="deleteWorks(w.wid)" alt />
  1476. </div>
  1477. <div class="workImg" v-if="w.type == 3">
  1478. <img style="cursor: pointer" :src="video" @click="openVideo(w)" alt />
  1479. <!-- @click="openVideo(w.works)" -->
  1480. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1481. rightW:
  1482. w.userid == userid ||
  1483. tType == 1 ||
  1484. tType == 4 ||
  1485. w.ateacher == userid,
  1486. }">
  1487. {{ JSON.parse(w.score).wScore }}分
  1488. </div>
  1489. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1490. :class="{
  1491. rightW:
  1492. w.userid == userid ||
  1493. tType == 1 ||
  1494. tType == 4 ||
  1495. w.ateacher == userid,
  1496. }">
  1497. 评分
  1498. </div>
  1499. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1500. " @click.stop="deleteWorks(w.wid)" alt />
  1501. </div>
  1502. <div class="comment" style="min-width: 200px">
  1503. <div class="worksName">
  1504. <div style="cursor: pointer" @click="openSname(w.sName, w.wid, toolIndex,w.userid)">
  1505. {{ w.sName }}
  1506. </div>
  1507. </div>
  1508. <div class="commentList">
  1509. <div class="commentList">
  1510. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1511. ">
  1512. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1513. </div>
  1514. <div>{{ w.likesCount }}</div>
  1515. </div>
  1516. <div class="commentList" style="margin-right: 15px">
  1517. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1518. <img src="../../assets/icon/comment/comment.png" alt="" />
  1519. </div>
  1520. <div>{{ w.commentCount }}</div>
  1521. </div>
  1522. </div>
  1523. </div>
  1524. </div>
  1525. </div>
  1526. </div>
  1527. <div v-if="tType &&
  1528. ((tType == 2 && sIsOpen == true) ||
  1529. tType == 1 ||
  1530. tType == 4) &&
  1531. tool.tool.indexOf(4) != -1
  1532. " class="worksBox">
  1533. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1534. worksTeacher[toolIndex].length > 0
  1535. ">
  1536. <div class="worksTop">
  1537. <div>作业预览</div>
  1538. </div>
  1539. </div>
  1540. <div>
  1541. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1542. worksTeacher[toolIndex].length > 0
  1543. ">
  1544. <div v-for="(w, wIndex) in worksTeacher[toolIndex]" :key="wIndex" class="isWorksName" @click="openTools(4, toolIndex, taskCount, w.works, w.sName)
  1545. ">
  1546. {{ w.sName }}
  1547. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1548. " @click.stop="deleteWorks(w.wid)" alt />
  1549. </div>
  1550. </div>
  1551. </div>
  1552. </div>
  1553. <div v-if="tType &&
  1554. ((tType == 2 && sIsOpen == true) ||
  1555. tType == 1 ||
  1556. tType == 4) &&
  1557. tool.tool.indexOf(45) != -1
  1558. " class="worksBox">
  1559. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1560. worksTeacher[toolIndex].length > 0
  1561. ">
  1562. <div class="worksTop">
  1563. <div>作业预览</div>
  1564. </div>
  1565. </div>
  1566. <div>
  1567. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1568. worksTeacher[toolIndex].length > 0
  1569. ">
  1570. <div v-for="(w, wIndex) in worksTeacher[toolIndex]" :key="wIndex" class="isWorksName" @click="openTools(
  1571. 45,
  1572. toolIndex,
  1573. taskCount,
  1574. w.works,
  1575. w.sName
  1576. )
  1577. ">
  1578. {{ w.sName }}
  1579. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1580. " @click.stop="deleteWorks(w.wid)" alt />
  1581. </div>
  1582. </div>
  1583. </div>
  1584. </div>
  1585. <div v-if="tType &&
  1586. ((tType == 2 && sIsOpen == true) ||
  1587. tType == 1 ||
  1588. tType == 4) &&
  1589. tool.tool.indexOf(15) != -1
  1590. " class="worksBox">
  1591. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1592. worksTeacher[toolIndex].length > 0
  1593. ">
  1594. <div class="worksTop">
  1595. <div>作业预览</div>
  1596. </div>
  1597. </div>
  1598. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1599. worksTeacher[toolIndex].length > 0
  1600. ">
  1601. <div class="works" v-for="(w, wIndex) in worksTeacher[toolIndex]" :key="wIndex">
  1602. <div class="workImg" style="
  1603. border-radius: 15px;
  1604. box-shadow: #eee 0px 0px 5px 5px;
  1605. ">
  1606. <!-- <img
  1607. src="../../assets/icon/works/noImg.png"
  1608. @click="openTools(15, toolIndex, taskCount, w.works)"
  1609. alt=""
  1610. />-->
  1611. <div class="answerBg" style="border-radius: 15px 15px 0 0"
  1612. @click="commentOther(w, toolIndex, wIndex)">
  1613. <!-- <div>{{ w.sName }}</div> -->
  1614. <div class="answerContent">
  1615. {{ JSON.parse(w.works)[0].answer }}
  1616. </div>
  1617. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1618. rightW:
  1619. w.userid == userid ||
  1620. tType == 1 ||
  1621. tType == 4,
  1622. }">
  1623. {{ JSON.parse(w.score).wScore }}分
  1624. </div>
  1625. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1626. :class="{
  1627. rightW:
  1628. w.userid == userid ||
  1629. tType == 1 ||
  1630. tType == 4,
  1631. }">
  1632. 评分
  1633. </div>
  1634. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1635. " @click.stop="deleteWorks(w.wid)" alt />
  1636. </div>
  1637. <div class="comment">
  1638. <div class="worksName">
  1639. <div>{{ w.sName }}</div>
  1640. </div>
  1641. <div class="commentList">
  1642. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1643. ">
  1644. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1645. </div>
  1646. <div>{{ w.likesCount }}</div>
  1647. </div>
  1648. <div class="commentList" style="margin-right: 15px">
  1649. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1650. <img src="../../assets/icon/comment/comment.png" alt="" />
  1651. </div>
  1652. <div>{{ w.commentCount }}</div>
  1653. </div>
  1654. </div>
  1655. </div>
  1656. </div>
  1657. </div>
  1658. </div>
  1659. <div v-if="tType &&
  1660. ((tType == 2 && sIsOpen == true) ||
  1661. tType == 1 ||
  1662. tType == 4) &&
  1663. tool.tool.indexOf(1) != -1
  1664. " class="worksBox">
  1665. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1666. worksTeacher[toolIndex].length > 0
  1667. ">
  1668. <div class="worksTop">
  1669. <div>作业预览</div>
  1670. </div>
  1671. </div>
  1672. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1673. worksTeacher[toolIndex].length > 0
  1674. ">
  1675. <div class="works" style="
  1676. width: 200px;
  1677. height: 140px;
  1678. margin: 10px 10px 10px 0;
  1679. border-radius: 15px;
  1680. box-shadow: 0 0 6px 1px #dfdada;
  1681. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1682. :key="wIndex">
  1683. <!-- @click="previewImg(w.works)" @click="commentOther(w, toolIndex, wIndex)"-->
  1684. <div class="workImg">
  1685. <img :src="w.works" @click="previewImg(w.works)" alt />
  1686. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1687. rightW:
  1688. w.userid == userid || tType == 1 || tType == 4,
  1689. }">
  1690. {{ JSON.parse(w.score).wScore }}分
  1691. </div>
  1692. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1693. :class="{
  1694. rightW:
  1695. w.userid == userid || tType == 1 || tType == 4,
  1696. }">
  1697. 评分
  1698. </div>
  1699. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1700. " @click.stop="deleteWorks(w.wid)" alt />
  1701. </div>
  1702. <div class="comment" style="min-width: 200px">
  1703. <div class="worksName">
  1704. <div>{{ w.sName }}</div>
  1705. </div>
  1706. <div class="commentList">
  1707. <div class="commentList">
  1708. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1709. ">
  1710. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1711. </div>
  1712. <div>{{ w.likesCount }}</div>
  1713. </div>
  1714. <div class="commentList" style="margin-right: 15px">
  1715. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1716. <img src="../../assets/icon/comment/comment.png" alt="" />
  1717. </div>
  1718. <div>{{ w.commentCount }}</div>
  1719. </div>
  1720. </div>
  1721. </div>
  1722. </div>
  1723. </div>
  1724. </div>
  1725. <div v-if="tType &&
  1726. ((tType == 2 && sIsOpen == true) ||
  1727. tType == 1 ||
  1728. tType == 4) &&
  1729. tool.tool.indexOf(3) != -1
  1730. " class="worksBox">
  1731. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1732. worksTeacher[toolIndex].length > 0
  1733. ">
  1734. <div class="worksTop">
  1735. <div>作业预览</div>
  1736. </div>
  1737. </div>
  1738. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1739. worksTeacher[toolIndex].length > 0
  1740. ">
  1741. <div class="works" style="
  1742. width: 200px;
  1743. height: 140px;
  1744. margin: 10px 10px 10px 0;
  1745. border-radius: 15px;
  1746. box-shadow: 0 0 6px 1px #dfdada;
  1747. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1748. :key="wIndex">
  1749. <!-- @click="previewImg(w.works)" -->
  1750. <div class="workImg">
  1751. <img :src="w.works" @click="previewImg(w.works)" alt />
  1752. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1753. rightW:
  1754. w.userid == userid || tType == 1 || tType == 4,
  1755. }">
  1756. {{ JSON.parse(w.score).wScore }}分
  1757. </div>
  1758. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1759. :class="{
  1760. rightW:
  1761. w.userid == userid || tType == 1 || tType == 4,
  1762. }">
  1763. 评分
  1764. </div>
  1765. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1766. " @click.stop="deleteWorks(w.wid)" alt />
  1767. </div>
  1768. <div class="comment" style="min-width: 200px">
  1769. <div class="worksName">
  1770. <div>{{ w.sName }}</div>
  1771. </div>
  1772. <div class="commentList">
  1773. <div class="commentList">
  1774. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1775. ">
  1776. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1777. </div>
  1778. <div>{{ w.likesCount }}</div>
  1779. </div>
  1780. <div class="commentList" style="margin-right: 15px">
  1781. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1782. <img src="../../assets/icon/comment/comment.png" alt="" />
  1783. </div>
  1784. <div>{{ w.commentCount }}</div>
  1785. </div>
  1786. </div>
  1787. </div>
  1788. </div>
  1789. </div>
  1790. </div>
  1791. <div v-if="tType &&
  1792. ((tType == 2 && sIsOpen == true) ||
  1793. tType == 1 ||
  1794. tType == 4) &&
  1795. tool.tool.indexOf(6) != -1
  1796. " class="worksBox">
  1797. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1798. worksTeacher[toolIndex].length > 0
  1799. ">
  1800. <div class="worksTop">
  1801. <div>作业预览</div>
  1802. </div>
  1803. </div>
  1804. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1805. worksTeacher[toolIndex].length > 0
  1806. ">
  1807. <div class="works" style="
  1808. width: 200px;
  1809. height: 140px;
  1810. margin: 10px 10px 10px 0;
  1811. border-radius: 15px;
  1812. box-shadow: 0 0 6px 1px #dfdada;
  1813. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1814. :key="wIndex">
  1815. <!-- @click="previewImg(w.works)" -->
  1816. <div class="workImg">
  1817. <img :src="w.works" @click="previewImg(w.works)" alt />
  1818. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1819. rightW:
  1820. w.userid == userid || tType == 1 || tType == 4,
  1821. }">
  1822. {{ JSON.parse(w.score).wScore }}分
  1823. </div>
  1824. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1825. :class="{
  1826. rightW:
  1827. w.userid == userid || tType == 1 || tType == 4,
  1828. }">
  1829. 评分
  1830. </div>
  1831. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1832. " @click.stop="deleteWorks(w.wid)" alt />
  1833. </div>
  1834. <div class="comment" style="min-width: 200px">
  1835. <div class="worksName">
  1836. <div>{{ w.sName }}</div>
  1837. </div>
  1838. <div class="commentList">
  1839. <div class="commentList">
  1840. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1841. ">
  1842. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1843. </div>
  1844. <div>{{ w.likesCount }}</div>
  1845. </div>
  1846. <div class="commentList" style="margin-right: 15px">
  1847. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1848. <img src="../../assets/icon/comment/comment.png" alt="" />
  1849. </div>
  1850. <div>{{ w.commentCount }}</div>
  1851. </div>
  1852. </div>
  1853. </div>
  1854. </div>
  1855. </div>
  1856. </div>
  1857. <div v-if="tType &&
  1858. ((tType == 2 && sIsOpen == true) ||
  1859. tType == 1 ||
  1860. tType == 4) &&
  1861. tool.tool.indexOf(7) != -1
  1862. " class="worksBox">
  1863. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1864. worksTeacher[toolIndex].length > 0
  1865. ">
  1866. <div class="worksTop">
  1867. <div>作业预览</div>
  1868. </div>
  1869. </div>
  1870. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1871. worksTeacher[toolIndex].length > 0
  1872. ">
  1873. <div class="works" style="
  1874. width: 200px;
  1875. height: 140px;
  1876. margin: 10px 10px 10px 0;
  1877. border-radius: 15px;
  1878. box-shadow: 0 0 6px 1px #dfdada;
  1879. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1880. :key="wIndex">
  1881. <!-- @click="previewImg(w.works)" -->
  1882. <div class="workImg">
  1883. <img :src="w.works" @click="previewImg(w.works)" alt />
  1884. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  1885. rightW:
  1886. w.userid == userid || tType == 1 || tType == 4,
  1887. }">
  1888. {{ JSON.parse(w.score).wScore }}分
  1889. </div>
  1890. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  1891. :class="{
  1892. rightW:
  1893. w.userid == userid || tType == 1 || tType == 4,
  1894. }">
  1895. 评分
  1896. </div>
  1897. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1898. " @click.stop="deleteWorks(w.wid)" alt />
  1899. </div>
  1900. <div class="comment" style="min-width: 200px">
  1901. <div class="worksName">
  1902. <div>{{ w.sName }}</div>
  1903. </div>
  1904. <div class="commentList">
  1905. <div class="commentList">
  1906. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1907. ">
  1908. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1909. </div>
  1910. <div>{{ w.likesCount }}</div>
  1911. </div>
  1912. <div class="commentList" style="margin-right: 15px">
  1913. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  1914. <img src="../../assets/icon/comment/comment.png" alt="" />
  1915. </div>
  1916. <div>{{ w.commentCount }}</div>
  1917. </div>
  1918. </div>
  1919. </div>
  1920. </div>
  1921. </div>
  1922. </div>
  1923. <div v-if="tType &&
  1924. ((tType == 2 && sIsOpen == true) ||
  1925. tType == 1 ||
  1926. tType == 4) &&
  1927. tool.tool.indexOf(26) != -1
  1928. " class="worksBox">
  1929. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1930. worksTeacher[toolIndex].length > 0
  1931. ">
  1932. <div class="worksTop">
  1933. <div>作业预览</div>
  1934. </div>
  1935. </div>
  1936. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1937. worksTeacher[toolIndex].length > 0
  1938. ">
  1939. <div class="works" style="width: 240px; height: 140px; overflow: hidden"
  1940. v-for="(w, wIndex) in worksTeacher[toolIndex]" :key="wIndex"
  1941. :class="w.type == 1 ? 'isTypeOne' : ''">
  1942. <div class="workImg" v-if="w.type == 0">
  1943. <img :src="w.works" @click="previewImg(w.works)" alt />
  1944. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1945. " @click.stop="deleteWorks(w.wid)" alt />
  1946. </div>
  1947. <div class="workImg" v-if="w.type == 1">
  1948. <img :src="word" @click="openFile(w.works)" alt />
  1949. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1950. " @click.stop="deleteWorks(w.wid)" alt />
  1951. </div>
  1952. <div class="worksName">
  1953. <div>{{ w.sName }}</div>
  1954. </div>
  1955. </div>
  1956. </div>
  1957. </div>
  1958. <div v-if="tType &&
  1959. ((tType == 2 && sIsOpen == true) ||
  1960. tType == 1 ||
  1961. tType == 4) &&
  1962. tool.tool.indexOf(40) != -1
  1963. " class="worksBox">
  1964. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  1965. worksTeacher[toolIndex].length > 0
  1966. ">
  1967. <div class="worksTop">
  1968. <div>作业预览</div>
  1969. </div>
  1970. </div>
  1971. <div class="worksDetailBox" v-if="worksTeacher.length &&
  1972. worksTeacher[toolIndex].length > 0
  1973. ">
  1974. <div class="works" style="
  1975. width: 200px;
  1976. height: 140px;
  1977. margin: 10px 10px 10px 0;
  1978. border-radius: 15px;
  1979. box-shadow: 0 0 6px 1px #dfdada;
  1980. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  1981. :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  1982. <div class="workImg">
  1983. <img src="../../assets/icon/works/noImg.png" @click="openPj(w.works, toolIndex)" alt />
  1984. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  1985. " @click.stop="deleteWorks(w.wid)" alt />
  1986. </div>
  1987. <div class="comment" style="min-width: 200px">
  1988. <div class="worksName">
  1989. <div>{{ w.sName }}</div>
  1990. </div>
  1991. <div class="commentList">
  1992. <div class="commentList">
  1993. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  1994. ">
  1995. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  1996. </div>
  1997. <div>{{ w.likesCount }}</div>
  1998. </div>
  1999. <div class="commentList" style="margin-right: 15px">
  2000. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2001. <img src="../../assets/icon/comment/comment.png" alt="" />
  2002. </div>
  2003. <div>{{ w.commentCount }}</div>
  2004. </div>
  2005. </div>
  2006. </div>
  2007. </div>
  2008. </div>
  2009. </div>
  2010. <div v-if="tType &&
  2011. ((tType == 2 && sIsOpen == true) ||
  2012. tType == 1 ||
  2013. tType == 4) &&
  2014. tool.tool.indexOf(41) != -1
  2015. " class="worksBox">
  2016. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  2017. worksTeacher[toolIndex].length > 0
  2018. ">
  2019. <div class="worksTop">
  2020. <div>作业预览</div>
  2021. </div>
  2022. </div>
  2023. <div class="worksDetailBox" v-if="worksTeacher.length &&
  2024. worksTeacher[toolIndex].length > 0
  2025. ">
  2026. <div v-for="(w, wIndex) in worksTeacher[toolIndex]" :key="wIndex" class="isWorksName"
  2027. @click="openXz(w, toolIndex)">
  2028. {{ w.sName }}
  2029. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png"
  2030. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  2031. </div>
  2032. </div>
  2033. </div>
  2034. <div v-if="tType &&
  2035. ((tType == 2 && sIsOpen == true) ||
  2036. tType == 1 ||
  2037. tType == 4) &&
  2038. tool.tool.indexOf(47) != -1
  2039. " class="worksBox">
  2040. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  2041. worksTeacher[toolIndex].length > 0
  2042. ">
  2043. <div class="worksTop">
  2044. <div>作业预览</div>
  2045. </div>
  2046. </div>
  2047. <div class="worksDetailBox" v-if="worksTeacher.length &&
  2048. worksTeacher[toolIndex].length > 0
  2049. ">
  2050. <!-- @click="openXz(w, toolIndex)" -->
  2051. <div v-for="(w, wIndex) in worksTeacher[toolIndex]" :key="wIndex" class="isWorksName"
  2052. @click="openSen(w, toolIndex)">
  2053. {{ w.sName }}
  2054. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png"
  2055. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  2056. </div>
  2057. </div>
  2058. </div>
  2059. <div v-if="tType &&
  2060. ((tType == 2 && sIsOpen == true) ||
  2061. tType == 1 ||
  2062. tType == 4) &&
  2063. tool.tool.indexOf(48) != -1
  2064. " class="worksBox">
  2065. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  2066. worksTeacher[toolIndex].length > 0
  2067. ">
  2068. <div class="worksTop">
  2069. <div>作业预览</div>
  2070. </div>
  2071. </div>
  2072. <div class="worksDetailBox" v-if="worksTeacher.length &&
  2073. worksTeacher[toolIndex].length > 0
  2074. ">
  2075. <div class="works" style="
  2076. width: 200px;
  2077. height: 140px;
  2078. margin: 10px 10px 10px 0;
  2079. border-radius: 15px;
  2080. box-shadow: 0 0 6px 1px #dfdada;
  2081. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  2082. :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  2083. <div class="workImg">
  2084. <img :src="word" @click="openTable(w)" alt />
  2085. <!-- @click="openFile(w.works)" -->
  2086. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2087. rightW:
  2088. w.userid == userid ||
  2089. tType == 1 ||
  2090. tType == 4 ||
  2091. w.ateacher == userid,
  2092. }">
  2093. {{ JSON.parse(w.score).wScore }}分
  2094. </div>
  2095. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2096. :class="{
  2097. rightW:
  2098. w.userid == userid ||
  2099. tType == 1 ||
  2100. tType == 4 ||
  2101. w.ateacher == userid,
  2102. }">
  2103. 评分
  2104. </div>
  2105. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2106. " @click.stop="deleteWorks(w.wid)" alt />
  2107. </div>
  2108. <div class="comment" style="min-width: 200px">
  2109. <div class="worksName">
  2110. <div>{{ w.sName }}</div>
  2111. </div>
  2112. <div class="commentList">
  2113. <div class="commentList">
  2114. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  2115. ">
  2116. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  2117. </div>
  2118. <div>{{ w.likesCount }}</div>
  2119. </div>
  2120. <div class="commentList" style="margin-right: 15px">
  2121. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2122. <img src="../../assets/icon/comment/comment.png" alt="" />
  2123. </div>
  2124. <div>{{ w.commentCount }}</div>
  2125. </div>
  2126. </div>
  2127. </div>
  2128. </div>
  2129. </div>
  2130. </div>
  2131. <div v-if="tType &&
  2132. ((tType == 2 && sIsOpen == true) ||
  2133. tType == 1 ||
  2134. tType == 4) &&
  2135. tool.tool.indexOf(52) != -1
  2136. " class="worksBox">
  2137. <div class="zuoyeYulan" v-if="worksTeacher.length &&
  2138. worksTeacher[toolIndex].length > 0
  2139. ">
  2140. <div class="worksTop">
  2141. <div>作业预览</div>
  2142. </div>
  2143. </div>
  2144. <div class="worksDetailBox" v-if="worksTeacher.length &&
  2145. worksTeacher[toolIndex].length > 0
  2146. ">
  2147. <div class="works" style="
  2148. width: 200px;
  2149. height: 140px;
  2150. margin: 10px 10px 10px 0;
  2151. border-radius: 15px;
  2152. box-shadow: 0 0 6px 1px #dfdada;
  2153. " v-for="(w, wIndex) in worksTeacher[toolIndex]"
  2154. :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  2155. <div class="workImg">
  2156. <img :src="word" @click="openWord(w)" alt />
  2157. <!-- @click="openFile(w.works)" -->
  2158. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2159. rightW:
  2160. w.userid == userid ||
  2161. tType == 1 ||
  2162. tType == 4 ||
  2163. w.ateacher == userid,
  2164. }">
  2165. {{ JSON.parse(w.score).wScore }}分
  2166. </div>
  2167. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2168. :class="{
  2169. rightW:
  2170. w.userid == userid ||
  2171. tType == 1 ||
  2172. tType == 4 ||
  2173. w.ateacher == userid,
  2174. }">
  2175. 评分
  2176. </div>
  2177. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2178. " @click.stop="deleteWorks(w.wid)" alt />
  2179. </div>
  2180. <div class="comment" style="min-width: 200px">
  2181. <div class="worksName">
  2182. <div>{{ w.sName }}</div>
  2183. </div>
  2184. <div class="commentList">
  2185. <div class="commentList">
  2186. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  2187. ">
  2188. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  2189. </div>
  2190. <div>{{ w.likesCount }}</div>
  2191. </div>
  2192. <div class="commentList" style="margin-right: 15px">
  2193. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2194. <img src="../../assets/icon/comment/comment.png" alt="" />
  2195. </div>
  2196. <div>{{ w.commentCount }}</div>
  2197. </div>
  2198. </div>
  2199. </div>
  2200. </div>
  2201. </div>
  2202. </div>
  2203. </div>
  2204. </div>
  2205. <div class="vedioBox">
  2206. <div v-if="tType &&
  2207. ((tType == 2 && sIsOpen == true) ||
  2208. tType == 1 ||
  2209. tType == 4) &&
  2210. tool.tool.indexOf(4) != -1 && worksStudent.length &&
  2211. worksStudent[toolIndex].length &&
  2212. (tool.askJson[0].answer ||
  2213. tool.askJson[0].answer === 0) &&
  2214. checkJson[toolIndex].length
  2215. " class="xuan_right_box">
  2216. <div class="tool_right_box" v-for="(item, index) in tool.askJson" :key="index">
  2217. <div>
  2218. <span>{{ index + 1 + "、" + item.askstitle }}</span>
  2219. </div>
  2220. <div class="right_box_xuan">
  2221. <span>正确率</span>
  2222. <span>{{
  2223. (checkJson[toolIndex][index].right
  2224. ? checkJson[toolIndex][index].right
  2225. : 0) + "%"
  2226. }}</span>
  2227. </div>
  2228. </div>
  2229. </div>
  2230. <div class="xuan_right_box" style="background: unset" v-if="tType &&
  2231. ((tType == 2 && sIsOpen == true) ||
  2232. tType == 1 ||
  2233. tType == 4) &&
  2234. tool.tool.indexOf(4) != -1 && worksStudent.length &&
  2235. worksStudent[toolIndex].length
  2236. ">
  2237. <AskStatic v-if="worksStudent.length &&
  2238. worksStudent[toolIndex].length > 0
  2239. " :askJSON="tool" :checkJson="checkJson[toolIndex]"></AskStatic>
  2240. </div>
  2241. <div v-if="tType &&
  2242. ((tType == 2 && sIsOpen == true) ||
  2243. tType == 1 ||
  2244. tType == 4) &&
  2245. tool.tool.indexOf(45) != -1 && worksStudent.length &&
  2246. worksStudent[toolIndex].length &&
  2247. (tool.testJson.testJson[0].answer ||
  2248. tool.testJson.testJson[0].answer === 0) &&
  2249. checkJson[toolIndex].length
  2250. " class="xuan_right_box">
  2251. <div class="tool_right_box" v-for="(item, index) in tool.testJson.testJson" :key="index">
  2252. <div>
  2253. <span>{{ index + 1 + "、" + item.teststitle }}</span>
  2254. </div>
  2255. <div class="right_box_xuan">
  2256. <span>正确率</span>
  2257. <span>{{
  2258. (checkJson[toolIndex][index].right
  2259. ? checkJson[toolIndex][index].right
  2260. : 0) + "%"
  2261. }}</span>
  2262. </div>
  2263. </div>
  2264. </div>
  2265. <div class="xuan_right_box" style="background: unset" v-if="tType &&
  2266. ((tType == 2 && sIsOpen == true) ||
  2267. tType == 1 ||
  2268. tType == 4) &&
  2269. tool.tool.indexOf(45) != -1 && worksStudent.length &&
  2270. worksStudent[toolIndex].length
  2271. ">
  2272. <AskStatic2 v-if="worksStudent.length &&
  2273. worksStudent[toolIndex].length > 0
  2274. " :askJSON="tool" :checkJson="checkJson[toolIndex]"></AskStatic2>
  2275. </div>
  2276. <div v-if="tType &&
  2277. ((tType == 2 && sIsOpen == true) ||
  2278. tType == 1 ||
  2279. tType == 4) &&
  2280. tool.tool.indexOf(41) != -1
  2281. ">
  2282. <AnswerData2 v-if="worksStudent.length &&
  2283. worksStudent[toolIndex].length > 0
  2284. " :problemJson="tool.selectJson.answer" :people="worksStudent[toolIndex]"></AnswerData2>
  2285. </div>
  2286. <div v-if="tType &&
  2287. ((tType == 2 && sIsOpen == true) ||
  2288. tType == 1 ||
  2289. tType == 4) &&
  2290. tool.tool.indexOf(47) != -1
  2291. ">
  2292. <AnswerData v-if="checkJson[toolIndex].length &&
  2293. (tool.sentenceList || tool.sentenceList.length > 0)
  2294. " :people="checkJson[toolIndex]"></AnswerData>
  2295. </div>
  2296. </div>
  2297. <div class="vedioBox" v-if="noWorksS[toolIndex].length && arrayToArray(tool.tool, isWorkTool).length && false">
  2298. <div class="queTop" style="
  2299. font-size: 25px;
  2300. padding: 15px 0 15px 30px;
  2301. font-weight: bold;
  2302. ">
  2303. 学生工作区
  2304. </div>
  2305. <div class="tool_work_box">
  2306. <div v-if="tType &&
  2307. ((tType == 2 && sIsOpen == true) ||
  2308. tType == 1 ||
  2309. tType == 4) &&
  2310. tool.tool.indexOf(16) != -1
  2311. " class="worksBox">
  2312. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2313. worksStudent2[toolIndex].length > 0
  2314. ">
  2315. <div class="worksTop">
  2316. <div>作业预览</div>
  2317. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2318. isCloseList[toolIndex].isClose == 0
  2319. ">
  2320. 收缩
  2321. </div>
  2322. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2323. 展开
  2324. </div>
  2325. </div>
  2326. </div>
  2327. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2328. worksStudent2[toolIndex].length > 0
  2329. ">
  2330. <div class="works" style="
  2331. width: 200px;
  2332. height: 140px;
  2333. margin: 10px 10px 10px 0;
  2334. border-radius: 15px;
  2335. box-shadow: 0 0 6px 1px #dfdada;
  2336. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  2337. 0
  2338. ? worksStudent2[toolIndex]
  2339. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex"
  2340. :class="w.type == 1 ? 'isTypeOne' : ''">
  2341. <div class="workImg" v-if="w.type == 0">
  2342. <!-- @click="commentOther(w, toolIndex, wIndex)" -->
  2343. <img :src="w.works" @click="previewImg(w.works)" alt />
  2344. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2345. rightW:
  2346. w.userid == userid ||
  2347. tType == 1 ||
  2348. tType == 4 ||
  2349. w.ateacher == userid,
  2350. }">
  2351. {{ JSON.parse(w.score).wScore }}分
  2352. </div>
  2353. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2354. :class="{
  2355. rightW:
  2356. w.userid == userid ||
  2357. tType == 1 ||
  2358. tType == 4 ||
  2359. w.ateacher == userid,
  2360. }">
  2361. 评分
  2362. </div>
  2363. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2364. " @click.stop="deleteWorks(w.wid)" alt />
  2365. </div>
  2366. <div class="workImg" v-if="w.type == 1">
  2367. <img :src="word" @click="openFile(w.works)" alt />
  2368. <!-- @click="openFile(w.works)" -->
  2369. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2370. rightW:
  2371. w.userid == userid ||
  2372. tType == 1 ||
  2373. tType == 4 ||
  2374. w.ateacher == userid,
  2375. }">
  2376. {{ JSON.parse(w.score).wScore }}分
  2377. </div>
  2378. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2379. :class="{
  2380. rightW:
  2381. w.userid == userid ||
  2382. tType == 1 ||
  2383. tType == 4 ||
  2384. w.ateacher == userid,
  2385. }">
  2386. 评分
  2387. </div>
  2388. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2389. " @click.stop="deleteWorks(w.wid)" alt />
  2390. </div>
  2391. <div class="workImg" v-if="w.type == 3">
  2392. <img style="cursor: pointer" :src="video" @click="openVideo(w)" alt />
  2393. <!-- @click="openVideo(w.works)" -->
  2394. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2395. rightW:
  2396. w.userid == userid ||
  2397. tType == 1 ||
  2398. tType == 4 ||
  2399. w.ateacher == userid,
  2400. }">
  2401. {{ JSON.parse(w.score).wScore }}分
  2402. </div>
  2403. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2404. :class="{
  2405. rightW:
  2406. w.userid == userid ||
  2407. tType == 1 ||
  2408. tType == 4 ||
  2409. w.ateacher == userid,
  2410. }">
  2411. 评分
  2412. </div>
  2413. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2414. " @click.stop="deleteWorks(w.wid)" alt />
  2415. </div>
  2416. <div class="workImg" v-if="w.type == 12">
  2417. <img style="cursor: pointer" :src="word2" @click="downloadFile(w.works)" alt />
  2418. <!-- @click="openVideo(w.works)" -->
  2419. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2420. rightW:
  2421. w.userid == userid ||
  2422. tType == 1 ||
  2423. tType == 4 ||
  2424. w.ateacher == userid,
  2425. }">
  2426. {{ JSON.parse(w.score).wScore }}分
  2427. </div>
  2428. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2429. :class="{
  2430. rightW:
  2431. w.userid == userid ||
  2432. tType == 1 ||
  2433. tType == 4 ||
  2434. w.ateacher == userid,
  2435. }">
  2436. 评分
  2437. </div>
  2438. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2439. " @click.stop="deleteWorks(w.wid)" alt />
  2440. </div>
  2441. <div class="comment" style="min-width: 200px">
  2442. <div class="worksName">
  2443. <div>{{ w.sName }}</div>
  2444. </div>
  2445. <div class="commentList">
  2446. <div class="commentList">
  2447. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  2448. ">
  2449. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  2450. </div>
  2451. <div>{{ w.likesCount }}</div>
  2452. </div>
  2453. <div class="commentList" style="margin-right: 15px">
  2454. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2455. <img src="../../assets/icon/comment/comment.png" alt="" />
  2456. </div>
  2457. <div>{{ w.commentCount }}</div>
  2458. </div>
  2459. </div>
  2460. </div>
  2461. </div>
  2462. </div>
  2463. <div class="noWorksS">
  2464. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  2465. @click="teacherWorkSubmit(16, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  2466. {{ s.student }}
  2467. </div>
  2468. </div>
  2469. </div>
  2470. <div v-if="tType &&
  2471. ((tType == 2 && sIsOpen == true) ||
  2472. tType == 1 ||
  2473. tType == 4) &&
  2474. tool.tool.indexOf(32) != -1
  2475. " class="worksBox">
  2476. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2477. worksStudent2[toolIndex].length > 0
  2478. ">
  2479. <div class="worksTop">
  2480. <div>作业预览</div>
  2481. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2482. isCloseList[toolIndex].isClose == 0
  2483. ">
  2484. 收缩
  2485. </div>
  2486. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2487. 展开
  2488. </div>
  2489. </div>
  2490. </div>
  2491. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2492. worksStudent2[toolIndex].length > 0
  2493. ">
  2494. <div class="works" style="
  2495. width: 200px;
  2496. height: 140px;
  2497. margin: 10px 10px 10px 0;
  2498. border-radius: 15px;
  2499. box-shadow: 0 0 6px 1px #dfdada;
  2500. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  2501. 0
  2502. ? worksStudent2[toolIndex]
  2503. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex"
  2504. :class="w.type == 1 ? 'isTypeOne' : ''">
  2505. <div class="workImg">
  2506. <img :src="word2" @click="downloadFile(w.works)" alt />
  2507. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2508. rightW:
  2509. w.userid == userid ||
  2510. tType == 1 ||
  2511. tType == 4 ||
  2512. w.ateacher == userid,
  2513. }">
  2514. {{ JSON.parse(w.score).wScore }}分
  2515. </div>
  2516. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2517. :class="{
  2518. rightW:
  2519. w.userid == userid ||
  2520. tType == 1 ||
  2521. tType == 4 ||
  2522. w.ateacher == userid,
  2523. }">
  2524. 评分
  2525. </div>
  2526. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2527. " @click.stop="deleteWorks(w.wid)" alt />
  2528. </div>
  2529. <div class="comment" style="min-width: 200px">
  2530. <div class="worksName">
  2531. <div>{{ w.sName }}</div>
  2532. </div>
  2533. <div class="commentList">
  2534. <div class="commentList">
  2535. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  2536. ">
  2537. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  2538. </div>
  2539. <div>{{ w.likesCount }}</div>
  2540. </div>
  2541. <div class="commentList" style="margin-right: 15px">
  2542. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2543. <img src="../../assets/icon/comment/comment.png" alt="" />
  2544. </div>
  2545. <div>{{ w.commentCount }}</div>
  2546. </div>
  2547. </div>
  2548. </div>
  2549. </div>
  2550. </div>
  2551. <div class="noWorksS">
  2552. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  2553. @click="teacherWorkSubmit(32, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  2554. {{ s.student }}
  2555. </div>
  2556. </div>
  2557. </div>
  2558. <div v-if="tType &&
  2559. ((tType == 2 && sIsOpen == true) ||
  2560. tType == 1 ||
  2561. tType == 4) &&
  2562. tool.tool.indexOf(57) != -1
  2563. " class="worksBox">
  2564. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2565. worksStudent2[toolIndex].length > 0
  2566. ">
  2567. <div class="worksTop">
  2568. <div>作业预览</div>
  2569. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2570. isCloseList[toolIndex].isClose == 0
  2571. ">
  2572. 收缩
  2573. </div>
  2574. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2575. 展开
  2576. </div>
  2577. </div>
  2578. </div>
  2579. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2580. worksStudent2[toolIndex].length > 0
  2581. ">
  2582. <div class="works" style="
  2583. width: 200px;
  2584. height: 140px;
  2585. margin: 10px 10px 10px 0;
  2586. border-radius: 15px;
  2587. box-shadow: 0 0 6px 1px #dfdada;
  2588. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  2589. 0
  2590. ? worksStudent2[toolIndex]
  2591. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex"
  2592. :class="w.type == 1 ? 'isTypeOne' : ''">
  2593. <div class="workImg">
  2594. <img :src="word2" @click="downloadFile(w.works)" v-if="w.type == 12" alt />
  2595. <img :src="word2" @click="openCocoPi(57, toolIndex, w.userid, w.sName)" v-else-if="w.type == 15"
  2596. alt />
  2597. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2598. rightW:
  2599. w.userid == userid ||
  2600. tType == 1 ||
  2601. tType == 4 ||
  2602. w.ateacher == userid,
  2603. }">
  2604. {{ JSON.parse(w.score).wScore }}分
  2605. </div>
  2606. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2607. :class="{
  2608. rightW:
  2609. w.userid == userid ||
  2610. tType == 1 ||
  2611. tType == 4 ||
  2612. w.ateacher == userid,
  2613. }">
  2614. 评分
  2615. </div>
  2616. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2617. " @click.stop="deleteWorks(w.wid)" alt />
  2618. </div>
  2619. <div class="comment" style="min-width: 200px">
  2620. <div class="worksName">
  2621. <div>{{ w.sName }}</div>
  2622. </div>
  2623. <div class="commentList">
  2624. <div class="commentList">
  2625. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  2626. ">
  2627. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  2628. </div>
  2629. <div>{{ w.likesCount }}</div>
  2630. </div>
  2631. <div class="commentList" style="margin-right: 15px">
  2632. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2633. <img src="../../assets/icon/comment/comment.png" alt="" />
  2634. </div>
  2635. <div>{{ w.commentCount }}</div>
  2636. </div>
  2637. </div>
  2638. </div>
  2639. </div>
  2640. </div>
  2641. <div class="noWorksS">
  2642. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  2643. @click="teacherWorkSubmit(57, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  2644. {{ s.student }}
  2645. </div>
  2646. </div>
  2647. </div>
  2648. <div v-if="tool.tool.indexOf(50) != -1" class="worksBox">
  2649. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2650. worksStudent2[toolIndex].length > 0
  2651. ">
  2652. <span>作业预览</span>
  2653. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2654. isCloseList[toolIndex].isClose == 0
  2655. ">
  2656. 收缩
  2657. </div>
  2658. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2659. 展开
  2660. </div>
  2661. </div>
  2662. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2663. worksStudent2[toolIndex].length > 0
  2664. ">
  2665. <div class="works" style="
  2666. width: 200px;
  2667. height: 140px;
  2668. margin: 10px 10px 10px 0;
  2669. border-radius: 15px;
  2670. box-shadow: 0 0 6px 1px #dfdada;
  2671. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  2672. 0
  2673. ? worksStudent2[toolIndex]
  2674. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex"
  2675. :class="w.type == 1 ? 'isTypeOne' : ''">
  2676. <div class="workImg" v-if="w.type == 0">
  2677. <!-- @click="commentOther(w, toolIndex, wIndex)" -->
  2678. <img :src="w.works" @click="previewImg(w.works)" alt />
  2679. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2680. rightW:
  2681. w.userid == userid ||
  2682. tType == 1 ||
  2683. tType == 4 ||
  2684. w.ateacher == userid,
  2685. }">
  2686. {{ JSON.parse(w.score).wScore }}分
  2687. </div>
  2688. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2689. :class="{
  2690. rightW:
  2691. w.userid == userid ||
  2692. tType == 1 ||
  2693. tType == 4 ||
  2694. w.ateacher == userid,
  2695. }">
  2696. 评分
  2697. </div>
  2698. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2699. " @click.stop="deleteWorks(w.wid)" alt />
  2700. </div>
  2701. <div class="workImg" style="cursor: pointer" v-if="w.type == 1">
  2702. <img :src="word" @click="openFile(w.works)" alt />
  2703. <!-- @click="openFile(w.works)" -->
  2704. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2705. rightW:
  2706. w.userid == userid ||
  2707. tType == 1 ||
  2708. tType == 4 ||
  2709. w.ateacher == userid,
  2710. }">
  2711. {{ JSON.parse(w.score).wScore }}分
  2712. </div>
  2713. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2714. :class="{
  2715. rightW:
  2716. w.userid == userid ||
  2717. tType == 1 ||
  2718. tType == 4 ||
  2719. w.ateacher == userid,
  2720. }">
  2721. 评分
  2722. </div>
  2723. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2724. " @click.stop="deleteWorks(w.wid)" alt />
  2725. </div>
  2726. <div class="workImg" v-if="w.type == 3">
  2727. <img style="cursor: pointer" :src="video" @click="openVideo(w)" alt />
  2728. <!-- @click="openVideo(w.works)" -->
  2729. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2730. rightW:
  2731. w.userid == userid ||
  2732. tType == 1 ||
  2733. tType == 4 ||
  2734. w.ateacher == userid,
  2735. }">
  2736. {{ JSON.parse(w.score).wScore }}分
  2737. </div>
  2738. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2739. :class="{
  2740. rightW:
  2741. w.userid == userid ||
  2742. tType == 1 ||
  2743. tType == 4 ||
  2744. w.ateacher == userid,
  2745. }">
  2746. 评分
  2747. </div>
  2748. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2749. " @click.stop="deleteWorks(w.wid)" alt />
  2750. </div>
  2751. <div class="comment" style="min-width: 200px">
  2752. <div class="worksName">
  2753. <div style="cursor: pointer" @click="openSname(w.sName, w.wid, toolIndex,w.userid)">
  2754. {{ w.sName }}
  2755. </div>
  2756. </div>
  2757. <div class="commentList">
  2758. <div class="commentList">
  2759. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  2760. ">
  2761. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  2762. </div>
  2763. <div>{{ w.likesCount }}</div>
  2764. </div>
  2765. <div class="commentList" style="margin-right: 15px">
  2766. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2767. <img src="../../assets/icon/comment/comment.png" alt="" />
  2768. </div>
  2769. <div>{{ w.commentCount }}</div>
  2770. </div>
  2771. </div>
  2772. </div>
  2773. </div>
  2774. </div>
  2775. <div class="noWorksS">
  2776. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  2777. @click="teacherWorkSubmit(50, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  2778. {{ s.student }}
  2779. </div>
  2780. </div>
  2781. </div>
  2782. <div v-if="tType &&
  2783. ((tType == 2 && sIsOpen == true) ||
  2784. tType == 1 ||
  2785. tType == 4) &&
  2786. tool.tool.indexOf(4) != -1
  2787. " class="worksBox">
  2788. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2789. worksStudent2[toolIndex].length > 0
  2790. ">
  2791. <div class="worksTop">
  2792. <div>作业预览</div>
  2793. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2794. isCloseList[toolIndex].isClose == 0
  2795. ">
  2796. 收缩
  2797. </div>
  2798. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2799. 展开
  2800. </div>
  2801. </div>
  2802. </div>
  2803. <div>
  2804. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2805. worksStudent2[toolIndex].length > 0
  2806. ">
  2807. <div v-for="(w, wIndex) in isCloseList[toolIndex]
  2808. .isClose == 0
  2809. ? worksStudent2[toolIndex]
  2810. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName" @click="openTools(4, toolIndex, taskCount, w.works, w.sName)
  2811. ">
  2812. {{ w.sName }}
  2813. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2814. " @click.stop="deleteWorks(w.wid)" alt />
  2815. </div>
  2816. </div>
  2817. </div>
  2818. <div class="noWorksS">
  2819. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  2820. @click="teacherWorkSubmit(4, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  2821. {{ s.student }}
  2822. </div>
  2823. </div>
  2824. </div>
  2825. <div v-if="tType &&
  2826. ((tType == 2 && sIsOpen == true) ||
  2827. tType == 1 ||
  2828. tType == 4) &&
  2829. tool.tool.indexOf(45) != -1
  2830. " class="worksBox">
  2831. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2832. worksStudent2[toolIndex].length > 0
  2833. ">
  2834. <div class="worksTop">
  2835. <div>作业预览</div>
  2836. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2837. isCloseList[toolIndex].isClose == 0
  2838. ">
  2839. 收缩
  2840. </div>
  2841. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2842. 展开
  2843. </div>
  2844. </div>
  2845. </div>
  2846. <div>
  2847. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2848. worksStudent2[toolIndex].length > 0
  2849. ">
  2850. <div v-for="(w, wIndex) in isCloseList[toolIndex]
  2851. .isClose == 0
  2852. ? worksStudent2[toolIndex]
  2853. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName" @click="openTools(
  2854. 45,
  2855. toolIndex,
  2856. taskCount,
  2857. w.works,
  2858. w.sName
  2859. )
  2860. ">
  2861. {{ w.sName }}
  2862. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2863. " @click.stop="deleteWorks(w.wid)" alt />
  2864. </div>
  2865. </div>
  2866. </div>
  2867. <div class="noWorksS">
  2868. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  2869. @click="teacherWorkSubmit(45, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  2870. {{ s.student }}
  2871. </div>
  2872. </div>
  2873. </div>
  2874. <div v-if="tType &&
  2875. ((tType == 2 && sIsOpen == true) ||
  2876. tType == 1 ||
  2877. tType == 4) &&
  2878. tool.tool.indexOf(15) != -1
  2879. " class="worksBox">
  2880. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2881. worksStudent2[toolIndex].length > 0
  2882. ">
  2883. <div class="worksTop">
  2884. <div>作业预览</div>
  2885. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2886. isCloseList[toolIndex].isClose == 0
  2887. ">
  2888. 收缩
  2889. </div>
  2890. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2891. 展开
  2892. </div>
  2893. </div>
  2894. </div>
  2895. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2896. worksStudent2[toolIndex].length > 0
  2897. ">
  2898. <div class="works" v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  2899. 0
  2900. ? worksStudent2[toolIndex]
  2901. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex">
  2902. <div class="workImg" style="
  2903. border-radius: 15px;
  2904. box-shadow: #eee 0px 0px 5px 5px;
  2905. ">
  2906. <!-- <img
  2907. src="../../assets/icon/works/noImg.png"
  2908. @click="openTools(15, toolIndex, taskCount, w.works)"
  2909. alt=""
  2910. />-->
  2911. <div class="answerBg" style="border-radius: 15px 15px 0 0"
  2912. @click="commentOther(w, toolIndex, wIndex)">
  2913. <!-- <div>{{ w.sName }}</div> -->
  2914. <div class="answerContent">
  2915. {{ JSON.parse(w.works)[0].answer }}
  2916. </div>
  2917. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  2918. rightW:
  2919. w.userid == userid ||
  2920. tType == 1 ||
  2921. tType == 4,
  2922. }">
  2923. {{ JSON.parse(w.score).wScore }}分
  2924. </div>
  2925. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  2926. :class="{
  2927. rightW:
  2928. w.userid == userid ||
  2929. tType == 1 ||
  2930. tType == 4,
  2931. }">
  2932. 评分
  2933. </div>
  2934. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  2935. " @click.stop="deleteWorks(w.wid)" alt />
  2936. </div>
  2937. <div class="comment">
  2938. <div class="worksName">
  2939. <div>{{ w.sName }}</div>
  2940. </div>
  2941. <div class="commentList">
  2942. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  2943. ">
  2944. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  2945. </div>
  2946. <div>{{ w.likesCount }}</div>
  2947. </div>
  2948. <div class="commentList" style="margin-right: 15px">
  2949. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  2950. <img src="../../assets/icon/comment/comment.png" alt="" />
  2951. </div>
  2952. <div>{{ w.commentCount }}</div>
  2953. </div>
  2954. </div>
  2955. </div>
  2956. </div>
  2957. </div>
  2958. <div class="noWorksS">
  2959. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  2960. @click="teacherWorkSubmit(15, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  2961. {{ s.student }}
  2962. </div>
  2963. </div>
  2964. </div>
  2965. <div v-if="tType &&
  2966. ((tType == 2 && sIsOpen == true) ||
  2967. tType == 1 ||
  2968. tType == 4) &&
  2969. tool.tool.indexOf(1) != -1
  2970. " class="worksBox">
  2971. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  2972. worksStudent2[toolIndex].length > 0
  2973. ">
  2974. <div class="worksTop">
  2975. <div>作业预览</div>
  2976. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  2977. isCloseList[toolIndex].isClose == 0
  2978. ">
  2979. 收缩
  2980. </div>
  2981. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  2982. 展开
  2983. </div>
  2984. </div>
  2985. </div>
  2986. <div class="worksDetailBox" v-if="worksStudent2.length &&
  2987. worksStudent2[toolIndex].length > 0
  2988. ">
  2989. <div class="works" style="
  2990. width: 200px;
  2991. height: 140px;
  2992. margin: 10px 10px 10px 0;
  2993. border-radius: 15px;
  2994. box-shadow: 0 0 6px 1px #dfdada;
  2995. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  2996. 0
  2997. ? worksStudent2[toolIndex]
  2998. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex">
  2999. <!-- @click="previewImg(w.works)" @click="commentOther(w, toolIndex, wIndex)"-->
  3000. <div class="workImg">
  3001. <img :src="w.works" @click="previewImg(w.works)" alt />
  3002. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3003. rightW:
  3004. w.userid == userid || tType == 1 || tType == 4,
  3005. }">
  3006. {{ JSON.parse(w.score).wScore }}分
  3007. </div>
  3008. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3009. :class="{
  3010. rightW:
  3011. w.userid == userid || tType == 1 || tType == 4,
  3012. }">
  3013. 评分
  3014. </div>
  3015. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3016. " @click.stop="deleteWorks(w.wid)" alt />
  3017. </div>
  3018. <div class="comment" style="min-width: 200px">
  3019. <div class="worksName">
  3020. <div>{{ w.sName }}</div>
  3021. </div>
  3022. <div class="commentList">
  3023. <div class="commentList">
  3024. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3025. ">
  3026. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3027. </div>
  3028. <div>{{ w.likesCount }}</div>
  3029. </div>
  3030. <div class="commentList" style="margin-right: 15px">
  3031. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3032. <img src="../../assets/icon/comment/comment.png" alt="" />
  3033. </div>
  3034. <div>{{ w.commentCount }}</div>
  3035. </div>
  3036. </div>
  3037. </div>
  3038. </div>
  3039. </div>
  3040. <div class="noWorksS">
  3041. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3042. @click="teacherWorkSubmit(1, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3043. {{ s.student }}
  3044. </div>
  3045. </div>
  3046. </div>
  3047. <div v-if="tType &&
  3048. ((tType == 2 && sIsOpen == true) ||
  3049. tType == 1 ||
  3050. tType == 4) &&
  3051. tool.tool.indexOf(3) != -1
  3052. " class="worksBox">
  3053. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3054. worksStudent2[toolIndex].length > 0
  3055. ">
  3056. <div class="worksTop">
  3057. <div>作业预览</div>
  3058. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3059. isCloseList[toolIndex].isClose == 0
  3060. ">
  3061. 收缩
  3062. </div>
  3063. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3064. 展开
  3065. </div>
  3066. </div>
  3067. </div>
  3068. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3069. worksStudent2[toolIndex].length > 0
  3070. ">
  3071. <div class="works" style="
  3072. width: 200px;
  3073. height: 140px;
  3074. margin: 10px 10px 10px 0;
  3075. border-radius: 15px;
  3076. box-shadow: 0 0 6px 1px #dfdada;
  3077. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3078. 0
  3079. ? worksStudent2[toolIndex]
  3080. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex">
  3081. <!-- @click="previewImg(w.works)" -->
  3082. <div class="workImg">
  3083. <img :src="w.works" @click="previewImg(w.works)" alt />
  3084. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3085. rightW:
  3086. w.userid == userid || tType == 1 || tType == 4,
  3087. }">
  3088. {{ JSON.parse(w.score).wScore }}分
  3089. </div>
  3090. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3091. :class="{
  3092. rightW:
  3093. w.userid == userid || tType == 1 || tType == 4,
  3094. }">
  3095. 评分
  3096. </div>
  3097. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3098. " @click.stop="deleteWorks(w.wid)" alt />
  3099. </div>
  3100. <div class="comment" style="min-width: 200px">
  3101. <div class="worksName">
  3102. <div>{{ w.sName }}</div>
  3103. </div>
  3104. <div class="commentList">
  3105. <div class="commentList">
  3106. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3107. ">
  3108. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3109. </div>
  3110. <div>{{ w.likesCount }}</div>
  3111. </div>
  3112. <div class="commentList" style="margin-right: 15px">
  3113. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3114. <img src="../../assets/icon/comment/comment.png" alt="" />
  3115. </div>
  3116. <div>{{ w.commentCount }}</div>
  3117. </div>
  3118. </div>
  3119. </div>
  3120. </div>
  3121. </div>
  3122. <div class="noWorksS">
  3123. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3124. @click="teacherWorkSubmit(3, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3125. {{ s.student }}
  3126. </div>
  3127. </div>
  3128. </div>
  3129. <div v-if="tType &&
  3130. ((tType == 2 && sIsOpen == true) ||
  3131. tType == 1 ||
  3132. tType == 4) &&
  3133. tool.tool.indexOf(6) != -1
  3134. " class="worksBox">
  3135. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3136. worksStudent2[toolIndex].length > 0
  3137. ">
  3138. <div class="worksTop">
  3139. <div>作业预览</div>
  3140. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  3141. isCloseList[toolIndex].isClose == 0
  3142. ">
  3143. 收缩
  3144. </div>
  3145. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3146. 展开
  3147. </div>
  3148. </div>
  3149. </div>
  3150. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3151. worksStudent2[toolIndex].length > 0
  3152. ">
  3153. <div class="works" style="
  3154. width: 200px;
  3155. height: 140px;
  3156. margin: 10px 10px 10px 0;
  3157. border-radius: 15px;
  3158. box-shadow: 0 0 6px 1px #dfdada;
  3159. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3160. 0
  3161. ? worksStudent2[toolIndex]
  3162. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex">
  3163. <!-- @click="previewImg(w.works)" -->
  3164. <div class="workImg">
  3165. <img :src="w.works" @click="previewImg(w.works)" alt />
  3166. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3167. rightW:
  3168. w.userid == userid || tType == 1 || tType == 4,
  3169. }">
  3170. {{ JSON.parse(w.score).wScore }}分
  3171. </div>
  3172. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3173. :class="{
  3174. rightW:
  3175. w.userid == userid || tType == 1 || tType == 4,
  3176. }">
  3177. 评分
  3178. </div>
  3179. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3180. " @click.stop="deleteWorks(w.wid)" alt />
  3181. </div>
  3182. <div class="comment" style="min-width: 200px">
  3183. <div class="worksName">
  3184. <div>{{ w.sName }}</div>
  3185. </div>
  3186. <div class="commentList">
  3187. <div class="commentList">
  3188. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3189. ">
  3190. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3191. </div>
  3192. <div>{{ w.likesCount }}</div>
  3193. </div>
  3194. <div class="commentList" style="margin-right: 15px">
  3195. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3196. <img src="../../assets/icon/comment/comment.png" alt="" />
  3197. </div>
  3198. <div>{{ w.commentCount }}</div>
  3199. </div>
  3200. </div>
  3201. </div>
  3202. </div>
  3203. </div>
  3204. <div class="noWorksS">
  3205. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3206. :class="{ isWork: s.type == '2' }">
  3207. {{ s.student }}
  3208. </div>
  3209. </div>
  3210. </div>
  3211. <div v-if="tType &&
  3212. ((tType == 2 && sIsOpen == true) ||
  3213. tType == 1 ||
  3214. tType == 4) &&
  3215. tool.tool.indexOf(7) != -1
  3216. " class="worksBox">
  3217. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3218. worksStudent2[toolIndex].length > 0
  3219. ">
  3220. <div class="worksTop">
  3221. <div>作业预览</div>
  3222. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3223. isCloseList[toolIndex].isClose == 0
  3224. ">
  3225. 收缩
  3226. </div>
  3227. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3228. 展开
  3229. </div>
  3230. </div>
  3231. </div>
  3232. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3233. worksStudent2[toolIndex].length > 0
  3234. ">
  3235. <div class="works" style="
  3236. width: 200px;
  3237. height: 140px;
  3238. margin: 10px 10px 10px 0;
  3239. border-radius: 15px;
  3240. box-shadow: 0 0 6px 1px #dfdada;
  3241. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3242. 0
  3243. ? worksStudent2[toolIndex]
  3244. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex">
  3245. <!-- @click="previewImg(w.works)" -->
  3246. <div class="workImg">
  3247. <img :src="w.works" @click="previewImg(w.works)" alt />
  3248. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3249. rightW:
  3250. w.userid == userid || tType == 1 || tType == 4,
  3251. }">
  3252. {{ JSON.parse(w.score).wScore }}分
  3253. </div>
  3254. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3255. :class="{
  3256. rightW:
  3257. w.userid == userid || tType == 1 || tType == 4,
  3258. }">
  3259. 评分
  3260. </div>
  3261. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3262. " @click.stop="deleteWorks(w.wid)" alt />
  3263. </div>
  3264. <div class="comment" style="min-width: 200px">
  3265. <div class="worksName">
  3266. <div>{{ w.sName }}</div>
  3267. </div>
  3268. <div class="commentList">
  3269. <div class="commentList">
  3270. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3271. ">
  3272. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3273. </div>
  3274. <div>{{ w.likesCount }}</div>
  3275. </div>
  3276. <div class="commentList" style="margin-right: 15px">
  3277. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3278. <img src="../../assets/icon/comment/comment.png" alt="" />
  3279. </div>
  3280. <div>{{ w.commentCount }}</div>
  3281. </div>
  3282. </div>
  3283. </div>
  3284. </div>
  3285. </div>
  3286. <div class="noWorksS">
  3287. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3288. @click="teacherWorkSubmit(7, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3289. {{ s.student }}
  3290. </div>
  3291. </div>
  3292. </div>
  3293. <div v-if="tType &&
  3294. ((tType == 2 && sIsOpen == true) ||
  3295. tType == 1 ||
  3296. tType == 4) &&
  3297. tool.tool.indexOf(26) != -1
  3298. " class="worksBox">
  3299. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3300. worksStudent2[toolIndex].length > 0
  3301. ">
  3302. <div class="worksTop">
  3303. <div>作业预览</div>
  3304. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3305. isCloseList[toolIndex].isClose == 0
  3306. ">
  3307. 收缩
  3308. </div>
  3309. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3310. 展开
  3311. </div>
  3312. </div>
  3313. </div>
  3314. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3315. worksStudent2[toolIndex].length > 0
  3316. ">
  3317. <div class="works" style="width: 240px; height: 140px; overflow: hidden" v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3318. 0
  3319. ? worksStudent2[toolIndex]
  3320. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  3321. <div class="workImg" v-if="w.type == 0">
  3322. <img :src="w.works" @click="previewImg(w.works)" alt />
  3323. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3324. " @click.stop="deleteWorks(w.wid)" alt />
  3325. </div>
  3326. <div class="workImg" v-if="w.type == 1">
  3327. <img :src="word" @click="openFile(w.works)" alt />
  3328. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3329. " @click.stop="deleteWorks(w.wid)" alt />
  3330. </div>
  3331. <div class="worksName">
  3332. <div>{{ w.sName }}</div>
  3333. </div>
  3334. </div>
  3335. </div>
  3336. <div class="noWorksS">
  3337. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3338. :class="{ isWork: s.type == '2' }">
  3339. {{ s.student }}
  3340. </div>
  3341. </div>
  3342. </div>
  3343. <div v-if="tType &&
  3344. ((tType == 2 && sIsOpen == true) ||
  3345. tType == 1 ||
  3346. tType == 4) &&
  3347. tool.tool.indexOf(40) != -1
  3348. " class="worksBox">
  3349. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3350. worksStudent2[toolIndex].length > 0
  3351. ">
  3352. <div class="worksTop">
  3353. <div>作业预览</div>
  3354. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3355. isCloseList[toolIndex].isClose == 0
  3356. ">
  3357. 收缩
  3358. </div>
  3359. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3360. 展开
  3361. </div>
  3362. </div>
  3363. </div>
  3364. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3365. worksStudent2[toolIndex].length > 0
  3366. ">
  3367. <div class="works" style="
  3368. width: 200px;
  3369. height: 140px;
  3370. margin: 10px 10px 10px 0;
  3371. border-radius: 15px;
  3372. box-shadow: 0 0 6px 1px #dfdada;
  3373. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3374. 0
  3375. ? worksStudent2[toolIndex]
  3376. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex"
  3377. :class="w.type == 1 ? 'isTypeOne' : ''">
  3378. <div class="workImg">
  3379. <img src="../../assets/icon/works/noImg.png" @click="openPj(w.works, toolIndex)" alt />
  3380. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3381. " @click.stop="deleteWorks(w.wid)" alt />
  3382. </div>
  3383. <div class="comment" style="min-width: 200px">
  3384. <div class="worksName">
  3385. <div>{{ w.sName }}</div>
  3386. </div>
  3387. <div class="commentList">
  3388. <div class="commentList">
  3389. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3390. ">
  3391. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3392. </div>
  3393. <div>{{ w.likesCount }}</div>
  3394. </div>
  3395. <div class="commentList" style="margin-right: 15px">
  3396. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3397. <img src="../../assets/icon/comment/comment.png" alt="" />
  3398. </div>
  3399. <div>{{ w.commentCount }}</div>
  3400. </div>
  3401. </div>
  3402. </div>
  3403. </div>
  3404. </div>
  3405. <div class="noWorksS">
  3406. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3407. @click="teacherWorkSubmit(40, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3408. {{ s.student }}
  3409. </div>
  3410. </div>
  3411. </div>
  3412. <div v-if="tType &&
  3413. ((tType == 2 && sIsOpen == true) ||
  3414. tType == 1 ||
  3415. tType == 4) &&
  3416. tool.tool.indexOf(41) != -1
  3417. " class="worksBox">
  3418. <div class="noWorksS">
  3419. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3420. @click="teacherWorkSubmit(41, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3421. {{ s.student }}
  3422. </div>
  3423. </div>
  3424. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3425. worksStudent2[toolIndex].length > 0
  3426. ">
  3427. <div class="worksTop">
  3428. <div>作业预览</div>
  3429. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3430. isCloseList[toolIndex].isClose == 0
  3431. ">
  3432. 收缩
  3433. </div>
  3434. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3435. 展开
  3436. </div>
  3437. </div>
  3438. </div>
  3439. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3440. worksStudent2[toolIndex].length > 0
  3441. ">
  3442. <div v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3443. 0
  3444. ? worksStudent2[toolIndex]
  3445. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName"
  3446. @click="openXz(w, toolIndex)">
  3447. {{ w.sName }}
  3448. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png"
  3449. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  3450. </div>
  3451. </div>
  3452. </div>
  3453. <div v-if="tType &&
  3454. ((tType == 2 && sIsOpen == true) ||
  3455. tType == 1 ||
  3456. tType == 4) &&
  3457. tool.tool.indexOf(47) != -1
  3458. " class="worksBox">
  3459. <div class="noWorksS">
  3460. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3461. @click="teacherWorkSubmit(47, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3462. {{ s.student }}
  3463. </div>
  3464. </div>
  3465. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3466. worksStudent2[toolIndex].length > 0
  3467. ">
  3468. <div class="worksTop">
  3469. <div>作业预览</div>
  3470. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3471. isCloseList[toolIndex].isClose == 0
  3472. ">
  3473. 收缩
  3474. </div>
  3475. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3476. 展开
  3477. </div>
  3478. </div>
  3479. </div>
  3480. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3481. worksStudent2[toolIndex].length > 0
  3482. ">
  3483. <!-- @click="openXz(w, toolIndex)" -->
  3484. <div v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3485. 0
  3486. ? worksStudent2[toolIndex]
  3487. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName"
  3488. @click="openSen(w, toolIndex)">
  3489. {{ w.sName }}
  3490. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png"
  3491. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  3492. </div>
  3493. </div>
  3494. </div>
  3495. <div v-if="tType &&
  3496. ((tType == 2 && sIsOpen == true) ||
  3497. tType == 1 ||
  3498. tType == 4) &&
  3499. tool.tool.indexOf(48) != -1
  3500. " class="worksBox">
  3501. <div class="noWorksS">
  3502. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3503. @click="teacherWorkSubmit(48, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3504. {{ s.student }}
  3505. </div>
  3506. </div>
  3507. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3508. worksStudent2[toolIndex].length > 0
  3509. ">
  3510. <div class="worksTop">
  3511. <div>作业预览</div>
  3512. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3513. isCloseList[toolIndex].isClose == 0
  3514. ">
  3515. 收缩
  3516. </div>
  3517. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3518. 展开
  3519. </div>
  3520. </div>
  3521. </div>
  3522. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3523. worksStudent2[toolIndex].length > 0
  3524. ">
  3525. <div class="works" style="
  3526. width: 200px;
  3527. height: 140px;
  3528. margin: 10px 10px 10px 0;
  3529. border-radius: 15px;
  3530. box-shadow: 0 0 6px 1px #dfdada;
  3531. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3532. 0
  3533. ? worksStudent2[toolIndex]
  3534. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex"
  3535. :class="w.type == 1 ? 'isTypeOne' : ''">
  3536. <div class="workImg">
  3537. <img :src="word" @click="openTable(w)" alt />
  3538. <!-- @click="openFile(w.works)" -->
  3539. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3540. rightW:
  3541. w.userid == userid ||
  3542. tType == 1 ||
  3543. tType == 4 ||
  3544. w.ateacher == userid,
  3545. }">
  3546. {{ JSON.parse(w.score).wScore }}分
  3547. </div>
  3548. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3549. :class="{
  3550. rightW:
  3551. w.userid == userid ||
  3552. tType == 1 ||
  3553. tType == 4 ||
  3554. w.ateacher == userid,
  3555. }">
  3556. 评分
  3557. </div>
  3558. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3559. " @click.stop="deleteWorks(w.wid)" alt />
  3560. </div>
  3561. <div class="comment" style="min-width: 200px">
  3562. <div class="worksName">
  3563. <div>{{ w.sName }}</div>
  3564. </div>
  3565. <div class="commentList">
  3566. <div class="commentList">
  3567. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3568. ">
  3569. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3570. </div>
  3571. <div>{{ w.likesCount }}</div>
  3572. </div>
  3573. <div class="commentList" style="margin-right: 15px">
  3574. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3575. <img src="../../assets/icon/comment/comment.png" alt="" />
  3576. </div>
  3577. <div>{{ w.commentCount }}</div>
  3578. </div>
  3579. </div>
  3580. </div>
  3581. </div>
  3582. </div>
  3583. </div>
  3584. <div v-if="tType &&
  3585. ((tType == 2 && sIsOpen == true) ||
  3586. tType == 1 ||
  3587. tType == 4) &&
  3588. tool.tool.indexOf(52) != -1
  3589. " class="worksBox">
  3590. <div class="noWorksS">
  3591. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3592. @click="teacherWorkSubmit(52, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3593. {{ s.student }}
  3594. </div>
  3595. </div>
  3596. <div class="zuoyeYulan" v-if="worksStudent2.length &&
  3597. worksStudent2[toolIndex].length > 0
  3598. ">
  3599. <div class="worksTop">
  3600. <div>作业预览</div>
  3601. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent2[toolIndex].length > 6 &&
  3602. isCloseList[toolIndex].isClose == 0
  3603. ">
  3604. 收缩
  3605. </div>
  3606. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3607. 展开
  3608. </div>
  3609. </div>
  3610. </div>
  3611. <div class="worksDetailBox" v-if="worksStudent2.length &&
  3612. worksStudent2[toolIndex].length > 0
  3613. ">
  3614. <div class="works" style="
  3615. width: 200px;
  3616. height: 140px;
  3617. margin: 10px 10px 10px 0;
  3618. border-radius: 15px;
  3619. box-shadow: 0 0 6px 1px #dfdada;
  3620. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3621. 0
  3622. ? worksStudent2[toolIndex]
  3623. : worksStudent2[toolIndex].slice(0, 6)" :key="wIndex"
  3624. :class="w.type == 1 ? 'isTypeOne' : ''">
  3625. <div class="workImg">
  3626. <img :src="word" @click="openWord(w)" alt />
  3627. <!-- @click="openFile(w.works)" -->
  3628. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3629. rightW:
  3630. w.userid == userid ||
  3631. tType == 1 ||
  3632. tType == 4 ||
  3633. w.ateacher == userid,
  3634. }">
  3635. {{ JSON.parse(w.score).wScore }}分
  3636. </div>
  3637. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3638. :class="{
  3639. rightW:
  3640. w.userid == userid ||
  3641. tType == 1 ||
  3642. tType == 4 ||
  3643. w.ateacher == userid,
  3644. }">
  3645. 评分
  3646. </div>
  3647. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3648. " @click.stop="deleteWorks(w.wid)" alt />
  3649. </div>
  3650. <div class="comment" style="min-width: 200px">
  3651. <div class="worksName">
  3652. <div>{{ w.sName }}</div>
  3653. </div>
  3654. <div class="commentList">
  3655. <div class="commentList">
  3656. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3657. ">
  3658. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3659. </div>
  3660. <div>{{ w.likesCount }}</div>
  3661. </div>
  3662. <div class="commentList" style="margin-right: 15px">
  3663. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3664. <img src="../../assets/icon/comment/comment.png" alt="" />
  3665. </div>
  3666. <div>{{ w.commentCount }}</div>
  3667. </div>
  3668. </div>
  3669. </div>
  3670. </div>
  3671. </div>
  3672. </div>
  3673. </div>
  3674. </div>
  3675. <div class="vedioBox" v-if="arrayToArray(tool.tool, isWorkTool).length && (noWorksS[toolIndex].length || worksStudent[toolIndex].length)">
  3676. <div class="queTop" style="
  3677. font-size: 25px;
  3678. padding: 15px 0 15px 30px;
  3679. font-weight: bold;
  3680. ">
  3681. 工作区
  3682. </div>
  3683. <div class="tool_work_box">
  3684. <div v-if="tType &&
  3685. ((tType == 2 && sIsOpen == true) ||
  3686. tType == 1 ||
  3687. tType == 4) &&
  3688. tool.tool.indexOf(16) != -1
  3689. " class="worksBox">
  3690. <div class="zuoyeYulan" v-if="worksStudent.length &&
  3691. worksStudent[toolIndex].length > 0
  3692. ">
  3693. <div class="worksTop">
  3694. <div>作业预览</div>
  3695. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  3696. isCloseList[toolIndex].isClose == 0
  3697. ">
  3698. 收缩
  3699. </div>
  3700. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3701. 展开
  3702. </div>
  3703. </div>
  3704. </div>
  3705. <div class="worksDetailBox" v-if="worksStudent.length &&
  3706. worksStudent[toolIndex].length > 0
  3707. ">
  3708. <div class="works" style="
  3709. width: 200px;
  3710. height: 140px;
  3711. margin: 10px 10px 10px 0;
  3712. border-radius: 15px;
  3713. box-shadow: 0 0 6px 1px #dfdada;
  3714. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3715. 0
  3716. ? worksStudent[toolIndex]
  3717. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex"
  3718. :class="w.type == 1 ? 'isTypeOne' : ''">
  3719. <div class="workImg" v-if="w.type == 0">
  3720. <!-- @click="commentOther(w, toolIndex, wIndex)" -->
  3721. <img :src="w.works" @click="previewImg(w.works)" alt />
  3722. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3723. rightW:
  3724. w.userid == userid ||
  3725. tType == 1 ||
  3726. tType == 4 ||
  3727. w.ateacher == userid,
  3728. }">
  3729. {{ JSON.parse(w.score).wScore }}分
  3730. </div>
  3731. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3732. :class="{
  3733. rightW:
  3734. w.userid == userid ||
  3735. tType == 1 ||
  3736. tType == 4 ||
  3737. w.ateacher == userid,
  3738. }">
  3739. 评分
  3740. </div>
  3741. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3742. " @click.stop="deleteWorks(w.wid)" alt />
  3743. </div>
  3744. <div class="workImg" v-if="w.type == 1">
  3745. <img :src="word" @click="openFile(w.works)" alt />
  3746. <!-- @click="openFile(w.works)" -->
  3747. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3748. rightW:
  3749. w.userid == userid ||
  3750. tType == 1 ||
  3751. tType == 4 ||
  3752. w.ateacher == userid,
  3753. }">
  3754. {{ JSON.parse(w.score).wScore }}分
  3755. </div>
  3756. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3757. :class="{
  3758. rightW:
  3759. w.userid == userid ||
  3760. tType == 1 ||
  3761. tType == 4 ||
  3762. w.ateacher == userid,
  3763. }">
  3764. 评分
  3765. </div>
  3766. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3767. " @click.stop="deleteWorks(w.wid)" alt />
  3768. </div>
  3769. <div class="workImg" v-if="w.type == 3">
  3770. <img style="cursor: pointer" :src="video" @click="openVideo(w)" alt />
  3771. <!-- @click="openVideo(w.works)" -->
  3772. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3773. rightW:
  3774. w.userid == userid ||
  3775. tType == 1 ||
  3776. tType == 4 ||
  3777. w.ateacher == userid,
  3778. }">
  3779. {{ JSON.parse(w.score).wScore }}分
  3780. </div>
  3781. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3782. :class="{
  3783. rightW:
  3784. w.userid == userid ||
  3785. tType == 1 ||
  3786. tType == 4 ||
  3787. w.ateacher == userid,
  3788. }">
  3789. 评分
  3790. </div>
  3791. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3792. " @click.stop="deleteWorks(w.wid)" alt />
  3793. </div>
  3794. <div class="workImg" v-if="w.type == 12">
  3795. <img style="cursor: pointer" :src="word2" @click="downloadFile(w.works)" alt />
  3796. <!-- @click="openVideo(w.works)" -->
  3797. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3798. rightW:
  3799. w.userid == userid ||
  3800. tType == 1 ||
  3801. tType == 4 ||
  3802. w.ateacher == userid,
  3803. }">
  3804. {{ JSON.parse(w.score).wScore }}分
  3805. </div>
  3806. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3807. :class="{
  3808. rightW:
  3809. w.userid == userid ||
  3810. tType == 1 ||
  3811. tType == 4 ||
  3812. w.ateacher == userid,
  3813. }">
  3814. 评分
  3815. </div>
  3816. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3817. " @click.stop="deleteWorks(w.wid)" alt />
  3818. </div>
  3819. <div class="comment" style="min-width: 200px">
  3820. <div class="worksName">
  3821. <div>{{ w.sName }}</div>
  3822. </div>
  3823. <div class="commentList">
  3824. <div class="commentList">
  3825. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3826. ">
  3827. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3828. </div>
  3829. <div>{{ w.likesCount }}</div>
  3830. </div>
  3831. <div class="commentList" style="margin-right: 15px">
  3832. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3833. <img src="../../assets/icon/comment/comment.png" alt="" />
  3834. </div>
  3835. <div>{{ w.commentCount }}</div>
  3836. </div>
  3837. </div>
  3838. </div>
  3839. </div>
  3840. </div>
  3841. <div class="noWorksS">
  3842. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3843. @click="teacherWorkSubmit(16, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3844. {{ s.student }}
  3845. </div>
  3846. </div>
  3847. </div>
  3848. <div v-if="tType &&
  3849. ((tType == 2 && sIsOpen == true) ||
  3850. tType == 1 ||
  3851. tType == 4) &&
  3852. tool.tool.indexOf(32) != -1
  3853. " class="worksBox">
  3854. <div class="zuoyeYulan" v-if="worksStudent.length &&
  3855. worksStudent[toolIndex].length > 0
  3856. ">
  3857. <div class="worksTop">
  3858. <div>作业预览</div>
  3859. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  3860. isCloseList[toolIndex].isClose == 0
  3861. ">
  3862. 收缩
  3863. </div>
  3864. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3865. 展开
  3866. </div>
  3867. </div>
  3868. </div>
  3869. <div class="worksDetailBox" v-if="worksStudent.length &&
  3870. worksStudent[toolIndex].length > 0
  3871. ">
  3872. <div class="works" style="
  3873. width: 200px;
  3874. height: 140px;
  3875. margin: 10px 10px 10px 0;
  3876. border-radius: 15px;
  3877. box-shadow: 0 0 6px 1px #dfdada;
  3878. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3879. 0
  3880. ? worksStudent[toolIndex]
  3881. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex"
  3882. :class="w.type == 1 ? 'isTypeOne' : ''">
  3883. <div class="workImg">
  3884. <img :src="word2" @click="downloadFile(w.works)" alt />
  3885. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3886. rightW:
  3887. w.userid == userid ||
  3888. tType == 1 ||
  3889. tType == 4 ||
  3890. w.ateacher == userid,
  3891. }">
  3892. {{ JSON.parse(w.score).wScore }}分
  3893. </div>
  3894. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3895. :class="{
  3896. rightW:
  3897. w.userid == userid ||
  3898. tType == 1 ||
  3899. tType == 4 ||
  3900. w.ateacher == userid,
  3901. }">
  3902. 评分
  3903. </div>
  3904. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3905. " @click.stop="deleteWorks(w.wid)" alt />
  3906. </div>
  3907. <div class="comment" style="min-width: 200px">
  3908. <div class="worksName">
  3909. <div>{{ w.sName }}</div>
  3910. </div>
  3911. <div class="commentList">
  3912. <div class="commentList">
  3913. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  3914. ">
  3915. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  3916. </div>
  3917. <div>{{ w.likesCount }}</div>
  3918. </div>
  3919. <div class="commentList" style="margin-right: 15px">
  3920. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  3921. <img src="../../assets/icon/comment/comment.png" alt="" />
  3922. </div>
  3923. <div>{{ w.commentCount }}</div>
  3924. </div>
  3925. </div>
  3926. </div>
  3927. </div>
  3928. </div>
  3929. <div class="noWorksS">
  3930. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  3931. @click="teacherWorkSubmit(32, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  3932. {{ s.student }}
  3933. </div>
  3934. </div>
  3935. </div>
  3936. <div v-if="tType &&
  3937. ((tType == 2 && sIsOpen == true) ||
  3938. tType == 1 ||
  3939. tType == 4) &&
  3940. tool.tool.indexOf(57) != -1
  3941. " class="worksBox">
  3942. <div class="zuoyeYulan" v-if="worksStudent.length &&
  3943. worksStudent[toolIndex].length > 0
  3944. ">
  3945. <div class="worksTop">
  3946. <div>作业预览</div>
  3947. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  3948. isCloseList[toolIndex].isClose == 0
  3949. ">
  3950. 收缩
  3951. </div>
  3952. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  3953. 展开
  3954. </div>
  3955. </div>
  3956. </div>
  3957. <div class="worksDetailBox" v-if="worksStudent.length &&
  3958. worksStudent[toolIndex].length > 0
  3959. ">
  3960. <div class="works" style="
  3961. width: 200px;
  3962. height: 140px;
  3963. margin: 10px 10px 10px 0;
  3964. border-radius: 15px;
  3965. box-shadow: 0 0 6px 1px #dfdada;
  3966. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  3967. 0
  3968. ? worksStudent[toolIndex]
  3969. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex"
  3970. :class="w.type == 1 ? 'isTypeOne' : ''">
  3971. <div class="workImg">
  3972. <img :src="word2" @click="downloadFile(w.works)" v-if="w.type == 12" alt />
  3973. <img :src="word2" @click="openCocoPi(57, toolIndex, w.userid, w.sName)" v-else-if="w.type == 15"
  3974. alt />
  3975. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  3976. rightW:
  3977. w.userid == userid ||
  3978. tType == 1 ||
  3979. tType == 4 ||
  3980. w.ateacher == userid,
  3981. }">
  3982. {{ JSON.parse(w.score).wScore }}分
  3983. </div>
  3984. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  3985. :class="{
  3986. rightW:
  3987. w.userid == userid ||
  3988. tType == 1 ||
  3989. tType == 4 ||
  3990. w.ateacher == userid,
  3991. }">
  3992. 评分
  3993. </div>
  3994. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  3995. " @click.stop="deleteWorks(w.wid)" alt />
  3996. </div>
  3997. <div class="comment" style="min-width: 200px">
  3998. <div class="worksName">
  3999. <div>{{ w.sName }}</div>
  4000. </div>
  4001. <div class="commentList">
  4002. <div class="commentList">
  4003. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4004. ">
  4005. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4006. </div>
  4007. <div>{{ w.likesCount }}</div>
  4008. </div>
  4009. <div class="commentList" style="margin-right: 15px">
  4010. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4011. <img src="../../assets/icon/comment/comment.png" alt="" />
  4012. </div>
  4013. <div>{{ w.commentCount }}</div>
  4014. </div>
  4015. </div>
  4016. </div>
  4017. </div>
  4018. </div>
  4019. <div class="noWorksS">
  4020. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4021. @click="teacherWorkSubmit(57, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4022. {{ s.student }}
  4023. </div>
  4024. </div>
  4025. </div>
  4026. <div v-if="tool.tool.indexOf(50) != -1" class="worksBox">
  4027. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4028. worksStudent[toolIndex].length > 0
  4029. ">
  4030. <span>作业预览</span>
  4031. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4032. isCloseList[toolIndex].isClose == 0
  4033. ">
  4034. 收缩
  4035. </div>
  4036. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4037. 展开
  4038. </div>
  4039. </div>
  4040. <div class="worksDetailBox" v-if="worksStudent.length &&
  4041. worksStudent[toolIndex].length > 0
  4042. ">
  4043. <div class="works" style="
  4044. width: 200px;
  4045. height: 140px;
  4046. margin: 10px 10px 10px 0;
  4047. border-radius: 15px;
  4048. box-shadow: 0 0 6px 1px #dfdada;
  4049. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4050. 0
  4051. ? worksStudent[toolIndex]
  4052. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex"
  4053. :class="w.type == 1 ? 'isTypeOne' : ''">
  4054. <div class="workImg" v-if="w.type == 0">
  4055. <!-- @click="commentOther(w, toolIndex, wIndex)" -->
  4056. <img :src="w.works" @click="previewImg(w.works)" alt />
  4057. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4058. rightW:
  4059. w.userid == userid ||
  4060. tType == 1 ||
  4061. tType == 4 ||
  4062. w.ateacher == userid,
  4063. }">
  4064. {{ JSON.parse(w.score).wScore }}分
  4065. </div>
  4066. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4067. :class="{
  4068. rightW:
  4069. w.userid == userid ||
  4070. tType == 1 ||
  4071. tType == 4 ||
  4072. w.ateacher == userid,
  4073. }">
  4074. 评分
  4075. </div>
  4076. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4077. " @click.stop="deleteWorks(w.wid)" alt />
  4078. </div>
  4079. <div class="workImg" style="cursor: pointer" v-if="w.type == 1">
  4080. <img :src="word" @click="openFile(w.works)" alt />
  4081. <!-- @click="openFile(w.works)" -->
  4082. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4083. rightW:
  4084. w.userid == userid ||
  4085. tType == 1 ||
  4086. tType == 4 ||
  4087. w.ateacher == userid,
  4088. }">
  4089. {{ JSON.parse(w.score).wScore }}分
  4090. </div>
  4091. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4092. :class="{
  4093. rightW:
  4094. w.userid == userid ||
  4095. tType == 1 ||
  4096. tType == 4 ||
  4097. w.ateacher == userid,
  4098. }">
  4099. 评分
  4100. </div>
  4101. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4102. " @click.stop="deleteWorks(w.wid)" alt />
  4103. </div>
  4104. <div class="workImg" v-if="w.type == 3">
  4105. <img style="cursor: pointer" :src="video" @click="openVideo(w)" alt />
  4106. <!-- @click="openVideo(w.works)" -->
  4107. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4108. rightW:
  4109. w.userid == userid ||
  4110. tType == 1 ||
  4111. tType == 4 ||
  4112. w.ateacher == userid,
  4113. }">
  4114. {{ JSON.parse(w.score).wScore }}分
  4115. </div>
  4116. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4117. :class="{
  4118. rightW:
  4119. w.userid == userid ||
  4120. tType == 1 ||
  4121. tType == 4 ||
  4122. w.ateacher == userid,
  4123. }">
  4124. 评分
  4125. </div>
  4126. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4127. " @click.stop="deleteWorks(w.wid)" alt />
  4128. </div>
  4129. <div class="comment" style="min-width: 200px">
  4130. <div class="worksName">
  4131. <div style="cursor: pointer" @click="openSname(w.sName, w.wid, toolIndex,w.userid)">
  4132. {{ w.sName }}
  4133. </div>
  4134. </div>
  4135. <div class="commentList">
  4136. <div class="commentList">
  4137. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4138. ">
  4139. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4140. </div>
  4141. <div>{{ w.likesCount }}</div>
  4142. </div>
  4143. <div class="commentList" style="margin-right: 15px">
  4144. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4145. <img src="../../assets/icon/comment/comment.png" alt="" />
  4146. </div>
  4147. <div>{{ w.commentCount }}</div>
  4148. </div>
  4149. </div>
  4150. </div>
  4151. </div>
  4152. </div>
  4153. <div class="noWorksS">
  4154. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4155. @click="teacherWorkSubmit(50, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4156. {{ s.student }}
  4157. </div>
  4158. </div>
  4159. </div>
  4160. <div v-if="tType &&
  4161. ((tType == 2 && sIsOpen == true) ||
  4162. tType == 1 ||
  4163. tType == 4) &&
  4164. tool.tool.indexOf(4) != -1
  4165. " class="worksBox">
  4166. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4167. worksStudent[toolIndex].length > 0
  4168. ">
  4169. <div class="worksTop">
  4170. <div>作业预览</div>
  4171. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4172. isCloseList[toolIndex].isClose == 0
  4173. ">
  4174. 收缩
  4175. </div>
  4176. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4177. 展开
  4178. </div>
  4179. </div>
  4180. </div>
  4181. <div>
  4182. <div class="worksDetailBox" v-if="worksStudent.length &&
  4183. worksStudent[toolIndex].length > 0
  4184. ">
  4185. <div v-for="(w, wIndex) in isCloseList[toolIndex]
  4186. .isClose == 0
  4187. ? worksStudent[toolIndex]
  4188. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName" @click="openTools(4, toolIndex, taskCount, w.works, w.sName)
  4189. ">
  4190. {{ w.sName }}
  4191. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4192. " @click.stop="deleteWorks(w.wid)" alt />
  4193. </div>
  4194. </div>
  4195. </div>
  4196. <div class="noWorksS">
  4197. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4198. @click="teacherWorkSubmit(4, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4199. {{ s.student }}
  4200. </div>
  4201. </div>
  4202. </div>
  4203. <div v-if="tType &&
  4204. ((tType == 2 && sIsOpen == true) ||
  4205. tType == 1 ||
  4206. tType == 4) &&
  4207. tool.tool.indexOf(45) != -1
  4208. " class="worksBox">
  4209. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4210. worksStudent[toolIndex].length > 0
  4211. ">
  4212. <div class="worksTop">
  4213. <div>作业预览</div>
  4214. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4215. isCloseList[toolIndex].isClose == 0
  4216. ">
  4217. 收缩
  4218. </div>
  4219. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4220. 展开
  4221. </div>
  4222. </div>
  4223. </div>
  4224. <div>
  4225. <div class="worksDetailBox" v-if="worksStudent.length &&
  4226. worksStudent[toolIndex].length > 0
  4227. ">
  4228. <div v-for="(w, wIndex) in isCloseList[toolIndex]
  4229. .isClose == 0
  4230. ? worksStudent[toolIndex]
  4231. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName" @click="openTools(
  4232. 45,
  4233. toolIndex,
  4234. taskCount,
  4235. w.works,
  4236. w.sName
  4237. )
  4238. ">
  4239. {{ w.sName }}
  4240. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4241. " @click.stop="deleteWorks(w.wid)" alt />
  4242. </div>
  4243. </div>
  4244. </div>
  4245. <div class="noWorksS">
  4246. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4247. @click="teacherWorkSubmit(45, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4248. {{ s.student }}
  4249. </div>
  4250. </div>
  4251. </div>
  4252. <div v-if="tType &&
  4253. ((tType == 2 && sIsOpen == true) ||
  4254. tType == 1 ||
  4255. tType == 4) &&
  4256. tool.tool.indexOf(15) != -1
  4257. " class="worksBox">
  4258. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4259. worksStudent[toolIndex].length > 0
  4260. ">
  4261. <div class="worksTop">
  4262. <div>作业预览</div>
  4263. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4264. isCloseList[toolIndex].isClose == 0
  4265. ">
  4266. 收缩
  4267. </div>
  4268. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4269. 展开
  4270. </div>
  4271. </div>
  4272. </div>
  4273. <div class="worksDetailBox" v-if="worksStudent.length &&
  4274. worksStudent[toolIndex].length > 0
  4275. ">
  4276. <div class="works" v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4277. 0
  4278. ? worksStudent[toolIndex]
  4279. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex">
  4280. <div class="workImg" style="
  4281. border-radius: 15px;
  4282. box-shadow: #eee 0px 0px 5px 5px;
  4283. ">
  4284. <!-- <img
  4285. src="../../assets/icon/works/noImg.png"
  4286. @click="openTools(15, toolIndex, taskCount, w.works)"
  4287. alt=""
  4288. />-->
  4289. <div class="answerBg" style="border-radius: 15px 15px 0 0"
  4290. @click="commentOther(w, toolIndex, wIndex)">
  4291. <!-- <div>{{ w.sName }}</div> -->
  4292. <div class="answerContent">
  4293. {{ JSON.parse(w.works)[0].answer }}
  4294. </div>
  4295. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4296. rightW:
  4297. w.userid == userid ||
  4298. tType == 1 ||
  4299. tType == 4,
  4300. }">
  4301. {{ JSON.parse(w.score).wScore }}分
  4302. </div>
  4303. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4304. :class="{
  4305. rightW:
  4306. w.userid == userid ||
  4307. tType == 1 ||
  4308. tType == 4,
  4309. }">
  4310. 评分
  4311. </div>
  4312. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4313. " @click.stop="deleteWorks(w.wid)" alt />
  4314. </div>
  4315. <div class="comment">
  4316. <div class="worksName">
  4317. <div>{{ w.sName }}</div>
  4318. </div>
  4319. <div class="commentList">
  4320. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4321. ">
  4322. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4323. </div>
  4324. <div>{{ w.likesCount }}</div>
  4325. </div>
  4326. <div class="commentList" style="margin-right: 15px">
  4327. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4328. <img src="../../assets/icon/comment/comment.png" alt="" />
  4329. </div>
  4330. <div>{{ w.commentCount }}</div>
  4331. </div>
  4332. </div>
  4333. </div>
  4334. </div>
  4335. </div>
  4336. <div class="noWorksS">
  4337. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4338. @click="teacherWorkSubmit(15, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4339. {{ s.student }}
  4340. </div>
  4341. </div>
  4342. </div>
  4343. <div v-if="tType &&
  4344. ((tType == 2 && sIsOpen == true) ||
  4345. tType == 1 ||
  4346. tType == 4) &&
  4347. tool.tool.indexOf(1) != -1
  4348. " class="worksBox">
  4349. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4350. worksStudent[toolIndex].length > 0
  4351. ">
  4352. <div class="worksTop">
  4353. <div>作业预览</div>
  4354. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4355. isCloseList[toolIndex].isClose == 0
  4356. ">
  4357. 收缩
  4358. </div>
  4359. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4360. 展开
  4361. </div>
  4362. </div>
  4363. </div>
  4364. <div class="worksDetailBox" v-if="worksStudent.length &&
  4365. worksStudent[toolIndex].length > 0
  4366. ">
  4367. <div class="works" style="
  4368. width: 200px;
  4369. height: 140px;
  4370. margin: 10px 10px 10px 0;
  4371. border-radius: 15px;
  4372. box-shadow: 0 0 6px 1px #dfdada;
  4373. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4374. 0
  4375. ? worksStudent[toolIndex]
  4376. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex">
  4377. <!-- @click="previewImg(w.works)" @click="commentOther(w, toolIndex, wIndex)"-->
  4378. <div class="workImg">
  4379. <img :src="w.works" @click="previewImg(w.works)" alt />
  4380. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4381. rightW:
  4382. w.userid == userid || tType == 1 || tType == 4,
  4383. }">
  4384. {{ JSON.parse(w.score).wScore }}分
  4385. </div>
  4386. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4387. :class="{
  4388. rightW:
  4389. w.userid == userid || tType == 1 || tType == 4,
  4390. }">
  4391. 评分
  4392. </div>
  4393. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4394. " @click.stop="deleteWorks(w.wid)" alt />
  4395. </div>
  4396. <div class="comment" style="min-width: 200px">
  4397. <div class="worksName">
  4398. <div>{{ w.sName }}</div>
  4399. </div>
  4400. <div class="commentList">
  4401. <div class="commentList">
  4402. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4403. ">
  4404. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4405. </div>
  4406. <div>{{ w.likesCount }}</div>
  4407. </div>
  4408. <div class="commentList" style="margin-right: 15px">
  4409. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4410. <img src="../../assets/icon/comment/comment.png" alt="" />
  4411. </div>
  4412. <div>{{ w.commentCount }}</div>
  4413. </div>
  4414. </div>
  4415. </div>
  4416. </div>
  4417. </div>
  4418. <div class="noWorksS">
  4419. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4420. @click="teacherWorkSubmit(1, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4421. {{ s.student }}
  4422. </div>
  4423. </div>
  4424. </div>
  4425. <div v-if="tType &&
  4426. ((tType == 2 && sIsOpen == true) ||
  4427. tType == 1 ||
  4428. tType == 4) &&
  4429. tool.tool.indexOf(3) != -1
  4430. " class="worksBox">
  4431. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4432. worksStudent[toolIndex].length > 0
  4433. ">
  4434. <div class="worksTop">
  4435. <div>作业预览</div>
  4436. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4437. isCloseList[toolIndex].isClose == 0
  4438. ">
  4439. 收缩
  4440. </div>
  4441. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4442. 展开
  4443. </div>
  4444. </div>
  4445. </div>
  4446. <div class="worksDetailBox" v-if="worksStudent.length &&
  4447. worksStudent[toolIndex].length > 0
  4448. ">
  4449. <div class="works" style="
  4450. width: 200px;
  4451. height: 140px;
  4452. margin: 10px 10px 10px 0;
  4453. border-radius: 15px;
  4454. box-shadow: 0 0 6px 1px #dfdada;
  4455. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4456. 0
  4457. ? worksStudent[toolIndex]
  4458. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex">
  4459. <!-- @click="previewImg(w.works)" -->
  4460. <div class="workImg">
  4461. <img :src="w.works" @click="previewImg(w.works)" alt />
  4462. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4463. rightW:
  4464. w.userid == userid || tType == 1 || tType == 4,
  4465. }">
  4466. {{ JSON.parse(w.score).wScore }}分
  4467. </div>
  4468. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4469. :class="{
  4470. rightW:
  4471. w.userid == userid || tType == 1 || tType == 4,
  4472. }">
  4473. 评分
  4474. </div>
  4475. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4476. " @click.stop="deleteWorks(w.wid)" alt />
  4477. </div>
  4478. <div class="comment" style="min-width: 200px">
  4479. <div class="worksName">
  4480. <div>{{ w.sName }}</div>
  4481. </div>
  4482. <div class="commentList">
  4483. <div class="commentList">
  4484. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4485. ">
  4486. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4487. </div>
  4488. <div>{{ w.likesCount }}</div>
  4489. </div>
  4490. <div class="commentList" style="margin-right: 15px">
  4491. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4492. <img src="../../assets/icon/comment/comment.png" alt="" />
  4493. </div>
  4494. <div>{{ w.commentCount }}</div>
  4495. </div>
  4496. </div>
  4497. </div>
  4498. </div>
  4499. </div>
  4500. <div class="noWorksS">
  4501. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4502. @click="teacherWorkSubmit(3, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4503. {{ s.student }}
  4504. </div>
  4505. </div>
  4506. </div>
  4507. <div v-if="tType &&
  4508. ((tType == 2 && sIsOpen == true) ||
  4509. tType == 1 ||
  4510. tType == 4) &&
  4511. tool.tool.indexOf(6) != -1
  4512. " class="worksBox">
  4513. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4514. worksStudent[toolIndex].length > 0
  4515. ">
  4516. <div class="worksTop">
  4517. <div>作业预览</div>
  4518. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4519. isCloseList[toolIndex].isClose == 0
  4520. ">
  4521. 收缩
  4522. </div>
  4523. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4524. 展开
  4525. </div>
  4526. </div>
  4527. </div>
  4528. <div class="worksDetailBox" v-if="worksStudent.length &&
  4529. worksStudent[toolIndex].length > 0
  4530. ">
  4531. <div class="works" style="
  4532. width: 200px;
  4533. height: 140px;
  4534. margin: 10px 10px 10px 0;
  4535. border-radius: 15px;
  4536. box-shadow: 0 0 6px 1px #dfdada;
  4537. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4538. 0
  4539. ? worksStudent[toolIndex]
  4540. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex">
  4541. <!-- @click="previewImg(w.works)" -->
  4542. <div class="workImg">
  4543. <img :src="w.works" @click="previewImg(w.works)" alt />
  4544. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4545. rightW:
  4546. w.userid == userid || tType == 1 || tType == 4,
  4547. }">
  4548. {{ JSON.parse(w.score).wScore }}分
  4549. </div>
  4550. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4551. :class="{
  4552. rightW:
  4553. w.userid == userid || tType == 1 || tType == 4,
  4554. }">
  4555. 评分
  4556. </div>
  4557. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4558. " @click.stop="deleteWorks(w.wid)" alt />
  4559. </div>
  4560. <div class="comment" style="min-width: 200px">
  4561. <div class="worksName">
  4562. <div>{{ w.sName }}</div>
  4563. </div>
  4564. <div class="commentList">
  4565. <div class="commentList">
  4566. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4567. ">
  4568. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4569. </div>
  4570. <div>{{ w.likesCount }}</div>
  4571. </div>
  4572. <div class="commentList" style="margin-right: 15px">
  4573. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4574. <img src="../../assets/icon/comment/comment.png" alt="" />
  4575. </div>
  4576. <div>{{ w.commentCount }}</div>
  4577. </div>
  4578. </div>
  4579. </div>
  4580. </div>
  4581. </div>
  4582. <div class="noWorksS">
  4583. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4584. :class="{ isWork: s.type == '2' }">
  4585. {{ s.student }}
  4586. </div>
  4587. </div>
  4588. </div>
  4589. <div v-if="tType &&
  4590. ((tType == 2 && sIsOpen == true) ||
  4591. tType == 1 ||
  4592. tType == 4) &&
  4593. tool.tool.indexOf(7) != -1
  4594. " class="worksBox">
  4595. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4596. worksStudent[toolIndex].length > 0
  4597. ">
  4598. <div class="worksTop">
  4599. <div>作业预览</div>
  4600. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4601. isCloseList[toolIndex].isClose == 0
  4602. ">
  4603. 收缩
  4604. </div>
  4605. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4606. 展开
  4607. </div>
  4608. </div>
  4609. </div>
  4610. <div class="worksDetailBox" v-if="worksStudent.length &&
  4611. worksStudent[toolIndex].length > 0
  4612. ">
  4613. <div class="works" style="
  4614. width: 200px;
  4615. height: 140px;
  4616. margin: 10px 10px 10px 0;
  4617. border-radius: 15px;
  4618. box-shadow: 0 0 6px 1px #dfdada;
  4619. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4620. 0
  4621. ? worksStudent[toolIndex]
  4622. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex">
  4623. <!-- @click="previewImg(w.works)" -->
  4624. <div class="workImg">
  4625. <img :src="w.works" @click="previewImg(w.works)" alt />
  4626. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4627. rightW:
  4628. w.userid == userid || tType == 1 || tType == 4,
  4629. }">
  4630. {{ JSON.parse(w.score).wScore }}分
  4631. </div>
  4632. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4633. :class="{
  4634. rightW:
  4635. w.userid == userid || tType == 1 || tType == 4,
  4636. }">
  4637. 评分
  4638. </div>
  4639. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4640. " @click.stop="deleteWorks(w.wid)" alt />
  4641. </div>
  4642. <div class="comment" style="min-width: 200px">
  4643. <div class="worksName">
  4644. <div>{{ w.sName }}</div>
  4645. </div>
  4646. <div class="commentList">
  4647. <div class="commentList">
  4648. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4649. ">
  4650. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4651. </div>
  4652. <div>{{ w.likesCount }}</div>
  4653. </div>
  4654. <div class="commentList" style="margin-right: 15px">
  4655. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4656. <img src="../../assets/icon/comment/comment.png" alt="" />
  4657. </div>
  4658. <div>{{ w.commentCount }}</div>
  4659. </div>
  4660. </div>
  4661. </div>
  4662. </div>
  4663. </div>
  4664. <div class="noWorksS">
  4665. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4666. @click="teacherWorkSubmit(7, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4667. {{ s.student }}
  4668. </div>
  4669. </div>
  4670. </div>
  4671. <div v-if="tType &&
  4672. ((tType == 2 && sIsOpen == true) ||
  4673. tType == 1 ||
  4674. tType == 4) &&
  4675. tool.tool.indexOf(26) != -1
  4676. " class="worksBox">
  4677. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4678. worksStudent[toolIndex].length > 0
  4679. ">
  4680. <div class="worksTop">
  4681. <div>作业预览</div>
  4682. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4683. isCloseList[toolIndex].isClose == 0
  4684. ">
  4685. 收缩
  4686. </div>
  4687. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4688. 展开
  4689. </div>
  4690. </div>
  4691. </div>
  4692. <div class="worksDetailBox" v-if="worksStudent.length &&
  4693. worksStudent[toolIndex].length > 0
  4694. ">
  4695. <div class="works" style="width: 240px; height: 140px; overflow: hidden" v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4696. 0
  4697. ? worksStudent[toolIndex]
  4698. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex" :class="w.type == 1 ? 'isTypeOne' : ''">
  4699. <div class="workImg" v-if="w.type == 0">
  4700. <img :src="w.works" @click="previewImg(w.works)" alt />
  4701. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4702. " @click.stop="deleteWorks(w.wid)" alt />
  4703. </div>
  4704. <div class="workImg" v-if="w.type == 1">
  4705. <img :src="word" @click="openFile(w.works)" alt />
  4706. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4707. " @click.stop="deleteWorks(w.wid)" alt />
  4708. </div>
  4709. <div class="worksName">
  4710. <div>{{ w.sName }}</div>
  4711. </div>
  4712. </div>
  4713. </div>
  4714. <div class="noWorksS">
  4715. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4716. :class="{ isWork: s.type == '2' }">
  4717. {{ s.student }}
  4718. </div>
  4719. </div>
  4720. </div>
  4721. <div v-if="tType &&
  4722. ((tType == 2 && sIsOpen == true) ||
  4723. tType == 1 ||
  4724. tType == 4) &&
  4725. tool.tool.indexOf(40) != -1
  4726. " class="worksBox">
  4727. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4728. worksStudent[toolIndex].length > 0
  4729. ">
  4730. <div class="worksTop">
  4731. <div>作业预览</div>
  4732. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4733. isCloseList[toolIndex].isClose == 0
  4734. ">
  4735. 收缩
  4736. </div>
  4737. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4738. 展开
  4739. </div>
  4740. </div>
  4741. </div>
  4742. <div class="worksDetailBox" v-if="worksStudent.length &&
  4743. worksStudent[toolIndex].length > 0
  4744. ">
  4745. <div class="works" style="
  4746. width: 200px;
  4747. height: 140px;
  4748. margin: 10px 10px 10px 0;
  4749. border-radius: 15px;
  4750. box-shadow: 0 0 6px 1px #dfdada;
  4751. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4752. 0
  4753. ? worksStudent[toolIndex]
  4754. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex"
  4755. :class="w.type == 1 ? 'isTypeOne' : ''">
  4756. <div class="workImg">
  4757. <img src="../../assets/icon/works/noImg.png" @click="openPj(w.works, toolIndex)" alt />
  4758. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4759. " @click.stop="deleteWorks(w.wid)" alt />
  4760. </div>
  4761. <div class="comment" style="min-width: 200px">
  4762. <div class="worksName">
  4763. <div>{{ w.sName }}</div>
  4764. </div>
  4765. <div class="commentList">
  4766. <div class="commentList">
  4767. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4768. ">
  4769. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4770. </div>
  4771. <div>{{ w.likesCount }}</div>
  4772. </div>
  4773. <div class="commentList" style="margin-right: 15px">
  4774. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4775. <img src="../../assets/icon/comment/comment.png" alt="" />
  4776. </div>
  4777. <div>{{ w.commentCount }}</div>
  4778. </div>
  4779. </div>
  4780. </div>
  4781. </div>
  4782. </div>
  4783. <div class="noWorksS">
  4784. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4785. @click="teacherWorkSubmit(40, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4786. {{ s.student }}
  4787. </div>
  4788. </div>
  4789. </div>
  4790. <div v-if="tType &&
  4791. ((tType == 2 && sIsOpen == true) ||
  4792. tType == 1 ||
  4793. tType == 4) &&
  4794. tool.tool.indexOf(41) != -1
  4795. " class="worksBox">
  4796. <div class="noWorksS">
  4797. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4798. @click="teacherWorkSubmit(41, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4799. {{ s.student }}
  4800. </div>
  4801. </div>
  4802. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4803. worksStudent[toolIndex].length > 0
  4804. ">
  4805. <div class="worksTop">
  4806. <div>作业预览</div>
  4807. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4808. isCloseList[toolIndex].isClose == 0
  4809. ">
  4810. 收缩
  4811. </div>
  4812. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4813. 展开
  4814. </div>
  4815. </div>
  4816. </div>
  4817. <div class="worksDetailBox" v-if="worksStudent.length &&
  4818. worksStudent[toolIndex].length > 0
  4819. ">
  4820. <div v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4821. 0
  4822. ? worksStudent[toolIndex]
  4823. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName"
  4824. @click="openXz(w, toolIndex)">
  4825. {{ w.sName }}
  4826. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png"
  4827. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  4828. </div>
  4829. </div>
  4830. </div>
  4831. <div v-if="tType &&
  4832. ((tType == 2 && sIsOpen == true) ||
  4833. tType == 1 ||
  4834. tType == 4) &&
  4835. tool.tool.indexOf(47) != -1
  4836. " class="worksBox">
  4837. <div class="noWorksS">
  4838. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4839. @click="teacherWorkSubmit(47, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4840. {{ s.student }}
  4841. </div>
  4842. </div>
  4843. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4844. worksStudent[toolIndex].length > 0
  4845. ">
  4846. <div class="worksTop">
  4847. <div>作业预览</div>
  4848. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4849. isCloseList[toolIndex].isClose == 0
  4850. ">
  4851. 收缩
  4852. </div>
  4853. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4854. 展开
  4855. </div>
  4856. </div>
  4857. </div>
  4858. <div class="worksDetailBox" v-if="worksStudent.length &&
  4859. worksStudent[toolIndex].length > 0
  4860. ">
  4861. <!-- @click="openXz(w, toolIndex)" -->
  4862. <div v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4863. 0
  4864. ? worksStudent[toolIndex]
  4865. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex" class="isWorksName"
  4866. @click="openSen(w, toolIndex)">
  4867. {{ w.sName }}
  4868. <img class="deleteImg deleteImg2" src="../../assets/deleteworks.png"
  4869. v-if="w.userid == userid || tType == 1 || tType == 4" @click.stop="deleteWorks(w.wid)" alt />
  4870. </div>
  4871. </div>
  4872. </div>
  4873. <div v-if="tType &&
  4874. ((tType == 2 && sIsOpen == true) ||
  4875. tType == 1 ||
  4876. tType == 4) &&
  4877. tool.tool.indexOf(48) != -1
  4878. " class="worksBox">
  4879. <div class="noWorksS">
  4880. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4881. @click="teacherWorkSubmit(48, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4882. {{ s.student }}
  4883. </div>
  4884. </div>
  4885. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4886. worksStudent[toolIndex].length > 0
  4887. ">
  4888. <div class="worksTop">
  4889. <div>作业预览</div>
  4890. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4891. isCloseList[toolIndex].isClose == 0
  4892. ">
  4893. 收缩
  4894. </div>
  4895. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4896. 展开
  4897. </div>
  4898. </div>
  4899. </div>
  4900. <div class="worksDetailBox" v-if="worksStudent.length &&
  4901. worksStudent[toolIndex].length > 0
  4902. ">
  4903. <div class="works" style="
  4904. width: 200px;
  4905. height: 140px;
  4906. margin: 10px 10px 10px 0;
  4907. border-radius: 15px;
  4908. box-shadow: 0 0 6px 1px #dfdada;
  4909. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4910. 0
  4911. ? worksStudent[toolIndex]
  4912. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex"
  4913. :class="w.type == 1 ? 'isTypeOne' : ''">
  4914. <div class="workImg">
  4915. <img :src="word" @click="openTable(w)" alt />
  4916. <!-- @click="openFile(w.works)" -->
  4917. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  4918. rightW:
  4919. w.userid == userid ||
  4920. tType == 1 ||
  4921. tType == 4 ||
  4922. w.ateacher == userid,
  4923. }">
  4924. {{ JSON.parse(w.score).wScore }}分
  4925. </div>
  4926. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  4927. :class="{
  4928. rightW:
  4929. w.userid == userid ||
  4930. tType == 1 ||
  4931. tType == 4 ||
  4932. w.ateacher == userid,
  4933. }">
  4934. 评分
  4935. </div>
  4936. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  4937. " @click.stop="deleteWorks(w.wid)" alt />
  4938. </div>
  4939. <div class="comment" style="min-width: 200px">
  4940. <div class="worksName">
  4941. <div>{{ w.sName }}</div>
  4942. </div>
  4943. <div class="commentList">
  4944. <div class="commentList">
  4945. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  4946. ">
  4947. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  4948. </div>
  4949. <div>{{ w.likesCount }}</div>
  4950. </div>
  4951. <div class="commentList" style="margin-right: 15px">
  4952. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  4953. <img src="../../assets/icon/comment/comment.png" alt="" />
  4954. </div>
  4955. <div>{{ w.commentCount }}</div>
  4956. </div>
  4957. </div>
  4958. </div>
  4959. </div>
  4960. </div>
  4961. </div>
  4962. <div v-if="tType &&
  4963. ((tType == 2 && sIsOpen == true) ||
  4964. tType == 1 ||
  4965. tType == 4) &&
  4966. tool.tool.indexOf(52) != -1
  4967. " class="worksBox">
  4968. <div class="noWorksS">
  4969. <div v-for="(s, sIndex) in noWorksS[toolIndex]" :key="sIndex" class="noWorksName"
  4970. @click="teacherWorkSubmit(52, toolIndex, taskCount, s)" :class="{ isWork: s.type == '2' }">
  4971. {{ s.student }}
  4972. </div>
  4973. </div>
  4974. <div class="zuoyeYulan" v-if="worksStudent.length &&
  4975. worksStudent[toolIndex].length > 0
  4976. ">
  4977. <div class="worksTop">
  4978. <div>作业预览</div>
  4979. <div class="corOpen" @click="contract(toolIndex)" v-if="worksStudent[toolIndex].length > 6 &&
  4980. isCloseList[toolIndex].isClose == 0
  4981. ">
  4982. 收缩
  4983. </div>
  4984. <div class="corOpen" @click="contract(toolIndex)" v-if="isCloseList[toolIndex].isClose == 1">
  4985. 展开
  4986. </div>
  4987. </div>
  4988. </div>
  4989. <div class="worksDetailBox" v-if="worksStudent.length &&
  4990. worksStudent[toolIndex].length > 0
  4991. ">
  4992. <div class="works" style="
  4993. width: 200px;
  4994. height: 140px;
  4995. margin: 10px 10px 10px 0;
  4996. border-radius: 15px;
  4997. box-shadow: 0 0 6px 1px #dfdada;
  4998. " v-for="(w, wIndex) in isCloseList[toolIndex].isClose ==
  4999. 0
  5000. ? worksStudent[toolIndex]
  5001. : worksStudent[toolIndex].slice(0, 6)" :key="wIndex"
  5002. :class="w.type == 1 ? 'isTypeOne' : ''">
  5003. <div class="workImg">
  5004. <img :src="word" @click="openWord(w)" alt />
  5005. <!-- @click="openFile(w.works)" -->
  5006. <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
  5007. rightW:
  5008. w.userid == userid ||
  5009. tType == 1 ||
  5010. tType == 4 ||
  5011. w.ateacher == userid,
  5012. }">
  5013. {{ JSON.parse(w.score).wScore }}分
  5014. </div>
  5015. <div class="answerScore" @click.stop="openScore(w)" v-else-if="courseDetail.userid == userid"
  5016. :class="{
  5017. rightW:
  5018. w.userid == userid ||
  5019. tType == 1 ||
  5020. tType == 4 ||
  5021. w.ateacher == userid,
  5022. }">
  5023. 评分
  5024. </div>
  5025. <img class="deleteImg" src="../../assets/deleteworks.png" v-if="w.userid == userid || tType == 1 || tType == 4
  5026. " @click.stop="deleteWorks(w.wid)" alt />
  5027. </div>
  5028. <div class="comment" style="min-width: 200px">
  5029. <div class="worksName">
  5030. <div>{{ w.sName }}</div>
  5031. </div>
  5032. <div class="commentList">
  5033. <div class="commentList">
  5034. <div class="commentImg" @click="isLikes(w.wid, userid, 1, null, w.isLikes)
  5035. ">
  5036. <img :src="w.isLikes == true ? likes : noLikes" alt="" />
  5037. </div>
  5038. <div>{{ w.likesCount }}</div>
  5039. </div>
  5040. <div class="commentList" style="margin-right: 15px">
  5041. <div class="commentImg" @click="commentOther(w, toolIndex, wIndex)">
  5042. <img src="../../assets/icon/comment/comment.png" alt="" />
  5043. </div>
  5044. <div>{{ w.commentCount }}</div>
  5045. </div>
  5046. </div>
  5047. </div>
  5048. </div>
  5049. </div>
  5050. </div>
  5051. </div>
  5052. </div>
  5053. <div class="vedioBox" v-if="false
  5054. ">
  5055. <div class="queTop" style="
  5056. font-size: 25px;
  5057. padding: 15px 0 15px 30px;
  5058. font-weight: bold;
  5059. ">
  5060. 评一评
  5061. </div>
  5062. <div class="evaCss" :class="{ evaCssMax: Stbodywidth < 974 }">
  5063. <div class="elist_input">
  5064. <div v-for="(eItem, eIndex) in chapInfoList[courseType]
  5065. .chapterInfo[0].taskJson[taskCount].eList" :key="eIndex" class="elist_input_box">
  5066. <div style="width: 95%">
  5067. <div style="
  5068. display: flex;
  5069. flex-direction: row;
  5070. flex-wrap: nowrap;
  5071. align-items: center;
  5072. ">
  5073. <div style="max-width: calc(100% - 285px)">
  5074. <span>{{ eItem.value }}</span>
  5075. </div>
  5076. <div style="
  5077. padding-left: 25px;
  5078. display: flex;
  5079. flex-direction: row;
  5080. align-items: center;
  5081. ">
  5082. <el-rate v-model="eItem.score" :colors="colors" disabled></el-rate>
  5083. </div>
  5084. </div>
  5085. <div class="elist_inptu_text" style="padding-left: 10px">
  5086. <span v-if="eItem.detail != ''">{{
  5087. eItem.detail
  5088. }}</span>
  5089. <span v-else style="color: #b2b1b3; font-size: 14px">暂无描述...</span>
  5090. </div>
  5091. </div>
  5092. </div>
  5093. </div>
  5094. <div v-if="evalua" style="
  5095. border: 1px solid #e5e5e5;
  5096. max-width: 650px;
  5097. width: 100%;
  5098. margin-top: 20px;
  5099. box-shadow: 3px 1px 15px 3px #e0e0e0;
  5100. ">
  5101. <div class="e_add_top">
  5102. <div class="e_add_title">
  5103. <span>目标管理名称</span>
  5104. <span>{{ eTitle }}</span>
  5105. <img src="../../assets/line.png" class="cru_line" style="
  5106. width: 125px;
  5107. height: 20px;
  5108. bottom: -10px;
  5109. left: 120px;
  5110. " />
  5111. <!-- <el-input
  5112. v-model="eTitle"
  5113. placeholder="请输入名称"
  5114. @change="setMindData"
  5115. ></el-input>-->
  5116. </div>
  5117. </div>
  5118. <div class="e_add_content">
  5119. <div class="e_add_list_pbox">
  5120. <div class="e_add_list_pbox_title">
  5121. <span class="type_title">切换模式</span>
  5122. <div class="type_content">
  5123. <span :class="{ active: typeMode == 1 }" @click="typeMode = 1">目标树</span>
  5124. <span :class="{ active: typeMode == 2 }" @click="typeMode = 2">目标罗盘</span>
  5125. <span :class="{ active: typeMode == 3 }" @click="typeMode = 3">目标看板</span>
  5126. </div>
  5127. </div>
  5128. <div class="e_add_list_pbox_content">
  5129. <Mind :showBar="false" :mindData="data" style="width: 100%" v-show="typeMode == 1"></Mind>
  5130. <Sunburst :Josn="eJson" :num="eJSONNum" style="width: 100%" v-if="typeMode == 2"></Sunburst>
  5131. <SeeBoard :Josn="eJson" :num="eJSONNum" :ename="eTitle" style="width: 100%" v-if="typeMode == 3">
  5132. </SeeBoard>
  5133. </div>
  5134. </div>
  5135. </div>
  5136. </div>
  5137. </div>
  5138. </div>
  5139. </div>
  5140. </div>
  5141. <el-dialog title="作业提交" :visible.sync="dialogVisible" :append-to-body="true" width="500px"
  5142. :before-close="handleClose" class="dialog_change">
  5143. <div class="marginT">
  5144. <div>上传文件</div>
  5145. <div class="chapter_add" @click="addImg($event)" v-if="studyJuri[0].cover.length == 0">
  5146. <div class="up_photo">
  5147. <img src="../../assets/icon/uploadImg.png" alt />
  5148. </div>
  5149. <!-- <input
  5150. type="file"
  5151. accept="video/mp4, video/quicktime, video/x-msvideo,application/pdf, application/.ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/*"
  5152. style="display: none"
  5153. @change="beforeUpload1($event, 1)"
  5154. /> -->
  5155. <input type="file" accept="*" style="display: none" @change="beforeUpload1($event, 1)" />
  5156. <!-- <input
  5157. type="file"
  5158. accept="image/*"
  5159. capture="camera"
  5160. style="display: none"
  5161. @change="beforeUpload1($event, 1)"
  5162. /> -->
  5163. </div>
  5164. <div class="chapter_add" style="
  5165. display: flex;
  5166. width: 100%;
  5167. flex-direction: row;
  5168. flex-wrap: wrap;
  5169. justify-content: flex-start;
  5170. padding: 15px 0;
  5171. " v-if="studyJuri[0].cover.length > 0">
  5172. <div class="upCover">
  5173. <img :src="studyJuri[0].cover[0].url" alt v-if="fileType == 0" />
  5174. <img :src="word" alt v-else-if="fileType == 1" />
  5175. <img :src="video" alt v-else-if="fileType == 2" />
  5176. <img :src="word2" alt v-else-if="fileType == 3" />
  5177. <span class="picName">{{ studyJuri[0].cover[0].name }}</span>
  5178. <div class="deleteWord" @click="clean(1)">
  5179. <img src="../../assets/icon/deleteWorks.png" alt />
  5180. </div>
  5181. </div>
  5182. </div>
  5183. </div>
  5184. <div class="upload_send" @click="addCourseWorks(taskCount)" v-if="!proVisible">
  5185. 提交
  5186. </div>
  5187. </el-dialog>
  5188. </div>
  5189. </div>
  5190. <div class="pButton" @click="(pzDialog = true), selectPz()" v-if="tType == 4 || ispzType == 4">
  5191. <!-- 批 -->
  5192. <img src="../../assets/pzBtn2.png" style="width: 25px" alt="" />
  5193. </div>
  5194. <div v-if="pzDialog == true" class="newDialogCss">
  5195. <div class="pzTop2">
  5196. <!-- <div>批注</div>
  5197. <div @click="pzDialog = false">
  5198. <img src="../../assets/close1.png" alt="" />
  5199. </div> -->
  5200. <div class="checkbox">
  5201. <div class="check" style="font-size: 25px">评课笔记</div>
  5202. <img src="../../assets/pzBtn.png" @click="pzDialog = false" alt="" />
  5203. </div>
  5204. </div>
  5205. <div :class="pzList && pzList.length ? 'pzBox' : 'noPzBox'">
  5206. <div class="pzListBox" v-if="pzList && pzList.length">
  5207. <div class="pzList" v-for="(pz, pzIndex) in pzList" :key="pzIndex">
  5208. <div class="pzNavTop">
  5209. <div>批</div>
  5210. <div>
  5211. {{
  5212. pz.username && pz.username.length > 5
  5213. ? pz.username.substring(0, 5) + "..."
  5214. : pz.username
  5215. }}的批注
  5216. </div>
  5217. <div class="pzDelete" v-if="pz.userid == userid" @click="deletePz(pz.id)">
  5218. 删除
  5219. </div>
  5220. </div>
  5221. <div class="pzContent cont" v-html="pz.content" v-if="pz.type == '1'"></div>
  5222. <div class="pzContent" v-if="pz.type == '2'">
  5223. <audio :src="pz.content" controls="controls" ref="audio">
  5224. Your browser does not support the audio element.
  5225. </audio>
  5226. </div>
  5227. <div class="pzContent" v-if="pz.type == '3'">
  5228. <img :src="pz.content" style="width: 90%; margin: 0 auto; display: block" @click="previewImg(pz.content)" />
  5229. </div>
  5230. <div class="time">
  5231. {{ pz.time }}
  5232. </div>
  5233. </div>
  5234. </div>
  5235. <div class="noPz" v-else>
  5236. <img src="../../assets/icon/noPz.png" alt="" />
  5237. </div>
  5238. <div class="addPzButton">
  5239. <div class="addPz" @click="(addPzDialog = true), (pzType = 1)">
  5240. 添加批注
  5241. </div>
  5242. <!-- <div class="img1">
  5243. <div @click="(addPzDialog = true), (pzType = 2)">
  5244. <img src="../../assets/audio.png" /><span>音频</span>
  5245. </div>
  5246. </div> -->
  5247. </div>
  5248. </div>
  5249. </div>
  5250. <div v-if="addPzDialog == true" class="addDialogCss">
  5251. <div class="pzTop">
  5252. <div class="teacherPz">
  5253. <div class="teacherPzImg">
  5254. <img src="../../assets/icon/teacherPz.png" alt="" />
  5255. </div>
  5256. <div style="margin-left: 10px; height: 25px">教师批注</div>
  5257. </div>
  5258. <div @click="addPzDialog = false">
  5259. <img src="../../assets/close1.png" alt="" />
  5260. </div>
  5261. </div>
  5262. <div class="addPzBox">
  5263. <div class="addPzCheck">
  5264. <span :class="{ isChooseActive: pzType == 1 }" @click="pzType = 1">文本</span>
  5265. <!-- <span :class="{isChooseActive:pzType==3}" @click="pzType = 3">图片</span> -->
  5266. <span :class="{ isChooseActive: pzType == 2 }" @click="pzType = 2">音频</span>
  5267. </div>
  5268. <div style="height: calc(100% - 95px)">
  5269. <!-- <textarea class="binfo_input pzConText" cols placeholder="请填写项目课程关键问题...." v-model="pzConText"
  5270. v-if="pzType == 1"></textarea> -->
  5271. <editor-bar class="binfo_input pzConText" style="width: 100% !important" placeholder="请输入任务描述"
  5272. v-model="pzConText" @change="change" v-if="pzType == 1"></editor-bar>
  5273. <Audio @addPz="addPz" class="pzAudioClass" v-if="pzType == 2"></Audio>
  5274. <!-- <div class="pzAudioClass" v-if="pzType == 3">
  5275. <div @click="addImg($event)">
  5276. <el-button type="primary">上传图片</el-button>
  5277. <input type="file" accept="image/png, image/gif, image/jpeg" style="display: none"
  5278. @change="beforeUpload1($event, 4)" />
  5279. </div>
  5280. </div> -->
  5281. </div>
  5282. <div class="addTextCss" @click="addPz('1')" v-if="pzType == 1">
  5283. 确定
  5284. </div>
  5285. </div>
  5286. </div>
  5287. <div v-if="proVisible" class="mask">
  5288. <div class="progressBox">
  5289. <!-- <div id="closePro" class="closeCss">
  5290. <img src="../../assets/icon/close.png" alt />
  5291. </div> -->
  5292. <div class="lbox">
  5293. <img src="../../assets/loading.gif" />上传中,请稍后
  5294. </div>
  5295. <div style="margin-bottom: 10px">
  5296. <span>{{ isFinishSize }}M</span> / <span>{{ isAllSize }}M</span>
  5297. </div>
  5298. <el-progress :text-inside="true" :stroke-width="20" :percentage="progress" style="width: 80%"></el-progress>
  5299. </div>
  5300. </div>
  5301. <div v-if="proVisible2" class="mask">
  5302. <div class="progressBox">
  5303. <div class="lbox">
  5304. <img src="../../assets/loading.gif" />上传中,请稍后
  5305. </div>
  5306. <!-- <el-progress :text-inside="true" :stroke-width="20" :percentage="progress" style="width: 80%"></el-progress> -->
  5307. </div>
  5308. </div>
  5309. <el-dialog :visible.sync="pictureDialog" size="tiny">
  5310. <img width="100%" :src="dialogImageUrl" alt />
  5311. </el-dialog>
  5312. <el-dialog :title="noteName != '' ? noteName : '查看问卷'" :visible.sync="dialogVisible5" :append-to-body="true"
  5313. width="1000px" :before-close="handleClose" class="dialog_diy dialog_diy3">
  5314. <div>
  5315. <div class="a_add_title" style="
  5316. display: flex;
  5317. flex-direction: row;
  5318. align-items: center;
  5319. justify-content: center;
  5320. ">
  5321. <div style="margin-right: 20px; font-size: 20px">标题:</div>
  5322. <div style="font-size: 20px">{{ askJson.askTitle }}</div>
  5323. </div>
  5324. <div class="a_addBox">
  5325. <div style="font-size: 16px; color: #c7c7c7">题目内容</div>
  5326. <div class="a_add_box" v-for="(item1, index1) in askJson.askCount" :key="index1">
  5327. <div class="a_add_head">
  5328. <div style="display: flex">
  5329. {{ index1 + 1 + "、" }}
  5330. <div>题目:{{ askJson.askJson[index1].askstitle }}</div>
  5331. </div>
  5332. <img v-if="askJson.askJson[index1].img" :src="askJson.askJson[index1].img"
  5333. style="height: 300px; margin-top: 10px; max-width: 100%" />
  5334. </div>
  5335. <div class="a_add_body">
  5336. <div class="a_add_input">
  5337. <el-radio-group v-model="radio[index1]" v-if="askJson.askJson[index1].type == '1' ||
  5338. !askJson.askJson[index1].type
  5339. ">
  5340. <el-radio v-for="(item2, checkIndex) in askJson.askJson[index1]
  5341. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle"><span
  5342. v-html="item2"></span></el-radio>
  5343. </el-radio-group>
  5344. <el-checkbox-group v-model="radio[index1]" v-if="askJson.askJson[index1].type == '2'">
  5345. <el-checkbox v-for="(item2, checkIndex1) in askJson.askJson[index1]
  5346. .checkList" :key="checkIndex1" :label="checkIndex1" :disabled="isAnswer" class="redioStyle"><span
  5347. v-html="item2"></span>
  5348. </el-checkbox>
  5349. </el-checkbox-group>
  5350. </div>
  5351. </div>
  5352. </div>
  5353. </div>
  5354. </div>
  5355. <span slot="footer" class="dialog-footer">
  5356. <el-button @click="dialogVisible5 = false" v-show="noteName == ''">取 消</el-button>
  5357. <el-button type="primary" @click="addStudentAsk" v-show="noteName == ''">确 定</el-button>
  5358. </span>
  5359. </el-dialog>
  5360. <el-dialog :title="noteName != '' ? noteName : '查看问卷'" :visible.sync="dialogVisible5Teacher" :append-to-body="true"
  5361. width="1000px" :before-close="handleClose" class="dialog_diy dialog_diy3">
  5362. <div>
  5363. <div class="w_name">
  5364. 学生姓名:<span>{{ sStudent.student }}</span>
  5365. </div>
  5366. <div class="a_add_title" style="
  5367. display: flex;
  5368. flex-direction: row;
  5369. align-items: center;
  5370. justify-content: center;
  5371. ">
  5372. <div style="margin-right: 20px; font-size: 20px">标题:</div>
  5373. <div style="font-size: 20px">{{ askJson.askTitle }}</div>
  5374. </div>
  5375. <div class="a_addBox">
  5376. <div style="font-size: 16px; color: #c7c7c7">题目内容</div>
  5377. <div class="a_add_box" v-for="(item1, index1) in askJson.askCount" :key="index1">
  5378. <div class="a_add_head">
  5379. <div style="display: flex">
  5380. {{ index1 + 1 + "、" }}
  5381. <div>题目:{{ askJson.askJson[index1].askstitle }}</div>
  5382. </div>
  5383. <img v-if="askJson.askJson[index1].img" :src="askJson.askJson[index1].img"
  5384. style="height: 300px; margin-top: 10px; max-width: 100%" />
  5385. </div>
  5386. <div class="a_add_body">
  5387. <div class="a_add_input">
  5388. <el-radio-group v-model="radio[index1]" v-if="askJson.askJson[index1].type == '1' ||
  5389. !askJson.askJson[index1].type
  5390. ">
  5391. <el-radio v-for="(item2, checkIndex) in askJson.askJson[index1]
  5392. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle"><span
  5393. v-html="item2"></span></el-radio>
  5394. </el-radio-group>
  5395. <el-checkbox-group v-model="radio[index1]" v-if="askJson.askJson[index1].type == '2'">
  5396. <el-checkbox v-for="(item2, checkIndex1) in askJson.askJson[index1]
  5397. .checkList" :key="checkIndex1" :label="checkIndex1" :disabled="isAnswer" class="redioStyle"><span
  5398. v-html="item2"></span>
  5399. </el-checkbox>
  5400. </el-checkbox-group>
  5401. </div>
  5402. </div>
  5403. </div>
  5404. </div>
  5405. </div>
  5406. <span slot="footer" class="dialog-footer">
  5407. <el-button @click="dialogVisible5Teacher = false" v-show="noteName == ''">取 消</el-button>
  5408. <el-button type="primary" @click="addStudentAskTeacher" v-show="noteName == ''">确 定</el-button>
  5409. </span>
  5410. </el-dialog>
  5411. <el-dialog :title="noteName != '' ? noteName : '查看选择题'" :visible.sync="dialogVisibleChoice" :append-to-body="true"
  5412. width="1000px" :before-close="handleClose" class="dialog_diy dialog_diy3">
  5413. <div>
  5414. <div class="a_addBox">
  5415. <div style="font-size: 16px; color: #c7c7c7">题目内容</div>
  5416. <div class="a_add_box" v-for="(item1, index1) in testJson.testCount" :key="index1">
  5417. <div class="a_add_head">
  5418. <div style="display: flex">
  5419. {{ index1 + 1 + "、" }}
  5420. <div v-if="testJson.testJson[index1].type == '1'" style="margin-right: 5px;min-width: 70px;">
  5421. (单选题)
  5422. </div>
  5423. <div v-if="testJson.testJson[index1].type == '2'" style="margin-right: 5px;min-width: 70px;">
  5424. (多选题)
  5425. </div>
  5426. <div>题目:{{ testJson.testJson[index1].teststitle }}</div>
  5427. </div>
  5428. <img v-if="testJson.testJson[index1].img" :src="testJson.testJson[index1].img"
  5429. style="height: 300px; margin-top: 10px; max-width: 100%" />
  5430. </div>
  5431. <div class="timuImgBox" v-if="testJson.testJson[index1].timuList &&
  5432. testJson.testJson[index1].timuList.length
  5433. ">
  5434. <div v-for="(timg, tIndex) in testJson.testJson[index1].timuList" :key="tIndex" class="timuImg"
  5435. @click.stop="previewImg(timg.src)">
  5436. <img :src="timg.src" alt="" />
  5437. </div>
  5438. </div>
  5439. <div class="a_add_body">
  5440. <div class="a_add_input">
  5441. <el-radio-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '1'">
  5442. <div class="radioBox">
  5443. <el-radio v-for="(item2, checkIndex) in testJson.testJson[index1]
  5444. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle">
  5445. <div style="margin-right: 10px" v-if="item2 && item2.imgType && item2.imgType == 1">
  5446. <div class="inImg" @click.stop="previewImg(item2.src)">
  5447. <img :src="item2.src" alt="" />
  5448. </div>
  5449. </div>
  5450. <span v-else v-html="item2"></span>
  5451. </el-radio>
  5452. </div>
  5453. </el-radio-group>
  5454. <el-checkbox-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '2'">
  5455. <div class="radioBox">
  5456. <el-checkbox v-for="(item2, checkIndex) in testJson.testJson[index1]
  5457. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle">
  5458. <div style="margin-right: 10px" v-if="item2 && item2.imgType && item2.imgType == 1">
  5459. <div class="inImg" @click.stop="previewImg(item2.src)">
  5460. <img :src="item2.src" alt="" />
  5461. </div>
  5462. </div>
  5463. <span v-else v-html="item2"></span>
  5464. </el-checkbox>
  5465. </div>
  5466. </el-checkbox-group>
  5467. </div>
  5468. </div>
  5469. </div>
  5470. </div>
  5471. </div>
  5472. <span slot="footer" class="dialog-footer">
  5473. <el-button @click="dialogVisibleChoice = false" v-show="noteName == ''">取 消</el-button>
  5474. <el-button type="primary" @click="addStudentTest" v-show="noteName == ''">确 定</el-button>
  5475. </span>
  5476. </el-dialog>
  5477. <el-dialog :title="noteName != '' ? noteName : '查看选择题'" :visible.sync="dialogVisibleChoiceTeacher"
  5478. :append-to-body="true" width="1000px" :before-close="handleClose" class="dialog_diy dialog_diy3">
  5479. <div>
  5480. <div class="w_name">
  5481. 学生姓名:<span>{{ sStudent.student }}</span>
  5482. </div>
  5483. <div class="a_addBox">
  5484. <div style="font-size: 16px; color: #c7c7c7">题目内容</div>
  5485. <div class="a_add_box" v-for="(item1, index1) in testJson.testCount" :key="index1">
  5486. <div class="a_add_head">
  5487. <div style="display: flex">
  5488. {{ index1 + 1 + "、" }}
  5489. <div v-if="testJson.testJson[index1].type == '1'" style="margin-right: 5px;min-width: 70px;">
  5490. (单选题)
  5491. </div>
  5492. <div v-if="testJson.testJson[index1].type == '2'" style="margin-right: 5px;min-width: 70px;">
  5493. (多选题)
  5494. </div>
  5495. <div>题目:{{ testJson.testJson[index1].teststitle }}</div>
  5496. </div>
  5497. <img v-if="testJson.testJson[index1].img" :src="testJson.testJson[index1].img"
  5498. style="height: 300px; margin-top: 10px; max-width: 100%" />
  5499. </div>
  5500. <div class="timuImgBox" v-if="testJson.testJson[index1].timuList &&
  5501. testJson.testJson[index1].timuList.length
  5502. ">
  5503. <div v-for="(timg, tIndex) in testJson.testJson[index1].timuList" :key="tIndex" class="timuImg"
  5504. @click.stop="previewImg(timg.src)">
  5505. <img :src="timg.src" alt="" />
  5506. </div>
  5507. </div>
  5508. <div class="a_add_body">
  5509. <div class="a_add_input">
  5510. <el-radio-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '1'">
  5511. <div class="radioBox">
  5512. <el-radio v-for="(item2, checkIndex) in testJson.testJson[index1]
  5513. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle">
  5514. <div style="margin-right: 10px" v-if="item2 && item2.imgType && item2.imgType == 1">
  5515. <div class="inImg" @click.stop="previewImg(item2.src)">
  5516. <img :src="item2.src" alt="" />
  5517. </div>
  5518. </div>
  5519. <span v-else v-html="item2"></span>
  5520. </el-radio>
  5521. </div>
  5522. </el-radio-group>
  5523. <el-checkbox-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '2'">
  5524. <div class="radioBox">
  5525. <el-checkbox v-for="(item2, checkIndex) in testJson.testJson[index1]
  5526. .checkList" :key="checkIndex" :label="checkIndex" :disabled="isAnswer" class="redioStyle">
  5527. <div style="margin-right: 10px" v-if="item2 && item2.imgType && item2.imgType == 1">
  5528. <div class="inImg" @click.stop="previewImg(item2.src)">
  5529. <img :src="item2.src" alt="" />
  5530. </div>
  5531. </div>
  5532. <span v-else v-html="item2"></span>
  5533. </el-checkbox>
  5534. </div>
  5535. </el-checkbox-group>
  5536. </div>
  5537. </div>
  5538. </div>
  5539. </div>
  5540. </div>
  5541. <span slot="footer" class="dialog-footer">
  5542. <el-button @click="dialogVisibleChoiceTeacher = false" v-show="noteName == ''">取 消</el-button>
  5543. <el-button type="primary" @click="addStudentTestTeacher" v-show="noteName == ''">确 定</el-button>
  5544. </span>
  5545. </el-dialog>
  5546. <el-dialog title="查看富文本" :visible.sync="dialogVisible1" :append-to-body="true" width="500px"
  5547. :before-close="handleClose" class="dialog_diy textCss">
  5548. <el-form style="font-size: 20px">
  5549. <el-form-item label="文本标题" class="textTitle">
  5550. <div style="font-size: 20px">{{ text.name }}</div>
  5551. </el-form-item>
  5552. <div>富文本内容</div>
  5553. <div v-html="text.url" style="font-size: 18px; padding: 40px 0 0 0"></div>
  5554. </el-form>
  5555. <span slot="footer" class="dialog-footer">
  5556. <el-button type="primary" @click="dialogVisible1 = false">确定</el-button>
  5557. </span>
  5558. </el-dialog>
  5559. <el-dialog title="文件预览" :visible.sync="dialogVisible3" width="50%" :before-close="handleClose" class="dialog_diy"
  5560. :class="{ fullStyle: full }">
  5561. <div slot="title" class="header-title">
  5562. <div style="color: #fff">文件预览</div>
  5563. <div style="position: absolute; top: 19px; right: 50px">
  5564. <img src="../../assets/full.png" style="height: 16px; cursor: pointer" alt="" @click="fullTools" />
  5565. </div>
  5566. </div>
  5567. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"
  5568. :class="{ fullStyle: full }"></pdf>
  5569. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600" :class="{ fullStyle: full }"></iframe>
  5570. </el-dialog>
  5571. <el-dialog title="文件预览" :visible.sync="dialogVisible6" width="50%" :before-close="handleClose" class="dialog_diy">
  5572. <iframe :src="pptImgUrl1" frameborder="0" width="100%" height="600"></iframe>
  5573. </el-dialog>
  5574. <el-dialog title="提示" :visible.sync="dialogVisible4" :append-to-body="true" width="800px" :before-close="handleClose"
  5575. class="dialog_diy notice">
  5576. <div>此功能暂未开放!</div>
  5577. <el-button type="primary" @click="dialogVisible4 = false">确定</el-button>
  5578. </el-dialog>
  5579. <el-dialog title="问答" :visible.sync="answerDialogVisible" :append-to-body="true" width="800px"
  5580. :before-close="handleClose" class="dialog_diy">
  5581. <div>
  5582. <div style="
  5583. display: flex;
  5584. flex-wrap: nowrap;
  5585. flex-direction: column;
  5586. position: relative;
  5587. ">
  5588. <div class="queTop" style="padding: 20px 0 20px 0">
  5589. <div class="question">
  5590. <img src="../../assets/icon/question.png" alt />
  5591. </div>
  5592. <div class="queTitle">
  5593. <div style="width: 90px; min-width: 90px">提问:</div>
  5594. <div>{{ answerQ }}</div>
  5595. </div>
  5596. </div>
  5597. <div class="ediBottom">
  5598. <textarea rows="6" class="binfo_input" cols style="width: 95%; height: 120px"
  5599. v-model="questionAnswer"></textarea>
  5600. </div>
  5601. </div>
  5602. </div>
  5603. <div slot="footer">
  5604. <el-button @click="answerDialogVisible = false">取 消</el-button>
  5605. <el-button type="primary" @click="addQuestion">提 交</el-button>
  5606. </div>
  5607. </el-dialog>
  5608. <el-dialog title="倒计时" :visible.sync="timeDialogVisible" :append-to-body="true" width="800px"
  5609. :before-close="handleClose" class="dialog_diy">
  5610. <div>
  5611. <Time :preTime="preTime" v-if="timeDialogVisible"></Time>
  5612. </div>
  5613. <div slot="footer">
  5614. <el-button @click="timeDialogVisible = false">关 闭</el-button>
  5615. </div>
  5616. </el-dialog>
  5617. <el-dialog title="权限设置" :visible.sync="juriVisible" :append-to-body="true" width="400px" :before-close="handleClose"
  5618. class="dialog_diy">
  5619. <div>
  5620. <div class="open_box">
  5621. <div class="switch_box">
  5622. <span>允许学生查看所有作业</span>
  5623. <el-switch v-model="sIsOpen" active-text="" class="switchCss" @change="updateSLook"></el-switch>
  5624. </div>
  5625. <div class="switch_box" v-if="courseDetail.userid == userid ||
  5626. (courseDetail.course_teacher &&
  5627. courseDetail.course_teacher.indexOf(userid) != -1)
  5628. ">
  5629. <!-- v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1" -->
  5630. <span>禁止学生查看所有阶段</span>
  5631. <el-switch v-model="IsLookOpen" active-text="" class="switchCss" @change="updateLookOpen"></el-switch>
  5632. </div>
  5633. <div class="switch_box" v-if="courseDetail.userid == userid">
  5634. <span>开启跟随模式</span>
  5635. <el-switch v-model="IsFollow" active-text="" class="switchCss" @change="updateFollow"></el-switch>
  5636. </div>
  5637. </div>
  5638. </div>
  5639. <div slot="footer">
  5640. <el-button style="background: #409efe; color: #fff" @click="juriVisible = false">关 闭</el-button>
  5641. </div>
  5642. </el-dialog>
  5643. <el-dialog title="查看视频" :visible.sync="videoVisible" :append-to-body="true" width="1000px" :before-close="handleClose"
  5644. class="dialog_diy1">
  5645. <div class="workd_media" style="height: 100%" v-if="videoDetail.sources">
  5646. <video-player class="video-player vjs-custom-skin" :playsinline="true" :options="videoDetail"
  5647. @play="onPlayerPlay($event)" style="width: 100%; height: 100%"></video-player>
  5648. </div>
  5649. <div slot="footer">
  5650. <el-button style="background: #409efe; color: #fff"
  5651. @click="(videoVisible = false), (videoDetail.sources[0].src = '')">
  5652. 关 闭</el-button>
  5653. </div>
  5654. </el-dialog>
  5655. <el-dialog title="查看详情" :visible.sync="commentDialogVisible" :append-to-body="true" width="800px"
  5656. :before-close="handleClose" class="dialog_diy">
  5657. <div class="commentTop">
  5658. <div class="studentDetail">
  5659. <div class="tx"><img src="../../assets/avatar.png" alt="" /></div>
  5660. <div class="nameAndTime">
  5661. <div style="margin-bottom: 5px">{{ commentDetail.sName }}</div>
  5662. <div>{{ commentDetail.time }}</div>
  5663. </div>
  5664. <div class="returnBtn" style="margin-left: auto; width: 80px" v-if="commentDetail.works &&
  5665. commentDetail.type == 0 &&
  5666. (tType == 1 || tType == 4)
  5667. " @click="showPicturePaint(
  5668. commentDetail.img ? commentDetail.img : commentDetail.works
  5669. )
  5670. ">
  5671. 教师批注
  5672. </div>
  5673. </div>
  5674. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 2">
  5675. {{ JSON.parse(commentDetail.works)[0].answer }}
  5676. </div>
  5677. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 1">
  5678. <img src="../../assets/teacherWork.png" v-if="commentDetail.ateacher" class="w_teachert" />
  5679. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"
  5680. :class="{ fullStyle: full }"></pdf>
  5681. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600" :class="{ fullStyle: full }"></iframe>
  5682. </div>
  5683. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 0">
  5684. <img src="../../assets/teacherWork.png" v-if="commentDetail.ateacher" class="w_teachert" style="right: 105px" />
  5685. <img :src="commentDetail.works" alt="" @click="previewImg(commentDetail.works)" />
  5686. </div>
  5687. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 3">
  5688. <img src="../../assets/teacherWork.png" v-if="commentDetail.ateacher" class="w_teachert" />
  5689. <video-player class="video-player vjs-custom-skin" :playsinline="true" :options="videoDetail"
  5690. @play="onPlayerPlay($event)" style="width: 90%; height: 100%; margin: 0 0 0 30px"></video-player>
  5691. </div>
  5692. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 10">
  5693. <div class="cont" v-html="commentDetail.works.text"></div>
  5694. </div>
  5695. <div class="worksAnswer codeFileBox" v-if="commentDetail.works && commentDetail.type == 12"
  5696. @click="downloadFile(commentDetail.works)">
  5697. <img src="../../assets/icon/codeFile.png" />
  5698. <div>点击下载文件</div>
  5699. </div>
  5700. <div class="worksAnswer codeFileBox" v-if="commentDetail.works && commentDetail.type == 15"
  5701. @click="openCocoPi(57, commentIndexJson.toolIndex, commentDetail.userid, commentDetail.sName)">
  5702. <img src="../../assets/icon/codeFile.png" />
  5703. <div>点击打开CocoPi</div>
  5704. </div>
  5705. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 13">
  5706. <div v-html="JSON.parse(commentDetail.works).text"></div>
  5707. </div>
  5708. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 4">
  5709. <div class="evalCss">
  5710. <div class="nav">请选择星星进行评分</div>
  5711. <div class="middleBox" v-if="eScore.eStar">
  5712. <div class="pfBox" v-for="(e, eIndex) in rateJson" :key="eIndex">
  5713. <div class="nameAndrate">
  5714. <div>{{ e.value }}</div>
  5715. <el-rate v-model="eScore.eStar[eIndex]" disabled></el-rate>
  5716. </div>
  5717. <div v-if="e.detail">{{ e.detail }}</div>
  5718. </div>
  5719. <div class="bz">
  5720. <textarea disabled rows="4" class="pj" style="
  5721. padding: 10px 5px;
  5722. width: 70%;
  5723. background: #f7f6f9;
  5724. font-size: 14px;
  5725. text-indent: 10px;
  5726. color: #000;
  5727. " cols v-model="eScore.eBzText"
  5728. placeholder="请输入评价内容..."></textarea>
  5729. </div>
  5730. </div>
  5731. </div>
  5732. </div>
  5733. <div class="comment">
  5734. <div class="commentList">
  5735. <div class="commentImg">
  5736. <img @click="isLikes(
  5737. commentDetail.wid,
  5738. userid,
  5739. 1,
  5740. null,
  5741. commentDetail.isLikes
  5742. )
  5743. " :src="commentDetail.isLikes == true ? likes : noLikes" alt="" />
  5744. </div>
  5745. <div>{{ commentDetail.likesCount }}</div>
  5746. </div>
  5747. <div class="commentList">
  5748. <div class="commentImg">
  5749. <img src="../../assets/icon/comment/comment.png" alt="" />
  5750. </div>
  5751. <div>{{ commentDetail.commentCount }}</div>
  5752. </div>
  5753. </div>
  5754. <div class="drawPBox" v-if="commentDetail.img">
  5755. <span>教师批注</span>
  5756. <img :src="commentDetail.img" alt="" @click="previewImg(commentDetail.img)" />
  5757. <span class="deleteImg" v-if="tType == 1 || tType == 4" @click.stop="deletePicturePaint(commentDetail.wid)"
  5758. style="
  5759. font-size: 14px;
  5760. width: auto !important;
  5761. color: #b4b4b4;
  5762. top: unset;
  5763. bottom: 0;
  5764. border: none;
  5765. padding: 0;
  5766. height: auto !important;
  5767. margin: 0;
  5768. ">删除</span>
  5769. </div>
  5770. </div>
  5771. <div class="commentBox">
  5772. <div class="pl">评论:</div>
  5773. <div style="max-height: 200px; overflow: auto">
  5774. <div v-if="commentDetail.commentJson && commentDetail.commentJson.length" style="padding: 10px 0 0 0">
  5775. <div class="studentDetail" style="padding-top: 10px" v-for="(co, coIndex) in commentDetail.commentJson"
  5776. :key="coIndex">
  5777. <div class="tx" style="min-width: 50px">
  5778. <img src="../../assets/avatar.png" alt="" />
  5779. </div>
  5780. <div class="plPerson">
  5781. <div class="plName">
  5782. <div>{{ co.commentPeople }}</div>
  5783. <div style="margin-left: 5px">
  5784. {{ co.commentTime }}
  5785. </div>
  5786. <div class="deleteComment" v-if="userid == co.userid" @click="deleteComment(co.wid)">删除</div>
  5787. </div>
  5788. <div class="plContent">{{ co.commentText }}</div>
  5789. </div>
  5790. </div>
  5791. </div>
  5792. <div v-else style="padding: 10px 0 0 0">暂无评论</div>
  5793. </div>
  5794. </div>
  5795. <div style="margin-top: 10px">
  5796. <div class="displayBox">
  5797. <div style="
  5798. color: #556db4;
  5799. font-size: 14px;
  5800. font-weight: bold;
  5801. padding-bottom: 10px;
  5802. ">
  5803. 评价
  5804. </div>
  5805. <div class="easy_comment" v-if="false">
  5806. <div v-for="(p, pIndex) in PlTextList" :key="pIndex" @click="fastText(p, 1)">
  5807. {{ p }}
  5808. </div>
  5809. </div>
  5810. </div>
  5811. <div>
  5812. <textarea rows="3" class="pj" style="padding: 10px 5px" cols v-model="commentText"
  5813. placeholder="请输入评论"></textarea>
  5814. </div>
  5815. </div>
  5816. <div slot="footer">
  5817. <el-button @click="(commentDialogVisible = false),
  5818. (commentIndexJson = {}),
  5819. videoDetail.sources && videoDetail.sources[0]
  5820. ? (videoDetail.sources[0].src = '')
  5821. : ''
  5822. ">取 消</el-button>
  5823. <el-button type="primary" @click="addComment(commentDetail.wid, userid, 2)">确 定</el-button>
  5824. </div>
  5825. </el-dialog>
  5826. <el-dialog title="查看文档" :visible.sync="fullDialogVisible" :append-to-body="true" width="100%"
  5827. :before-close="handleClose" :show-close="false" class="dialog_diy full_diy" :class="{ full_diy2: fulltype == 3 }">
  5828. <div slot="title" class="header-title">
  5829. <div style="color: #fff">查看文档</div>
  5830. <div @click="fullDialogVisible = false" style="
  5831. cursor: pointer;
  5832. position: absolute;
  5833. top: 20px;
  5834. right: 20px;
  5835. color: #fff;
  5836. ">
  5837. 退出全屏
  5838. </div>
  5839. </div>
  5840. <div style="height: 100%">
  5841. <div class="wheel"
  5842. v-if="fullUrl.indexOf('https://view.officeapps.live.com/op/view.aspx?src=') != -1 && fulltype == 2"
  5843. style="width: 95%; margin: 0 auto">
  5844. <iframe style="width: 100%; height: 100%; border: none" :src="fullUrl"></iframe>
  5845. </div>
  5846. <iframe v-else-if="fulltype == 2" style="width: 100%; height: 100%; border: none" :src="fullUrl"
  5847. security="restricted"
  5848. sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts allow-popups"></iframe>
  5849. <pdf v-else-if="fulltype == 3" :pdfUrl="fullUrl" style="width: 100%; height: 100%; overflow: auto"></pdf>
  5850. <div class="wheel" v-if="fulltype == 1" style="
  5851. box-shadow: 0 0 6px 1px #f2f2f2;
  5852. width: 100%;
  5853. background: #f1f1f1;
  5854. ">
  5855. <div class="title" style="width: 100%; box-sizing: border-box">
  5856. 查看文档
  5857. </div>
  5858. <el-form class="textBox" style="height: 90%">
  5859. <el-form-item class="textTitle">
  5860. <div style="font-size: 22px">
  5861. {{ fullUrl.name }}
  5862. </div>
  5863. </el-form-item>
  5864. <!-- <div style="color: #918f8f; width: 85%">文档内容</div> -->
  5865. <div v-html="fullUrl.url" class="textContent" style="height: auto"></div>
  5866. </el-form>
  5867. </div>
  5868. </div>
  5869. <!-- <div slot="footer">
  5870. <el-button @click="fullDialogVisible = false">关 闭</el-button>
  5871. </div> -->
  5872. </el-dialog>
  5873. <el-dialog title="个人评价" :visible.sync="studentEvalDialogVisible" :append-to-body="true" width="800px"
  5874. :before-close="handleClose" class="dialog_diy">
  5875. <div class="evalCss">
  5876. <div class="nav">请选择星星进行评分</div>
  5877. <div class="middleBox" v-if="eScore.eStar">
  5878. <div class="pfBox" v-for="(e, eIndex) in rateJson" :key="eIndex">
  5879. <div class="nameAndrate">
  5880. <div>{{ e.value }}</div>
  5881. <el-rate v-model="eScore.eStar[eIndex]" :disabled="isStar"></el-rate>
  5882. </div>
  5883. <div v-if="e.detail">{{ e.detail }}</div>
  5884. </div>
  5885. <div class="easy_comment" v-if="false">
  5886. <div v-for="(p, pIndex) in PlTextList" :key="pIndex" @click="fastText(p, 2)">
  5887. {{ p }}
  5888. </div>
  5889. </div>
  5890. <div class="bz">
  5891. <textarea :disabled="isStar" rows="4" class="pj" style="
  5892. padding: 10px 5px;
  5893. width: 70%;
  5894. background: #f7f6f9;
  5895. font-size: 14px;
  5896. text-indent: 10px;
  5897. " cols v-model="eScore.eBzText" placeholder="请输入评价内容..."></textarea>
  5898. </div>
  5899. </div>
  5900. </div>
  5901. <div slot="footer">
  5902. <el-button @click="studentEvalDialogVisible = false">取 消</el-button>
  5903. <el-button type="primary" @click="addBzWorks" v-if="!isStar">确 定</el-button>
  5904. </div>
  5905. </el-dialog>
  5906. <el-dialog title="个人评价" :visible.sync="studentEvalDialogVisibleTeacher" :append-to-body="true" width="800px"
  5907. :before-close="handleClose" class="dialog_diy">
  5908. <div class="w_name">
  5909. 学生姓名:<span>{{ sStudent.student }}</span>
  5910. </div>
  5911. <div class="evalCss">
  5912. <div class="nav">请选择星星进行评分</div>
  5913. <div class="middleBox" v-if="eScore.eStar">
  5914. <div class="pfBox" v-for="(e, eIndex) in rateJson" :key="eIndex">
  5915. <div class="nameAndrate">
  5916. <div>{{ e.value }}</div>
  5917. <el-rate v-model="eScore.eStar[eIndex]" :disabled="isStar"></el-rate>
  5918. </div>
  5919. <div v-if="e.detail">{{ e.detail }}</div>
  5920. </div>
  5921. <div class="easy_comment" v-if="false">
  5922. <div v-for="(p, pIndex) in PlTextList" :key="pIndex" @click="fastText(p, 2)">
  5923. {{ p }}
  5924. </div>
  5925. </div>
  5926. <div class="bz">
  5927. <textarea :disabled="isStar" rows="4" class="pj" style="
  5928. padding: 10px 5px;
  5929. width: 70%;
  5930. background: #f7f6f9;
  5931. font-size: 14px;
  5932. text-indent: 10px;
  5933. " cols v-model="eScore.eBzText" placeholder="请输入评价内容..."></textarea>
  5934. </div>
  5935. </div>
  5936. </div>
  5937. <div slot="footer">
  5938. <el-button @click="studentEvalDialogVisibleTeacher = false">取 消</el-button>
  5939. <el-button type="primary" @click="addBzWorksTeacher" v-if="!isStar">确 定</el-button>
  5940. </div>
  5941. </el-dialog>
  5942. <el-dialog title="选择填空" :visible.sync="dialogVisibleSelect" :append-to-body="true" width="90%"
  5943. :before-close="handleClose" class="dialog_diy dialog_diy3">
  5944. <div v-if="selectJson">
  5945. <div class="select_box2">
  5946. <div class="select_box2_title">
  5947. <div>选择填空</div>
  5948. <div>请选择对应的答案进行答题!</div>
  5949. </div>
  5950. <div class="select_box2_box">
  5951. <div class="select_box2_img">
  5952. <img :src="selectJson.url" @click="previewImg(selectJson.url)" alt="" />
  5953. </div>
  5954. <div :class="isSelect ? 'rightWidthCss' : 'select_box2_answer'">
  5955. <div style="padding-top: 15px">
  5956. <div class="select_answer_title" v-if="isSelect">
  5957. {{ selectAnswer.stu }}
  5958. </div>
  5959. <div class="select_answer_title" v-else>
  5960. 根据题目选择对应答案
  5961. </div>
  5962. <div class="select_box2_answer_box" v-for="(item2, checkIndex) in selectJson.select" :key="checkIndex">
  5963. <span style="min-width: 30px">{{ checkIndex + 1 }}、</span>
  5964. <el-select :disabled="isSelect" v-model="selectAnswer.answer[checkIndex]" placeholder="请选择正确答案">
  5965. <el-option v-for="(e, eIndex) in selectJson.select" :key="eIndex" :label="e" :value="eIndex">
  5966. </el-option>
  5967. </el-select>
  5968. </div>
  5969. </div>
  5970. <div class="rightAnswerCss" v-if="isSelect && (tType == 1 || tType == 4)">
  5971. <div v-for="(a, aIndex) in selectJson.answer" :key="aIndex" class="rightAnswer">
  5972. <div v-if="selectAnswer.answer[aIndex] === a" style="color: #767de1">
  5973. 回答正确
  5974. </div>
  5975. <div v-else>回答错误</div>
  5976. <div style="margin-left: 10px" v-if="selectAnswer.answer[aIndex] !== a">
  5977. 正确答案:
  5978. </div>
  5979. <div :class="selectAnswer.answer[aIndex] === a ? 'blueCss' : 'redCss'
  5980. ">
  5981. {{ selectJson.select[a] }}
  5982. </div>
  5983. </div>
  5984. </div>
  5985. </div>
  5986. <div class="upAnswerCss">
  5987. <el-button type="primary" @click="addSelectAnswer" v-if="!isSelect">提交答案</el-button>
  5988. </div>
  5989. </div>
  5990. </div>
  5991. </div>
  5992. </el-dialog>
  5993. <el-dialog title="选择填空" :visible.sync="dialogVisibleSelectTeacher" :append-to-body="true" width="90%"
  5994. :before-close="handleClose" class="dialog_diy dialog_diy3">
  5995. <div v-if="selectJson">
  5996. <div class="w_name">
  5997. 学生姓名:<span>{{ sStudent.student }}</span>
  5998. </div>
  5999. <div class="select_box2">
  6000. <div class="select_box2_title">
  6001. <div>选择填空</div>
  6002. <div>请选择对应的答案进行答题!</div>
  6003. </div>
  6004. <div class="select_box2_box">
  6005. <div class="select_box2_img">
  6006. <img :src="selectJson.url" @click="previewImg(selectJson.url)" alt="" />
  6007. </div>
  6008. <div :class="isSelect ? 'rightWidthCss' : 'select_box2_answer'">
  6009. <div style="padding-top: 15px">
  6010. <div class="select_answer_title" v-if="isSelect">
  6011. {{ selectAnswer.stu }}
  6012. </div>
  6013. <div class="select_answer_title" v-else>
  6014. 根据题目选择对应答案
  6015. </div>
  6016. <div class="select_box2_answer_box" v-for="(item2, checkIndex) in selectJson.select" :key="checkIndex">
  6017. <span style="min-width: 30px">{{ checkIndex + 1 }}、</span>
  6018. <el-select :disabled="isSelect" v-model="selectAnswer.answer[checkIndex]" placeholder="请选择正确答案">
  6019. <el-option v-for="(e, eIndex) in selectJson.select" :key="eIndex" :label="e" :value="eIndex">
  6020. </el-option>
  6021. </el-select>
  6022. </div>
  6023. </div>
  6024. <div class="rightAnswerCss" v-if="isSelect && (tType == 1 || tType == 4)">
  6025. <div v-for="(a, aIndex) in selectJson.answer" :key="aIndex" class="rightAnswer">
  6026. <div v-if="selectAnswer.answer[aIndex] === a" style="color: #767de1">
  6027. 回答正确
  6028. </div>
  6029. <div v-else>回答错误</div>
  6030. <div style="margin-left: 10px" v-if="selectAnswer.answer[aIndex] !== a">
  6031. 正确答案:
  6032. </div>
  6033. <div :class="selectAnswer.answer[aIndex] === a ? 'blueCss' : 'redCss'
  6034. ">
  6035. {{ selectJson.select[a] }}
  6036. </div>
  6037. </div>
  6038. </div>
  6039. </div>
  6040. <div class="upAnswerCss">
  6041. <el-button type="primary" @click="addSelectAnswerTeacher" v-if="!isSelect">提交答案</el-button>
  6042. </div>
  6043. </div>
  6044. </div>
  6045. </div>
  6046. </el-dialog>
  6047. <el-dialog title="教师评分" :visible.sync="dialogVisibleScore" :append-to-body="true" width="800px"
  6048. :before-close="handleClose" class="dialog_diy">
  6049. <div>
  6050. <div class="studentDetail">
  6051. <div class="tx"><img src="../../assets/avatar.png" alt="" /></div>
  6052. <div class="nameAndTime">
  6053. <div style="margin-bottom: 5px">{{ commentDetail.sName }}</div>
  6054. <div>{{ commentDetail.time }}</div>
  6055. </div>
  6056. </div>
  6057. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 2">
  6058. {{ JSON.parse(commentDetail.works)[0].answer }}
  6059. </div>
  6060. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 1">
  6061. <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"
  6062. :class="{ fullStyle: full }"></pdf>
  6063. <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600" :class="{ fullStyle: full }"></iframe>
  6064. </div>
  6065. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 0">
  6066. <img :src="commentDetail.works" alt="" @click="previewImg(commentDetail.works)" />
  6067. </div>
  6068. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 3">
  6069. <video-player class="video-player vjs-custom-skin" :playsinline="true" :options="videoDetail"
  6070. @play="onPlayerPlay($event)" style="width: 90%; height: 100%; margin: 0 0 0 30px"></video-player>
  6071. </div>
  6072. <div class="worksAnswer codeFileBox" v-if="commentDetail.works && commentDetail.type == 12"
  6073. @click="downloadFile(commentDetail.works)">
  6074. <img src="../../assets/icon/codeFile.png" />
  6075. <div>点击下载文件</div>
  6076. </div>
  6077. <div class="worksAnswer codeFileBox" v-if="commentDetail.works && commentDetail.type == 15"
  6078. @click="openCocoPi(57, commentIndexJson.toolIndex, commentDetail.userid, commentDetail.sName)">
  6079. <img src="../../assets/icon/codeFile.png" />
  6080. <div>点击打开CocoPi</div>
  6081. </div>
  6082. <div class="worksAnswer" v-if="commentDetail.works && commentDetail.type == 13">
  6083. <div v-html="JSON.parse(commentDetail.works).text"></div>
  6084. </div>
  6085. <div class="scoreBox">
  6086. <span class="t">请输入分数</span>
  6087. <el-input-number :disabled="courseDetail.userid != userid" v-model="wScore" :controls="false" :min="0"
  6088. :max="100"></el-input-number>
  6089. </div>
  6090. <div class="scoreDetailBox">
  6091. <span class="t">评分评论</span>
  6092. <el-input type="textarea" :rows="5" :disabled="courseDetail.userid != userid" resize="none"
  6093. v-model="scoreDetail" placeholder="请输入对学生的评价">
  6094. </el-input>
  6095. </div>
  6096. </div>
  6097. <span slot="footer" class="dialog-footer">
  6098. <el-button @click="(dialogVisibleScore = false),
  6099. (commentIndexJson = {}),
  6100. videoDetail.sources && videoDetail.sources[0]
  6101. ? (videoDetail.sources[0].src = '')
  6102. : ''
  6103. ">取 消</el-button>
  6104. <el-button type="primary" v-if="courseDetail.userid == userid" @click="scoreWork(commentDetail.wid)">确 定
  6105. </el-button>
  6106. </span>
  6107. </el-dialog>
  6108. <el-dialog title="连词成句" :visible.sync="dialogVisibleSentence" :append-to-body="true" width="1000px"
  6109. :before-close="handleClose" class="dialog_diy dialog_diy3">
  6110. <div>
  6111. <div class="sentenBox">
  6112. <div v-for="(st, stIndex) in sentenceList" :key="stIndex" style="padding-bottom: 20px">
  6113. <div style="padding: 15px 0 10px 20px">请选择正确顺序</div>
  6114. <div class="cardList" v-if="st.chooseSenList">
  6115. <div class="cardBox">
  6116. <div v-for="(r, rIndex) in st.chooseSenList" :key="rIndex" @click="returnCard(r, stIndex, rIndex)">
  6117. <el-tooltip class="item" effect="light" :content="r" placement="top" v-if="r != '' && r != undefined">
  6118. <div :class="{
  6119. isCard: r,
  6120. isChooseCard: r == '' || r == undefined,
  6121. }">
  6122. <div>{{ r }}</div>
  6123. </div>
  6124. </el-tooltip>
  6125. <div :class="{
  6126. isCard: r,
  6127. isChooseCard: r == '' || r == undefined,
  6128. }" v-else>
  6129. <div>{{ r }}</div>
  6130. </div>
  6131. </div>
  6132. </div>
  6133. </div>
  6134. <div class="cardList" v-if="st.addChangeSen">
  6135. <div class="cardBox">
  6136. <div v-for="(s, sIndex) in st.addChangeSen" :key="sIndex" @click="setRightAnswer(s, stIndex, sIndex)">
  6137. <el-tooltip class="item" effect="light" :content="s" placement="top" v-if="s != '' && s != undefined">
  6138. <div :class="{ noCard: s == '' || s == undefined, isCard: s }">
  6139. <div>{{ s }}</div>
  6140. </div>
  6141. </el-tooltip>
  6142. <div :class="{ noCard: s == '' || s == undefined, isCard: s }" v-else>
  6143. <div>{{ s }}</div>
  6144. </div>
  6145. </div>
  6146. </div>
  6147. </div>
  6148. </div>
  6149. </div>
  6150. </div>
  6151. <span slot="footer" class="dialog-footer">
  6152. <el-button @click="dialogVisibleSentence = false">取 消</el-button>
  6153. <el-button type="primary" @click="addSenWorks">确 定</el-button>
  6154. </span>
  6155. </el-dialog>
  6156. <el-dialog title="连词成句" :visible.sync="dialogVisibleSentenceTeacher" :append-to-body="true" width="1000px"
  6157. :before-close="handleClose" class="dialog_diy dialog_diy3">
  6158. <div>
  6159. <div class="w_name">
  6160. 学生姓名:<span>{{ sStudent.student }}</span>
  6161. </div>
  6162. <div class="sentenBox">
  6163. <div v-for="(st, stIndex) in sentenceList" :key="stIndex" style="padding-bottom: 20px">
  6164. <div style="padding: 15px 0 10px 20px">请选择正确顺序</div>
  6165. <div class="cardList" v-if="st.chooseSenList">
  6166. <div class="cardBox">
  6167. <div v-for="(r, rIndex) in st.chooseSenList" :key="rIndex" @click="returnCard(r, stIndex, rIndex)">
  6168. <el-tooltip class="item" effect="light" :content="r" placement="top" v-if="r != '' && r != undefined">
  6169. <div :class="{
  6170. isCard: r,
  6171. isChooseCard: r == '' || r == undefined,
  6172. }">
  6173. <div>{{ r }}</div>
  6174. </div>
  6175. </el-tooltip>
  6176. <div :class="{
  6177. isCard: r,
  6178. isChooseCard: r == '' || r == undefined,
  6179. }" v-else>
  6180. <div>{{ r }}</div>
  6181. </div>
  6182. </div>
  6183. </div>
  6184. </div>
  6185. <div class="cardList" v-if="st.addChangeSen">
  6186. <div class="cardBox">
  6187. <div v-for="(s, sIndex) in st.addChangeSen" :key="sIndex" @click="setRightAnswer(s, stIndex, sIndex)">
  6188. <el-tooltip class="item" effect="light" :content="s" placement="top" v-if="s != '' && s != undefined">
  6189. <div :class="{ noCard: s == '' || s == undefined, isCard: s }">
  6190. <div>{{ s }}</div>
  6191. </div>
  6192. </el-tooltip>
  6193. <div :class="{ noCard: s == '' || s == undefined, isCard: s }" v-else>
  6194. <div>{{ s }}</div>
  6195. </div>
  6196. </div>
  6197. </div>
  6198. </div>
  6199. </div>
  6200. </div>
  6201. </div>
  6202. <span slot="footer" class="dialog-footer">
  6203. <el-button @click="dialogVisibleSentenceTeacher = false">取 消</el-button>
  6204. <el-button type="primary" @click="addSenWorksTeacher">确 定</el-button>
  6205. </span>
  6206. </el-dialog>
  6207. <el-dialog title="连词成句" :visible.sync="dialogVisibleSentence1" :append-to-body="true" width="1000px"
  6208. :before-close="handleClose" class="dialog_diy dialog_diy3">
  6209. <div>
  6210. <div class="sentenBox">
  6211. <div style="padding: 15px 0 10px 20px; font-size: 20px">
  6212. {{ sentenceList1.stuName }}的作业
  6213. </div>
  6214. <div v-for="(st, stIndex) in sentenceList1" :key="stIndex" style="padding-bottom: 20px">
  6215. <div style="padding: 15px 0 10px 20px; font-size: 20px">
  6216. 第{{ stIndex + 1 }}题
  6217. </div>
  6218. <div class="isWrong">
  6219. <div class="cardList1" v-if="st.chooseSenList">
  6220. <div class="cardBox">
  6221. <div v-for="(s, sIndex) in st.chooseSenList" :key="sIndex">
  6222. <el-tooltip class="item" effect="light" :content="s" placement="top">
  6223. <div class="isCard">
  6224. <div>{{ s }}</div>
  6225. </div>
  6226. </el-tooltip>
  6227. </div>
  6228. </div>
  6229. <div class="cardAnswerBox">
  6230. 组成句子:{{ st.chooseSenList.join(" ") }}
  6231. </div>
  6232. </div>
  6233. <div class="answerRight isTj" v-if="st.chooseSenList.toString() == st.rightAnswer.toString() &&
  6234. (tType == 1 || tType == 4)
  6235. ">
  6236. <div class="isTjImg">
  6237. <img src="../../assets/icon/conSentences/right.png" alt="" />
  6238. </div>
  6239. <div>回答正确</div>
  6240. </div>
  6241. <div class="answerRight isTj" v-if="st.chooseSenList.toString() != st.rightAnswer.toString() &&
  6242. (tType == 1 || tType == 4)
  6243. ">
  6244. <div class="isTjImg">
  6245. <img src="../../assets/icon/conSentences/wrong.png" alt="" />
  6246. </div>
  6247. <div>回答错误</div>
  6248. </div>
  6249. </div>
  6250. <div v-if="st.chooseSenList.toString() != st.rightAnswer.toString() &&
  6251. (tType == 1 || tType == 4)
  6252. ">
  6253. <div style="padding: 15px 0 10px 20px">正确答案如下:</div>
  6254. <div class="cardList" v-if="st.rightAnswer" style="border: none; padding: 10px 0 10px 10px; margin: 0">
  6255. <div class="cardBox">
  6256. <div v-for="(r, rIndex) in st.rightAnswer" :key="rIndex">
  6257. <el-tooltip class="item" effect="light" :content="r" placement="top">
  6258. <div class="isCard1">
  6259. <div>{{ r }}</div>
  6260. </div>
  6261. </el-tooltip>
  6262. </div>
  6263. </div>
  6264. <div class="cardAnswerBox">
  6265. 组成句子:{{ st.rightAnswer.join(" ") }}
  6266. </div>
  6267. </div>
  6268. </div>
  6269. </div>
  6270. </div>
  6271. </div>
  6272. <span slot="footer" class="dialog-footer">
  6273. <el-button @click="dialogVisibleSentence1 = false">取 消</el-button>
  6274. <el-button type="primary" @click="dialogVisibleSentence1 = false">确 定</el-button>
  6275. </span>
  6276. </el-dialog>
  6277. <el-dialog title="提交作业" :visible.sync="dialogVisibleWorks" :append-to-body="true" width="500px"
  6278. :before-close="handleClose" class="dialog_change">
  6279. <div class="marginT">
  6280. <div class="w_name">
  6281. 学生姓名:<span>{{ sStudent.student }}</span>
  6282. </div>
  6283. <div>上传文件</div>
  6284. <div class="chapter_add" @click="addImg($event)" v-if="studyJuri[0].cover.length == 0">
  6285. <div class="up_photo">
  6286. <img src="../../assets/uploadImg2.png" alt />
  6287. </div>
  6288. <!-- <input
  6289. type="file"
  6290. accept="video/mp4, video/quicktime, video/x-msvideo,application/pdf, application/.ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/*"
  6291. style="display: none"
  6292. @change="beforeUpload1($event, 1)"
  6293. /> -->
  6294. <input type="file" accept="*" style="display: none" @change="beforeUpload1($event, 1)" />
  6295. </div>
  6296. <!-- capture="camera" -->
  6297. <div class="chapter_add" style="
  6298. display: flex;
  6299. width: 100%;
  6300. flex-direction: row;
  6301. flex-wrap: wrap;
  6302. justify-content: flex-start;
  6303. padding: 15px 0;
  6304. " v-if="studyJuri[0].cover.length > 0">
  6305. <div class="upCover">
  6306. <img :src="studyJuri[0].cover[0].url" alt v-if="fileType == 0" />
  6307. <img :src="word" alt v-else-if="fileType == 1" />
  6308. <img :src="video" alt v-else-if="fileType == 2" />
  6309. <img :src="word2" alt v-else-if="fileType == 3" />
  6310. <span class="picName">{{ studyJuri[0].cover[0].name }}</span>
  6311. <div class="deleteWord" @click="clean(1)">
  6312. <img src="../../assets/icon/deleteWorks.png" alt />
  6313. </div>
  6314. </div>
  6315. </div>
  6316. </div>
  6317. <div class="upload_send" @click="addCourseWorksTeacher(taskCount)" v-if="!proVisible">
  6318. 提交
  6319. </div>
  6320. </el-dialog>
  6321. <el-dialog title="问答" :visible.sync="answerDialogVisibleTeacher" :append-to-body="true" width="800px"
  6322. :before-close="handleClose" class="dialog_diy">
  6323. <div>
  6324. <div class="w_name">
  6325. 学生姓名:<span>{{ sStudent.student }}</span>
  6326. </div>
  6327. <div style="
  6328. display: flex;
  6329. flex-wrap: nowrap;
  6330. flex-direction: column;
  6331. position: relative;
  6332. ">
  6333. <div class="queTop" style="padding: 20px 0 20px 0">
  6334. <div class="question">
  6335. <img src="../../assets/icon/question.png" alt />
  6336. </div>
  6337. <div class="queTitle">
  6338. <div style="width: 90px; min-width: 90px">提问:</div>
  6339. <div>{{ answerQ }}</div>
  6340. </div>
  6341. </div>
  6342. <div class="ediBottom">
  6343. <textarea rows="6" class="binfo_input" cols style="width: 95%; height: 120px"
  6344. v-model="questionAnswer"></textarea>
  6345. </div>
  6346. </div>
  6347. </div>
  6348. <div slot="footer">
  6349. <el-button @click="answerDialogVisibleTeacher = false">取 消</el-button>
  6350. <el-button type="primary" @click="addQuestionTeacher">提 交</el-button>
  6351. </div>
  6352. </el-dialog>
  6353. <ImgDraw :drawShow="drawShow" @closeDraw="closeDraw" @addImgDraw="addImgDraw" :bg="bg"></ImgDraw>
  6354. <el-dialog title="表格" :visible.sync="dialogVisibleTable" :append-to-body="true" width="95%"
  6355. :before-close="handleClose" class="dialog_diy">
  6356. <el-form>
  6357. <div>表格内容</div>
  6358. <Table v-model="tableJson.text" @change="change" v-if="dialogVisibleTable"></Table>
  6359. </el-form>
  6360. <span slot="footer" class="dialog-footer">
  6361. <el-button @click="dialogVisibleTable = false">取 消</el-button>
  6362. <el-button type="primary" @click="addTableWorks">确定</el-button>
  6363. </span>
  6364. </el-dialog>
  6365. <el-dialog title="表格" :visible.sync="dialogVisibleTableTeacher" :append-to-body="true" width="95%"
  6366. :before-close="handleClose" class="dialog_diy">
  6367. <el-form>
  6368. <div class="w_name">
  6369. 学生姓名:<span>{{ sStudent.student }}</span>
  6370. </div>
  6371. <div>表格内容</div>
  6372. <Table v-model="tableJson.text" @change="change" v-if="dialogVisibleTableTeacher"></Table>
  6373. </el-form>
  6374. <span slot="footer" class="dialog-footer">
  6375. <el-button @click="dialogVisibleTableTeacher = false">取 消</el-button>
  6376. <el-button type="primary" @click="addTableWorksTeacher">确定</el-button>
  6377. </span>
  6378. </el-dialog>
  6379. <el-dialog title="文档" :visible.sync="dialogVisibleWord" :append-to-body="true" width="95%" :before-close="handleClose"
  6380. class="dialog_diy">
  6381. <el-form>
  6382. <div>文档内容</div>
  6383. <editor-bar v-model="wordJson.text" v-if="dialogVisibleWord"></editor-bar>
  6384. </el-form>
  6385. <span slot="footer" class="dialog-footer">
  6386. <el-button @click="dialogVisibleWord = false">取 消</el-button>
  6387. <el-button type="primary" @click="addWordWorks">确定</el-button>
  6388. </span>
  6389. </el-dialog>
  6390. <el-dialog title="文档" :visible.sync="dialogVisibleWordTeacher" :append-to-body="true" width="95%"
  6391. :before-close="handleClose" class="dialog_diy">
  6392. <el-form>
  6393. <div class="w_name">
  6394. 学生姓名:<span>{{ sStudent.student }}</span>
  6395. </div>
  6396. <div>文档内容</div>
  6397. <editor-bar v-model="wordJson.text" v-if="dialogVisibleWordTeacher"></editor-bar>
  6398. </el-form>
  6399. <span slot="footer" class="dialog-footer">
  6400. <el-button @click="dialogVisibleWordTeacher = false">取 消</el-button>
  6401. <el-button type="primary" @click="addWordWorksTeacher">确定</el-button>
  6402. </span>
  6403. </el-dialog>
  6404. <el-dialog title="表格" :visible.sync="dialogVisibleTable2" :append-to-body="true" width="95%"
  6405. :before-close="handleClose" class="dialog_diy">
  6406. <el-form>
  6407. <div class="cont" v-html="tableJson.text"></div>
  6408. </el-form>
  6409. <span slot="footer" class="dialog-footer">
  6410. <el-button @click="dialogVisibleTable2 = false">关 闭</el-button>
  6411. </span>
  6412. </el-dialog>
  6413. <el-dialog title="文档" :visible.sync="dialogVisibleTable3" :append-to-body="true" width="95%"
  6414. :before-close="handleClose" class="dialog_diy">
  6415. <el-form>
  6416. <div class="cont" v-html="tableJson.text"></div>
  6417. </el-form>
  6418. <span slot="footer" class="dialog-footer">
  6419. <el-button @click="dialogVisibleTable3 = false">关 闭</el-button>
  6420. </span>
  6421. </el-dialog>
  6422. <el-dialog title="分组设置" :visible.sync="dialogVisibleGroup" :append-to-body="true" width="95%"
  6423. :before-close="handleClose" class="dialog_diy">
  6424. <div v-if="dialogVisibleGroup">
  6425. <div v-if="courseDetail.userid == userid" class="g_d_btnBox">
  6426. <div style="color: rgb(171 171 171); margin: 0 10px 0 0">
  6427. 提示:需要锁定位置,才能点击头像修改座位。
  6428. </div>
  6429. <div type="primary" v-if="groupJson.islock == 1" class="returnBtn" style="background-color: #225bc7"
  6430. @click="lockChair">
  6431. 锁定位置
  6432. </div>
  6433. <div type="primary" v-else class="returnBtn" style="background-color: #225bc7" @click="lockChair">
  6434. 解锁位置
  6435. </div>
  6436. <div type="primary" @click="updateGroup" class="returnBtn" style="background-color: #225bc7">
  6437. 分组设置
  6438. </div>
  6439. </div>
  6440. <div>
  6441. <div class="g_d_box" v-if="groupJson.group && groupStudent[toolindex]">
  6442. <div class="g_d_group" v-for="(g, gindex) in groupJson.group" :key="gindex">
  6443. <div class="g_d_group_chair">
  6444. <div v-if="groupJson.number > 1">
  6445. <span :class="{
  6446. isChair:
  6447. groupStudent[toolindex][gindex] &&
  6448. groupStudent[toolindex][gindex][0],
  6449. updateChair:
  6450. courseDetail.userid == userid &&
  6451. groupStudent[toolindex][gindex] &&
  6452. groupStudent[toolindex][gindex][0] &&
  6453. groupJson.islock == 2,
  6454. }"><span class="updateChairBtn" @click="updateGroupChair(
  6455. groupStudent[toolindex][gindex] &&
  6456. groupStudent[toolindex][gindex][0]
  6457. )
  6458. ">修改</span></span><span>{{
  6459. groupStudent[toolindex][gindex] &&
  6460. groupStudent[toolindex][gindex][0]
  6461. ? groupStudent[toolindex][gindex] &&
  6462. groupStudent[toolindex][gindex][0].name
  6463. : "空位置"
  6464. }}</span>
  6465. </div>
  6466. <div v-if="groupJson.number > 4">
  6467. <span :class="{
  6468. isChair:
  6469. groupStudent[toolindex][gindex] &&
  6470. groupStudent[toolindex][gindex][4],
  6471. updateChair:
  6472. courseDetail.userid == userid &&
  6473. groupStudent[toolindex][gindex] &&
  6474. groupStudent[toolindex][gindex][4] &&
  6475. groupJson.islock == 2,
  6476. }"><span class="updateChairBtn" @click="updateGroupChair(
  6477. groupStudent[toolindex][gindex] &&
  6478. groupStudent[toolindex][gindex][4]
  6479. )
  6480. ">修改</span></span><span>{{
  6481. groupStudent[toolindex][gindex] &&
  6482. groupStudent[toolindex][gindex][4]
  6483. ? groupStudent[toolindex][gindex] &&
  6484. groupStudent[toolindex][gindex][4].name
  6485. : "空位置"
  6486. }}</span>
  6487. </div>
  6488. <div v-if="groupJson.number > 8">
  6489. <span :class="{
  6490. isChair:
  6491. groupStudent[toolindex][gindex] &&
  6492. groupStudent[toolindex][gindex][8],
  6493. updateChair:
  6494. courseDetail.userid == userid &&
  6495. groupStudent[toolindex][gindex] &&
  6496. groupStudent[toolindex][gindex][8] &&
  6497. groupJson.islock == 2,
  6498. }"><span class="updateChairBtn" @click="updateGroupChair(
  6499. groupStudent[toolindex][gindex] &&
  6500. groupStudent[toolindex][gindex][8]
  6501. )
  6502. ">修改</span></span><span>{{
  6503. groupStudent[toolindex][gindex] &&
  6504. groupStudent[toolindex][gindex][8]
  6505. ? groupStudent[toolindex][gindex] &&
  6506. groupStudent[toolindex][gindex][8].name
  6507. : "空位置"
  6508. }}</span>
  6509. </div>
  6510. </div>
  6511. <div class="g_d_group_tableBox">
  6512. <div class="g_d_group_chair2">
  6513. <div v-if="groupJson.number > 2">
  6514. <span :class="{
  6515. isChair:
  6516. groupStudent[toolindex][gindex] &&
  6517. groupStudent[toolindex][gindex][2],
  6518. updateChair:
  6519. courseDetail.userid == userid &&
  6520. groupStudent[toolindex][gindex] &&
  6521. groupStudent[toolindex][gindex][2] &&
  6522. groupJson.islock == 2,
  6523. }"><span class="updateChairBtn" @click="updateGroupChair(
  6524. groupStudent[toolindex][gindex] &&
  6525. groupStudent[toolindex][gindex][2]
  6526. )
  6527. ">修改</span></span><span>{{
  6528. groupStudent[toolindex][gindex] &&
  6529. groupStudent[toolindex][gindex][2]
  6530. ? groupStudent[toolindex][gindex] &&
  6531. groupStudent[toolindex][gindex][2].name
  6532. : "空位置"
  6533. }}</span>
  6534. </div>
  6535. <div v-if="groupJson.number > 6">
  6536. <span :class="{
  6537. isChair:
  6538. groupStudent[toolindex][gindex] &&
  6539. groupStudent[toolindex][gindex][6],
  6540. updateChair:
  6541. courseDetail.userid == userid &&
  6542. groupStudent[toolindex][gindex] &&
  6543. groupStudent[toolindex][gindex][6] &&
  6544. groupJson.islock == 2,
  6545. }"><span class="updateChairBtn" @click="updateGroupChair(
  6546. groupStudent[toolindex][gindex] &&
  6547. groupStudent[toolindex][gindex][6]
  6548. )
  6549. ">修改</span></span><span>{{
  6550. groupStudent[toolindex][gindex] &&
  6551. groupStudent[toolindex][gindex][6]
  6552. ? groupStudent[toolindex][gindex] &&
  6553. groupStudent[toolindex][gindex][6].name
  6554. : "空位置"
  6555. }}</span>
  6556. </div>
  6557. </div>
  6558. <div class="g_d_group_table">
  6559. <div>
  6560. {{ g.name }}
  6561. </div>
  6562. <div>
  6563. <div v-if="courseDetail.userid == userid && groupJson.islock == 2
  6564. " @click="deleteGroupChair(gindex)">
  6565. 移除组员
  6566. </div>
  6567. <div @click="selectGroup(gindex)" v-else-if="groupStudentUid[toolindex] &&
  6568. groupStudentUid[toolindex][gindex].indexOf(userid) == -1
  6569. ">
  6570. 加入分组
  6571. </div>
  6572. <div @click="exitGroup(
  6573. groupStudent[toolindex][gindex] &&
  6574. groupStudent[toolindex][gindex][
  6575. groupStudentUid[toolindex][gindex].indexOf(userid)
  6576. ].id
  6577. )
  6578. " v-else-if="groupStudentUid[toolindex] &&
  6579. groupStudentUid[toolindex][gindex].indexOf(userid) != -1
  6580. ">
  6581. 退出分组
  6582. </div>
  6583. </div>
  6584. </div>
  6585. <div class="g_d_group_chair2">
  6586. <div v-if="groupJson.number > 3">
  6587. <span :class="{
  6588. isChair:
  6589. groupStudent[toolindex][gindex] &&
  6590. groupStudent[toolindex][gindex][3],
  6591. updateChair:
  6592. courseDetail.userid == userid &&
  6593. groupStudent[toolindex][gindex] &&
  6594. groupStudent[toolindex][gindex][3] &&
  6595. groupJson.islock == 2,
  6596. }"><span class="updateChairBtn" @click="updateGroupChair(
  6597. groupStudent[toolindex][gindex] &&
  6598. groupStudent[toolindex][gindex][3]
  6599. )
  6600. ">修改</span></span><span>{{
  6601. groupStudent[toolindex][gindex] &&
  6602. groupStudent[toolindex][gindex][3]
  6603. ? groupStudent[toolindex][gindex] &&
  6604. groupStudent[toolindex][gindex][3].name
  6605. : "空位置"
  6606. }}</span>
  6607. </div>
  6608. <div v-if="groupJson.number > 7">
  6609. <span :class="{
  6610. isChair:
  6611. groupStudent[toolindex][gindex] &&
  6612. groupStudent[toolindex][gindex][7],
  6613. updateChair:
  6614. courseDetail.userid == userid &&
  6615. groupStudent[toolindex][gindex] &&
  6616. groupStudent[toolindex][gindex][7] &&
  6617. groupJson.islock == 2,
  6618. }"><span class="updateChairBtn" @click="updateGroupChair(
  6619. groupStudent[toolindex][gindex] &&
  6620. groupStudent[toolindex][gindex][7]
  6621. )
  6622. ">修改</span></span><span>{{
  6623. groupStudent[toolindex][gindex] &&
  6624. groupStudent[toolindex][gindex][7]
  6625. ? groupStudent[toolindex][gindex] &&
  6626. groupStudent[toolindex][gindex][7].name
  6627. : "空位置"
  6628. }}</span>
  6629. </div>
  6630. </div>
  6631. </div>
  6632. <div class="g_d_group_chair">
  6633. <div v-if="groupJson.number > 1">
  6634. <span :class="{
  6635. isChair:
  6636. groupStudent[toolindex][gindex] &&
  6637. groupStudent[toolindex][gindex][1],
  6638. updateChair:
  6639. courseDetail.userid == userid &&
  6640. groupStudent[toolindex][gindex] &&
  6641. groupStudent[toolindex][gindex][1] &&
  6642. groupJson.islock == 2,
  6643. }"><span class="updateChairBtn" @click="updateGroupChair(
  6644. groupStudent[toolindex][gindex] &&
  6645. groupStudent[toolindex][gindex][1]
  6646. )
  6647. ">修改</span></span><span>{{
  6648. groupStudent[toolindex][gindex] &&
  6649. groupStudent[toolindex][gindex][1]
  6650. ? groupStudent[toolindex][gindex] &&
  6651. groupStudent[toolindex][gindex][1].name
  6652. : "空位置"
  6653. }}</span>
  6654. </div>
  6655. <div v-if="groupJson.number > 5">
  6656. <span :class="{
  6657. isChair:
  6658. groupStudent[toolindex][gindex] &&
  6659. groupStudent[toolindex][gindex][5],
  6660. updateChair:
  6661. courseDetail.userid == userid &&
  6662. groupStudent[toolindex][gindex] &&
  6663. groupStudent[toolindex][gindex][5] &&
  6664. groupJson.islock == 2,
  6665. }"><span class="updateChairBtn" @click="updateGroupChair(
  6666. groupStudent[toolindex][gindex] &&
  6667. groupStudent[toolindex][gindex][5]
  6668. )
  6669. ">修改</span></span><span>{{
  6670. groupStudent[toolindex][gindex] &&
  6671. groupStudent[toolindex][gindex][5]
  6672. ? groupStudent[toolindex][gindex] &&
  6673. groupStudent[toolindex][gindex][5].name
  6674. : "空位置"
  6675. }}</span>
  6676. </div>
  6677. <div v-if="groupJson.number > 9">
  6678. <span :class="{
  6679. isChair:
  6680. groupStudent[toolindex][gindex] &&
  6681. groupStudent[toolindex][gindex][9],
  6682. updateChair:
  6683. courseDetail.userid == userid &&
  6684. groupStudent[toolindex][gindex] &&
  6685. groupStudent[toolindex][gindex][9] &&
  6686. groupJson.islock == 2,
  6687. }"><span class="updateChairBtn" @click="updateGroupChair(
  6688. groupStudent[toolindex][gindex] &&
  6689. groupStudent[toolindex][gindex][9]
  6690. )
  6691. ">修改</span></span><span>{{
  6692. groupStudent[toolindex][gindex] &&
  6693. groupStudent[toolindex][gindex][9]
  6694. ? groupStudent[toolindex][gindex] &&
  6695. groupStudent[toolindex][gindex][9].name
  6696. : "空位置"
  6697. }}</span>
  6698. </div>
  6699. </div>
  6700. </div>
  6701. </div>
  6702. </div>
  6703. </div>
  6704. <span slot="footer" class="dialog-footer">
  6705. <!-- <el-button @click="(dialogVisibleGroup = false)">关 闭</el-button> -->
  6706. </span>
  6707. </el-dialog>
  6708. <el-dialog title="分组设置" :visible.sync="dialogVisibleGroup2" :append-to-body="true" width="650px"
  6709. :before-close="handleClose" class="dialog_diy">
  6710. <div class="groupBox">
  6711. <div v-if="groupJson2.group" class="groupContent">
  6712. <div class="groupTitle">请设置小组数量</div>
  6713. <div v-for="(item, index) in groupJson2.group" :key="index" class="groupName">
  6714. <span class="groupn">组{{ index + 1 }}名称:</span>
  6715. <el-input v-model="item.name" placeholder="请输入名称..." style="width: 250px"></el-input>
  6716. <!-- <div class="groupBtn">
  6717. <el-button type="primary" size="small" @click="addGroup(index)">
  6718. 添加</el-button>
  6719. <el-button type="primary" size="small" @click="deleteGroup(index)"
  6720. v-if="groupJson2.group && groupJson2.group.length > 1">删除</el-button>
  6721. </div> -->
  6722. </div>
  6723. </div>
  6724. <div class="groupContent">
  6725. <div class="groupTitle">请设置每组人数数量</div>
  6726. <!-- <el-input v-model="groupJson.number" placeholder="2-10人以内"
  6727. style="width: 150px; margin: 10px 10px 0 0"></el-input> -->
  6728. <el-input-number v-model="groupJson2.number" :controls="false" :min="2" :max="10"
  6729. placeholder="2-10人以内"></el-input-number>
  6730. </div>
  6731. </div>
  6732. <span slot="footer" class="dialog-footer">
  6733. <el-button @click="dialogVisibleGroup2 = false">取 消</el-button>
  6734. <el-button type="primary" @click="updateGroupJson">确定</el-button>
  6735. </span>
  6736. </el-dialog>
  6737. <el-dialog title="作业提交" :visible.sync="dialogVisibleGroupWork" :append-to-body="true" width="500px"
  6738. :before-close="handleClose" class="dialog_change">
  6739. <div class="marginT">
  6740. <div>上传文件</div>
  6741. <div class="chapter_add" @click="addImg($event)" v-if="studyJuri[0].cover.length == 0">
  6742. <div class="up_photo">
  6743. <img src="../../assets/icon/uploadImg.png" alt />
  6744. </div>
  6745. <!-- <input
  6746. type="file"
  6747. accept="video/mp4, video/quicktime, video/x-msvideo,application/pdf, application/.ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/*"
  6748. style="display: none"
  6749. @change="beforeUpload1($event, 1)"
  6750. /> -->
  6751. <input type="file" accept="*" style="display: none" @change="beforeUpload1($event, 1)" />
  6752. </div>
  6753. <!-- capture="camera" -->
  6754. <div class="chapter_add" style="
  6755. display: flex;
  6756. width: 100%;
  6757. flex-direction: row;
  6758. flex-wrap: wrap;
  6759. justify-content: flex-start;
  6760. padding: 15px 0;
  6761. " v-if="studyJuri[0].cover.length > 0">
  6762. <div class="upCover">
  6763. <img :src="studyJuri[0].cover[0].url" alt v-if="fileType == 0" />
  6764. <img :src="word" alt v-else-if="fileType == 1" />
  6765. <img :src="video" alt v-else-if="fileType == 2" />
  6766. <img :src="word2" alt v-else-if="fileType == 3" />
  6767. <span class="picName">{{ studyJuri[0].cover[0].name }}</span>
  6768. <div class="deleteWord" @click="clean(1)">
  6769. <img src="../../assets/icon/deleteWorks.png" alt />
  6770. </div>
  6771. </div>
  6772. </div>
  6773. </div>
  6774. <div class="upload_send" @click="addCourseWorks2(taskCount)" v-if="!proVisible">
  6775. 提交
  6776. </div>
  6777. </el-dialog>
  6778. <el-dialog title="修改分组" :visible.sync="dialogVisibleUpdateGroup" :append-to-body="true" width="350px"
  6779. :before-close="handleClose" class="dialog_diy">
  6780. <div>
  6781. <h2>
  6782. {{ this.updateGroupUser.name }}
  6783. </h2>
  6784. <div style="color: rgb(171 171 171); margin-top: 10px">
  6785. 请选择要进入的分组
  6786. </div>
  6787. <el-radio-group v-model="checkChair">
  6788. <el-radio style="display: block; margin-top: 20px" v-for="(item, index) in updateGroupArray" :label="item.label"
  6789. :key="index">{{ item.name }}</el-radio>
  6790. </el-radio-group>
  6791. </div>
  6792. <span slot="footer" class="dialog-footer">
  6793. <el-button @click="dialogVisibleUpdateGroup = false">取 消</el-button>
  6794. <el-button type="primary" @click="updateChair">确定</el-button>
  6795. </span>
  6796. </el-dialog>
  6797. <el-dialog title="移除组员" :visible.sync="dialogVisibleDeleteGroup" :append-to-body="true" width="350px"
  6798. :before-close="handleClose" class="dialog_diy">
  6799. <div>
  6800. <h2>
  6801. {{ this.deleteGroupArray.name }}
  6802. </h2>
  6803. <div style="color: rgb(171 171 171); margin-top: 10px">
  6804. 请选择要删除的组员
  6805. </div>
  6806. <el-checkbox-group v-model="checkDeleteGroup">
  6807. <el-checkbox style="display: block; margin-top: 20px" v-for="(item, index) in deleteGroupUser"
  6808. :label="item.userid" :key="index">{{ item.name }}</el-checkbox>
  6809. </el-checkbox-group>
  6810. </div>
  6811. <span slot="footer" class="dialog-footer">
  6812. <el-button @click="dialogVisibleDeleteGroup = false">取 消</el-button>
  6813. <el-button type="primary" @click="deleteChair">确定</el-button>
  6814. </span>
  6815. </el-dialog>
  6816. <el-dialog title="批量上传" :visible.sync="dialogVisiblePl" :append-to-body="true" width="700px"
  6817. :before-close="handleClose" class="dialog_change">
  6818. <div class="marginT">
  6819. <div class="plworkBox">
  6820. <div class="chapter_add" style="
  6821. display: flex;
  6822. width: 150px;
  6823. flex-direction: row;
  6824. flex-wrap: wrap;
  6825. justify-content: flex-start;
  6826. margin: 0 10px 10px 0;
  6827. " v-for="(item, index) in plworkFile" :key="index">
  6828. <div class="upCover2">
  6829. <img :src="item.url" alt v-if="item.fileType == 1" @click="previewImg(item.url)" />
  6830. <img :src="word" alt v-else-if="item.fileType == 4" />
  6831. <img :src="video" alt v-else />
  6832. <!-- <span class="picName">{{ item.name }}</span> -->
  6833. <!-- <el-input
  6834. v-model="item.username"
  6835. placeholder="请输入学生名字"
  6836. style="margin-top: 10px"
  6837. ></el-input> -->
  6838. <div class="pl_select_box" @click="getUpdateMore(true, checkUpload(), item.username, index)">{{
  6839. getSName(item.username) }}</div>
  6840. <!-- <el-select style="margin-top: 10px" v-model="item.username" filterable allow-create placeholder="请选择学生">
  6841. <el-option v-for="item1 in checkUpload" :key="item1.userid"
  6842. :label="item1.name ? item1.name : item1.username" :value="item1.userid">
  6843. </el-option>
  6844. </el-select> -->
  6845. <div class="deleteWord" @click="clean2(index)">
  6846. <img src="../../assets/icon/deleteWorks.png" alt />
  6847. </div>
  6848. </div>
  6849. </div>
  6850. <div class="chapter_add" style="width: auto" @click="addImg($event)">
  6851. <div class="up_photo2">
  6852. <img src="../../assets/icon/plwork.png" alt />
  6853. <span>点击上传文件</span>
  6854. </div>
  6855. <input type="file"
  6856. accept="video/mp4, video/quicktime, video/x-msvideo,application/pdf, application/.ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/*"
  6857. multiple="multiple" style="display: none" @change="beforeUpload3($event, 6)" />
  6858. </div>
  6859. </div>
  6860. </div>
  6861. <!-- capture="camera" -->
  6862. <div class="upload_send" @click="addCourseWorksPl(taskCount)" v-if="!proVisible2">
  6863. 提交
  6864. </div>
  6865. </el-dialog>
  6866. <el-dialog title="修改名称" :visible.sync="dialogVisibleSname" width="500px" :before-close="handleClose"
  6867. class="dialog_diy" center>
  6868. <div style="text-align: center;display: flex;align-items: center;justify-content: center;">
  6869. <span class="tian1">名称</span>
  6870. <div class="pl_select_box" style="margin-left:10px;width:200px"
  6871. @click="getUpdateMore(true, uploadStudentJuri, worksSid)">{{ getSName(worksSName) }}</div>
  6872. <!-- <el-select v-model="worksSName" filterable allow-create style="width: 250px; margin: 15px 0px"
  6873. placeholder="请选择学生">
  6874. <el-option v-for="item in uploadStudentJuri" :key="item.userid" :label="item.name ? item.name : item.username"
  6875. :value="item.userid">
  6876. </el-option>
  6877. </el-select> -->
  6878. <!-- <el-input
  6879. v-model="worksSName"
  6880. style="width: 250px; margin: 15px 0px"
  6881. ></el-input> -->
  6882. </div>
  6883. <span slot="footer" class="dialog-footer">
  6884. <el-button @click="dialogVisibleSname = false">取 消</el-button>
  6885. <el-button type="primary" @click="updateName">确 定</el-button>
  6886. </span>
  6887. </el-dialog>
  6888. <interVideo :dialogVisibleVideo.sync="dialogVisibleVideo" :videoJson="videoJson" :userid="userid" :id="id"
  6889. :courseType="courseType" :taskCount="taskCount" :toolindex="toolindex"></interVideo>
  6890. <UpdateMore :dialogVisibleMember.sync="dialogVisibleMember" :cList="uploadStudentJuri" :userid="userid"
  6891. :searchTN="worksSName2" @setPlname="setPlname"></UpdateMore>
  6892. </div>
  6893. </template>
  6894. <script>
  6895. import "../../common/aws-sdk-2.235.1.min.js";
  6896. // import pdf from "../components/pdf3";
  6897. import pdf from "../components/vpdf";
  6898. import AskStatic from "../components/askStatic";
  6899. import AskStatic2 from "../components/askStatic2";
  6900. import AnswerData2 from "../components/answerData2";
  6901. import AnswerData from "../components/answerData";
  6902. import EditorBar from "../tools/wangEnduit.vue";
  6903. import Table from "../tools/table.vue";
  6904. import Time from "../tools/time.vue";
  6905. import Mind from "../tools/jsmind.vue";
  6906. import Sunburst from "../tools/sunburst";
  6907. import SeeBoard from "../tools/seeBoard";
  6908. import * as imageConversion from "image-conversion";
  6909. import Audio from "../components/audio.vue";
  6910. import ImgDraw from "../tools/imgDraw/imgDraw";
  6911. import { Empty } from "element-ui";
  6912. import RecordRTC from "recordrtc";
  6913. import interVideo from "../interVideo/index.vue"
  6914. import UpdateMore from "../updateMore/updateMore.vue";
  6915. export default {
  6916. components: {
  6917. EditorBar,
  6918. Time,
  6919. pdf,
  6920. AskStatic,
  6921. AskStatic2,
  6922. Mind,
  6923. Sunburst,
  6924. SeeBoard,
  6925. AnswerData2,
  6926. AnswerData,
  6927. Audio,
  6928. ImgDraw,
  6929. Table,
  6930. interVideo,
  6931. UpdateMore
  6932. },
  6933. data() {
  6934. return {
  6935. bg: null,
  6936. drawShow: false,
  6937. dialogVisible: false,
  6938. dialogVisiblePl: false,
  6939. commentDialogVisible: false,
  6940. videoVisible: false,
  6941. isStar: false,
  6942. studentEvalDialogVisible: false,
  6943. studentEvalDialogVisibleTeacher: false,
  6944. dialogVisibleSelect: false,
  6945. dialogVisibleSelectTeacher: false,
  6946. dialogVisibleScore: false,
  6947. dialogVisibleSentence: false,
  6948. dialogVisibleSentenceTeacher: false,
  6949. dialogVisibleSentence1: false,
  6950. dialogVisibleWorks: false,
  6951. answerDialogVisibleTeacher: false,
  6952. dialogVisibleTable: false,
  6953. dialogVisibleTableTeacher: false,
  6954. dialogVisibleWord: false,
  6955. dialogVisibleWordTeacher: false,
  6956. dialogVisibleTable2: false,
  6957. dialogVisibleTable3: false,
  6958. dialogVisibleGroupWork: false,
  6959. dialogVisibleUpdateGroup: false,
  6960. dialogVisibleDeleteGroup: false,
  6961. dialogVisibleSname: false,
  6962. dialogVisibleVideo: false,
  6963. worksSName: "",
  6964. classJuri: [],
  6965. uploadStudentJuri: [],
  6966. uploadCid: "",
  6967. snameWid: "",
  6968. sStudent: {},
  6969. sTool: "",
  6970. bzText: "",
  6971. commentDetail: [],
  6972. selectAnswer: [],
  6973. videoDetail: {},
  6974. selectJson: {},
  6975. eScore: { eBzText: "", eStar: [] },
  6976. id: this.$route.query.courseId,
  6977. userid: this.$route.query.userid,
  6978. classId: this.$route.query.cid,
  6979. // courseTypeLine: this.$route.query.type,
  6980. oid: this.$route.query.oid,
  6981. org: this.$route.query.org,
  6982. tType: this.$route.query.tType,
  6983. courseType: this.$route.query.type,
  6984. screenType: this.$route.query.screenType,
  6985. tcid2: this.$route.query.tcid,
  6986. tcid: "",
  6987. pptImgUrl: "",
  6988. pptImgUrl1: "",
  6989. commentText: "",
  6990. full: false,
  6991. sIsOpen: false,
  6992. IsLookOpen: false,
  6993. IsFollow: false,
  6994. pzDialog: false,
  6995. contentDialog: false,
  6996. mlDialog: false,
  6997. type: 1,
  6998. sentenceList: [{ sentenceTitle: "", addSentence: [], rightAnswer: [] }],
  6999. sentenceList1: [],
  7000. tableJson: [],
  7001. wordJson: [],
  7002. vedio: [],
  7003. text: [],
  7004. textList: [],
  7005. line: [],
  7006. lineList: [],
  7007. chapTools: [],
  7008. chapToolList: [],
  7009. file: [],
  7010. fileC: [],
  7011. vedioTime: [],
  7012. upToolImg: "",
  7013. preTime: 0,
  7014. rateList: {
  7015. ca: 0,
  7016. },
  7017. rateParams: [],
  7018. colors: ["#DFDFDF", "#DFDFDF", "#DFDFDF"],
  7019. studyJuri: [
  7020. {
  7021. content: "",
  7022. cover: [],
  7023. upVedio: [],
  7024. upFile: [],
  7025. },
  7026. ],
  7027. plworkFile: [],
  7028. mr: require("../../assets/vedioPic.png"),
  7029. word: require("../../assets/icon/isWord.png"),
  7030. word2: require("../../assets/icon/word2.png"),
  7031. video: require("../../assets/icon/isVideo.png"),
  7032. noLikes: require("../../assets/icon/comment/noLikes.png"),
  7033. likes: require("../../assets/icon/comment/likes.png"),
  7034. scoreImg: require("../../assets/score.png"),
  7035. courseDetail: {},
  7036. isSelect: false,
  7037. chapInfo: [],
  7038. chapInfoList: [],
  7039. taskCount: 0,
  7040. imgList: [],
  7041. noImgList: [],
  7042. pzList: [],
  7043. PlTextList: [
  7044. "Excellent!",
  7045. "nice!",
  7046. "很有创意!",
  7047. "还不错哦~",
  7048. "继续努力哦~",
  7049. ],
  7050. isClickNav: "",
  7051. navId: "",
  7052. playerOptions: {
  7053. playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
  7054. autoplay: false, //如果true,浏览器准备好时开始回放。
  7055. muted: false, // 默认情况下将会消除任何音频。
  7056. loop: false, // 导致视频一结束就重新开始。
  7057. preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
  7058. language: "zh-CN",
  7059. aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
  7060. fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
  7061. sources: [
  7062. {
  7063. type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 || "video/ogg"|| "video/webm"
  7064. src: "", //url地址require("../../../../assets/media/aaa.mp4")
  7065. },
  7066. ],
  7067. // poster: require("../../../../assets/tu31.png"), //你的封面地址
  7068. // poster: dataRes.imgUrl, //你的封面地址
  7069. notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
  7070. controlBar: {
  7071. timeDivider: true, //当前时间和持续时间的分隔符
  7072. durationDisplay: true, //显示持续时间
  7073. remainingTimeDisplay: false, //是否显示剩余时间功能
  7074. fullscreenToggle: true, //全屏按钮
  7075. },
  7076. },
  7077. playerOptions1: {
  7078. playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
  7079. autoplay: false, //如果true,浏览器准备好时开始回放。
  7080. muted: false, // 默认情况下将会消除任何音频。
  7081. loop: false, // 导致视频一结束就重新开始。
  7082. preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
  7083. language: "zh-CN",
  7084. aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
  7085. fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
  7086. sources: [
  7087. {
  7088. type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 || "video/ogg"|| "video/webm"
  7089. src: "", //url地址require("../../../../assets/media/aaa.mp4")
  7090. },
  7091. ],
  7092. // poster: require("../../../../assets/tu31.png"), //你的封面地址
  7093. // poster: dataRes.imgUrl, //你的封面地址
  7094. notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
  7095. controlBar: {
  7096. timeDivider: true, //当前时间和持续时间的分隔符
  7097. durationDisplay: true, //显示持续时间
  7098. remainingTimeDisplay: false, //是否显示剩余时间功能
  7099. fullscreenToggle: true, //全屏按钮
  7100. },
  7101. },
  7102. playerO: {},
  7103. noneBtnImg: false,
  7104. proVisible: false,
  7105. proVisible2: false,
  7106. progress: 0,
  7107. isFinishSize: 0,
  7108. isAllSize: 0,
  7109. questionAnswer: "",
  7110. answerQ: "", //问答标题
  7111. rateJson: [],
  7112. wbCount: 0,
  7113. wordCount: 0,
  7114. mindCount: 0,
  7115. askCount: 0,
  7116. noteCount: 0,
  7117. mindNetWorkCount: 0,
  7118. libraryCount: 0,
  7119. workCount: 0,
  7120. timeCount: 0,
  7121. answerCount: 0,
  7122. trainCount: 0,
  7123. evalCount: 0,
  7124. dialogImageUrl: "",
  7125. pictureDialog: false,
  7126. toolTypeList: [],
  7127. dialogVisible1: false,
  7128. dialogVisible2: false,
  7129. dialogVisible3: false,
  7130. dialogVisible6: false,
  7131. dialogVisible4: false,
  7132. isNoHomeWork: false,
  7133. dialogVisible5: false,
  7134. dialogVisible5Teacher: false,
  7135. dialogVisibleChoice: false,
  7136. dialogVisibleChoiceTeacher: false,
  7137. answerDialogVisible: false,
  7138. juriVisible: false,
  7139. timeDialogVisible: false,
  7140. radio: [],
  7141. isAsk: false,
  7142. askJson: {
  7143. askCount: 1,
  7144. askTitle: "",
  7145. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  7146. },
  7147. testJson: {},
  7148. checkJson: [],
  7149. askList: [],
  7150. answerList: [],
  7151. navList: [],
  7152. addPzDialog: false,
  7153. ispzType: 1,
  7154. pzConText: "",
  7155. worksStudent: [],
  7156. worksStudent2: [],
  7157. worksTeacher: [],
  7158. isCloseList: [],
  7159. workStudent: [],
  7160. groupStudent: [],
  7161. groupStudentUid: [],
  7162. noWorksS: [],
  7163. isWorksS: [],
  7164. noWorksStudent: [],
  7165. toolindex: 0,
  7166. groupIndex: 0,
  7167. workTypeB: false,
  7168. workTypeC: false,
  7169. isAnswer: false,
  7170. timer: null,
  7171. opertimer: null,
  7172. showType: 0,
  7173. fileType: 0,
  7174. showPDF: false,
  7175. noteName: "",
  7176. evaJuri: [],
  7177. evalua: "",
  7178. eTitle: "",
  7179. eName: "",
  7180. eJson: {},
  7181. fid: "", //一级
  7182. sid: "", //二级
  7183. tid: "", //二级
  7184. typeMode: 1,
  7185. eJSONNum: 0,
  7186. Etype: 1,
  7187. data: {
  7188. meta: {
  7189. name: "example",
  7190. author: "dd@163.com",
  7191. version: "0.2",
  7192. },
  7193. format: "node_array",
  7194. data: [{ id: "root", isroot: true, topic: "" }],
  7195. },
  7196. fullDialogVisible: false,
  7197. fulltype: "",
  7198. fullUrl: "",
  7199. commentIndexJson: {},
  7200. Stbodywidth: 0,
  7201. pzType: 1,
  7202. wScore: 0,
  7203. scoreDetail: "",
  7204. videoStart: false,
  7205. recorder: null,
  7206. groupJson: {},
  7207. groupJson2: {},
  7208. dialogVisibleGroup: false,
  7209. dialogVisibleGroup2: false,
  7210. updateGroupArray: [],
  7211. updateGroupUser: {},
  7212. deleteGroupUser: [],
  7213. deleteGroupArray: {},
  7214. checkChair: "",
  7215. checkDeleteGroup: [],
  7216. inviteCode: "",
  7217. courseGroupStudent: [],
  7218. courseGroupStudentUid: [],
  7219. courseGroup: {},
  7220. isGroup: false,
  7221. toolIndex: null,
  7222. tool: {},
  7223. isWorkTool: [16, 32, 57, 4, 45, 15, 1, 3, 6, 7, 26, 41, 47, 48, 52, 50, 40],//, 40
  7224. videoJson: {},
  7225. toolType: 0,
  7226. checktoolArray: [],
  7227. vChapterData: [],
  7228. isUpdateToolDetail: false,
  7229. updateToolDetailInner: '',
  7230. plIndex: "",
  7231. worksSName2: "",
  7232. worksSid: "",
  7233. };
  7234. },
  7235. methods: {
  7236. jump() {
  7237. window.parent.postMessage({ tools: "43" }, "*");
  7238. },
  7239. getUpdateMore(f, checkboxList, searchTN, index) {
  7240. this.dialogVisibleMember = f;
  7241. this.checkboxList = checkboxList;
  7242. this.worksSName2 = JSON.parse(JSON.stringify(searchTN));
  7243. this.plIndex = index;
  7244. },
  7245. setPlname(a) {
  7246. if (this.plworkFile.length) {
  7247. this.plworkFile[this.plIndex].username = a
  7248. } else {
  7249. this.worksSName = a
  7250. }
  7251. this.dialogVisibleMember = false
  7252. },
  7253. previewImg(url) {
  7254. this.$hevueImgPreview(url);
  7255. },
  7256. change(val) {
  7257. console.log(val);
  7258. },
  7259. goTo(path) {
  7260. this.$router.push(path);
  7261. },
  7262. handlePictureCardPreview(url) {
  7263. this.dialogImageUrl = url;
  7264. this.pictureDialog = true;
  7265. },
  7266. clean(type) {
  7267. if (type == 1) {
  7268. this.studyJuri[0].cover.splice(0, 1);
  7269. } else if (type == 2) {
  7270. this.studyJuri[0].upVedio.splice(0, 1);
  7271. } else {
  7272. this.studyJuri[0].upFile.splice(0, 1);
  7273. }
  7274. },
  7275. clean2(index) {
  7276. this.plworkFile.splice(index, 1);
  7277. },
  7278. handleClose(done) {
  7279. if (this.videoDetail.sources && this.videoDetail.sources[0]) {
  7280. this.videoDetail.sources[0].src = "";
  7281. }
  7282. this.commentIndexJson = {};
  7283. done();
  7284. },
  7285. fullTools() {
  7286. this.full = !this.full;
  7287. },
  7288. imgChange(file, fileList, type) {
  7289. if (type == 1) {
  7290. var _tmp = this.studyJuri[0].cover;
  7291. } else if (type == 2) {
  7292. var _tmp = this.studyJuri[0].upVedio;
  7293. } else {
  7294. var _tmp = this.studyJuri[0].upFile;
  7295. }
  7296. this.noneBtnImg = _tmp.length >= 1;
  7297. },
  7298. setContent(bool) {
  7299. this.contentDialog = bool
  7300. if (bool && this.mlDialog) {
  7301. document.querySelector('.workd_media').style.height = "650px"
  7302. } else {
  7303. document.querySelector('.workd_media').style.height = "auto"
  7304. }
  7305. },
  7306. setContent2(bool) {
  7307. this.mlDialog = bool
  7308. if (bool && this.contentDialog) {
  7309. document.querySelector('.workd_media').style.height = "650px"
  7310. } else {
  7311. document.querySelector('.workd_media').style.height = "auto"
  7312. }
  7313. },
  7314. addImg(e) {
  7315. var el = e.currentTarget;
  7316. // this.$message.success('触发上传')
  7317. el.getElementsByTagName("input")[0].click();
  7318. e.target.value = "";
  7319. },
  7320. addSelectAnswer() {
  7321. let params = [
  7322. {
  7323. uid: this.userid,
  7324. cid: this.id,
  7325. stage: this.courseType,
  7326. task: this.taskCount,
  7327. tool: this.toolindex,
  7328. content: this.selectAnswer.answer,
  7329. type: 7,
  7330. },
  7331. ];
  7332. this.ajax
  7333. .post(this.$store.state.api + "addCourseWorks", params)
  7334. .then((res) => {
  7335. this.$message({
  7336. message: "提交成功",
  7337. type: "success",
  7338. });
  7339. this.dialogVisibleSelect = false;
  7340. // this.selectAnswer = {};
  7341. this.selectSWorks();
  7342. this.selectStudent();
  7343. })
  7344. .catch((err) => {
  7345. this.$message.error("提交失败");
  7346. console.error(err);
  7347. });
  7348. },
  7349. addSelectAnswerTeacher() {
  7350. let params = [
  7351. {
  7352. uid: this.sStudent.userid,
  7353. cid: this.id,
  7354. stage: this.courseType,
  7355. task: this.taskCount,
  7356. tool: this.toolindex,
  7357. content: this.selectAnswer.answer,
  7358. type: 7,
  7359. },
  7360. ];
  7361. this.ajax
  7362. .post(this.$store.state.api + "addCourseWorks", params)
  7363. .then((res) => {
  7364. this.$message({
  7365. message: "提交成功",
  7366. type: "success",
  7367. });
  7368. this.dialogVisibleSelectTeacher = false;
  7369. // this.selectAnswer = {};
  7370. this.selectSWorks();
  7371. this.selectStudent();
  7372. })
  7373. .catch((err) => {
  7374. this.$message.error("提交失败");
  7375. console.error(err);
  7376. });
  7377. },
  7378. addSenWorks() {
  7379. for (var i = 0; i < this.sentenceList.length; i++) {
  7380. for (var j = 0; j < this.sentenceList[i].chooseSenList.length; j++) {
  7381. if (
  7382. this.sentenceList[i].chooseSenList[j] == undefined ||
  7383. this.sentenceList[i].chooseSenList[j] == ""
  7384. ) {
  7385. this.$message.error("请将答案填写完整!");
  7386. return;
  7387. }
  7388. }
  7389. }
  7390. let params = [
  7391. {
  7392. uid: this.userid,
  7393. cid: this.id,
  7394. stage: this.courseType,
  7395. task: this.taskCount,
  7396. tool: this.toolindex,
  7397. content: JSON.stringify(this.sentenceList),
  7398. type: 9,
  7399. },
  7400. ];
  7401. this.ajax
  7402. .post(this.$store.state.api + "addCourseWorks", params)
  7403. .then((res) => {
  7404. this.$message({
  7405. message: "提交成功",
  7406. type: "success",
  7407. });
  7408. this.dialogVisibleSentence = false;
  7409. // this.selectAnswer = {};
  7410. this.selectSWorks();
  7411. this.selectStudent();
  7412. })
  7413. .catch((err) => {
  7414. this.$message.error("提交失败");
  7415. console.error(err);
  7416. });
  7417. },
  7418. addSenWorksTeacher() {
  7419. for (var i = 0; i < this.sentenceList.length; i++) {
  7420. for (var j = 0; j < this.sentenceList[i].chooseSenList.length; j++) {
  7421. if (
  7422. this.sentenceList[i].chooseSenList[j] == undefined ||
  7423. this.sentenceList[i].chooseSenList[j] == ""
  7424. ) {
  7425. this.$message.error("请将答案填写完整!");
  7426. return;
  7427. }
  7428. }
  7429. }
  7430. let params = [
  7431. {
  7432. uid: this.sStudent.userid,
  7433. cid: this.id,
  7434. stage: this.courseType,
  7435. task: this.taskCount,
  7436. tool: this.toolindex,
  7437. content: JSON.stringify(this.sentenceList),
  7438. type: 9,
  7439. },
  7440. ];
  7441. this.ajax
  7442. .post(this.$store.state.api + "addCourseWorks", params)
  7443. .then((res) => {
  7444. this.$message({
  7445. message: "提交成功",
  7446. type: "success",
  7447. });
  7448. this.dialogVisibleSentenceTeacher = false;
  7449. // this.selectAnswer = {};
  7450. this.selectSWorks();
  7451. this.selectStudent();
  7452. })
  7453. .catch((err) => {
  7454. this.$message.error("提交失败");
  7455. console.error(err);
  7456. });
  7457. },
  7458. addTableWorks() {
  7459. let params = [
  7460. {
  7461. uid: this.userid,
  7462. cid: this.id,
  7463. stage: this.courseType,
  7464. task: this.taskCount,
  7465. tool: this.toolindex,
  7466. content: JSON.stringify(this.tableJson).replaceAll(/%/g, "%25"),
  7467. type: 10,
  7468. },
  7469. ];
  7470. this.ajax
  7471. .post(this.$store.state.api + "addCourseWorks", params)
  7472. .then((res) => {
  7473. this.$message({
  7474. message: "提交成功",
  7475. type: "success",
  7476. });
  7477. this.dialogVisibleTable = false;
  7478. // this.selectAnswer = {};
  7479. this.selectSWorks();
  7480. this.selectStudent();
  7481. })
  7482. .catch((err) => {
  7483. this.$message.error("提交失败");
  7484. console.error(err);
  7485. });
  7486. },
  7487. addTableWorksTeacher() {
  7488. let params = [
  7489. {
  7490. uid: this.sStudent.userid,
  7491. cid: this.id,
  7492. stage: this.courseType,
  7493. task: this.taskCount,
  7494. tool: this.toolindex,
  7495. content: JSON.stringify(this.tableJson).replaceAll(/%/g, "%25"),
  7496. type: 10,
  7497. },
  7498. ];
  7499. this.ajax
  7500. .post(this.$store.state.api + "addCourseWorks", params)
  7501. .then((res) => {
  7502. this.$message({
  7503. message: "提交成功",
  7504. type: "success",
  7505. });
  7506. this.dialogVisibleTableTeacher = false;
  7507. // this.selectAnswer = {};
  7508. this.selectSWorks();
  7509. this.selectStudent();
  7510. })
  7511. .catch((err) => {
  7512. this.$message.error("提交失败");
  7513. console.error(err);
  7514. });
  7515. },
  7516. addWordWorks() {
  7517. let params = [{
  7518. uid: this.userid,
  7519. cid: this.id,
  7520. stage: this.courseType,
  7521. task: this.taskCount,
  7522. tool: this.toolindex,
  7523. content: JSON.stringify(this.wordJson).replaceAll(/%/g, "%25"),
  7524. type: 13,
  7525. atool: 52,
  7526. }];
  7527. console.log(params);
  7528. this.ajax
  7529. .post(this.$store.state.api + "addCourseWorks3-2", params)
  7530. .then((res) => {
  7531. this.$message({
  7532. message: "提交成功",
  7533. type: "success",
  7534. });
  7535. this.dialogVisibleWord = false;
  7536. // this.selectAnswer = {};
  7537. this.selectSWorks();
  7538. this.selectStudent();
  7539. })
  7540. .catch((err) => {
  7541. this.$message.error("提交失败");
  7542. console.error(err);
  7543. });
  7544. },
  7545. addWordWorksTeacher() {
  7546. let params = [{
  7547. uid: this.sStudent.userid,
  7548. cid: this.id,
  7549. stage: this.courseType,
  7550. task: this.taskCount,
  7551. tool: this.toolindex,
  7552. content: JSON.stringify(this.wordJson).replaceAll(/%/g, "%25"),
  7553. type: 13,
  7554. atool: 52,
  7555. }];
  7556. console.log(params);
  7557. this.ajax
  7558. .post(this.$store.state.api + "addCourseWorks3-2", params)
  7559. .then((res) => {
  7560. this.$message({
  7561. message: "提交成功",
  7562. type: "success",
  7563. });
  7564. this.dialogVisibleWordTeacher = false;
  7565. // this.selectAnswer = {};
  7566. this.selectSWorks();
  7567. this.selectStudent();
  7568. })
  7569. .catch((err) => {
  7570. this.$message.error("提交失败");
  7571. console.error(err);
  7572. });
  7573. },
  7574. addCourseWorks(i) {
  7575. var typesql;
  7576. if (this.fileType === 0) {
  7577. typesql = 1;
  7578. } else if (this.fileType === 1) {
  7579. typesql = 4;
  7580. } else if (this.fileType === 2) {
  7581. typesql = 5;
  7582. } else if (this.fileType === 3) {
  7583. typesql = 12;
  7584. }
  7585. if (!this.studyJuri[0].cover[0].url) {
  7586. this.$message.error("请上传文件");
  7587. return;
  7588. }
  7589. let params = [
  7590. {
  7591. uid: this.userid,
  7592. cid: this.id,
  7593. stage: this.courseType,
  7594. task: i,
  7595. tool: this.toolindex,
  7596. content: this.studyJuri[0].cover[0].url,
  7597. type: typesql,
  7598. },
  7599. ];
  7600. this.ajax
  7601. .post(this.$store.state.api + "addCourseWorksR", params)
  7602. .then((res) => {
  7603. this.$message({
  7604. message: "提交成功",
  7605. type: "success",
  7606. });
  7607. this.studyJuri[0].cover = [];
  7608. this.dialogVisible = false;
  7609. this.getCourseDetail();
  7610. })
  7611. .catch((err) => {
  7612. this.$message.error("提交失败");
  7613. console.error(err);
  7614. });
  7615. },
  7616. addCourseWorksPl(i) {
  7617. let _files = this.plworkFile;
  7618. var c = 1;
  7619. for (var k = 0; k < _files.length; k++) {
  7620. if (!_files[k].username) {
  7621. c = 2;
  7622. }
  7623. }
  7624. if (c == 2) {
  7625. this.$message.error("请填写学生姓名");
  7626. return;
  7627. }
  7628. let params = [
  7629. {
  7630. ateacher: this.userid,
  7631. cid: this.id,
  7632. stage: this.courseType,
  7633. task: i,
  7634. tool: this.toolindex,
  7635. content: JSON.stringify(_files).replaceAll(/%/g, "%25"),
  7636. },
  7637. ];
  7638. this.ajax
  7639. .post(this.$store.state.api + "addCourseWorksPl", params)
  7640. .then((res) => {
  7641. this.$message({
  7642. message: "提交成功",
  7643. type: "success",
  7644. });
  7645. this.plworkFile = [];
  7646. this.dialogVisiblePl = false;
  7647. this.getCourseDetail();
  7648. })
  7649. .catch((err) => {
  7650. this.$message.error("提交失败");
  7651. console.error(err);
  7652. });
  7653. },
  7654. addCourseWorks2(i) {
  7655. var typesql;
  7656. if (this.fileType === 0) {
  7657. typesql = 0;
  7658. } else if (this.fileType === 1) {
  7659. typesql = 1;
  7660. } else if (this.fileType === 2) {
  7661. typesql = 3;
  7662. } else if (this.fileType === 3) {
  7663. typesql = 12;
  7664. }
  7665. if (!this.studyJuri[0].cover[0].url) {
  7666. this.$message.error("请上传文件");
  7667. return;
  7668. }
  7669. let params = [
  7670. {
  7671. uid: this.userid,
  7672. cid: this.id,
  7673. stage: this.courseType,
  7674. task: i,
  7675. tool: this.toolindex,
  7676. content: JSON.stringify({
  7677. type: typesql,
  7678. groupIndex: this.groupIndex,
  7679. url: this.studyJuri[0].cover[0].url,
  7680. }).replaceAll(/%/g, "%25"),
  7681. type: 11,
  7682. atool: 49,
  7683. text: "",
  7684. },
  7685. ];
  7686. this.ajax
  7687. .post(this.$store.state.api + "addCourseWorks5", params)
  7688. .then((res) => {
  7689. this.$message({
  7690. message: "提交成功",
  7691. type: "success",
  7692. });
  7693. this.studyJuri[0].cover = [];
  7694. this.dialogVisibleGroupWork = false;
  7695. this.getCourseDetail();
  7696. })
  7697. .catch((err) => {
  7698. this.$message.error("提交失败");
  7699. console.error(err);
  7700. });
  7701. },
  7702. addCourseWorksGong(i, data, tool) {
  7703. let params = [
  7704. {
  7705. uid: this.userid,
  7706. cid: this.id,
  7707. stage: this.courseType,
  7708. task: this.taskCount,
  7709. tool: i,
  7710. content: data,
  7711. type: 12,
  7712. atool: tool,
  7713. text: "",
  7714. },
  7715. ];
  7716. this.ajax
  7717. .post(this.$store.state.api + "addCourseWorks5", params)
  7718. .then((res) => {
  7719. this.$message({
  7720. message: "提交成功",
  7721. type: "success",
  7722. });
  7723. this.studyJuri[0].cover = [];
  7724. this.selectSWorks();
  7725. this.selectStudent();
  7726. })
  7727. .catch((err) => {
  7728. this.$message.error("提交失败");
  7729. console.error(err);
  7730. });
  7731. },
  7732. addCourseWorksGongTeacher(i, data, tool) {
  7733. let params = [
  7734. {
  7735. uid: this.sStudent.userid,
  7736. cid: this.id,
  7737. stage: this.courseType,
  7738. task: this.taskCount,
  7739. tool: i,
  7740. content: data,
  7741. type: 12,
  7742. atool: tool,
  7743. text: "",
  7744. },
  7745. ];
  7746. this.ajax
  7747. .post(this.$store.state.api + "addCourseWorks5", params)
  7748. .then((res) => {
  7749. this.$message({
  7750. message: "提交成功",
  7751. type: "success",
  7752. });
  7753. this.studyJuri[0].cover = [];
  7754. this.dialogVisibleWorks = false;
  7755. this.selectSWorks();
  7756. this.selectStudent();
  7757. })
  7758. .catch((err) => {
  7759. this.$message.error("提交失败");
  7760. console.error(err);
  7761. });
  7762. },
  7763. addCourseWorksGongPl(i, data, tool, type) {
  7764. let params = [
  7765. {
  7766. uid: this.sStudent.userid,
  7767. cid: this.id,
  7768. stage: this.courseType,
  7769. task: this.taskCount,
  7770. tool: i,
  7771. content: data,
  7772. type: type,
  7773. atool: tool,
  7774. text: "",
  7775. },
  7776. ];
  7777. this.ajax
  7778. .post(this.$store.state.api + "addCourseWorks5", params)
  7779. .then((res) => {
  7780. this.$message({
  7781. message: "提交成功",
  7782. type: "success",
  7783. });
  7784. this.studyJuri[0].cover = [];
  7785. this.dialogVisibleWorks = false;
  7786. this.selectSWorks();
  7787. this.selectStudent();
  7788. })
  7789. .catch((err) => {
  7790. this.$message.error("提交失败");
  7791. console.error(err);
  7792. });
  7793. },
  7794. addCourseWorksTeacher(i) {
  7795. var typesql;
  7796. if (this.sTool == 32) {
  7797. this.addCourseWorksGongTeacher(this.toolindex, this.studyJuri[0].cover[0].url, this.sTool);
  7798. return;
  7799. }
  7800. if (this.fileType === 0) {
  7801. typesql = 1;
  7802. } else if (this.fileType === 1) {
  7803. typesql = 4;
  7804. } else if (this.fileType === 2) {
  7805. typesql = 5;
  7806. } else if (this.fileType === 3) {
  7807. typesql = 12;
  7808. }
  7809. if (this.sTool == 50) {
  7810. this.addCourseWorksGongPl(this.toolindex, this.studyJuri[0].cover[0].url, this.sTool, typesql);
  7811. return;
  7812. }
  7813. if (!this.studyJuri[0].cover[0].url) {
  7814. this.$message.error("请上传文件");
  7815. return;
  7816. }
  7817. let params = [
  7818. {
  7819. uid: this.sStudent.userid,
  7820. cid: this.id,
  7821. stage: this.courseType,
  7822. task: i,
  7823. tool: this.toolindex,
  7824. content: this.studyJuri[0].cover[0].url,
  7825. type: typesql,
  7826. ateacher: this.userid,
  7827. },
  7828. ];
  7829. this.ajax
  7830. .post(this.$store.state.api + "addCourseWorksTeacher", params)
  7831. .then((res) => {
  7832. this.$message({
  7833. message: "提交成功",
  7834. type: "success",
  7835. });
  7836. this.studyJuri[0].cover = [];
  7837. this.dialogVisibleWorks = false;
  7838. this.getCourseDetail();
  7839. })
  7840. .catch((err) => {
  7841. this.$message.error("提交失败");
  7842. console.error(err);
  7843. });
  7844. },
  7845. selectUploadStudent(type) {
  7846. const loading = this.$loading.service({
  7847. background: "rgba(255, 255, 255, 0.7)",
  7848. target: document.body,
  7849. });
  7850. let params = {
  7851. cid: this.uploadCid,
  7852. oid: this.oid,
  7853. cn: "",
  7854. };
  7855. this.ajax
  7856. .get(this.$store.state.api + "selectSnameByCidGroup", params)
  7857. .then((res) => {
  7858. loading.close();
  7859. var studentK = [];
  7860. if (this.isWorksS[this.toolindex].length > 0) {
  7861. for (var z = 0; z < this.isWorksS[this.toolindex].length; z++) {
  7862. studentK.push(this.isWorksS[this.toolindex][z].uid);
  7863. }
  7864. studentK = studentK.join(",");
  7865. }
  7866. this.uploadStudentJuri = res.data[0].filter((el) => {
  7867. return studentK.indexOf(el.userid) == -1;
  7868. });
  7869. if (this.worksSName && this.worksSid) {
  7870. this.uploadStudentJuri.push({
  7871. userid: this.worksSid,
  7872. name: this.worksSName,
  7873. })
  7874. }
  7875. if(type == 1){
  7876. this.plworkFile = []
  7877. this.dialogVisibleSname = true;
  7878. }else if(type == 2){
  7879. this.dialogVisiblePl = true;
  7880. }
  7881. })
  7882. .catch((err) => {
  7883. loading.close();
  7884. console.error(err);
  7885. });
  7886. },
  7887. arrayToArray(arrayo, arrayt) {
  7888. let array1 = arrayo;
  7889. let array2 = arrayt;
  7890. let commonElements = [];
  7891. for (let i = 0; i < array1.length; i++) {
  7892. for (let j = 0; j < array2.length; j++) {
  7893. if (array1[i] === array2[j]) {
  7894. commonElements.push(array1[i]);
  7895. }
  7896. }
  7897. }
  7898. return commonElements
  7899. },
  7900. selectWorksStudent() {
  7901. let params = {
  7902. oid: this.oid,
  7903. cid: this.courseDetail.juri,
  7904. };
  7905. this.ajax
  7906. .get(this.$store.state.api + "selectWorksStudent", params)
  7907. .then((res) => {
  7908. var a = res.data[0];
  7909. for (var i = 0; i < this.isWorksS.length; i++) {
  7910. this.noWorksS[i] = [];
  7911. var studentK = [];
  7912. if (this.isWorksS[i].length > 0) {
  7913. for (var z = 0; z < this.isWorksS[i].length; z++) {
  7914. studentK.push(this.isWorksS[i][z].uid);
  7915. }
  7916. studentK = studentK.join(",");
  7917. for (var j = 0; j < a.length; j++) {
  7918. // if (studentK.indexOf(a[j].userid) == -1) {
  7919. if (this.tcid) {
  7920. // a[j].classid.indexOf(this.tcid) != -1
  7921. if (this.arrayToArray(a[j].classid.split(","), this.tcid.split(",")).length) {
  7922. this.noWorksS[i].push({
  7923. student: a[j].name,
  7924. userid: a[j].userid,
  7925. type: studentK.indexOf(a[j].userid) == -1 ? '1' : '2'
  7926. });
  7927. }
  7928. } else {
  7929. this.noWorksS[i].push({
  7930. student: a[j].name,
  7931. userid: a[j].userid,
  7932. type: studentK.indexOf(a[j].userid) == -1 ? '1' : '2'
  7933. });
  7934. }
  7935. // }
  7936. }
  7937. } else {
  7938. for (var k = 0; k < a.length; k++) {
  7939. if (this.tcid) {
  7940. if (this.arrayToArray(a[k].classid.split(","), this.tcid.split(",")).length) {
  7941. this.noWorksS[i].push({
  7942. student: a[k].name,
  7943. userid: a[k].userid,
  7944. type: '1'
  7945. });
  7946. }
  7947. } else {
  7948. this.noWorksS[i].push({
  7949. student: a[k].name,
  7950. userid: a[k].userid,
  7951. type: '1'
  7952. });
  7953. }
  7954. }
  7955. }
  7956. // this.noWorksS[i] = this.noWorksS[i].sort(function (a, b) {
  7957. // let jscoreA = parseInt(a.type);
  7958. // let jscoreB = parseInt(b.type);
  7959. // return jscoreB - jscoreA;
  7960. // });
  7961. }
  7962. this.$forceUpdate();
  7963. if (
  7964. Object.keys(this.commentDetail).length &&
  7965. Object.keys(this.commentIndexJson).length &&
  7966. !this.dialogVisibleScore
  7967. ) {
  7968. let a = 1;
  7969. let c = this.commentIndexJson;
  7970. console.log(c);
  7971. if (
  7972. this.commentIndexJson.gindex ||
  7973. this.commentIndexJson.gindex === 0
  7974. ) {
  7975. for (
  7976. var i = 0;
  7977. i < this.worksStudent[this.commentIndexJson.toolIndex].length;
  7978. i++
  7979. ) {
  7980. let _el = this.worksStudent[this.commentIndexJson.toolIndex][i];
  7981. groupA: for (var k = 0; k < _el.length; k++) {
  7982. let el = _el[k];
  7983. if (el.wid == this.commentDetail.wid) {
  7984. a = 2;
  7985. this.commentOther(
  7986. this.worksStudent[this.commentIndexJson.toolIndex][i][k],
  7987. this.commentIndexJson.toolIndex,
  7988. k,
  7989. this.commentIndexJson.gindex
  7990. );
  7991. break groupA;
  7992. }
  7993. }
  7994. }
  7995. if (a === 1) {
  7996. this.commentDetail = [];
  7997. this.commentIndexJson = {};
  7998. this.commentDialogVisible = false;
  7999. this.$message("此作业已被删除");
  8000. }
  8001. } else {
  8002. if (this.isGroup && this.commentIndexJson.gid) {
  8003. groupA: for (
  8004. var i = 0;
  8005. i < this.courseGroup.group.length;
  8006. i++
  8007. ) {
  8008. let _group = this.courseGroup.group[i]
  8009. if (_group.id == this.commentIndexJson.gid) {
  8010. let _el2 = _group.works[this.commentIndexJson.toolIndex];
  8011. for (var k = 0; k < _el2.length; k++) {
  8012. let el2 = _el2[k];
  8013. if (el2.wid == this.commentDetail.wid) {
  8014. a = 2;
  8015. this.commentOther(
  8016. _el2[k],
  8017. this.commentIndexJson.toolIndex,
  8018. k,
  8019. null,
  8020. this.commentIndexJson.gid
  8021. );
  8022. break groupA;
  8023. }
  8024. }
  8025. }
  8026. }
  8027. }
  8028. if (a == 1) {
  8029. for (
  8030. var i = 0;
  8031. i < this.worksStudent[this.commentIndexJson.toolIndex].length;
  8032. i++
  8033. ) {
  8034. let el = this.worksStudent[this.commentIndexJson.toolIndex][i];
  8035. if (el.wid == this.commentDetail.wid) {
  8036. a = 2;
  8037. this.commentOther(
  8038. this.worksStudent[this.commentIndexJson.toolIndex][i],
  8039. this.commentIndexJson.toolIndex,
  8040. i
  8041. );
  8042. break;
  8043. }
  8044. }
  8045. }
  8046. if (a === 1) {
  8047. this.commentDetail = [];
  8048. this.commentIndexJson = {};
  8049. this.commentDialogVisible = false;
  8050. this.$message("此作业已被删除");
  8051. }
  8052. }
  8053. }
  8054. })
  8055. .catch((err) => {
  8056. console.error(err);
  8057. });
  8058. },
  8059. selectStudent() {
  8060. },
  8061. openVideo(w) {
  8062. this.videoDetail = {};
  8063. this.playerOptions1.sources[0].src = w.works;
  8064. this.videoDetail = this.playerOptions1;
  8065. this.videoVisible = true;
  8066. },
  8067. isLikes(wid, uid, t, c, isLikes) {
  8068. if (isLikes == false) {
  8069. let params = [
  8070. {
  8071. wid: wid,
  8072. lid: uid,
  8073. t: t,
  8074. c: c,
  8075. },
  8076. ];
  8077. this.ajax
  8078. .post(this.$store.state.api + "insertComment", params)
  8079. .then((res) => {
  8080. this.$message({
  8081. message: "点赞成功",
  8082. type: "success",
  8083. });
  8084. this.selectSWorks();
  8085. this.selectStudent();
  8086. })
  8087. .catch((err) => {
  8088. this.$message.error("点赞失败");
  8089. console.error(err);
  8090. });
  8091. } else {
  8092. let params = {
  8093. wid: wid,
  8094. lid: uid,
  8095. type: t,
  8096. };
  8097. this.ajax
  8098. .get(this.$store.state.api + "deleteComment", params)
  8099. .then((res) => {
  8100. this.$message({
  8101. message: "取消点赞成功",
  8102. type: "success",
  8103. });
  8104. this.selectSWorks();
  8105. this.selectStudent();
  8106. })
  8107. .catch((err) => {
  8108. console.error(err);
  8109. });
  8110. }
  8111. },
  8112. deleteComment(wid) {
  8113. this.$confirm("确定删除此评论吗?", "提示", {
  8114. confirmButtonText: "确定",
  8115. cancelButtonText: "取消",
  8116. type: "warning",
  8117. })
  8118. .then(() => {
  8119. let params = {
  8120. id: wid,
  8121. };
  8122. this.ajax
  8123. .get(this.$store.state.api + "deleteComment2", params)
  8124. .then((res) => {
  8125. this.$message({
  8126. message: "删除评论成功",
  8127. type: "success",
  8128. });
  8129. this.selectSWorks();
  8130. this.selectStudent();
  8131. })
  8132. .catch((err) => {
  8133. console.error(err);
  8134. });
  8135. })
  8136. .catch(() => { });
  8137. },
  8138. commentOther(w, toolIndex, wIndex, gindex, gid) {
  8139. this.commentIndexJson = {
  8140. toolIndex: toolIndex,
  8141. wIndex: wIndex,
  8142. gindex: gindex,
  8143. gid: gid
  8144. };
  8145. this.commentDetail = [];
  8146. this.commentDialogVisible = true;
  8147. this.commentDetail = w;
  8148. if (w.works && w.type == 1) {
  8149. this.pptImgUrl = "";
  8150. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  8151. if (
  8152. a.indexOf(
  8153. w.works
  8154. .split(".")
  8155. [w.works.split(".").length - 1].toLocaleUpperCase()
  8156. ) != -1
  8157. ) {
  8158. this.pptImgUrl =
  8159. "https://view.officeapps.live.com/op/view.aspx?src=" + w.works;
  8160. this.showPDF = false;
  8161. } else if (
  8162. w.works
  8163. .split(".")
  8164. [w.works.split(".").length - 1].toLocaleUpperCase() == "PDF"
  8165. ) {
  8166. this.pptImgUrl = w.works;
  8167. this.showPDF = true;
  8168. }
  8169. } else if (w.works && w.type == 3) {
  8170. this.videoDetail = {};
  8171. this.playerOptions1.sources[0].src = w.works;
  8172. this.videoDetail = this.playerOptions1;
  8173. // this.videoVisible = true;
  8174. } else if (w.works && w.type == 4) {
  8175. this.eScore = JSON.parse(w.works);
  8176. this.rateJson =
  8177. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  8178. this.taskCount
  8179. ].toolChoose[toolIndex].rateJson;
  8180. } else if (w.works && w.type == 10) {
  8181. this.commentDetail.works = JSON.parse(this.commentDetail.works);
  8182. } else if (w.works && w.type == 13) {
  8183. this.wordJson =
  8184. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  8185. this.taskCount
  8186. ].toolChoose[toolIndex].wordJson;
  8187. }
  8188. },
  8189. openScore(w) {
  8190. this.wScore = 0;
  8191. this.wScore = w.score ? JSON.parse(w.score).wScore : 0;
  8192. this.scoreDetail = w.score ? JSON.parse(w.score).detail : "";
  8193. this.commentDetail = [];
  8194. this.dialogVisibleScore = true;
  8195. this.commentDetail = w;
  8196. if (w.works && w.type == 1) {
  8197. this.pptImgUrl = "";
  8198. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  8199. if (
  8200. a.indexOf(
  8201. w.works
  8202. .split(".")
  8203. [w.works.split(".").length - 1].toLocaleUpperCase()
  8204. ) != -1
  8205. ) {
  8206. this.pptImgUrl =
  8207. "https://view.officeapps.live.com/op/view.aspx?src=" + w.works;
  8208. this.showPDF = false;
  8209. } else if (
  8210. w.works
  8211. .split(".")
  8212. [w.works.split(".").length - 1].toLocaleUpperCase() == "PDF"
  8213. ) {
  8214. this.pptImgUrl = w.works;
  8215. this.showPDF = true;
  8216. }
  8217. } else if (w.works && w.type == 3) {
  8218. this.videoDetail = {};
  8219. this.playerOptions1.sources[0].src = w.works;
  8220. this.videoDetail = this.playerOptions1;
  8221. }
  8222. },
  8223. addComment(wid, uid, t) {
  8224. if (this.commentText == "") {
  8225. this.$message.error("请输入评论");
  8226. return;
  8227. }
  8228. let params2 = [
  8229. {
  8230. wid: wid,
  8231. lid: uid,
  8232. t: t,
  8233. },
  8234. ];
  8235. this.ajax
  8236. .post(this.$store.state.api + "getComment", params2)
  8237. .then((res) => {
  8238. if (res.data[0].length > 0) {
  8239. this.$message.error("一个作业只能评论一条");
  8240. } else {
  8241. let params = [
  8242. {
  8243. wid: wid,
  8244. lid: uid,
  8245. t: t,
  8246. c: this.commentText,
  8247. },
  8248. ];
  8249. this.ajax
  8250. .post(this.$store.state.api + "insertComment", params)
  8251. .then((res) => {
  8252. this.$message({
  8253. message: "评论成功",
  8254. type: "success",
  8255. });
  8256. this.commentText = "";
  8257. this.selectSWorks();
  8258. this.selectStudent();
  8259. })
  8260. .catch((err) => {
  8261. this.$message.error("评论失败");
  8262. console.error(err);
  8263. });
  8264. }
  8265. })
  8266. .catch((err) => {
  8267. // this.$message.error("评论失败");
  8268. console.error(err);
  8269. });
  8270. },
  8271. scoreWork(wid) {
  8272. if (this.wScore == 0) {
  8273. this.$message.error("请评分");
  8274. return;
  8275. }
  8276. let params = [
  8277. {
  8278. wid: wid,
  8279. score: JSON.stringify({
  8280. wScore: this.wScore,
  8281. detail: this.scoreDetail,
  8282. }),
  8283. },
  8284. ];
  8285. this.ajax
  8286. .post(this.$store.state.api + "scoreWork", params)
  8287. .then((res) => {
  8288. this.$message({
  8289. message: "评分成功",
  8290. type: "success",
  8291. });
  8292. this.wScore = 0;
  8293. this.scoreDetail = "";
  8294. this.dialogVisibleScore = false;
  8295. this.selectSWorks();
  8296. this.selectStudent();
  8297. })
  8298. .catch((err) => {
  8299. this.$message.error("评分失败");
  8300. console.error(err);
  8301. });
  8302. },
  8303. openXz(w, i) {
  8304. this.selectJson = this.chapInfoList[this.courseType].chapterInfo[0]
  8305. .taskJson[this.taskCount].toolChoose[i].selectJson
  8306. ? JSON.parse(
  8307. JSON.stringify(
  8308. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  8309. this.taskCount
  8310. ].toolChoose[i].selectJson
  8311. )
  8312. )
  8313. : { url: "", select: [], answer: [] };
  8314. var a = w.works.split(",");
  8315. for (var k = 0; k < a.length; k++) {
  8316. a[k] = parseInt(a[k]);
  8317. }
  8318. this.selectAnswer = { answer: a, stu: w.sName };
  8319. this.isSelect = true;
  8320. this.dialogVisibleSelect = true;
  8321. },
  8322. openSen(w, i) {
  8323. this.sentenceList1 = JSON.parse(w.works);
  8324. this.sentenceList1.stuName = w.sName;
  8325. this.dialogVisibleSentence1 = true;
  8326. },
  8327. openPj(w, toolindex) {
  8328. this.isStar = true;
  8329. this.eScore = JSON.parse(w);
  8330. this.rateJson =
  8331. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  8332. this.taskCount
  8333. ].toolChoose[toolindex].rateJson;
  8334. this.studentEvalDialogVisible = true;
  8335. },
  8336. deleteWorks(id) {
  8337. this.$confirm("确定删除此作业吗?", "提示", {
  8338. confirmButtonText: "确定",
  8339. cancelButtonText: "取消",
  8340. type: "warning",
  8341. })
  8342. .then(() => {
  8343. let params = [
  8344. {
  8345. id: id,
  8346. },
  8347. ];
  8348. this.ajax
  8349. .post(this.$store.state.api + "deleteCourseWork", params)
  8350. .then((res) => {
  8351. this.$message({
  8352. message: "删除成功",
  8353. type: "success",
  8354. });
  8355. this.selectStudent();
  8356. this.selectSWorks();
  8357. this.selectSLook();
  8358. })
  8359. .catch((err) => {
  8360. this.$message.error("网络异常");
  8361. console.error(err);
  8362. });
  8363. })
  8364. .catch(() => { });
  8365. },
  8366. selectSWorks(gindex) {
  8367. //教师查看全部作业
  8368. let params = {
  8369. cid: this.id,
  8370. s: this.courseType,
  8371. t: this.taskCount,
  8372. };
  8373. this.ajax
  8374. .get(this.$store.state.api + "selectSWorks", params)
  8375. .then((res) => {
  8376. var a =
  8377. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  8378. this.taskCount
  8379. ].toolChoose;
  8380. var b = res.data[0];
  8381. var c = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  8382. var y = [
  8383. "AVI",
  8384. "NAVI",
  8385. "MPEG",
  8386. "ASF",
  8387. "MOV",
  8388. "WMV",
  8389. "3GP",
  8390. "RM",
  8391. "RMVB",
  8392. "FLV",
  8393. "F4V",
  8394. "H.264",
  8395. "H.265",
  8396. "REAL VIDEO",
  8397. "MKV",
  8398. "WebM",
  8399. "HDDVD",
  8400. "MP4",
  8401. "MPG",
  8402. "M4V",
  8403. "MGV",
  8404. "OGV",
  8405. "QTM",
  8406. "STR",
  8407. "AMC",
  8408. "DVX",
  8409. "EVO",
  8410. "DAT",
  8411. "OGG",
  8412. "OGM",
  8413. ];
  8414. var d = res.data[1];
  8415. var e = res.data[2];
  8416. var f = res.data[3];
  8417. for (var i = 0; i < a.length; i++) {
  8418. this.worksStudent[i] = [];
  8419. this.worksTeacher[i] = [];
  8420. this.worksStudent2[i] = [];
  8421. if (
  8422. !this.isCloseList[i] ||
  8423. this.isCloseList[i].isClose == undefined
  8424. ) {
  8425. this.isCloseList[i] = { isClose: 0 };
  8426. }
  8427. this.groupStudent[i] = [];
  8428. this.groupStudentUid[i] = [];
  8429. this.isWorksS[i] = [];
  8430. this.checkJson[i] = [];
  8431. if (a[i].tool[0] == 49) {
  8432. for (var gA = 0; gA < a[i].groupJson.group.length; gA++) {
  8433. this.groupStudent[i][gA] = [];
  8434. this.groupStudentUid[i][gA] = [];
  8435. this.worksStudent[i][gA] = [];
  8436. this.isCloseList[i][gA] = [];
  8437. for (var g = 0; g < f.length; g++) {
  8438. if (
  8439. f[g].ttype == 2 &&
  8440. this.tcid &&
  8441. this.arrayToArray(f[g].classid.split(","), this.tcid.split(",")).length == 0
  8442. ) {
  8443. continue;
  8444. }
  8445. if (gA == f[g].group && f[g].tool == i) {
  8446. this.groupStudent[i][gA].push(f[g]);
  8447. this.groupStudentUid[i][gA].push(f[g].userid);
  8448. }
  8449. }
  8450. }
  8451. this.$forceUpdate();
  8452. }
  8453. for (var j = 0; j < b.length; j++) {
  8454. if (b[j].ttype == 2 && this.tcid && this.arrayToArray(b[j].classid.split(","), this.tcid.split(",")).length == 0) {
  8455. continue;
  8456. }
  8457. var likesCount = 0;
  8458. var commentCount = 0;
  8459. var isLikes = false;
  8460. var commentJson = [];
  8461. var data = b[j];
  8462. if (i == b[j].tool) {
  8463. if (data.type == 2 && a[i].tool[0] == 4) {
  8464. // if(JSON.parse(data.content)[0].anwer){
  8465. var checkL = JSON.parse(data.content)[0].anwer instanceof Array ? JSON.parse(data.content)[0].anwer : JSON.parse(data.content)[0].anwer.split(",");
  8466. for (var z = 0; z < checkL.length; z++) {
  8467. if (!this.checkJson[i][z]) {
  8468. this.checkJson[i].push({
  8469. checkCount: [],
  8470. checkPerson: [],
  8471. rightPerson: [],
  8472. });
  8473. }
  8474. if (!this.checkJson[i][z].checkCount.length) {
  8475. this.checkJson[i][z].checkCount = [];
  8476. let _askItemCount = JSON.parse(data.content)[0].askJson
  8477. .askJson[z].askItem;
  8478. for (var aic = 0; aic < _askItemCount; aic++) {
  8479. this.checkJson[i][z].checkCount.push(0);
  8480. }
  8481. }
  8482. if (checkL[z] instanceof Array) {
  8483. if (
  8484. JSON.parse(data.content)[0].anwer.sort().join(",") ==
  8485. checkL[z].sort().join(",")
  8486. ) {
  8487. this.checkJson[i][z].rightPerson.push(data.name);
  8488. }
  8489. for (var q = 0; q < checkL[z].length; q++) {
  8490. this.checkJson[i][z].checkPerson[parseInt(checkL[z][q])]
  8491. ? this.checkJson[i][z].checkPerson[
  8492. parseInt(checkL[z][q])
  8493. ].push(data.name)
  8494. : (this.checkJson[i][z].checkPerson[
  8495. parseInt(checkL[z][q])
  8496. ] = [data.name]);
  8497. this.checkJson[i][z].checkCount[parseInt(checkL[z][q])]
  8498. ? this.checkJson[i][z].checkCount[
  8499. parseInt(checkL[z][q])
  8500. ]++
  8501. : (this.checkJson[i][z].checkCount[
  8502. parseInt(checkL[z][q])
  8503. ] = 1);
  8504. }
  8505. } else {
  8506. if (JSON.parse(data.content)[0].anwer[z] == checkL[z]) {
  8507. this.checkJson[i][z].rightPerson.push(data.name);
  8508. }
  8509. if (parseInt(checkL[z]) || parseInt(checkL[z]) == 0) {
  8510. this.checkJson[i][z].checkPerson[parseInt(checkL[z])]
  8511. ? this.checkJson[i][z].checkPerson[
  8512. parseInt(checkL[z])
  8513. ].push(data.name)
  8514. : (this.checkJson[i][z].checkPerson[
  8515. parseInt(checkL[z])
  8516. ] = [data.name]);
  8517. this.checkJson[i][z].checkCount[parseInt(checkL[z])]
  8518. ? this.checkJson[i][z].checkCount[
  8519. parseInt(checkL[z])
  8520. ]++
  8521. : (this.checkJson[i][z].checkCount[
  8522. parseInt(checkL[z])
  8523. ] = 1);
  8524. }
  8525. }
  8526. }
  8527. } else if (data.type == 8 && a[i].tool[0] == 45) {
  8528. var checkL = JSON.parse(data.content)[0].anwer;
  8529. for (var z = 0; z < checkL.length; z++) {
  8530. if (!this.checkJson[i][z]) {
  8531. this.checkJson[i].push({
  8532. checkCount: [],
  8533. checkPerson: [],
  8534. rightPerson: [],
  8535. });
  8536. }
  8537. if (!this.checkJson[i][z].checkCount.length) {
  8538. this.checkJson[i][z].checkCount = [];
  8539. let _askItemCount = JSON.parse(data.content)[0].testJson
  8540. .testJson[z].testItem;
  8541. console.log(_askItemCount);
  8542. for (var aic = 0; aic < _askItemCount; aic++) {
  8543. this.checkJson[i][z].checkCount.push(0);
  8544. }
  8545. }
  8546. if (checkL[z] instanceof Array) {
  8547. if (
  8548. JSON.parse(data.content)[0]
  8549. .testJson.testJson[z].answer.sort()
  8550. .join(",") == checkL[z].sort().join(",")
  8551. ) {
  8552. this.checkJson[i][z].rightPerson.push(data.name);
  8553. }
  8554. for (var q = 0; q < checkL[z].length; q++) {
  8555. this.checkJson[i][z].checkPerson[parseInt(checkL[z][q])]
  8556. ? this.checkJson[i][z].checkPerson[
  8557. parseInt(checkL[z][q])
  8558. ].push(data.name)
  8559. : (this.checkJson[i][z].checkPerson[
  8560. parseInt(checkL[z][q])
  8561. ] = [data.name]);
  8562. this.checkJson[i][z].checkCount[parseInt(checkL[z][q])]
  8563. ? this.checkJson[i][z].checkCount[
  8564. parseInt(checkL[z][q])
  8565. ]++
  8566. : (this.checkJson[i][z].checkCount[
  8567. parseInt(checkL[z][q])
  8568. ] = 1);
  8569. }
  8570. } else {
  8571. if (
  8572. JSON.parse(data.content)[0].testJson.testJson[z]
  8573. .answer == checkL[z]
  8574. ) {
  8575. this.checkJson[i][z].rightPerson.push(data.name);
  8576. }
  8577. if (parseInt(checkL[z]) || parseInt(checkL[z]) == 0) {
  8578. this.checkJson[i][z].checkPerson[parseInt(checkL[z])]
  8579. ? this.checkJson[i][z].checkPerson[
  8580. parseInt(checkL[z])
  8581. ].push(data.name)
  8582. : (this.checkJson[i][z].checkPerson[
  8583. parseInt(checkL[z])
  8584. ] = [data.name]);
  8585. this.checkJson[i][z].checkCount[parseInt(checkL[z])]
  8586. ? this.checkJson[i][z].checkCount[
  8587. parseInt(checkL[z])
  8588. ]++
  8589. : (this.checkJson[i][z].checkCount[
  8590. parseInt(checkL[z])
  8591. ] = 1);
  8592. }
  8593. }
  8594. }
  8595. } else if (data.type == 9 && a[i].tool[0] == 47) {
  8596. var checkL = JSON.parse(data.content);
  8597. for (var z = 0; z < checkL.length; z++) {
  8598. if (!this.checkJson[i][z]) {
  8599. this.checkJson[i].push({
  8600. checkCount: [],
  8601. checkPerson: [],
  8602. rightPerson: [],
  8603. });
  8604. }
  8605. this.checkJson[i][z].checkPerson.push(data.name);
  8606. if (
  8607. checkL[z].chooseSenList.toString() ==
  8608. checkL[z].rightAnswer.toString()
  8609. ) {
  8610. this.checkJson[i][z].rightPerson.push(data.name);
  8611. }
  8612. }
  8613. }
  8614. for (var k = 0; k < d.length; k++) {
  8615. //点赞
  8616. if (d[k].workId == b[j].id) {
  8617. likesCount++;
  8618. if (d[k].likesId == this.userid) {
  8619. isLikes = true;
  8620. }
  8621. }
  8622. }
  8623. for (var l = 0; l < e.length; l++) {
  8624. //评论
  8625. if (e[l].workId == b[j].id) {
  8626. if (e[l].comment != "") {
  8627. commentCount++;
  8628. commentJson.push({
  8629. commentText: e[l].comment,
  8630. commentTime: e[l].commentTime,
  8631. commentPeople: e[l].commentPeople,
  8632. userid: e[l].userid,
  8633. wid: e[l].id,
  8634. });
  8635. }
  8636. }
  8637. }
  8638. if (
  8639. (b[j].type == 1 ||
  8640. b[j].type == 4 ||
  8641. b[j].type == 5 ||
  8642. b[j].type == 6 ||
  8643. b[j].type == 12 ||
  8644. b[j].type == 7) &&
  8645. a[i].tool[0] != 15 &&
  8646. a[i].tool[0] != 4 &&
  8647. a[i].tool[0] != 45 &&
  8648. a[i].tool[0] != 50 &&
  8649. a[i].tool[0] != 32 &&
  8650. a[i].tool[0] != 57 &&
  8651. a[i].tool[0] != 52
  8652. ) {
  8653. if (
  8654. c.indexOf(
  8655. b[j].content
  8656. .split(".")
  8657. [b[j].content.split(".").length - 1].toLocaleUpperCase()
  8658. ) != -1 &&
  8659. a[i].tool[0] == 16 &&
  8660. b[j].atool != 50
  8661. ) {
  8662. let _works = {
  8663. userid: b[j].userid,
  8664. ateacher: b[j].ateacher,
  8665. wid: b[j].id,
  8666. works: b[j].content,
  8667. sName: b[j].name,
  8668. type: 1,
  8669. time: b[j].time,
  8670. score: b[j].score,
  8671. img: b[j].img,
  8672. likesCount: likesCount,
  8673. commentCount: commentCount,
  8674. isLikes: isLikes,
  8675. commentJson: commentJson,
  8676. }
  8677. if (b[j].ttype == 1) {
  8678. this.worksTeacher[i].push(_works);
  8679. } else {
  8680. this.worksStudent2[i].push(_works);
  8681. }
  8682. this.worksStudent[i].push(_works);
  8683. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8684. } else if (
  8685. y.indexOf(
  8686. b[j].content
  8687. .split(".")
  8688. [b[j].content.split(".").length - 1].toLocaleUpperCase()
  8689. ) != -1 &&
  8690. a[i].tool[0] == 16 &&
  8691. b[j].atool != 50
  8692. ) {
  8693. let _works = {
  8694. userid: b[j].userid,
  8695. ateacher: b[j].ateacher,
  8696. wid: b[j].id,
  8697. works: b[j].content,
  8698. sName: b[j].name,
  8699. type: 3,
  8700. time: b[j].time,
  8701. score: b[j].score,
  8702. img: b[j].img,
  8703. likesCount: likesCount,
  8704. commentCount: commentCount,
  8705. isLikes: isLikes,
  8706. commentJson: commentJson,
  8707. }
  8708. if (b[j].ttype == 1) {
  8709. this.worksTeacher[i].push(_works);
  8710. } else {
  8711. this.worksStudent2[i].push(_works);
  8712. }
  8713. this.worksStudent[i].push(_works);
  8714. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8715. } else if (b[j].type == 6 && b[j].atool != 50) {
  8716. let _works = {
  8717. userid: b[j].userid,
  8718. ateacher: b[j].ateacher,
  8719. wid: b[j].id,
  8720. works: b[j].content,
  8721. sName: b[j].name,
  8722. type: 4,
  8723. time: b[j].time,
  8724. score: b[j].score,
  8725. img: b[j].img,
  8726. likesCount: likesCount,
  8727. commentCount: commentCount,
  8728. isLikes: isLikes,
  8729. commentJson: commentJson,
  8730. }
  8731. if (b[j].ttype == 1) {
  8732. this.worksTeacher[i].push(_works);
  8733. } else {
  8734. this.worksStudent2[i].push(_works);
  8735. }
  8736. this.worksStudent[i].push(_works);
  8737. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8738. } else if (b[j].type == 7 && b[j].atool != 50) {
  8739. let _works = {
  8740. userid: b[j].userid,
  8741. ateacher: b[j].ateacher,
  8742. wid: b[j].id,
  8743. works: b[j].content,
  8744. sName: b[j].name,
  8745. type: 5,
  8746. time: b[j].time,
  8747. score: b[j].score,
  8748. img: b[j].img,
  8749. likesCount: likesCount,
  8750. commentCount: commentCount,
  8751. isLikes: isLikes,
  8752. commentJson: commentJson,
  8753. }
  8754. if (b[j].ttype == 1) {
  8755. this.worksTeacher[i].push(_works);
  8756. } else {
  8757. this.worksStudent2[i].push(_works);
  8758. }
  8759. this.worksStudent[i].push(_works);
  8760. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8761. } else if (b[j].type == 12 && a[i].tool[0] == b[j].atool) {
  8762. let _works = {
  8763. userid: b[j].userid,
  8764. ateacher: b[j].ateacher,
  8765. wid: b[j].id,
  8766. works: b[j].content,
  8767. sName: b[j].name,
  8768. type: 12,
  8769. time: b[j].time,
  8770. score: b[j].score,
  8771. img: b[j].img,
  8772. likesCount: likesCount,
  8773. commentCount: commentCount,
  8774. isLikes: isLikes,
  8775. commentJson: commentJson,
  8776. }
  8777. if (b[j].ttype == 1) {
  8778. this.worksTeacher[i].push(_works);
  8779. } else {
  8780. this.worksStudent2[i].push(_works);
  8781. }
  8782. this.worksStudent[i].push(_works);
  8783. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8784. } else if (b[j].type == 1 && a[i].tool[0] == b[j].atool) {
  8785. let _works = {
  8786. userid: b[j].userid,
  8787. ateacher: b[j].ateacher,
  8788. wid: b[j].id,
  8789. works: b[j].content,
  8790. sName: b[j].name,
  8791. type: 0,
  8792. time: b[j].time,
  8793. score: b[j].score,
  8794. img: b[j].img,
  8795. likesCount: likesCount,
  8796. commentCount: commentCount,
  8797. isLikes: isLikes,
  8798. commentJson: commentJson,
  8799. }
  8800. if (b[j].ttype == 1) {
  8801. this.worksTeacher[i].push(_works);
  8802. } else {
  8803. this.worksStudent2[i].push(_works);
  8804. }
  8805. this.worksStudent[i].push(_works);
  8806. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8807. } else if (b[j].type == 1 && !parseInt(b[j].atool)) {
  8808. let _works = {
  8809. userid: b[j].userid,
  8810. ateacher: b[j].ateacher,
  8811. wid: b[j].id,
  8812. works: b[j].content,
  8813. sName: b[j].name,
  8814. type: 0,
  8815. time: b[j].time,
  8816. score: b[j].score,
  8817. img: b[j].img,
  8818. likesCount: likesCount,
  8819. commentCount: commentCount,
  8820. isLikes: isLikes,
  8821. commentJson: commentJson,
  8822. }
  8823. if (b[j].ttype == 1) {
  8824. this.worksTeacher[i].push(_works);
  8825. } else {
  8826. this.worksStudent2[i].push(_works);
  8827. }
  8828. this.worksStudent[i].push(_works);
  8829. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8830. }
  8831. } else if (b[j].type == 3 && a[i].tool[0] == 15) {
  8832. let _works = {
  8833. userid: b[j].userid,
  8834. ateacher: b[j].ateacher,
  8835. wid: b[j].id,
  8836. works: b[j].content,
  8837. sName: b[j].name,
  8838. type: 2,
  8839. time: b[j].time,
  8840. score: b[j].score,
  8841. img: b[j].img,
  8842. likesCount: likesCount,
  8843. commentCount: commentCount,
  8844. isLikes: isLikes,
  8845. commentJson: commentJson,
  8846. }
  8847. if (b[j].ttype == 1) {
  8848. this.worksTeacher[i].push(_works);
  8849. } else {
  8850. this.worksStudent2[i].push(_works);
  8851. }
  8852. this.worksStudent[i].push(_works);
  8853. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8854. } else if (b[j].type == 2 && a[i].tool[0] == 4) {
  8855. //问卷
  8856. let _works = {
  8857. userid: b[j].userid,
  8858. ateacher: b[j].ateacher,
  8859. wid: b[j].id,
  8860. works: b[j].content,
  8861. sName: b[j].name,
  8862. type: 2,
  8863. time: b[j].time,
  8864. score: b[j].score,
  8865. img: b[j].img,
  8866. likesCount: likesCount,
  8867. commentCount: commentCount,
  8868. isLikes: isLikes,
  8869. commentJson: commentJson,
  8870. }
  8871. if (b[j].ttype == 1) {
  8872. this.worksTeacher[i].push(_works);
  8873. } else {
  8874. this.worksStudent2[i].push(_works);
  8875. }
  8876. this.worksStudent[i].push(_works);
  8877. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8878. } else if (b[j].type == 8 && a[i].tool[0] == 45) {
  8879. //选择题
  8880. let _works = {
  8881. userid: b[j].userid,
  8882. ateacher: b[j].ateacher,
  8883. wid: b[j].id,
  8884. works: b[j].content,
  8885. sName: b[j].name,
  8886. type: 8,
  8887. time: b[j].time,
  8888. score: b[j].score,
  8889. img: b[j].img,
  8890. likesCount: likesCount,
  8891. commentCount: commentCount,
  8892. isLikes: isLikes,
  8893. commentJson: commentJson,
  8894. }
  8895. if (b[j].ttype == 1) {
  8896. this.worksTeacher[i].push(_works);
  8897. } else {
  8898. this.worksStudent2[i].push(_works);
  8899. }
  8900. this.worksStudent[i].push(_works);
  8901. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8902. } else if (b[j].type == 9 && a[i].tool[0] == 47) {
  8903. //选择题
  8904. let _works = {
  8905. userid: b[j].userid,
  8906. ateacher: b[j].ateacher,
  8907. wid: b[j].id,
  8908. works: b[j].content,
  8909. sName: b[j].name,
  8910. type: 9,
  8911. time: b[j].time,
  8912. score: b[j].score,
  8913. img: b[j].img,
  8914. likesCount: likesCount,
  8915. commentCount: commentCount,
  8916. isLikes: isLikes,
  8917. commentJson: commentJson,
  8918. }
  8919. if (b[j].ttype == 1) {
  8920. this.worksTeacher[i].push(_works);
  8921. } else {
  8922. this.worksStudent2[i].push(_works);
  8923. }
  8924. this.worksStudent[i].push(_works);
  8925. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8926. } else if (b[j].type == 10 && a[i].tool[0] == 48) {
  8927. //选择题
  8928. let _works = {
  8929. userid: b[j].userid,
  8930. ateacher: b[j].ateacher,
  8931. wid: b[j].id,
  8932. works: b[j].content,
  8933. sName: b[j].name,
  8934. type: 10,
  8935. time: b[j].time,
  8936. score: b[j].score,
  8937. img: b[j].img,
  8938. likesCount: likesCount,
  8939. commentCount: commentCount,
  8940. isLikes: isLikes,
  8941. commentJson: commentJson,
  8942. }
  8943. if (b[j].ttype == 1) {
  8944. this.worksTeacher[i].push(_works);
  8945. } else {
  8946. this.worksStudent2[i].push(_works);
  8947. }
  8948. this.worksStudent[i].push(_works);
  8949. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8950. } else if (b[j].type == 13 && a[i].tool[0] == 52) {
  8951. //选择题
  8952. let _works = {
  8953. userid: b[j].userid,
  8954. ateacher: b[j].ateacher,
  8955. wid: b[j].id,
  8956. works: b[j].content,
  8957. sName: b[j].name,
  8958. type: 13,
  8959. time: b[j].time,
  8960. score: b[j].score,
  8961. img: b[j].img,
  8962. likesCount: likesCount,
  8963. commentCount: commentCount,
  8964. isLikes: isLikes,
  8965. commentJson: commentJson,
  8966. }
  8967. if (b[j].ttype == 1) {
  8968. this.worksTeacher[i].push(_works);
  8969. } else {
  8970. this.worksStudent2[i].push(_works);
  8971. }
  8972. this.worksStudent[i].push(_works);
  8973. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8974. } else if (b[j].type == 11 && a[i].tool[0] == 49) {
  8975. let _gindex = JSON.parse(b[j].content);
  8976. if (
  8977. this.groupStudentUid[i][_gindex.groupIndex].indexOf(
  8978. b[j].userid
  8979. ) != -1
  8980. ) {
  8981. this.worksStudent[i][_gindex.groupIndex].push({
  8982. userid: b[j].userid,
  8983. ateacher: b[j].ateacher,
  8984. wid: b[j].id,
  8985. works: _gindex.url,
  8986. sName: b[j].name,
  8987. type: _gindex.type,
  8988. time: b[j].time,
  8989. score: b[j].score,
  8990. img: b[j].img,
  8991. likesCount: likesCount,
  8992. commentCount: commentCount,
  8993. isLikes: isLikes,
  8994. commentJson: commentJson,
  8995. });
  8996. }
  8997. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  8998. } else if (a[i].tool[0] == 50 && b[j].atool == 50) {
  8999. let _works = {
  9000. userid: b[j].userid,
  9001. ateacher: b[j].ateacher,
  9002. wid: b[j].id,
  9003. works: b[j].content,
  9004. sName: b[j].name ? b[j].name : b[j].userid,
  9005. type: b[j].type == 1 ? 0 : b[j].type == 4 ? 1 : 3,
  9006. time: b[j].time,
  9007. score: b[j].score,
  9008. img: b[j].img,
  9009. likesCount: likesCount,
  9010. commentCount: commentCount,
  9011. isLikes: isLikes,
  9012. commentJson: commentJson,
  9013. }
  9014. if (b[j].ttype == 1) {
  9015. this.worksTeacher[i].push(_works);
  9016. } else {
  9017. this.worksStudent2[i].push(_works);
  9018. }
  9019. this.worksStudent[i].push(_works);
  9020. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  9021. } else if (a[i].tool[0] == 32 && b[j].atool == 32) {
  9022. let _works = {
  9023. userid: b[j].userid,
  9024. ateacher: b[j].ateacher,
  9025. wid: b[j].id,
  9026. works: b[j].content,
  9027. sName: b[j].name ? b[j].name : b[j].userid,
  9028. type: 12,
  9029. time: b[j].time,
  9030. score: b[j].score,
  9031. img: b[j].img,
  9032. likesCount: likesCount,
  9033. commentCount: commentCount,
  9034. isLikes: isLikes,
  9035. commentJson: commentJson,
  9036. }
  9037. if (b[j].ttype == 1) {
  9038. this.worksTeacher[i].push(_works);
  9039. } else {
  9040. this.worksStudent2[i].push(_works);
  9041. }
  9042. this.worksStudent[i].push(_works);
  9043. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  9044. } else if (a[i].tool[0] == 57 && b[j].atool == 57 && b[j].type == 12) {
  9045. let _works = {
  9046. userid: b[j].userid,
  9047. ateacher: b[j].ateacher,
  9048. wid: b[j].id,
  9049. works: b[j].content,
  9050. sName: b[j].name ? b[j].name : b[j].userid,
  9051. type: 12,
  9052. time: b[j].time,
  9053. score: b[j].score,
  9054. img: b[j].img,
  9055. likesCount: likesCount,
  9056. commentCount: commentCount,
  9057. isLikes: isLikes,
  9058. commentJson: commentJson,
  9059. }
  9060. if (b[j].ttype == 1) {
  9061. this.worksTeacher[i].push(_works);
  9062. } else {
  9063. this.worksStudent2[i].push(_works);
  9064. }
  9065. this.worksStudent[i].push(_works);
  9066. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  9067. } else if (a[i].tool[0] == 57 && b[j].atool == 57 && b[j].type == 15) {
  9068. let _works = {
  9069. userid: b[j].userid,
  9070. ateacher: b[j].ateacher,
  9071. wid: b[j].id,
  9072. works: b[j].content,
  9073. sName: b[j].name ? b[j].name : b[j].userid,
  9074. type: 15,
  9075. time: b[j].time,
  9076. score: b[j].score,
  9077. img: b[j].img,
  9078. likesCount: likesCount,
  9079. commentCount: commentCount,
  9080. isLikes: isLikes,
  9081. commentJson: commentJson,
  9082. }
  9083. if (b[j].ttype == 1) {
  9084. this.worksTeacher[i].push(_works);
  9085. } else {
  9086. this.worksStudent2[i].push(_works);
  9087. }
  9088. this.worksStudent[i].push(_works);
  9089. this.isWorksS[i].push({ uid: b[j].userid, sName: b[j].name });
  9090. }
  9091. }
  9092. }
  9093. if (this.worksStudent[i] && this.worksStudent[i].length) {
  9094. this.worksStudent[i] = this.worksStudent[i].sort(function (a, b) {
  9095. let jscoreA = a.score ? JSON.parse(a.score).wScore : 0;
  9096. let jscoreB = b.score ? JSON.parse(b.score).wScore : 0;
  9097. var scoreA = parseFloat(jscoreA);
  9098. var scoreB = parseFloat(jscoreB);
  9099. if (scoreA == scoreB) {
  9100. return b.likesCount - a.likesCount;
  9101. }
  9102. return scoreB - scoreA;
  9103. });
  9104. }
  9105. if (this.worksStudent2[i] && this.worksStudent2[i].length) {
  9106. this.worksStudent2[i] = this.worksStudent2[i].sort(function (a, b) {
  9107. let jscoreA = a.score ? JSON.parse(a.score).wScore : 0;
  9108. let jscoreB = b.score ? JSON.parse(b.score).wScore : 0;
  9109. var scoreA = parseFloat(jscoreA);
  9110. var scoreB = parseFloat(jscoreB);
  9111. if (scoreA == scoreB) {
  9112. return b.likesCount - a.likesCount;
  9113. }
  9114. return scoreB - scoreA;
  9115. });
  9116. }
  9117. if (this.worksTeacher[i] && this.worksTeacher[i].length) {
  9118. this.worksTeacher[i] = this.worksTeacher[i].sort(function (a, b) {
  9119. let jscoreA = a.score ? JSON.parse(a.score).wScore : 0;
  9120. let jscoreB = b.score ? JSON.parse(b.score).wScore : 0;
  9121. var scoreA = parseFloat(jscoreA);
  9122. var scoreB = parseFloat(jscoreB);
  9123. if (scoreA == scoreB) {
  9124. return b.likesCount - a.likesCount;
  9125. }
  9126. return scoreB - scoreA;
  9127. });
  9128. }
  9129. }
  9130. for (var i = 0; i < a.length; i++) {
  9131. for (var j = 0; j < b.length; j++) {
  9132. var data = b[j];
  9133. if (i == b[j].tool) {
  9134. if (data.type == 2 || data.type == 8) {
  9135. for (var z = 0; z < this.checkJson[i].length; z++) {
  9136. this.checkJson[i][z].checkPerent = [];
  9137. this.checkJson[i][z].right = Math.round(
  9138. (this.checkJson[i][z].rightPerson.length /
  9139. parseInt(this.worksStudent[i].length)) *
  9140. 100
  9141. );
  9142. let aaaa = this.checkJson[i][z];
  9143. console.log(aaaa);
  9144. for (
  9145. var k = 0;
  9146. k < this.checkJson[i][z].checkCount.length;
  9147. k++
  9148. ) {
  9149. this.checkJson[i][z].checkPerent.push(
  9150. Math.round(
  9151. (this.checkJson[i][z].checkCount[k] /
  9152. parseInt(this.worksStudent[i].length)) *
  9153. 100
  9154. )
  9155. );
  9156. }
  9157. }
  9158. } else if (data.type == 9) {
  9159. for (var z = 0; z < this.checkJson[i].length; z++) {
  9160. this.checkJson[i][z].checkPerent = [];
  9161. this.checkJson[i][z].right = Math.round(
  9162. (this.checkJson[i][z].rightPerson.length /
  9163. this.checkJson[i][z].checkPerson.length) *
  9164. 100
  9165. );
  9166. }
  9167. }
  9168. }
  9169. }
  9170. }
  9171. if (this.dialogVisibleGroup && (gindex || gindex === 0)) {
  9172. this.joinGroup(gindex);
  9173. }
  9174. this.selectWorksStudent();
  9175. })
  9176. .catch((err) => {
  9177. console.error(err);
  9178. });
  9179. },
  9180. pngToWhiteBg(file) {
  9181. const _file = file;
  9182. let read = new FileReader();
  9183. read.readAsDataURL(file); // 文件转base64
  9184. return new Promise((resolve, reject) => {
  9185. read.onload = (e) => {
  9186. let img = new Image();
  9187. img.src = e.target.result;
  9188. img.onload = async () => {
  9189. // 生成canvas
  9190. let canvas = document.createElement("canvas");
  9191. let context = canvas.getContext("2d");
  9192. // 绘制图片到canvas上
  9193. canvas.width = img.width;
  9194. canvas.height = img.height;
  9195. // 在canvas绘制前填充白色背景
  9196. context.fillStyle = "#fff";
  9197. context.fillRect(0, 0, canvas.width, canvas.height);
  9198. context.drawImage(img, 0, 0);
  9199. let base64 = canvas.toDataURL(file["type"], 1);
  9200. let newFile = this.dataUrlToFile(base64, _file);
  9201. resolve(newFile);
  9202. };
  9203. };
  9204. });
  9205. },
  9206. dataUrlToFile(dataurl, file) {
  9207. let arr = dataurl.split(","),
  9208. mime = arr[0].match(/:(.*?);/)[1],
  9209. bstr = atob(arr[1]),
  9210. n = bstr.length,
  9211. u8arr = new Uint8Array(n);
  9212. while (n--) {
  9213. u8arr[n] = bstr.charCodeAt(n);
  9214. }
  9215. // return new Blob([u8arr], { type: mime });
  9216. return new File([new Blob([u8arr], { type: mime })], file.name, {
  9217. type: mime,
  9218. });
  9219. },
  9220. async beforeUpload1(event, type, i) {
  9221. // this.$message.success('进入上传')
  9222. var file = "";
  9223. if (type == 5) {
  9224. file = event;
  9225. } else {
  9226. file = event.target.files[0];
  9227. }
  9228. var credentials = {
  9229. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  9230. secretAccessKey: "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",
  9231. }; //秘钥形式的登录上传
  9232. window.AWS.config.update(credentials);
  9233. window.AWS.config.region = "cn-northwest-1"; //设置区域
  9234. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  9235. var _this = this;
  9236. _this.progress = 0;
  9237. _this.proVisible = true;
  9238. _this.isFinishSize = 0;
  9239. _this.isAllSize = (file.size / 1024 / 1024).toFixed(2);
  9240. var b = [
  9241. "DOC",
  9242. "DOCX",
  9243. "DOCM",
  9244. "DOTM",
  9245. "DOTX",
  9246. "PPTX",
  9247. "PPSX",
  9248. "PPT",
  9249. "PPS",
  9250. "PPTM",
  9251. "POTM",
  9252. "PPAM",
  9253. "POTX",
  9254. "PPSM",
  9255. ];
  9256. var excelA = ["XLSX", "XLXB", "XLS", "XLSM"];
  9257. var photoA = [
  9258. "BMP",
  9259. "GIF",
  9260. "PNG",
  9261. "JPGE",
  9262. "JPG",
  9263. "TIF",
  9264. "PCX",
  9265. "TGA",
  9266. "EXIF",
  9267. "FPX",
  9268. "SVG",
  9269. "APNG",
  9270. ];
  9271. // if (
  9272. // b.indexOf(
  9273. // file.name
  9274. // .split(".")
  9275. // [file.name.split(".").length - 1].toLocaleUpperCase()
  9276. // ) != -1
  9277. // ) {
  9278. // if (file.size / 1024 / 1024 > 10) {
  9279. // this.$message.error("上传文件大于10兆,请重新选择文件!");
  9280. // return;
  9281. // }
  9282. // } else if (
  9283. // excelA.indexOf(
  9284. // file.name
  9285. // .split(".")
  9286. // [file.name.split(".").length - 1].toLocaleUpperCase()
  9287. // ) != "-1"
  9288. // ) {
  9289. // if (file.size / 1024 / 1024 > 5) {
  9290. // this.$message.error("添加成上传文件大于5兆,请重新选择文件!");
  9291. // return;
  9292. // }
  9293. // }
  9294. if (
  9295. photoA.indexOf(
  9296. file.name
  9297. .split(".")
  9298. [file.name.split(".").length - 1].toLocaleUpperCase()
  9299. ) != -1 &&
  9300. type != 4
  9301. ) {
  9302. // const blob = await imageConversion.compress(file, 0.8)
  9303. file = await this.pngToWhiteBg(file);
  9304. const blob = await imageConversion.compressAccurately(file, 256);
  9305. // const blob = await imageConversion.compressAccurately(file, {type:file.type});
  9306. file = new File([blob], file.name, { type: file.type });
  9307. }
  9308. if (file) {
  9309. var params = {
  9310. Key:
  9311. file.name.split(".")[0] +
  9312. new Date().getTime() +
  9313. "." +
  9314. file.name.split(".")[file.name.split(".").length - 1],
  9315. ContentType: file.type,
  9316. Body: file,
  9317. "Access-Control-Allow-Credentials": "*",
  9318. ACL: "public-read",
  9319. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  9320. var options = {
  9321. // partSize: 2048 * 1024 * 1024,
  9322. partSize: 1024 * 1024 * 1024,
  9323. queueSize: 2,
  9324. leavePartsOnError: true,
  9325. };
  9326. bucket
  9327. .upload(params, options)
  9328. .on("httpUploadProgress", function (evt) {
  9329. //这里可以写进度条
  9330. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  9331. _this.progress = parseInt((evt.loaded / evt.total) * 100);
  9332. _this.isFinishSize = (evt.loaded / 1024 / 1024).toFixed(2);
  9333. })
  9334. .send(function (err, data) {
  9335. _this.progress = 100;
  9336. _this.isFinishSize = _this.isAllSize;
  9337. setTimeout(() => {
  9338. _this.proVisible = false;
  9339. }, 1000);
  9340. if (err) {
  9341. var a = _this.$refs.upload1.uploadFiles;
  9342. a.splice(a.length - 1, a.length);
  9343. _this.$message.error("上传失败");
  9344. } else {
  9345. // _this.$message.success('上传成功')
  9346. var b = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  9347. var c = [
  9348. "AVI",
  9349. "NAVI",
  9350. "MPEG",
  9351. "ASF",
  9352. "MOV",
  9353. "WMV",
  9354. "3GP",
  9355. "RM",
  9356. "RMVB",
  9357. "FLV",
  9358. "F4V",
  9359. "H.264",
  9360. "H.265",
  9361. "REAL VIDEO",
  9362. "MKV",
  9363. "WebM",
  9364. "HDDVD",
  9365. "MP4",
  9366. "MPG",
  9367. "M4V",
  9368. "MGV",
  9369. "OGV",
  9370. "QTM",
  9371. "STR",
  9372. "AMC",
  9373. "DVX",
  9374. "EVO",
  9375. "DAT",
  9376. "OGG",
  9377. "OGM",
  9378. ];
  9379. if (type == 1) {
  9380. _this.studyJuri[0].cover.push({
  9381. name: file.name,
  9382. url: data.Location,
  9383. uid: file.uid,
  9384. });
  9385. if (
  9386. c.indexOf(
  9387. _this.studyJuri[0].cover[0].url
  9388. .split(".")
  9389. [
  9390. _this.studyJuri[0].cover[0].url.split(".").length - 1
  9391. ].toLocaleUpperCase()
  9392. ) != -1
  9393. ) {
  9394. _this.fileType = 2;
  9395. } else if (
  9396. b.indexOf(
  9397. _this.studyJuri[0].cover[0].url
  9398. .split(".")
  9399. [
  9400. _this.studyJuri[0].cover[0].url.split(".").length - 1
  9401. ].toLocaleUpperCase()
  9402. ) != -1
  9403. ) {
  9404. _this.fileType = 1;
  9405. } else if (photoA.indexOf(
  9406. _this.studyJuri[0].cover[0].url
  9407. .split(".")
  9408. [
  9409. _this.studyJuri[0].cover[0].url.split(".").length - 1
  9410. ].toLocaleUpperCase()
  9411. ) != -1) {
  9412. _this.fileType = 0;
  9413. } else {
  9414. _this.fileType = 3;
  9415. }
  9416. _this.imgChange(null, null, type);
  9417. } else if (type == 2) {
  9418. _this.upToolImg = data.Location;
  9419. _this.imgChange(null, null, type);
  9420. _this.addCourseWorks(i);
  9421. } else if (type == 4) {
  9422. _this.addPz("3", data.Location);
  9423. } else if (type == 5) {
  9424. _this.addImgDrawImG(data.Location);
  9425. } else if (type == 6) {
  9426. var _ftype = 1;
  9427. if (
  9428. c.indexOf(
  9429. data.Location.split(".")[
  9430. data.Location.split(".").length - 1
  9431. ].toLocaleUpperCase()
  9432. ) != -1
  9433. ) {
  9434. _ftype = 5;
  9435. } else if (
  9436. b.indexOf(
  9437. data.Location.split(".")[
  9438. data.Location.split(".").length - 1
  9439. ].toLocaleUpperCase()
  9440. ) != -1
  9441. ) {
  9442. _ftype = 4;
  9443. } else {
  9444. _ftype = 1;
  9445. }
  9446. _this.plworkFile.push({
  9447. name: file.name,
  9448. url: data.Location,
  9449. uid: file.uid,
  9450. fileType: _ftype,
  9451. username:
  9452. _this.plworkFile.length + 1 > 10
  9453. ? _this.plworkFile.length + 1
  9454. : "0" + (_this.plworkFile.length + 1),
  9455. });
  9456. } else if (type == 7) {
  9457. _this.addCourseWorksGong(i, data.Location, 32);
  9458. } else if (type == 8) {
  9459. _this.addCourseWorksGong(i, data.Location, 57);
  9460. }
  9461. _this.imgChange(null, null, type);
  9462. console.log(data.Location);
  9463. // _this.$message.success('上传成功'+data.Location)
  9464. }
  9465. });
  9466. }
  9467. },
  9468. async beforeUpload3(event, type, i) {
  9469. // this.$message.success('进入上传')
  9470. let file = "";
  9471. let cfindex2 = 0;
  9472. for (var cfindex = 0; cfindex < event.target.files.length; cfindex++) {
  9473. file = event.target.files[cfindex];
  9474. var credentials = {
  9475. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  9476. secretAccessKey: "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",
  9477. }; //秘钥形式的登录上传
  9478. window.AWS.config.update(credentials);
  9479. window.AWS.config.region = "cn-northwest-1"; //设置区域
  9480. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  9481. var _this = this;
  9482. // _this.progress = 0;
  9483. _this.proVisible2 = true;
  9484. var b = [
  9485. "DOC",
  9486. "DOCX",
  9487. "DOCM",
  9488. "DOTM",
  9489. "DOTX",
  9490. "PPTX",
  9491. "PPSX",
  9492. "PPT",
  9493. "PPS",
  9494. "PPTM",
  9495. "POTM",
  9496. "PPAM",
  9497. "POTX",
  9498. "PPSM",
  9499. ];
  9500. var excelA = ["XLSX", "XLXB", "XLS", "XLSM"];
  9501. var photoA = [
  9502. "BMP",
  9503. "GIF",
  9504. "PNG",
  9505. "JPGE",
  9506. "JPG",
  9507. "TIF",
  9508. "PCX",
  9509. "TGA",
  9510. "EXIF",
  9511. "FPX",
  9512. "SVG",
  9513. "APNG",
  9514. ];
  9515. if (
  9516. photoA.indexOf(
  9517. file.name
  9518. .split(".")
  9519. [file.name.split(".").length - 1].toLocaleUpperCase()
  9520. ) != -1 &&
  9521. type != 4
  9522. ) {
  9523. // const blob = await imageConversion.compress(file, 0.8)
  9524. file = await this.pngToWhiteBg(file);
  9525. const blob = await imageConversion.compressAccurately(file, 256);
  9526. // const blob = await imageConversion.compressAccurately(file, {type:file.type});
  9527. file = new File([blob], file.name, { type: file.type });
  9528. }
  9529. if (file) {
  9530. var params = {
  9531. Key:
  9532. file.name.split(".")[0] +
  9533. new Date().getTime() +
  9534. "." +
  9535. file.name.split(".")[file.name.split(".").length - 1],
  9536. ContentType: file.type,
  9537. Body: file,
  9538. "Access-Control-Allow-Credentials": "*",
  9539. ACL: "public-read",
  9540. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  9541. var options = {
  9542. // partSize: 2048 * 1024 * 1024,
  9543. partSize: 1024 * 1024 * 1024,
  9544. queueSize: 2,
  9545. leavePartsOnError: true,
  9546. };
  9547. bucket
  9548. .upload(params, options)
  9549. .on("httpUploadProgress", function (evt) {
  9550. //这里可以写进度条
  9551. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  9552. // _this.progress = parseInt((evt.loaded * 80) / evt.total);
  9553. })
  9554. .send(function (err, data) {
  9555. // _this.progress = 100;
  9556. cfindex2++;
  9557. setTimeout(() => {
  9558. if (
  9559. cfindex2 == event.target.files.length - 1 ||
  9560. cfindex2 > event.target.files.length - 1
  9561. ) {
  9562. _this.proVisible2 = false;
  9563. }
  9564. }, 1000);
  9565. if (err) {
  9566. var a = _this.$refs.upload1.uploadFiles;
  9567. a.splice(a.length - 1, a.length);
  9568. _this.$message.error("上传失败");
  9569. } else {
  9570. // _this.$message.success('上传成功')
  9571. var b = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  9572. var c = [
  9573. "AVI",
  9574. "NAVI",
  9575. "MPEG",
  9576. "ASF",
  9577. "MOV",
  9578. "WMV",
  9579. "3GP",
  9580. "RM",
  9581. "RMVB",
  9582. "FLV",
  9583. "F4V",
  9584. "H.264",
  9585. "H.265",
  9586. "REAL VIDEO",
  9587. "MKV",
  9588. "WebM",
  9589. "HDDVD",
  9590. "MP4",
  9591. "MPG",
  9592. "M4V",
  9593. "MGV",
  9594. "OGV",
  9595. "QTM",
  9596. "STR",
  9597. "AMC",
  9598. "DVX",
  9599. "EVO",
  9600. "DAT",
  9601. "OGG",
  9602. "OGM",
  9603. ];
  9604. if (type == 1) {
  9605. _this.studyJuri[0].cover.push({
  9606. name: file.name,
  9607. url: data.Location,
  9608. uid: file.uid,
  9609. });
  9610. if (
  9611. c.indexOf(
  9612. _this.studyJuri[0].cover[0].url
  9613. .split(".")
  9614. [
  9615. _this.studyJuri[0].cover[0].url.split(".").length - 1
  9616. ].toLocaleUpperCase()
  9617. ) != -1
  9618. ) {
  9619. _this.fileType = 2;
  9620. } else if (
  9621. b.indexOf(
  9622. _this.studyJuri[0].cover[0].url
  9623. .split(".")
  9624. [
  9625. _this.studyJuri[0].cover[0].url.split(".").length - 1
  9626. ].toLocaleUpperCase()
  9627. ) != -1
  9628. ) {
  9629. _this.fileType = 1;
  9630. } else {
  9631. _this.fileType = 0;
  9632. }
  9633. _this.imgChange(null, null, type);
  9634. } else if (type == 2) {
  9635. _this.upToolImg = data.Location;
  9636. _this.imgChange(null, null, type);
  9637. _this.addCourseWorks(i);
  9638. } else if (type == 4) {
  9639. _this.addPz("3", data.Location);
  9640. } else if (type == 5) {
  9641. _this.addImgDrawImG(data.Location);
  9642. } else if (type == 6) {
  9643. var _ftype = 1;
  9644. if (
  9645. c.indexOf(
  9646. data.Location.split(".")[
  9647. data.Location.split(".").length - 1
  9648. ].toLocaleUpperCase()
  9649. ) != -1
  9650. ) {
  9651. _ftype = 5;
  9652. } else if (
  9653. b.indexOf(
  9654. data.Location.split(".")[
  9655. data.Location.split(".").length - 1
  9656. ].toLocaleUpperCase()
  9657. ) != -1
  9658. ) {
  9659. _ftype = 4;
  9660. } else {
  9661. _ftype = 1;
  9662. }
  9663. _this.plworkFile.push({
  9664. name: file.name,
  9665. url: data.Location,
  9666. uid: file.uid,
  9667. fileType: _ftype,
  9668. username:
  9669. _this.plworkFile.length + 1 > 9
  9670. ? _this.plworkFile.length + 1
  9671. : "0" + (_this.plworkFile.length + 1),
  9672. });
  9673. }
  9674. _this.imgChange(null, null, type);
  9675. console.log(data.Location);
  9676. // _this.$message.success('上传成功'+data.Location)
  9677. }
  9678. });
  9679. }
  9680. }
  9681. },
  9682. beforeUpload2(event, type) {
  9683. var file = event.target.files[0];
  9684. var credentials = {
  9685. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  9686. secretAccessKey: "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",
  9687. }; //秘钥形式的登录上传
  9688. window.AWS.config.update(credentials);
  9689. window.AWS.config.region = "cn-northwest-1"; //设置区域
  9690. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  9691. var _this = this;
  9692. _this.progress = 0;
  9693. _this.proVisible = true;
  9694. if (file) {
  9695. var params = {
  9696. Key:
  9697. file.name.split(".")[0] +
  9698. new Date().getTime() +
  9699. "." +
  9700. file.name.split(".")[file.name.split(".").length - 1],
  9701. ContentType: file.type,
  9702. Body: file,
  9703. "Access-Control-Allow-Credentials": "*",
  9704. ACL: "public-read",
  9705. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  9706. var options = {
  9707. partSize: 2048 * 1024 * 1024,
  9708. queueSize: 2,
  9709. leavePartsOnError: true,
  9710. };
  9711. bucket
  9712. .upload(params, options)
  9713. .on("httpUploadProgress", function (evt) {
  9714. //这里可以写进度条
  9715. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  9716. _this.progress = parseInt((evt.loaded * 80) / evt.total);
  9717. })
  9718. .send(function (err, data) {
  9719. _this.progress = 100;
  9720. setTimeout(() => {
  9721. _this.proVisible = false;
  9722. }, 1000);
  9723. if (err) {
  9724. var a = _this.$refs.upload1.uploadFiles;
  9725. a.splice(a.length - 1, a.length);
  9726. _this.$message.error("上传失败");
  9727. } else {
  9728. if (type == 2) {
  9729. _this.studyJuri[0].upVedio.push({
  9730. name: file.name,
  9731. url: data.Location,
  9732. uid: file.uid,
  9733. });
  9734. _this.imgChange(null, null, type);
  9735. } else if (type == 3) {
  9736. _this.studyJuri[0].upFile.push({
  9737. name: file.name,
  9738. url: data.Location,
  9739. uid: file.uid,
  9740. });
  9741. _this.imgChange(null, null, type);
  9742. }
  9743. console.log(data.Location);
  9744. }
  9745. });
  9746. }
  9747. },
  9748. allScrell() {
  9749. window.parent.postMessage({ allScreen: this.screenType + "NT" }, "*");
  9750. },
  9751. nextToolindex(type) {
  9752. if (type == 'last') {
  9753. if (this.toolIndex == 0) {
  9754. this.$message.error("已经是第一个步骤")
  9755. return;
  9756. }
  9757. this.toolIndex = this.toolIndex - 1
  9758. this.tool = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex]
  9759. } else if (type == 'next') {
  9760. if (this.toolIndex == this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose.length - 1) {
  9761. this.$message.error("已经是最后一个步骤")
  9762. return;
  9763. }
  9764. this.toolIndex = this.toolIndex + 1
  9765. this.tool = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex]
  9766. }
  9767. this.$forceUpdate();
  9768. },
  9769. checkBz(index) {
  9770. this.toolIndex = index
  9771. this.tool = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex]
  9772. this.isUpdateToolDetail = false
  9773. this.$forceUpdate();
  9774. },
  9775. nextOrpreSteps(t) {
  9776. if (this.IsFollow && this.courseDetail.userid != this.userid) {
  9777. this.$message.error('已经开启跟随模式,请认真跟堂听讲')
  9778. return;
  9779. }
  9780. var b = this.chapInfoList.length - 1;
  9781. if (t == 0) {
  9782. if (this.courseType == 0) {
  9783. if (this.taskCount == 0) {
  9784. // console.log(this.navList[b].task[this.navList[b].task.length - 1].isLook);
  9785. if (this.IsLookOpen) {
  9786. if (
  9787. !this.navList[b].task[this.navList[b].task.length - 1].isLook
  9788. ) {
  9789. if (
  9790. this.courseDetail.userid != this.userid &&
  9791. this.courseDetail.course_teacher.indexOf(this.userid) == -1
  9792. ) {
  9793. this.$message.error("任务未解锁");
  9794. } else {
  9795. this.$message.error("上一任务未解锁");
  9796. }
  9797. return;
  9798. }
  9799. }
  9800. this.navList[this.courseType].isOpen = false;
  9801. this.courseType = b;
  9802. this.taskCount =
  9803. this.chapInfoList[this.courseType].chapterInfo[0].taskJson
  9804. .length - 1;
  9805. this.navList[this.courseType].isOpen = true;
  9806. } else {
  9807. this.taskCount--;
  9808. }
  9809. } else {
  9810. if (this.taskCount == 0) {
  9811. this.navList[this.courseType].isOpen = false;
  9812. this.courseType--;
  9813. this.taskCount =
  9814. this.chapInfoList[this.courseType].chapterInfo[0].taskJson
  9815. .length - 1;
  9816. this.navList[this.courseType].isOpen = true;
  9817. } else {
  9818. this.taskCount--;
  9819. }
  9820. }
  9821. } else {
  9822. if (this.courseType == b) {
  9823. if (
  9824. this.taskCount ==
  9825. this.chapInfoList[this.courseType].chapterInfo[0].taskJson.length -
  9826. 1
  9827. ) {
  9828. this.navList[this.courseType].isOpen = false;
  9829. this.courseType = 0;
  9830. this.taskCount = 0;
  9831. this.navList[this.courseType].isOpen = true;
  9832. } else {
  9833. var bbb = parseInt(this.taskCount) + 1;
  9834. if (
  9835. !this.chapInfoList[this.courseType].chapterInfo[0].taskJson[bbb]
  9836. .isLook &&
  9837. this.courseDetail.userid != this.userid &&
  9838. this.courseDetail.course_teacher.indexOf(this.userid) == -1 &&
  9839. this.IsLookOpen
  9840. ) {
  9841. this.$message.error("任务未解锁");
  9842. return;
  9843. }
  9844. this.taskCount++;
  9845. if (this.IsLookOpen) {
  9846. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  9847. this.taskCount
  9848. ].isLook = true;
  9849. this.addCourseState(3);
  9850. }
  9851. }
  9852. } else {
  9853. if (
  9854. this.taskCount ==
  9855. this.chapInfoList[this.courseType].chapterInfo[0].taskJson.length -
  9856. 1
  9857. ) {
  9858. var bbb = parseInt(this.courseType) + 1;
  9859. if (
  9860. !this.chapInfoList[bbb].chapterInfo[0].taskJson[0].isLook &&
  9861. this.courseDetail.userid != this.userid &&
  9862. this.courseDetail.course_teacher.indexOf(this.userid) == -1 &&
  9863. this.IsLookOpen
  9864. ) {
  9865. this.$message.error("任务未解锁");
  9866. return;
  9867. }
  9868. this.navList[this.courseType].isOpen = false;
  9869. this.courseType++;
  9870. this.taskCount = 0;
  9871. this.navList[this.courseType].isOpen = true;
  9872. } else {
  9873. var bbb = parseInt(this.taskCount) + 1;
  9874. if (
  9875. !this.chapInfoList[this.courseType].chapterInfo[0].taskJson[bbb]
  9876. .isLook &&
  9877. this.courseDetail.userid != this.userid &&
  9878. this.courseDetail.course_teacher.indexOf(this.userid) == -1 &&
  9879. this.IsLookOpen
  9880. ) {
  9881. this.$message.error("任务未解锁");
  9882. return;
  9883. }
  9884. this.taskCount++;
  9885. }
  9886. if (this.IsLookOpen) {
  9887. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  9888. this.taskCount
  9889. ].isLook = true;
  9890. this.addCourseState(3);
  9891. }
  9892. }
  9893. }
  9894. document.scrollingElement.scrollTop = 0;
  9895. this.showType = 0;
  9896. this.navId = this.navList[this.courseType].task[this.taskCount].id;
  9897. this.toolIndex = null
  9898. this.isNoHomeWork = false;
  9899. (this.studyJuri = [
  9900. {
  9901. content: "",
  9902. cover: [],
  9903. upVedio: [],
  9904. upFile: [],
  9905. },
  9906. ]),
  9907. (this.radio = []);
  9908. this.isClickNav = "";
  9909. this.selectPz();
  9910. this.getHomeWork();
  9911. this.getCourseDetail();
  9912. this.$forceUpdate();
  9913. },
  9914. openTask(s, n, i) {
  9915. if (this.IsFollow && this.courseDetail.userid != this.userid) {
  9916. this.$message.error('已经开启跟随模式,请认真跟堂听讲')
  9917. return;
  9918. }
  9919. if (this.IsLookOpen) {
  9920. if (
  9921. !this.chapInfoList[s].chapterInfo[0].taskJson[n].isLook &&
  9922. this.courseDetail.userid != this.userid &&
  9923. this.courseDetail.course_teacher.indexOf(this.userid) == -1
  9924. ) {
  9925. this.$message.error("任务未解锁");
  9926. return;
  9927. }
  9928. if (this.courseType == s && this.taskCount != n && n > this.taskCount) {
  9929. if (
  9930. !this.chapInfoList[this.courseType].chapterInfo[0].taskJson[n - 1]
  9931. .isLook
  9932. ) {
  9933. this.$message.error("上一任务未解锁");
  9934. return;
  9935. }
  9936. } else if (s > this.courseType) {
  9937. if (n > 0) {
  9938. if (!this.chapInfoList[s].chapterInfo[0].taskJson[n - 1].isLook) {
  9939. this.$message.error("上一任务未解锁");
  9940. return;
  9941. }
  9942. } else {
  9943. if (
  9944. !this.chapInfoList[s - 1].chapterInfo[0].taskJson[
  9945. this.chapInfoList[s - 1].chapterInfo[0].taskJson.length - 1
  9946. ].isLook
  9947. ) {
  9948. this.$message.error("上一任务未解锁");
  9949. return;
  9950. }
  9951. }
  9952. }
  9953. }
  9954. this.courseType = s;
  9955. this.navId = i;
  9956. this.taskCount = n;
  9957. if (this.IsLookOpen) {
  9958. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  9959. this.taskCount
  9960. ].isLook = true;
  9961. this.addCourseState(3);
  9962. }
  9963. for (var ci = 0; ci < this.isCloseList.length; ci++) {
  9964. this.isCloseList[ci].isClose = 0;
  9965. }
  9966. this.showType = 0;
  9967. this.isNoHomeWork = false;
  9968. (this.studyJuri = [
  9969. {
  9970. content: "",
  9971. cover: [],
  9972. upVedio: [],
  9973. upFile: [],
  9974. },
  9975. ]),
  9976. (this.radio = []);
  9977. document.scrollingElement.scrollTop = 0;
  9978. this.toolIndex = null
  9979. // setTimeout(() => {
  9980. // let a = document.getElementById(i);
  9981. // if (a.offsetTop - 110 == 0) {
  9982. // window.scrollTo(0, 0);
  9983. // } else {
  9984. // window.scrollTo(0, a.offsetTop);
  9985. // }
  9986. // }, 0);
  9987. this.selectPz();
  9988. this.getHomeWork();
  9989. this.getCourseDetail();
  9990. },
  9991. get(i) {
  9992. if (this.IsFollow && this.courseDetail.userid != this.userid) {
  9993. this.$message.error('已经开启跟随模式,请认真跟堂听讲')
  9994. return;
  9995. }
  9996. this.navList[i].isOpen = !this.navList[i].isOpen;
  9997. },
  9998. addQuestion() {
  9999. this.answerList.push({
  10000. answerTitle: this.answerQ.replaceAll(/%/g, "%25"),
  10001. answer: this.questionAnswer.replaceAll(/%/g, "%25"),
  10002. });
  10003. let params = [
  10004. {
  10005. uid: this.userid,
  10006. cid: this.id,
  10007. stage: this.courseType,
  10008. task: this.taskCount,
  10009. tool: this.toolindex,
  10010. content: JSON.stringify(this.answerList),
  10011. type: 3,
  10012. },
  10013. ];
  10014. this.ajax
  10015. .post(this.$store.state.api + "addCourseWorks", params)
  10016. .then((res) => {
  10017. this.$message({
  10018. message: "提交成功",
  10019. type: "success",
  10020. });
  10021. this.answerList = [];
  10022. this.questionAnswer = ""
  10023. this.answerDialogVisible = false;
  10024. this.selectStudent();
  10025. this.selectSWorks();
  10026. this.selectSLook();
  10027. })
  10028. .catch((err) => {
  10029. this.$message.error("提交失败");
  10030. console.error(err);
  10031. });
  10032. },
  10033. addQuestionTeacher() {
  10034. this.answerList.push({
  10035. answerTitle: this.answerQ.replaceAll(/%/g, "%25"),
  10036. answer: this.questionAnswer.replaceAll(/%/g, "%25"),
  10037. });
  10038. let params = [
  10039. {
  10040. uid: this.sStudent.userid,
  10041. cid: this.id,
  10042. stage: this.courseType,
  10043. task: this.taskCount,
  10044. tool: this.toolindex,
  10045. content: JSON.stringify(this.answerList),
  10046. type: 3,
  10047. ateacher: this.userid,
  10048. },
  10049. ];
  10050. this.ajax
  10051. .post(this.$store.state.api + "addCourseWorksTeacher", params)
  10052. .then((res) => {
  10053. this.$message({
  10054. message: "提交成功",
  10055. type: "success",
  10056. });
  10057. this.answerList = [];
  10058. this.questionAnswer = ""
  10059. this.answerDialogVisibleTeacher = false;
  10060. this.selectStudent();
  10061. this.selectSWorks();
  10062. this.selectSLook();
  10063. })
  10064. .catch((err) => {
  10065. this.$message.error("提交失败");
  10066. console.error(err);
  10067. });
  10068. },
  10069. refreshCourse() {
  10070. this.navList = [];
  10071. this.getCourseDetail(1)
  10072. },
  10073. setPz() {
  10074. if (this.ispzType == 4) {
  10075. this.ispzType = 0
  10076. this.pzDialog = false
  10077. return;
  10078. }
  10079. this.ispzType = 4
  10080. this.pzDialog = true
  10081. this.selectPz();
  10082. },
  10083. getCourseDetail(type, gindex) {
  10084. let loading;
  10085. if (type != 2 && type != 3) {
  10086. loading = this.$loading.service({
  10087. background: "rgba(255, 255, 255, 0.7)",
  10088. target: document.querySelector(".student_table"),
  10089. });
  10090. }
  10091. let params = {
  10092. courseId: this.id,
  10093. };
  10094. this.ajax
  10095. .get(this.$store.state.api + "selectCourseDetail3", params)
  10096. .then((res) => {
  10097. if (type != 2 && type != 3) {
  10098. loading.close();
  10099. if (this.courseType > (JSON.parse(res.data[0][0].chapters).length - 1)) {
  10100. this.courseType = (JSON.parse(res.data[0][0].chapters).length - 1)
  10101. }
  10102. var a = JSON.parse(res.data[0][0].chapters)[this.courseType]
  10103. .chapterInfo[0].taskJson;
  10104. var b = [
  10105. "AVI",
  10106. "NAVI",
  10107. "MPEG",
  10108. "ASF",
  10109. "MOV",
  10110. "WMV",
  10111. "3GP",
  10112. "RM",
  10113. "RMVB",
  10114. "FLV",
  10115. "F4V",
  10116. "H.264",
  10117. "H.265",
  10118. "REAL VIDEO",
  10119. "MKV",
  10120. "WebM",
  10121. "HDDVD",
  10122. "MP4",
  10123. "MPG",
  10124. "M4V",
  10125. "MGV",
  10126. "OGV",
  10127. "QTM",
  10128. "STR",
  10129. "AMC",
  10130. "DVX",
  10131. "EVO",
  10132. "DAT",
  10133. "OGG",
  10134. "OGM",
  10135. "MP3",
  10136. ];
  10137. let _chapterData = []
  10138. for (var i = 0; i < a.length; i++) {
  10139. var c = a[i].chapterData;
  10140. this.vedio[i] = [];
  10141. this.textList[i] = [];
  10142. this.lineList[i] = [];
  10143. this.chapToolList[i] = [];
  10144. this.file[i] = [];
  10145. this.fileC[i] = [];
  10146. _chapterData[i] = c.filter(el => {
  10147. return el.type != 12
  10148. })
  10149. this.fileC[i] = c.filter(el => {
  10150. return el.type == 12
  10151. })
  10152. for (var j = 0; j < c.length; j++) {
  10153. if (c[j].type == 7) {
  10154. this.chapToolList[i].push(c[j]);
  10155. } else if (c[j].type == 8) {
  10156. this.lineList[i].push(c[j]);
  10157. } else if (c[j].type == 6) {
  10158. this.textList[i].push(c[j]);
  10159. }else {
  10160. if (
  10161. b.indexOf(
  10162. c[j].url
  10163. .split(".")
  10164. [c[j].url.split(".").length - 1].toLocaleUpperCase()
  10165. ) != -1
  10166. ) {
  10167. this.vedio[i].push(c[j]);
  10168. } else {
  10169. this.file[i].push(c[j]);
  10170. }
  10171. }
  10172. }
  10173. var d = JSON.parse(JSON.stringify(this.playerOptions));
  10174. d.sources[0].src =
  10175. this.vedio[i].length > 0 ? this.vedio[i][0].url : this.mr;
  10176. this.playerO[i] = d;
  10177. }
  10178. this.courseDetail = res.data[0][0];
  10179. this.tcid = this.arrayToArray(this.courseDetail.juri ? this.courseDetail.juri.split(",") : [], this.tcid2 ? this.tcid2.split(",") : []).join(",")
  10180. console.log(this.tcid);
  10181. this.evalua = res.data[0][0].evaId;
  10182. this.chapInfo = JSON.parse(this.courseDetail.chapters)[
  10183. this.courseType
  10184. ];
  10185. this.chapInfoList = JSON.parse(this.courseDetail.chapters);
  10186. if (this.tcid && res.data[1].length) {
  10187. let _inviteA = []
  10188. for (var ik = 0; ik < res.data[1].length; ik++) {
  10189. _inviteA.push({ cid: res.data[1][ik].classid, ic: res.data[1][ik].code });
  10190. }
  10191. for (var ik = 0; ik < _inviteA.length; ik++) {
  10192. if (this.arrayToArray(_inviteA[ik].cid.split(","), this.tcid.split(",")).length) {
  10193. this.inviteCode = _inviteA[ik].ic
  10194. break;
  10195. }
  10196. }
  10197. }
  10198. for (var l = 0; l < this.chapInfoList.length; l++) {
  10199. var w = this.chapInfoList[l].chapterInfo[0].taskJson;
  10200. for (var m = 0; m < w.length; m++) {
  10201. w[m].id = l + "-" + m;
  10202. }
  10203. }
  10204. if (
  10205. _chapterData[this.taskCount].length &&
  10206. _chapterData[this.taskCount][0].type == 2
  10207. ) {
  10208. this.showType = 0
  10209. } else {
  10210. if (
  10211. _chapterData[this.taskCount].length > 0
  10212. ) {
  10213. let _url =
  10214. _chapterData[this.taskCount][0].url;
  10215. if (
  10216. _chapterData[this.taskCount][0].type == 8
  10217. ) {
  10218. this.showType = 2;
  10219. if (
  10220. _url.indexOf("https://") == -1 &&
  10221. _url.indexOf("http://") == -1
  10222. ) {
  10223. _url = "https://" + _url;
  10224. }
  10225. this.pptImgUrl1 = _url;
  10226. } else if (
  10227. _chapterData[this.taskCount][0].type == 3
  10228. ) {
  10229. if (
  10230. _url
  10231. .split(".")
  10232. [_url.split(".").length - 1].toLocaleUpperCase() == "PDF"
  10233. ) {
  10234. this.showType = 3;
  10235. this.pptImgUrl1 = _url;
  10236. } else if (
  10237. this.isAssetTypeAnImage(
  10238. _url
  10239. .split(".")
  10240. [_url.split(".").length - 1].toLocaleLowerCase()
  10241. )
  10242. ) {
  10243. this.showType = 4;
  10244. this.pptImgUrl1 = _url;
  10245. } else {
  10246. this.showType = 2;
  10247. this.pptImgUrl1 =
  10248. "https://view.officeapps.live.com/op/view.aspx?src=" +
  10249. _url;
  10250. }
  10251. } else if (
  10252. _chapterData[this.taskCount][0].type == 13
  10253. ) {
  10254. this.showType = 4;
  10255. this.pptImgUrl1 = _url;
  10256. } else if (
  10257. _chapterData[this.taskCount][0].type == 6
  10258. ) {
  10259. this.showType = 1;
  10260. this.text = this.textList[this.taskCount][0];
  10261. }
  10262. }
  10263. }
  10264. this.isClickNav = 0;
  10265. if (!_chapterData[this.taskCount].length || _chapterData[this.taskCount][0].type == 12) {
  10266. this.isClickNav = '';
  10267. this.showType = ''
  10268. }
  10269. this.vChapterData = _chapterData
  10270. if (this.toolIndex == null && this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose.length) {
  10271. this.toolIndex = 0
  10272. this.tool = this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex]
  10273. }
  10274. } else if (type != 3) {
  10275. var a = JSON.parse(res.data[0][0].chapters)[this.courseType]
  10276. .chapterInfo[0].taskJson;
  10277. var b = [
  10278. "AVI",
  10279. "NAVI",
  10280. "MPEG",
  10281. "ASF",
  10282. "MOV",
  10283. "WMV",
  10284. "3GP",
  10285. "RM",
  10286. "RMVB",
  10287. "FLV",
  10288. "F4V",
  10289. "H.264",
  10290. "H.265",
  10291. "REAL VIDEO",
  10292. "MKV",
  10293. "WebM",
  10294. "HDDVD",
  10295. "MP4",
  10296. "MPG",
  10297. "M4V",
  10298. "MGV",
  10299. "OGV",
  10300. "QTM",
  10301. "STR",
  10302. "AMC",
  10303. "DVX",
  10304. "EVO",
  10305. "DAT",
  10306. "OGG",
  10307. "OGM",
  10308. "MP3",
  10309. ];
  10310. let _chapterData = []
  10311. for (var i = 0; i < a.length; i++) {
  10312. var c = a[i].chapterData;
  10313. this.vedio[i] = [];
  10314. this.textList[i] = [];
  10315. this.lineList[i] = [];
  10316. this.chapToolList[i] = [];
  10317. this.file[i] = [];
  10318. this.fileC[i] = [];
  10319. _chapterData[i] = c.filter(el => {
  10320. return el.type != 12
  10321. })
  10322. this.fileC[i] = c.filter(el => {
  10323. return el.type == 12
  10324. })
  10325. for (var j = 0; j < c.length; j++) {
  10326. if (c[j].type == 7) {
  10327. this.chapToolList[i].push(c[j]);
  10328. } else if (c[j].type == 8) {
  10329. this.lineList[i].push(c[j]);
  10330. } else if (c[j].type == 6) {
  10331. this.textList[i].push(c[j]);
  10332. } else {
  10333. if (
  10334. b.indexOf(
  10335. c[j].url
  10336. .split(".")
  10337. [c[j].url.split(".").length - 1].toLocaleUpperCase()
  10338. ) != -1
  10339. ) {
  10340. this.vedio[i].push(c[j]);
  10341. } else {
  10342. this.file[i].push(c[j]);
  10343. }
  10344. }
  10345. }
  10346. var d = JSON.parse(JSON.stringify(this.playerOptions));
  10347. d.sources[0].src =
  10348. this.vedio[i].length > 0 ? this.vedio[i][0].url : this.mr;
  10349. this.playerO[i] = d;
  10350. }
  10351. if (
  10352. _chapterData[this.taskCount].length &&
  10353. _chapterData[this.taskCount][0].type == 2
  10354. ) {
  10355. this.showType = 0
  10356. } else {
  10357. if (
  10358. _chapterData[this.taskCount].length > 0
  10359. ) {
  10360. let _url =
  10361. _chapterData[this.taskCount][0].url;
  10362. if (
  10363. _chapterData[this.taskCount][0].type == 8
  10364. ) {
  10365. this.showType = 2;
  10366. if (
  10367. _url.indexOf("https://") == -1 &&
  10368. _url.indexOf("http://") == -1
  10369. ) {
  10370. _url = "https://" + _url;
  10371. }
  10372. this.pptImgUrl1 = _url;
  10373. } else if (
  10374. _chapterData[this.taskCount][0].type == 3
  10375. ) {
  10376. if (
  10377. _url
  10378. .split(".")
  10379. [_url.split(".").length - 1].toLocaleUpperCase() == "PDF"
  10380. ) {
  10381. this.showType = 3;
  10382. this.pptImgUrl1 = _url;
  10383. } else if (
  10384. this.isAssetTypeAnImage(
  10385. _url
  10386. .split(".")
  10387. [_url.split(".").length - 1].toLocaleLowerCase()
  10388. )
  10389. ) {
  10390. this.showType = 4;
  10391. this.pptImgUrl1 = _url;
  10392. } else {
  10393. this.showType = 2;
  10394. this.pptImgUrl1 =
  10395. "https://view.officeapps.live.com/op/view.aspx?src=" +
  10396. _url;
  10397. }
  10398. } else if (
  10399. _chapterData[this.taskCount][0].type == 13
  10400. ) {
  10401. this.showType = 4;
  10402. this.pptImgUrl1 = _url;
  10403. } else if (
  10404. _chapterData[this.taskCount][0].type == 6
  10405. ) {
  10406. this.showType = 1;
  10407. this.text = this.textList[this.taskCount][0];
  10408. }
  10409. }
  10410. }
  10411. this.isClickNav = 0;
  10412. if (!_chapterData[this.taskCount].length || _chapterData[this.taskCount][0].type == 12) {
  10413. this.isClickNav = '';
  10414. this.showType = ''
  10415. }
  10416. this.vChapterData = _chapterData
  10417. this.$forceUpdate();
  10418. }
  10419. this.isUpdateToolDetail = false
  10420. this.$nextTick(() => {
  10421. setTimeout(() => {
  10422. this.checkEva();
  10423. }, 1000);
  10424. });
  10425. let _this = this;
  10426. if (_this.timer) {
  10427. clearInterval(_this.timer);
  10428. _this.timer = null;
  10429. }
  10430. _this.selectSWorks(gindex);
  10431. _this.selectStudent();
  10432. _this.selectSLook();
  10433. if (_this.courseDetail.userid == _this.userid && _this.IsFollow) {
  10434. _this.setCTask();
  10435. }
  10436. if (_this.dialogVisibleGroup) {
  10437. _this.groupJson =
  10438. _this.chapInfoList[_this.courseType].chapterInfo[0].taskJson[
  10439. _this.taskCount
  10440. ].toolChoose[_this.toolindex].groupJson;
  10441. }
  10442. _this.timer = setInterval(function () {
  10443. _this.selectSWorks(gindex);
  10444. if (_this.tType == 4 || _this.ispzType == 4) {
  10445. _this.selectPz();
  10446. }
  10447. }, 5000);
  10448. })
  10449. .catch((err) => {
  10450. loading.close();
  10451. console.error(err);
  10452. });
  10453. },
  10454. getCourseGroup(gindex) {
  10455. let params = {
  10456. cid: this.id,
  10457. classid: this.tcid ? this.tcid : '1',
  10458. };
  10459. this.ajax
  10460. .get(this.$store.state.api + "getCourseGroup", params)
  10461. .then((res) => {
  10462. if (res.data && res.data[0].length) {
  10463. if (!this.isGroup) {
  10464. let courseGroup = JSON.parse(res.data[0][0].group)
  10465. courseGroup.group = courseGroup.group.filter(el => {
  10466. el.works = []
  10467. return el
  10468. });
  10469. this.courseGroup = courseGroup
  10470. let groupPerson = res.data[1]
  10471. let group = JSON.parse(res.data[0][0].group).group
  10472. let courseGroupStudent = {}
  10473. let courseGroupStudentUid = {}
  10474. for (var i = 0; i < group.length; i++) {
  10475. courseGroupStudent[group[i].id] = []
  10476. courseGroupStudentUid[group[i].id] = []
  10477. for (var j = 0; j < groupPerson.length; j++) {
  10478. if (groupPerson[j].groupCid == group[i].id) {
  10479. courseGroupStudent[group[i].id].push(groupPerson[j])
  10480. courseGroupStudentUid[group[i].id].push(groupPerson[j].userid)
  10481. }
  10482. }
  10483. }
  10484. this.courseGroupStudent = courseGroupStudent
  10485. this.courseGroupStudentUid = courseGroupStudentUid
  10486. }
  10487. this.isGroup = true
  10488. this.selectSWorks(gindex);
  10489. } else {
  10490. this.selectSWorks(gindex);
  10491. this.isGroup = false
  10492. }
  10493. })
  10494. .catch((err) => {
  10495. // this.$message.error("网络不佳");
  10496. console.error(err);
  10497. });
  10498. },
  10499. setOperationTime() {
  10500. let _this = this
  10501. if (_this.opertimer) {
  10502. clearInterval(_this.opertimer);
  10503. _this.opertimer = null;
  10504. }
  10505. _this.opertimer = setInterval(() => {
  10506. _this.setoTime('600')
  10507. }, 600000);
  10508. },
  10509. setoTime(time) {
  10510. let params = [
  10511. {
  10512. uid: this.userid,
  10513. cid: this.id,
  10514. type: '2',
  10515. time: time,
  10516. },
  10517. ];
  10518. this.ajax
  10519. .post(this.$store.state.api + "addOperationTimeT2", params)
  10520. .then((res) => {
  10521. })
  10522. .catch((err) => {
  10523. console.error(err);
  10524. });
  10525. },
  10526. addPz(type, content) {
  10527. if (type == "1" && this.pzConText == "") {
  10528. this.$message.error("批注不能为空!");
  10529. return;
  10530. }
  10531. let params = [
  10532. {
  10533. cid: this.id,
  10534. uid: this.userid,
  10535. s: this.courseType,
  10536. t: this.taskCount,
  10537. c: type == "1" ? this.pzConText.replaceAll(/%/g, "%25") : content,
  10538. type: type,
  10539. },
  10540. ];
  10541. this.ajax
  10542. .post(this.$store.state.api + "addPz2", params)
  10543. .then((res) => {
  10544. this.$message({
  10545. message: "添加成功",
  10546. type: "success",
  10547. });
  10548. this.pzConText = "";
  10549. this.addPzDialog = false;
  10550. this.selectPz();
  10551. })
  10552. .catch((err) => {
  10553. this.$message.error("添加失败");
  10554. console.error(err);
  10555. });
  10556. },
  10557. deletePz(id) {
  10558. this.$confirm("确定删除此批注吗?", "提示", {
  10559. confirmButtonText: "确定",
  10560. cancelButtonText: "取消",
  10561. type: "warning",
  10562. })
  10563. .then(() => {
  10564. let params = [
  10565. {
  10566. id: id,
  10567. },
  10568. ];
  10569. this.ajax
  10570. .post(this.$store.state.api + "deletePz", params)
  10571. .then((res) => {
  10572. this.$message({
  10573. message: "删除成功",
  10574. type: "success",
  10575. });
  10576. this.selectPz();
  10577. })
  10578. .catch((err) => {
  10579. this.$message.error("网络异常");
  10580. console.error(err);
  10581. });
  10582. })
  10583. .catch(() => { });
  10584. },
  10585. selectPz() {
  10586. let params = {
  10587. cid: this.id,
  10588. s: this.courseType,
  10589. t: this.taskCount,
  10590. };
  10591. this.ajax
  10592. .get(this.$store.state.api + "selectPzList", params)
  10593. .then((res) => {
  10594. this.pzList = res.data[0];
  10595. })
  10596. .catch((err) => {
  10597. console.error(err);
  10598. });
  10599. },
  10600. updateSLook() {
  10601. let params = {
  10602. sopen: this.sIsOpen == false ? 1 : 2,
  10603. cid: this.id,
  10604. };
  10605. this.ajax
  10606. .get(this.$store.state.api + "updateCourseSLook", params)
  10607. .then((res) => {
  10608. if (this.sIsOpen == true) {
  10609. this.$message({
  10610. message: "权限设置成功",
  10611. type: "success",
  10612. });
  10613. } else {
  10614. this.$message({
  10615. message: "权限关闭成功",
  10616. type: "success",
  10617. });
  10618. }
  10619. })
  10620. .catch((err) => {
  10621. console.error(err);
  10622. });
  10623. },
  10624. updateFollow() {
  10625. let params = [
  10626. {
  10627. sopen: this.IsFollow == false ? 1 : 2,
  10628. cid: this.id,
  10629. },
  10630. ];
  10631. this.ajax
  10632. .post(this.$store.state.api + "updateCourseFollow", params)
  10633. .then((res) => {
  10634. if (this.IsFollow == true) {
  10635. this.$message({
  10636. message: "开启成功",
  10637. type: "success",
  10638. });
  10639. } else {
  10640. this.$message({
  10641. message: "关闭成功",
  10642. type: "success",
  10643. });
  10644. }
  10645. this.setCTask();
  10646. })
  10647. .catch((err) => {
  10648. console.error(err);
  10649. });
  10650. },
  10651. setCTask() {
  10652. let params = [
  10653. {
  10654. sopen: this.courseType + '-' + this.taskCount,
  10655. cid: this.id,
  10656. },
  10657. ];
  10658. this.ajax
  10659. .post(this.$store.state.api + "updateCourseFollowC", params)
  10660. .then((res) => {
  10661. })
  10662. .catch((err) => {
  10663. console.error(err);
  10664. });
  10665. },
  10666. updateLookOpen() {
  10667. let params = [
  10668. {
  10669. sopen: this.IsLookOpen == false ? 1 : 2,
  10670. cid: this.id,
  10671. },
  10672. ];
  10673. this.ajax
  10674. .post(this.$store.state.api + "updateCourseLookOpen", params)
  10675. .then((res) => {
  10676. if (this.IsLookOpen == true) {
  10677. // if (this.courseType != 0 && this.taskCount != 0) {
  10678. // this.openTask(0, 0, "0-0");
  10679. // }
  10680. this.$message({
  10681. message: "权限设置成功",
  10682. type: "success",
  10683. });
  10684. } else {
  10685. this.$message({
  10686. message: "权限关闭成功",
  10687. type: "success",
  10688. });
  10689. }
  10690. this.getCourseState(2);
  10691. })
  10692. .catch((err) => {
  10693. console.error(err);
  10694. });
  10695. },
  10696. selectSLook() {
  10697. let params = {
  10698. cid: this.id,
  10699. };
  10700. this.ajax
  10701. .get(this.$store.state.api + "selectCourseSLook", params)
  10702. .then((res) => {
  10703. this.sIsOpen = res.data[0][0].sopen == 1 ? false : true;
  10704. this.IsLookOpen = res.data[0][0].look == 1 ? false : true;
  10705. this.IsFollow = res.data[0][0].follow == 1 ? false : true;
  10706. if (!this.IsLookOpen) {
  10707. this.setNavList();
  10708. } else {
  10709. this.getCourseState(1);
  10710. }
  10711. if (this.IsFollow && this.courseDetail.userid != this.userid) {
  10712. let _followC = res.data[0][0].followC.split('-')
  10713. if (this.courseType != _followC[0] || this.taskCount != _followC[1]) {
  10714. this.navList[this.courseType].isOpen = false;
  10715. this.courseType = _followC[0]
  10716. this.navList[this.courseType].isOpen = true;
  10717. this.taskCount = parseInt(_followC[1])
  10718. this.navId = res.data[0][0].followC;
  10719. this.getCourseDetail()
  10720. }
  10721. }
  10722. })
  10723. .catch((err) => {
  10724. console.error(err);
  10725. });
  10726. },
  10727. setNavList() {
  10728. if (this.navList.length == 0) {
  10729. this.navList = [];
  10730. for (var l = 0; l < this.chapInfoList.length; l++) {
  10731. var q = this.chapInfoList[l].dyName;
  10732. var w = this.chapInfoList[l].chapterInfo[0].taskJson;
  10733. var e;
  10734. this.navList.push({
  10735. dyName: q,
  10736. isOpen: l === 0 ? true : false,
  10737. task: [],
  10738. });
  10739. for (var r = 0; r < w.length; r++) {
  10740. e = w[r].task;
  10741. if (this.chapInfoList[l].easy == 1) {
  10742. this.navList[l].task.push({
  10743. taskName: q,
  10744. id: l + "-" + r,
  10745. isLook: w[r].isLook,
  10746. });
  10747. } else {
  10748. this.navList[l].task.push({
  10749. taskName: e,
  10750. id: l + "-" + r,
  10751. isLook: w[r].isLook,
  10752. });
  10753. }
  10754. // this.navId = this.navId ? this.navId : l + "-" + r;
  10755. // this.navId = l + "-" + r;
  10756. }
  10757. }
  10758. this.navList[0].isOpen = false;
  10759. this.navList[this.courseType].isOpen = true;
  10760. this.navId = this.navList[this.courseType].task[this.taskCount].id;
  10761. } else {
  10762. this.setNavList2();
  10763. }
  10764. },
  10765. setNavList2() {
  10766. for (var l = 0; l < this.chapInfoList.length; l++) {
  10767. var w = this.chapInfoList[l].chapterInfo[0].taskJson;
  10768. for (var r = 0; r < w.length; r++) {
  10769. this.navList[l].task[r].isLook = w[r].isLook;
  10770. }
  10771. }
  10772. if (
  10773. this.IsLookOpen &&
  10774. !this.navList[this.courseType].task[this.taskCount].isLook
  10775. ) {
  10776. this.openTask(0, 0, "0-0");
  10777. }
  10778. this.$forceUpdate();
  10779. },
  10780. getCourseState(type) {
  10781. let params = {
  10782. cid: this.id,
  10783. };
  10784. this.ajax
  10785. .get(this.$store.state.api + "getCourseState", params)
  10786. .then((res) => {
  10787. if (res.data[0].length > 0 && this.IsLookOpen && type == 1) {
  10788. this.chapInfoList = JSON.parse(res.data[0][0].state);
  10789. this.setNavList();
  10790. this.$forceUpdate();
  10791. } else if (res.data[0].length > 0 && this.IsLookOpen && type == 2) {
  10792. this.addCourseState(2);
  10793. } else {
  10794. this.addCourseState(1);
  10795. }
  10796. })
  10797. .catch((err) => {
  10798. console.error(err);
  10799. });
  10800. },
  10801. addCourseState(type) {
  10802. let _state = this.chapInfoList;
  10803. // this.courseType this.taskCount
  10804. if (type == 1 || type == 2) {
  10805. for (var i = 0; i < _state.length; i++) {
  10806. let el = _state[i].chapterInfo[0].taskJson;
  10807. for (var j = 0; j < el.length; j++) {
  10808. // if (i == 0 && j == 0) {
  10809. // el[j].isLook = true;
  10810. // } else {
  10811. // el[j].isLook = false;
  10812. // }
  10813. if (
  10814. this.courseType > i ||
  10815. (this.courseType == i && this.taskCount + 1 > j)
  10816. ) {
  10817. el[j].isLook = true;
  10818. } else {
  10819. el[j].isLook = false;
  10820. }
  10821. }
  10822. }
  10823. }
  10824. let params = [
  10825. {
  10826. cid: this.id,
  10827. state: JSON.stringify(_state).replaceAll(/%/g, "%25"),
  10828. },
  10829. ];
  10830. this.ajax
  10831. .post(
  10832. this.$store.state.api +
  10833. (type == 1 ? "addCourseState" : "updateCourseSate"),
  10834. params
  10835. )
  10836. .then((res) => {
  10837. if (this.IsLookOpen) {
  10838. this.setNavList();
  10839. }
  10840. if (type == 3 && type == 2) {
  10841. this.getCourseState(1);
  10842. }
  10843. })
  10844. .catch((err) => {
  10845. console.error(err);
  10846. });
  10847. },
  10848. getHomeWork() {
  10849. let params = {
  10850. cid: this.id,
  10851. stage: this.courseType,
  10852. task: this.taskCount,
  10853. uid: this.userid,
  10854. };
  10855. this.ajax
  10856. .get(this.$store.state.api + "selectWork", params)
  10857. .then((res) => {
  10858. if (res.data[0].length > 0) {
  10859. this.studyJuri = JSON.parse(res.data[0][0].content);
  10860. this.isNoHomeWork = true;
  10861. }
  10862. })
  10863. .catch((err) => {
  10864. console.error(err);
  10865. });
  10866. },
  10867. isAssetTypeAnImage(ext) {
  10868. return (
  10869. [
  10870. "png",
  10871. "jpg",
  10872. "jpeg",
  10873. "bmp",
  10874. "gif",
  10875. "webp",
  10876. "psd",
  10877. "svg",
  10878. "tiff",
  10879. ].indexOf(ext) !== -1
  10880. );
  10881. },
  10882. switchVideo(media) {
  10883. this.playerO = {};
  10884. this.playerOptions.poster = "";
  10885. this.playerOptions.sources[0].src = media;
  10886. this.playerO = this.playerOptions;
  10887. },
  10888. onPlayerPlay() { },
  10889. lookVedio(u, i) {
  10890. this.isClickNav = "";
  10891. // this.playerOptions.sources[0].src = u;
  10892. var d = JSON.parse(JSON.stringify(this.playerOptions));
  10893. d.sources[0].src = u;
  10894. this.playerO[this.taskCount] = d;
  10895. this.showType = 0;
  10896. // this.isClickNav = "video" + i;
  10897. this.isClickNav = i;
  10898. this.$forceUpdate();
  10899. },
  10900. lookText(i, t) {
  10901. this.isClickNav = "";
  10902. // this.text = this.textList[i][t];
  10903. this.text = this.vChapterData[i][t];
  10904. // this.dialogVisible1 = true;
  10905. this.showType = 1;
  10906. // this.isClickNav = "text" + t;
  10907. this.isClickNav = t;
  10908. },
  10909. lookTools(i, t) {
  10910. this.chapTools = this.chapToolList[i][t];
  10911. this.dialogVisible2 = true;
  10912. },
  10913. openFile(f) {
  10914. this.pptImgUrl = "";
  10915. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
  10916. if (
  10917. a.indexOf(f.split(".")[f.split(".").length - 1].toLocaleUpperCase()) !=
  10918. -1
  10919. ) {
  10920. this.pptImgUrl =
  10921. "https://view.officeapps.live.com/op/view.aspx?src=" + f;
  10922. this.showPDF = false;
  10923. this.dialogVisible3 = true;
  10924. } else if (
  10925. f.split(".")[f.split(".").length - 1].toLocaleUpperCase() == "PDF"
  10926. ) {
  10927. this.pptImgUrl = f;
  10928. this.showPDF = true;
  10929. this.dialogVisible3 = true;
  10930. }
  10931. },
  10932. openTable(f) {
  10933. this.tableJson = JSON.parse(f.works);
  10934. this.$forceUpdate();
  10935. this.dialogVisibleTable2 = true;
  10936. },
  10937. openWord(f) {
  10938. this.tableJson = JSON.parse(f.works);
  10939. this.$forceUpdate();
  10940. this.dialogVisibleTable3 = true;
  10941. },
  10942. doUrl(url, i) {
  10943. this.isClickNav = "";
  10944. this.pptImgUrl1 = "";
  10945. this.showType = 2;
  10946. if (url.indexOf("https://") == -1 && url.indexOf("http://") == -1) {
  10947. url = "https://" + url;
  10948. }
  10949. this.pptImgUrl1 = url;
  10950. // this.isClickNav = "line" + i;
  10951. this.isClickNav = i;
  10952. },
  10953. checkPhoto(f, i){
  10954. this.showType = 4;
  10955. this.pptImgUrl1 = f.url;
  10956. this.isClickNav = i;
  10957. this.$forceUpdate();
  10958. },
  10959. downFile(f, i) {
  10960. this.isClickNav = "";
  10961. this.pptImgUrl1 = "";
  10962. var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"]; //"PDF",
  10963. if (
  10964. a.indexOf(
  10965. f.url.split(".")[f.url.split(".").length - 1].toLocaleUpperCase()
  10966. ) != -1
  10967. ) {
  10968. this.pptImgUrl1 =
  10969. "https://view.officeapps.live.com/op/view.aspx?src=" + f.url;
  10970. // this.dialogVisible3 = true;
  10971. this.showType = 2;
  10972. } else if (
  10973. this.isAssetTypeAnImage(
  10974. f.url.split(".")[f.url.split(".").length - 1].toLocaleLowerCase()
  10975. )
  10976. ) {
  10977. this.showType = 4;
  10978. this.pptImgUrl1 = f.url;
  10979. } else if (
  10980. f.url.split(".")[f.url.split(".").length - 1].toLocaleUpperCase() ==
  10981. "PDF"
  10982. ) {
  10983. this.pptImgUrl1 = f.url;
  10984. // this.dialogVisible3 = true;
  10985. this.showType = 3;
  10986. } else {
  10987. window.open(this.file[i].url);
  10988. }
  10989. // this.isClickNav = "word" + i;
  10990. this.isClickNav = i;
  10991. },
  10992. downFileList(i) {
  10993. window.open(this.noImgList[i].url);
  10994. },
  10995. openAddWork() {
  10996. this.dialogVisible = true;
  10997. },
  10998. addBzWorks() {
  10999. let params = [
  11000. {
  11001. uid: this.userid,
  11002. cid: this.id,
  11003. stage: this.courseType,
  11004. task: this.taskCount,
  11005. tool: this.toolindex,
  11006. content: JSON.stringify(this.eScore),
  11007. type: 6,
  11008. },
  11009. ];
  11010. this.ajax
  11011. .post(this.$store.state.api + "addCourseWorks", params)
  11012. .then((res) => {
  11013. this.$message({
  11014. message: "提交成功",
  11015. type: "success",
  11016. });
  11017. this.eScore = { eBzText: "", eStar: [] };
  11018. this.studentEvalDialogVisible = false;
  11019. this.selectSWorks();
  11020. })
  11021. .catch((err) => {
  11022. this.$message.error("提交失败");
  11023. console.error(err);
  11024. });
  11025. },
  11026. addBzWorksTeacher() {
  11027. let params = [
  11028. {
  11029. uid: this.sStudent.userid,
  11030. cid: this.id,
  11031. stage: this.courseType,
  11032. task: this.taskCount,
  11033. tool: this.toolindex,
  11034. content: JSON.stringify(this.eScore),
  11035. type: 6,
  11036. },
  11037. ];
  11038. this.ajax
  11039. .post(this.$store.state.api + "addCourseWorks", params)
  11040. .then((res) => {
  11041. this.$message({
  11042. message: "提交成功",
  11043. type: "success",
  11044. });
  11045. this.eScore = { eBzText: "", eStar: [] };
  11046. this.studentEvalDialogVisibleTeacher = false;
  11047. this.selectSWorks();
  11048. })
  11049. .catch((err) => {
  11050. this.$message.error("提交失败");
  11051. console.error(err);
  11052. });
  11053. },
  11054. addStudentAsk() {
  11055. if (!this.radio.length) {
  11056. this.$message.error("请选择选项");
  11057. return;
  11058. }
  11059. for (var i = 0; i < this.askJson.askCount; i++) {
  11060. if (
  11061. (this.radio[i] instanceof Array && !this.radio[i].length) ||
  11062. (this.radio[i] !== 0 && !this.radio[i])
  11063. ) {
  11064. this.$message.error("请选择选项");
  11065. return;
  11066. }
  11067. }
  11068. this.askList.push({ askJson: this.askJson, anwer: this.radio });
  11069. let params = [
  11070. {
  11071. uid: this.userid,
  11072. cid: this.id,
  11073. stage: this.courseType,
  11074. task: this.taskCount,
  11075. tool: this.toolindex,
  11076. content: JSON.stringify(this.askList).replaceAll(/%/g, "%25"),
  11077. type: 2,
  11078. },
  11079. ];
  11080. this.ajax
  11081. .post(this.$store.state.api + "addCourseWorks", params)
  11082. .then((res) => {
  11083. this.$message({
  11084. message: "提交成功",
  11085. type: "success",
  11086. });
  11087. this.askList = [];
  11088. this.dialogVisible5 = false;
  11089. this.selectStudent();
  11090. this.selectSWorks();
  11091. this.selectSLook();
  11092. })
  11093. .catch((err) => {
  11094. this.$message.error("提交失败");
  11095. console.error(err);
  11096. });
  11097. },
  11098. addStudentAskTeacher() {
  11099. if (!this.radio.length) {
  11100. this.$message.error("请选择选项");
  11101. return;
  11102. }
  11103. for (var i = 0; i < this.askJson.askCount; i++) {
  11104. if (
  11105. (this.radio[i] instanceof Array && !this.radio[i].length) ||
  11106. (this.radio[i] !== 0 && !this.radio[i])
  11107. ) {
  11108. this.$message.error("请选择选项");
  11109. return;
  11110. }
  11111. }
  11112. this.askList.push({ askJson: this.askJson, anwer: this.radio });
  11113. let params = [
  11114. {
  11115. uid: this.sStudent.userid,
  11116. cid: this.id,
  11117. stage: this.courseType,
  11118. task: this.taskCount,
  11119. tool: this.toolindex,
  11120. content: JSON.stringify(this.askList).replaceAll(/%/g, "%25"),
  11121. type: 2,
  11122. },
  11123. ];
  11124. this.ajax
  11125. .post(this.$store.state.api + "addCourseWorks", params)
  11126. .then((res) => {
  11127. this.$message({
  11128. message: "提交成功",
  11129. type: "success",
  11130. });
  11131. this.askList = [];
  11132. this.dialogVisible5Teacher = false;
  11133. this.selectStudent();
  11134. this.selectSWorks();
  11135. this.selectSLook();
  11136. })
  11137. .catch((err) => {
  11138. this.$message.error("提交失败");
  11139. console.error(err);
  11140. });
  11141. },
  11142. addStudentTest() {
  11143. if (!this.radio.length) {
  11144. this.$message.error("请选择选项");
  11145. return;
  11146. }
  11147. for (var i = 0; i < this.testJson.testCount; i++) {
  11148. if (
  11149. (this.radio[i] instanceof Array && !this.radio[i].length) ||
  11150. (this.radio[i] !== 0 && !this.radio[i])
  11151. ) {
  11152. this.$message.error("请选择选项");
  11153. return;
  11154. }
  11155. }
  11156. this.askList.push({ testJson: this.testJson, anwer: this.radio });
  11157. let params = [
  11158. {
  11159. uid: this.userid,
  11160. cid: this.id,
  11161. stage: this.courseType,
  11162. task: this.taskCount,
  11163. tool: this.toolindex,
  11164. content: JSON.stringify(this.askList).replaceAll(/%/g, "%25"),
  11165. type: 8,
  11166. },
  11167. ];
  11168. this.ajax
  11169. .post(this.$store.state.api + "addCourseWorks", params)
  11170. .then((res) => {
  11171. this.$message({
  11172. message: "提交成功",
  11173. type: "success",
  11174. });
  11175. this.askList = [];
  11176. this.dialogVisibleChoice = false;
  11177. this.selectStudent();
  11178. this.selectSWorks();
  11179. this.selectSLook();
  11180. })
  11181. .catch((err) => {
  11182. this.$message.error("提交失败");
  11183. console.error(err);
  11184. });
  11185. },
  11186. addStudentTestTeacher() {
  11187. if (!this.radio.length) {
  11188. this.$message.error("请选择选项");
  11189. return;
  11190. }
  11191. for (var i = 0; i < this.testJson.testCount; i++) {
  11192. if (
  11193. (this.radio[i] instanceof Array && !this.radio[i].length) ||
  11194. (this.radio[i] !== 0 && !this.radio[i])
  11195. ) {
  11196. this.$message.error("请选择选项");
  11197. return;
  11198. }
  11199. }
  11200. this.askList.push({ testJson: this.testJson, anwer: this.radio });
  11201. let params = [
  11202. {
  11203. uid: this.sStudent.userid,
  11204. cid: this.id,
  11205. stage: this.courseType,
  11206. task: this.taskCount,
  11207. tool: this.toolindex,
  11208. content: JSON.stringify(this.askList).replaceAll(/%/g, "%25"),
  11209. type: 8,
  11210. },
  11211. ];
  11212. this.ajax
  11213. .post(this.$store.state.api + "addCourseWorks", params)
  11214. .then((res) => {
  11215. this.$message({
  11216. message: "提交成功",
  11217. type: "success",
  11218. });
  11219. this.askList = [];
  11220. this.dialogVisibleChoiceTeacher = false;
  11221. this.selectStudent();
  11222. this.selectSWorks();
  11223. this.selectSLook();
  11224. })
  11225. .catch((err) => {
  11226. this.$message.error("提交失败");
  11227. console.error(err);
  11228. });
  11229. },
  11230. addWork() {
  11231. if (this.studyJuri[0].content == "") {
  11232. this.$message.error("请将信息填写完整");
  11233. return;
  11234. } else if (this.studyJuri[0].cover.length == 0) {
  11235. this.$message.error("请将信息填写完整");
  11236. return;
  11237. } else if (this.studyJuri[0].upVedio.length == 0) {
  11238. this.$message.error("请将信息填写完整");
  11239. return;
  11240. }
  11241. if (this.isNoHomeWork) {
  11242. this.$confirm(
  11243. "您已经提交了该作业了,如果您再提交将覆盖上次提交的作业!",
  11244. "提示",
  11245. {
  11246. confirmButtonText: "确定",
  11247. cancelButtonText: "取消",
  11248. type: "warning",
  11249. }
  11250. )
  11251. .then(() => {
  11252. let params = [
  11253. {
  11254. uid: this.userid,
  11255. cid: this.id,
  11256. stage: this.courseType,
  11257. task: this.taskCount,
  11258. content: JSON.stringify(this.studyJuri),
  11259. },
  11260. ];
  11261. this.ajax
  11262. .post(this.$store.state.api + "addWorks", params)
  11263. .then((res) => {
  11264. this.$message({
  11265. message: "提交成功",
  11266. type: "success",
  11267. });
  11268. this.isNoHomeWork = true;
  11269. this.dialogVisible = false;
  11270. })
  11271. .catch((err) => {
  11272. this.$message.error("提交失败");
  11273. console.error(err);
  11274. });
  11275. })
  11276. .catch(() => { });
  11277. } else {
  11278. let params = [
  11279. {
  11280. uid: this.userid,
  11281. cid: this.id,
  11282. stage: this.courseType,
  11283. task: this.taskCount,
  11284. content: JSON.stringify(this.studyJuri),
  11285. },
  11286. ];
  11287. this.ajax
  11288. .post(this.$store.state.api + "addWorks", params)
  11289. .then((res) => {
  11290. this.$message({
  11291. message: "提交成功",
  11292. type: "success",
  11293. });
  11294. this.isNoHomeWork = true;
  11295. this.dialogVisible = false;
  11296. })
  11297. .catch((err) => {
  11298. this.$message.error("提交失败");
  11299. console.error(err);
  11300. });
  11301. }
  11302. },
  11303. selectCount() {
  11304. let params = {
  11305. cid: this.id,
  11306. chid: this.courseType,
  11307. uid: this.userid,
  11308. };
  11309. this.ajax
  11310. .get(this.$store.state.api + "selectToolsCount", params)
  11311. .then((res) => {
  11312. for (var i = 0; i < res.data[0].length; i++) {
  11313. if (res.data[0][i].tools == 1) {
  11314. this.wbCount = res.data[0][i].count;
  11315. } else if (res.data[0][i].tools == 2) {
  11316. this.wordCount = res.data[0][i].count;
  11317. } else if (res.data[0][i].tools == 3) {
  11318. this.mindCount = res.data[0][i].count;
  11319. } else if (res.data[0][i].tools == 4) {
  11320. this.askCount = res.data[0][i].count;
  11321. } else if (res.data[0][i].tools == 6) {
  11322. this.noteCount = res.data[0][i].count;
  11323. } else if (res.data[0][i].tools == 7) {
  11324. this.mindNetWorkCount = res.data[0][i].count;
  11325. } else if (res.data[0][i].tools == 8) {
  11326. this.libraryCount = res.data[0][i].count;
  11327. } else if (res.data[0][i].tools == 16) {
  11328. this.workCount = res.data[0][i].count;
  11329. } else if (res.data[0][i].tools == 10) {
  11330. this.timeCount = res.data[0][i].count;
  11331. } else if (res.data[0][i].tools == 15) {
  11332. this.answerCount = res.data[0][i].count;
  11333. } else if (res.data[0][i].tools == 18) {
  11334. this.trainCount = res.data[0][i].count;
  11335. }
  11336. }
  11337. })
  11338. .catch((err) => {
  11339. console.error(err);
  11340. });
  11341. },
  11342. openTools(t, i, index, c, sName) {
  11343. var z = JSON.parse(c);
  11344. this.noteName = sName;
  11345. if (t == 4) {
  11346. this.radio = [];
  11347. this.isAnswer = false;
  11348. let b = z[0].anwer;
  11349. this.radio = b;
  11350. this.askJson = z[0].askJson;
  11351. this.isAnswer = true;
  11352. this.dialogVisible5 = true;
  11353. } else if (t == 45) {
  11354. this.radio = [];
  11355. this.isAnswer = false;
  11356. let b = z[0].anwer;
  11357. this.radio = b;
  11358. this.testJson = z[0].testJson;
  11359. this.isAnswer = true;
  11360. this.dialogVisibleChoice = true;
  11361. }
  11362. // else if (t == 15) {
  11363. // this.answerQ = "";
  11364. // this.questionAnswer = "";
  11365. // this.answerQ = z[0].answerTitle;
  11366. // this.questionAnswer = z[0].answer;
  11367. // this.answerDialogVisible = true;
  11368. // }
  11369. },
  11370. fastText(p, t) {
  11371. if (t == 1) {
  11372. this.commentText += p;
  11373. } else {
  11374. this.eScore.eBzText += p;
  11375. }
  11376. },
  11377. addTools(t, i, index) {
  11378. var a = 0;
  11379. // this.taskCount = index;
  11380. this.toolindex = i;
  11381. if (t == 1) {
  11382. if (this.wbCount > 0) {
  11383. this.updateCount(this.wbCount, t);
  11384. } else {
  11385. this.wbCount++;
  11386. a = this.wbCount;
  11387. this.toolsCount(a, t);
  11388. }
  11389. window.parent.postMessage(
  11390. {
  11391. tools: "1",
  11392. cid: this.id,
  11393. stage: this.courseType,
  11394. task: this.taskCount,
  11395. tool: i,
  11396. },
  11397. "*"
  11398. );
  11399. } else if (t == 2) {
  11400. if (this.wordCount > 0) {
  11401. this.updateCount(this.wordCount, t);
  11402. } else {
  11403. this.wordCount++;
  11404. a = this.wordCount;
  11405. this.toolsCount(a, t);
  11406. }
  11407. window.parent.postMessage({ tools: "2" }, "*");
  11408. } else if (t == 3) {
  11409. if (this.mindCount > 0) {
  11410. this.updateCount(this.mindCount, t);
  11411. } else {
  11412. this.mindCount++;
  11413. a = this.mindCount;
  11414. this.toolsCount(a, t);
  11415. }
  11416. window.parent.postMessage(
  11417. {
  11418. tools: "3",
  11419. cid: this.id,
  11420. stage: this.courseType,
  11421. task: this.taskCount,
  11422. tool: i,
  11423. },
  11424. "*"
  11425. );
  11426. } else if (t == 4) {
  11427. this.radio = [];
  11428. this.noteName = "";
  11429. this.isAnswer = false;
  11430. if (this.askCount > 0) {
  11431. this.updateCount(this.askCount, t);
  11432. } else {
  11433. this.askCount++;
  11434. a = this.askCount;
  11435. this.toolsCount(a, t);
  11436. }
  11437. this.askJson.askJson =
  11438. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11439. index
  11440. ].toolChoose[i].askJson;
  11441. this.askJson.askTitle =
  11442. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11443. index
  11444. ].toolChoose[i].askTitle;
  11445. this.askJson.askCount =
  11446. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11447. index
  11448. ].toolChoose[i].askCount;
  11449. for (var k = 0; k < this.askJson.askJson.length; k++) {
  11450. if (this.askJson.askJson[k].type == "2") {
  11451. this.radio.push([]);
  11452. } else {
  11453. this.radio.push("");
  11454. }
  11455. }
  11456. this.dialogVisible5 = true;
  11457. // window.parent.postMessage({ tools: "4" }, "*");
  11458. } else if (t == 45) {
  11459. this.noteName = "";
  11460. this.radio = [];
  11461. this.isAnswer = false;
  11462. if (this.askCount > 0) {
  11463. this.updateCount(this.askCount, t);
  11464. } else {
  11465. this.askCount++;
  11466. a = this.askCount;
  11467. this.toolsCount(a, t);
  11468. }
  11469. this.testJson =
  11470. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11471. index
  11472. ].toolChoose[i].testJson;
  11473. for (var k = 0; k < this.testJson.testJson.length; k++) {
  11474. if (this.testJson.testJson[k].type == "2") {
  11475. this.radio.push([]);
  11476. } else {
  11477. this.radio.push("");
  11478. }
  11479. }
  11480. this.dialogVisibleChoice = true;
  11481. // window.parent.postMessage({ tools: "4" }, "*");
  11482. } else if (t == 5) {
  11483. if (this.scoreCount > 0) {
  11484. this.updateCount(this.scoreCount, t);
  11485. } else {
  11486. this.scoreCount++;
  11487. a = this.scoreCount;
  11488. this.toolsCount(a, t);
  11489. }
  11490. this.dialogVisible4 = true;
  11491. // window.parent.postMessage({ tools: "5" }, "*");
  11492. } else if (t == 6) {
  11493. if (this.noteCount > 0) {
  11494. this.updateCount(this.noteCount, t);
  11495. } else {
  11496. this.noteCount++;
  11497. a = this.noteCount;
  11498. this.toolsCount(a, t);
  11499. }
  11500. window.parent.postMessage(
  11501. {
  11502. tools: "6",
  11503. cid: this.id,
  11504. stage: this.courseType,
  11505. task: this.taskCount,
  11506. tool: i,
  11507. },
  11508. "*"
  11509. );
  11510. } else if (t == 7) {
  11511. if (this.mindNetWorkCount > 0) {
  11512. this.updateCount(this.mindNetWorkCount, t);
  11513. } else {
  11514. this.mindNetWorkCount++;
  11515. a = this.mindNetWorkCount;
  11516. this.toolsCount(a, t);
  11517. }
  11518. window.parent.postMessage(
  11519. {
  11520. tools: "7",
  11521. cid: this.id,
  11522. stage: this.courseType,
  11523. task: this.taskCount,
  11524. tool: i,
  11525. },
  11526. "*"
  11527. );
  11528. } else if (t == 16) {
  11529. if (this.workCount > 0) {
  11530. this.updateCount(this.workCount, t);
  11531. } else {
  11532. this.workCount++;
  11533. a = this.workCount;
  11534. this.toolsCount(a, t);
  11535. }
  11536. this.dialogVisible = true;
  11537. } else if (t == 50) {
  11538. if (this.tType == 2) {
  11539. this.$message.error("不支持学生使用");
  11540. return;
  11541. }
  11542. this.plworkFile = [];
  11543. this.uploadCid = this.tcid ? this.tcid : this.courseDetail.juri
  11544. if (!this.uploadCid) {
  11545. this.$message.error("提示:批量上传未添加班级权限,请添加班级或从班级入口进入。");
  11546. return;
  11547. }
  11548. this.selectUploadStudent(2);
  11549. } else if (t == 8) {
  11550. if (this.libraryCount > 0) {
  11551. this.updateCount(this.libraryCount, t);
  11552. } else {
  11553. this.libraryCount++;
  11554. a = this.libraryCount;
  11555. this.toolsCount(a, t);
  11556. }
  11557. window.parent.postMessage({ tools: "8" }, "*");
  11558. } else if (t == 17) {
  11559. if (this.libraryCount > 0) {
  11560. this.updateCount(this.libraryCount, t);
  11561. } else {
  11562. this.libraryCount++;
  11563. a = this.libraryCount;
  11564. this.toolsCount(a, t);
  11565. }
  11566. window.parent.postMessage({ tools: "17" }, "*");
  11567. } else if (t == 18) {
  11568. if (this.trainCount > 0) {
  11569. this.updateCount(this.trainCount, t);
  11570. } else {
  11571. this.trainCount++;
  11572. a = this.trainCount;
  11573. this.toolsCount(a, t);
  11574. }
  11575. window.parent.postMessage({ tools: "18" }, "*");
  11576. } else if (t == 10) {
  11577. if (this.timeCount > 0) {
  11578. this.updateCount(this.timeCount, t);
  11579. } else {
  11580. this.timeCount++;
  11581. a = this.timeCount;
  11582. this.toolsCount(a, t);
  11583. }
  11584. this.preTime = this.chapInfoList[this.courseType].chapterInfo[0]
  11585. .taskJson[index].toolChoose[i].preTime
  11586. ? this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index]
  11587. .toolChoose[i].preTime
  11588. : "";
  11589. this.timeDialogVisible = true;
  11590. } else if (t == 15) {
  11591. this.answerQ = "";
  11592. this.questionAnswer = "";
  11593. if (this.answerCount > 0) {
  11594. this.updateCount(this.answerCount, t);
  11595. } else {
  11596. this.answerCount++;
  11597. a = this.answerCount;
  11598. this.toolsCount(a, t);
  11599. }
  11600. this.answerQ = this.chapInfoList[this.courseType].chapterInfo[0]
  11601. .taskJson[index].toolChoose[i].answerQ
  11602. ? this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index]
  11603. .toolChoose[i].answerQ
  11604. : "";
  11605. this.answerDialogVisible = true;
  11606. } else if (t == 21) {
  11607. window.parent.postMessage({ tools: "21" }, "*");
  11608. } else if (t == 22) {
  11609. window.parent.postMessage({ tools: "22" }, "*");
  11610. } else if (t == 23) {
  11611. window.parent.postMessage({ tools: "23" }, "*");
  11612. } else if (t == 24) {
  11613. window.parent.postMessage({ tools: "24" }, "*");
  11614. } else if (t == 25) {
  11615. window.parent.postMessage({ tools: "25" }, "*");
  11616. } else if (t == 31) {
  11617. window.parent.postMessage({ tools: "31" }, "*");
  11618. } else if (t == 28) {
  11619. window.parent.postMessage({ tools: "28" }, "*");
  11620. } else if (t == 37) {
  11621. window.parent.postMessage({ tools: "37" }, "*");
  11622. } else if (t == 38) {
  11623. window.parent.postMessage({ tools: "38" }, "*");
  11624. } else if (t == 39) {
  11625. window.parent.postMessage({ tools: "39" }, "*");
  11626. } else if (t == 32) {
  11627. window.parent.postMessage({ tools: "32" }, "*");
  11628. } else if (t == 57) {
  11629. // window.parent.postMessage({ tools: "57" }, "*");
  11630. window.parent.postMessage(
  11631. {
  11632. tools: "57u",
  11633. cid: this.id,
  11634. stage: this.courseType,
  11635. task: this.taskCount,
  11636. tool: i,
  11637. },
  11638. "*"
  11639. );
  11640. } else if (t == 58) {
  11641. window.parent.postMessage({ tools: "58" }, "*");
  11642. } else if (t == 59) {
  11643. window.parent.postMessage({ tools: "59" }, "*");
  11644. } else if (t == 60) {
  11645. window.parent.postMessage({ tools: "60" }, "*");
  11646. } else if (t == 61) {
  11647. window.parent.postMessage({ tools: "61" }, "*");
  11648. } else if (t == 63) {
  11649. window.parent.postMessage({ tools: "63" }, "*");
  11650. } else if (t == 26) {
  11651. window.parent.postMessage(
  11652. {
  11653. tools: "26",
  11654. cid: this.id,
  11655. stage: this.courseType,
  11656. task: this.taskCount,
  11657. tool: i,
  11658. },
  11659. "*"
  11660. );
  11661. } else if (t == 40) {
  11662. if (this.evalCount > 0) {
  11663. this.updateCount(this.evalCount, t);
  11664. } else {
  11665. this.evalCount++;
  11666. a = this.evalCount;
  11667. this.toolsCount(a, t);
  11668. }
  11669. this.eScore = { eBzText: "", eStar: [] };
  11670. if (this.worksStudent[i].length) {
  11671. for (var k = 0; k < this.worksStudent[i].length; k++) {
  11672. if (this.userid == this.worksStudent[i][k].userid) {
  11673. this.eScore = JSON.parse(this.worksStudent[i][k].works);
  11674. this.rateJson =
  11675. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11676. index
  11677. ].toolChoose[i].rateJson;
  11678. break;
  11679. } else {
  11680. this.rateJson =
  11681. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11682. index
  11683. ].toolChoose[i].rateJson;
  11684. }
  11685. }
  11686. } else {
  11687. this.rateJson =
  11688. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11689. index
  11690. ].toolChoose[i].rateJson;
  11691. }
  11692. this.isStar = false;
  11693. this.studentEvalDialogVisible = true;
  11694. } else if (t == 41) {
  11695. this.selectJson = this.chapInfoList[this.courseType].chapterInfo[0]
  11696. .taskJson[index].toolChoose[i].selectJson
  11697. ? JSON.parse(
  11698. JSON.stringify(
  11699. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11700. index
  11701. ].toolChoose[i].selectJson
  11702. )
  11703. )
  11704. : { url: "", select: [], answer: [] };
  11705. if (this.worksStudent[i].length) {
  11706. for (var k = 0; k < this.worksStudent[i].length; k++) {
  11707. if (this.userid == this.worksStudent[i][k].userid) {
  11708. var a = this.worksStudent[i][k].works.split(",");
  11709. for (var ki = 0; ki < a.length; ki++) {
  11710. a[ki] = parseInt(a[ki]);
  11711. }
  11712. this.selectAnswer = {
  11713. answer: a,
  11714. stu: this.worksStudent[i][k].sName,
  11715. };
  11716. break;
  11717. } else {
  11718. this.selectAnswer = { answer: [], stu: "" };
  11719. }
  11720. }
  11721. } else {
  11722. this.selectAnswer = { answer: [], stu: "" };
  11723. }
  11724. this.isSelect = false;
  11725. this.dialogVisibleSelect = true;
  11726. } else if (t == 44) {
  11727. window.parent.postMessage({ tools: "44" }, "*");
  11728. } else if (t == 47) {
  11729. this.sentenceList = this.chapInfoList[this.courseType].chapterInfo[0]
  11730. .taskJson[index].toolChoose[i].sentenceList
  11731. ? JSON.parse(
  11732. JSON.stringify(
  11733. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11734. index
  11735. ].toolChoose[i].sentenceList
  11736. )
  11737. )
  11738. : [{ sentenceTitle: "", addSentence: [], rightAnswer: [] }];
  11739. for (var q = 0; q < this.sentenceList.length; q++) {
  11740. this.sentenceList[q].chooseSenList = [];
  11741. this.sentenceList[q].addChangeSen = [];
  11742. this.sentenceList[q].addChangeSen = JSON.parse(
  11743. JSON.stringify(this.sentenceList[q].addSentence)
  11744. );
  11745. this.sentenceList[q].chooseSenList.length =
  11746. this.sentenceList[q].rightAnswer.length;
  11747. }
  11748. this.dialogVisibleSentence = true;
  11749. } else if (t == 48) {
  11750. this.tableJson = this.chapInfoList[this.courseType].chapterInfo[0]
  11751. .taskJson[index].toolChoose[i].tableJson
  11752. ? JSON.parse(
  11753. JSON.stringify(
  11754. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11755. index
  11756. ].toolChoose[i].tableJson
  11757. )
  11758. )
  11759. : { text: "" };
  11760. if (this.worksStudent[i].length) {
  11761. for (var k = 0; k < this.worksStudent[i].length; k++) {
  11762. if (this.userid == this.worksStudent[i][k].userid) {
  11763. this.tableJson = JSON.parse(this.worksStudent[i][k].works);
  11764. break;
  11765. }
  11766. }
  11767. }
  11768. this.dialogVisibleTable = true;
  11769. } else if (t == 52) {
  11770. this.wordJson = this.chapInfoList[this.courseType].chapterInfo[0]
  11771. .taskJson[index].toolChoose[i].wordJson
  11772. ? JSON.parse(
  11773. JSON.stringify(
  11774. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11775. index
  11776. ].toolChoose[i].wordJson
  11777. )
  11778. )
  11779. : { text: "" };
  11780. this.dialogVisibleWord = true;
  11781. } else if (t == 49) {
  11782. this.groupJson =
  11783. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11784. index
  11785. ].toolChoose[i].groupJson;
  11786. this.dialogVisibleGroup = true;
  11787. } else if (t == 62) {
  11788. this.videoJson =
  11789. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11790. index
  11791. ].toolChoose[i].videoJson;
  11792. this.dialogVisibleVideo = true;
  11793. }
  11794. },
  11795. teacherWorkSubmit(t, i, index, s) {
  11796. this.sStudent = s;
  11797. this.sTool = t;
  11798. this.toolindex = i;
  11799. if (this.tType !== "1" && this.tType !== "4") {
  11800. return;
  11801. }
  11802. if (t == 16 || t == 32 || t == 50) {
  11803. this.dialogVisibleWorks = true; //作业提交
  11804. } else if (t == 15) {
  11805. this.answerQ = this.chapInfoList[this.courseType].chapterInfo[0]
  11806. .taskJson[index].toolChoose[i].answerQ
  11807. ? this.chapInfoList[this.courseType].chapterInfo[0].taskJson[index]
  11808. .toolChoose[i].answerQ
  11809. : "";
  11810. this.questionAnswer = ''
  11811. this.answerDialogVisibleTeacher = true;//问答
  11812. } else if (t == 52) {
  11813. this.wordJson = this.chapInfoList[this.courseType].chapterInfo[0]
  11814. .taskJson[index].toolChoose[i].wordJson
  11815. ? JSON.parse(
  11816. JSON.stringify(
  11817. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11818. index
  11819. ].toolChoose[i].wordJson
  11820. )
  11821. )
  11822. : { text: "" };
  11823. this.dialogVisibleWordTeacher = true;//文档
  11824. } else if (t == 4) {
  11825. this.radio = [];
  11826. this.noteName = "";
  11827. this.isAnswer = false;
  11828. if (this.askCount > 0) {
  11829. this.updateCount(this.askCount, t);
  11830. } else {
  11831. this.askCount++;
  11832. a = this.askCount;
  11833. this.toolsCount(a, t);
  11834. }
  11835. if (!this.dialogVisible2) {
  11836. this.askJson.askJson =
  11837. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11838. index
  11839. ].toolChoose[i].askJson;
  11840. this.askJson.askTitle =
  11841. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11842. index
  11843. ].toolChoose[i].askTitle;
  11844. this.askJson.askCount =
  11845. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11846. index
  11847. ].toolChoose[i].askCount;
  11848. } else {
  11849. this.askJson.askJson = this.chapTools.askJson.askJson;
  11850. this.askJson.askTitle = this.chapTools.askJson.askTitle;
  11851. this.askJson.askCount = this.chapTools.askJson.askCount;
  11852. }
  11853. this.dialogVisible5Teacher = true;
  11854. } else if (t == 45) {
  11855. this.noteName = "";
  11856. this.radio = [];
  11857. this.isAnswer = false;
  11858. if (this.askCount > 0) {
  11859. this.updateCount(this.askCount, t);
  11860. } else {
  11861. this.askCount++;
  11862. a = this.askCount;
  11863. this.toolsCount(a, t);
  11864. }
  11865. this.testJson =
  11866. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11867. index
  11868. ].toolChoose[i].testJson;
  11869. for (var k = 0; k < this.testJson.testJson.length; k++) {
  11870. if (this.testJson.testJson[k].type == "2") {
  11871. this.radio.push([]);
  11872. } else {
  11873. this.radio.push("");
  11874. }
  11875. }
  11876. this.dialogVisibleChoiceTeacher = true;
  11877. } else if (t == 41) {
  11878. this.selectJson = this.chapInfoList[this.courseType].chapterInfo[0]
  11879. .taskJson[index].toolChoose[i].selectJson
  11880. ? JSON.parse(
  11881. JSON.stringify(
  11882. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11883. index
  11884. ].toolChoose[i].selectJson
  11885. )
  11886. )
  11887. : { url: "", select: [], answer: [] };
  11888. if (this.worksStudent[i].length) {
  11889. for (var k = 0; k < this.worksStudent[i].length; k++) {
  11890. if (this.sStudent.userid == this.worksStudent[i][k].userid) {
  11891. var a = this.worksStudent[i][k].works.split(",");
  11892. for (var ki = 0; ki < a.length; ki++) {
  11893. a[ki] = parseInt(a[ki]);
  11894. }
  11895. this.selectAnswer = {
  11896. answer: a,
  11897. stu: this.worksStudent[i][k].sName,
  11898. };
  11899. break;
  11900. } else {
  11901. this.selectAnswer = { answer: [], stu: "" };
  11902. }
  11903. }
  11904. } else {
  11905. this.selectAnswer = { answer: [], stu: "" };
  11906. }
  11907. this.isSelect = false;
  11908. this.dialogVisibleSelectTeacher = true;
  11909. } else if (t == 47) {
  11910. this.sentenceList = this.chapInfoList[this.courseType].chapterInfo[0]
  11911. .taskJson[index].toolChoose[i].sentenceList
  11912. ? JSON.parse(
  11913. JSON.stringify(
  11914. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11915. index
  11916. ].toolChoose[i].sentenceList
  11917. )
  11918. )
  11919. : [{ sentenceTitle: "", addSentence: [], rightAnswer: [] }];
  11920. for (var q = 0; q < this.sentenceList.length; q++) {
  11921. this.sentenceList[q].chooseSenList = [];
  11922. this.sentenceList[q].addChangeSen = [];
  11923. this.sentenceList[q].addChangeSen = JSON.parse(
  11924. JSON.stringify(this.sentenceList[q].addSentence)
  11925. );
  11926. this.sentenceList[q].chooseSenList.length =
  11927. this.sentenceList[q].rightAnswer.length;
  11928. }
  11929. this.dialogVisibleSentenceTeacher = true;
  11930. } else if (t == 48) {
  11931. this.tableJson = this.chapInfoList[this.courseType].chapterInfo[0]
  11932. .taskJson[index].toolChoose[i].tableJson
  11933. ? JSON.parse(
  11934. JSON.stringify(
  11935. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11936. index
  11937. ].toolChoose[i].tableJson
  11938. )
  11939. )
  11940. : { text: "" };
  11941. if (this.worksStudent[i].length) {
  11942. for (var k = 0; k < this.worksStudent[i].length; k++) {
  11943. if (this.sStudent.userid == this.worksStudent[i][k].userid) {
  11944. this.tableJson = JSON.parse(this.worksStudent[i][k].works);
  11945. break;
  11946. }
  11947. }
  11948. }
  11949. this.dialogVisibleTableTeacher = true;
  11950. } else if (t == 40) {
  11951. if (this.evalCount > 0) {
  11952. this.updateCount(this.evalCount, t);
  11953. } else {
  11954. this.evalCount++;
  11955. a = this.evalCount;
  11956. this.toolsCount(a, t);
  11957. }
  11958. this.eScore = { eBzText: "", eStar: [] };
  11959. if (this.worksStudent[i].length) {
  11960. for (var k = 0; k < this.worksStudent[i].length; k++) {
  11961. if (this.sStudent.userid == this.worksStudent[i][k].userid) {
  11962. this.eScore = JSON.parse(this.worksStudent[i][k].works);
  11963. this.rateJson =
  11964. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11965. index
  11966. ].toolChoose[i].rateJson;
  11967. break;
  11968. } else {
  11969. this.rateJson =
  11970. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11971. index
  11972. ].toolChoose[i].rateJson;
  11973. }
  11974. }
  11975. } else {
  11976. this.rateJson =
  11977. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  11978. index
  11979. ].toolChoose[i].rateJson;
  11980. }
  11981. this.isStar = false;
  11982. this.studentEvalDialogVisibleTeacher = true;
  11983. } else if (t == 3 || t == 1 || t == 7 || t == 57) {
  11984. window.parent.postMessage(
  11985. {
  11986. tools: t + 'teacher',
  11987. cid: this.id,
  11988. stage: this.courseType,
  11989. task: this.taskCount,
  11990. tool: i,
  11991. student: this.sStudent,
  11992. },
  11993. "*"
  11994. );
  11995. }
  11996. },
  11997. openCocoPi(tool, i, uid, uname) {
  11998. let student = {
  11999. userid: uid,
  12000. student: uname,
  12001. }
  12002. if (tool == 57) {
  12003. window.parent.postMessage(
  12004. {
  12005. tools: tool + "teacher",
  12006. cid: this.id,
  12007. stage: this.courseType,
  12008. task: this.taskCount,
  12009. tool: i,
  12010. student: student,
  12011. },
  12012. "*"
  12013. );
  12014. }
  12015. },
  12016. setRightAnswer(s, i, j) {
  12017. for (var q = 0; q < this.sentenceList[i].chooseSenList.length; q++) {
  12018. if (
  12019. this.sentenceList[i].chooseSenList[q] == undefined ||
  12020. this.sentenceList[i].chooseSenList[q] == ""
  12021. ) {
  12022. this.sentenceList[i].chooseSenList[q] = s;
  12023. this.sentenceList[i].addChangeSen[j] = "";
  12024. break;
  12025. }
  12026. }
  12027. this.$forceUpdate();
  12028. },
  12029. returnCard(r, i, j) {
  12030. var a = this.sentenceList[i].addSentence.indexOf(r);
  12031. this.sentenceList[i].chooseSenList[j] = "";
  12032. this.sentenceList[i].addChangeSen[a] = r;
  12033. this.$forceUpdate();
  12034. },
  12035. // addSentenceTool() {
  12036. // this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  12037. // this.taskCount
  12038. // ].toolChoose[this.toolindex].sentenceList = this.sentenceList;
  12039. // this.sentenceList = [
  12040. // { sentenceTitle: "", addSentence: [], rightAnswer: [] },
  12041. // ];
  12042. // this.dialogVisibleSentence = false;
  12043. // },
  12044. toolsCount(a, t) {
  12045. let params = {
  12046. cid: this.id,
  12047. chid: this.courseType,
  12048. uid: this.userid,
  12049. tid: t,
  12050. count: a,
  12051. };
  12052. this.ajax
  12053. .get(this.$store.state.api + "insertToolsCount", params)
  12054. .then((res) => {
  12055. this.selectCount();
  12056. })
  12057. .catch((err) => {
  12058. console.error(err);
  12059. });
  12060. },
  12061. updateCount(c, t) {
  12062. c++;
  12063. let params = {
  12064. cid: this.id,
  12065. chid: this.courseType,
  12066. uid: this.userid,
  12067. tid: t,
  12068. count: c,
  12069. };
  12070. this.ajax
  12071. .get(this.$store.state.api + "updateToolsCount", params)
  12072. .then((res) => {
  12073. this.selectCount();
  12074. })
  12075. .catch((err) => {
  12076. console.error(err);
  12077. });
  12078. },
  12079. checkEva() {
  12080. if (this.evalua != "") {
  12081. for (var i = 0; i < this.evaJuri.length; i++) {
  12082. if (this.evalua == this.evaJuri[i].id) {
  12083. this.eTitle = this.evaJuri[i].title;
  12084. this.eJson = JSON.parse(this.evaJuri[i].content);
  12085. }
  12086. }
  12087. this.$forceUpdate();
  12088. setTimeout(() => {
  12089. this.setMindData();
  12090. }, 0);
  12091. }
  12092. },
  12093. selectEva() {
  12094. let params = {
  12095. oid: this.oid,
  12096. };
  12097. this.ajax
  12098. .get(this.$store.state.api + "selectAllEvaluation", params)
  12099. .then((res) => {
  12100. this.evaJuri = res.data[0];
  12101. })
  12102. .catch((err) => {
  12103. console.error(err);
  12104. });
  12105. },
  12106. setMindData() {
  12107. this.data.data = [];
  12108. this.data.data.push({ id: "root", isroot: true, topic: this.eTitle });
  12109. let _eJson = Object.keys(this.eJson);
  12110. let _e = this.eJson;
  12111. for (let i = 0; i < _eJson.length; i++) {
  12112. let element = _e[_eJson[i]];
  12113. this.data.data.push({
  12114. id: element.id,
  12115. parentid: "root",
  12116. topic: element.name,
  12117. });
  12118. let _eJsonc = Object.keys(element.child);
  12119. let _e2 = element.child;
  12120. for (let j = 0; j < _eJsonc.length; j++) {
  12121. let _ec = _e2[_eJsonc[j]];
  12122. this.data.data.push({
  12123. id: _ec.id,
  12124. parentid: element.id,
  12125. topic: _ec.name,
  12126. });
  12127. let _eJsonz = Object.keys(_ec.child);
  12128. let _e3 = _ec.child;
  12129. for (let z = 0; z < _eJsonz.length; z++) {
  12130. let _ez = _e3[_eJsonz[z]];
  12131. this.data.data.push({
  12132. id: _ez.id,
  12133. parentid: _ec.id,
  12134. topic: _ez.name,
  12135. });
  12136. }
  12137. }
  12138. }
  12139. this.$forceUpdate();
  12140. },
  12141. checkFileFull(type, url) {
  12142. this.fullDialogVisible = true;
  12143. this.fulltype = type;
  12144. this.fullUrl = url;
  12145. },
  12146. openSname(n, id, i, uid) {
  12147. this.snameWid = id;
  12148. this.worksSName = n;
  12149. this.worksSid = uid == n ? "" : uid;
  12150. this.toolindex = i;
  12151. this.uploadCid = this.tcid ? this.tcid : this.courseDetail.juri;
  12152. if (!this.uploadCid) {
  12153. this.$message.error(
  12154. "提示:批量上传未添加班级权限,请添加班级或从班级入口进入。"
  12155. );
  12156. return;
  12157. }
  12158. this.selectUploadStudent(1);
  12159. },
  12160. updateName() {
  12161. let params = {
  12162. n: this.worksSName,
  12163. cid: this.snameWid,
  12164. };
  12165. this.ajax
  12166. .get(this.$store.state.api + "updateCourseWorksName", params)
  12167. .then((res) => {
  12168. this.$message({
  12169. message: "修改成功",
  12170. type: "success",
  12171. });
  12172. this.dialogVisibleSname = false;
  12173. this.getCourseDetail();
  12174. this.snameWid = "";
  12175. this.worksSName = "";
  12176. })
  12177. .catch((err) => {
  12178. console.error(err);
  12179. });
  12180. },
  12181. downloadFile2(f) {
  12182. let url = f.url
  12183. let _this = this;
  12184. let _url = "";
  12185. if (
  12186. url.indexOf("https://view.officeapps.live.com/op/view.aspx?src=") != -1
  12187. ) {
  12188. _url = url.split(
  12189. "https://view.officeapps.live.com/op/view.aspx?src="
  12190. )[1];
  12191. } else {
  12192. _url = url;
  12193. }
  12194. const x = new XMLHttpRequest();
  12195. x.open("GET", _url, true);
  12196. x.responseType = "blob";
  12197. const loading = _this.$loading.service({
  12198. background: "rgba(255, 255, 255, 0.7)",
  12199. target: document.body,
  12200. text: "文件加载中...",
  12201. });
  12202. // _this.$message.success("文件下载中...");
  12203. x.onload = function (e) {
  12204. loading.close();
  12205. let content = x.response;
  12206. let elink = document.createElement("a");
  12207. elink.download = f.name;
  12208. elink.style.display = "none";
  12209. let blob = new Blob([content]);
  12210. elink.href = URL.createObjectURL(blob);
  12211. document.body.appendChild(elink);
  12212. elink.click();
  12213. document.body.removeChild(elink);
  12214. };
  12215. x.send();
  12216. },
  12217. downloadFile(url) {
  12218. let _this = this;
  12219. let _url = "";
  12220. if (
  12221. url.indexOf("https://view.officeapps.live.com/op/view.aspx?src=") != -1
  12222. ) {
  12223. _url = url.split(
  12224. "https://view.officeapps.live.com/op/view.aspx?src="
  12225. )[1];
  12226. } else {
  12227. _url = url;
  12228. }
  12229. const x = new XMLHttpRequest();
  12230. x.open("GET", _url, true);
  12231. x.responseType = "blob";
  12232. const loading = _this.$loading.service({
  12233. background: "rgba(255, 255, 255, 0.7)",
  12234. target: document.body,
  12235. text: "文件加载中...",
  12236. });
  12237. // _this.$message.success("文件下载中...");
  12238. x.onload = function (e) {
  12239. loading.close();
  12240. // const url = window.URL.createObjectURL(x.response);
  12241. // const a = document.createElement("a");
  12242. // a.href = url;
  12243. // a.target = "_blank";
  12244. // a.download = url;
  12245. // a.click();
  12246. // a.remove();
  12247. let content = x.response;
  12248. let elink = document.createElement("a");
  12249. elink.download = decodeURI(
  12250. _url.split("https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/")[1]
  12251. );
  12252. elink.style.display = "none";
  12253. let blob = new Blob([content]);
  12254. elink.href = URL.createObjectURL(blob);
  12255. document.body.appendChild(elink);
  12256. elink.click();
  12257. document.body.removeChild(elink);
  12258. };
  12259. x.send();
  12260. },
  12261. openLine(url) {
  12262. window.open(url);
  12263. },
  12264. resize() {
  12265. if (document.getElementsByClassName("box_course").length) {
  12266. var a = document.getElementsByClassName("box_course")[0].offsetHeight;
  12267. // document.getElementsByClassName("vedioList")[0].style.height = a + "px";
  12268. document.getElementsByClassName("navBox")[0].style.height =
  12269. a - 40 + "px";
  12270. }
  12271. this.Stbodywidth =
  12272. document.getElementsByClassName("student_body").length &&
  12273. document.getElementsByClassName("student_body")[0].offsetWidth;
  12274. },
  12275. closeDraw() {
  12276. this.bg = null;
  12277. this.drawShow = false;
  12278. },
  12279. showPicturePaint(url) {
  12280. let params = {
  12281. img: url,
  12282. };
  12283. this.ajax
  12284. .get(this.$store.state.api + "imgToBase64", params)
  12285. .then((res) => {
  12286. console.log(res);
  12287. this.drawShow = true;
  12288. this.bg = res.data[0].img;
  12289. })
  12290. .catch((err) => {
  12291. console.error(err);
  12292. });
  12293. },
  12294. addImgDraw(base64) {
  12295. let file = { name: "批注图.png" };
  12296. let img = this.dataUrlToFile(base64, file);
  12297. this.beforeUpload1(img, 5);
  12298. },
  12299. addImgDrawImG(url) {
  12300. // console.log(url);
  12301. let params = [
  12302. {
  12303. wid: this.commentDetail.wid,
  12304. img: url,
  12305. },
  12306. ];
  12307. this.ajax
  12308. .post(this.$store.state.api + "updateCourseWorks", params)
  12309. .then((res) => {
  12310. this.$message({
  12311. message: "提交成功",
  12312. type: "success",
  12313. });
  12314. this.drawShow = false;
  12315. this.bg = "";
  12316. this.selectSWorks();
  12317. this.selectStudent();
  12318. })
  12319. .catch((err) => {
  12320. this.$message.error("提交失败");
  12321. console.error(err);
  12322. });
  12323. },
  12324. deletePicturePaint() {
  12325. this.$confirm("确定删除此批注吗?", "提示", {
  12326. confirmButtonText: "确定",
  12327. cancelButtonText: "取消",
  12328. type: "warning",
  12329. })
  12330. .then(() => {
  12331. let params = [
  12332. {
  12333. wid: this.commentDetail.wid,
  12334. img: "",
  12335. },
  12336. ];
  12337. this.ajax
  12338. .post(this.$store.state.api + "updateCourseWorks", params)
  12339. .then((res) => {
  12340. this.$message({
  12341. message: "删除成功",
  12342. type: "success",
  12343. });
  12344. this.selectSWorks();
  12345. this.selectStudent();
  12346. })
  12347. .catch((err) => {
  12348. this.$message.error("删除失败");
  12349. console.error(err);
  12350. });
  12351. })
  12352. .catch(() => { });
  12353. },
  12354. getAudioVideo(constraintsData) {
  12355. if (navigator.mediaDevices === undefined) {
  12356. navigator.mediaDevices = {};
  12357. }
  12358. if (navigator.mediaDevices.getUserMedia === undefined) {
  12359. navigator.mediaDevices.getUserMedia = function (constraints) {
  12360. // 首先,如果有getUserMedia的话,就获得它
  12361. var getUserMedia =
  12362. navigator.getUserMedia ||
  12363. navigator.webkitGetUserMedia ||
  12364. navigator.mozGetUserMedia ||
  12365. navigator.msGetUserMedia;
  12366. // 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
  12367. if (!getUserMedia) {
  12368. return Promise.reject({ code: 404 });
  12369. }
  12370. // 否则,为老的navigator.getUserMedia方法包裹一个Promise
  12371. return new Promise(function (resolve, reject) {
  12372. getUserMedia.call(navigator, constraints, resolve, reject);
  12373. });
  12374. };
  12375. }
  12376. return navigator.mediaDevices.getUserMedia(constraintsData);
  12377. },
  12378. /**
  12379. * 开始录制
  12380. */
  12381. startRecording(callback) {
  12382. let _function = (screenStream) => {
  12383. this.addStreamStopListener(screenStream, () => {
  12384. console.log("流停止监听");
  12385. this.stopRecording();
  12386. this.$emit("streamStop", {});
  12387. // this.stopRecording();
  12388. });
  12389. var options = {
  12390. type: "video",
  12391. mimeType: "video/webm",
  12392. disableLogs: false,
  12393. getNativeBlob: false, // enable it for longer recordings
  12394. ignoreMutedMedia: false,
  12395. };
  12396. // this.video.srcObject = screenStream;
  12397. this.recorder = RecordRTC(screenStream, options);
  12398. this.recorder.startRecording();
  12399. this.recorder.screen = screenStream;
  12400. this.videoStart = true;
  12401. // callback(true);
  12402. };
  12403. this.getAudioVideo({ audio: true })
  12404. .then((res) => {
  12405. this.captureScreen(_function, true);
  12406. console.log("已点击允许,开启成功");
  12407. })
  12408. .catch((err) => {
  12409. // console.log('浏览器不支持,请更换浏览器')
  12410. // } else {
  12411. this.captureScreen(_function, false);
  12412. console.log("请检查是否存在麦克风");
  12413. });
  12414. },
  12415. /**
  12416. * 停止录制
  12417. */
  12418. stopRecording(callback) {
  12419. this.recorder.stopRecording(() => {
  12420. // this.video.src = this.video.srcObject = null;
  12421. // this.video.src = URL.createObjectURL(this.recorder.getBlob());
  12422. const url = URL.createObjectURL(this.recorder.getBlob());
  12423. const a = document.createElement("a"); //this.fileName+
  12424. let videoFile = new File(
  12425. [this.recorder.getBlob()],
  12426. this.courseDetail.title + "录屏.mp4",
  12427. {
  12428. type: "video/mp4",
  12429. }
  12430. );
  12431. let downloadUrl = URL.createObjectURL(videoFile);
  12432. document.body.appendChild(a);
  12433. a.style.display = "none";
  12434. a.href = url;
  12435. a.download = this.courseDetail.title + "录屏.mp4"; //this.fileName +
  12436. a.click();
  12437. this.recorder.screen.stop();
  12438. this.recorder.destroy();
  12439. this.recorder = null;
  12440. this.videoStart = false;
  12441. // callback(false);
  12442. });
  12443. },
  12444. //初始化
  12445. captureScreen(callback, type) {
  12446. if (navigator.getDisplayMedia) {
  12447. //录制结束,文件下载
  12448. navigator
  12449. .getDisplayMedia({
  12450. video: true,
  12451. })
  12452. .then((screenStream) => {
  12453. if (type) {
  12454. navigator.mediaDevices
  12455. .getUserMedia({ audio: true })
  12456. .then((mic) => {
  12457. screenStream.addTrack(mic.getTracks()[0]);
  12458. callback(screenStream);
  12459. });
  12460. } else {
  12461. callback(screenStream);
  12462. }
  12463. })
  12464. .catch(function (error) {
  12465. console.log("error", error);
  12466. });
  12467. } else if (navigator.mediaDevices.getDisplayMedia) {
  12468. navigator.mediaDevices
  12469. .getDisplayMedia({
  12470. video: true,
  12471. })
  12472. .then((screenStream) => {
  12473. if (type) {
  12474. navigator.mediaDevices
  12475. .getUserMedia({ audio: true })
  12476. .then((mic) => {
  12477. screenStream.addTrack(mic.getTracks()[0]);
  12478. callback(screenStream);
  12479. });
  12480. } else {
  12481. callback(screenStream);
  12482. }
  12483. })
  12484. .catch(function (error) {
  12485. console.log("error", error);
  12486. });
  12487. } else {
  12488. var error = "getDisplayMedia API are not supported in this browser.";
  12489. console.log("error", error);
  12490. alert(error);
  12491. }
  12492. },
  12493. //流监听
  12494. addStreamStopListener(stream, callback) {
  12495. stream.addEventListener(
  12496. "ended",
  12497. function () {
  12498. callback();
  12499. callback = function () { };
  12500. },
  12501. false
  12502. );
  12503. stream.addEventListener(
  12504. "inactive",
  12505. function () {
  12506. callback();
  12507. callback = function () { };
  12508. },
  12509. false
  12510. );
  12511. stream.getTracks().forEach(function (track) {
  12512. track.addEventListener(
  12513. "ended",
  12514. function () {
  12515. callback();
  12516. callback = function () { };
  12517. },
  12518. false
  12519. );
  12520. track.addEventListener(
  12521. "inactive",
  12522. function () {
  12523. callback();
  12524. callback = function () { };
  12525. },
  12526. false
  12527. );
  12528. });
  12529. },
  12530. updateGroup() {
  12531. this.groupJson2 = JSON.parse(JSON.stringify(this.groupJson));
  12532. this.dialogVisibleGroup2 = true;
  12533. },
  12534. updateGroupJson() {
  12535. for (var i = 0; i < this.groupStudentUid[this.toolindex].length; i++) {
  12536. if (
  12537. this.groupStudentUid[this.toolindex][i].length >
  12538. this.groupJson2.number
  12539. ) {
  12540. this.$message.error("已经有小组比你设置的人数多,请重新设置");
  12541. return;
  12542. }
  12543. }
  12544. this.groupJson = JSON.parse(JSON.stringify(this.groupJson2));
  12545. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
  12546. this.taskCount
  12547. ].toolChoose[this.toolindex].groupJson = this.groupJson;
  12548. let params = [
  12549. {
  12550. cid: this.id,
  12551. chapters: JSON.stringify(this.chapInfoList),
  12552. uid: this.userid,
  12553. unitIndex: this.courseType,
  12554. },
  12555. ];
  12556. this.ajax
  12557. .post(this.$store.state.api + "updateWorkNew4", params)
  12558. .then((res) => {
  12559. this.$message.success("设置成功");
  12560. this.getCourseDetail(2);
  12561. this.dialogVisibleGroup2 = false;
  12562. this.groupJson2 = {};
  12563. this.$forceUpdate();
  12564. })
  12565. .catch((err) => {
  12566. this.$message.error("网络不佳");
  12567. console.error(err);
  12568. });
  12569. },
  12570. lockChair() {
  12571. this.groupJson2 = JSON.parse(JSON.stringify(this.groupJson));
  12572. this.groupJson2.islock = this.groupJson2.islock == 1 ? 2 : 1;
  12573. this.updateGroupJson();
  12574. },
  12575. selectGroup(index) {
  12576. this.getCourseDetail(2, index);
  12577. },
  12578. joinGroup(index) {
  12579. if (this.groupJson.islock == 2) {
  12580. this.$message.error("位置已被锁定,无法加入");
  12581. return;
  12582. }
  12583. if (
  12584. this.groupStudent[this.toolindex][index].length >
  12585. this.groupJson.number ||
  12586. this.groupStudent[this.toolindex][index].length == this.groupJson.number
  12587. ) {
  12588. this.$message.error("位置已满,无法加入");
  12589. return;
  12590. }
  12591. let params = [
  12592. {
  12593. cid: this.id,
  12594. stage: this.courseType,
  12595. task: this.taskCount,
  12596. tool: this.toolindex,
  12597. g: index,
  12598. uid: this.userid,
  12599. },
  12600. ];
  12601. this.ajax
  12602. .post(this.$store.state.api + "joinGroup", params)
  12603. .then((res) => {
  12604. this.$message.success("加入成功");
  12605. this.getCourseDetail();
  12606. })
  12607. .catch((err) => {
  12608. this.$message.error("网络不佳");
  12609. console.error(err);
  12610. });
  12611. },
  12612. exitGroup(id) {
  12613. if (this.groupJson.islock == 2) {
  12614. this.$message.error("位置已被锁定,无法退出");
  12615. return;
  12616. }
  12617. let params = [
  12618. {
  12619. gid: id,
  12620. },
  12621. ];
  12622. this.ajax
  12623. .post(this.$store.state.api + "exitGroup", params)
  12624. .then((res) => {
  12625. this.$message.success("退出成功");
  12626. this.getCourseDetail();
  12627. })
  12628. .catch((err) => {
  12629. this.$message.error("网络不佳");
  12630. console.error(err);
  12631. });
  12632. },
  12633. groupUpload(index, task, gindex) {
  12634. this.taskCount = task;
  12635. this.toolindex = index;
  12636. this.groupIndex = gindex;
  12637. this.dialogVisibleGroupWork = true;
  12638. },
  12639. updateGroupChair(user) {
  12640. this.updateGroupArray = this.groupJson.group.filter((el, index) => {
  12641. el.label = index;
  12642. return index != user.group;
  12643. });
  12644. this.updateGroupUser = user;
  12645. this.dialogVisibleUpdateGroup = true;
  12646. },
  12647. updateChair() {
  12648. if (
  12649. this.groupStudent[this.toolindex][this.checkChair].length >
  12650. this.groupJson.number ||
  12651. this.groupStudent[this.toolindex][this.checkChair].length ==
  12652. this.groupJson.number
  12653. ) {
  12654. this.$message.error("位置已满,无法加入");
  12655. return;
  12656. }
  12657. let params = [
  12658. {
  12659. cid: this.id,
  12660. stage: this.courseType,
  12661. task: this.taskCount,
  12662. tool: this.toolindex,
  12663. g: this.checkChair,
  12664. uid: this.updateGroupUser.userid,
  12665. },
  12666. ];
  12667. this.ajax
  12668. .post(this.$store.state.api + "joinGroup", params)
  12669. .then((res) => {
  12670. this.$message.success("修改成功");
  12671. this.updateGroupUser = {};
  12672. this.checkChair = "";
  12673. this.updateGroupArray = {};
  12674. this.dialogVisibleUpdateGroup = false;
  12675. this.getCourseDetail();
  12676. })
  12677. .catch((err) => {
  12678. this.$message.error("网络不佳");
  12679. console.error(err);
  12680. });
  12681. },
  12682. deleteGroupChair(gindex) {
  12683. this.checkDeleteGroup = [];
  12684. this.deleteGroupUser = JSON.parse(
  12685. JSON.stringify(this.groupStudent[this.toolindex][gindex])
  12686. );
  12687. this.deleteGroupArray = this.groupJson.group[gindex];
  12688. this.groupIndex = gindex;
  12689. this.dialogVisibleDeleteGroup = true;
  12690. },
  12691. async deleteChair() {
  12692. for (let i = 0; i < this.checkDeleteGroup.length; i++) {
  12693. const gid =
  12694. this.groupStudent[this.toolindex][this.groupIndex][
  12695. this.groupStudentUid[this.toolindex][this.groupIndex].indexOf(
  12696. this.checkDeleteGroup[i]
  12697. )
  12698. ];
  12699. let params = [
  12700. {
  12701. gid: gid.id,
  12702. },
  12703. ];
  12704. var a = await this.deleteChairA(params);
  12705. if (i == this.checkDeleteGroup.length - 1) {
  12706. this.$message.success("退出成功");
  12707. this.dialogVisibleDeleteGroup = false;
  12708. this.deleteGroupUser = [];
  12709. this.deleteGroupArray = {};
  12710. this.groupIndex = "";
  12711. this.checkDeleteGroup = [];
  12712. this.getCourseDetail();
  12713. }
  12714. }
  12715. },
  12716. deleteChairA(params) {
  12717. return new Promise((resolve, reject) => {
  12718. this.ajax
  12719. .post(this.$store.state.api + "exitGroup", params)
  12720. .then((res) => {
  12721. resolve(1);
  12722. })
  12723. .catch((err) => {
  12724. this.$message.error("网络不佳");
  12725. console.error(err);
  12726. });
  12727. });
  12728. },
  12729. contract(i) {
  12730. if (this.isCloseList[i].isClose == 0) {
  12731. this.isCloseList[i].isClose = 1;
  12732. } else {
  12733. this.isCloseList[i].isClose = 0;
  12734. }
  12735. this.$forceUpdate();
  12736. },
  12737. openTools2(i) {
  12738. this.$message.error('暂未开放')
  12739. return;
  12740. },
  12741. addTools2(i) {
  12742. if (i == 4) {
  12743. // this.openTools2(4);
  12744. this.$message.error('暂未开放')
  12745. return;
  12746. }
  12747. if (i == 45) {
  12748. // this.openTools2(45);
  12749. this.$message.error('暂未开放')
  12750. return;
  12751. }
  12752. if (i == 47) {
  12753. // this.openTools2(47);
  12754. this.$message.error('暂未开放')
  12755. return;
  12756. }
  12757. if (i == 49) {
  12758. // this.openTools2(49);
  12759. this.$message.error('暂未开放')
  12760. return;
  12761. }
  12762. if (i == 62) {
  12763. // this.openTools(itemTaskIndex, 62, toolIndex);
  12764. this.$message.error('暂未开放')
  12765. return;
  12766. }
  12767. if (i == 15) {
  12768. // this.openTools(itemTaskIndex, 15, toolIndex);
  12769. this.$message.error('暂未开放')
  12770. return;
  12771. }
  12772. if (i == 40) {
  12773. // this.openTools(itemTaskIndex, 40, toolIndex);
  12774. this.$message.error('暂未开放')
  12775. return;
  12776. }
  12777. if (i == 41) {
  12778. // this.openTools(itemTaskIndex, 41, toolIndex);
  12779. this.$message.error('暂未开放')
  12780. return;
  12781. }
  12782. if (i == 42) {
  12783. // this.openTools(itemTaskIndex, 42, toolIndex);
  12784. this.$message.error('暂未开放')
  12785. return;
  12786. }
  12787. if (
  12788. this.checktoolArray.length > 0
  12789. ) {
  12790. if (
  12791. this.checktoolArray.indexOf(i) != -1
  12792. ) {
  12793. this.checktoolArray.splice(
  12794. this.checktoolArray.indexOf(i),
  12795. 1
  12796. );
  12797. } else {
  12798. this.checktoolArray = [];
  12799. this.checktoolArray.push(i);
  12800. }
  12801. } else {
  12802. this.checktoolArray.push(i);
  12803. }
  12804. this.$forceUpdate();
  12805. },
  12806. addToolChoose() {
  12807. if (!this.checktoolArray.length) {
  12808. this.$message.error('请选择要添加的任务')
  12809. return;
  12810. }
  12811. if (!this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[0].tool.length) {
  12812. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[0].tool = this.checktoolArray
  12813. } else {
  12814. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose.push({
  12815. tool: this.checktoolArray,
  12816. toolDetail: "",
  12817. toolType: 0,
  12818. askCount: 1,
  12819. askTitle: "",
  12820. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  12821. })
  12822. }
  12823. let params = [
  12824. {
  12825. cid: this.id,
  12826. chapters: JSON.stringify(this.chapInfoList),
  12827. uid: this.userid,
  12828. unitIndex: this.courseType,
  12829. },
  12830. ];
  12831. this.ajax
  12832. .post(this.$store.state.api + "updateWorkNew4", params)
  12833. .then((res) => {
  12834. this.$message({
  12835. message: "添加成功",
  12836. type: "success",
  12837. });
  12838. this.checktoolArray = []
  12839. this.getCourseDetail(3)
  12840. this.checkBz(this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose.length - 1)
  12841. this.$forceUpdate()
  12842. })
  12843. .catch((err) => {
  12844. console.error(err);
  12845. });
  12846. },
  12847. updateToolDetail() {
  12848. if (!this.isUpdateToolDetail) {
  12849. this.isUpdateToolDetail = true
  12850. this.updateToolDetailInner = JSON.parse(JSON.stringify(this.tool.toolDetail))
  12851. } else {
  12852. this.chapInfoList[this.courseType].chapterInfo[0].taskJson[this.taskCount].toolChoose[this.toolIndex].toolDetail = JSON.parse(JSON.stringify(this.updateToolDetailInner))
  12853. let params = [
  12854. {
  12855. cid: this.id,
  12856. chapters: JSON.stringify(this.chapInfoList),
  12857. uid: this.userid,
  12858. unitIndex: this.courseType,
  12859. },
  12860. ];
  12861. this.ajax
  12862. .post(this.$store.state.api + "updateWorkNew4", params)
  12863. .then((res) => {
  12864. this.isUpdateToolDetail = false
  12865. this.$message({
  12866. message: "修改成功",
  12867. type: "success",
  12868. });
  12869. this.updateToolDetailInner = ''
  12870. this.getCourseDetail(3)
  12871. this.$forceUpdate()
  12872. })
  12873. .catch((err) => {
  12874. console.error(err);
  12875. });
  12876. }
  12877. },
  12878. },
  12879. directives: {
  12880. // 使用局部注册指令的方式
  12881. resize: {
  12882. // 指令的名称
  12883. bind(el, binding) {
  12884. // el为绑定的元素,binding为绑定给指令的对象
  12885. let width = "",
  12886. height = "";
  12887. function isReize() {
  12888. const style = document.defaultView.getComputedStyle(el);
  12889. if (width !== style.width || height !== style.height) {
  12890. binding.value(); // 关键
  12891. }
  12892. width = style.width;
  12893. height = style.height;
  12894. }
  12895. el.__vueSetInterval__ = setInterval(isReize, 300);
  12896. },
  12897. unbind(el) {
  12898. clearInterval(el.__vueSetInterval__);
  12899. },
  12900. },
  12901. },
  12902. beforeDestroy() {
  12903. window.onresize = null;
  12904. clearInterval(this.timer);
  12905. this.timer = null;
  12906. clearInterval(this.opertimer);
  12907. this.opertimer = null;
  12908. },
  12909. computed: {
  12910. contentConvent() {
  12911. return function (c) {
  12912. return c
  12913. ? c
  12914. .replaceAll(/\r\n/g, "<br/>")
  12915. .replaceAll(/\n/g, "<br/>")
  12916. .replaceAll(/\s/g, " &nbsp")
  12917. : "";
  12918. };
  12919. },
  12920. checkUpload() {
  12921. return function () {
  12922. var studentK = [];
  12923. if (this.plworkFile.length > 0) {
  12924. for (var z = 0; z < this.plworkFile.length; z++) {
  12925. studentK.push(this.plworkFile[z].username);
  12926. }
  12927. studentK = studentK.join(",");
  12928. }
  12929. var a = this.uploadStudentJuri.filter((el) => {
  12930. return studentK.indexOf(el.userid) == -1
  12931. });
  12932. return a
  12933. }
  12934. },
  12935. getSName() {
  12936. return function (name) {
  12937. var check = name;
  12938. this.uploadStudentJuri.forEach((el) => {
  12939. if (el.userid == check) {
  12940. check = el.name ? el.name : el.username
  12941. }
  12942. });
  12943. return check;
  12944. };
  12945. }
  12946. },
  12947. mounted() {
  12948. if (this.screenType == 2) {
  12949. window.parent.postMessage({ allScreen: 4 }, "*");
  12950. } else if (this.screenType == 3) {
  12951. window.parent.postMessage({ allScreen: 5 }, "*");
  12952. } else if (this.screenType == 1) {
  12953. window.parent.postMessage({ allScreen: 6 }, "*");
  12954. }
  12955. this.setOperationTime();
  12956. this.selectEva();
  12957. this.getCourseDetail();
  12958. this.selectCount();
  12959. this.getHomeWork();
  12960. this.toolIndex = null
  12961. this.contentDialog = true;
  12962. this.setContent2(true)
  12963. if (this.tType == 4) {
  12964. this.pzDialog = true;
  12965. this.selectPz();
  12966. }
  12967. document.scrollingElement.scrollTop = 0;
  12968. window.addEventListener("resize", () => {
  12969. var a = document.getElementsByClassName("box_course")[0].offsetHeight;
  12970. // document.getElementsByClassName("vedioList")[0].style.height = a + "px";
  12971. document.getElementsByClassName("navBox")[0].style.height = a - 40 + "px";
  12972. });
  12973. let _this = this;
  12974. setTimeout(() => {
  12975. // _this.vedioTime = [];
  12976. // for (var i = 0; i < _this.vedio[_this.taskCount].length; i++) {
  12977. // _this.vedioTime[i] = document.getElementsByClassName(
  12978. // "vjs-duration-display"
  12979. // )[i].textContent;
  12980. // }
  12981. }, 1000);
  12982. },
  12983. };
  12984. </script>
  12985. <style scoped>
  12986. @media screen and (max-width: 1280px) {
  12987. /* .courseIndex > div:first-child(2) {
  12988. width: 15% !important;
  12989. } */
  12990. /* .navText {
  12991. width: 120px !important;
  12992. } */
  12993. .evaCss {
  12994. flex-direction: column !important;
  12995. align-items: center !important;
  12996. }
  12997. .dialog_diy1>>>.el-dialog {
  12998. width: 100% !important;
  12999. }
  13000. .rightWidthCss {
  13001. width: 100% !important;
  13002. }
  13003. .dialog_diy3>>>.el-dialog {
  13004. width: 100% !important;
  13005. }
  13006. /* .textTitle >>> .el-form-item__label {
  13007. width: 150px !important;
  13008. } */
  13009. }
  13010. .evaCssMax {
  13011. flex-direction: column !important;
  13012. align-items: center !important;
  13013. }
  13014. .dialog_diy>>>.el-dialog {
  13015. margin-top: 10vh !important;
  13016. }
  13017. .body_student {
  13018. width: 77%;
  13019. height: 100%;
  13020. position: absolute;
  13021. left: 22%;
  13022. top: 0;
  13023. }
  13024. .student_head {
  13025. width: 100%;
  13026. margin: 0 auto;
  13027. padding: 20px 0 0;
  13028. display: flex;
  13029. flex-direction: column;
  13030. flex-wrap: nowrap;
  13031. align-items: flex-start;
  13032. justify-content: flex-start;
  13033. }
  13034. .pb_left {
  13035. width: 20%;
  13036. margin-right: 10px;
  13037. background: rgb(255, 255, 255);
  13038. padding-right: 10px;
  13039. position: fixed;
  13040. height: 100%;
  13041. }
  13042. .wheel>img,
  13043. .project>img,
  13044. .star>img,
  13045. .evaluate>img,
  13046. .up_photo>img,
  13047. .chapter_add>img,
  13048. .deleteWord>img,
  13049. .question>img,
  13050. .homework>img {
  13051. width: 100%;
  13052. height: 100%;
  13053. }
  13054. .upCover>img {
  13055. width: 131px;
  13056. height: 69px;
  13057. object-fit: cover;
  13058. }
  13059. .upCover {
  13060. width: calc(100% / 3.5);
  13061. position: relative;
  13062. margin: 0 15px 10px 0;
  13063. display: flex;
  13064. flex-direction: column;
  13065. flex-wrap: nowrap;
  13066. justify-content: center;
  13067. align-content: center;
  13068. align-items: center;
  13069. height: fit-content;
  13070. }
  13071. .upCover2 {
  13072. width: 100%;
  13073. position: relative;
  13074. margin: 0 15px 10px 0;
  13075. display: flex;
  13076. flex-direction: column;
  13077. flex-wrap: nowrap;
  13078. justify-content: center;
  13079. align-content: center;
  13080. align-items: center;
  13081. }
  13082. .upCover2>img {
  13083. width: 100%;
  13084. height: 90px;
  13085. object-fit: contain;
  13086. }
  13087. .chapter_add {
  13088. width: 120px;
  13089. position: relative;
  13090. text-align: center;
  13091. }
  13092. .isAddThings {
  13093. margin-top: 20px;
  13094. position: relative;
  13095. text-align: center;
  13096. background: #f7f8fa;
  13097. height: 90px;
  13098. width: 90px;
  13099. display: flex;
  13100. flex-direction: column;
  13101. justify-content: center;
  13102. }
  13103. .deleteWord {
  13104. width: 22px;
  13105. height: 22px;
  13106. position: absolute;
  13107. right: -5px;
  13108. top: -5px;
  13109. cursor: pointer;
  13110. }
  13111. .box_course {
  13112. /* width: 60%; */
  13113. width: 81%;
  13114. }
  13115. .wheel {
  13116. width: 100%;
  13117. /* height: 100%; */
  13118. height: 650px;
  13119. }
  13120. .right_box {
  13121. display: flex;
  13122. flex-direction: column;
  13123. margin-left: 30px;
  13124. justify-content: space-around;
  13125. }
  13126. .right_box_title {
  13127. font-size: 23px;
  13128. }
  13129. .people {
  13130. display: flex;
  13131. }
  13132. .student_body {
  13133. width: 100%;
  13134. margin: 0 auto;
  13135. margin-top: 10px;
  13136. padding: 0 0 20px;
  13137. }
  13138. .study_top {
  13139. margin-top: 70px;
  13140. width: 100%;
  13141. /* overflow: auto; */
  13142. height: auto;
  13143. }
  13144. .study_top .checkbox {
  13145. display: flex;
  13146. align-items: center;
  13147. padding: 15px 0 15px 30px;
  13148. flex: 0 0 auto;
  13149. font-weight: bold;
  13150. border-bottom: 1px solid #eee;
  13151. }
  13152. .study_top .check {
  13153. padding-bottom: 5px;
  13154. text-align: center;
  13155. cursor: pointer;
  13156. height: 30px;
  13157. box-sizing: border-box;
  13158. display: flex;
  13159. }
  13160. .study_top .checked {
  13161. border-bottom: 4px solid #3fc6a0;
  13162. padding-bottom: 5px;
  13163. color: #3fc6a0;
  13164. display: flex;
  13165. height: 35px;
  13166. }
  13167. .study_top .checked>div,
  13168. .study_top .check>div {
  13169. margin-right: 5px;
  13170. }
  13171. .videoTop {
  13172. display: flex;
  13173. flex-direction: row;
  13174. justify-content: space-between;
  13175. background: #fff;
  13176. align-items: center;
  13177. width: 95%;
  13178. padding: 20px;
  13179. }
  13180. .upbtn {
  13181. margin: 25px;
  13182. background: #70afdb;
  13183. color: #fff;
  13184. width: 120px;
  13185. text-align: center;
  13186. height: 30px;
  13187. line-height: 30px;
  13188. font-size: 13px;
  13189. border-radius: 5px;
  13190. cursor: pointer;
  13191. }
  13192. .filebox {
  13193. display: flex;
  13194. flex-wrap: wrap;
  13195. flex-direction: column;
  13196. padding: 15px 0 5px;
  13197. }
  13198. .filebox .tooldetail {
  13199. width: 100%;
  13200. margin: 0px 12px;
  13201. background: rgb(247, 247, 247);
  13202. padding: 20px;
  13203. line-height: 30px;
  13204. word-break: break-word;
  13205. }
  13206. .file {
  13207. display: flex;
  13208. flex-direction: column;
  13209. align-items: center;
  13210. justify-content: center;
  13211. cursor: pointer;
  13212. width: 200px;
  13213. }
  13214. .file div {
  13215. margin-top: 10px;
  13216. width: 150px;
  13217. text-align: center;
  13218. overflow: hidden;
  13219. white-space: nowrap;
  13220. text-overflow: ellipsis;
  13221. }
  13222. .media {
  13223. display: flex;
  13224. flex-direction: column;
  13225. align-items: center;
  13226. justify-content: center;
  13227. margin: 0 20px 20px 0;
  13228. cursor: pointer;
  13229. margin: 12px 0 5px 15px;
  13230. overflow: hidden;
  13231. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%),
  13232. 0px 2px 1px -1px rgb(0 0 0 / 12%);
  13233. box-sizing: border-box;
  13234. }
  13235. .media img {
  13236. height: 90px;
  13237. width: 160px;
  13238. object-fit: cover;
  13239. }
  13240. .media .title {
  13241. padding: 5px;
  13242. text-align: left;
  13243. width: 100%;
  13244. box-sizing: border-box;
  13245. }
  13246. .media .btn {
  13247. width: 100%;
  13248. height: 35px;
  13249. line-height: 35px;
  13250. color: #fff;
  13251. background: #606060;
  13252. text-align: center;
  13253. overflow: hidden;
  13254. white-space: nowrap;
  13255. text-overflow: ellipsis;
  13256. }
  13257. .detail_content_top {
  13258. width: 100%;
  13259. padding: 25px 0 25px 0;
  13260. }
  13261. .detail_title {
  13262. text-align: center;
  13263. font-size: 24px;
  13264. }
  13265. .detail_time {
  13266. font-size: 13px;
  13267. padding: 15px 0 0 40px;
  13268. }
  13269. .detail_content {
  13270. line-height: 2pc;
  13271. width: 90%;
  13272. margin: 0 auto;
  13273. padding-top: 30px;
  13274. text-indent: 30px;
  13275. overflow: auto;
  13276. height: 200px;
  13277. }
  13278. .score_box>>>.el-rate {
  13279. margin-left: 10px;
  13280. }
  13281. .dialog_change>>>.el-dialog {
  13282. border-radius: 5px;
  13283. }
  13284. .dialog_change>>>.el-dialog__header {
  13285. background: #f2f2f2;
  13286. text-align: center;
  13287. }
  13288. .dialog_change>>>.el-dialog__title {
  13289. line-height: 5px;
  13290. }
  13291. .dialog_change>>>.el-dialog__body {
  13292. background: #fff;
  13293. padding: 10px 20px;
  13294. }
  13295. .score_box {
  13296. display: flex;
  13297. align-items: center;
  13298. margin-bottom: 18px;
  13299. margin-top: 20px;
  13300. }
  13301. .up_photo {
  13302. width: 120px;
  13303. cursor: pointer;
  13304. margin-top: 10px;
  13305. }
  13306. .up_photo2 {
  13307. width: 180px;
  13308. box-sizing: border-box;
  13309. min-width: 180px;
  13310. height: 180px;
  13311. max-height: 180px;
  13312. min-height: 180px;
  13313. cursor: pointer;
  13314. display: flex;
  13315. flex-direction: column;
  13316. align-items: center;
  13317. justify-content: center;
  13318. background: rgb(242, 246, 255);
  13319. /* padding: 25px; */
  13320. margin-bottom: 10px;
  13321. }
  13322. .up_photo2 img {
  13323. width: 50%;
  13324. height: auto;
  13325. }
  13326. .up_photo2 span {
  13327. color: #898989;
  13328. }
  13329. .plworkBox {
  13330. display: flex;
  13331. align-items: center;
  13332. margin-top: 10px;
  13333. flex-wrap: wrap;
  13334. }
  13335. .upload_send {
  13336. margin: 30px auto 30px;
  13337. width: 60%;
  13338. background: #169bd6;
  13339. text-align: center;
  13340. height: 35px;
  13341. line-height: 35px;
  13342. color: #fff;
  13343. border-radius: 5px;
  13344. cursor: pointer;
  13345. }
  13346. .marginT {
  13347. margin-top: 20px;
  13348. }
  13349. .cd_content_steps {
  13350. display: flex;
  13351. width: 90%;
  13352. justify-content: space-around;
  13353. border-top: 1px solid #eeeeee;
  13354. }
  13355. .cd_steps_box {
  13356. display: flex;
  13357. justify-content: center;
  13358. align-items: center;
  13359. flex-direction: column;
  13360. cursor: pointer;
  13361. }
  13362. .first {
  13363. display: flex;
  13364. align-items: center;
  13365. margin: 15px 0 20px 0;
  13366. font-size: 20px;
  13367. }
  13368. .first>div:nth-child(2) {
  13369. font-size: 16px !important;
  13370. padding-left: 10px;
  13371. line-height: 26px;
  13372. box-sizing: border-box;
  13373. }
  13374. .blue_box_one {
  13375. text-align: center;
  13376. color: #fff;
  13377. background-image: linear-gradient(90deg, #477cd7, #65b9fc);
  13378. border-radius: 7px;
  13379. margin: 10px;
  13380. cursor: pointer;
  13381. width: 95%;
  13382. height: 45px;
  13383. display: flex;
  13384. flex-direction: row;
  13385. justify-content: flex-start;
  13386. align-items: center;
  13387. }
  13388. .blue_box_one>div:nth-child(1) {
  13389. line-height: 30px;
  13390. margin: 0 5px 0 10px;
  13391. width: 30%;
  13392. min-width: 70px;
  13393. border-radius: 4px;
  13394. }
  13395. .blue_box_one>div:nth-child(2) {
  13396. white-space: nowrap;
  13397. text-overflow: ellipsis;
  13398. overflow: hidden;
  13399. word-break: break-all;
  13400. width: 70%;
  13401. text-align: left;
  13402. margin-right: 10px;
  13403. max-width: calc(100% - 85px);
  13404. }
  13405. .blue_box_one>div:nth-child(2):hover {
  13406. overflow: hidden;
  13407. text-overflow: ellipsis;
  13408. white-space: nowrap;
  13409. cursor: pointer;
  13410. }
  13411. .upFile {
  13412. margin: 0 auto;
  13413. width: 120px;
  13414. background: #70afdb;
  13415. color: #fff;
  13416. height: 30px;
  13417. text-align: center;
  13418. line-height: 30px;
  13419. border-radius: 5px;
  13420. font-size: 14px;
  13421. cursor: pointer;
  13422. }
  13423. .courseTitle {
  13424. background: #205cc6;
  13425. width: 85%;
  13426. margin: 10px auto;
  13427. color: #fff;
  13428. border-radius: 5px;
  13429. padding: 10px 10px;
  13430. display: flex;
  13431. flex-direction: row;
  13432. align-items: center;
  13433. justify-content: space-between;
  13434. text-align: center;
  13435. }
  13436. .courseTitle .ctitle {
  13437. font-weight: bold;
  13438. font-size: 20px;
  13439. white-space: nowrap;
  13440. overflow: hidden;
  13441. text-overflow: ellipsis;
  13442. }
  13443. .courseTitle .inviteBox {
  13444. font-size: 14px;
  13445. margin-top: 5px;
  13446. color: #a6cbff;
  13447. }
  13448. .courseTitle>>>.el-tooltip {
  13449. width: 100%;
  13450. white-space: nowrap;
  13451. overflow: hidden;
  13452. text-overflow: ellipsis;
  13453. word-break: break-word;
  13454. }
  13455. .ml {
  13456. margin-left: 20px;
  13457. color: #5b7dba;
  13458. border-left: 3px solid #5b7dba;
  13459. padding-left: 5px;
  13460. font-weight: bold;
  13461. }
  13462. .return {
  13463. width: 2rem;
  13464. height: 2rem;
  13465. cursor: pointer;
  13466. }
  13467. .return>img {
  13468. width: 100%;
  13469. height: 100%;
  13470. }
  13471. .returnBtn {
  13472. background: #499eef;
  13473. width: 65px;
  13474. height: 30px;
  13475. color: #fff;
  13476. text-align: center;
  13477. line-height: 32px;
  13478. margin-right: 20px;
  13479. cursor: pointer;
  13480. border-radius: 5px;
  13481. font-size: 14px;
  13482. }
  13483. .tool {
  13484. display: flex;
  13485. flex-direction: column;
  13486. flex-wrap: nowrap;
  13487. width: 13%;
  13488. margin: 0 30px;
  13489. align-items: center;
  13490. }
  13491. .whiteBIcon {
  13492. width: 150px;
  13493. cursor: pointer;
  13494. }
  13495. .whiteBIcon>img {
  13496. width: 100%;
  13497. height: 100%;
  13498. }
  13499. .mask {
  13500. background-color: rgba(0, 0, 0, 0);
  13501. position: fixed;
  13502. top: 0;
  13503. left: 0;
  13504. width: 100%;
  13505. height: 100%;
  13506. z-index: 20000;
  13507. display: flex;
  13508. align-items: center;
  13509. justify-content: center;
  13510. }
  13511. .progressBox {
  13512. width: 500px;
  13513. height: 180px;
  13514. background: #fff;
  13515. border-radius: 10px;
  13516. box-shadow: 0 0 6px 1px #bfbfbf;
  13517. display: flex;
  13518. align-items: center;
  13519. justify-content: center;
  13520. flex-direction: column;
  13521. position: relative;
  13522. color: #6c6c6c;
  13523. }
  13524. .progressBox>>>.el-progress-bar__outer {
  13525. background-color: #d1dfff !important;
  13526. }
  13527. .progressBox .lbox {
  13528. height: 50px;
  13529. font-size: 19px;
  13530. display: flex;
  13531. align-items: center;
  13532. color: #747474;
  13533. }
  13534. .progressBox .lbox img {
  13535. width: 40px;
  13536. margin-right: 20px;
  13537. }
  13538. .closeCss {
  13539. position: absolute;
  13540. top: 8px;
  13541. right: 8px;
  13542. cursor: pointer;
  13543. width: 20px;
  13544. height: 20px;
  13545. }
  13546. .closeCss>img {
  13547. width: 100%;
  13548. height: 100%;
  13549. }
  13550. .uploadVedio {
  13551. display: flex;
  13552. flex-direction: column;
  13553. flex-wrap: nowrap;
  13554. justify-content: center;
  13555. align-items: center;
  13556. margin: 0 15px 10px 0;
  13557. }
  13558. .uploadVedio>img {
  13559. width: 30px;
  13560. height: 30px;
  13561. }
  13562. .uploadVedio>span {
  13563. white-space: nowrap;
  13564. overflow: hidden;
  13565. text-overflow: ellipsis;
  13566. width: 75px;
  13567. margin-top: 7px;
  13568. }
  13569. .picName {
  13570. white-space: nowrap;
  13571. overflow: hidden;
  13572. text-overflow: ellipsis;
  13573. width: 75px;
  13574. margin-top: 7px;
  13575. }
  13576. .new_top {
  13577. display: flex;
  13578. background: #fff;
  13579. flex-direction: row;
  13580. justify-content: flex-start;
  13581. align-items: center;
  13582. height: 60px;
  13583. position: relative;
  13584. }
  13585. .before {
  13586. position: absolute;
  13587. background: #c3dad4;
  13588. width: 6px;
  13589. height: 100%;
  13590. }
  13591. .courseIndex {
  13592. display: flex;
  13593. flex-direction: row;
  13594. align-items: center;
  13595. width: calc(100% - 520px);
  13596. }
  13597. .courseIndex>div:nth-child(1) {
  13598. margin: 0 10px 0 20px;
  13599. padding-left: 5px;
  13600. font-size: 24px;
  13601. /* min-width: 100px; */
  13602. max-width: calc(100% - 180px);
  13603. font-weight: bold;
  13604. border-left: 4px solid #3363b9;
  13605. height: 35px;
  13606. text-align: center;
  13607. line-height: 35px;
  13608. white-space: nowrap;
  13609. overflow: hidden;
  13610. text-overflow: ellipsis;
  13611. }
  13612. /* .courseIndex>div:nth-child(2) {
  13613. font-size: 23px;
  13614. max-width: calc(100% - 180px);
  13615. white-space: nowrap;
  13616. overflow: hidden;
  13617. text-overflow: ellipsis;
  13618. } */
  13619. .courseIndex>div:nth-child(2) {
  13620. border-bottom: 1px solid #d7d7d7;
  13621. padding-bottom: 5px;
  13622. background: #49a0f0;
  13623. width: 55px;
  13624. min-width: 55px;
  13625. border-radius: 5px;
  13626. color: #fff;
  13627. text-align: center;
  13628. height: 20px;
  13629. line-height: 26px;
  13630. font-size: 14px;
  13631. margin: 0 0 0 10px;
  13632. }
  13633. .course_text {
  13634. padding: 20px 0 0 15px;
  13635. text-indent: 30px;
  13636. width: 80%;
  13637. min-height: 20px;
  13638. }
  13639. .vedioList {
  13640. background: #f2f2f2;
  13641. border: 1px solid #ececec;
  13642. /* width: 38.8%; */
  13643. width: 100%;
  13644. height: 445px;
  13645. border-radius: 10px;
  13646. overflow: hidden;
  13647. }
  13648. .vedioNav {
  13649. margin: 10px 0 0 15px;
  13650. border-bottom: 1px solid #d7d7d7;
  13651. padding-bottom: 5px;
  13652. background: #96d1ff;
  13653. width: 55px;
  13654. min-width: 55px;
  13655. border-radius: 5px;
  13656. color: #fff;
  13657. text-align: center;
  13658. height: 20px;
  13659. line-height: 26px;
  13660. font-size: 14px;
  13661. }
  13662. .queTop {
  13663. display: flex;
  13664. padding: 20px 0 20px 30px;
  13665. width: 100%;
  13666. flex-direction: row;
  13667. justify-content: flex-start;
  13668. align-items: center;
  13669. border-bottom: 1px solid #eeeeee;
  13670. box-sizing: border-box;
  13671. }
  13672. .question {
  13673. width: 40px;
  13674. margin-right: 10px;
  13675. margin-top: 7px;
  13676. }
  13677. .queTitle {
  13678. margin-left: 5px;
  13679. font-size: 25px;
  13680. display: flex;
  13681. align-items: center;
  13682. }
  13683. .addEditor {
  13684. width: 100px;
  13685. height: 30px;
  13686. background: #42cda6;
  13687. color: #fff;
  13688. border-radius: 5px;
  13689. text-align: center;
  13690. line-height: 30px;
  13691. box-shadow: 1px 3px 6px 1px #bfbfbf;
  13692. cursor: pointer;
  13693. }
  13694. .vedioName {
  13695. /* text-overflow: ellipsis;
  13696. top: 8px;
  13697. font-size: 14px;
  13698. overflow: hidden;
  13699. width: 100%;
  13700. word-break: break-all;
  13701. white-space: nowrap; */
  13702. cursor: pointer;
  13703. margin: 0px 0px 10px 5px;
  13704. white-space: nowrap;
  13705. overflow: hidden;
  13706. text-overflow: ellipsis;
  13707. width: 100%;
  13708. }
  13709. .vedioTime {
  13710. width: 35px;
  13711. position: absolute;
  13712. color: #fff;
  13713. bottom: 0px;
  13714. right: 0px;
  13715. text-align: center;
  13716. background: #46411f;
  13717. height: 20px;
  13718. font-size: 14px;
  13719. line-height: 20px;
  13720. }
  13721. .homework {
  13722. width: 200px;
  13723. display: flex;
  13724. flex-direction: column;
  13725. flex-wrap: nowrap;
  13726. align-items: center;
  13727. cursor: pointer;
  13728. }
  13729. .homebox {
  13730. display: flex;
  13731. flex-wrap: wrap;
  13732. flex-direction: row;
  13733. justify-content: flex-start;
  13734. align-items: center;
  13735. padding: 15px 0;
  13736. }
  13737. .isChooseActive {
  13738. color: #3e88f4;
  13739. border-bottom: 2px solid #2f80f3;
  13740. }
  13741. .chooseWho {
  13742. display: flex;
  13743. width: 100%;
  13744. flex-direction: row;
  13745. flex-wrap: nowrap;
  13746. justify-content: flex-start;
  13747. padding-bottom: 10px;
  13748. }
  13749. .chooseWho>div {
  13750. cursor: pointer;
  13751. padding-bottom: 10px;
  13752. margin: 0 30px 0 0;
  13753. }
  13754. .addPoint>div>img {
  13755. cursor: pointer;
  13756. margin: 0 10px;
  13757. width: 85px;
  13758. border-radius: 15px;
  13759. box-shadow: 0px 1px 8px 0px rgb(20 20 20 / 14%);
  13760. }
  13761. .addPoint>div {
  13762. display: flex;
  13763. flex-direction: column;
  13764. flex-wrap: nowrap;
  13765. align-items: center;
  13766. }
  13767. .isBorder>div {
  13768. margin: 0 0 10px 0;
  13769. align-items: flex-start !important;
  13770. }
  13771. .noiframeBox {
  13772. display: flex;
  13773. flex-wrap: wrap;
  13774. }
  13775. .iframeBox iframe {
  13776. width: 100%;
  13777. height: 800px;
  13778. border: none;
  13779. margin-bottom: 20px;
  13780. border: 1px solid #ccc;
  13781. }
  13782. .upload_toolBtn {
  13783. background: #6b92c9;
  13784. color: #fff;
  13785. width: 110px;
  13786. text-align: center;
  13787. height: 35px;
  13788. line-height: 35px;
  13789. font-size: 14px;
  13790. border-radius: 5px;
  13791. cursor: pointer;
  13792. position: absolute;
  13793. right: 10px;
  13794. bottom: 0;
  13795. }
  13796. .binfo_input,
  13797. .pj {
  13798. font: inherit;
  13799. color: currentColor;
  13800. width: 100%;
  13801. margin: 0;
  13802. padding: 15px 14px;
  13803. display: block;
  13804. min-width: 0;
  13805. outline: none;
  13806. box-sizing: content-box;
  13807. background: none;
  13808. -webkit-tap-highlight-color: transparent;
  13809. border: 1px solid rgba(0, 0, 0, 0.23);
  13810. border-radius: 4px;
  13811. box-sizing: border-box;
  13812. resize: none;
  13813. }
  13814. .binfo_input:focus-visible {
  13815. border: 1px solid rgba(61, 103, 188);
  13816. }
  13817. .dialog_diy>>>.el-dialog__header,
  13818. .dialog_diy1>>>.el-dialog__header {
  13819. background: #454545 !important;
  13820. padding: 15px 20px;
  13821. }
  13822. .dialog_diy>>>.el-dialog__title,
  13823. .dialog_diy1>>>.el-dialog__title {
  13824. color: #fff;
  13825. }
  13826. .dialog_diy>>>.el-dialog__headerbtn,
  13827. .dialog_diy1>>>.el-dialog__headerbtn {
  13828. top: 19px;
  13829. }
  13830. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close,
  13831. .dialog_diy1>>>.el-dialog__headerbtn .el-dialog__close {
  13832. color: #fff;
  13833. }
  13834. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover,
  13835. .dialog_diy1>>>.el-dialog__headerbtn .el-dialog__close:hover {
  13836. color: #fff;
  13837. }
  13838. .dialog_diy1>>>.el-dialog__body {
  13839. padding: 0;
  13840. }
  13841. .dialog_diy>>>.el-dialog__body,
  13842. .dialog_diy>>>.el-dialog__footer,
  13843. .dialog_diy1>>>.el-dialog__footer {
  13844. background: #fafafa;
  13845. }
  13846. .a_addBox {
  13847. margin: 10px 0;
  13848. background: #fff;
  13849. padding: 15px;
  13850. }
  13851. .a_add_box {
  13852. border-bottom: 2px solid #eee;
  13853. padding-bottom: 10px;
  13854. }
  13855. .a_add_head {
  13856. display: flex;
  13857. align-items: flex-start;
  13858. /* justify-content: space-between; */
  13859. flex-direction: column;
  13860. /* flex-direction: row; */
  13861. margin: 10px 0 20px 0;
  13862. font-size: 18px;
  13863. width: 100%;
  13864. }
  13865. .a_add_head .a_add_head_input {
  13866. width: 300px;
  13867. }
  13868. .a_add_head .a_add_head_div {
  13869. display: flex;
  13870. align-items: center;
  13871. justify-content: space-between;
  13872. }
  13873. .a_add_body {
  13874. display: flex;
  13875. align-items: center;
  13876. }
  13877. .a_add_input {
  13878. display: flex;
  13879. align-items: center;
  13880. flex-wrap: wrap;
  13881. }
  13882. .a_add_input>>>el-radio-group {
  13883. margin: 10px 0;
  13884. }
  13885. .a_add_input>>>.el-radio,
  13886. .a_add_input>>>.el-checkbox {
  13887. margin-bottom: 10px;
  13888. display: flex;
  13889. flex-direction: row;
  13890. flex-wrap: nowrap;
  13891. align-items: center;
  13892. }
  13893. .redioStyle>>>.el-radio__label {
  13894. font-size: 18px;
  13895. }
  13896. .redioStyle>>>.el-checkbox__label {
  13897. font-size: 18px;
  13898. }
  13899. .toolHeng2 {
  13900. width: 100%;
  13901. }
  13902. .toolHeng {
  13903. display: flex;
  13904. flex-direction: row;
  13905. flex-wrap: wrap;
  13906. justify-content: flex-start;
  13907. align-items: center;
  13908. width: 100%;
  13909. }
  13910. .toolHeng>div {
  13911. padding-left: 20px;
  13912. }
  13913. .isWidth {
  13914. width: 20%;
  13915. }
  13916. .textTitle {
  13917. display: flex;
  13918. flex-direction: row;
  13919. flex-wrap: nowrap;
  13920. align-items: center;
  13921. width: 95%;
  13922. }
  13923. .textTitle>>>.el-form-item__label {
  13924. font-size: 22px;
  13925. color: #918f8f;
  13926. width: 100px;
  13927. }
  13928. .textTitle>>>.el-form-item__content {
  13929. width: calc(100% - 100px);
  13930. }
  13931. .textCss>>>.el-dialog {
  13932. width: 800px !important;
  13933. height: 400px;
  13934. background: #fafafa;
  13935. }
  13936. .textCss>>>.el-dialog__body {
  13937. margin: 55px 8% 0 8%;
  13938. padding: 0 !important;
  13939. }
  13940. .textCss>>>.el-dialog__footer {
  13941. padding-top: 38px;
  13942. }
  13943. .toolsCss>>>.el-dialog__body {
  13944. padding: 20px;
  13945. }
  13946. .lineCss>>>.el-dialog__body {
  13947. display: flex;
  13948. flex-direction: row;
  13949. align-items: center;
  13950. justify-content: center;
  13951. }
  13952. .newNav {
  13953. display: flex;
  13954. flex-direction: row;
  13955. align-items: baseline;
  13956. justify-content: flex-start;
  13957. }
  13958. .navText {
  13959. cursor: pointer;
  13960. margin: 0px 0px 10px 5px;
  13961. white-space: nowrap;
  13962. overflow: hidden;
  13963. text-overflow: ellipsis;
  13964. /* width: 300px; */
  13965. width: 100%;
  13966. }
  13967. .noVedio {
  13968. display: flex;
  13969. flex-direction: row;
  13970. justify-content: center;
  13971. align-content: center;
  13972. }
  13973. .noNavText {
  13974. cursor: pointer;
  13975. margin: 0px 0px 10px 5px;
  13976. width: 112px;
  13977. }
  13978. .listNoVedio {
  13979. margin: 0 0 0 30px;
  13980. width: 97%;
  13981. }
  13982. .video-player>>>.video-js {
  13983. height: 100%;
  13984. }
  13985. .hangVedioList {
  13986. width: 90% !important;
  13987. height: 150px !important;
  13988. margin: 20px 0 0 30px;
  13989. }
  13990. .hangVedio {
  13991. width: 100%;
  13992. height: 170px !important;
  13993. align-items: flex-start !important;
  13994. }
  13995. .hangHand {
  13996. height: 150px !important;
  13997. }
  13998. .twoChild {
  13999. width: 95%;
  14000. margin: 10px;
  14001. border-radius: 5px;
  14002. background: #f2f2f2;
  14003. display: flex;
  14004. flex-direction: column;
  14005. flex-wrap: nowrap;
  14006. justify-content: flex-start;
  14007. align-items: flex-start;
  14008. transition: all 0.5s;
  14009. overflow: hidden;
  14010. height: 0;
  14011. background: #e7f3ff;
  14012. }
  14013. .twoChild>div:nth-child(1) {
  14014. margin-top: 5px;
  14015. }
  14016. .navChild {
  14017. width: 100%;
  14018. cursor: pointer;
  14019. margin-bottom: 10px;
  14020. position: relative;
  14021. }
  14022. .navChild img {
  14023. position: absolute;
  14024. right: 11px;
  14025. width: 15px;
  14026. top: 50%;
  14027. transform: translateY(-50%);
  14028. }
  14029. .navActive {
  14030. height: auto;
  14031. }
  14032. .navTask {
  14033. display: flex;
  14034. flex-direction: row;
  14035. flex-wrap: nowrap;
  14036. align-items: center;
  14037. align-content: flex-start;
  14038. height: 40px;
  14039. justify-content: flex-start;
  14040. padding: 0 10px;
  14041. width: 100%;
  14042. box-sizing: border-box;
  14043. }
  14044. .navTaskname {
  14045. white-space: nowrap;
  14046. text-overflow: ellipsis;
  14047. overflow: hidden;
  14048. word-break: break-all;
  14049. padding-left: 5px;
  14050. }
  14051. .openTaskActive {
  14052. color: #4386e6;
  14053. }
  14054. .iframeName {
  14055. margin: 5px 0;
  14056. border-left: 4px solid #41c4a4;
  14057. padding-left: 4px;
  14058. }
  14059. .toolTitle {
  14060. margin: 0px 0px 20px;
  14061. font-size: 20px;
  14062. font-weight: 500;
  14063. border-left: 4px solid #41c4a4;
  14064. padding-left: 4px;
  14065. }
  14066. .cru_selectBox {
  14067. overflow: auto;
  14068. width: 96%;
  14069. margin: 0 auto;
  14070. height: calc(100% - 40px - 21px - 20px);
  14071. }
  14072. .cru_selectBox::-webkit-scrollbar,
  14073. .study_top::-webkit-scrollbar,
  14074. .textContent::-webkit-scrollbar {
  14075. /*滚动条整体样式*/
  14076. width: 6px;
  14077. /*高宽分别对应横竖滚动条的尺寸*/
  14078. height: 6px;
  14079. }
  14080. /*定义滚动条轨道 内阴影+圆角*/
  14081. .cru_selectBox::-webkit-scrollbar-track,
  14082. .study_top::-webkit-scrollbar-track,
  14083. .textContent::-webkit-scrollbar {
  14084. border-radius: 10px;
  14085. background-color: #b8bdc9;
  14086. }
  14087. /*定义滑块 内阴影+圆角*/
  14088. .cru_selectBox::-webkit-scrollbar-thumb,
  14089. .study_top::-webkit-scrollbar-thumb,
  14090. .textContent::-webkit-scrollbar-thumb {
  14091. border-radius: 10px;
  14092. -webkit-box-shadow: inset 0 0 6px rgb(96, 125, 184);
  14093. background-color: #2c5ab3;
  14094. }
  14095. .vedioBox {
  14096. border-radius: 20px;
  14097. background: #fff;
  14098. margin-bottom: 10px;
  14099. overflow: auto;
  14100. }
  14101. .taskBox {
  14102. margin: 15px auto 20px;
  14103. background: #f7f7f7;
  14104. width: 97%;
  14105. border-radius: 10px;
  14106. }
  14107. .vedioTaskBox {
  14108. width: 100%;
  14109. display: flex;
  14110. flex-direction: row;
  14111. flex-wrap: nowrap;
  14112. align-items: flex-start;
  14113. position: relative;
  14114. }
  14115. .toolBox {
  14116. padding: 20px 60px 15px;
  14117. display: flex;
  14118. position: relative;
  14119. }
  14120. .btnAll {
  14121. position: absolute;
  14122. right: 0;
  14123. display: flex;
  14124. flex-direction: row;
  14125. flex-wrap: nowrap;
  14126. align-items: center;
  14127. }
  14128. .btnAllNT {
  14129. position: fixed;
  14130. bottom: 50px;
  14131. right: 40px;
  14132. z-index: 999;
  14133. display: flex;
  14134. flex-direction: row;
  14135. }
  14136. .btnAllNT>img {
  14137. cursor: pointer;
  14138. width: 80px;
  14139. }
  14140. .vedioTimeBox {
  14141. display: flex;
  14142. flex-direction: row;
  14143. align-items: center;
  14144. flex-wrap: nowrap;
  14145. position: relative;
  14146. }
  14147. .navBox {
  14148. background: #fff;
  14149. height: calc(100% - 40px);
  14150. padding: 5px 1px 0;
  14151. overflow-y: auto;
  14152. overflow-x: hidden;
  14153. }
  14154. .tool_work_box {
  14155. width: 100%;
  14156. padding: 0 30px 10px;
  14157. box-sizing: border-box;
  14158. }
  14159. .worksBox {
  14160. padding: 5px 0;
  14161. border-bottom: 1px solid #eeeeee;
  14162. }
  14163. .worksBTitle {
  14164. font-size: 20px;
  14165. padding-bottom: 15px;
  14166. border-bottom: 1px solid #eeeeee;
  14167. display: flex;
  14168. align-items: center;
  14169. }
  14170. .greenBox {
  14171. width: 5px;
  14172. height: 30px;
  14173. background: #63b6fa;
  14174. margin-right: 5px;
  14175. }
  14176. .worksDetailBox {
  14177. display: flex;
  14178. width: 100%;
  14179. flex-direction: row;
  14180. flex-wrap: wrap;
  14181. align-items: flex-end;
  14182. justify-content: flex-start;
  14183. padding: 15px 0;
  14184. }
  14185. .works {
  14186. display: flex;
  14187. flex-direction: column;
  14188. flex-wrap: nowrap;
  14189. align-items: flex-start;
  14190. justify-content: flex-start;
  14191. align-content: center;
  14192. max-width: 240px;
  14193. width: calc(100% / 3 - 10px);
  14194. height: auto;
  14195. margin-right: 10px;
  14196. margin-bottom: 10px;
  14197. overflow: hidden;
  14198. height: 140px;
  14199. box-shadow: 0 0 6px 1px #dfdada;
  14200. border-radius: 15px;
  14201. }
  14202. .workImg {
  14203. width: 100%;
  14204. /* height: calc(100% - 40px); */
  14205. height: 105px;
  14206. position: relative;
  14207. }
  14208. .workImg>img {
  14209. width: 100%;
  14210. height: 100%;
  14211. object-fit: contain;
  14212. cursor: pointer;
  14213. }
  14214. .worksName {
  14215. height: 40px;
  14216. line-height: 40px;
  14217. display: flex;
  14218. width: 100%;
  14219. flex-direction: row;
  14220. flex-wrap: nowrap;
  14221. justify-content: space-between;
  14222. align-items: center;
  14223. margin: 0 0 0 10px;
  14224. }
  14225. .worksName>div:nth-child(1) {
  14226. width: 110px;
  14227. white-space: nowrap;
  14228. overflow: hidden;
  14229. text-overflow: ellipsis;
  14230. }
  14231. .worksName>div:nth-child(2) {
  14232. color: #b7b4b5;
  14233. }
  14234. .noWorksS {
  14235. padding: 15px 0 0;
  14236. display: flex;
  14237. flex-direction: row;
  14238. flex-wrap: wrap;
  14239. align-items: center;
  14240. justify-content: flex-start;
  14241. }
  14242. .noWorksS>div {
  14243. cursor: pointer;
  14244. }
  14245. .noWorksName,
  14246. .isWorksName {
  14247. background: #7cbcf1;
  14248. color: #fff;
  14249. width: 90px;
  14250. height: 25px;
  14251. text-align: center;
  14252. line-height: 25px;
  14253. border-radius: 5px;
  14254. margin: 10px 15px 10px 0;
  14255. white-space: nowrap;
  14256. overflow: hidden;
  14257. padding: 5px;
  14258. text-overflow: ellipsis;
  14259. }
  14260. .noWorksName.isWork {
  14261. background: #165d96 !important;
  14262. }
  14263. .isWorksName {
  14264. cursor: pointer;
  14265. background: #46a1eb !important;
  14266. width: 100px;
  14267. height: 40px;
  14268. line-height: 40px;
  14269. position: relative;
  14270. }
  14271. .noWorksName:hover {
  14272. background: #46a1eb !important;
  14273. }
  14274. .title {
  14275. background: #1e5cc9;
  14276. /* width: 98%; */
  14277. height: 45px;
  14278. color: #fff;
  14279. line-height: 45px;
  14280. padding-left: 20px;
  14281. box-sizing: border-box;
  14282. }
  14283. .textBox {
  14284. font-size: 20px;
  14285. width: 90%;
  14286. display: flex;
  14287. flex-direction: column;
  14288. align-items: center;
  14289. margin: 20px auto 0;
  14290. max-height: 500px;
  14291. overflow: auto;
  14292. }
  14293. .textContent {
  14294. font-size: 18px;
  14295. width: 95%;
  14296. max-width: 95%;
  14297. }
  14298. .answerBg {
  14299. background: url("../../assets/icon/answerBgNew.png") no-repeat;
  14300. background-size: 100% 100%;
  14301. width: 100%;
  14302. height: 100%;
  14303. color: #fff;
  14304. text-align: center;
  14305. display: flex;
  14306. flex-direction: column;
  14307. flex-wrap: nowrap;
  14308. align-items: center;
  14309. position: relative;
  14310. justify-content: center;
  14311. }
  14312. .answerBg>div:nth-child(1) {
  14313. /* font-size: 22px;
  14314. padding: 25px 0 10px; */
  14315. }
  14316. .answerContent {
  14317. width: 215px;
  14318. max-height: 60px;
  14319. word-break: break-all;
  14320. text-align: center;
  14321. /* white-space: nowrap; */
  14322. overflow: hidden;
  14323. text-overflow: ellipsis;
  14324. /* padding: 23px 0 0; */
  14325. -webkit-line-clamp: 3;
  14326. -webkit-box-orient: vertical;
  14327. display: -webkit-box;
  14328. font-size: 15px;
  14329. cursor: pointer;
  14330. }
  14331. .elist_input_box {
  14332. display: flex;
  14333. align-items: flex-start;
  14334. flex-wrap: nowrap;
  14335. padding: 10px 0 15px 30px;
  14336. flex-direction: column;
  14337. }
  14338. .elist_input {
  14339. /* width: 40%; */
  14340. width: 100%;
  14341. }
  14342. .elist_input .elist_input_box input {
  14343. font: inherit;
  14344. color: currentColor;
  14345. width: 200px;
  14346. padding: 8px 14px;
  14347. display: block;
  14348. min-width: 0;
  14349. outline: none;
  14350. border: 1px solid rgba(0, 0, 0, 0.23);
  14351. border-radius: 4px;
  14352. box-sizing: border-box;
  14353. background: #fff;
  14354. margin: 0 20px 0 0;
  14355. }
  14356. .elist_input .elist_input_box span {
  14357. height: 36px;
  14358. line-height: 36px;
  14359. color: rgb(82, 82, 82);
  14360. }
  14361. .elist_input .elist_input_box .remove {
  14362. height: 20px;
  14363. width: 20px;
  14364. background-size: 100% 100%;
  14365. background-position: unset;
  14366. margin-left: 5px;
  14367. }
  14368. .elist_input_box>>>.el-rate {
  14369. display: flex;
  14370. height: 36px;
  14371. align-items: center;
  14372. }
  14373. .elist_input_box .elist_inptu_text {
  14374. min-height: 50px;
  14375. /* width: 500px;
  14376. max-height: 150px; */
  14377. width: 100%;
  14378. line-height: 50px;
  14379. color: rgb(82, 82, 82);
  14380. overflow: auto;
  14381. text-indent: 5px;
  14382. background: #f7f6f9;
  14383. border-radius: 10px;
  14384. }
  14385. .elist_input_box .elist_inptu_text input {
  14386. width: 500px;
  14387. }
  14388. .elist_input_box>>>.el-rate__icon {
  14389. font-size: 24px;
  14390. }
  14391. .isClick {
  14392. background: #4d9def;
  14393. }
  14394. /*定义滚动条轨道 内阴影+圆角*/
  14395. .bzTypeBox::-webkit-scrollbar {
  14396. /*滚动条整体样式*/
  14397. width: 6px;
  14398. /*高宽分别对应横竖滚动条的尺寸*/
  14399. height: 6px;
  14400. }
  14401. /*定义滚动条轨道 内阴影+圆角*/
  14402. .bzTypeBox::-webkit-scrollbar-track {
  14403. border-radius: 10px;
  14404. background-color: rgba(0, 0, 0, 0.1);
  14405. }
  14406. /*定义滑块 内阴影+圆角*/
  14407. .bzTypeBox::-webkit-scrollbar-thumb {
  14408. border-radius: 10px;
  14409. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
  14410. background-color: rgba(0, 0, 0, 0.1);
  14411. }
  14412. .choiceBox {
  14413. display: flex;
  14414. margin: 20px 0;
  14415. width: 100%;
  14416. }
  14417. .bzTypeBox {
  14418. display: flex;
  14419. width: 100%;
  14420. overflow: auto;
  14421. white-space: nowrap;
  14422. }
  14423. .bzChild {
  14424. cursor: pointer;
  14425. box-sizing: border-box;
  14426. padding-bottom: 10px;
  14427. font-weight: bold;
  14428. min-width: fit-content;
  14429. }
  14430. .bzChild.active {
  14431. color: #3e88f4;
  14432. border-bottom: 2px solid #2f80f3;
  14433. }
  14434. .bzChild+.bzChild {
  14435. margin-left: 25px;
  14436. }
  14437. .bzBox {
  14438. display: flex;
  14439. flex-direction: row;
  14440. align-items: center;
  14441. }
  14442. .bzBox>div:nth-child(1) {
  14443. width: 4px;
  14444. height: 40px;
  14445. background-image: linear-gradient(180deg, #2c5cbd, #a1cff4);
  14446. }
  14447. .bzBox>div:nth-child(2) {
  14448. font-size: 23px;
  14449. font-weight: bold;
  14450. padding: 0px 0px 0 10px;
  14451. }
  14452. .navTitile {
  14453. padding: 0 0px 0 15px;
  14454. color: #fff;
  14455. height: 40px;
  14456. line-height: 40px;
  14457. }
  14458. .isTypeOne {
  14459. width: 240px;
  14460. height: 170px;
  14461. /* border: 1px solid #f8f8f8; */
  14462. border-radius: 10px;
  14463. box-shadow: 0 0 6px 1px #dfdada;
  14464. }
  14465. .e_add_top {
  14466. display: flex;
  14467. justify-content: space-between;
  14468. padding: 20px 20px 0 20px;
  14469. border-radius: 3px;
  14470. background: #fff;
  14471. }
  14472. .e_add_title2 {
  14473. display: flex;
  14474. align-items: center;
  14475. }
  14476. .e_add_title2 span {
  14477. width: 40px;
  14478. }
  14479. .e_add_title {
  14480. display: flex;
  14481. align-items: center;
  14482. color: #b8b8b8;
  14483. font-size: 18px;
  14484. position: relative;
  14485. height: 40px;
  14486. }
  14487. .e_add_title span {
  14488. margin-right: 10px;
  14489. }
  14490. .e_add_title .el_input {
  14491. width: 300px;
  14492. }
  14493. .e_add_title>>>.el-input__inner {
  14494. width: 400px;
  14495. }
  14496. .e_add_btn {}
  14497. .e_add_content {
  14498. display: flex;
  14499. width: 100%;
  14500. max-width: 650px;
  14501. height: 550px;
  14502. }
  14503. .e_add_list {
  14504. background: #fff;
  14505. height: 500px;
  14506. width: 210px;
  14507. position: relative;
  14508. margin: 15px 5px 0 0;
  14509. flex-shrink: 0;
  14510. display: flex;
  14511. flex-direction: column;
  14512. }
  14513. .e_add_list_title {
  14514. font-size: 20px;
  14515. width: 100%;
  14516. box-sizing: border-box;
  14517. padding: 15px 40px;
  14518. text-align: center;
  14519. border-bottom: 1px solid #eaeaea;
  14520. position: relative;
  14521. display: flex;
  14522. align-items: center;
  14523. justify-content: center;
  14524. height: 57px;
  14525. background: #f6f6f6;
  14526. }
  14527. .e_add_list_title span {
  14528. overflow: hidden;
  14529. white-space: nowrap;
  14530. text-overflow: ellipsis;
  14531. }
  14532. .e_add_list_title img {
  14533. position: absolute;
  14534. right: 15px;
  14535. width: 25px;
  14536. cursor: pointer;
  14537. top: 50%;
  14538. transform: translateY(-50%);
  14539. }
  14540. .e_add_list_body {
  14541. height: calc(100% - 187px);
  14542. overflow: auto;
  14543. }
  14544. .e_add_list_child {
  14545. width: 100%;
  14546. display: flex;
  14547. align-items: center;
  14548. justify-content: center;
  14549. position: relative;
  14550. box-sizing: border-box;
  14551. padding: 15px 40px;
  14552. text-align: center;
  14553. }
  14554. .e_add_list_child span {
  14555. overflow: hidden;
  14556. white-space: nowrap;
  14557. text-overflow: ellipsis;
  14558. cursor: pointer;
  14559. }
  14560. .e_add_list_child img {
  14561. position: absolute;
  14562. right: 10px;
  14563. width: 21px;
  14564. cursor: pointer;
  14565. top: 50%;
  14566. transform: translateY(-50%);
  14567. }
  14568. .e_add_list_child+.e_add_list_child {
  14569. border-top: 1px solid #eaeaea;
  14570. }
  14571. .e_add_list_child .active {
  14572. color: #409eff;
  14573. }
  14574. .e_add_list_btn {
  14575. position: absolute;
  14576. bottom: 0;
  14577. height: 50px;
  14578. background: rgb(120, 120, 254);
  14579. width: 100%;
  14580. color: #fff;
  14581. font-size: 16px;
  14582. text-align: center;
  14583. line-height: 50px;
  14584. cursor: pointer;
  14585. }
  14586. .e_add_list_detail {
  14587. position: absolute;
  14588. bottom: 0;
  14589. height: 130px;
  14590. background: rgb(120, 120, 254);
  14591. width: 100%;
  14592. color: #fff;
  14593. font-size: 16px;
  14594. display: flex;
  14595. align-items: center;
  14596. justify-content: center;
  14597. }
  14598. .e_add_list_detail textarea {
  14599. height: 90%;
  14600. width: 95%;
  14601. border: none;
  14602. resize: none;
  14603. outline: none;
  14604. padding: 5px;
  14605. box-sizing: border-box;
  14606. }
  14607. .e_add_list_pbox {
  14608. width: 100%;
  14609. max-width: 650px;
  14610. /* height: 600px; */
  14611. }
  14612. .e_add_list_pbox_title {
  14613. height: 50px;
  14614. background: #fff;
  14615. display: flex;
  14616. align-items: center;
  14617. width: 100%;
  14618. box-sizing: border-box;
  14619. padding: 0 20px;
  14620. }
  14621. .type_title {
  14622. font-size: 18px;
  14623. font-weight: 700;
  14624. }
  14625. .type_content {
  14626. font-size: 16px;
  14627. margin-left: 30px;
  14628. }
  14629. .type_content span+span {
  14630. margin-left: 20px;
  14631. }
  14632. .type_content span {
  14633. cursor: pointer;
  14634. padding-bottom: 5px;
  14635. box-sizing: border-box;
  14636. }
  14637. .type_content .active {
  14638. color: #409eff;
  14639. border-bottom: 2px solid #409eff;
  14640. }
  14641. .e_add_list_pbox_content {
  14642. height: calc(100% - 50px);
  14643. display: flex;
  14644. align-items: center;
  14645. width: 100%;
  14646. background: #fff;
  14647. }
  14648. .evaCss {
  14649. display: flex;
  14650. flex-direction: row;
  14651. flex-wrap: nowrap;
  14652. align-items: flex-start;
  14653. }
  14654. .cru_line {
  14655. position: absolute;
  14656. bottom: 0px;
  14657. transition: all 0.5s;
  14658. left: 0px;
  14659. width: 125px;
  14660. margin-left: -25px;
  14661. }
  14662. .isNoMessage {
  14663. width: 20%;
  14664. margin: 25% auto 0;
  14665. }
  14666. .isNoMessage>img {
  14667. width: 100%;
  14668. height: 100%;
  14669. }
  14670. .fullStyle>>>.el-dialog__body {
  14671. height: 100% !important;
  14672. }
  14673. .fullStyle>>>.el-dialog,
  14674. .fullStyle {
  14675. width: 100% !important;
  14676. max-width: 100% !important;
  14677. height: 100% !important;
  14678. margin: 0 !important;
  14679. }
  14680. .full_diy>>>.el-dialog {
  14681. margin: 0 !important;
  14682. height: 100%;
  14683. padding: 4px;
  14684. }
  14685. .full_diy>>>.el-dialog__body {
  14686. height: calc(100% - 100px);
  14687. }
  14688. .full_diy2>>>.el-dialog__body {
  14689. height: calc(100% - 50px);
  14690. padding: 0;
  14691. }
  14692. .switchCss {
  14693. /* width: 100%; */
  14694. display: flex;
  14695. flex-direction: row;
  14696. flex-wrap: nowrap;
  14697. align-items: center;
  14698. /* justify-content: center; */
  14699. }
  14700. .isClickNav {
  14701. color: #499eef;
  14702. }
  14703. .commentImg {
  14704. width: 25px;
  14705. height: 25px;
  14706. cursor: pointer;
  14707. }
  14708. .commentImg>img {
  14709. width: 100%;
  14710. height: 100%;
  14711. }
  14712. .comment {
  14713. background: #f9f9f9;
  14714. border-radius: 0 0 15px 15px;
  14715. display: flex;
  14716. flex-direction: row;
  14717. flex-wrap: nowrap;
  14718. align-items: center;
  14719. justify-content: flex-end;
  14720. height: 35px;
  14721. }
  14722. .commentList {
  14723. display: flex;
  14724. flex-direction: row;
  14725. flex-wrap: nowrap;
  14726. align-items: center;
  14727. justify-content: center;
  14728. align-content: center;
  14729. /* margin-left: 15px; */
  14730. /* margin-left: 8px; */
  14731. }
  14732. .scoreImg {
  14733. width: 17px;
  14734. height: 17px;
  14735. }
  14736. .studentDetail {
  14737. display: flex;
  14738. flex-direction: row;
  14739. flex-wrap: nowrap;
  14740. /* align-items: center; */
  14741. align-items: flex-start;
  14742. }
  14743. .tx {
  14744. width: 50px;
  14745. }
  14746. .tx>img {
  14747. width: 100%;
  14748. height: 100%;
  14749. }
  14750. .nameAndTime {
  14751. display: flex;
  14752. flex-direction: column;
  14753. flex-wrap: nowrap;
  14754. align-items: flex-start;
  14755. margin-left: 10px;
  14756. }
  14757. .worksAnswer {
  14758. color: #4078dd;
  14759. margin: 10px 0;
  14760. font-size: 16px;
  14761. position: relative;
  14762. }
  14763. .worksAnswer>img {
  14764. width: 500px;
  14765. height: 300px;
  14766. object-fit: contain;
  14767. margin: 0 auto;
  14768. display: block;
  14769. }
  14770. .commentTop {
  14771. border-bottom: 1px solid #eaeaea;
  14772. padding-bottom: 10px;
  14773. }
  14774. .commentBox {
  14775. padding-top: 15px;
  14776. }
  14777. .pl {
  14778. font-size: 18px;
  14779. }
  14780. .plPerson {
  14781. width: 100%;
  14782. }
  14783. .plName {
  14784. display: flex;
  14785. flex-direction: row;
  14786. flex-wrap: nowrap;
  14787. align-items: baseline;
  14788. color: #78787a;
  14789. width: 100%;
  14790. }
  14791. .deleteComment {
  14792. cursor: pointer;
  14793. margin-left: auto;
  14794. color: #237ade;
  14795. }
  14796. .plContent {
  14797. margin-top: 5px;
  14798. }
  14799. .evalCss {
  14800. background: #fff;
  14801. font-size: 18px;
  14802. }
  14803. .nav {
  14804. color: #9d9d9d;
  14805. padding: 5px 0 15px 20px;
  14806. }
  14807. .middleBox {
  14808. padding: 5px 0 15px 20px;
  14809. }
  14810. .pfBox {
  14811. padding-bottom: 30px;
  14812. }
  14813. .nameAndrate {
  14814. display: flex;
  14815. flex-direction: row;
  14816. flex-wrap: nowrap;
  14817. align-items: center;
  14818. padding-bottom: 10px;
  14819. height: 30px;
  14820. line-height: 30px;
  14821. }
  14822. .nameAndrate>div {
  14823. margin-left: 10px;
  14824. color: #000;
  14825. height: 30px;
  14826. }
  14827. .nameAndrate>>>.el-rate__icon {
  14828. font-size: 28px !important;
  14829. }
  14830. .pfBox>div:nth-child(2) {
  14831. background: #f7f6f9;
  14832. width: 400px;
  14833. min-height: 45px;
  14834. border-radius: 10px;
  14835. font-size: 16px;
  14836. display: flex;
  14837. flex-wrap: wrap;
  14838. align-items: center;
  14839. padding: 10px 20px;
  14840. box-sizing: border-box;
  14841. color: #000;
  14842. }
  14843. .bz {
  14844. display: flex;
  14845. flex-direction: row;
  14846. flex-wrap: nowrap;
  14847. align-items: flex-start;
  14848. }
  14849. .bz>div {
  14850. padding: 0 10px;
  14851. }
  14852. .select_box2_title {
  14853. background: #fff;
  14854. border-radius: 5px;
  14855. padding: 15px 10px;
  14856. box-sizing: border-box;
  14857. margin-bottom: 10px;
  14858. display: flex;
  14859. flex-direction: row;
  14860. flex-wrap: nowrap;
  14861. align-items: center;
  14862. }
  14863. .select_box2_title>div:nth-child(2) {
  14864. margin-left: 10px;
  14865. color: #c4c4c4;
  14866. }
  14867. .select_box2_box {
  14868. display: flex;
  14869. height: 500px;
  14870. }
  14871. .select_box2_img {
  14872. width: calc(100% - 310px);
  14873. height: 100%;
  14874. overflow: auto;
  14875. background: #fff;
  14876. border-radius: 5px;
  14877. }
  14878. .select_box2_img img {
  14879. width: 100%;
  14880. }
  14881. .select_box2_answer {
  14882. background: #fff;
  14883. margin-left: 10px;
  14884. border-radius: 5px;
  14885. width: 300px;
  14886. overflow: auto;
  14887. height: 90%;
  14888. display: flex;
  14889. flex-direction: column;
  14890. align-items: flex-start;
  14891. padding-top: 10px;
  14892. box-sizing: border-box;
  14893. position: relative;
  14894. }
  14895. .select_answer_title {
  14896. padding: 0 0 15px 20px;
  14897. color: #c4c4c4;
  14898. }
  14899. .select_box2_answer_box {
  14900. margin: 0 0 10px 20px;
  14901. width: 85%;
  14902. display: flex;
  14903. flex-direction: row;
  14904. flex-wrap: nowrap;
  14905. align-items: center;
  14906. }
  14907. .select_box2_answer_box>>>.el-input.is-disabled .el-input__inner {
  14908. color: #000;
  14909. }
  14910. .upAnswerCss {
  14911. position: absolute;
  14912. bottom: 15px;
  14913. right: 15px;
  14914. }
  14915. .upAnswerCss>>>.el-button {
  14916. width: 95px;
  14917. height: 35px;
  14918. line-height: 35px;
  14919. padding: 0;
  14920. }
  14921. .rightWidthCss {
  14922. width: 60%;
  14923. display: flex;
  14924. flex-direction: row;
  14925. align-items: flex-start;
  14926. }
  14927. .rightAnswer {
  14928. display: flex;
  14929. flex-direction: row;
  14930. flex-wrap: nowrap;
  14931. align-items: center;
  14932. color: red;
  14933. margin-bottom: 31px;
  14934. }
  14935. .rightAnswerCss {
  14936. display: flex;
  14937. flex-direction: column;
  14938. flex-wrap: nowrap;
  14939. padding-top: 60px;
  14940. }
  14941. .blueCss {
  14942. color: #767de1;
  14943. margin-left: 10px;
  14944. }
  14945. .redCss {
  14946. color: red;
  14947. }
  14948. .redioStyle>>>.el-radio__input.is-checked+.el-radio__label {
  14949. color: rgb(0 123 255) !important;
  14950. }
  14951. .redioStyle>>>.el-checkbox__input.is-checked+.el-checkbox__label {
  14952. color: rgb(0 123 255) !important;
  14953. }
  14954. .zuoyeYulan {
  14955. padding-top: 15px;
  14956. font-size: 18px;
  14957. display: flex;
  14958. align-items: flex-end;
  14959. }
  14960. .buttonA {
  14961. margin-left: 10px;
  14962. padding: 0;
  14963. }
  14964. .displayBox {
  14965. margin-bottom: 10px;
  14966. display: block;
  14967. border-bottom: 3px solid #eee;
  14968. display: flex;
  14969. align-items: center;
  14970. }
  14971. .easy_comment {
  14972. width: calc(100% - 90px);
  14973. margin-left: 10px;
  14974. display: flex;
  14975. flex-wrap: wrap;
  14976. }
  14977. .easy_comment>div {
  14978. border: 1px solid #4a4a4a;
  14979. color: #666;
  14980. border-radius: 15px;
  14981. padding: 5px 10px;
  14982. font-size: 16px;
  14983. margin-bottom: 10px;
  14984. margin-right: 5px;
  14985. cursor: pointer;
  14986. }
  14987. .easy_comment div:hover {
  14988. border: 1px solid #f7ba2a;
  14989. color: #c69217;
  14990. }
  14991. .xuan_right_box {
  14992. padding: 10px;
  14993. background: rgb(247, 247, 247);
  14994. margin: 10px 12px;
  14995. border-radius: 5px;
  14996. }
  14997. .tool_right_box {
  14998. display: flex;
  14999. align-items: center;
  15000. }
  15001. .tool_right_box+.tool_right_box {
  15002. margin-top: 10px;
  15003. }
  15004. .right_box_xuan {
  15005. background: rgb(0 123 255);
  15006. color: #fff;
  15007. border-radius: 5px;
  15008. padding: 5px;
  15009. margin-left: 10px;
  15010. }
  15011. .pButton:hover {
  15012. opacity: 1 !important;
  15013. }
  15014. .pButton {
  15015. position: fixed;
  15016. /* right: 5%; */
  15017. /* bottom: 5%; */
  15018. color: #fff;
  15019. /* width: 50px;
  15020. height: 50px; */
  15021. /* border-radius: 50%; */
  15022. text-align: center;
  15023. /* line-height: 50px; */
  15024. /* background-image: -webkit-linear-gradient(left, #72aaf4, #4d81d5); */
  15025. cursor: pointer;
  15026. z-index: 999;
  15027. right: 0;
  15028. top: 83px;
  15029. width: 50px;
  15030. height: 50px;
  15031. background: #fff;
  15032. display: flex;
  15033. align-items: center;
  15034. justify-content: center;
  15035. box-shadow: 0px 0 8px 2px #c5c5c5;
  15036. border-radius: 5px;
  15037. }
  15038. .pzClass {
  15039. width: calc(100% - 340px);
  15040. }
  15041. .newDialogCss {
  15042. /* position: fixed;
  15043. right: 5%;
  15044. top: 50%;
  15045. width: 340px;
  15046. transform: translateY(-50%);
  15047. height: 60%;
  15048. box-shadow: 0px 0 8px 0px #555555;
  15049. border-radius: 15px;
  15050. z-index: 999; */
  15051. position: fixed;
  15052. right: 0;
  15053. top: 70px;
  15054. width: 340px;
  15055. height: calc(100% - 80px);
  15056. z-index: 999;
  15057. background: #fff;
  15058. border-radius: 15px;
  15059. border-top-right-radius: 0px;
  15060. border-bottom-right-radius: 0px;
  15061. overflow: hidden;
  15062. }
  15063. .pzTop {
  15064. color: #fff;
  15065. background: #000;
  15066. display: flex;
  15067. flex-direction: row;
  15068. flex-wrap: nowrap;
  15069. align-items: center;
  15070. justify-content: space-between;
  15071. height: 40px;
  15072. border-radius: 15px 15px 0 0;
  15073. }
  15074. .pzTop2 .checkbox {
  15075. display: flex;
  15076. align-items: center;
  15077. padding: 15px 30px;
  15078. flex: 0 0 auto;
  15079. font-weight: bold;
  15080. border-bottom: 1px solid #eee;
  15081. justify-content: space-between;
  15082. }
  15083. .pzTop2 .check {
  15084. text-align: center;
  15085. cursor: pointer;
  15086. box-sizing: border-box;
  15087. display: flex;
  15088. }
  15089. .pzTop2 img {
  15090. width: 25px;
  15091. cursor: pointer;
  15092. }
  15093. .pzTop>div:nth-child(1) {
  15094. padding-left: 10px;
  15095. }
  15096. .pzTop>div:nth-child(2) {
  15097. width: 15px;
  15098. height: 15px;
  15099. padding-right: 10px;
  15100. cursor: pointer;
  15101. }
  15102. .pzTop>div:nth-child(2)>img {
  15103. width: 100%;
  15104. height: 100%;
  15105. }
  15106. .pzBox,
  15107. .noPzBox {
  15108. height: calc(100% - 60px);
  15109. /* background: #ededed; */
  15110. background: #fff;
  15111. /* border-radius: 0 0 15px 15px; */
  15112. }
  15113. .noPzBox {
  15114. display: flex;
  15115. flex-direction: column;
  15116. flex-wrap: nowrap;
  15117. justify-content: center;
  15118. align-items: center;
  15119. }
  15120. .pzList {
  15121. background: #f7f7f7;
  15122. width: 90%;
  15123. margin: 0 auto 15px;
  15124. border-radius: 5px;
  15125. }
  15126. .pzNavTop {
  15127. display: flex;
  15128. flex-direction: row;
  15129. flex-wrap: nowrap;
  15130. padding: 10px 10px 0 10px;
  15131. align-items: center;
  15132. }
  15133. .pzDelete {
  15134. cursor: pointer;
  15135. margin-left: auto;
  15136. font-size: 14px;
  15137. color: #afafaf;
  15138. }
  15139. .pzNavTop>div:nth-child(1) {
  15140. background: #3760af;
  15141. width: 35px;
  15142. height: 35px;
  15143. color: #fff;
  15144. text-align: center;
  15145. line-height: 35px;
  15146. border-radius: 50%;
  15147. font-size: 14px;
  15148. }
  15149. .pzNavTop>div:nth-child(2) {
  15150. font-size: 18px;
  15151. color: #959595;
  15152. margin-left: 5px;
  15153. }
  15154. .pzContent {
  15155. padding: 10px;
  15156. word-break: break-word;
  15157. }
  15158. .pzContent audio {
  15159. width: 100%;
  15160. }
  15161. .pzContent audio::-webkit-media-controls-panel {
  15162. background: #fff;
  15163. }
  15164. .pzListBox {
  15165. padding-top: 15px;
  15166. height: calc(100% - 100px);
  15167. overflow: auto;
  15168. }
  15169. .addPzButton {
  15170. position: relative;
  15171. margin-top: 3px;
  15172. width: 100%;
  15173. }
  15174. .addPzButton .img1 {
  15175. position: absolute;
  15176. top: 50%;
  15177. right: 25px;
  15178. transform: translateY(-50%);
  15179. height: 100%;
  15180. display: flex;
  15181. align-items: center;
  15182. }
  15183. .addPzButton .img1 div {
  15184. display: flex;
  15185. }
  15186. .addPzButton .img1 div img {
  15187. width: 28px;
  15188. margin-left: 10px;
  15189. cursor: pointer;
  15190. }
  15191. .addPzButton .img1 div span {
  15192. font-size: 14px;
  15193. margin: 4px 0 0 3px;
  15194. color: #afafaf;
  15195. }
  15196. .addPz {
  15197. background: #4b79ce;
  15198. width: 100px;
  15199. color: #fff;
  15200. font-size: 12px;
  15201. height: 30px;
  15202. margin: 0 auto;
  15203. text-align: center;
  15204. line-height: 30px;
  15205. border-radius: 10px;
  15206. cursor: pointer;
  15207. }
  15208. .addDialogCss {
  15209. position: fixed;
  15210. right: 37%;
  15211. top: 50%;
  15212. width: 600px;
  15213. transform: translateY(-50%);
  15214. height: 70%;
  15215. min-height: 450px;
  15216. box-shadow: 0px 0 8px 0px #555555;
  15217. border-radius: 15px;
  15218. z-index: 999;
  15219. }
  15220. .teacherPz {
  15221. display: flex;
  15222. flex-direction: row;
  15223. align-items: center;
  15224. flex-wrap: nowrap;
  15225. }
  15226. .teacherPzImg {
  15227. width: 30px;
  15228. height: 30px;
  15229. }
  15230. .teacherPzImg>img {
  15231. width: 100%;
  15232. height: 100%;
  15233. }
  15234. .addPzBox {
  15235. height: calc(100% - 40px);
  15236. background: #ededed;
  15237. }
  15238. .pzAudioClass {
  15239. margin: 15px 14px;
  15240. background: #fff;
  15241. height: 100%;
  15242. display: flex;
  15243. justify-content: center;
  15244. align-items: center;
  15245. }
  15246. .pzConText {
  15247. width: 95%;
  15248. height: 100%;
  15249. margin: 10px auto 0;
  15250. border: none;
  15251. background: #fff;
  15252. border-radius: 0px;
  15253. }
  15254. .pzConText>>>.text {
  15255. height: calc(100% - 82px);
  15256. }
  15257. .addTextCss {
  15258. background: #4b79ce;
  15259. width: 80px;
  15260. height: 30px;
  15261. text-align: center;
  15262. color: #fff;
  15263. line-height: 30px;
  15264. border-radius: 10px;
  15265. margin: 10px auto 0;
  15266. cursor: pointer;
  15267. }
  15268. .pzConText:focus-visible {
  15269. border: none !important;
  15270. }
  15271. .maxWidth {
  15272. width: 1000px;
  15273. }
  15274. .noPz {
  15275. width: 150px;
  15276. margin: 0 auto 20%;
  15277. }
  15278. .noPz>img {
  15279. width: 100%;
  15280. height: 100%;
  15281. }
  15282. .pzList .time {
  15283. text-align: right;
  15284. box-sizing: border-box;
  15285. padding: 0 10px 10px 0px;
  15286. color: #949494;
  15287. font-size: 14px;
  15288. }
  15289. /* code 样式 */
  15290. .cont {
  15291. /* -webkit-user-modify: read-write; */
  15292. overflow-wrap: break-word;
  15293. -webkit-line-break: after-white-space;
  15294. }
  15295. /* table 样式 */
  15296. .cont>>>table {
  15297. border-top: 1px solid #ccc;
  15298. border-left: 1px solid #ccc;
  15299. }
  15300. .cont>>>table td,
  15301. .cont>>>table th {
  15302. border-bottom: 1px solid #ccc;
  15303. border-right: 1px solid #ccc;
  15304. /* padding: 20px 5px; */
  15305. padding: 5px 10px;
  15306. max-width: 0px;
  15307. height: 30px;
  15308. vertical-align: baseline;
  15309. box-sizing: border-box;
  15310. }
  15311. .cont>>>table th {
  15312. border-bottom: 2px solid #ccc;
  15313. text-align: center;
  15314. }
  15315. /* blockquote 样式 */
  15316. .cont>>>blockquote {
  15317. display: block;
  15318. border-left: 8px solid #d0e5f2;
  15319. padding: 5px 10px;
  15320. margin: 10px 0;
  15321. line-height: 1.4;
  15322. font-size: 100%;
  15323. background-color: #f1f1f1;
  15324. }
  15325. /* code 样式 */
  15326. .cont>>>code {
  15327. display: inline-block;
  15328. *display: inline;
  15329. *zoom: 1;
  15330. background-color: #f1f1f1;
  15331. border-radius: 3px;
  15332. padding: 3px 5px;
  15333. margin: 0 3px;
  15334. }
  15335. .cont>>>pre code {
  15336. display: block;
  15337. }
  15338. /* ul ol 样式 */
  15339. .cont>>>ul,
  15340. ol {
  15341. margin: 10px 0 10px 20px;
  15342. }
  15343. .addPzCheck {
  15344. display: flex;
  15345. flex-direction: row;
  15346. flex-wrap: nowrap;
  15347. padding: 10px 15px 0;
  15348. }
  15349. .addPzCheck span {
  15350. cursor: pointer;
  15351. padding-bottom: 5px;
  15352. font-weight: bold;
  15353. }
  15354. .addPzCheck span+span {
  15355. margin-left: 10px;
  15356. }
  15357. .addPzCheck .isChooseActive {
  15358. color: #3e88f4;
  15359. border-bottom: 2px solid #2f80f3;
  15360. }
  15361. .scoreBox,
  15362. .scoreDetailBox {
  15363. display: flex;
  15364. align-items: center;
  15365. justify-content: flex-start;
  15366. margin-top: 20px;
  15367. font-size: 18px;
  15368. width: 100%;
  15369. }
  15370. .scoreBox .t,
  15371. .scoreDetailBox .t {
  15372. margin-right: 10px;
  15373. width: 100px;
  15374. text-align: right;
  15375. }
  15376. .scoreDetailBox {
  15377. align-items: flex-start;
  15378. }
  15379. .scoreDetailBox>>>.el-textarea {
  15380. width: calc(100% - 200px);
  15381. }
  15382. .scoreBox>>>.el-input {
  15383. width: 130px;
  15384. font-size: 38px;
  15385. }
  15386. .scoreBox>>>.el-input__inner {
  15387. height: 60px;
  15388. }
  15389. .answerScore {
  15390. position: absolute;
  15391. top: 10px;
  15392. right: 10px;
  15393. background: #0000008f;
  15394. border-radius: 5px;
  15395. padding: 3px 5px;
  15396. font-size: 14px;
  15397. color: #fff;
  15398. cursor: pointer;
  15399. }
  15400. .open_box .switch_box {
  15401. width: 100%;
  15402. margin: 0 auto;
  15403. display: flex;
  15404. justify-content: space-between;
  15405. }
  15406. .open_box .switch_box+.switch_box {
  15407. margin-top: 10px;
  15408. }
  15409. .deleteImg {
  15410. width: 25px !important;
  15411. height: 25px !important;
  15412. cursor: pointer;
  15413. position: absolute;
  15414. top: 10px;
  15415. right: 10px;
  15416. }
  15417. .deleteImg2 {
  15418. width: 15px !important;
  15419. height: 15px !important;
  15420. top: 5px;
  15421. right: 5px;
  15422. }
  15423. .rightW {
  15424. right: 40px;
  15425. }
  15426. .drawPBox {
  15427. display: flex;
  15428. flex-direction: column;
  15429. position: relative;
  15430. }
  15431. .drawPBox span {
  15432. font-size: 18px;
  15433. color: #606266;
  15434. padding-bottom: 10px;
  15435. margin: 10px 0;
  15436. border-bottom: 1px solid #eaeaea;
  15437. }
  15438. .drawPBox img {
  15439. width: 500px;
  15440. height: 300px;
  15441. object-fit: contain;
  15442. cursor: pointer;
  15443. margin: 0 auto;
  15444. }
  15445. .sentenBox {
  15446. background: #fff;
  15447. height: 450px;
  15448. overflow: auto;
  15449. background-image: url("../../assets/icon/conSentences/stuBg.png");
  15450. background-position: 102%;
  15451. background-repeat: no-repeat;
  15452. background-size: 60%;
  15453. }
  15454. .addSen {
  15455. background: #409efe;
  15456. width: 90px;
  15457. color: #fff;
  15458. height: 35px;
  15459. text-align: center;
  15460. line-height: 35px;
  15461. border-radius: 5px;
  15462. float: right;
  15463. margin: 10px 20px 0 0;
  15464. cursor: pointer;
  15465. }
  15466. .sentenTop {
  15467. display: flex;
  15468. flex-direction: row;
  15469. flex-wrap: nowrap;
  15470. align-items: center;
  15471. padding: 55px 0 0 20px;
  15472. box-sizing: border-box;
  15473. }
  15474. .sentenTop>div:nth-child(2) {
  15475. width: 300px;
  15476. margin: 0 15px;
  15477. }
  15478. .sentenTop>div:nth-child(3) {
  15479. background: #409efe;
  15480. color: #fff;
  15481. width: 65px;
  15482. height: 35px;
  15483. text-align: center;
  15484. line-height: 35px;
  15485. border-radius: 5px;
  15486. cursor: pointer;
  15487. }
  15488. .cardList,
  15489. .cardList1 {
  15490. padding: 10px 0 10px 0;
  15491. display: flex;
  15492. flex-direction: row;
  15493. flex-wrap: wrap;
  15494. align-items: center;
  15495. box-sizing: border-box;
  15496. border-bottom: 1px solid #f4f4f4;
  15497. width: 98%;
  15498. margin: 0 auto;
  15499. min-width: 60%;
  15500. max-width: 85%;
  15501. }
  15502. .cardList1 {
  15503. padding: 10px 0 10px 10px !important;
  15504. margin: 0 !important;
  15505. }
  15506. .cardBox {
  15507. display: flex;
  15508. flex-direction: row;
  15509. flex-wrap: wrap;
  15510. align-items: center;
  15511. align-content: center;
  15512. }
  15513. .cardBox>div {
  15514. margin-bottom: 10px;
  15515. }
  15516. .isCard,
  15517. .isChooseCard,
  15518. .noCard,
  15519. .isCard1 {
  15520. width: 130px;
  15521. height: 60px;
  15522. text-align: center;
  15523. line-height: 60px;
  15524. font-size: 20px;
  15525. cursor: pointer;
  15526. background-image: url("../../assets/icon/conSentences/titleBorder.png");
  15527. background-size: cover;
  15528. transition: all 2s;
  15529. margin-right: 20px;
  15530. }
  15531. .isCard>div,
  15532. .noCard>div,
  15533. .isCard1>div {
  15534. white-space: nowrap;
  15535. overflow: hidden;
  15536. text-overflow: ellipsis;
  15537. width: 75%;
  15538. margin: 0 auto;
  15539. }
  15540. .noCard {
  15541. background-image: none;
  15542. }
  15543. .isCard1 {
  15544. background-image: url("../../assets/icon/conSentences/answerBorder.png");
  15545. }
  15546. .isChooseCard {
  15547. background-image: none;
  15548. border: 1px dashed #b9b9b9;
  15549. border-radius: 10px;
  15550. }
  15551. .card {
  15552. width: 130px;
  15553. height: 60px;
  15554. }
  15555. .card>img {
  15556. width: 100%;
  15557. height: 100%;
  15558. }
  15559. .rightCardBox {
  15560. margin: 10px 0 0 10px;
  15561. }
  15562. .rightCardBox>div:nth-child(1) {
  15563. margin-bottom: 10px;
  15564. }
  15565. .cardCss {
  15566. display: flex;
  15567. flex-direction: column;
  15568. flex-wrap: nowrap;
  15569. align-items: center;
  15570. border-bottom: 3px solid #b4c3d3;
  15571. padding: 0 0 5px 0;
  15572. margin-right: 10px;
  15573. }
  15574. .cardCss>div:nth-child(2) {
  15575. background: #5b7b9d;
  15576. color: #fff;
  15577. width: 20px;
  15578. height: 20px;
  15579. border-radius: 50%;
  15580. text-align: center;
  15581. line-height: 20px;
  15582. }
  15583. .isWrong {
  15584. display: flex;
  15585. flex-direction: row;
  15586. flex-wrap: nowrap;
  15587. align-content: center;
  15588. align-items: center;
  15589. }
  15590. .answerRight {
  15591. width: 25%;
  15592. }
  15593. .isTj {
  15594. display: flex;
  15595. flex-direction: row;
  15596. flex-wrap: nowrap;
  15597. align-items: center;
  15598. }
  15599. .isTj>div:nth-child(2) {
  15600. color: #727070;
  15601. margin-left: 10px;
  15602. }
  15603. .isTjImg {
  15604. width: 30px;
  15605. height: 30px;
  15606. }
  15607. .isTjImg>img {
  15608. width: 100%;
  15609. height: 100%;
  15610. }
  15611. .cardAnswerBox {
  15612. font-size: 18px;
  15613. width: 97%;
  15614. border: 5px;
  15615. padding: 0;
  15616. border-radius: 5px;
  15617. margin: 10px auto;
  15618. word-break: break-word;
  15619. }
  15620. .w_name {
  15621. margin-bottom: 10px;
  15622. }
  15623. .w_name span {
  15624. font-size: 16px;
  15625. }
  15626. .w_teachert {
  15627. width: 50px !important;
  15628. position: absolute;
  15629. height: auto !important;
  15630. z-index: 10;
  15631. right: 25px;
  15632. top: -25px;
  15633. }
  15634. .group_workBox {}
  15635. .group_workBox+.group_workBox {
  15636. margin-top: 20px;
  15637. }
  15638. .group_box {
  15639. padding-bottom: 20px;
  15640. border-bottom: 2px solid #f0f0f0;
  15641. }
  15642. .group_title {
  15643. display: flex;
  15644. align-items: center;
  15645. justify-content: space-between;
  15646. }
  15647. .group_name {
  15648. background-image: url(../../assets/icon/groupN.png);
  15649. width: 220px;
  15650. background-size: 100% 100%;
  15651. height: 67px;
  15652. padding: 0 20px 0 43px;
  15653. box-sizing: border-box;
  15654. line-height: 63px;
  15655. color: #fff;
  15656. overflow: hidden;
  15657. white-space: nowrap;
  15658. text-overflow: ellipsis;
  15659. }
  15660. .group_work {
  15661. width: 100%;
  15662. padding: 0 10px;
  15663. box-sizing: border-box;
  15664. display: flex;
  15665. flex-wrap: wrap;
  15666. }
  15667. .g_d_box {
  15668. display: flex;
  15669. flex-flow: wrap;
  15670. justify-content: space-around;
  15671. }
  15672. .g_d_box .isChair {
  15673. background-image: url(../../assets/avatar.png) !important;
  15674. }
  15675. .g_d_group {
  15676. width: 500px;
  15677. margin-bottom: 80px;
  15678. }
  15679. .g_d_group_chair {
  15680. display: flex;
  15681. align-items: center;
  15682. justify-content: center;
  15683. }
  15684. .g_d_group_chair>div+div {
  15685. margin-left: 30px;
  15686. }
  15687. .g_d_group_chair>div,
  15688. .g_d_group_chair2>div {
  15689. display: flex;
  15690. flex-direction: column;
  15691. align-items: center;
  15692. }
  15693. .g_d_group_chair>div>span:nth-child(1),
  15694. .g_d_group_chair2>div>span:nth-child(1) {
  15695. background-image: url(../../assets/icon/chair.png);
  15696. width: 50px;
  15697. height: 50px;
  15698. display: block;
  15699. background-size: 100% 100%;
  15700. }
  15701. .g_d_group_tableBox {
  15702. display: flex;
  15703. align-items: center;
  15704. justify-content: center;
  15705. }
  15706. .g_d_group_chair2 {
  15707. display: flex;
  15708. flex-direction: column;
  15709. align-items: center;
  15710. justify-content: center;
  15711. }
  15712. .g_d_group_chair2>div+div {
  15713. margin-top: 10px;
  15714. }
  15715. .g_d_group_table {
  15716. background-image: url(../../assets/icon/groupBg.png);
  15717. width: 354px;
  15718. height: 196px;
  15719. background-size: 100% 100%;
  15720. display: flex;
  15721. align-items: center;
  15722. justify-content: center;
  15723. flex-direction: column;
  15724. color: #fff;
  15725. }
  15726. .g_d_group_table>div:nth-child(1) {
  15727. font-size: 24px;
  15728. margin-bottom: 5px;
  15729. }
  15730. .g_d_group_table>div:nth-child(2) div {
  15731. cursor: pointer;
  15732. background: #2e77bf;
  15733. padding: 4px 10px;
  15734. border-radius: 5px;
  15735. }
  15736. .groupBox {}
  15737. .groupContent+.groupContent {
  15738. margin-top: 30px;
  15739. }
  15740. .groupTitle {
  15741. font-size: 24px;
  15742. color: rgb(80, 80, 80);
  15743. margin-bottom: 20px;
  15744. }
  15745. .groupName {
  15746. display: flex;
  15747. align-items: center;
  15748. }
  15749. .groupn {
  15750. font-size: 15px;
  15751. margin-right: 10px;
  15752. }
  15753. .groupName+.groupName {
  15754. margin-top: 15px;
  15755. }
  15756. .groupBtn {
  15757. margin-left: 10px;
  15758. }
  15759. .groupContent>>>.el-input-number.is-without-controls .el-input__inner {
  15760. text-align: left;
  15761. }
  15762. .g_d_btnBox {
  15763. display: flex;
  15764. justify-content: flex-end;
  15765. align-items: flex-end;
  15766. margin-bottom: 20px;
  15767. }
  15768. .updateChair {
  15769. position: relative;
  15770. }
  15771. .updateChairBtn {
  15772. position: absolute;
  15773. width: 50px;
  15774. height: 50px;
  15775. overflow: hidden;
  15776. /* display: flex; */
  15777. align-items: center;
  15778. justify-content: center;
  15779. background: #00000087;
  15780. color: #fff;
  15781. border-radius: 50px;
  15782. display: none;
  15783. cursor: pointer;
  15784. }
  15785. .updateChair:hover .updateChairBtn {
  15786. display: flex;
  15787. }
  15788. .group_staic_box {
  15789. display: flex;
  15790. padding: 30px 40px 10px;
  15791. flex-wrap: wrap;
  15792. }
  15793. .group_staic {
  15794. /* width: 50%; */
  15795. margin-bottom: 20px;
  15796. display: flex;
  15797. align-items: center;
  15798. }
  15799. .group_staic span:nth-child(1) {
  15800. width: 150px;
  15801. text-align: right;
  15802. margin-right: 15px;
  15803. }
  15804. .group_staic span:nth-child(2) {
  15805. background: rgb(0 123 255);
  15806. color: #fff;
  15807. border-radius: 5px;
  15808. padding: 5px;
  15809. }
  15810. .codeFileBox {
  15811. height: 300px;
  15812. background: #fff;
  15813. display: flex;
  15814. align-items: center;
  15815. justify-content: center;
  15816. }
  15817. .codeFileBox img {
  15818. width: 200px;
  15819. margin: 0;
  15820. height: auto;
  15821. }
  15822. .codeFileBox div {
  15823. background: rgb(80, 142, 226);
  15824. color: #fff;
  15825. padding: 10px 20px;
  15826. border-radius: 25px;
  15827. cursor: pointer;
  15828. margin-left: 15px;
  15829. }
  15830. .radioBox {
  15831. display: flex;
  15832. flex-direction: column;
  15833. flex-wrap: nowrap;
  15834. align-items: flex-start;
  15835. }
  15836. .radioBox>div {
  15837. margin: 10px 0 0 10px;
  15838. }
  15839. /* .radioBox >>> .el-radio__input,
  15840. .radioBox >>> .el-checkbox__inner {
  15841. margin-left: 10px;
  15842. } */
  15843. .radioBox>>>.el-radio__label,
  15844. .radioBox>>>.el-checkbox__label {
  15845. display: flex;
  15846. align-items: center;
  15847. }
  15848. .radioBox>>>.el-radio__label>span {
  15849. width: 100%;
  15850. display: -webkit-box;
  15851. overflow: hidden;
  15852. white-space: normal !important;
  15853. text-overflow: ellipsis;
  15854. word-wrap: break-word;
  15855. }
  15856. .inImg {
  15857. width: 100px;
  15858. cursor: pointer;
  15859. }
  15860. .inImg>img {
  15861. width: 100%;
  15862. height: 100%;
  15863. object-fit: cover;
  15864. }
  15865. .timuImgBox {
  15866. margin: 10px 0;
  15867. display: flex;
  15868. flex-direction: column;
  15869. flex-wrap: wrap;
  15870. align-items: flex-start;
  15871. }
  15872. .timuImg {
  15873. width: 150px;
  15874. margin: 5px 0;
  15875. cursor: pointer;
  15876. }
  15877. .timuImg>img {
  15878. width: 100%;
  15879. height: 100%;
  15880. object-fit: cover;
  15881. }
  15882. .worksTop {
  15883. display: flex;
  15884. flex-direction: row;
  15885. align-items: flex-end;
  15886. }
  15887. .corOpen {
  15888. margin: 0 0 0 10px;
  15889. font-size: 14px;
  15890. cursor: pointer;
  15891. color: #505050;
  15892. }
  15893. .corOpen:hover {
  15894. color: #499eef;
  15895. }
  15896. .navCorOpenBox {
  15897. display: flex;
  15898. flex-direction: row;
  15899. align-items: center;
  15900. background: #1e5cc9;
  15901. justify-content: space-between;
  15902. }
  15903. .navCorOpen {
  15904. padding-right: 15px;
  15905. cursor: pointer;
  15906. width: 20px;
  15907. display: flex;
  15908. }
  15909. .navCorOpen>img {
  15910. width: 100%;
  15911. height: 100%;
  15912. }
  15913. .mlImg {
  15914. width: 25px !important;
  15915. cursor: pointer;
  15916. margin-top: 5px;
  15917. }
  15918. .mlImg>img {
  15919. width: 100%;
  15920. height: 100%;
  15921. }
  15922. .navLeftCss {
  15923. width: 100% !important;
  15924. left: 0 !important;
  15925. }
  15926. .isContentCss {
  15927. width: 100% !important;
  15928. }
  15929. .isAllWidth {
  15930. width: 100% !important;
  15931. }
  15932. .toolBoxSteps {
  15933. position: absolute;
  15934. top: 50%;
  15935. transform: translateY(-50%);
  15936. cursor: pointer;
  15937. width: 60px;
  15938. display: flex;
  15939. align-items: center;
  15940. justify-content: center;
  15941. }
  15942. .toolBoxSteps:nth-child(1)>img,
  15943. .toolBoxSteps:nth-child(2)>img {
  15944. width: 24px;
  15945. }
  15946. .toolBoxSteps:nth-child(1) {
  15947. left: 0;
  15948. }
  15949. .toolBoxSteps:nth-child(2) {
  15950. right: 0;
  15951. }
  15952. .isChooseActive {
  15953. color: #3e88f4;
  15954. border-bottom: 2px solid #2f80f3;
  15955. }
  15956. .tool_box {
  15957. width: 100%;
  15958. margin-top: 20px
  15959. }
  15960. .tool_type_box {
  15961. display: flex;
  15962. flex-direction: row;
  15963. align-items: baseline;
  15964. flex-wrap: nowrap;
  15965. justify-content: flex-start;
  15966. position: relative;
  15967. }
  15968. .toolSort {
  15969. display: flex;
  15970. flex-direction: row;
  15971. flex-wrap: wrap;
  15972. justify-content: flex-start;
  15973. align-items: flex-start;
  15974. }
  15975. .toolSort>div {
  15976. margin: 0 45px 0 0;
  15977. width: auto;
  15978. }
  15979. .tools {
  15980. width: 100%;
  15981. display: flex;
  15982. flex-direction: column;
  15983. flex-wrap: nowrap;
  15984. align-items: flex-start;
  15985. }
  15986. .whiteBIcon {
  15987. width: 80px;
  15988. cursor: pointer;
  15989. display: flex;
  15990. flex-direction: column;
  15991. flex-wrap: nowrap;
  15992. align-items: center;
  15993. }
  15994. .whiteBIcon>img {
  15995. width: 100%;
  15996. height: 100%;
  15997. }
  15998. .whiteBIcon>img {
  15999. box-shadow: 0px 4px 8px 0px rgb(44 133 255 / 14%);
  16000. border-radius: 15px;
  16001. }
  16002. .dia_tool_box {
  16003. display: flex;
  16004. flex-wrap: wrap;
  16005. width: 100%;
  16006. }
  16007. .dia_tool_box>div {
  16008. margin-right: 40px;
  16009. }
  16010. .check {
  16011. /* width: 20px;
  16012. height: 20px; */
  16013. cursor: pointer;
  16014. margin: 10px 0;
  16015. }
  16016. .checkDiv {
  16017. display: flex;
  16018. align-items: center;
  16019. }
  16020. .checkDiv span {
  16021. margin-left: 5px;
  16022. color: #858585;
  16023. }
  16024. .check img {
  16025. width: 20px;
  16026. height: 20px;
  16027. }
  16028. .fileC_box > .fileC_title{
  16029. padding: 10px 5px;
  16030. border-top: 1px solid #cdcdcd;
  16031. font-size: 14px;
  16032. color: #868686;
  16033. }
  16034. .pl_select_box {
  16035. height: 40px;
  16036. line-height: 40px;
  16037. width: 100%;
  16038. cursor: pointer;
  16039. padding: 0 20px;
  16040. box-sizing: border-box;
  16041. border-radius: 5px;
  16042. border: 1px solid #d6d6d6;
  16043. white-space: nowrap;
  16044. overflow: hidden;
  16045. text-overflow: ellipsis;
  16046. background: #fff;
  16047. text-align: left;
  16048. }
  16049. </style>